@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
@@ -1,6 +1,68 @@
1
1
  import { EdgelessCRUDIdentifier } from '../../affine-block-surface/index.js';
2
2
  import { MindmapElementModel, } from '../../affine-model/index.js';
3
- import { GfxControllerIdentifier } from '../../std/gfx/index.js';
3
+ import { batchAddChildren, batchRemoveChildren, generateKeyBetween, generateNKeysBetween, GfxControllerIdentifier, measureOperation, } from '../../std/gfx/index.js';
4
+ /**
5
+ * Every element that sits at the root of the board, in painting order.
6
+ */
7
+ const getTopLevelOrderedElements = (gfx) => {
8
+ const topLevelElements = gfx.layer.layers.reduce((elements, layer) => {
9
+ layer.elements.forEach(element => {
10
+ if (element.group === null) {
11
+ elements.push(element);
12
+ }
13
+ });
14
+ return elements;
15
+ }, []);
16
+ topLevelElements.sort((a, b) => gfx.layer.compare(a, b));
17
+ return topLevelElements;
18
+ };
19
+ /**
20
+ * The indexes the children of an ungrouped group should take: the slot the
21
+ * group itself occupied, so that everything it contained stays where the user
22
+ * last saw it instead of jumping to the top of the stack.
23
+ *
24
+ * The fallbacks go from "the exact slot" to "always valid", because the
25
+ * interval between the two siblings can be unusable — a document written by an
26
+ * older version, or two siblings sharing an index.
27
+ */
28
+ const buildUngroupIndexes = (orderedElements, afterIndex, beforeIndex, fallbackAnchorIndex) => {
29
+ if (orderedElements.length === 0) {
30
+ return [];
31
+ }
32
+ const count = orderedElements.length;
33
+ const tryGenerateN = (left, right) => {
34
+ try {
35
+ const generated = generateNKeysBetween(left, right, count);
36
+ return generated.length === count ? generated : null;
37
+ }
38
+ catch {
39
+ return null;
40
+ }
41
+ };
42
+ const tryGenerateOneByOne = (left, right) => {
43
+ try {
44
+ let cursor = left;
45
+ return orderedElements.map(() => {
46
+ cursor = generateKeyBetween(cursor, right);
47
+ return cursor;
48
+ });
49
+ }
50
+ catch {
51
+ return null;
52
+ }
53
+ };
54
+ // Preferred: keep ungrouped children in the original group slot.
55
+ return (tryGenerateN(afterIndex, beforeIndex) ??
56
+ // Fallback: ignore the upper bound when legacy/broken data has reversed interval.
57
+ tryGenerateN(afterIndex, null) ??
58
+ // Fallback: use group index as anchor when sibling interval is unavailable.
59
+ tryGenerateN(fallbackAnchorIndex, null) ??
60
+ // Last resort: always valid.
61
+ tryGenerateN(null, null) ??
62
+ // Defensive fallback for unexpected library behavior.
63
+ tryGenerateOneByOne(null, null) ??
64
+ []);
65
+ };
4
66
  export const createGroupCommand = (ctx, next) => {
5
67
  const { std, elements } = ctx;
6
68
  const gfx = std.get(GfxControllerIdentifier);
@@ -20,73 +82,99 @@ export const createGroupCommand = (ctx, next) => {
20
82
  next({ groupId });
21
83
  };
22
84
  export const createGroupFromSelectedCommand = (ctx, next) => {
23
- const { std } = ctx;
24
- const gfx = std.get(GfxControllerIdentifier);
25
- const { selection, surface } = gfx;
26
- if (!surface) {
27
- return;
28
- }
29
- if (selection.selectedElements.length === 0 ||
30
- !selection.selectedElements.every(element => element.group === selection.firstElement.group &&
31
- !(element.group instanceof MindmapElementModel))) {
32
- return;
33
- }
34
- const parent = selection.firstElement.group;
35
- if (parent !== null) {
36
- selection.selectedElements.forEach(element => {
37
- // oxlint-disable-next-line unicorn/prefer-dom-node-remove
38
- parent.removeChild(element);
85
+ measureOperation('edgeless:create-group-from-selected', () => {
86
+ const { std } = ctx;
87
+ const gfx = std.get(GfxControllerIdentifier);
88
+ const { selection, surface } = gfx;
89
+ if (!surface) {
90
+ return;
91
+ }
92
+ // Guarded BEFORE the child rewrites below: they write through raw
93
+ // transactions, and `crud.addElement` would refuse afterwards — leaving the
94
+ // selection orphaned from its parent group on a readonly board.
95
+ if (std.store.readonly) {
96
+ return;
97
+ }
98
+ if (selection.selectedElements.length === 0 ||
99
+ !selection.selectedElements.every(element => element.group === selection.firstElement.group &&
100
+ !(element.group instanceof MindmapElementModel))) {
101
+ return;
102
+ }
103
+ const parent = selection.firstElement.group;
104
+ const selectedElements = [...selection.selectedElements];
105
+ let groupId;
106
+ // One transaction for the whole regrouping, so a single undo takes the
107
+ // board back to where it was.
108
+ std.store.transact(() => {
109
+ const [_, result] = std.command.exec(createGroupCommand, {
110
+ elements: selectedElements,
111
+ });
112
+ if (!result.groupId) {
113
+ return;
114
+ }
115
+ groupId = result.groupId;
116
+ const group = surface.getElementById(groupId);
117
+ if (parent !== null && group) {
118
+ batchRemoveChildren(parent, selectedElements);
119
+ batchAddChildren(parent, [group]);
120
+ }
39
121
  });
40
- }
41
- const [_, result] = std.command.exec(createGroupCommand, {
42
- elements: selection.selectedElements,
43
- });
44
- if (!result.groupId) {
45
- return;
46
- }
47
- const group = surface.getElementById(result.groupId);
48
- if (parent !== null && group) {
49
- parent.addChild(group);
50
- }
51
- selection.set({
52
- editing: false,
53
- elements: [result.groupId],
122
+ if (!groupId) {
123
+ return;
124
+ }
125
+ selection.set({
126
+ editing: false,
127
+ elements: [groupId],
128
+ });
129
+ next({ groupId });
54
130
  });
55
- next({ groupId: result.groupId });
56
131
  };
57
132
  export const ungroupCommand = (ctx, next) => {
58
- const { std, group } = ctx;
59
- const gfx = std.get(GfxControllerIdentifier);
60
- const { selection } = gfx;
61
- const parent = group.group;
62
- const elements = group.childElements;
63
- if (group instanceof MindmapElementModel) {
64
- return;
65
- }
66
- if (parent !== null) {
67
- // oxlint-disable-next-line unicorn/prefer-dom-node-remove
68
- parent.removeChild(group);
69
- }
70
- elements.forEach(element => {
71
- // oxlint-disable-next-line unicorn/prefer-dom-node-remove
72
- group.removeChild(element);
73
- });
74
- // keep relative index order of group children after ungroup
75
- elements
76
- .sort((a, b) => gfx.layer.compare(a, b))
77
- .forEach(element => {
133
+ measureOperation('edgeless:ungroup', () => {
134
+ const { std, group } = ctx;
135
+ const gfx = std.get(GfxControllerIdentifier);
136
+ const { selection } = gfx;
137
+ const parent = group.group;
138
+ const elements = [...group.childElements];
139
+ if (group instanceof MindmapElementModel) {
140
+ return;
141
+ }
142
+ // The child rewrites and the index rewrites below are raw transactions.
143
+ if (std.store.readonly) {
144
+ return;
145
+ }
146
+ const orderedElements = [...elements].sort((a, b) => gfx.layer.compare(a, b));
147
+ const siblings = parent
148
+ ? [...parent.childElements].sort((a, b) => gfx.layer.compare(a, b))
149
+ : getTopLevelOrderedElements(gfx);
150
+ const groupPosition = siblings.indexOf(group);
151
+ const beforeSiblingIndex = groupPosition > 0 ? (siblings[groupPosition - 1]?.index ?? null) : null;
152
+ const afterSiblingIndex = groupPosition === -1
153
+ ? null
154
+ : (siblings[groupPosition + 1]?.index ?? null);
155
+ const nextIndexes = buildUngroupIndexes(orderedElements, beforeSiblingIndex, afterSiblingIndex, group.index);
156
+ // One transaction for the whole ungrouping: opening one per child made a
157
+ // single undo put a single child back.
78
158
  std.store.transact(() => {
79
- element.index = gfx.layer.generateIndex();
159
+ if (parent !== null) {
160
+ batchRemoveChildren(parent, [group]);
161
+ }
162
+ batchRemoveChildren(group, elements);
163
+ // keep relative index order of group children after ungroup
164
+ orderedElements.forEach((element, idx) => {
165
+ const index = nextIndexes[idx];
166
+ if (element.index !== index) {
167
+ element.index = index;
168
+ }
169
+ });
170
+ if (parent !== null) {
171
+ batchAddChildren(parent, orderedElements);
172
+ }
80
173
  });
81
- });
82
- if (parent !== null) {
83
- elements.forEach(element => {
84
- parent.addChild(element);
174
+ selection.set({
175
+ editing: false,
176
+ elements: orderedElements.map(ele => ele.id),
85
177
  });
86
- }
87
- selection.set({
88
- editing: false,
89
- elements: elements.map(ele => ele.id),
178
+ next();
90
179
  });
91
- next();
92
180
  };
@@ -33,6 +33,7 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
33
33
  return useValue ? value : void 0;
34
34
  };
35
35
  import { DefaultTool } from '../../affine-block-surface/index.js';
36
+ import { toOverlayCoord } from '../../affine-shared/utils/index.js';
36
37
  import { BlockSuiteError, ErrorCode } from '../../global/exceptions/index.js';
37
38
  import { Bound } from '../../global/gfx/index.js';
38
39
  import { WithDisposable } from '../../global/lit/index.js';
@@ -156,7 +157,9 @@ let EdgelessGroupTitleEditor = (() => {
156
157
  }
157
158
  const viewport = this.gfx.viewport;
158
159
  const bound = Bound.deserialize(this.group.externalXYWH);
159
- const [x, y] = viewport.toViewCoord(bound.x, bound.y);
160
+ // The editor is mounted inside the container the host may have scaled, so
161
+ // it is placed the way the title it replaces is, not in screen pixels.
162
+ const [x, y] = toOverlayCoord(viewport, bound.x, bound.y);
160
163
  const inlineEditorStyle = styleMap({
161
164
  transformOrigin: 'top left',
162
165
  borderRadius: '2px',
@@ -7,10 +7,26 @@ export type PanToolOption = {
7
7
  export declare class PanTool extends BaseTool<PanToolOption> {
8
8
  static toolName: string;
9
9
  private _lastPoint;
10
+ /**
11
+ * Set while a finger drag has borrowed the pan tool; calling it gives the
12
+ * previous tool — and the selection it was holding — back.
13
+ */
14
+ private _fingerPanRestore;
10
15
  readonly panning$: Signal<boolean>;
11
16
  get allowDragWithRightButton(): boolean;
12
17
  dragEnd(_: PointerEventState): void;
13
18
  dragMove(e: PointerEventState): void;
14
19
  dragStart(e: PointerEventState): void;
15
20
  mounted(): void;
21
+ /**
22
+ * Activate the pan tool for the duration of a gesture.
23
+ *
24
+ * @returns a function restoring the previous tool and the selection it was
25
+ * holding, or `null` when the pan tool is already the user's own choice —
26
+ * there is then nothing to restore.
27
+ */
28
+ private _borrowPanTool;
29
+ private _releaseFingerPan;
30
+ /** Whether this drag is a bare finger sliding over empty canvas. */
31
+ private _shouldPanWithFinger;
16
32
  }
@@ -2,10 +2,19 @@ import { EdgelessLegacySlotIdentifier } from '../../affine-block-surface/index.j
2
2
  import { on } from '../../affine-shared/utils/index.js';
3
3
  import { BaseTool, MouseButton } from '../../std/gfx/index.js';
4
4
  import { Signal } from '@preact/signals-core';
5
+ /** The presentation tool, named here because it is not importable from gfx. */
6
+ const PRESENT_TOOL_NAME = 'frameNavigator';
7
+ /** The selection tool, named here because it is not importable from gfx. */
8
+ const DEFAULT_TOOL_NAME = 'default';
5
9
  export class PanTool extends BaseTool {
6
10
  constructor() {
7
11
  super(...arguments);
8
12
  this._lastPoint = null;
13
+ /**
14
+ * Set while a finger drag has borrowed the pan tool; calling it gives the
15
+ * previous tool — and the selection it was holding — back.
16
+ */
17
+ this._fingerPanRestore = null;
9
18
  this.panning$ = new Signal(false);
10
19
  }
11
20
  static { this.toolName = 'pan'; }
@@ -15,6 +24,7 @@ export class PanTool extends BaseTool {
15
24
  dragEnd(_) {
16
25
  this._lastPoint = null;
17
26
  this.panning$.value = false;
27
+ this._releaseFingerPan();
18
28
  }
19
29
  dragMove(e) {
20
30
  if (!this._lastPoint)
@@ -37,45 +47,105 @@ export class PanTool extends BaseTool {
37
47
  if (!shouldPanWithMiddle) {
38
48
  return;
39
49
  }
40
- evt.raw.preventDefault();
41
- const currentTool = this.controller.currentToolOption$.peek();
42
- const restoreToPrevious = () => {
43
- const { toolType, options: originalToolOptions } = currentTool;
44
- const selectionToRestore = this.gfx.selection.surfaceSelections;
45
- if (!toolType)
46
- return;
47
- let finalOptions = originalToolOptions;
48
- const PRESENT_TOOL_NAME = 'frameNavigator';
49
- if (toolType.toolName === PRESENT_TOOL_NAME) {
50
- // When restoring PresentTool (frameNavigator) after a temporary pan (e.g., via middle mouse button),
51
- // set 'restoredAfterPan' to true. This allows PresentTool to avoid an unwanted viewport reset
52
- // and maintain the panned position.
53
- const currentPresentOptions = originalToolOptions;
54
- finalOptions = {
55
- ...currentPresentOptions,
56
- restoredAfterPan: true,
57
- };
58
- }
59
- this.controller.setTool(toolType, finalOptions);
60
- this.gfx.selection.set(selectionToRestore);
61
- };
62
- // If in presentation mode, disable black background after middle mouse drag
63
- if (currentTool.toolType?.toolName === 'frameNavigator') {
64
- const slots = this.std.get(EdgelessLegacySlotIdentifier);
65
- slots.navigatorSettingUpdated.next({
66
- blackBackground: false,
67
- });
50
+ const restoreToPrevious = this._borrowPanTool();
51
+ // Already panning — the pan tool is the user's own choice, not a
52
+ // temporary borrow. There is nothing to switch to and nothing to
53
+ // restore, so stay out of the way and let the gesture through.
54
+ if (!restoreToPrevious) {
55
+ return;
68
56
  }
69
- this.controller.setTool(PanTool, {
70
- panning: true,
71
- });
57
+ evt.raw.preventDefault();
72
58
  const dispose = on(document, 'pointerup', evt => {
73
59
  if (evt.button === MouseButton.MIDDLE) {
74
60
  restoreToPrevious();
75
- dispose();
76
61
  }
62
+ // Whatever button ended the gesture, this listener has done its job:
63
+ // release it, or a right-click after a middle-click would leave it
64
+ // hanging on `document` and restore a stale tool later on.
65
+ dispose();
77
66
  });
78
67
  return false;
79
68
  });
69
+ // A finger dragging bare canvas slides the canvas, the way every touch
70
+ // surface behaves. Borrowing happens on `dragStart`, not on `pointerDown`:
71
+ // a tap must stay a tap, and the selection tool is still the one that has
72
+ // to answer it. The `dragStart` hook runs BEFORE the controller resolves
73
+ // which tool receives the event, so the pan tool below gets the whole
74
+ // gesture — moves and end alike.
75
+ this.addHook('dragStart', evt => {
76
+ if (!this._shouldPanWithFinger(evt))
77
+ return;
78
+ this._fingerPanRestore = this._borrowPanTool();
79
+ });
80
+ }
81
+ /**
82
+ * Activate the pan tool for the duration of a gesture.
83
+ *
84
+ * @returns a function restoring the previous tool and the selection it was
85
+ * holding, or `null` when the pan tool is already the user's own choice —
86
+ * there is then nothing to restore.
87
+ */
88
+ _borrowPanTool() {
89
+ const { toolType, options: originalToolOptions } = this.controller.currentToolOption$.peek();
90
+ if (toolType?.toolName === PanTool.toolName) {
91
+ return null;
92
+ }
93
+ // Snapshot the selection NOW. Activating the pan tool below goes through
94
+ // `ToolController.setTool`, which clears the selection, so reading it
95
+ // back at the end of the gesture would only ever restore an empty one.
96
+ const selectionToRestore = this.gfx.selection.surfaceSelections.slice();
97
+ const restoreToPrevious = () => {
98
+ if (!toolType)
99
+ return;
100
+ let finalOptions = originalToolOptions;
101
+ if (toolType.toolName === PRESENT_TOOL_NAME) {
102
+ // When restoring PresentTool (frameNavigator) after a temporary pan (e.g., via middle mouse button),
103
+ // set 'restoredAfterPan' to true. This allows PresentTool to avoid an unwanted viewport reset
104
+ // and maintain the panned position.
105
+ const currentPresentOptions = originalToolOptions;
106
+ finalOptions = {
107
+ ...currentPresentOptions,
108
+ restoredAfterPan: true,
109
+ };
110
+ }
111
+ this.controller.setTool(toolType, finalOptions);
112
+ // AFTER the switch, never before: `setTool` clears the selection.
113
+ this.gfx.selection.set(selectionToRestore);
114
+ };
115
+ // If in presentation mode, disable black background after middle mouse drag
116
+ if (toolType?.toolName === PRESENT_TOOL_NAME) {
117
+ const slots = this.std.get(EdgelessLegacySlotIdentifier);
118
+ slots.navigatorSettingUpdated.next({
119
+ blackBackground: false,
120
+ });
121
+ }
122
+ this.controller.setTool(PanTool, {
123
+ panning: true,
124
+ });
125
+ return restoreToPrevious;
126
+ }
127
+ _releaseFingerPan() {
128
+ const restore = this._fingerPanRestore;
129
+ this._fingerPanRestore = null;
130
+ restore?.();
131
+ }
132
+ /** Whether this drag is a bare finger sliding over empty canvas. */
133
+ _shouldPanWithFinger(e) {
134
+ // A second finger is a two-finger gesture — pan or pinch — and the
135
+ // edgeless root answers those itself. It never reaches here anyway: the
136
+ // drag controller ends the drag as soon as a non-primary pointer lands.
137
+ if (e.raw.pointerType !== 'touch' || !e.raw.isPrimary)
138
+ return false;
139
+ // Only the selection tool lends its gesture away. Every other tool —
140
+ // brush, shape, connector, the framework tools — draws on empty canvas,
141
+ // and a finger is precisely how it is meant to draw.
142
+ const { toolType } = this.controller.currentToolOption$.peek();
143
+ if (toolType?.toolName !== DEFAULT_TOOL_NAME)
144
+ return false;
145
+ // A finger landing on something moves that something; only bare canvas
146
+ // slides. This is what keeps dragging a Wardley or EDGY element by hand
147
+ // working.
148
+ const [modelX, modelY] = this.gfx.viewport.toModelCoord(e.x, e.y);
149
+ return !this.gfx.getElementByPoint(modelX, modelY);
80
150
  }
81
151
  }
@@ -0,0 +1,2 @@
1
+ import type { CommandDescriptor } from '../std/index.js';
2
+ export declare const shapeCommands: CommandDescriptor[];
@@ -0,0 +1,33 @@
1
+ import { ShapeElementModel, TextFitMode } from '../affine-model/index.js';
2
+ import { GfxControllerIdentifier } from '../std/gfx/index.js';
3
+ import { applyTextFitMode, nextTextFitMode } from './text-fit.js';
4
+ /**
5
+ * Shape commands (edgeless scope, always-on — shapes are core canvas), so
6
+ * `owner: 'core'` rather than a framework. Host-rebindable through
7
+ * `ShortcutOverrides` exactly as before (`docs/adr/0008`).
8
+ */
9
+ /** The selected shapes that carry text — the ones the gesture would cycle. */
10
+ const textShapes = (std) => std
11
+ .get(GfxControllerIdentifier)
12
+ .selection.selectedElements.filter((el) => el instanceof ShapeElementModel && !!el.text);
13
+ export const shapeCommands = [
14
+ {
15
+ id: 'shape.cycleTextFit',
16
+ owner: 'core',
17
+ kind: 'action',
18
+ labelKey: 'com.labre.keyboardShortcuts.shape.cycleTextFit',
19
+ labelFallback: 'Cycle text fit',
20
+ surfaces: ['palette', 'agent'],
21
+ scope: 'edgeless',
22
+ defaultKeys: { mac: ['Mod-Shift-f'], other: ['Mod-Shift-f'] },
23
+ availability: 'selection',
24
+ when: std => textShapes(std).length > 0,
25
+ run: std => {
26
+ const models = textShapes(std);
27
+ if (!models.length)
28
+ return;
29
+ const mode = models[0].textFitMode ?? TextFitMode.Grow;
30
+ applyTextFitMode(std, models, nextTextFitMode(mode));
31
+ },
32
+ },
33
+ ];
@@ -1,17 +1,52 @@
1
1
  import { DefaultTheme } from '../../../affine-model/index.js';
2
2
  import { SVGShapeBuilder } from '../../../global/gfx/index.js';
3
3
  import { manageClassNames, setStyles } from './utils.js';
4
+ const SVG_NS = 'http://www.w3.org/2000/svg';
5
+ /**
6
+ * The nodes a shape host already owns, kept across renders. Rebuilding the
7
+ * `<svg>` on every frame made each pan or zoom allocate a fresh element per
8
+ * shape on the board; the attributes are cheap to overwrite in place.
9
+ */
10
+ const retainedShapeDom = new WeakMap();
11
+ function getRetainedShapeDom(element) {
12
+ const existing = retainedShapeDom.get(element);
13
+ if (existing) {
14
+ return existing;
15
+ }
16
+ const retained = {
17
+ svg: null,
18
+ polygon: null,
19
+ };
20
+ retainedShapeDom.set(element, retained);
21
+ return retained;
22
+ }
23
+ function getOrCreateSvg(retained, element) {
24
+ if (retained.svg && retained.polygon) {
25
+ return {
26
+ svg: retained.svg,
27
+ polygon: retained.polygon,
28
+ };
29
+ }
30
+ const svg = document.createElementNS(SVG_NS, 'svg');
31
+ svg.setAttribute('width', '100%');
32
+ svg.setAttribute('height', '100%');
33
+ svg.setAttribute('preserveAspectRatio', 'none');
34
+ const polygon = document.createElementNS(SVG_NS, 'polygon');
35
+ svg.append(polygon);
36
+ retained.svg = svg;
37
+ retained.polygon = polygon;
38
+ element.prepend(svg);
39
+ return { svg, polygon };
40
+ }
41
+ function removeSvg(retained) {
42
+ retained.svg?.remove();
43
+ retained.svg = null;
44
+ retained.polygon = null;
45
+ }
4
46
  function applyShapeSpecificStyles(model, element, zoom) {
5
47
  // Reset properties that might be set by different shape types
6
48
  element.style.removeProperty('clip-path');
7
49
  element.style.removeProperty('border-radius');
8
- // Clear DOM for shapes that don't use SVG, or if type changes from SVG-based to non-SVG-based
9
- if (model.shapeType !== 'diamond' &&
10
- model.shapeType !== 'triangle' &&
11
- model.shapeType !== 'polygon') {
12
- while (element.firstChild)
13
- element.firstChild.remove();
14
- }
15
50
  switch (model.shapeType) {
16
51
  case 'rect': {
17
52
  const w = model.w * zoom;
@@ -91,6 +126,7 @@ export const shapeDomRenderer = (model, element, renderer) => {
91
126
  const { zoom } = renderer.viewport;
92
127
  const unscaledWidth = model.w;
93
128
  const unscaledHeight = model.h;
129
+ const retained = getRetainedShapeDom(element);
94
130
  const fillColor = renderer.getColorValue(model.fillColor, DefaultTheme.shapeFillColor, true);
95
131
  const strokeColor = renderer.getColorValue(model.strokeColor, DefaultTheme.shapeStrokeColor, true);
96
132
  element.style.width = `${unscaledWidth * zoom}px`;
@@ -104,6 +140,7 @@ export const shapeDomRenderer = (model, element, renderer) => {
104
140
  // For diamond and triangle, fill and border are handled by inline SVG
105
141
  element.style.border = 'none'; // Ensure no standard CSS border interferes
106
142
  element.style.backgroundColor = 'transparent'; // Host element is transparent
143
+ const { polygon, svg } = getOrCreateSvg(retained, element);
107
144
  const strokeW = model.strokeWidth;
108
145
  let svgPoints = '';
109
146
  if (model.shapeType === 'diamond') {
@@ -140,14 +177,7 @@ export const shapeDomRenderer = (model, element, renderer) => {
140
177
  : 'none';
141
178
  // Determine fill color
142
179
  const finalFillColor = model.filled ? fillColor : 'transparent';
143
- // Build SVG safely with DOM-API
144
- const SVG_NS = 'http://www.w3.org/2000/svg';
145
- const svg = document.createElementNS(SVG_NS, 'svg');
146
- svg.setAttribute('width', '100%');
147
- svg.setAttribute('height', '100%');
148
180
  svg.setAttribute('viewBox', `0 0 ${unscaledWidth} ${unscaledHeight}`);
149
- svg.setAttribute('preserveAspectRatio', 'none');
150
- const polygon = document.createElementNS(SVG_NS, 'polygon');
151
181
  polygon.setAttribute('points', svgPoints);
152
182
  polygon.setAttribute('fill', finalFillColor);
153
183
  polygon.setAttribute('stroke', finalStrokeColor);
@@ -155,18 +185,17 @@ export const shapeDomRenderer = (model, element, renderer) => {
155
185
  if (finalStrokeDasharray !== 'none') {
156
186
  polygon.setAttribute('stroke-dasharray', finalStrokeDasharray);
157
187
  }
158
- svg.append(polygon);
159
- // Replace existing children to avoid memory leaks
160
- element.replaceChildren(svg);
188
+ else {
189
+ polygon.removeAttribute('stroke-dasharray');
190
+ }
161
191
  }
162
192
  else {
163
193
  // Standard rendering for other shapes (e.g., rect, ellipse)
164
- // innerHTML was already cleared by applyShapeSpecificStyles if necessary
194
+ removeSvg(retained);
165
195
  element.style.backgroundColor = model.filled ? fillColor : 'transparent';
166
196
  applyBorderStyles(model, element, strokeColor, zoom); // Uses standard CSS border
167
197
  }
168
198
  applyTransformStyles(model, element);
169
- element.style.zIndex = renderer.layerManager.getZIndex(model).toString();
170
199
  manageClassNames(model, element);
171
200
  applyShadowStyles(model, element, renderer);
172
201
  };
@@ -6,7 +6,7 @@ export * from './element-view.js';
6
6
  export * from './overlay/index.js';
7
7
  export * from './polygon-tool.js';
8
8
  export * from './shape-tool.js';
9
- export * from './shortcuts.js';
9
+ export * from './commands.js';
10
10
  export * from './text/index.js';
11
11
  export * from './text-fit.js';
12
12
  export * from './toolbar/index.js';
@@ -6,7 +6,7 @@ export * from './element-view.js';
6
6
  export * from './overlay/index.js';
7
7
  export * from './polygon-tool.js';
8
8
  export * from './shape-tool.js';
9
- export * from './shortcuts.js';
9
+ export * from './commands.js';
10
10
  export * from './text/index.js';
11
11
  export * from './text-fit.js';
12
12
  export * from './toolbar/index.js';
@@ -5,6 +5,7 @@ import { nothing } from 'lit';
5
5
  export declare function mountShapeTextEditor(shapeElement: ShapeElementModel, edgeless: BlockComponent): void;
6
6
  declare const EdgelessShapeTextEditor_base: typeof ShadowlessElement & import("../../global/utils/types.js").Constructor<import("../../global/lit/with-disposable.js").DisposableClass>;
7
7
  export declare class EdgelessShapeTextEditor extends EdgelessShapeTextEditor_base {
8
+ private _compositionUpdateRaf;
8
9
  private _keeping;
9
10
  private _lastXYWH;
10
11
  private _resizeObserver;
@@ -17,6 +18,31 @@ export declare class EdgelessShapeTextEditor extends EdgelessShapeTextEditor_bas
17
18
  private _initMindmapKeyBindings;
18
19
  private _stashMindMapTree;
19
20
  private _unmount;
21
+ private _cancelScheduledElementWHUpdate;
22
+ /**
23
+ * While an IME composition is in progress the text is only in the DOM, not
24
+ * yet in the model, so `renderComplete` never fires and the shape keeps the
25
+ * size it had before the user started composing — the preedit string spills
26
+ * out of it. Remeasure once per frame instead, and once more when the
27
+ * composition ends.
28
+ */
29
+ private _scheduleElementWHUpdate;
30
+ private _getInlineEditorContentRect;
31
+ /**
32
+ * The size the shape should take, measured on the editor DOM.
33
+ *
34
+ * Without a numeric `maxWidth` the editor box *is* the text box, so its own
35
+ * offset size is the whole measure. Every framework shape (Wardley, EDGY,
36
+ * DDD, Cynefin) is in that case, and takes exactly the path it took before
37
+ * mind map nodes gained a maximum width.
38
+ *
39
+ * With a numeric `maxWidth` the box is capped by CSS and wraps, so
40
+ * `offsetWidth` alone no longer describes the text: a preedit string the
41
+ * browser has not reflowed yet extends past the box it is painted in. Take
42
+ * the widest measure available, then clamp it back to `maxWidth` so the
43
+ * shape never grows past the cap.
44
+ */
45
+ private _measureEditorSize;
20
46
  private _updateElementWH;
21
47
  connectedCallback(): void;
22
48
  firstUpdated(): void;