@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
@@ -35,13 +35,13 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
35
35
  import { DefaultTool, EdgelessCRUDIdentifier, TextUtils, } from '../../affine-block-surface/index.js';
36
36
  import { MindmapElementModel, ShapeElementModel, TextFitMode, TextResizing, } from '../../affine-model/index.js';
37
37
  import { ThemeProvider } from '../../affine-shared/services/index.js';
38
- import { getSelectedRect } from '../../affine-shared/utils/index.js';
38
+ import { getSelectedRect, overlayScale, toOverlayCoord, } from '../../affine-shared/utils/index.js';
39
39
  import { BlockSuiteError, ErrorCode } from '../../global/exceptions/index.js';
40
40
  import { Bound, toRadian, Vec } from '../../global/gfx/index.js';
41
41
  import { WithDisposable } from '../../global/lit/index.js';
42
42
  import { ShadowlessElement, stdContext, } from '../../std/index.js';
43
43
  import { GfxControllerIdentifier } from '../../std/gfx/index.js';
44
- import { RANGE_SYNC_EXCLUDE_ATTR } from '../../std/inline/index.js';
44
+ import { InlineEditor, RANGE_SYNC_EXCLUDE_ATTR } from '../../std/inline/index.js';
45
45
  import { consume } from '@lit/context';
46
46
  import { html, nothing } from 'lit';
47
47
  import { property, query } from 'lit/decorators.js';
@@ -160,6 +160,7 @@ let EdgelessShapeTextEditor = (() => {
160
160
  });
161
161
  }
162
162
  _unmount() {
163
+ this._cancelScheduledElementWHUpdate();
163
164
  this._resizeObserver?.disconnect();
164
165
  this._resizeObserver = null;
165
166
  if (this.element.text) {
@@ -180,6 +181,90 @@ let EdgelessShapeTextEditor = (() => {
180
181
  editing: false,
181
182
  });
182
183
  }
184
+ _cancelScheduledElementWHUpdate() {
185
+ if (this._compositionUpdateRaf !== null) {
186
+ cancelAnimationFrame(this._compositionUpdateRaf);
187
+ this._compositionUpdateRaf = null;
188
+ }
189
+ }
190
+ /**
191
+ * While an IME composition is in progress the text is only in the DOM, not
192
+ * yet in the model, so `renderComplete` never fires and the shape keeps the
193
+ * size it had before the user started composing — the preedit string spills
194
+ * out of it. Remeasure once per frame instead, and once more when the
195
+ * composition ends.
196
+ */
197
+ _scheduleElementWHUpdate(flush = false) {
198
+ if (flush) {
199
+ this._cancelScheduledElementWHUpdate();
200
+ this._updateElementWH();
201
+ return;
202
+ }
203
+ if (this._compositionUpdateRaf !== null) {
204
+ return;
205
+ }
206
+ this._compositionUpdateRaf = requestAnimationFrame(() => {
207
+ this._compositionUpdateRaf = null;
208
+ this._updateElementWH();
209
+ });
210
+ }
211
+ _getInlineEditorContentRect() {
212
+ if (!this.inlineEditorContainer) {
213
+ return null;
214
+ }
215
+ const textNodes = InlineEditor.getTextNodesFromElement(this.inlineEditorContainer);
216
+ const firstText = textNodes[0];
217
+ const lastText = textNodes.at(-1);
218
+ if (!firstText || !lastText) {
219
+ return null;
220
+ }
221
+ const range = this.ownerDocument.createRange();
222
+ range.setStart(firstText, 0);
223
+ range.setEnd(lastText, lastText.length);
224
+ const rect = range.getBoundingClientRect();
225
+ return rect.width > 0 || rect.height > 0 ? rect : null;
226
+ }
227
+ /**
228
+ * The size the shape should take, measured on the editor DOM.
229
+ *
230
+ * Without a numeric `maxWidth` the editor box *is* the text box, so its own
231
+ * offset size is the whole measure. Every framework shape (Wardley, EDGY,
232
+ * DDD, Cynefin) is in that case, and takes exactly the path it took before
233
+ * mind map nodes gained a maximum width.
234
+ *
235
+ * With a numeric `maxWidth` the box is capped by CSS and wraps, so
236
+ * `offsetWidth` alone no longer describes the text: a preedit string the
237
+ * browser has not reflowed yet extends past the box it is painted in. Take
238
+ * the widest measure available, then clamp it back to `maxWidth` so the
239
+ * shape never grows past the cap.
240
+ */
241
+ _measureEditorSize(textResizing) {
242
+ const containerWidth = this.richText.offsetWidth;
243
+ const containerHeight = this.richText.offsetHeight;
244
+ const maxWidth = this.element.maxWidth;
245
+ if (typeof maxWidth !== 'number' ||
246
+ textResizing !== TextResizing.AUTO_WIDTH_AND_HEIGHT) {
247
+ return { containerWidth, containerHeight };
248
+ }
249
+ const [verticalPadding, horizontalPadding] = this.element.padding;
250
+ const bcr = this.richText.getBoundingClientRect();
251
+ const contentRect = this._getInlineEditorContentRect();
252
+ const rangeRect = this.inlineEditor
253
+ ?.getNativeRange()
254
+ ?.getBoundingClientRect();
255
+ const contentRectWidth = contentRect != null ? contentRect.width + horizontalPadding * 2 : 0;
256
+ const contentRectHeight = contentRect != null ? contentRect.height + verticalPadding * 2 : 0;
257
+ const rangeWidth = rangeRect != null
258
+ ? Math.max(0, rangeRect.right - bcr.left + horizontalPadding)
259
+ : 0;
260
+ const rangeHeight = rangeRect != null
261
+ ? Math.max(0, rangeRect.bottom - bcr.top + verticalPadding)
262
+ : 0;
263
+ return {
264
+ containerWidth: Math.min(Math.max(containerWidth, contentRectWidth, rangeWidth), maxWidth),
265
+ containerHeight: Math.max(containerHeight, contentRectHeight, rangeHeight),
266
+ };
267
+ }
183
268
  _updateElementWH() {
184
269
  if (this.element.textFitMode !== TextFitMode.Grow) {
185
270
  // Fixed shape bounds: typing never resizes the shape. Contained mode
@@ -194,9 +279,8 @@ let EdgelessShapeTextEditor = (() => {
194
279
  return;
195
280
  }
196
281
  const bcr = this.richText.getBoundingClientRect();
197
- const containerHeight = this.richText.offsetHeight;
198
- const containerWidth = this.richText.offsetWidth;
199
282
  const textResizing = this.element.textResizing;
283
+ const { containerWidth, containerHeight } = this._measureEditorSize(textResizing);
200
284
  if ((containerHeight !== this.element.h &&
201
285
  textResizing === TextResizing.AUTO_HEIGHT) ||
202
286
  (textResizing === TextResizing.AUTO_WIDTH_AND_HEIGHT &&
@@ -214,7 +298,11 @@ let EdgelessShapeTextEditor = (() => {
214
298
  }
215
299
  if (this.isMindMapNode) {
216
300
  const mindmap = this.element.group;
217
- mindmap.layout();
301
+ // Re-place the nodes, but without re-applying the style: that would
302
+ // fit the node back to the text the *model* holds and undo the size
303
+ // just measured from the editor. The full layout runs again when the
304
+ // editor is unmounted.
305
+ mindmap.layout(mindmap.tree, { applyStyle: false });
218
306
  }
219
307
  this.richText.style.minHeight = `${containerHeight}px`;
220
308
  }
@@ -264,6 +352,12 @@ let EdgelessShapeTextEditor = (() => {
264
352
  return;
265
353
  this._unmount();
266
354
  });
355
+ this.disposables.addFromEvent(this.inlineEditorContainer, 'compositionupdate', () => {
356
+ this._scheduleElementWHUpdate();
357
+ });
358
+ this.disposables.addFromEvent(this.inlineEditorContainer, 'compositionend', () => {
359
+ this._scheduleElementWHUpdate(true);
360
+ });
267
361
  })
268
362
  .catch(console.error);
269
363
  this.disposables.addFromEvent(this, 'keydown', evt => {
@@ -293,13 +387,19 @@ let EdgelessShapeTextEditor = (() => {
293
387
  const [verticalPadding, horiPadding] = this.element.padding;
294
388
  const textResizing = this.element.textResizing;
295
389
  const viewport = this.gfx.viewport;
296
- const zoom = viewport.zoom;
390
+ // The editor is mounted inside the container the host may have scaled, so
391
+ // it is placed and scaled the way a gfx block is, not in screen pixels.
392
+ const scale = overlayScale(viewport);
297
393
  const rect = getSelectedRect([this.element]);
298
394
  const rotate = this.element.rotate;
299
395
  const [leftTopX, leftTopY] = Vec.rotWith([rect.left, rect.top], [rect.left + rect.width / 2, rect.top + rect.height / 2], toRadian(rotate));
300
- const [x, y] = this.gfx.viewport.toViewCoord(leftTopX, leftTopY);
396
+ const [x, y] = toOverlayCoord(viewport, leftTopX, leftTopY);
301
397
  const fixedBounds = this.element.textFitMode !== TextFitMode.Grow;
302
398
  const autoWidth = !fixedBounds && textResizing === TextResizing.AUTO_WIDTH_AND_HEIGHT;
399
+ // A shape that grows up to a maximum width wraps instead of running off:
400
+ // `max-content` keeps the intrinsic width the box wants, `max-width` caps
401
+ // it, and the wrapping rules below break the overflowing line.
402
+ const constrainedAutoWidth = autoWidth && typeof this.element.maxWidth === 'number';
303
403
  const color = this.std
304
404
  .get(ThemeProvider)
305
405
  .generateColorProperty(this.element.color, '#000000');
@@ -307,11 +407,15 @@ let EdgelessShapeTextEditor = (() => {
307
407
  position: 'absolute',
308
408
  left: x + 'px',
309
409
  top: y + 'px',
310
- width: autoWidth ? 'fit-content' : rect.width + 'px',
410
+ width: constrainedAutoWidth
411
+ ? 'max-content'
412
+ : autoWidth
413
+ ? 'fit-content'
414
+ : rect.width + 'px',
311
415
  // override rich-text style (height: 100%)
312
416
  height: 'initial',
313
417
  minHeight: autoWidth ? '1em' : `${rect.height}px`,
314
- maxWidth: autoWidth && this.element.maxWidth
418
+ maxWidth: constrainedAutoWidth
315
419
  ? `${this.element.maxWidth}px`
316
420
  : undefined,
317
421
  boxSizing: 'border-box',
@@ -320,7 +424,7 @@ let EdgelessShapeTextEditor = (() => {
320
424
  fontWeight: this.element.fontWeight,
321
425
  lineHeight: 'normal',
322
426
  outline: 'none',
323
- transform: `scale(${zoom}, ${zoom}) rotate(${rotate}deg)`,
427
+ transform: `scale(${scale}, ${scale}) rotate(${rotate}deg)`,
324
428
  transformOrigin: 'top left',
325
429
  color,
326
430
  padding: `${verticalPadding}px ${horiPadding}px`,
@@ -339,9 +443,15 @@ let EdgelessShapeTextEditor = (() => {
339
443
  this._lastXYWH = this.element.xywh;
340
444
  return html ` <style>
341
445
  edgeless-shape-text-editor v-text [data-v-text] {
342
- overflow-wrap: ${autoWidth ? 'normal' : 'anywhere'};
343
- word-break: ${autoWidth ? 'normal' : 'break-word'} !important;
344
- white-space: ${autoWidth ? 'pre' : 'pre-wrap'} !important;
446
+ overflow-wrap: ${autoWidth && !constrainedAutoWidth
447
+ ? 'normal'
448
+ : 'anywhere'};
449
+ word-break: ${autoWidth && !constrainedAutoWidth
450
+ ? 'normal'
451
+ : 'break-word'} !important;
452
+ white-space: ${autoWidth && !constrainedAutoWidth
453
+ ? 'pre'
454
+ : 'pre-wrap'} !important;
345
455
  }
346
456
 
347
457
  edgeless-shape-text-editor .inline-editor {
@@ -369,6 +479,7 @@ let EdgelessShapeTextEditor = (() => {
369
479
  set richText(value) { this.#richText_accessor_storage = value; }
370
480
  constructor() {
371
481
  super(...arguments);
482
+ this._compositionUpdateRaf = null;
372
483
  this._keeping = false;
373
484
  this._lastXYWH = '';
374
485
  this._resizeObserver = null;
@@ -1,7 +1,7 @@
1
1
  import { ViewExtensionProvider, } from '../affine-ext-loader/index.js';
2
- import { ShortcutExtension } from '../std/index.js';
2
+ import { CommandExtension } from '../std/index.js';
3
+ import { shapeCommands } from './commands.js';
3
4
  import { effects } from './effects.js';
4
- import { shapeShortcuts } from './shortcuts.js';
5
5
  import { HighlighterElementRendererExtension, ShapeElementRendererExtension, } from './element-renderer/index.js';
6
6
  import { ShapeDomRendererExtension } from './element-renderer/shape-dom.js';
7
7
  import { ShapeElementView, ShapeViewInteraction } from './element-view.js';
@@ -30,7 +30,7 @@ export class ShapeViewExtension extends ViewExtensionProvider {
30
30
  context.register(shapeToolbarExtension);
31
31
  context.register(ShapeViewInteraction);
32
32
  // Edgeless-scoped, enumerable/rebindable (installer: root view.ts).
33
- context.register(ShortcutExtension(shapeShortcuts));
33
+ context.register(CommandExtension(shapeCommands));
34
34
  }
35
35
  }
36
36
  }
@@ -4,10 +4,12 @@ declare const EdgelessTemplateButton_base: typeof LitElement & import("../../glo
4
4
  export declare class EdgelessTemplateButton extends EdgelessTemplateButton_base {
5
5
  static styles: import("lit").CSSResult;
6
6
  private _cleanup;
7
+ private _autoUpdateCleanup;
7
8
  private _prevTool;
8
9
  enableActiveBackground: boolean;
9
10
  type: typeof TemplateTool;
10
11
  get cards(): import("lit-html").TemplateResult<2>[];
12
+ connectedCallback(): void;
11
13
  private _closePanel;
12
14
  private _togglePanel;
13
15
  render(): import("lit-html").TemplateResult<1>;
@@ -151,10 +151,21 @@ let EdgelessTemplateButton = (() => {
151
151
  const { theme } = this;
152
152
  return [TemplateCard1[theme], TemplateCard2[theme], TemplateCard3[theme]];
153
153
  }
154
+ connectedCallback() {
155
+ super.connectedCallback();
156
+ // The panel can still be open when the button is removed: without this the
157
+ // `autoUpdate` listeners outlive the element and leak.
158
+ this.disposables.add(() => {
159
+ this._autoUpdateCleanup?.();
160
+ this._autoUpdateCleanup = null;
161
+ });
162
+ }
154
163
  _closePanel() {
155
164
  if (this._openedPanel) {
156
165
  this._openedPanel.remove();
157
166
  this._openedPanel = null;
167
+ this._autoUpdateCleanup?.();
168
+ this._autoUpdateCleanup = null;
158
169
  this._cleanup?.();
159
170
  this._cleanup = null;
160
171
  this.requestUpdate();
@@ -188,8 +199,13 @@ let EdgelessTemplateButton = (() => {
188
199
  this._openedPanel = panel;
189
200
  this.renderRoot.append(panel);
190
201
  requestAnimationFrame(() => {
202
+ // The panel may already have been closed before this frame ran; starting
203
+ // a loop on it now would never be stopped.
204
+ if (this._openedPanel !== panel)
205
+ return;
191
206
  const arrowEl = panel.renderRoot.querySelector('.arrow');
192
- autoUpdate(this, panel, () => {
207
+ this._autoUpdateCleanup?.();
208
+ this._autoUpdateCleanup = autoUpdate(this, panel, () => {
193
209
  computePosition(this, panel, {
194
210
  placement: 'top',
195
211
  middleware: [offset(20), arrow({ element: arrowEl }), shift()],
@@ -230,6 +246,7 @@ let EdgelessTemplateButton = (() => {
230
246
  constructor() {
231
247
  super(...arguments);
232
248
  this._cleanup = null;
249
+ this._autoUpdateCleanup = null;
233
250
  this._prevTool = null;
234
251
  this.enableActiveBackground = true;
235
252
  this.type = TemplateTool;
@@ -35,7 +35,7 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
35
35
  import { CanvasElementType, DefaultTool, EdgelessCRUDIdentifier, getSurfaceBlock, TextUtils, } from '../affine-block-surface/index.js';
36
36
  import { DefaultTheme, TextElementModel } from '../affine-model/index.js';
37
37
  import { ThemeProvider } from '../affine-shared/services/index.js';
38
- import { getSelectedRect } from '../affine-shared/utils/index.js';
38
+ import { getSelectedRect, overlayScale, toOverlayCoord, } from '../affine-shared/utils/index.js';
39
39
  import { Bound, toRadian, Vec } from '../global/gfx/index.js';
40
40
  import { WithDisposable } from '../global/lit/index.js';
41
41
  import { ShadowlessElement, stdContext, } from '../std/index.js';
@@ -281,13 +281,17 @@ let EdgelessTextEditor = (() => {
281
281
  const { text, fontFamily, fontSize, fontWeight, fontStyle, textAlign, rotate, hasMaxWidth, w, } = this.element;
282
282
  const lineHeight = getLineHeight(fontFamily, fontSize, fontWeight);
283
283
  const rect = getSelectedRect([this.element]);
284
- const { translateX, translateY, zoom } = this.gfx.viewport;
284
+ const viewport = this.gfx.viewport;
285
285
  const [visualX, visualY] = this.getVisualPosition(this.element);
286
286
  const containerOffset = this.getContainerOffset();
287
+ // The editor is mounted inside the container the host may have scaled, so
288
+ // it is placed and scaled the way a gfx block is, not in screen pixels.
289
+ // Panning the viewport and reaching the element are one and the same
290
+ // translation, which is what `toOverlayCoord` answers.
291
+ const [x, y] = toOverlayCoord(viewport, visualX, visualY);
287
292
  const transformOperation = [
288
- `translate(${translateX}px, ${translateY}px)`,
289
- `translate(${visualX * zoom}px, ${visualY * zoom}px)`,
290
- `scale(${zoom})`,
293
+ `translate(${x}px, ${y}px)`,
294
+ `scale(${overlayScale(viewport)})`,
291
295
  `rotate(${rotate}deg)`,
292
296
  `translate(${containerOffset})`,
293
297
  ];
@@ -1,7 +1,37 @@
1
1
  import { DocModeProvider, TelemetryProvider, } from '../affine-shared/services/index.js';
2
+ function openInlineLatexEditor(inlineEditor, index) {
3
+ inlineEditor
4
+ .waitForUpdate()
5
+ .then(async () => {
6
+ await inlineEditor.waitForUpdate();
7
+ const textPoint = inlineEditor.getTextPoint(index);
8
+ if (!textPoint)
9
+ return;
10
+ const [text] = textPoint;
11
+ const latexNode = text.parentElement?.closest('affine-latex-node');
12
+ if (!latexNode)
13
+ return;
14
+ latexNode.toggleEditor();
15
+ })
16
+ .catch(console.error);
17
+ }
18
+ /**
19
+ * An inline equation can only replace a range living in a single block, so a
20
+ * selection spanning several blocks is refused instead of silently applying to
21
+ * its first block.
22
+ */
23
+ function getSingleBlockInlineRange(textSelection) {
24
+ if (textSelection.to) {
25
+ return null;
26
+ }
27
+ return {
28
+ index: textSelection.from.index,
29
+ length: textSelection.from.length,
30
+ };
31
+ }
2
32
  export const insertInlineLatex = (ctx, next) => {
3
33
  const textSelection = ctx.textSelection ?? ctx.currentTextSelection;
4
- if (!textSelection || !textSelection.isCollapsed())
34
+ if (!textSelection)
5
35
  return;
6
36
  const blockComponent = ctx.std.view.getBlock(textSelection.from.blockId);
7
37
  if (!blockComponent)
@@ -12,18 +42,17 @@ export const insertInlineLatex = (ctx, next) => {
12
42
  const inlineEditor = richText.inlineEditor;
13
43
  if (!inlineEditor)
14
44
  return;
15
- inlineEditor.insertText({
16
- index: textSelection.from.index,
17
- length: 0,
18
- }, ' ');
19
- inlineEditor.formatText({
20
- index: textSelection.from.index,
21
- length: 1,
22
- }, {
23
- latex: '',
24
- });
45
+ const inlineRange = getSingleBlockInlineRange(textSelection);
46
+ if (!inlineRange)
47
+ return;
48
+ // A non-collapsed selection becomes the equation source, so selecting a
49
+ // formula and asking for an inline equation renders what was already typed.
50
+ const latex = textSelection.isCollapsed()
51
+ ? ''
52
+ : inlineEditor.yTextString.slice(inlineRange.index, inlineRange.index + inlineRange.length);
53
+ inlineEditor.insertText(inlineRange, ' ', { latex });
25
54
  inlineEditor.setInlineRange({
26
- index: textSelection.from.index,
55
+ index: inlineRange.index,
27
56
  length: 1,
28
57
  });
29
58
  const mode = ctx.std.get(DocModeProvider).getEditorMode() ?? 'page';
@@ -39,19 +68,10 @@ export const insertInlineLatex = (ctx, next) => {
39
68
  module: 'inline equation',
40
69
  control: 'create inline equation',
41
70
  });
42
- inlineEditor
43
- .waitForUpdate()
44
- .then(async () => {
45
- await inlineEditor.waitForUpdate();
46
- const textPoint = inlineEditor.getTextPoint(textSelection.from.index + 1);
47
- if (!textPoint)
48
- return;
49
- const [text] = textPoint;
50
- const latexNode = text.parentElement?.closest('affine-latex-node');
51
- if (!latexNode)
52
- return;
53
- latexNode.toggleEditor();
54
- })
55
- .catch(console.error);
71
+ // Only an empty equation needs the editor right away; one built from a
72
+ // selection already has its content.
73
+ if (textSelection.isCollapsed()) {
74
+ openInlineLatexEditor(inlineEditor, inlineRange.index + 1);
75
+ }
56
76
  next();
57
77
  };
@@ -2,15 +2,25 @@ import type { AffineTextAttributes } from '../../affine-shared/types/index.js';
2
2
  import { type BlockStdScope, ShadowlessElement } from '../../std/index.js';
3
3
  import { type InlineEditor } from '../../std/inline/index.js';
4
4
  import type { DeltaInsert } from '../../store/index.js';
5
+ import { type PropertyValues } from 'lit';
5
6
  declare const AffineLatexNode_base: typeof ShadowlessElement & import("../../global/utils/types.js").Constructor<import("../../global/lit/with-disposable.js").DisposableClass>;
6
7
  export declare class AffineLatexNode extends AffineLatexNode_base {
7
8
  static styles: import("lit").CSSResult;
8
9
  private _editorAbortController;
10
+ private _isEditorOpen;
9
11
  readonly latex$: import("@preact/signals-core").Signal<string>;
10
12
  readonly latexEditorSignal: import("@preact/signals-core").Signal<string>;
11
13
  get deltaLatex(): string;
12
14
  get latexContainer(): HTMLElement | null;
13
15
  connectedCallback(): void;
16
+ /**
17
+ * The delta is the source of truth: when it changes underneath us (undo, a
18
+ * remote edit, a paste replacing the node) the signals must follow it,
19
+ * otherwise the node keeps painting the equation it was first created with.
20
+ * While the editor is open the user is the source of truth instead, so the
21
+ * in-flight draft is left alone.
22
+ */
23
+ protected updated(changedProperties: PropertyValues<this>): void;
14
24
  render(): import("lit-html").TemplateResult<1>;
15
25
  toggleEditor(): void;
16
26
  get readonly(): boolean;
@@ -203,6 +203,26 @@ let AffineLatexNode = (() => {
203
203
  });
204
204
  return result;
205
205
  }
206
+ /**
207
+ * The delta is the source of truth: when it changes underneath us (undo, a
208
+ * remote edit, a paste replacing the node) the signals must follow it,
209
+ * otherwise the node keeps painting the equation it was first created with.
210
+ * While the editor is open the user is the source of truth instead, so the
211
+ * in-flight draft is left alone.
212
+ */
213
+ updated(changedProperties) {
214
+ super.updated(changedProperties);
215
+ if (!changedProperties.has('delta') || this._isEditorOpen) {
216
+ return;
217
+ }
218
+ const latex = this.deltaLatex;
219
+ if (this.latex$.peek() !== latex) {
220
+ this.latex$.value = latex;
221
+ }
222
+ if (this.latexEditorSignal.peek() !== latex) {
223
+ this.latexEditorSignal.value = latex;
224
+ }
225
+ }
206
226
  render() {
207
227
  return html `<span class="affine-latex" data-selected=${this.selected}
208
228
  ><div class="latex-container"></div>
@@ -237,7 +257,9 @@ let AffineLatexNode = (() => {
237
257
  zIndex: 'var(--affine-z-index-popover)',
238
258
  },
239
259
  });
260
+ this._isEditorOpen = true;
240
261
  this._editorAbortController.signal.addEventListener('abort', () => {
262
+ this._isEditorOpen = false;
241
263
  portal.remove();
242
264
  const latex = this.latexEditorSignal.peek();
243
265
  this.latex$.value = latex;
@@ -279,6 +301,7 @@ let AffineLatexNode = (() => {
279
301
  constructor() {
280
302
  super(...arguments);
281
303
  this._editorAbortController = null;
304
+ this._isEditorOpen = false;
282
305
  this.latex$ = signal('');
283
306
  this.latexEditorSignal = signal('');
284
307
  this.#delta_accessor_storage = __runInitializers(this, _delta_initializers, {
@@ -124,10 +124,13 @@ let AffineLink = (() => {
124
124
  ></a>`;
125
125
  }
126
126
  render() {
127
+ // No `text-decoration` here on purpose: this object is the OVERRIDE handed
128
+ // to `affineTextStyles`, and it is spread last, so any decoration it names
129
+ // would silently erase the one computed from `strike` / `underline`.
130
+ // A plain link still shows none — `affineTextStyles` defaults to 'none'.
127
131
  const linkStyle = {
128
132
  color: 'var(--affine-link-color)',
129
133
  fill: 'var(--affine-link-color)',
130
- 'text-decoration': 'none',
131
134
  cursor: 'pointer',
132
135
  };
133
136
  if (this.delta.attributes && this.delta.attributes?.code) {
@@ -1,6 +1,9 @@
1
1
  export declare const htmlTextToDeltaMatcher: import("../../../store/index.js").ExtensionType & {
2
2
  identifier: import("../../../global/di/types.js").ServiceIdentifier<import("../../../affine-shared/adapters/index.js").HtmlASTToDeltaMatcher>;
3
3
  };
4
+ export declare const htmlColorStyleElementToDeltaMatcher: import("../../../store/index.js").ExtensionType & {
5
+ identifier: import("../../../global/di/types.js").ServiceIdentifier<import("../../../affine-shared/adapters/index.js").HtmlASTToDeltaMatcher>;
6
+ };
4
7
  export declare const htmlTextLikeElementToDeltaMatcher: import("../../../store/index.js").ExtensionType & {
5
8
  identifier: import("../../../global/di/types.js").ServiceIdentifier<import("../../../affine-shared/adapters/index.js").HtmlASTToDeltaMatcher>;
6
9
  };
@@ -1,4 +1,4 @@
1
- import { HtmlASTToDeltaExtension, } from '../../../affine-shared/adapters/index.js';
1
+ import { extractColorFromStyle, HtmlASTToDeltaExtension, resolveNearestSupportedColor, } from '../../../affine-shared/adapters/index.js';
2
2
  import { collapseWhiteSpace } from 'collapse-white-space';
3
3
  /**
4
4
  * Handle empty text nodes created by HTML parser for styling purposes.
@@ -147,6 +147,33 @@ export const htmlTextToDeltaMatcher = HtmlASTToDeltaExtension({
147
147
  return value ? [{ insert: value }] : [];
148
148
  },
149
149
  });
150
+ export const htmlColorStyleElementToDeltaMatcher = HtmlASTToDeltaExtension({
151
+ name: 'color-style-element',
152
+ match: ast => isElement(ast) &&
153
+ ast.tagName === 'span' &&
154
+ typeof ast.properties?.style === 'string' &&
155
+ /color\s*:/i.test(ast.properties.style),
156
+ toDelta: (ast, context) => {
157
+ if (!isElement(ast)) {
158
+ return [];
159
+ }
160
+ const baseOptions = { ...context.options, trim: false };
161
+ // In preformatted contexts (e.g. code blocks) we don't keep inline colors.
162
+ if (baseOptions.pre) {
163
+ return ast.children.flatMap(child => context.toDelta(child, baseOptions));
164
+ }
165
+ const colorValue = extractColorFromStyle(typeof ast.properties?.style === 'string' ? ast.properties.style : '');
166
+ const mappedColor = colorValue
167
+ ? resolveNearestSupportedColor(colorValue)
168
+ : null;
169
+ return ast.children.flatMap(child => context.toDelta(child, baseOptions).map(delta => {
170
+ if (mappedColor) {
171
+ delta.attributes = { ...delta.attributes, color: mappedColor };
172
+ }
173
+ return delta;
174
+ }));
175
+ },
176
+ });
150
177
  export const htmlTextLikeElementToDeltaMatcher = HtmlASTToDeltaExtension({
151
178
  name: 'text-like-element',
152
179
  match: ast => isTextLikeElement(ast),
@@ -251,6 +278,7 @@ export const htmlBrElementToDeltaMatcher = HtmlASTToDeltaExtension({
251
278
  });
252
279
  export const HtmlInlineToDeltaAdapterExtensions = [
253
280
  htmlTextToDeltaMatcher,
281
+ htmlColorStyleElementToDeltaMatcher,
254
282
  htmlTextLikeElementToDeltaMatcher,
255
283
  htmlStrongElementToDeltaMatcher,
256
284
  htmlItalicElementToDeltaMatcher,
@@ -7,6 +7,7 @@ type CodeBlockProps = {
7
7
  caption: string;
8
8
  preview?: boolean;
9
9
  lineNumber?: boolean;
10
+ collapsed?: boolean;
10
11
  comments?: Record<string, boolean>;
11
12
  } & BlockMeta;
12
13
  export declare const CodeBlockSchema: {
@@ -8,6 +8,7 @@ export const CodeBlockSchema = defineBlockSchema({
8
8
  caption: '',
9
9
  preview: undefined,
10
10
  lineNumber: undefined,
11
+ collapsed: undefined,
11
12
  comments: undefined,
12
13
  'meta:createdAt': undefined,
13
14
  'meta:createdBy': undefined,
@@ -225,6 +225,10 @@ let ConnectorElementModel = (() => {
225
225
  */
226
226
  getNearestPoint(point) {
227
227
  const { mode, absolutePath: path } = this;
228
+ // Degraded connector (vanished endpoint): no path to project onto.
229
+ if (path.length === 0) {
230
+ return [this.x, this.y];
231
+ }
228
232
  if (mode === ConnectorMode.Straight) {
229
233
  const first = path[0];
230
234
  const last = path[path.length - 1];
@@ -249,6 +253,10 @@ let ConnectorElementModel = (() => {
249
253
  */
250
254
  getOffsetDistanceByPoint(point, bounds) {
251
255
  const { mode, absolutePath: path } = this;
256
+ // Degraded connector (vanished endpoint): no path to measure along.
257
+ if (path.length === 0) {
258
+ return 0.5;
259
+ }
252
260
  let { x, y, w, h } = this;
253
261
  if (bounds) {
254
262
  x = bounds.x;
@@ -256,6 +264,9 @@ let ConnectorElementModel = (() => {
256
264
  w = bounds.w;
257
265
  h = bounds.h;
258
266
  }
267
+ if (path.length === 0) {
268
+ return 0.5;
269
+ }
259
270
  point[0] = Vec.clamp(point[0], x, x + w);
260
271
  point[1] = Vec.clamp(point[1], y, y + h);
261
272
  if (mode === ConnectorMode.Straight) {
@@ -282,6 +293,11 @@ let ConnectorElementModel = (() => {
282
293
  */
283
294
  getPointByOffsetDistance(offsetDistance = 0.5, bounds) {
284
295
  const { mode, absolutePath: path } = this;
296
+ // Degraded connector (vanished endpoint): fall back to the bound center.
297
+ if (path.length === 0) {
298
+ const b = bounds ?? this;
299
+ return [b.x + b.w / 2, b.y + b.h / 2];
300
+ }
285
301
  if (mode === ConnectorMode.Straight) {
286
302
  const first = path[0];
287
303
  const last = path[path.length - 1];
@@ -294,6 +310,9 @@ let ConnectorElementModel = (() => {
294
310
  w = bounds.w;
295
311
  h = bounds.h;
296
312
  }
313
+ if (path.length === 0) {
314
+ return [x + w / 2, y + h / 2];
315
+ }
297
316
  if (mode === ConnectorMode.Orthogonal) {
298
317
  const points = path.map(p => [p[0], p[1]]);
299
318
  const point = Polyline.pointAt(points, offsetDistance);
@@ -323,6 +342,11 @@ let ConnectorElementModel = (() => {
323
342
  return true;
324
343
  }
325
344
  const { mode, strokeWidth, absolutePath: path } = this;
345
+ // Degraded connector (vanished endpoint): nothing painted, nothing hit.
346
+ // The label check above still applies if a label is displayed.
347
+ if (path.length === 0) {
348
+ return false;
349
+ }
326
350
  const point = mode === ConnectorMode.Curve
327
351
  ? getBezierNearestPoint(getBezierParameters(path), currentPoint)
328
352
  : polyLineNearestPoint(path, currentPoint);