@formicoidea/labre-core 0.31.0 → 0.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (637) hide show
  1. package/dist/_pkgs/affine-block-attachment/attachment-block.js +1 -1
  2. package/dist/_pkgs/affine-block-callout/callout-block.d.ts +6 -0
  3. package/dist/_pkgs/affine-block-callout/callout-block.js +26 -4
  4. package/dist/_pkgs/affine-block-callout/callout-keymap.js +59 -19
  5. package/dist/_pkgs/affine-block-callout/commands/callout-to-paragraph.d.ts +20 -0
  6. package/dist/_pkgs/affine-block-callout/commands/callout-to-paragraph.js +60 -0
  7. package/dist/_pkgs/affine-block-callout/commands/split-callout.d.ts +17 -0
  8. package/dist/_pkgs/affine-block-callout/commands/split-callout.js +42 -0
  9. package/dist/_pkgs/affine-block-callout/configs/slash-menu.js +9 -6
  10. package/dist/_pkgs/affine-block-callout/emoji-margin.d.ts +9 -0
  11. package/dist/_pkgs/affine-block-callout/emoji-margin.js +36 -0
  12. package/dist/_pkgs/affine-block-callout/emoji-menu.d.ts +5 -1
  13. package/dist/_pkgs/affine-block-callout/emoji-menu.js +5 -0
  14. package/dist/_pkgs/affine-block-code/code-block-inline.js +1 -1
  15. package/dist/_pkgs/affine-block-code/code-block.d.ts +14 -0
  16. package/dist/_pkgs/affine-block-code/code-block.js +44 -6
  17. package/dist/_pkgs/affine-block-code/code-toolbar/components/code-toolbar.d.ts +2 -0
  18. package/dist/_pkgs/affine-block-code/code-toolbar/components/code-toolbar.js +23 -14
  19. package/dist/_pkgs/affine-block-code/code-toolbar/components/more-menu.d.ts +16 -0
  20. package/dist/_pkgs/affine-block-code/code-toolbar/components/more-menu.js +93 -0
  21. package/dist/_pkgs/affine-block-code/code-toolbar/config.js +54 -5
  22. package/dist/_pkgs/affine-block-code/code-toolbar/index.js +1 -1
  23. package/dist/_pkgs/affine-block-code/effects.d.ts +2 -0
  24. package/dist/_pkgs/affine-block-code/effects.js +2 -0
  25. package/dist/_pkgs/affine-block-code/highlight/affine-code-unit.js +6 -1
  26. package/dist/_pkgs/affine-block-code/index.d.ts +1 -0
  27. package/dist/_pkgs/affine-block-code/index.js +1 -0
  28. package/dist/_pkgs/affine-block-code/line-numbers.d.ts +25 -0
  29. package/dist/_pkgs/affine-block-code/line-numbers.js +27 -0
  30. package/dist/_pkgs/affine-block-code/styles.js +31 -0
  31. package/dist/_pkgs/affine-block-data-view/data-view-block.js +1 -0
  32. package/dist/_pkgs/affine-block-database/components/title/index.js +4 -1
  33. package/dist/_pkgs/affine-block-database/configs/slash-menu.js +28 -1
  34. package/dist/_pkgs/affine-block-database/data-source.js +1 -2
  35. package/dist/_pkgs/affine-block-database/database-block.js +13 -0
  36. package/dist/_pkgs/affine-block-database/external-data-source.js +1 -1
  37. package/dist/_pkgs/affine-block-database/properties/paste-url.d.ts +24 -0
  38. package/dist/_pkgs/affine-block-database/properties/paste-url.js +98 -0
  39. package/dist/_pkgs/affine-block-database/properties/rich-text/cell-renderer.js +9 -19
  40. package/dist/_pkgs/affine-block-database/properties/title/text.js +20 -25
  41. package/dist/_pkgs/affine-block-database/views/index.js +1 -0
  42. package/dist/_pkgs/affine-block-edgeless-text/edgeless-text-block.js +11 -1
  43. package/dist/_pkgs/affine-block-edgeless-text/edgeless-toolbar/config.d.ts +3 -0
  44. package/dist/_pkgs/affine-block-edgeless-text/edgeless-toolbar/config.js +48 -1
  45. package/dist/_pkgs/affine-block-edgeless-text/edgeless-toolbar/font-size.d.ts +17 -0
  46. package/dist/_pkgs/affine-block-edgeless-text/edgeless-toolbar/font-size.js +24 -0
  47. package/dist/_pkgs/affine-block-embed/embed-figma-block/embed-figma-service.js +1 -1
  48. package/dist/_pkgs/affine-block-embed/embed-iframe-block/configs/toolbar.js +2 -2
  49. package/dist/_pkgs/affine-block-embed-doc/common/doc-trashed.d.ts +9 -0
  50. package/dist/_pkgs/affine-block-embed-doc/common/doc-trashed.js +10 -0
  51. package/dist/_pkgs/affine-block-embed-doc/embed-linked-doc-block/configs/toolbar.js +1 -1
  52. package/dist/_pkgs/affine-block-embed-doc/embed-linked-doc-block/embed-linked-doc-block.js +8 -4
  53. package/dist/_pkgs/affine-block-embed-doc/embed-linked-doc-block/utils.js +1 -1
  54. package/dist/_pkgs/affine-block-embed-doc/embed-synced-doc-block/configs/toolbar.js +1 -1
  55. package/dist/_pkgs/affine-block-embed-doc/embed-synced-doc-block/embed-synced-doc-block.d.ts +4 -0
  56. package/dist/_pkgs/affine-block-embed-doc/embed-synced-doc-block/embed-synced-doc-block.js +23 -4
  57. package/dist/_pkgs/affine-block-frame/frame-manager.d.ts +13 -0
  58. package/dist/_pkgs/affine-block-frame/frame-manager.js +34 -2
  59. package/dist/_pkgs/affine-block-frame/frame-tool.js +1 -1
  60. package/dist/_pkgs/affine-block-image/components/page-image-block.js +1 -1
  61. package/dist/_pkgs/affine-block-image/image-edgeless-block.js +1 -1
  62. package/dist/_pkgs/affine-block-latex/styles.js +6 -1
  63. package/dist/_pkgs/affine-block-list/utils/forward-delete.js +1 -1
  64. package/dist/_pkgs/affine-block-note/commands/select-block.js +1 -1
  65. package/dist/_pkgs/affine-block-note/commands/select-blocks-between.js +1 -1
  66. package/dist/_pkgs/affine-block-note/move-block.js +1 -1
  67. package/dist/_pkgs/affine-block-note/note-edgeless-block.d.ts +9 -0
  68. package/dist/_pkgs/affine-block-note/note-edgeless-block.js +29 -1
  69. package/dist/_pkgs/affine-block-paragraph/utils/forward-delete.js +2 -2
  70. package/dist/_pkgs/affine-block-paragraph/utils/merge-with-prev.js +1 -1
  71. package/dist/_pkgs/affine-block-root/commands/pivot-commands.d.ts +37 -0
  72. package/dist/_pkgs/affine-block-root/commands/pivot-commands.js +168 -0
  73. package/dist/_pkgs/affine-block-root/commands/reading-commands.d.ts +23 -0
  74. package/dist/_pkgs/affine-block-root/commands/reading-commands.js +107 -0
  75. package/dist/_pkgs/affine-block-root/commands/tag-commands.d.ts +47 -0
  76. package/dist/_pkgs/affine-block-root/commands/tag-commands.js +159 -0
  77. package/dist/_pkgs/affine-block-root/configs/toolbar.d.ts +1 -0
  78. package/dist/_pkgs/affine-block-root/edgeless/configs/toolbar/more.js +10 -3
  79. package/dist/_pkgs/affine-block-root/edgeless/configs/toolbar/render-linked-doc.js +1 -1
  80. package/dist/_pkgs/affine-block-root/edgeless/edgeless-keyboard.js +27 -2
  81. package/dist/_pkgs/affine-block-root/edgeless/edgeless-root-block.js +11 -2
  82. package/dist/_pkgs/affine-block-root/edgeless/edgeless-root-service.js +14 -0
  83. package/dist/_pkgs/affine-block-root/edgeless/index.d.ts +1 -0
  84. package/dist/_pkgs/affine-block-root/edgeless/index.js +1 -0
  85. package/dist/_pkgs/affine-block-root/edgeless/reserved-keys.d.ts +21 -0
  86. package/dist/_pkgs/affine-block-root/edgeless/reserved-keys.js +34 -0
  87. package/dist/_pkgs/affine-block-root/edgeless/utils/clipboard-utils.js +1 -1
  88. package/dist/_pkgs/affine-block-root/edgeless/utils/clone-utils.d.ts +7 -1
  89. package/dist/_pkgs/affine-block-root/edgeless/utils/clone-utils.js +11 -2
  90. package/dist/_pkgs/affine-block-root/index.d.ts +4 -1
  91. package/dist/_pkgs/affine-block-root/index.js +4 -1
  92. package/dist/_pkgs/affine-block-root/keyboard/commands.d.ts +2 -0
  93. package/dist/_pkgs/affine-block-root/keyboard/commands.js +147 -0
  94. package/dist/_pkgs/affine-block-root/view.js +13 -4
  95. package/dist/_pkgs/affine-block-surface/adapters/markdown/element-adapter/type.js +1 -1
  96. package/dist/_pkgs/affine-block-surface/adapters/plain-text/element-adapter/type.js +1 -1
  97. package/dist/_pkgs/affine-block-surface/commands/reassociate-connectors.js +0 -1
  98. package/dist/_pkgs/affine-block-surface/effects.js +6 -0
  99. package/dist/_pkgs/affine-block-surface/element-model/index.d.ts +21 -3
  100. package/dist/_pkgs/affine-block-surface/element-model/index.js +14 -2
  101. package/dist/_pkgs/affine-block-surface/extensions/audit.d.ts +107 -0
  102. package/dist/_pkgs/affine-block-surface/extensions/audit.js +489 -0
  103. package/dist/_pkgs/affine-block-surface/extensions/crud-extension.d.ts +14 -0
  104. package/dist/_pkgs/affine-block-surface/extensions/crud-extension.js +37 -5
  105. package/dist/_pkgs/affine-block-surface/extensions/editor-anchored-panel.d.ts +133 -0
  106. package/dist/_pkgs/affine-block-surface/extensions/editor-anchored-panel.js +327 -0
  107. package/dist/_pkgs/affine-block-surface/extensions/element-renderer.js +1 -1
  108. package/dist/_pkgs/affine-block-surface/extensions/export-manager/export-manager.js +1 -1
  109. package/dist/_pkgs/affine-block-surface/extensions/index.d.ts +17 -0
  110. package/dist/_pkgs/affine-block-surface/extensions/index.js +17 -0
  111. package/dist/_pkgs/affine-block-surface/extensions/interchange-import.d.ts +172 -0
  112. package/dist/_pkgs/affine-block-surface/extensions/interchange-import.js +393 -0
  113. package/dist/_pkgs/affine-block-surface/extensions/interchange.d.ts +306 -0
  114. package/dist/_pkgs/affine-block-surface/extensions/interchange.js +64 -0
  115. package/dist/_pkgs/affine-block-surface/extensions/map-quality-widget.d.ts +146 -0
  116. package/dist/_pkgs/affine-block-surface/extensions/map-quality-widget.js +528 -0
  117. package/dist/_pkgs/affine-block-surface/extensions/map-quality.d.ts +109 -0
  118. package/dist/_pkgs/affine-block-surface/extensions/map-quality.js +84 -0
  119. package/dist/_pkgs/affine-block-surface/extensions/morph-toolbar.d.ts +248 -0
  120. package/dist/_pkgs/affine-block-surface/extensions/morph-toolbar.js +248 -0
  121. package/dist/_pkgs/affine-block-surface/extensions/reading-toolbar.d.ts +15 -0
  122. package/dist/_pkgs/affine-block-surface/extensions/reading-toolbar.js +158 -0
  123. package/dist/_pkgs/affine-block-surface/extensions/reading-widget.d.ts +145 -0
  124. package/dist/_pkgs/affine-block-surface/extensions/reading-widget.js +588 -0
  125. package/dist/_pkgs/affine-block-surface/extensions/reading.d.ts +494 -0
  126. package/dist/_pkgs/affine-block-surface/extensions/reading.js +767 -0
  127. package/dist/_pkgs/affine-block-surface/extensions/spotlight.d.ts +45 -0
  128. package/dist/_pkgs/affine-block-surface/extensions/spotlight.js +177 -0
  129. package/dist/_pkgs/affine-block-surface/extensions/svg-sketch.d.ts +107 -0
  130. package/dist/_pkgs/affine-block-surface/extensions/svg-sketch.js +958 -0
  131. package/dist/_pkgs/affine-block-surface/extensions/tags-toolbar.d.ts +10 -0
  132. package/dist/_pkgs/affine-block-surface/extensions/tags-toolbar.js +295 -0
  133. package/dist/_pkgs/affine-block-surface/extensions/validation-toolbar.d.ts +27 -0
  134. package/dist/_pkgs/affine-block-surface/extensions/validation-toolbar.js +361 -0
  135. package/dist/_pkgs/affine-block-surface/extensions/validation.d.ts +2129 -0
  136. package/dist/_pkgs/affine-block-surface/extensions/validation.js +4620 -0
  137. package/dist/_pkgs/affine-block-surface/extensions/violation-detail-widget.d.ts +330 -0
  138. package/dist/_pkgs/affine-block-surface/extensions/violation-detail-widget.js +1004 -0
  139. package/dist/_pkgs/affine-block-surface/extensions/violation-timeline.d.ts +80 -0
  140. package/dist/_pkgs/affine-block-surface/extensions/violation-timeline.js +123 -0
  141. package/dist/_pkgs/affine-block-surface/framework-background/def.d.ts +610 -0
  142. package/dist/_pkgs/affine-block-surface/framework-background/def.js +206 -0
  143. package/dist/_pkgs/affine-block-surface/framework-background/facts.d.ts +188 -0
  144. package/dist/_pkgs/affine-block-surface/framework-background/facts.js +284 -0
  145. package/dist/_pkgs/affine-block-surface/framework-background/index.d.ts +5 -0
  146. package/dist/_pkgs/affine-block-surface/framework-background/index.js +5 -0
  147. package/dist/_pkgs/affine-block-surface/framework-background/interaction.d.ts +12 -0
  148. package/dist/_pkgs/affine-block-surface/framework-background/interaction.js +24 -0
  149. package/dist/_pkgs/affine-block-surface/framework-background/labels.d.ts +99 -0
  150. package/dist/_pkgs/affine-block-surface/framework-background/labels.js +193 -0
  151. package/dist/_pkgs/affine-block-surface/framework-background/renderer.d.ts +8 -0
  152. package/dist/_pkgs/affine-block-surface/framework-background/renderer.js +399 -0
  153. package/dist/_pkgs/affine-block-surface/index.d.ts +1 -0
  154. package/dist/_pkgs/affine-block-surface/index.js +1 -0
  155. package/dist/_pkgs/affine-block-surface/renderer/canvas-renderer.d.ts +69 -3
  156. package/dist/_pkgs/affine-block-surface/renderer/canvas-renderer.js +333 -44
  157. package/dist/_pkgs/affine-block-surface/renderer/dom-renderer.js +18 -2
  158. package/dist/_pkgs/affine-block-surface/renderer/overlay.js +1 -1
  159. package/dist/_pkgs/affine-block-surface/tool/default-tool.js +8 -0
  160. package/dist/_pkgs/affine-block-surface/utils/font.js +9 -3
  161. package/dist/_pkgs/affine-block-surface/view.d.ts +17 -0
  162. package/dist/_pkgs/affine-block-surface/view.js +57 -2
  163. package/dist/_pkgs/affine-block-surface-ref/portal/note.js +2 -2
  164. package/dist/_pkgs/affine-block-table/commands.js +1 -1
  165. package/dist/_pkgs/affine-block-table/selection-controller.d.ts +6 -0
  166. package/dist/_pkgs/affine-block-table/selection-controller.js +24 -1
  167. package/dist/_pkgs/affine-block-table/table-block.js +8 -2
  168. package/dist/_pkgs/affine-block-table/table-cell.js +5 -6
  169. package/dist/_pkgs/affine-block-table/table-keymap.d.ts +18 -0
  170. package/dist/_pkgs/affine-block-table/table-keymap.js +41 -0
  171. package/dist/_pkgs/affine-block-table/utils.d.ts +7 -0
  172. package/dist/_pkgs/affine-block-table/utils.js +12 -0
  173. package/dist/_pkgs/affine-block-table/view.js +2 -0
  174. package/dist/_pkgs/affine-components/caption/captioned-block-component.js +2 -1
  175. package/dist/_pkgs/affine-components/context-menu/button.d.ts +7 -0
  176. package/dist/_pkgs/affine-components/context-menu/button.js +7 -2
  177. package/dist/_pkgs/affine-components/context-menu/input.d.ts +4 -0
  178. package/dist/_pkgs/affine-components/context-menu/input.js +12 -0
  179. package/dist/_pkgs/affine-components/context-menu/menu-all.d.ts +2 -0
  180. package/dist/_pkgs/affine-components/context-menu/menu-renderer.js +8 -1
  181. package/dist/_pkgs/affine-components/context-menu/sub-menu.js +3 -0
  182. package/dist/_pkgs/affine-components/edgeless-shape-color-picker/color-picker.js +1 -1
  183. package/dist/_pkgs/affine-components/embed-card-modal/embed-card-edit-modal.js +1 -1
  184. package/dist/_pkgs/affine-components/filterable-list/styles.js +1 -1
  185. package/dist/_pkgs/affine-components/highlight-dropdown-menu/highlight-duotone-icon.js +8 -8
  186. package/dist/_pkgs/affine-components/highlight-dropdown-menu/text-duotone-icon.js +11 -11
  187. package/dist/_pkgs/affine-components/icon-picker/affine-icon-picker-panel.d.ts +28 -0
  188. package/dist/_pkgs/affine-components/icon-picker/affine-icon-picker-panel.js +231 -0
  189. package/dist/_pkgs/affine-components/icon-picker/emoji-data.d.ts +40 -0
  190. package/dist/_pkgs/affine-components/icon-picker/emoji-data.js +99 -0
  191. package/dist/_pkgs/affine-components/icon-picker/emoji-picker-panel.d.ts +32 -0
  192. package/dist/_pkgs/affine-components/icon-picker/emoji-picker-panel.js +276 -0
  193. package/dist/_pkgs/affine-components/icon-picker/icon-data.d.ts +34 -0
  194. package/dist/_pkgs/affine-components/icon-picker/icon-data.js +83 -0
  195. package/dist/_pkgs/affine-components/icon-picker/icon-picker.d.ts +39 -0
  196. package/dist/_pkgs/affine-components/icon-picker/icon-picker.js +233 -0
  197. package/dist/_pkgs/affine-components/icon-picker/index.d.ts +8 -0
  198. package/dist/_pkgs/affine-components/icon-picker/index.js +15 -0
  199. package/dist/_pkgs/affine-components/icon-picker/recent-store.d.ts +8 -0
  200. package/dist/_pkgs/affine-components/icon-picker/recent-store.js +41 -0
  201. package/dist/_pkgs/affine-components/icon-picker/styles.d.ts +5 -0
  202. package/dist/_pkgs/affine-components/icon-picker/styles.js +166 -0
  203. package/dist/_pkgs/affine-components/icon-picker/types.d.ts +22 -0
  204. package/dist/_pkgs/affine-components/icon-picker/types.js +10 -0
  205. package/dist/_pkgs/affine-components/icons/text.js +426 -426
  206. package/dist/_pkgs/affine-components/open-doc-dropdown-menu/dropdown-menu.d.ts +1 -0
  207. package/dist/_pkgs/affine-components/peek/peekable.js +1 -1
  208. package/dist/_pkgs/affine-components/portal/portal.d.ts +1 -1
  209. package/dist/_pkgs/affine-components/toolbar/index.d.ts +1 -0
  210. package/dist/_pkgs/affine-components/toolbar/index.js +1 -0
  211. package/dist/_pkgs/affine-components/toolbar/menu-button.js +2 -1
  212. package/dist/_pkgs/affine-components/toolbar/picker-menu.d.ts +55 -0
  213. package/dist/_pkgs/affine-components/toolbar/picker-menu.js +47 -0
  214. package/dist/_pkgs/affine-components/toolbar/toolbar.js +11 -10
  215. package/dist/_pkgs/affine-foundation/view.js +11 -2
  216. package/dist/_pkgs/affine-fragment-frame-panel/body/frame-panel-body.js +2 -2
  217. package/dist/_pkgs/affine-fragment-frame-panel/header/frame-panel-header.js +2 -2
  218. package/dist/_pkgs/affine-fragment-frame-panel/header/frames-setting-menu.js +1 -1
  219. package/dist/_pkgs/affine-fragment-outline/mobile-outline-panel.js +1 -1
  220. package/dist/_pkgs/affine-gfx-brush/index.d.ts +1 -0
  221. package/dist/_pkgs/affine-gfx-brush/index.js +1 -0
  222. package/dist/_pkgs/affine-gfx-brush/renderer/dom/brush.d.ts +1 -0
  223. package/dist/_pkgs/affine-gfx-brush/renderer/dom/brush.js +11 -0
  224. package/dist/_pkgs/affine-gfx-brush/renderer/dom/highlighter.d.ts +1 -0
  225. package/dist/_pkgs/affine-gfx-brush/renderer/dom/highlighter.js +11 -0
  226. package/dist/_pkgs/affine-gfx-brush/renderer/dom/index.d.ts +2 -0
  227. package/dist/_pkgs/affine-gfx-brush/renderer/dom/index.js +2 -0
  228. package/dist/_pkgs/affine-gfx-brush/renderer/dom/shared.d.ts +14 -0
  229. package/dist/_pkgs/affine-gfx-brush/renderer/dom/shared.js +54 -0
  230. package/dist/_pkgs/affine-gfx-brush/renderer/index.d.ts +1 -0
  231. package/dist/_pkgs/affine-gfx-brush/renderer/index.js +4 -0
  232. package/dist/_pkgs/affine-gfx-brush/toolbar/components/pen/pen-tool-button.js +1 -1
  233. package/dist/_pkgs/affine-gfx-brush/view.d.ts +14 -0
  234. package/dist/_pkgs/affine-gfx-brush/view.js +29 -3
  235. package/dist/_pkgs/affine-gfx-connector/connector-manager.js +39 -16
  236. package/dist/_pkgs/affine-gfx-connector/connector-tool.d.ts +26 -1
  237. package/dist/_pkgs/affine-gfx-connector/connector-tool.js +12 -3
  238. package/dist/_pkgs/affine-gfx-connector/connector-watcher.js +1 -4
  239. package/dist/_pkgs/affine-gfx-connector/direction/direction-reveal.d.ts +123 -0
  240. package/dist/_pkgs/affine-gfx-connector/direction/direction-reveal.js +282 -0
  241. package/dist/_pkgs/affine-gfx-connector/direction/direction-widget.d.ts +65 -0
  242. package/dist/_pkgs/affine-gfx-connector/direction/direction-widget.js +395 -0
  243. package/dist/_pkgs/affine-gfx-connector/direction/index.d.ts +4 -0
  244. package/dist/_pkgs/affine-gfx-connector/direction/index.js +4 -0
  245. package/dist/_pkgs/affine-gfx-connector/direction/invert-direction.d.ts +72 -0
  246. package/dist/_pkgs/affine-gfx-connector/direction/invert-direction.js +185 -0
  247. package/dist/_pkgs/affine-gfx-connector/direction/typed-edge.d.ts +69 -0
  248. package/dist/_pkgs/affine-gfx-connector/direction/typed-edge.js +66 -0
  249. package/dist/_pkgs/affine-gfx-connector/effects.d.ts +2 -0
  250. package/dist/_pkgs/affine-gfx-connector/effects.js +2 -0
  251. package/dist/_pkgs/affine-gfx-connector/element-renderer/connector-dom/index.js +78 -41
  252. package/dist/_pkgs/affine-gfx-connector/element-renderer/index.js +1 -1
  253. package/dist/_pkgs/affine-gfx-connector/element-renderer/utils.js +1 -1
  254. package/dist/_pkgs/affine-gfx-connector/index.d.ts +1 -0
  255. package/dist/_pkgs/affine-gfx-connector/index.js +1 -0
  256. package/dist/_pkgs/affine-gfx-connector/toolbar/config.d.ts +50 -0
  257. package/dist/_pkgs/affine-gfx-connector/toolbar/config.js +68 -2
  258. package/dist/_pkgs/affine-gfx-connector/view.js +16 -0
  259. package/dist/_pkgs/affine-gfx-group/command/group-api.js +150 -62
  260. package/dist/_pkgs/affine-gfx-group/text/edgeless-group-title-editor.js +4 -1
  261. package/dist/_pkgs/affine-gfx-mindmap/adapter/markdown/index.js +1 -1
  262. package/dist/_pkgs/affine-gfx-mindmap/adapter/utils.js +1 -1
  263. package/dist/_pkgs/affine-gfx-mindmap/templates/index.js +583 -4
  264. package/dist/_pkgs/affine-gfx-mindmap/toolbar/mindmap-menu.js +23 -23
  265. package/dist/_pkgs/affine-gfx-mindmap/toolbar/mindmap-tool-button.js +5 -1
  266. package/dist/_pkgs/affine-gfx-mindmap/view/utils.js +1 -1
  267. package/dist/_pkgs/affine-gfx-note/overlay/overlay.js +1 -1
  268. package/dist/_pkgs/affine-gfx-note/toolbar/note-senior-button.js +1 -1
  269. package/dist/_pkgs/affine-gfx-pointer/tools/pan-tool.d.ts +16 -0
  270. package/dist/_pkgs/affine-gfx-pointer/tools/pan-tool.js +102 -32
  271. package/dist/_pkgs/affine-gfx-shape/commands.d.ts +2 -0
  272. package/dist/_pkgs/affine-gfx-shape/commands.js +33 -0
  273. package/dist/_pkgs/affine-gfx-shape/consts.js +1 -1
  274. package/dist/_pkgs/affine-gfx-shape/draggable/shape-draggable.js +1 -1
  275. package/dist/_pkgs/affine-gfx-shape/element-renderer/shape/polygon.js +17 -9
  276. package/dist/_pkgs/affine-gfx-shape/element-renderer/shape/utils.js +8 -3
  277. package/dist/_pkgs/affine-gfx-shape/element-renderer/shape-dom/index.js +48 -19
  278. package/dist/_pkgs/affine-gfx-shape/element-view.js +19 -12
  279. package/dist/_pkgs/affine-gfx-shape/index.d.ts +1 -1
  280. package/dist/_pkgs/affine-gfx-shape/index.js +1 -1
  281. package/dist/_pkgs/affine-gfx-shape/overlay/polygon-drawing-overlay.js +1 -1
  282. package/dist/_pkgs/affine-gfx-shape/overlay/polygon-vertex-editing-overlay.js +12 -7
  283. package/dist/_pkgs/affine-gfx-shape/overlay/shape-overlay.js +1 -1
  284. package/dist/_pkgs/affine-gfx-shape/polygon-tool.js +4 -2
  285. package/dist/_pkgs/affine-gfx-shape/shape-tool.js +1 -1
  286. package/dist/_pkgs/affine-gfx-shape/text/edgeless-shape-text-editor.d.ts +26 -0
  287. package/dist/_pkgs/affine-gfx-shape/text/edgeless-shape-text-editor.js +124 -15
  288. package/dist/_pkgs/affine-gfx-shape/view.js +3 -3
  289. package/dist/_pkgs/affine-gfx-template/builtin/other.js +66 -17
  290. package/dist/_pkgs/affine-gfx-template/toolbar/overlay-scrollbar.js +1 -1
  291. package/dist/_pkgs/affine-gfx-template/toolbar/template-panel.js +1 -1
  292. package/dist/_pkgs/affine-gfx-template/toolbar/template-tool-button.d.ts +2 -0
  293. package/dist/_pkgs/affine-gfx-template/toolbar/template-tool-button.js +18 -1
  294. package/dist/_pkgs/affine-gfx-text/edgeless-text-editor.js +9 -5
  295. package/dist/_pkgs/affine-gfx-text/toolbar/actions.js +1 -1
  296. package/dist/_pkgs/affine-inline-latex/command.js +46 -26
  297. package/dist/_pkgs/affine-inline-latex/latex-node/latex-node.d.ts +10 -0
  298. package/dist/_pkgs/affine-inline-latex/latex-node/latex-node.js +23 -0
  299. package/dist/_pkgs/affine-inline-link/command.js +1 -1
  300. package/dist/_pkgs/affine-inline-link/link-node/affine-link.js +4 -1
  301. package/dist/_pkgs/affine-inline-preset/adapters/html/html-inline.d.ts +3 -0
  302. package/dist/_pkgs/affine-inline-preset/adapters/html/html-inline.js +29 -1
  303. package/dist/_pkgs/affine-inline-preset/command/format-block.js +1 -1
  304. package/dist/_pkgs/affine-inline-preset/command/format-native.js +2 -2
  305. package/dist/_pkgs/affine-inline-preset/command/format-text.js +1 -1
  306. package/dist/_pkgs/affine-inline-preset/inline-spec.js +1 -1
  307. package/dist/_pkgs/affine-inline-reference/reference-node/reference-node.js +1 -1
  308. package/dist/_pkgs/affine-model/blocks/code/code-model.d.ts +1 -0
  309. package/dist/_pkgs/affine-model/blocks/code/code-model.js +1 -0
  310. package/dist/_pkgs/affine-model/elements/bpmn/node.d.ts +40 -7
  311. package/dist/_pkgs/affine-model/elements/bpmn/node.js +4 -2
  312. package/dist/_pkgs/affine-model/elements/bpmn/pool.d.ts +74 -17
  313. package/dist/_pkgs/affine-model/elements/bpmn/pool.js +55 -26
  314. package/dist/_pkgs/affine-model/elements/c4/board.d.ts +88 -0
  315. package/dist/_pkgs/affine-model/elements/c4/board.js +128 -0
  316. package/dist/_pkgs/affine-model/elements/c4/boundary.d.ts +63 -0
  317. package/dist/_pkgs/affine-model/elements/c4/boundary.js +134 -0
  318. package/dist/_pkgs/affine-model/elements/c4/index.d.ts +3 -0
  319. package/dist/_pkgs/affine-model/elements/c4/index.js +3 -0
  320. package/dist/_pkgs/affine-model/elements/c4/node.d.ts +97 -0
  321. package/dist/_pkgs/affine-model/elements/c4/node.js +130 -0
  322. package/dist/_pkgs/affine-model/elements/connector/connector.js +25 -1
  323. package/dist/_pkgs/affine-model/elements/context-map/context-map.d.ts +27 -0
  324. package/dist/_pkgs/affine-model/elements/context-map/context-map.js +94 -0
  325. package/dist/_pkgs/affine-model/elements/context-map/index.d.ts +1 -0
  326. package/dist/_pkgs/affine-model/elements/context-map/index.js +1 -0
  327. package/dist/_pkgs/affine-model/elements/core-domain/core-domain.d.ts +34 -17
  328. package/dist/_pkgs/affine-model/elements/core-domain/core-domain.js +28 -26
  329. package/dist/_pkgs/affine-model/elements/edgy/board.d.ts +32 -0
  330. package/dist/_pkgs/affine-model/elements/edgy/board.js +112 -0
  331. package/dist/_pkgs/affine-model/elements/edgy/facets.d.ts +12 -0
  332. package/dist/_pkgs/affine-model/elements/edgy/facets.js +25 -1
  333. package/dist/_pkgs/affine-model/elements/edgy/index.d.ts +1 -0
  334. package/dist/_pkgs/affine-model/elements/edgy/index.js +1 -0
  335. package/dist/_pkgs/affine-model/elements/event-storming/event-storming.d.ts +36 -0
  336. package/dist/_pkgs/affine-model/elements/event-storming/event-storming.js +103 -0
  337. package/dist/_pkgs/affine-model/elements/event-storming/index.d.ts +1 -0
  338. package/dist/_pkgs/affine-model/elements/event-storming/index.js +1 -0
  339. package/dist/_pkgs/affine-model/elements/framework-background/background.d.ts +42 -0
  340. package/dist/_pkgs/affine-model/elements/framework-background/background.js +42 -0
  341. package/dist/_pkgs/affine-model/elements/framework-background/index.d.ts +1 -0
  342. package/dist/_pkgs/affine-model/elements/framework-background/index.js +1 -0
  343. package/dist/_pkgs/affine-model/elements/index.d.ts +14 -1
  344. package/dist/_pkgs/affine-model/elements/index.js +4 -0
  345. package/dist/_pkgs/affine-model/elements/mindmap/mindmap.js +8 -3
  346. package/dist/_pkgs/affine-model/elements/mindmap/style.d.ts +10 -0
  347. package/dist/_pkgs/affine-model/elements/mindmap/style.js +8 -0
  348. package/dist/_pkgs/affine-model/elements/shape/api/polygon.js +2 -8
  349. package/dist/_pkgs/affine-model/elements/wardley/wardley.d.ts +21 -29
  350. package/dist/_pkgs/affine-model/elements/wardley/wardley.js +41 -48
  351. package/dist/_pkgs/affine-shared/adapters/html/block-adapter.js +1 -1
  352. package/dist/_pkgs/affine-shared/adapters/markdown/block-adapter.js +1 -1
  353. package/dist/_pkgs/affine-shared/adapters/markdown/delta-converter.d.ts +6 -1
  354. package/dist/_pkgs/affine-shared/adapters/markdown/delta-converter.js +161 -3
  355. package/dist/_pkgs/affine-shared/adapters/markdown/markdown.js +5 -1
  356. package/dist/_pkgs/affine-shared/adapters/notion-html/block-adapter.js +1 -1
  357. package/dist/_pkgs/affine-shared/adapters/notion-html/delta-converter.js +1 -1
  358. package/dist/_pkgs/affine-shared/adapters/plain-text/block-adapter.js +1 -1
  359. package/dist/_pkgs/affine-shared/adapters/plain-text/delta-converter.js +1 -1
  360. package/dist/_pkgs/affine-shared/adapters/types/delta-converter.d.ts +1 -0
  361. package/dist/_pkgs/affine-shared/adapters/utils/color.d.ts +24 -0
  362. package/dist/_pkgs/affine-shared/adapters/utils/color.js +283 -0
  363. package/dist/_pkgs/affine-shared/adapters/utils/index.d.ts +1 -0
  364. package/dist/_pkgs/affine-shared/adapters/utils/index.js +1 -0
  365. package/dist/_pkgs/affine-shared/commands/block-crud/get-selected-blocks.js +10 -2
  366. package/dist/_pkgs/affine-shared/commands/model-crud/draft-selected-models.js +1 -1
  367. package/dist/_pkgs/affine-shared/commands/selection/focus-block-end.js +1 -1
  368. package/dist/_pkgs/affine-shared/commands/selection/focus-block-start.js +1 -1
  369. package/dist/_pkgs/affine-shared/consts/index.d.ts +10 -0
  370. package/dist/_pkgs/affine-shared/consts/index.js +10 -0
  371. package/dist/_pkgs/affine-shared/services/artefact-catalogue-service.d.ts +55 -0
  372. package/dist/_pkgs/affine-shared/services/artefact-catalogue-service.js +35 -0
  373. package/dist/_pkgs/affine-shared/services/audit-service.d.ts +311 -0
  374. package/dist/_pkgs/affine-shared/services/audit-service.js +228 -0
  375. package/dist/_pkgs/affine-shared/services/command-usage-service.d.ts +31 -0
  376. package/dist/_pkgs/affine-shared/services/command-usage-service.js +109 -0
  377. package/dist/_pkgs/affine-shared/services/comment-service/block-comment-manager.js +1 -1
  378. package/dist/_pkgs/affine-shared/services/doc-display-meta-service.js +1 -1
  379. package/dist/_pkgs/affine-shared/services/edit-props-store.d.ts +7 -0
  380. package/dist/_pkgs/affine-shared/services/edit-props-store.js +11 -0
  381. package/dist/_pkgs/affine-shared/services/embed-iframe/embed-iframe-config.js +1 -1
  382. package/dist/_pkgs/affine-shared/services/font-loader/font-loader-service.d.ts +26 -1
  383. package/dist/_pkgs/affine-shared/services/font-loader/font-loader-service.js +124 -7
  384. package/dist/_pkgs/affine-shared/services/index.d.ts +7 -0
  385. package/dist/_pkgs/affine-shared/services/index.js +7 -0
  386. package/dist/_pkgs/affine-shared/services/pivot-materiality-publisher.d.ts +129 -0
  387. package/dist/_pkgs/affine-shared/services/pivot-materiality-publisher.js +312 -0
  388. package/dist/_pkgs/affine-shared/services/pivot-properties-service.d.ts +217 -0
  389. package/dist/_pkgs/affine-shared/services/pivot-properties-service.js +114 -0
  390. package/dist/_pkgs/affine-shared/services/telemetry-service/code-block.d.ts +1 -1
  391. package/dist/_pkgs/affine-shared/services/telemetry-service/lifecycle.d.ts +255 -1
  392. package/dist/_pkgs/affine-shared/services/telemetry-service/telemetry-service.d.ts +2 -2
  393. package/dist/_pkgs/affine-shared/services/telemetry-service/types.d.ts +6 -1
  394. package/dist/_pkgs/affine-shared/services/toolbar-service/action.d.ts +10 -0
  395. package/dist/_pkgs/affine-shared/services/toolbar-service/index.d.ts +1 -0
  396. package/dist/_pkgs/affine-shared/services/toolbar-service/index.js +1 -0
  397. package/dist/_pkgs/affine-shared/services/toolbar-service/layout.d.ts +134 -0
  398. package/dist/_pkgs/affine-shared/services/toolbar-service/layout.js +146 -0
  399. package/dist/_pkgs/affine-shared/services/toolbar-service/registry.d.ts +44 -0
  400. package/dist/_pkgs/affine-shared/services/toolbar-service/registry.js +161 -3
  401. package/dist/_pkgs/affine-shared/services/translation-service/index.d.ts +68 -0
  402. package/dist/_pkgs/affine-shared/services/translation-service/index.js +39 -0
  403. package/dist/_pkgs/affine-shared/services/universe-tag-defs-service.d.ts +155 -0
  404. package/dist/_pkgs/affine-shared/services/universe-tag-defs-service.js +256 -0
  405. package/dist/_pkgs/affine-shared/test-utils/affine-template.js +1 -1
  406. package/dist/_pkgs/affine-shared/utils/dom/point-to-range.d.ts +4 -0
  407. package/dist/_pkgs/affine-shared/utils/dom/point-to-range.js +58 -2
  408. package/dist/_pkgs/affine-shared/utils/dom/viewport.d.ts +60 -0
  409. package/dist/_pkgs/affine-shared/utils/dom/viewport.js +58 -0
  410. package/dist/_pkgs/affine-shared/utils/edgeless.js +1 -1
  411. package/dist/_pkgs/affine-shared/utils/file/filesys.d.ts +34 -0
  412. package/dist/_pkgs/affine-shared/utils/file/filesys.js +48 -7
  413. package/dist/_pkgs/affine-shared/utils/print-to-pdf.d.ts +21 -0
  414. package/dist/_pkgs/affine-shared/utils/print-to-pdf.js +166 -32
  415. package/dist/_pkgs/affine-shared/utils/zod-schema.d.ts +7 -0
  416. package/dist/_pkgs/affine-shared/utils/zod-schema.js +25 -1
  417. package/dist/_pkgs/affine-widget-drag-handle/utils.js +1 -1
  418. package/dist/_pkgs/affine-widget-drag-handle/watchers/edgeless-watcher.d.ts +19 -10
  419. package/dist/_pkgs/affine-widget-drag-handle/watchers/edgeless-watcher.js +122 -23
  420. package/dist/_pkgs/affine-widget-drag-handle/watchers/pointer-event-watcher.d.ts +2 -0
  421. package/dist/_pkgs/affine-widget-drag-handle/watchers/pointer-event-watcher.js +25 -4
  422. package/dist/_pkgs/affine-widget-edgeless-auto-connect/index.js +1 -1
  423. package/dist/_pkgs/affine-widget-edgeless-dragging-area/edgeless-dragging-area-rect.js +1 -1
  424. package/dist/_pkgs/affine-widget-edgeless-selected-rect/auto-complete-panel.js +10 -5
  425. package/dist/_pkgs/affine-widget-edgeless-selected-rect/edgeless-auto-complete.d.ts +15 -1
  426. package/dist/_pkgs/affine-widget-edgeless-selected-rect/edgeless-auto-complete.js +37 -32
  427. package/dist/_pkgs/affine-widget-edgeless-selected-rect/edgeless-element-link.js +5 -4
  428. package/dist/_pkgs/affine-widget-edgeless-selected-rect/edgeless-selected-rect.js +19 -9
  429. package/dist/_pkgs/affine-widget-edgeless-selected-rect/utils.d.ts +16 -2
  430. package/dist/_pkgs/affine-widget-edgeless-selected-rect/utils.js +19 -2
  431. package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/artefact-catalogue-default.d.ts +14 -0
  432. package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/artefact-catalogue-default.js +40 -0
  433. package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/artefact-catalogue-widget.d.ts +158 -0
  434. package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/artefact-catalogue-widget.js +572 -0
  435. package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/catalogue-groups.d.ts +46 -0
  436. package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/catalogue-groups.js +66 -0
  437. package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/chord-format.d.ts +13 -0
  438. package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/chord-format.js +50 -0
  439. package/dist/_pkgs/affine-widget-edgeless-toolbar/edgeless-toolbar.d.ts +6 -0
  440. package/dist/_pkgs/affine-widget-edgeless-toolbar/edgeless-toolbar.js +15 -5
  441. package/dist/_pkgs/affine-widget-edgeless-toolbar/effects.d.ts +2 -0
  442. package/dist/_pkgs/affine-widget-edgeless-toolbar/effects.js +2 -0
  443. package/dist/_pkgs/affine-widget-edgeless-toolbar/extension/index.d.ts +7 -0
  444. package/dist/_pkgs/affine-widget-edgeless-toolbar/index.d.ts +5 -0
  445. package/dist/_pkgs/affine-widget-edgeless-toolbar/index.js +5 -0
  446. package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/command-menu.d.ts +57 -0
  447. package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/command-menu.js +140 -0
  448. package/dist/_pkgs/affine-widget-edgeless-toolbar/view.js +9 -0
  449. package/dist/_pkgs/affine-widget-frame-title/edgeless-frame-title-editor.js +4 -1
  450. package/dist/_pkgs/affine-widget-keyboard-toolbar/icons.js +98 -98
  451. package/dist/_pkgs/affine-widget-keyboard-toolbar/keyboard-tool-panel.js +1 -1
  452. package/dist/_pkgs/affine-widget-linked-doc/import-doc/import-doc.js +1 -1
  453. package/dist/_pkgs/affine-widget-linked-doc/linked-doc-popover.js +2 -15
  454. package/dist/_pkgs/affine-widget-linked-doc/transformers/markdown.d.ts +10 -1
  455. package/dist/_pkgs/affine-widget-linked-doc/transformers/markdown.js +133 -6
  456. package/dist/_pkgs/affine-widget-linked-doc/transformers/utils.d.ts +10 -0
  457. package/dist/_pkgs/affine-widget-linked-doc/transformers/utils.js +120 -3
  458. package/dist/_pkgs/affine-widget-linked-doc/utils.d.ts +12 -0
  459. package/dist/_pkgs/affine-widget-linked-doc/utils.js +33 -0
  460. package/dist/_pkgs/affine-widget-page-dragging-area/index.js +1 -1
  461. package/dist/_pkgs/affine-widget-remote-selection/doc/doc-remote-selection.js +1 -1
  462. package/dist/_pkgs/affine-widget-remote-selection/edgeless/index.js +6 -4
  463. package/dist/_pkgs/affine-widget-slash-menu/slash-menu-popover.js +8 -4
  464. package/dist/_pkgs/affine-widget-slash-menu/utils.d.ts +9 -0
  465. package/dist/_pkgs/affine-widget-slash-menu/utils.js +24 -0
  466. package/dist/_pkgs/affine-widget-toolbar/toolbar.d.ts +6 -0
  467. package/dist/_pkgs/affine-widget-toolbar/toolbar.js +40 -8
  468. package/dist/_pkgs/affine-widget-toolbar/utils.d.ts +146 -3
  469. package/dist/_pkgs/affine-widget-toolbar/utils.js +744 -58
  470. package/dist/_pkgs/data-view/core/common/property-menu.js +3 -16
  471. package/dist/_pkgs/data-view/core/component/tags/multi-tag-select.d.ts +4 -0
  472. package/dist/_pkgs/data-view/core/component/tags/multi-tag-select.js +28 -1
  473. package/dist/_pkgs/data-view/core/data-view.d.ts +3 -1
  474. package/dist/_pkgs/data-view/core/data-view.js +25 -3
  475. package/dist/_pkgs/data-view/core/detail/field.js +2 -2
  476. package/dist/_pkgs/data-view/core/detail/selection.d.ts +4 -2
  477. package/dist/_pkgs/data-view/core/detail/selection.js +23 -7
  478. package/dist/_pkgs/data-view/core/effect.js +2 -0
  479. package/dist/_pkgs/data-view/core/filter/eval.js +36 -23
  480. package/dist/_pkgs/data-view/core/filter/filter-fn/matcher.d.ts +7 -0
  481. package/dist/_pkgs/data-view/core/filter/filter-fn/matcher.js +12 -0
  482. package/dist/_pkgs/data-view/core/group-by/compare-date-keys.d.ts +11 -0
  483. package/dist/_pkgs/data-view/core/group-by/compare-date-keys.js +55 -0
  484. package/dist/_pkgs/data-view/core/group-by/define.d.ts +6 -0
  485. package/dist/_pkgs/data-view/core/group-by/define.js +114 -0
  486. package/dist/_pkgs/data-view/core/group-by/matcher.d.ts +7 -0
  487. package/dist/_pkgs/data-view/core/group-by/matcher.js +13 -0
  488. package/dist/_pkgs/data-view/core/group-by/renderer/boolean-group.js +11 -11
  489. package/dist/_pkgs/data-view/core/group-by/renderer/date-group.d.ts +9 -0
  490. package/dist/_pkgs/data-view/core/group-by/renderer/date-group.js +97 -0
  491. package/dist/_pkgs/data-view/core/group-by/setting.js +86 -7
  492. package/dist/_pkgs/data-view/core/group-by/trait.d.ts +34 -0
  493. package/dist/_pkgs/data-view/core/group-by/trait.js +106 -10
  494. package/dist/_pkgs/data-view/core/utils/menu-title.js +17 -17
  495. package/dist/_pkgs/data-view/property-presets/multi-select/cell-renderer.js +3 -1
  496. package/dist/_pkgs/data-view/property-presets/number/define.js +2 -1
  497. package/dist/_pkgs/data-view/property-presets/select/cell-renderer.js +3 -1
  498. package/dist/_pkgs/data-view/view-presets/calendar/calendar-view-manager.d.ts +70 -0
  499. package/dist/_pkgs/data-view/view-presets/calendar/calendar-view-manager.js +449 -0
  500. package/dist/_pkgs/data-view/view-presets/calendar/define.d.ts +10 -0
  501. package/dist/_pkgs/data-view/view-presets/calendar/define.js +27 -0
  502. package/dist/_pkgs/data-view/view-presets/calendar/effect.d.ts +1 -0
  503. package/dist/_pkgs/data-view/view-presets/calendar/effect.js +4 -0
  504. package/dist/_pkgs/data-view/view-presets/calendar/index.d.ts +6 -0
  505. package/dist/_pkgs/data-view/view-presets/calendar/index.js +6 -0
  506. package/dist/_pkgs/data-view/view-presets/calendar/layout.d.ts +37 -0
  507. package/dist/_pkgs/data-view/view-presets/calendar/layout.js +138 -0
  508. package/dist/_pkgs/data-view/view-presets/calendar/pc/actions.d.ts +7 -0
  509. package/dist/_pkgs/data-view/view-presets/calendar/pc/actions.js +64 -0
  510. package/dist/_pkgs/data-view/view-presets/calendar/pc/dnd.d.ts +32 -0
  511. package/dist/_pkgs/data-view/view-presets/calendar/pc/dnd.js +159 -0
  512. package/dist/_pkgs/data-view/view-presets/calendar/pc/effect.d.ts +1 -0
  513. package/dist/_pkgs/data-view/view-presets/calendar/pc/effect.js +7 -0
  514. package/dist/_pkgs/data-view/view-presets/calendar/pc/hit-test.d.ts +1 -0
  515. package/dist/_pkgs/data-view/view-presets/calendar/pc/hit-test.js +28 -0
  516. package/dist/_pkgs/data-view/view-presets/calendar/pc/styles.d.ts +1 -0
  517. package/dist/_pkgs/data-view/view-presets/calendar/pc/styles.js +707 -0
  518. package/dist/_pkgs/data-view/view-presets/calendar/pc/view.d.ts +89 -0
  519. package/dist/_pkgs/data-view/view-presets/calendar/pc/view.js +849 -0
  520. package/dist/_pkgs/data-view/view-presets/calendar/renderer.d.ts +2 -0
  521. package/dist/_pkgs/data-view/view-presets/calendar/renderer.js +8 -0
  522. package/dist/_pkgs/data-view/view-presets/calendar/source.d.ts +8 -0
  523. package/dist/_pkgs/data-view/view-presets/calendar/source.js +3 -0
  524. package/dist/_pkgs/data-view/view-presets/calendar/types.d.ts +79 -0
  525. package/dist/_pkgs/data-view/view-presets/calendar/types.js +1 -0
  526. package/dist/_pkgs/data-view/view-presets/convert.js +28 -0
  527. package/dist/_pkgs/data-view/view-presets/effect.js +2 -0
  528. package/dist/_pkgs/data-view/view-presets/index.d.ts +2 -0
  529. package/dist/_pkgs/data-view/view-presets/index.js +3 -0
  530. package/dist/_pkgs/data-view/view-presets/kanban/kanban-view-manager.js +3 -1
  531. package/dist/_pkgs/data-view/view-presets/kanban/mobile/cell.js +2 -2
  532. package/dist/_pkgs/data-view/view-presets/table/collapsed-state.d.ts +18 -0
  533. package/dist/_pkgs/data-view/view-presets/table/collapsed-state.js +36 -0
  534. package/dist/_pkgs/data-view/view-presets/table/mobile/cell.js +2 -2
  535. package/dist/_pkgs/data-view/view-presets/table/mobile/group.d.ts +11 -0
  536. package/dist/_pkgs/data-view/view-presets/table/mobile/group.js +89 -4
  537. package/dist/_pkgs/data-view/view-presets/table/pc/cell.d.ts +3 -0
  538. package/dist/_pkgs/data-view/view-presets/table/pc/cell.js +11 -2
  539. package/dist/_pkgs/data-view/view-presets/table/pc/controller/hotkeys.d.ts +1 -0
  540. package/dist/_pkgs/data-view/view-presets/table/pc/controller/hotkeys.js +39 -33
  541. package/dist/_pkgs/data-view/view-presets/table/pc/group.d.ts +10 -0
  542. package/dist/_pkgs/data-view/view-presets/table/pc/group.js +86 -5
  543. package/dist/_pkgs/data-view/view-presets/table/pc-virtual/controller/hotkeys.d.ts +1 -0
  544. package/dist/_pkgs/data-view/view-presets/table/pc-virtual/controller/hotkeys.js +39 -33
  545. package/dist/_pkgs/data-view/view-presets/table/pc-virtual/group/top/group-title.js +18 -18
  546. package/dist/_pkgs/data-view/view-presets/table/pc-virtual/row/cell.d.ts +3 -0
  547. package/dist/_pkgs/data-view/view-presets/table/pc-virtual/row/cell.js +8 -0
  548. package/dist/_pkgs/data-view/view-presets/table/table-view-manager.js +3 -1
  549. package/dist/_pkgs/data-view/view-presets/table/utils.d.ts +3 -0
  550. package/dist/_pkgs/data-view/view-presets/table/utils.js +16 -1
  551. package/dist/_pkgs/data-view/widget-presets/tools/presets/view-options/view-options.js +3 -1
  552. package/dist/_pkgs/global/gfx/curve.js +4 -3
  553. package/dist/_pkgs/std/clipboard/clipboard.js +13 -3
  554. package/dist/_pkgs/std/clipboard/utils.d.ts +5 -0
  555. package/dist/_pkgs/std/clipboard/utils.js +10 -0
  556. package/dist/_pkgs/std/event/dispatcher.js +27 -1
  557. package/dist/_pkgs/std/event/keymap.js +16 -6
  558. package/dist/_pkgs/std/extension/command-registry.d.ts +475 -0
  559. package/dist/_pkgs/std/extension/command-registry.js +431 -0
  560. package/dist/_pkgs/std/extension/dnd/index.d.ts +1 -1
  561. package/dist/_pkgs/std/extension/index.d.ts +2 -0
  562. package/dist/_pkgs/std/extension/index.js +2 -0
  563. package/dist/_pkgs/std/extension/shortcut.js +2 -1
  564. package/dist/_pkgs/std/extension/translation-manifest.d.ts +49 -0
  565. package/dist/_pkgs/std/extension/translation-manifest.js +71 -0
  566. package/dist/_pkgs/std/gfx/grid.js +1 -1
  567. package/dist/_pkgs/std/gfx/index.d.ts +7 -3
  568. package/dist/_pkgs/std/gfx/index.js +6 -2
  569. package/dist/_pkgs/std/gfx/interactivity/gfx-view-event-handler.js +6 -1
  570. package/dist/_pkgs/std/gfx/interactivity/manager.d.ts +8 -0
  571. package/dist/_pkgs/std/gfx/interactivity/manager.js +18 -0
  572. package/dist/_pkgs/std/gfx/layer.d.ts +1 -1
  573. package/dist/_pkgs/std/gfx/layer.js +1 -2
  574. package/dist/_pkgs/std/gfx/model/surface/decorators/field.js +9 -0
  575. package/dist/_pkgs/std/gfx/model/surface/decorators/index.d.ts +2 -2
  576. package/dist/_pkgs/std/gfx/model/surface/decorators/index.js +2 -2
  577. package/dist/_pkgs/std/gfx/model/surface/decorators/local.d.ts +14 -0
  578. package/dist/_pkgs/std/gfx/model/surface/decorators/local.js +22 -0
  579. package/dist/_pkgs/std/gfx/model/surface/decorators/observer.d.ts +2 -0
  580. package/dist/_pkgs/std/gfx/model/surface/decorators/observer.js +40 -1
  581. package/dist/_pkgs/std/gfx/model/surface/element-model.d.ts +442 -0
  582. package/dist/_pkgs/std/gfx/model/surface/element-model.js +510 -25
  583. package/dist/_pkgs/std/gfx/model/surface/pivot.d.ts +48 -0
  584. package/dist/_pkgs/std/gfx/model/surface/pivot.js +34 -0
  585. package/dist/_pkgs/std/gfx/model/surface/role.d.ts +153 -0
  586. package/dist/_pkgs/std/gfx/model/surface/role.js +117 -0
  587. package/dist/_pkgs/std/gfx/model/surface/surface-model.d.ts +70 -0
  588. package/dist/_pkgs/std/gfx/model/surface/surface-model.js +305 -17
  589. package/dist/_pkgs/std/gfx/model/surface/tags.d.ts +77 -0
  590. package/dist/_pkgs/std/gfx/model/surface/tags.js +246 -0
  591. package/dist/_pkgs/std/gfx/perf.d.ts +10 -0
  592. package/dist/_pkgs/std/gfx/perf.js +30 -0
  593. package/dist/_pkgs/std/gfx/selection.js +1 -1
  594. package/dist/_pkgs/std/gfx/tool/tool-controller.d.ts +13 -0
  595. package/dist/_pkgs/std/gfx/tool/tool-controller.js +26 -0
  596. package/dist/_pkgs/std/gfx/viewport.d.ts +12 -0
  597. package/dist/_pkgs/std/gfx/viewport.js +20 -2
  598. package/dist/_pkgs/std/inline/extensions/inline-manager.js +1 -1
  599. package/dist/_pkgs/std/inline/extensions/markdown-matcher.js +1 -1
  600. package/dist/_pkgs/std/inline/services/event.d.ts +2 -0
  601. package/dist/_pkgs/std/inline/services/event.js +96 -21
  602. package/dist/_pkgs/std/utils/layer.js +2 -6
  603. package/dist/_pkgs/std/utils/tree.d.ts +14 -0
  604. package/dist/_pkgs/std/utils/tree.js +59 -8
  605. package/dist/_pkgs/std/view/element/gfx-block-component.js +23 -13
  606. package/dist/_pkgs/store/extension/workspace/workspace-meta.d.ts +10 -0
  607. package/dist/_pkgs/store/model/block/flat-sync-controller.js +2 -12
  608. package/dist/_pkgs/store/model/store/crud.js +10 -4
  609. package/dist/_pkgs/store/reactive/flat-native-y/index.d.ts +1 -1
  610. package/dist/_pkgs/store/reactive/flat-native-y/index.js +24 -2
  611. package/dist/commands.d.ts +58 -0
  612. package/dist/commands.js +66 -0
  613. package/dist/extensions/command-telemetry.d.ts +21 -0
  614. package/dist/extensions/command-telemetry.js +89 -0
  615. package/dist/extensions/command-usage.d.ts +23 -0
  616. package/dist/extensions/command-usage.js +37 -0
  617. package/dist/extensions/store.d.ts +9 -4
  618. package/dist/extensions/store.js +27 -24
  619. package/dist/extensions/view.d.ts +9 -4
  620. package/dist/extensions/view.js +35 -8
  621. package/dist/flags.d.ts +98 -21
  622. package/dist/flags.js +103 -22
  623. package/dist/frameworks.d.ts +45 -0
  624. package/dist/frameworks.js +186 -0
  625. package/dist/schemas.d.ts +8 -5
  626. package/dist/schemas.js +28 -32
  627. package/dist/shortcuts.d.ts +16 -16
  628. package/dist/shortcuts.js +8 -36
  629. package/dist/translations.d.ts +56 -0
  630. package/dist/translations.js +200 -0
  631. package/package.json +16 -4
  632. package/dist/_pkgs/affine-block-root/keyboard/shortcuts.d.ts +0 -8
  633. package/dist/_pkgs/affine-block-root/keyboard/shortcuts.js +0 -48
  634. package/dist/_pkgs/affine-gfx-shape/shortcuts.d.ts +0 -6
  635. package/dist/_pkgs/affine-gfx-shape/shortcuts.js +0 -28
  636. package/dist/_pkgs/data-view/core/utils/cache.d.ts +0 -5
  637. package/dist/_pkgs/data-view/core/utils/cache.js +0 -28
@@ -41,7 +41,55 @@ import { Subject } from 'rxjs';
41
41
  import * as Y from 'yjs';
42
42
  import { descendantElementsImpl, hasDescendantElementImpl, isLockedByAncestorImpl, isLockedBySelfImpl, isLockedImpl, lockElementImpl, unlockElementImpl, } from '../../../utils/tree.js';
43
43
  import { gfxGroupCompatibleSymbol } from '../base.js';
44
- import { convertProps, field, getDerivedProps, getFieldPropsSet, local, updateDerivedProps, watch, } from './decorators/index.js';
44
+ import { convertProps, field, getDerivedProps, getFieldPropsSet, hasObserveMeta, local, observe, startObserve, updateDerivedProps, watch, } from './decorators/index.js';
45
+ /**
46
+ * Declared `@field()`s that {@link GfxPrimitiveElementModel.clearField} refuses
47
+ * to remove, because they have no meaningful ABSENT state: every one of them is
48
+ * read unconditionally, with no fallback, by code that has no way to cope.
49
+ *
50
+ * - `index` — the fractional z-order key. Gone, the element's stacking is
51
+ * `undefined` and the layer manager sorts it nowhere, silently.
52
+ * - `xywh` — gone, `elementBound` collapses to `{0,0,0,0}` and the renderer
53
+ * throws `"undefined" is not valid JSON` on every frame.
54
+ * - `seed` — the roughness seed; gone, the hand-drawn renderers produce a
55
+ * different shape on every repaint.
56
+ *
57
+ * An optional field is exactly one whose accessor declares a usable default (or
58
+ * `undefined`), and those stay clearable. This list is the short answer to
59
+ * "which declared fields are not optional"; it is a deny-list on purpose, so a
60
+ * new optional field needs no ceremony and a new structural one is a deliberate
61
+ * addition here.
62
+ */
63
+ const UNCLEARABLE_ELEMENT_FIELDS = new Set(['index', 'seed', 'xywh']);
64
+ /**
65
+ * Republish a nested-`Y.Map` field change as an element-level change.
66
+ *
67
+ * `syncElementFromY` observes the element's OWN `Y.Map` only, so mutating a
68
+ * value INSIDE {@link GfxPrimitiveElementModel.tags} — which is the whole point
69
+ * of storing it as a nested map, since that is what makes two people qualifying
70
+ * one element on two different tags both keep their work — emits nothing. This
71
+ * is the `Y.Map` counterpart of the `watchText` bridge the same file already
72
+ * ships for nested `Y.Text`, and it is what puts a per-tag write on the same
73
+ * footing as every other field: one `elementUpdated`, carrying the transaction's
74
+ * own `local` flag, for the renderer, the rules engine and
75
+ * `PivotMaterialityPublisher` alike.
76
+ *
77
+ * `transaction === null` is the observer ATTACHING, not a change (see
78
+ * `startObserve`); republishing there would fire on every mount and on every
79
+ * re-attach.
80
+ */
81
+ function observeTags(_, instance, transaction) {
82
+ if (transaction === null)
83
+ return;
84
+ instance['_onChange']({
85
+ props: { tags: instance.tags },
86
+ // Deliberately empty, exactly like `watchText`: Yjs gives the delta of the
87
+ // NESTED map, and inventing a previous value for the whole field would be
88
+ // a guess. Consumers that need the old set read it from their own state.
89
+ oldValues: {},
90
+ local: transaction.local,
91
+ });
92
+ }
45
93
  let GfxPrimitiveElementModel = (() => {
46
94
  let _display_decorators;
47
95
  let _display_initializers = [];
@@ -61,6 +109,27 @@ let GfxPrimitiveElementModel = (() => {
61
109
  let _linkedDocId_decorators;
62
110
  let _linkedDocId_initializers = [];
63
111
  let _linkedDocId_extraInitializers = [];
112
+ let _pivotDocId_decorators;
113
+ let _pivotDocId_initializers = [];
114
+ let _pivotDocId_extraInitializers = [];
115
+ let _role_decorators;
116
+ let _role_initializers = [];
117
+ let _role_extraInitializers = [];
118
+ let _tags_decorators;
119
+ let _tags_initializers = [];
120
+ let _tags_extraInitializers = [];
121
+ let _validationExceptions_decorators;
122
+ let _validationExceptions_initializers = [];
123
+ let _validationExceptions_extraInitializers = [];
124
+ let _validationProfile_decorators;
125
+ let _validationProfile_initializers = [];
126
+ let _validationProfile_extraInitializers = [];
127
+ let _qualityChecklist_decorators;
128
+ let _qualityChecklist_initializers = [];
129
+ let _qualityChecklist_extraInitializers = [];
130
+ let _interchange_decorators;
131
+ let _interchange_initializers = [];
132
+ let _interchange_extraInitializers = [];
64
133
  let _lockedBySelf_decorators;
65
134
  let _lockedBySelf_initializers = [];
66
135
  let _lockedBySelf_extraInitializers = [];
@@ -84,6 +153,13 @@ let GfxPrimitiveElementModel = (() => {
84
153
  _index_decorators = [field()];
85
154
  _externalLink_decorators = [field()];
86
155
  _linkedDocId_decorators = [field()];
156
+ _pivotDocId_decorators = [field()];
157
+ _role_decorators = [field()];
158
+ _tags_decorators = [observe(observeTags), field()];
159
+ _validationExceptions_decorators = [field()];
160
+ _validationProfile_decorators = [field()];
161
+ _qualityChecklist_decorators = [field()];
162
+ _interchange_decorators = [field()];
87
163
  _lockedBySelf_decorators = [field()];
88
164
  _opacity_decorators = [local()];
89
165
  _responseExtension_decorators = [local()];
@@ -94,6 +170,13 @@ let GfxPrimitiveElementModel = (() => {
94
170
  __esDecorate(this, null, _index_decorators, { kind: "accessor", name: "index", static: false, private: false, access: { has: obj => "index" in obj, get: obj => obj.index, set: (obj, value) => { obj.index = value; } }, metadata: _metadata }, _index_initializers, _index_extraInitializers);
95
171
  __esDecorate(this, null, _externalLink_decorators, { kind: "accessor", name: "externalLink", static: false, private: false, access: { has: obj => "externalLink" in obj, get: obj => obj.externalLink, set: (obj, value) => { obj.externalLink = value; } }, metadata: _metadata }, _externalLink_initializers, _externalLink_extraInitializers);
96
172
  __esDecorate(this, null, _linkedDocId_decorators, { kind: "accessor", name: "linkedDocId", static: false, private: false, access: { has: obj => "linkedDocId" in obj, get: obj => obj.linkedDocId, set: (obj, value) => { obj.linkedDocId = value; } }, metadata: _metadata }, _linkedDocId_initializers, _linkedDocId_extraInitializers);
173
+ __esDecorate(this, null, _pivotDocId_decorators, { kind: "accessor", name: "pivotDocId", static: false, private: false, access: { has: obj => "pivotDocId" in obj, get: obj => obj.pivotDocId, set: (obj, value) => { obj.pivotDocId = value; } }, metadata: _metadata }, _pivotDocId_initializers, _pivotDocId_extraInitializers);
174
+ __esDecorate(this, null, _role_decorators, { kind: "accessor", name: "role", static: false, private: false, access: { has: obj => "role" in obj, get: obj => obj.role, set: (obj, value) => { obj.role = value; } }, metadata: _metadata }, _role_initializers, _role_extraInitializers);
175
+ __esDecorate(this, null, _tags_decorators, { kind: "accessor", name: "tags", static: false, private: false, access: { has: obj => "tags" in obj, get: obj => obj.tags, set: (obj, value) => { obj.tags = value; } }, metadata: _metadata }, _tags_initializers, _tags_extraInitializers);
176
+ __esDecorate(this, null, _validationExceptions_decorators, { kind: "accessor", name: "validationExceptions", static: false, private: false, access: { has: obj => "validationExceptions" in obj, get: obj => obj.validationExceptions, set: (obj, value) => { obj.validationExceptions = value; } }, metadata: _metadata }, _validationExceptions_initializers, _validationExceptions_extraInitializers);
177
+ __esDecorate(this, null, _validationProfile_decorators, { kind: "accessor", name: "validationProfile", static: false, private: false, access: { has: obj => "validationProfile" in obj, get: obj => obj.validationProfile, set: (obj, value) => { obj.validationProfile = value; } }, metadata: _metadata }, _validationProfile_initializers, _validationProfile_extraInitializers);
178
+ __esDecorate(this, null, _qualityChecklist_decorators, { kind: "accessor", name: "qualityChecklist", static: false, private: false, access: { has: obj => "qualityChecklist" in obj, get: obj => obj.qualityChecklist, set: (obj, value) => { obj.qualityChecklist = value; } }, metadata: _metadata }, _qualityChecklist_initializers, _qualityChecklist_extraInitializers);
179
+ __esDecorate(this, null, _interchange_decorators, { kind: "accessor", name: "interchange", static: false, private: false, access: { has: obj => "interchange" in obj, get: obj => obj.interchange, set: (obj, value) => { obj.interchange = value; } }, metadata: _metadata }, _interchange_initializers, _interchange_extraInitializers);
97
180
  __esDecorate(this, null, _lockedBySelf_decorators, { kind: "accessor", name: "lockedBySelf", static: false, private: false, access: { has: obj => "lockedBySelf" in obj, get: obj => obj.lockedBySelf, set: (obj, value) => { obj.lockedBySelf = value; } }, metadata: _metadata }, _lockedBySelf_initializers, _lockedBySelf_extraInitializers);
98
181
  __esDecorate(this, null, _opacity_decorators, { kind: "accessor", name: "opacity", static: false, private: false, access: { has: obj => "opacity" in obj, get: obj => obj.opacity, set: (obj, value) => { obj.opacity = value; } }, metadata: _metadata }, _opacity_initializers, _opacity_extraInitializers);
99
182
  __esDecorate(this, null, _responseExtension_decorators, { kind: "accessor", name: "responseExtension", static: false, private: false, access: { has: obj => "responseExtension" in obj, get: obj => obj.responseExtension, set: (obj, value) => { obj.responseExtension = value; } }, metadata: _metadata }, _responseExtension_initializers, _responseExtension_extraInitializers);
@@ -104,8 +187,10 @@ let GfxPrimitiveElementModel = (() => {
104
187
  return true;
105
188
  }
106
189
  get deserializedXYWH() {
107
- if (!this._lastXYWH || this.xywh !== this._lastXYWH) {
108
- const xywh = this.xywh;
190
+ // Read `xywh` once: on a group it is a derived getter that may recompute
191
+ // the union of every child bound, so reading it twice doubles the cost.
192
+ const xywh = this.xywh;
193
+ if (!this._lastXYWH || xywh !== this._lastXYWH) {
109
194
  this._local.set('deserializedXYWH', deserializeXYWH(xywh));
110
195
  this._lastXYWH = xywh;
111
196
  }
@@ -174,7 +259,14 @@ let GfxPrimitiveElementModel = (() => {
174
259
  this.#index_accessor_storage = (__runInitializers(this, _hidden_extraInitializers), __runInitializers(this, _index_initializers, void 0));
175
260
  this.#externalLink_accessor_storage = (__runInitializers(this, _index_extraInitializers), __runInitializers(this, _externalLink_initializers, undefined));
176
261
  this.#linkedDocId_accessor_storage = (__runInitializers(this, _externalLink_extraInitializers), __runInitializers(this, _linkedDocId_initializers, undefined));
177
- this.#lockedBySelf_accessor_storage = (__runInitializers(this, _linkedDocId_extraInitializers), __runInitializers(this, _lockedBySelf_initializers, false));
262
+ this.#pivotDocId_accessor_storage = (__runInitializers(this, _linkedDocId_extraInitializers), __runInitializers(this, _pivotDocId_initializers, undefined));
263
+ this.#role_accessor_storage = (__runInitializers(this, _pivotDocId_extraInitializers), __runInitializers(this, _role_initializers, undefined));
264
+ this.#tags_accessor_storage = (__runInitializers(this, _role_extraInitializers), __runInitializers(this, _tags_initializers, undefined));
265
+ this.#validationExceptions_accessor_storage = (__runInitializers(this, _tags_extraInitializers), __runInitializers(this, _validationExceptions_initializers, undefined));
266
+ this.#validationProfile_accessor_storage = (__runInitializers(this, _validationExceptions_extraInitializers), __runInitializers(this, _validationProfile_initializers, undefined));
267
+ this.#qualityChecklist_accessor_storage = (__runInitializers(this, _validationProfile_extraInitializers), __runInitializers(this, _qualityChecklist_initializers, undefined));
268
+ this.#interchange_accessor_storage = (__runInitializers(this, _qualityChecklist_extraInitializers), __runInitializers(this, _interchange_initializers, undefined));
269
+ this.#lockedBySelf_accessor_storage = (__runInitializers(this, _interchange_extraInitializers), __runInitializers(this, _lockedBySelf_initializers, false));
178
270
  this.#opacity_accessor_storage = (__runInitializers(this, _lockedBySelf_extraInitializers), __runInitializers(this, _opacity_initializers, 1));
179
271
  this.#responseExtension_accessor_storage = (__runInitializers(this, _opacity_extraInitializers), __runInitializers(this, _responseExtension_initializers, [0, 0]));
180
272
  this.#seed_accessor_storage = (__runInitializers(this, _responseExtension_extraInitializers), __runInitializers(this, _seed_initializers, void 0));
@@ -185,6 +277,12 @@ let GfxPrimitiveElementModel = (() => {
185
277
  this.surface = model;
186
278
  this._stashed = stashedStore;
187
279
  this._onChange = onChange;
280
+ // DO NOT turn these two into field initializers. `@field()` deliberately
281
+ // does NOT write an `undefined` default into the Y.Map (see
282
+ // `./decorators/field.ts`), and both accessors are declared without an
283
+ // initializer — so these assignments, which go through the SETTER, are the
284
+ // only reason `index` and `seed` reach the document at all. Losing `index`
285
+ // would silently corrupt z-order on every new element.
188
286
  this.index = 'a0';
189
287
  this.seed = randomSeed();
190
288
  }
@@ -288,6 +386,63 @@ let GfxPrimitiveElementModel = (() => {
288
386
  unlock() {
289
387
  unlockElementImpl(this.surface.store, this);
290
388
  }
389
+ /**
390
+ * Remove an OPTIONAL `@field()` from the document entirely.
391
+ *
392
+ * The missing half of `@field()`. Its setter is unconditional — assigning
393
+ * `undefined` still calls `yMap.set(prop, undefined)` — so "clearing" an
394
+ * optional field through the accessor leaves the KEY behind. The getter reads
395
+ * `undefined` and nothing misbehaves, but the element is no longer
396
+ * byte-identical to one that never had the field: the phantom key syncs to
397
+ * every peer and ships in every snapshot. `init` is already careful to write
398
+ * nothing for an `undefined` default; this is how a field gets back to that
399
+ * state once it has been set.
400
+ *
401
+ * Emits a `delete` action rather than an `update`, so a consumer filtering on
402
+ * `props` will see an EMPTY payload and must inspect `oldValues` — the same
403
+ * shape an undo of the original write produces.
404
+ *
405
+ * ## What it refuses, and why that is load-bearing
406
+ *
407
+ * This is a direct write path into the element's Y.Map, on the class that
408
+ * carries the document format, exported by `@labre/std` and therefore
409
+ * callable by a host. `_assignElementProp` learned the same lesson in the
410
+ * unknown-props change (see `docs/spikes/us-1-8-unknown-props-preservation.md`,
411
+ * whose deny-list is explicitly security rather than hygiene); an unguarded
412
+ * delete re-opens the door from the other side. So:
413
+ *
414
+ * - a key the element class does not DECLARE as a `@field()` is refused. It
415
+ * is either an unknown key preserved verbatim for a newer client — deleting
416
+ * it is exactly the data loss that change exists to prevent — or not
417
+ * document data at all;
418
+ * - a STRUCTURAL field is refused even though it is declared
419
+ * ({@link UNCLEARABLE_ELEMENT_FIELDS}).
420
+ *
421
+ * Refusal is a no-op plus a `console.warn`, the same way an unencodable value
422
+ * is dropped rather than thrown: a misuse must not take the board down, and
423
+ * must not silently corrupt it either.
424
+ */
425
+ clearField(prop) {
426
+ if (UNCLEARABLE_ELEMENT_FIELDS.has(prop)) {
427
+ console.warn(`Refusing to clear the structural element field "${prop}": it has no meaningful absent state.`);
428
+ return;
429
+ }
430
+ if (!getFieldPropsSet(this).has(prop)) {
431
+ console.warn(`Refusing to clear "${prop}": not a declared @field() on this element. Unknown keys are preserved deliberately.`);
432
+ return;
433
+ }
434
+ if (!this.yMap.has(prop))
435
+ return;
436
+ if (this.yMap.doc) {
437
+ this.surface.store.transact(() => {
438
+ this.yMap.delete(prop);
439
+ });
440
+ // The Y.Map observer prunes `_preserved` on the delete action.
441
+ return;
442
+ }
443
+ this.yMap.delete(prop);
444
+ this._preserved.delete(prop);
445
+ }
291
446
  #display_accessor_storage;
292
447
  get display() { return this.#display_accessor_storage; }
293
448
  set display(value) { this.#display_accessor_storage = value; }
@@ -317,6 +472,271 @@ let GfxPrimitiveElementModel = (() => {
317
472
  #linkedDocId_accessor_storage;
318
473
  get linkedDocId() { return this.#linkedDocId_accessor_storage; }
319
474
  set linkedDocId(value) { this.#linkedDocId_accessor_storage = value; }
475
+ #pivotDocId_accessor_storage;
476
+ /**
477
+ * Identity binding to a host-owned **pivot record**: this element is an
478
+ * *occurrence* of the document `pivotDocId`. Many elements, across many
479
+ * boards, may carry the same `pivotDocId` — that is the point. A Wardley
480
+ * `component` drawn on three maps is the same component (MF1, ADR 0005).
481
+ *
482
+ * Opaque to the library: the framework never dereferences it, never fetches
483
+ * it, never renders it. Reading it is the host's job, through
484
+ * `PivotPropertiesProvider` (`@labre/affine-shared/services`, ADR 0006).
485
+ * No renderer, no hit-test, no layout and no exporter may read it; it
486
+ * participates in no `@derive`, `@convert` or `@watch` chain, so it cannot
487
+ * move, resize or restyle anything.
488
+ *
489
+ * Orthogonal to {@link linkedDocId} / {@link externalLink}, which are a
490
+ * *hyperlink* (navigation), not an identity. They differ on every axis that
491
+ * matters — cardinality (a hyperlink is one target per element and is
492
+ * exclusive with `externalLink`; a binding is many-elements-to-one-record),
493
+ * lifecycle (a hyperlink is picked from a search modal, a binding is created
494
+ * by promotion) and consumers (an arrow that navigates vs. a hover card and
495
+ * a rules engine). An element may legitimately carry both, and code reading
496
+ * one as a stand-in for the other is a bug.
497
+ *
498
+ * Declared on the BASE class for the same reason as {@link role}: an element
499
+ * re-created from props (paste, duplicate, alt-drag clone, template
500
+ * insertion) only reaches the Y.Map through keys that have a declared
501
+ * accessor, so a binding declared per subclass would be silently dropped on
502
+ * copy — and the loss would be invisible until the next reload.
503
+ *
504
+ * `undefined` = unbound, and no key is written for it, so an element that
505
+ * never binds stays byte-identical to one created before the field existed:
506
+ * optional field, no schema version bump, no migration. Clearing it goes
507
+ * through {@link clearField}, which removes the key rather than leaving a
508
+ * tombstone.
509
+ *
510
+ * A binding to a record that does not (yet) exist — or was deleted, or is
511
+ * invisible to this user — is a legal, persisted state: the library never
512
+ * validates it and never deletes host data. It resolves to `missing` at read
513
+ * time (ADR 0006).
514
+ */
515
+ get pivotDocId() { return this.#pivotDocId_accessor_storage; }
516
+ set pivotDocId(value) { this.#pivotDocId_accessor_storage = value; }
517
+ #role_accessor_storage;
518
+ /**
519
+ * Semantic role of the element, `<framework>:<role>` (see `./role.ts`).
520
+ * `undefined` = neutral: generalist elements carry no role, and no key is
521
+ * written for them at creation.
522
+ *
523
+ * Declared on the BASE class on purpose, even though only framework modules
524
+ * set it: an element re-created from props (paste, duplicate, template
525
+ * insertion) only reaches the Y.Map through keys that have a declared
526
+ * accessor, so a role declared per subclass would be silently dropped on
527
+ * copy. Flat string on purpose — element serialization is one level deep.
528
+ */
529
+ get role() { return this.#role_accessor_storage; }
530
+ set role(value) { this.#role_accessor_storage = value; }
531
+ #tags_accessor_storage;
532
+ /**
533
+ * Level 3 — **contextual qualification** (ADR 0007 § 4). Tag def id → the
534
+ * value ids selected for it, e.g. `{ 'wardley:nature': ['wardley:nature/data'] }`.
535
+ *
536
+ * Both halves of a key are namespaced by framework on purpose: two universes
537
+ * WILL collide on a word like `activity` — `edgy:activity` is already an EDGY
538
+ * base element while `activity` is one of Wardley's four natures — and
539
+ * namespacing is what makes that collision harmless rather than decorative.
540
+ *
541
+ * Absent and empty are equivalent (both mean "unqualified"), and the default
542
+ * is `undefined`, **never** `new Y.Map()`: `@field()`'s `init` writes nothing
543
+ * for an `undefined` default, so an element that is never qualified — every
544
+ * brush stroke, every connector — stays byte-identical to one created before
545
+ * the field existed. A non-`undefined` default on this base class would
546
+ * reinstate that cost on every element of every document. The qualification
547
+ * writer (`setElementTag`, `./tags.js`) creates the map on first use and
548
+ * removes the key again when the last tag goes.
549
+ *
550
+ * ## Why a NESTED `Y.Map` and not a plain object
551
+ *
552
+ * `@field()` writes straight into the element's `Y.Map` with no `native2Y` in
553
+ * the path, so a plain object here really would be ONE opaque value: two
554
+ * people qualifying the same element on two DIFFERENT tags would silently
555
+ * lose one of the two. A nested map merges per tag, which is what the shape
556
+ * has to do — there is no migration runner for surface elements, so it is
557
+ * chosen once. The `string[]` of a SINGLE tag stays last-write-wins, and that
558
+ * is correct: one tag's value set is one atomic choice.
559
+ *
560
+ * Exactly one level of Y-awareness, with plain arrays as values — shallower
561
+ * than `MindmapElementModel.children` (`Y.Map<NodeDetail>`), which already
562
+ * ships, and inside what `surface-transformer`'s `SURFACE_YMAP_UNIQ_IDENTIFIER`
563
+ * envelope round-trips generically.
564
+ *
565
+ * Declared on the BASE class for the same reason as {@link role} and
566
+ * {@link pivotDocId}: an element re-created from props (paste, duplicate,
567
+ * alt-drag clone, template insertion) only reaches the `Y.Map` through keys
568
+ * that have a declared accessor, and a qualification the user authored is
569
+ * exactly the kind of thing that must survive a copy. `SurfaceBlockModel`'s
570
+ * `_propsToY` rebuilds the map from the plain JSON `serialize()` produces, so
571
+ * a copy is a copy of the values and never a second reference to one map.
572
+ *
573
+ * Opaque to the framework: no renderer, no hit-test, no layout and no
574
+ * exporter reads it, and it participates in no `@derive` / `@convert` chain.
575
+ * Values whose def has vanished still load and are displayed as raw ids —
576
+ * defs are runtime configuration and are NEVER persisted.
577
+ */
578
+ get tags() { return this.#tags_accessor_storage; }
579
+ set tags(value) { this.#tags_accessor_storage = value; }
580
+ #validationExceptions_accessor_storage;
581
+ /**
582
+ * Validation rules this element is excused from (PF8, "no rule is a wall").
583
+ *
584
+ * Declared on the BASE class for the same reason as {@link role}: an element
585
+ * re-created from props (paste, duplicate, template insertion) only reaches
586
+ * the Y.Map through keys that have a declared accessor, so an exception
587
+ * declared per subclass would be silently dropped on copy — and an arbitration
588
+ * the user made explicitly is exactly the kind of thing that must survive a
589
+ * copy.
590
+ *
591
+ * `undefined` = no exception, and no key is written for it, so an element that
592
+ * never got one stays byte-identical to one created before the field existed:
593
+ * optional field, no schema version bump, no migration.
594
+ *
595
+ * Flat JSON on purpose — element serialization is one level deep, and a value
596
+ * a Yjs update can encode is the contract enforced by `_assignElementProp`.
597
+ * The engine that reads it lives in `@labre/affine-block-surface`; the base
598
+ * model only carries the data, and knows nothing about rules.
599
+ */
600
+ get validationExceptions() { return this.#validationExceptions_accessor_storage; }
601
+ set validationExceptions(value) { this.#validationExceptions_accessor_storage = value; }
602
+ #validationProfile_accessor_storage;
603
+ /**
604
+ * Id of the validation PROFILE this element's framework is checked against
605
+ * (PF9) — a set of enabled rules and their severities, declared as data by
606
+ * the framework.
607
+ *
608
+ * Carried by the framework's BACKGROUND element, i.e. the root instance, and
609
+ * not by the document: two maps on one canvas are two independent pieces of
610
+ * work, and a sketch has to be able to sit next to a deliverable without
611
+ * either of them dictating the other's requirements (PF9.1). The engine reads
612
+ * it off the background a finding was measured against, which it already
613
+ * names (`Violation.backgroundId`).
614
+ *
615
+ * Declared on the BASE class for the same reason as {@link role} and
616
+ * {@link validationExceptions}: an element re-created from props (paste,
617
+ * duplicate, template insertion) only reaches the Y.Map through keys that
618
+ * have a declared accessor, so a profile declared per subclass would be
619
+ * silently dropped on copy — and duplicating a strict map must give a strict
620
+ * map.
621
+ *
622
+ * `undefined` = "no explicit choice", which resolves to the framework's
623
+ * DEFAULT profile — the most permissive reasonable one, because the sketch
624
+ * wins. No key is written for it, so a document authored before this field
625
+ * existed stays byte-identical: optional field, no schema version bump, no
626
+ * migration. Choosing the default back again removes the key rather than
627
+ * writing it.
628
+ *
629
+ * Flat string on purpose — element serialization is one level deep. The
630
+ * engine that interprets it lives in `@labre/affine-block-surface`; the base
631
+ * model only carries the id, and knows nothing about profiles.
632
+ */
633
+ get validationProfile() { return this.#validationProfile_accessor_storage; }
634
+ set validationProfile(value) { this.#validationProfile_accessor_storage = value; }
635
+ #qualityChecklist_accessor_storage;
636
+ /**
637
+ * The map-quality NUDGES the user has ticked off on this instance (PF7.10) —
638
+ * ids of declarative reminders their framework ships, never rules the engine
639
+ * evaluates.
640
+ *
641
+ * A nudge is an expectation the tool cannot judge ("the map has a title that
642
+ * frames the study"): the content can exist without being good, so nothing
643
+ * here is ever computed. Ticking one is the same gesture as granting an
644
+ * exception — the user says "I have taken care of this" and the tool records
645
+ * it rather than pretending to check it.
646
+ *
647
+ * Carried by the framework's BACKGROUND element, i.e. the root instance, for
648
+ * the same reason {@link validationProfile} is: two maps on one canvas are two
649
+ * independent pieces of work, and a checklist ticked on one says nothing about
650
+ * the other.
651
+ *
652
+ * Declared on the BASE class for the same reason as {@link role} and
653
+ * {@link validationExceptions}: an element re-created from props (paste,
654
+ * duplicate, template insertion) only reaches the Y.Map through keys that have
655
+ * a declared accessor, so a checklist declared per subclass would be silently
656
+ * dropped on copy.
657
+ *
658
+ * `undefined` = nothing ticked, and no key is written for it, so a document
659
+ * authored before this field existed stays byte-identical: optional field, no
660
+ * schema version bump, no migration. Unticking the last one goes through
661
+ * {@link clearField}, which removes the key rather than leaving a tombstone.
662
+ *
663
+ * Flat JSON — an array of strings — on purpose: element serialization is one
664
+ * level deep, and a value a Yjs update can encode is the contract enforced by
665
+ * `_assignElementProp`. The library that interprets the ids lives in
666
+ * `@labre/affine-block-surface`; the base model only carries them, and knows
667
+ * nothing about nudges. Ids of nudges no framework declares any more are kept,
668
+ * not pruned: the tooling comes and goes with a flag, the decision does not.
669
+ */
670
+ get qualityChecklist() { return this.#qualityChecklist_accessor_storage; }
671
+ set qualityChecklist(value) { this.#qualityChecklist_accessor_storage = value; }
672
+ #interchange_accessor_storage;
673
+ /**
674
+ * Verbatim foreign matter from an interchange import, keyed by FORMAT id
675
+ * (`bpmn`, `owm`, …) — never by framework, because a `.bpmn` and an OWM file
676
+ * make different promises about the same element (ADR 0012 § D2).
677
+ *
678
+ * This field is dumb storage, and that is the whole design. ADR 0012 sorts
679
+ * every node of an imported file into three states — **mapped** (there is a
680
+ * Labre artefact, re-emitted from the drawing), **carried** (no artefact,
681
+ * kept verbatim here, re-emitted in place) and **quarantined** (kept, but
682
+ * re-emitting it would contradict the document, so it is not). That contract
683
+ * lives entirely in the importers and exporters; the base model neither
684
+ * classifies, validates, dereferences nor re-emits anything, and knows no
685
+ * format. No renderer, hit-test, layout or `@derive` / `@convert` chain reads
686
+ * it, so nothing here can move, resize or restyle an element.
687
+ *
688
+ * Declared on the BASE class for the same reason as {@link role} and
689
+ * {@link validationExceptions}, and for one more: a BPMN `sequenceFlow`
690
+ * carrying a `conditionExpression` is a plain **connector**, and
691
+ * `ConnectorElementModel` is shared plumbing that will never be a BPMN class.
692
+ * An element re-created from props (paste, duplicate, alt-drag clone,
693
+ * template insertion) only reaches the Y.Map through keys that have a
694
+ * declared accessor, so a payload declared per subclass would be silently
695
+ * dropped on copy — the exact loss `docs/spikes/us-1-8-unknown-props-preservation.md`
696
+ * exists to prevent. Declaring it, rather than leaning on that spike's
697
+ * verbatim fallback for undeclared keys, is what makes it a contract: a field
698
+ * nothing declares is a field nothing can test, strip or find.
699
+ *
700
+ * `undefined` = this element never met an import, and no key is written for
701
+ * it, so it stays byte-identical to one created before the field existed:
702
+ * optional field, no schema version bump, no migration. An import writes no
703
+ * key for a visual-tier capability, and none for an element that carried
704
+ * nothing. Clearing goes through {@link clearField}, which removes the key
705
+ * rather than leaving a tombstone.
706
+ *
707
+ * Flat JSON on purpose — a value a Yjs update can encode is the contract
708
+ * enforced by `_assignElementProp`, and the whole payload is ONE Y.Map entry,
709
+ * written once at import and never mutated afterwards. Two peers writing it
710
+ * concurrently therefore resolve last-write-wins on the whole blob, which is
711
+ * `lanes`' trade (ADR 0007): nobody edits this value, so the window is the
712
+ * import itself.
713
+ *
714
+ * ## Writing it, for the importer
715
+ *
716
+ * - **Write the whole blob in one assignment**, the way an import already
717
+ * produces it. Never read-modify-write it key by key: the Y.Map entry is the
718
+ * entire `Record`, so a partial update is still a last-write-wins overwrite
719
+ * of everything, and two of them racing lose a whole format's payload rather
720
+ * than merging.
721
+ * - **Key what you carry by its {@link InterchangeScope}.** One Labre element
722
+ * stands for several source elements, and an unscoped map lets what came off
723
+ * one overwrite what came off another — a silent loss, into a persisted
724
+ * value, of exactly the data this field exists to keep. The scope is also
725
+ * the only record of where a fragment has to be put back.
726
+ * - **Write no key at all** when there is nothing to carry — an element the
727
+ * import mapped cleanly, or any visual-tier capability, which by contract
728
+ * writes none (ADR 0012 P2). Absent and empty are NOT equivalent here:
729
+ * `{}` costs every element a Y.Map entry and makes P2's "writes no
730
+ * `interchange` key" untestable.
731
+ * - **Removing it is {@link clearField}**, never an assignment to `undefined`
732
+ * — the former deletes the key, the latter can leave a tombstone.
733
+ * - **Nothing caps the size of this value** (ADR 0012, open question 3). A
734
+ * pathological file would produce a document that is mostly foreign matter;
735
+ * a cap that dropped data would contradict D2, so the only honest cap is a
736
+ * refusal at import time. That is the importer's call, not the model's.
737
+ */
738
+ get interchange() { return this.#interchange_accessor_storage; }
739
+ set interchange(value) { this.#interchange_accessor_storage = value; }
320
740
  #lockedBySelf_accessor_storage;
321
741
  get lockedBySelf() { return this.#lockedBySelf_accessor_storage; }
322
742
  set lockedBySelf(value) { this.#lockedBySelf_accessor_storage = value; }
@@ -337,6 +757,17 @@ export class GfxGroupLikeElementModel extends GfxPrimitiveElementModel {
337
757
  super(...arguments);
338
758
  this._childIds = [];
339
759
  this._mutex = createMutex();
760
+ /**
761
+ * Whether the cached `xywh` must be recomputed from the children.
762
+ *
763
+ * The bound of a group is the union of its children bounds, which used to be
764
+ * recomputed on **every** read of `xywh` — and `xywh` is read many times per
765
+ * frame (renderer, hit test, toolbar anchor, selection rect…). It is now
766
+ * computed once per mutation: the surface marks the group dirty (or
767
+ * refreshes it eagerly) whenever a child changes, see
768
+ * {@link invalidateXYWH} / {@link refreshXYWH}.
769
+ */
770
+ this._xywhDirty = true;
340
771
  this[_a] = true;
341
772
  }
342
773
  static { _a = gfxGroupCompatibleSymbol; }
@@ -361,26 +792,47 @@ export class GfxGroupLikeElementModel extends GfxPrimitiveElementModel {
361
792
  }
362
793
  get xywh() {
363
794
  this._mutex(() => {
364
- const curXYWH = this._local.get('xywh') ?? '[0,0,0,0]';
365
- const newXYWH = this._getXYWH().serialize();
366
- if (curXYWH !== newXYWH || !this._local.has('xywh')) {
367
- this._local.set('xywh', newXYWH);
368
- if (curXYWH !== newXYWH) {
369
- this._onChange({
370
- props: {
371
- xywh: newXYWH,
372
- },
373
- oldValues: {
374
- xywh: curXYWH,
375
- },
376
- local: true,
377
- });
378
- }
795
+ if (this._xywhDirty || !this._local.has('xywh')) {
796
+ this._recomputeXYWH(true);
379
797
  }
380
798
  });
381
799
  return this._local.get('xywh') ?? '[0,0,0,0]';
382
800
  }
383
801
  set xywh(_) { }
802
+ /**
803
+ * Recompute the cached bound and notify the listeners when it moved.
804
+ *
805
+ * Always run it through {@link _mutex}: the notification re-enters the
806
+ * `xywh` getter (a parent group unites this bound again), and the mutex is
807
+ * what keeps that read from recomputing this very group a second time.
808
+ */
809
+ _recomputeXYWH(local) {
810
+ const oldXYWH = this._local.get('xywh') ?? '[0,0,0,0]';
811
+ const hadXYWH = this._local.has('xywh');
812
+ const nextXYWH = this._getXYWH().serialize();
813
+ this._xywhDirty = false;
814
+ if (hadXYWH && oldXYWH === nextXYWH) {
815
+ return;
816
+ }
817
+ // Set before notifying: the listeners read `xywh` back, and the mutex
818
+ // makes that read return the cached value instead of recomputing.
819
+ this._local.set('xywh', nextXYWH);
820
+ if (oldXYWH !== nextXYWH) {
821
+ this._onChange({
822
+ props: {
823
+ xywh: nextXYWH,
824
+ },
825
+ oldValues: {
826
+ xywh: oldXYWH,
827
+ },
828
+ local,
829
+ });
830
+ }
831
+ }
832
+ /**
833
+ * Pure: it only reads the children. The cache is written by
834
+ * {@link _recomputeXYWH}, which is the single place allowed to store it.
835
+ */
384
836
  _getXYWH() {
385
837
  let bound;
386
838
  this.childElements.forEach(child => {
@@ -389,14 +841,29 @@ export class GfxGroupLikeElementModel extends GfxPrimitiveElementModel {
389
841
  }
390
842
  bound = bound ? bound.unite(child.elementBound) : child.elementBound;
391
843
  });
392
- if (bound) {
393
- this._local.set('xywh', bound.serialize());
394
- }
395
- else {
396
- this._local.delete('xywh');
397
- }
398
844
  return bound ?? new Bound(0, 0, 0, 0);
399
845
  }
846
+ /**
847
+ * Mark the cached bound as stale without recomputing it. The next read of
848
+ * `xywh` pays for the recomputation, and notifies the listeners if the
849
+ * bound actually moved.
850
+ *
851
+ * Use it for the changes that only *may* move the bound (a custom prop a
852
+ * subclass folds into its own `elementBound`); use {@link refreshXYWH} for
853
+ * the changes that are known to move it.
854
+ */
855
+ invalidateXYWH() {
856
+ this._xywhDirty = true;
857
+ }
858
+ /**
859
+ * Recompute the cached bound right away, and notify the listeners when it
860
+ * moved. `local` is the origin of the mutation that moved it.
861
+ */
862
+ refreshXYWH(local) {
863
+ this._mutex(() => {
864
+ this._recomputeXYWH(local);
865
+ });
866
+ }
400
867
  /**
401
868
  * The actual field that stores the children of the group.
402
869
  * It should be a ymap decorated with `@field`.
@@ -418,6 +885,7 @@ export class GfxGroupLikeElementModel extends GfxPrimitiveElementModel {
418
885
  setChildIds(value, fromLocal) {
419
886
  const oldChildIds = this.childIds;
420
887
  this._childIds = value;
888
+ this.invalidateXYWH();
421
889
  this._onChange({
422
890
  props: {
423
891
  childIds: value,
@@ -446,12 +914,29 @@ export function syncElementFromY(model, callback) {
446
914
  disposables[key]?.();
447
915
  disposables[key] = watchText(key, value, callback);
448
916
  }
917
+ // A nested Y type declared with `@observe` gets a FRESH instance every
918
+ // time the key itself is rewritten — by a remote peer, or by undo/redo,
919
+ // neither of which goes through the accessor's setter (the only other
920
+ // caller of `startObserve`). Without this the observer is left on a
921
+ // detached type and every later in-place mutation goes unseen: set a
922
+ // tag, undo, redo, set another one, and the second write is invisible
923
+ // to the publisher. Guarded on identity so re-setting the same instance
924
+ // does not needlessly re-run the observer's initialising call.
925
+ if (model['_preserved'].get(key) !== value &&
926
+ hasObserveMeta(key, model)) {
927
+ startObserve(key, model);
928
+ }
449
929
  model['_preserved'].set(key, value);
450
930
  props[key] = value;
451
931
  oldValues[key] = oldValue;
452
932
  }
453
933
  else {
934
+ // `_preserved` is pruned FIRST: `startObserve` re-reads the accessor,
935
+ // which falls back to `_preserved`, so the other order would re-attach
936
+ // the observer to the very map that has just been deleted.
454
937
  model['_preserved'].delete(key);
938
+ if (hasObserveMeta(key, model))
939
+ startObserve(key, model);
455
940
  oldValues[key] = oldValue;
456
941
  }
457
942
  });