@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
@@ -0,0 +1,228 @@
1
+ /**
2
+ * `AuditProvider` — the injectable seam the **Labre Assistant** plugs into
3
+ * (PF14.1, ADR 0008 § surface `'agent'`, ADR 0006 § render-free host seam).
4
+ *
5
+ * ## What this is, and above all what it is not
6
+ *
7
+ * The executor is the Labre Assistant, app-side (PO decision, 01/08/2026). The
8
+ * library embarks **no model, no prompt runner and no dependency on one**. What
9
+ * it owns is the seam and only the seam:
10
+ *
11
+ * - the criteria, as versioned DATA a framework declares
12
+ * ({@link AuditCriterion}) — the same declarative, host-shippable shape a
13
+ * validation rule, a role or a background already has;
14
+ * - the FACTS of a map, collected render-free ({@link AuditFacts});
15
+ * - a channel out: {@link AuditFinding}s in `audit` severity, timestamped and
16
+ * carrying the criterion they came from.
17
+ *
18
+ * ## The one invariant everything else defends
19
+ *
20
+ * **The deterministic engine never depends on the AI.** Levels 1 and 2 —
21
+ * `blocking-overridable` and `warning`, evaluated by `evaluateRules` inside the
22
+ * 16 ms budget — are computed, rendered and arbitrated with no knowledge that
23
+ * this file exists. An audit READS their output as a fact and writes into a
24
+ * separate signal. There is no path by which a provider (slow, absent, hostile
25
+ * or simply wrong) can change a verdict, delay a frame or move a mark on the
26
+ * canvas.
27
+ *
28
+ * That is why {@link normalizeFinding} FORCES `severity: 'audit'` rather than
29
+ * trusting the provider: `audit` is the severity that is invisible to the
30
+ * drawing user (`userFacingViolations`), so a provider returning `'warning'`
31
+ * would otherwise put an AI opinion behind a canvas bracket.
32
+ */
33
+ import { createIdentifier } from '../../global/di/index.js';
34
+ export const AuditProvider = createIdentifier('LabreAuditService');
35
+ /**
36
+ * The ONLY way in. **No noop default is registered**, exactly as for
37
+ * `PivotPropertiesProvider`: absence is a *meaningful* state (standalone
38
+ * playground, unit tests, a labreapp build that has not wired its assistant),
39
+ * and making it the tested default is what keeps the degraded path honest.
40
+ */
41
+ export function AuditExtension(service) {
42
+ return {
43
+ setup: di => {
44
+ di.override(AuditProvider, () => service);
45
+ },
46
+ };
47
+ }
48
+ /** Multi-instance: one registered {@link AuditCriterion} per impl. */
49
+ export const AuditCriterionIdentifier = createIdentifier('AuditCriterion');
50
+ /**
51
+ * Register a framework's audit criteria. Call it from the FLAG-GATED view
52
+ * extension, beside `ValidationRuleExtension`: criteria are tooling, so a
53
+ * disabled framework contributes none and an audit of its maps has nothing to
54
+ * ask about.
55
+ *
56
+ * ```ts
57
+ * context.register(AuditCriterionExtension(WARDLEY_AUDIT_CRITERIA));
58
+ * ```
59
+ */
60
+ export function AuditCriterionExtension(criteria) {
61
+ return {
62
+ setup: di => {
63
+ for (const criterion of criteria) {
64
+ di.addImpl(AuditCriterionIdentifier(criterion.id), () => criterion);
65
+ }
66
+ },
67
+ };
68
+ }
69
+ /** Every criterion registered in this editor assembly. */
70
+ export function getAuditCriteria(std) {
71
+ return [...std.provider.getAll(AuditCriterionIdentifier).values()];
72
+ }
73
+ /** Whether a rejection is the caller's own abort rather than a failure. */
74
+ function isAbort(error, signal) {
75
+ if (signal?.aborted)
76
+ return true;
77
+ return error instanceof Error && error.name === 'AbortError';
78
+ }
79
+ /**
80
+ * Force a provider's answer into the ONE shape the library is willing to
81
+ * publish. Nothing here is a formality:
82
+ *
83
+ * - `severity` is OVERWRITTEN, never read. `'audit'` is the severity that stays
84
+ * off the canvas; a provider returning `'blocking-overridable'` would
85
+ * otherwise raise a bracket on an element over a sentence a model wrote.
86
+ * - `ruleId` is re-derived from the criterion, so a provider cannot attach its
87
+ * finding to a registered rule id and inherit that rule's exceptions,
88
+ * profile or toolbar arbitration.
89
+ * - a finding naming a criterion that was not in the request is DROPPED. The
90
+ * library asked three questions; an answer to a fourth is not an answer.
91
+ * - `at` is stamped library-side from one clock, so every finding of one run
92
+ * carries the same timestamp whatever the provider believes the time is.
93
+ */
94
+ function normalizeFinding(raw, criteria, at) {
95
+ const criterion = criteria.get(raw.criterionId);
96
+ if (!criterion)
97
+ return null;
98
+ return {
99
+ ...raw,
100
+ ruleId: `audit:${criterion.id}`,
101
+ // Whatever came back: an id list is the only part a provider authors, and
102
+ // it must be an array of strings or nothing at all.
103
+ elementIds: Array.isArray(raw.elementIds)
104
+ ? raw.elementIds.filter((id) => typeof id === 'string')
105
+ : [],
106
+ severity: 'audit',
107
+ criterionId: criterion.id,
108
+ criterionVersion: criterion.version,
109
+ at,
110
+ };
111
+ }
112
+ /**
113
+ * The guarded call every in-library consumer uses — the one place the provider
114
+ * contract is enforced rather than trusted.
115
+ *
116
+ * - **No provider registered** → `{ status: 'unavailable', findings: [] }`. A
117
+ * clean refusal, not a throw and not a crash: levels 1 and 2 are untouched
118
+ * and the caller reports nothing.
119
+ * - **The provider throws or rejects** → `{ status: 'error' }`, with the reason
120
+ * kept for logs and never rendered.
121
+ * - **The caller aborted** → `{ status: 'aborted' }`, keeping whatever findings
122
+ * the provider had already returned.
123
+ * - **`onProgress` throws** → swallowed. A broken progress bar must not kill
124
+ * the run that feeds it.
125
+ *
126
+ * ## The request is ISOLATED before it crosses (the outbound half)
127
+ *
128
+ * `normalizeFinding` exists because a provider is not believed on the way back.
129
+ * This is the same statement on the way out, and it was missing: the facts a
130
+ * collector assembles are not all fresh objects. `backgroundAxisFacts` returns
131
+ * `forward` straight from a module constant (`FORWARD` in
132
+ * `framework-background/facts.ts`) — `as const` is compile-time only and
133
+ * nothing is frozen — so every `frames[].axes[].forward` handed over WAS the
134
+ * very array the engine multiplies against in `evaluateOrientationAgainstAxis`.
135
+ * A provider writing into the facts it is given (normalising a vector in place,
136
+ * say) flipped the axis convention for the whole process, and correct arrows
137
+ * started reporting as violations on the canvas. That is precisely what this
138
+ * file's header declares impossible.
139
+ *
140
+ * `structuredClone` at the boundary fixes the whole class rather than that one
141
+ * field: no future fact can leak identity either, and the cost is a constraint
142
+ * the seam already claims (ADR 0006 § 5 — the request must be serializable, and
143
+ * a test round-trips it). Value-comparing tests were structurally blind to it;
144
+ * an identity assertion (`.toBe`) now guards it.
145
+ */
146
+ export async function requestAudit(std, request, options = {}) {
147
+ const provider = std.getOptional(AuditProvider);
148
+ if (!provider)
149
+ return { status: 'unavailable', findings: [] };
150
+ const criteria = new Map(request.criteria.map(c => [c.id, c]));
151
+ const { signal } = options;
152
+ // Asked before the call as well as after: a caller that aborts between
153
+ // building the request and issuing it must not start a run at all.
154
+ if (signal?.aborted)
155
+ return { status: 'aborted', findings: [] };
156
+ const onProgress = options.onProgress
157
+ ? (progress) => {
158
+ try {
159
+ options.onProgress?.(progress);
160
+ }
161
+ catch (error) {
162
+ console.error('AuditProvider onProgress threw', error);
163
+ }
164
+ }
165
+ : undefined;
166
+ // The outbound half of "a provider is not believed" — see the note above.
167
+ // A throw here means the facts stopped being serializable, which is a library
168
+ // bug and not a host one; it is reported loudly and degraded rather than
169
+ // allowed to become a crash in front of a user.
170
+ let isolated;
171
+ try {
172
+ isolated = structuredClone(request);
173
+ }
174
+ catch (error) {
175
+ console.error('audit facts are not structured-cloneable — the request cannot be ' +
176
+ 'isolated, so it is not sent (ADR 0006 § 5)', error);
177
+ return {
178
+ status: 'error',
179
+ findings: [],
180
+ reason: error instanceof Error ? error.message : String(error),
181
+ };
182
+ }
183
+ let raw;
184
+ try {
185
+ raw = await provider.runAudit(isolated, {
186
+ ...(onProgress ? { onProgress } : {}),
187
+ ...(signal ? { signal } : {}),
188
+ });
189
+ }
190
+ catch (error) {
191
+ if (isAbort(error, signal))
192
+ return { status: 'aborted', findings: [] };
193
+ console.error('AuditProvider.runAudit threw', error);
194
+ return {
195
+ status: 'error',
196
+ findings: [],
197
+ reason: error instanceof Error ? error.message : String(error),
198
+ };
199
+ }
200
+ const at = Date.now();
201
+ const findings = (raw?.findings ?? [])
202
+ .map(finding => normalizeFinding(finding, criteria, at))
203
+ .filter((finding) => finding !== null);
204
+ // A provider that resolved normally while the caller was aborting is still an
205
+ // abort: the caller asked to stop, and honouring that is not the provider's
206
+ // decision to make.
207
+ //
208
+ // `unavailable` passes through with `aborted` and `error`. A registered
209
+ // provider CAN be unable to answer — assistant behind an app-side feature
210
+ // flag, quota exhausted, no model configured — and folding that into
211
+ // `complete` would both inflate the completion series and empty the one
212
+ // number that says how often users reach for an audit this build cannot
213
+ // deliver. `superseded` is deliberately absent: it is the library's own
214
+ // arbitration between two of its calls, so a provider claiming it is read as
215
+ // `complete` and the arbitration stays where it belongs.
216
+ const status = signal?.aborted
217
+ ? 'aborted'
218
+ : raw?.status === 'aborted' ||
219
+ raw?.status === 'error' ||
220
+ raw?.status === 'unavailable'
221
+ ? raw.status
222
+ : 'complete';
223
+ return {
224
+ status,
225
+ findings,
226
+ ...(raw?.reason !== undefined ? { reason: raw.reason } : {}),
227
+ };
228
+ }
@@ -87,6 +87,13 @@ export declare class EditPropsStore extends LifeCycleWatcher {
87
87
  private readonly _disposables;
88
88
  private readonly innerProps$;
89
89
  lastProps$: Signal<LastProps>;
90
+ /**
91
+ * Flat accumulation of every style prop the user recorded, most recent
92
+ * value per prop, across element types. "Apply last style" (Mod+Y) reads
93
+ * this so a fill picked on a rect can repaint an ellipse, or a font style
94
+ * set on a text can restyle a shape.
95
+ */
96
+ lastUsedStyle$: Signal<Record<string, unknown>>;
90
97
  slots: {
91
98
  storageUpdated: Subject<{
92
99
  key: StoragePropsKey;
@@ -59,6 +59,13 @@ export class EditPropsStore extends LifeCycleWatcher {
59
59
  super(std);
60
60
  this._disposables = new DisposableGroup();
61
61
  this.innerProps$ = signal({});
62
+ /**
63
+ * Flat accumulation of every style prop the user recorded, most recent
64
+ * value per prop, across element types. "Apply last style" (Mod+Y) reads
65
+ * this so a fill picked on a rect can repaint an ellipse, or a font style
66
+ * set on a text can restyle a shape.
67
+ */
68
+ this.lastUsedStyle$ = signal({});
62
69
  this.slots = {
63
70
  storageUpdated: new Subject(),
64
71
  };
@@ -141,6 +148,10 @@ export class EditPropsStore extends LifeCycleWatcher {
141
148
  const overrideProps = schema.parse(props);
142
149
  if (Object.keys(overrideProps).length === 0)
143
150
  return;
151
+ this.lastUsedStyle$.value = {
152
+ ...this.lastUsedStyle$.value,
153
+ ...overrideProps,
154
+ };
144
155
  const innerProps = this.innerProps$.value;
145
156
  const nextProps = mergeWith(clonedeep(innerProps), { [key]: overrideProps }, customizer);
146
157
  this.innerProps$.value = OptionalPropsSchema.parse(nextProps);
@@ -3,8 +3,33 @@ import type { ExtensionType } from '../../../store/index.js';
3
3
  import type { FontConfig } from './config.js';
4
4
  export declare class FontLoaderService extends LifeCycleWatcher {
5
5
  static readonly key = "font-loader";
6
+ private static readonly DEFERRED_LOAD_DELAY_MS;
7
+ private static readonly DEFERRED_LOAD_BATCH_SIZE;
8
+ private static readonly DEFERRED_LOAD_BATCH_INTERVAL_MS;
9
+ private _idleLoadTaskId;
10
+ private _lazyLoadTimeoutId;
11
+ private _deferredFontsQueue;
12
+ private _deferredFontsCursor;
13
+ private _resolveDeferredDone;
14
+ /**
15
+ * Resolves once every deferred font has been handed to the browser, so
16
+ * `ready` still speaks for the whole configuration and the canvas is still
17
+ * repainted once — and only once — every font is in.
18
+ */
19
+ private _deferredDone;
20
+ private readonly _loadedFontKeys;
6
21
  readonly fontFaces: FontFace[];
7
- get ready(): Promise<FontFace[]>;
22
+ get ready(): Promise<undefined>;
23
+ private readonly _fontKey;
24
+ /**
25
+ * The fonts the canvas paints with before anyone has picked anything: the
26
+ * ones a board is guaranteed to need on its very first frame. Everything
27
+ * else is a font a document has to ask for, and can arrive a few seconds
28
+ * later without anyone seeing a fallback.
29
+ */
30
+ private readonly _isCriticalCanvasFont;
31
+ private readonly _scheduleDeferredLoad;
32
+ private readonly _cancelDeferredLoad;
8
33
  load(fonts: FontConfig[]): void;
9
34
  mounted(): void;
10
35
  unmounted(): void;
@@ -1,3 +1,4 @@
1
+ import { FontFamily, FontStyle, FontWeight } from '../../../affine-model/index.js';
1
2
  import { createIdentifier } from '../../../global/di/index.js';
2
3
  import { IS_FIREFOX } from '../../../global/env/index.js';
3
4
  import { LifeCycleWatcher } from '../../../std/index.js';
@@ -13,29 +14,145 @@ const initFontFace = IS_FIREFOX
13
14
  export class FontLoaderService extends LifeCycleWatcher {
14
15
  constructor() {
15
16
  super(...arguments);
17
+ this._idleLoadTaskId = null;
18
+ this._lazyLoadTimeoutId = null;
19
+ this._deferredFontsQueue = [];
20
+ this._deferredFontsCursor = 0;
21
+ this._resolveDeferredDone = null;
22
+ /**
23
+ * Resolves once every deferred font has been handed to the browser, so
24
+ * `ready` still speaks for the whole configuration and the canvas is still
25
+ * repainted once — and only once — every font is in.
26
+ */
27
+ this._deferredDone = Promise.resolve();
28
+ this._loadedFontKeys = new Set();
16
29
  this.fontFaces = [];
30
+ this._fontKey = ({ font, weight, style, url }) => {
31
+ return `${font}:${weight}:${style}:${url}`;
32
+ };
33
+ /**
34
+ * The fonts the canvas paints with before anyone has picked anything: the
35
+ * ones a board is guaranteed to need on its very first frame. Everything
36
+ * else is a font a document has to ask for, and can arrive a few seconds
37
+ * later without anyone seeing a fallback.
38
+ */
39
+ this._isCriticalCanvasFont = ({ font, weight, style, }) => {
40
+ if (style !== FontStyle.Normal)
41
+ return false;
42
+ if (font === FontFamily.Poppins) {
43
+ return (weight === FontWeight.Regular ||
44
+ weight === FontWeight.Medium ||
45
+ weight === FontWeight.SemiBold);
46
+ }
47
+ if (font === FontFamily.Inter) {
48
+ return weight === FontWeight.Regular || weight === FontWeight.SemiBold;
49
+ }
50
+ if (font === FontFamily.Kalam) {
51
+ // Mindmap style four uses bold Kalam text. SemiBold is the strongest
52
+ // Kalam weight we ship.
53
+ return weight === FontWeight.SemiBold;
54
+ }
55
+ return false;
56
+ };
57
+ this._scheduleDeferredLoad = (fonts) => {
58
+ if (fonts.length === 0 || typeof window === 'undefined') {
59
+ return;
60
+ }
61
+ this._deferredFontsQueue = fonts;
62
+ this._deferredFontsCursor = 0;
63
+ this._deferredDone = new Promise(resolve => {
64
+ this._resolveDeferredDone = resolve;
65
+ });
66
+ const win = window;
67
+ const scheduleBatch = (delayMs) => {
68
+ this._lazyLoadTimeoutId = window.setTimeout(() => {
69
+ this._lazyLoadTimeoutId = null;
70
+ const runBatch = () => {
71
+ this._idleLoadTaskId = null;
72
+ const start = this._deferredFontsCursor;
73
+ const end = Math.min(start + FontLoaderService.DEFERRED_LOAD_BATCH_SIZE, this._deferredFontsQueue.length);
74
+ this._deferredFontsCursor = end;
75
+ this.load(this._deferredFontsQueue.slice(start, end));
76
+ if (this._deferredFontsCursor < this._deferredFontsQueue.length) {
77
+ scheduleBatch(FontLoaderService.DEFERRED_LOAD_BATCH_INTERVAL_MS);
78
+ return;
79
+ }
80
+ this._resolveDeferredDone?.();
81
+ this._resolveDeferredDone = null;
82
+ };
83
+ if (typeof win.requestIdleCallback === 'function') {
84
+ this._idleLoadTaskId = win.requestIdleCallback(runBatch, {
85
+ timeout: 2000,
86
+ });
87
+ return;
88
+ }
89
+ runBatch();
90
+ }, delayMs);
91
+ };
92
+ scheduleBatch(FontLoaderService.DEFERRED_LOAD_DELAY_MS);
93
+ };
94
+ this._cancelDeferredLoad = () => {
95
+ if (typeof window === 'undefined') {
96
+ return;
97
+ }
98
+ const win = window;
99
+ if (this._idleLoadTaskId !== null &&
100
+ typeof win.cancelIdleCallback === 'function') {
101
+ win.cancelIdleCallback(this._idleLoadTaskId);
102
+ }
103
+ this._idleLoadTaskId = null;
104
+ if (this._lazyLoadTimeoutId !== null) {
105
+ window.clearTimeout(this._lazyLoadTimeoutId);
106
+ this._lazyLoadTimeoutId = null;
107
+ }
108
+ this._deferredFontsQueue = [];
109
+ this._deferredFontsCursor = 0;
110
+ this._resolveDeferredDone?.();
111
+ this._resolveDeferredDone = null;
112
+ this._deferredDone = Promise.resolve();
113
+ };
17
114
  }
18
115
  static { this.key = 'font-loader'; }
116
+ static { this.DEFERRED_LOAD_DELAY_MS = 5000; }
117
+ static { this.DEFERRED_LOAD_BATCH_SIZE = 4; }
118
+ static { this.DEFERRED_LOAD_BATCH_INTERVAL_MS = 1000; }
19
119
  get ready() {
20
- return Promise.all(this.fontFaces.map(fontFace => fontFace.loaded));
120
+ return this._deferredDone.then(() => Promise.all(this.fontFaces.map(fontFace => fontFace.loaded)).then(() => undefined));
21
121
  }
22
122
  load(fonts) {
23
- this.fontFaces.push(...fonts.map(font => {
123
+ for (const font of fonts) {
124
+ const key = this._fontKey(font);
125
+ // The same face registered twice is a second download and a second
126
+ // entry in `document.fonts`.
127
+ if (this._loadedFontKeys.has(key)) {
128
+ continue;
129
+ }
130
+ this._loadedFontKeys.add(key);
24
131
  const fontFace = initFontFace(font);
25
132
  document.fonts.add(fontFace);
26
133
  fontFace.load().catch(console.error);
27
- return fontFace;
28
- }));
134
+ this.fontFaces.push(fontFace);
135
+ }
29
136
  }
30
137
  mounted() {
31
138
  const config = this.std.getOptional(FontConfigIdentifier);
32
- if (config) {
33
- this.load(config);
139
+ if (!config || config.length === 0) {
140
+ return;
34
141
  }
142
+ const criticalFonts = config.filter(this._isCriticalCanvasFont);
143
+ const eagerFonts = criticalFonts.length > 0 ? criticalFonts : config.slice(0, 3);
144
+ const eagerFontKeySet = new Set(eagerFonts.map(this._fontKey));
145
+ const deferredFonts = config.filter(font => !eagerFontKeySet.has(this._fontKey(font)));
146
+ this.load(eagerFonts);
147
+ this._scheduleDeferredLoad(deferredFonts);
35
148
  }
36
149
  unmounted() {
37
- this.fontFaces.forEach(fontFace => document.fonts.delete(fontFace));
150
+ this._cancelDeferredLoad();
151
+ for (const fontFace of this.fontFaces) {
152
+ document.fonts.delete(fontFace);
153
+ }
38
154
  this.fontFaces.splice(0, this.fontFaces.length);
155
+ this._loadedFontKeys.clear();
39
156
  }
40
157
  }
41
158
  export const FontConfigIdentifier = createIdentifier('AffineFontConfig');
@@ -1,3 +1,4 @@
1
+ export * from './audit-service.js';
1
2
  export * from './auto-clear-selection-service.js';
2
3
  export * from './block-meta-service.js';
3
4
  export * from './citation-service/index.js';
@@ -22,11 +23,15 @@ export * from './notification-service.js';
22
23
  export * from './open-doc-config.js';
23
24
  export * from './page-viewport-service.js';
24
25
  export * from './parse-url-service.js';
26
+ export * from './pivot-materiality-publisher.js';
27
+ export * from './pivot-properties-service.js';
25
28
  export * from './quick-search-service.js';
26
29
  export * from './sidebar-service.js';
27
30
  export * from './telemetry-service/index.js';
28
31
  export * from './theme-service.js';
29
32
  export * from './toolbar-service/index.js';
33
+ export * from './translation-service/index.js';
34
+ export * from './universe-tag-defs-service.js';
30
35
  export * from './user-service/index.js';
31
36
  export * from './viewport-element-service.js';
32
37
  export * from './virtual-keyboard-service.js';
@@ -1,3 +1,4 @@
1
+ export * from './audit-service.js';
1
2
  export * from './auto-clear-selection-service.js';
2
3
  export * from './block-meta-service.js';
3
4
  export * from './citation-service/index.js';
@@ -22,11 +23,15 @@ export * from './notification-service.js';
22
23
  export * from './open-doc-config.js';
23
24
  export * from './page-viewport-service.js';
24
25
  export * from './parse-url-service.js';
26
+ export * from './pivot-materiality-publisher.js';
27
+ export * from './pivot-properties-service.js';
25
28
  export * from './quick-search-service.js';
26
29
  export * from './sidebar-service.js';
27
30
  export * from './telemetry-service/index.js';
28
31
  export * from './theme-service.js';
29
32
  export * from './toolbar-service/index.js';
33
+ export * from './translation-service/index.js';
34
+ export * from './universe-tag-defs-service.js';
30
35
  export * from './user-service/index.js';
31
36
  export * from './viewport-element-service.js';
32
37
  export * from './virtual-keyboard-service.js';
@@ -0,0 +1,129 @@
1
+ /**
2
+ * `PivotMaterialityPublisher` — the one place a board occurrence's derived
3
+ * materialities are announced to the host (MF3 / ADR 0006 § 4).
4
+ *
5
+ * When the level-3 qualification of a **bound** element changes, the library
6
+ * announces it and forgets. It never writes to the pivot record, never awaits
7
+ * the host, never retries and never observes the result: the element is the
8
+ * source of truth for the occurrence, the record is the source of truth for
9
+ * itself, and the channel between them is one-way.
10
+ *
11
+ * ## Why a Yjs observer and not the setter, and not the command layer
12
+ *
13
+ * Both were rejected for the same concrete reason: **undo**.
14
+ *
15
+ * The `@field()` setter runs on a JS assignment only. Undo, redo and every
16
+ * remote peer's change arrive through the element's `Y.Map` observer and never
17
+ * touch it. Publishing from the setter — or from the command that calls it —
18
+ * means: qualify a bound element, press Ctrl+Z, and the element reverts while
19
+ * the record keeps the derived materiality. A silent, permanent desync on the
20
+ * very first undo.
21
+ *
22
+ * Subscribing to the surface's change stream and gating on `local` fixes it and
23
+ * costs nothing else:
24
+ *
25
+ * | Event | `local` | Publishes? |
26
+ * | ------------------------------- | ------- | ----------------------------------------- |
27
+ * | Author qualifies an element | `true` | Yes, on the authoring client only |
28
+ * | Author presses Ctrl+Z / Ctrl+Y | `true` | Yes — this is what fixes the undo desync |
29
+ * | Remote peer receives the change | `false` | No |
30
+ *
31
+ * `local` also IS the de-duplication: it partitions the fleet into exactly one
32
+ * publisher and N−1 silent observers, with no leader election, no lock and no
33
+ * acknowledgement.
34
+ *
35
+ * ## Best-effort, and honest about it
36
+ *
37
+ * Patches are full-state and idempotent, so replaying one converges — which is
38
+ * what makes the unobservable `void` return survivable. If the authoring client
39
+ * is offline from the host at that moment the patch is lost and the record
40
+ * stays stale until the next local change to that element. The safety net is
41
+ * that the element is always authoritative: a host can rebuild every derived
42
+ * materiality by scanning `collectPivotOccurrences`. Derived materialities are
43
+ * a cache of the boards, never a second original.
44
+ */
45
+ import { LifeCycleWatcher } from '../../std/index.js';
46
+ import { type GfxPrimitiveElementModel } from '../../std/gfx/index.js';
47
+ import { type OccurrenceMaterialityPatch } from './pivot-properties-service.js';
48
+ export declare class PivotMaterialityPublisher extends LifeCycleWatcher {
49
+ static readonly key = "pivot-materiality-publisher";
50
+ /** Elements whose state is to be re-examined at the end of this microtask. */
51
+ private readonly _pending;
52
+ private _flushing;
53
+ /**
54
+ * The record each element was last known to be bound to, so that unbinding —
55
+ * or re-binding — can retract the OLD record's materiality. Without it the
56
+ * retraction has no `pivotDocId` to name: by the time the change is seen, the
57
+ * element no longer carries the old one.
58
+ */
59
+ private readonly _lastBinding;
60
+ /**
61
+ * Last published fingerprint per `(pivotDocId, elementId)`. One user gesture
62
+ * produces several payloads for one element — the stash/pop path alone emits
63
+ * one per stashed prop — and a drag emits dozens that change nothing a patch
64
+ * describes. Publishing the element's CURRENT FULL STATE and dropping it when
65
+ * it repeats is what keeps that to one patch per real change.
66
+ */
67
+ private readonly _published;
68
+ private _subscriptions;
69
+ private _disposeSurfaceEffect;
70
+ mounted(): void;
71
+ unmounted(): void;
72
+ private _unsubscribe;
73
+ private _resubscribe;
74
+ /**
75
+ * Record what record an element is bound to, **without publishing anything**.
76
+ *
77
+ * ## Who owns a retraction in a collaborative session
78
+ *
79
+ * The client whose LOCAL transaction removes the occurrence — deletion,
80
+ * unbind, or re-bind. That is the same rule as every other emission here
81
+ * (`local` partitions the fleet into one publisher and N−1 observers), and it
82
+ * is the only rule that can work: the peer that ORIGINALLY bound the element
83
+ * sees the deletion as a remote change, so if retraction belonged to the
84
+ * binder, nobody would emit it at all.
85
+ *
86
+ * Owning the retraction requires knowing which record to retract from, and by
87
+ * the time the deletion is seen the element is gone. Hence this: **tracking
88
+ * the binding is bookkeeping, not publication.** Every client keeps the map
89
+ * for everything it can see, whoever wrote it, so that whichever client
90
+ * eventually performs the removal can name the record. Without it, retraction
91
+ * only ever worked when one client both created and deleted the occurrence —
92
+ * the rare case in an open collaborative session, and the host would keep a
93
+ * materiality attributed to an occurrence that no longer exists.
94
+ *
95
+ * A remote peer that CHANGES a binding updates this map silently: it is
96
+ * publishing its own retraction and its own patch, and a second one from here
97
+ * would be a duplicate, not a safety net.
98
+ *
99
+ * ## …and it invalidates what WE last published
100
+ *
101
+ * `_published` remembers the last patch this client sent, so an unchanged
102
+ * state is not re-announced. A remote change makes that memory a lie: the
103
+ * peer published its own patch, so the host now holds the peer's state, not
104
+ * ours. Left stale, the sequence `we publish data` → `peer switches to
105
+ * practice` → `we go back to data` compares equal to our own last
106
+ * fingerprint and DROPS the patch — the element says `data`, the host keeps
107
+ * `practice`, until some third, different value comes along.
108
+ *
109
+ * Milder than the retraction gap above (this is host-side cache staleness,
110
+ * not document data, and it heals on the next real change), but free to
111
+ * close: every remote touch drops our fingerprint for that occurrence, so
112
+ * the next local patch is always sent.
113
+ */
114
+ private _track;
115
+ /**
116
+ * Coalesce per element within one microtask, then publish the element's
117
+ * CURRENT FULL STATE — never a delta. `_onChange` is also invoked directly on
118
+ * the stash/pop path, so one gesture legitimately produces several payloads
119
+ * for the same element.
120
+ */
121
+ private _schedule;
122
+ private _publish;
123
+ private _emit;
124
+ }
125
+ /**
126
+ * The full state of one occurrence, as the host stores it. Exported for the
127
+ * host's own rebuild path and for tests — it is a pure function of the element.
128
+ */
129
+ export declare function buildOccurrencePatch(element: GfxPrimitiveElementModel, pivotDocId: string): OccurrenceMaterialityPatch;