@formicoidea/labre-core 0.31.0 → 0.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (637) hide show
  1. package/dist/_pkgs/affine-block-attachment/attachment-block.js +1 -1
  2. package/dist/_pkgs/affine-block-callout/callout-block.d.ts +6 -0
  3. package/dist/_pkgs/affine-block-callout/callout-block.js +26 -4
  4. package/dist/_pkgs/affine-block-callout/callout-keymap.js +59 -19
  5. package/dist/_pkgs/affine-block-callout/commands/callout-to-paragraph.d.ts +20 -0
  6. package/dist/_pkgs/affine-block-callout/commands/callout-to-paragraph.js +60 -0
  7. package/dist/_pkgs/affine-block-callout/commands/split-callout.d.ts +17 -0
  8. package/dist/_pkgs/affine-block-callout/commands/split-callout.js +42 -0
  9. package/dist/_pkgs/affine-block-callout/configs/slash-menu.js +9 -6
  10. package/dist/_pkgs/affine-block-callout/emoji-margin.d.ts +9 -0
  11. package/dist/_pkgs/affine-block-callout/emoji-margin.js +36 -0
  12. package/dist/_pkgs/affine-block-callout/emoji-menu.d.ts +5 -1
  13. package/dist/_pkgs/affine-block-callout/emoji-menu.js +5 -0
  14. package/dist/_pkgs/affine-block-code/code-block-inline.js +1 -1
  15. package/dist/_pkgs/affine-block-code/code-block.d.ts +14 -0
  16. package/dist/_pkgs/affine-block-code/code-block.js +44 -6
  17. package/dist/_pkgs/affine-block-code/code-toolbar/components/code-toolbar.d.ts +2 -0
  18. package/dist/_pkgs/affine-block-code/code-toolbar/components/code-toolbar.js +23 -14
  19. package/dist/_pkgs/affine-block-code/code-toolbar/components/more-menu.d.ts +16 -0
  20. package/dist/_pkgs/affine-block-code/code-toolbar/components/more-menu.js +93 -0
  21. package/dist/_pkgs/affine-block-code/code-toolbar/config.js +54 -5
  22. package/dist/_pkgs/affine-block-code/code-toolbar/index.js +1 -1
  23. package/dist/_pkgs/affine-block-code/effects.d.ts +2 -0
  24. package/dist/_pkgs/affine-block-code/effects.js +2 -0
  25. package/dist/_pkgs/affine-block-code/highlight/affine-code-unit.js +6 -1
  26. package/dist/_pkgs/affine-block-code/index.d.ts +1 -0
  27. package/dist/_pkgs/affine-block-code/index.js +1 -0
  28. package/dist/_pkgs/affine-block-code/line-numbers.d.ts +25 -0
  29. package/dist/_pkgs/affine-block-code/line-numbers.js +27 -0
  30. package/dist/_pkgs/affine-block-code/styles.js +31 -0
  31. package/dist/_pkgs/affine-block-data-view/data-view-block.js +1 -0
  32. package/dist/_pkgs/affine-block-database/components/title/index.js +4 -1
  33. package/dist/_pkgs/affine-block-database/configs/slash-menu.js +28 -1
  34. package/dist/_pkgs/affine-block-database/data-source.js +1 -2
  35. package/dist/_pkgs/affine-block-database/database-block.js +13 -0
  36. package/dist/_pkgs/affine-block-database/external-data-source.js +1 -1
  37. package/dist/_pkgs/affine-block-database/properties/paste-url.d.ts +24 -0
  38. package/dist/_pkgs/affine-block-database/properties/paste-url.js +98 -0
  39. package/dist/_pkgs/affine-block-database/properties/rich-text/cell-renderer.js +9 -19
  40. package/dist/_pkgs/affine-block-database/properties/title/text.js +20 -25
  41. package/dist/_pkgs/affine-block-database/views/index.js +1 -0
  42. package/dist/_pkgs/affine-block-edgeless-text/edgeless-text-block.js +11 -1
  43. package/dist/_pkgs/affine-block-edgeless-text/edgeless-toolbar/config.d.ts +3 -0
  44. package/dist/_pkgs/affine-block-edgeless-text/edgeless-toolbar/config.js +48 -1
  45. package/dist/_pkgs/affine-block-edgeless-text/edgeless-toolbar/font-size.d.ts +17 -0
  46. package/dist/_pkgs/affine-block-edgeless-text/edgeless-toolbar/font-size.js +24 -0
  47. package/dist/_pkgs/affine-block-embed/embed-figma-block/embed-figma-service.js +1 -1
  48. package/dist/_pkgs/affine-block-embed/embed-iframe-block/configs/toolbar.js +2 -2
  49. package/dist/_pkgs/affine-block-embed-doc/common/doc-trashed.d.ts +9 -0
  50. package/dist/_pkgs/affine-block-embed-doc/common/doc-trashed.js +10 -0
  51. package/dist/_pkgs/affine-block-embed-doc/embed-linked-doc-block/configs/toolbar.js +1 -1
  52. package/dist/_pkgs/affine-block-embed-doc/embed-linked-doc-block/embed-linked-doc-block.js +8 -4
  53. package/dist/_pkgs/affine-block-embed-doc/embed-linked-doc-block/utils.js +1 -1
  54. package/dist/_pkgs/affine-block-embed-doc/embed-synced-doc-block/configs/toolbar.js +1 -1
  55. package/dist/_pkgs/affine-block-embed-doc/embed-synced-doc-block/embed-synced-doc-block.d.ts +4 -0
  56. package/dist/_pkgs/affine-block-embed-doc/embed-synced-doc-block/embed-synced-doc-block.js +23 -4
  57. package/dist/_pkgs/affine-block-frame/frame-manager.d.ts +13 -0
  58. package/dist/_pkgs/affine-block-frame/frame-manager.js +34 -2
  59. package/dist/_pkgs/affine-block-frame/frame-tool.js +1 -1
  60. package/dist/_pkgs/affine-block-image/components/page-image-block.js +1 -1
  61. package/dist/_pkgs/affine-block-image/image-edgeless-block.js +1 -1
  62. package/dist/_pkgs/affine-block-latex/styles.js +6 -1
  63. package/dist/_pkgs/affine-block-list/utils/forward-delete.js +1 -1
  64. package/dist/_pkgs/affine-block-note/commands/select-block.js +1 -1
  65. package/dist/_pkgs/affine-block-note/commands/select-blocks-between.js +1 -1
  66. package/dist/_pkgs/affine-block-note/move-block.js +1 -1
  67. package/dist/_pkgs/affine-block-note/note-edgeless-block.d.ts +9 -0
  68. package/dist/_pkgs/affine-block-note/note-edgeless-block.js +29 -1
  69. package/dist/_pkgs/affine-block-paragraph/utils/forward-delete.js +2 -2
  70. package/dist/_pkgs/affine-block-paragraph/utils/merge-with-prev.js +1 -1
  71. package/dist/_pkgs/affine-block-root/commands/pivot-commands.d.ts +37 -0
  72. package/dist/_pkgs/affine-block-root/commands/pivot-commands.js +168 -0
  73. package/dist/_pkgs/affine-block-root/commands/reading-commands.d.ts +23 -0
  74. package/dist/_pkgs/affine-block-root/commands/reading-commands.js +107 -0
  75. package/dist/_pkgs/affine-block-root/commands/tag-commands.d.ts +47 -0
  76. package/dist/_pkgs/affine-block-root/commands/tag-commands.js +159 -0
  77. package/dist/_pkgs/affine-block-root/configs/toolbar.d.ts +1 -0
  78. package/dist/_pkgs/affine-block-root/edgeless/configs/toolbar/more.js +10 -3
  79. package/dist/_pkgs/affine-block-root/edgeless/configs/toolbar/render-linked-doc.js +1 -1
  80. package/dist/_pkgs/affine-block-root/edgeless/edgeless-keyboard.js +27 -2
  81. package/dist/_pkgs/affine-block-root/edgeless/edgeless-root-block.js +11 -2
  82. package/dist/_pkgs/affine-block-root/edgeless/edgeless-root-service.js +14 -0
  83. package/dist/_pkgs/affine-block-root/edgeless/index.d.ts +1 -0
  84. package/dist/_pkgs/affine-block-root/edgeless/index.js +1 -0
  85. package/dist/_pkgs/affine-block-root/edgeless/reserved-keys.d.ts +21 -0
  86. package/dist/_pkgs/affine-block-root/edgeless/reserved-keys.js +34 -0
  87. package/dist/_pkgs/affine-block-root/edgeless/utils/clipboard-utils.js +1 -1
  88. package/dist/_pkgs/affine-block-root/edgeless/utils/clone-utils.d.ts +7 -1
  89. package/dist/_pkgs/affine-block-root/edgeless/utils/clone-utils.js +11 -2
  90. package/dist/_pkgs/affine-block-root/index.d.ts +4 -1
  91. package/dist/_pkgs/affine-block-root/index.js +4 -1
  92. package/dist/_pkgs/affine-block-root/keyboard/commands.d.ts +2 -0
  93. package/dist/_pkgs/affine-block-root/keyboard/commands.js +147 -0
  94. package/dist/_pkgs/affine-block-root/view.js +13 -4
  95. package/dist/_pkgs/affine-block-surface/adapters/markdown/element-adapter/type.js +1 -1
  96. package/dist/_pkgs/affine-block-surface/adapters/plain-text/element-adapter/type.js +1 -1
  97. package/dist/_pkgs/affine-block-surface/commands/reassociate-connectors.js +0 -1
  98. package/dist/_pkgs/affine-block-surface/effects.js +6 -0
  99. package/dist/_pkgs/affine-block-surface/element-model/index.d.ts +21 -3
  100. package/dist/_pkgs/affine-block-surface/element-model/index.js +14 -2
  101. package/dist/_pkgs/affine-block-surface/extensions/audit.d.ts +107 -0
  102. package/dist/_pkgs/affine-block-surface/extensions/audit.js +489 -0
  103. package/dist/_pkgs/affine-block-surface/extensions/crud-extension.d.ts +14 -0
  104. package/dist/_pkgs/affine-block-surface/extensions/crud-extension.js +37 -5
  105. package/dist/_pkgs/affine-block-surface/extensions/editor-anchored-panel.d.ts +133 -0
  106. package/dist/_pkgs/affine-block-surface/extensions/editor-anchored-panel.js +327 -0
  107. package/dist/_pkgs/affine-block-surface/extensions/element-renderer.js +1 -1
  108. package/dist/_pkgs/affine-block-surface/extensions/export-manager/export-manager.js +1 -1
  109. package/dist/_pkgs/affine-block-surface/extensions/index.d.ts +17 -0
  110. package/dist/_pkgs/affine-block-surface/extensions/index.js +17 -0
  111. package/dist/_pkgs/affine-block-surface/extensions/interchange-import.d.ts +172 -0
  112. package/dist/_pkgs/affine-block-surface/extensions/interchange-import.js +393 -0
  113. package/dist/_pkgs/affine-block-surface/extensions/interchange.d.ts +306 -0
  114. package/dist/_pkgs/affine-block-surface/extensions/interchange.js +64 -0
  115. package/dist/_pkgs/affine-block-surface/extensions/map-quality-widget.d.ts +146 -0
  116. package/dist/_pkgs/affine-block-surface/extensions/map-quality-widget.js +528 -0
  117. package/dist/_pkgs/affine-block-surface/extensions/map-quality.d.ts +109 -0
  118. package/dist/_pkgs/affine-block-surface/extensions/map-quality.js +84 -0
  119. package/dist/_pkgs/affine-block-surface/extensions/morph-toolbar.d.ts +248 -0
  120. package/dist/_pkgs/affine-block-surface/extensions/morph-toolbar.js +248 -0
  121. package/dist/_pkgs/affine-block-surface/extensions/reading-toolbar.d.ts +15 -0
  122. package/dist/_pkgs/affine-block-surface/extensions/reading-toolbar.js +158 -0
  123. package/dist/_pkgs/affine-block-surface/extensions/reading-widget.d.ts +145 -0
  124. package/dist/_pkgs/affine-block-surface/extensions/reading-widget.js +588 -0
  125. package/dist/_pkgs/affine-block-surface/extensions/reading.d.ts +494 -0
  126. package/dist/_pkgs/affine-block-surface/extensions/reading.js +767 -0
  127. package/dist/_pkgs/affine-block-surface/extensions/spotlight.d.ts +45 -0
  128. package/dist/_pkgs/affine-block-surface/extensions/spotlight.js +177 -0
  129. package/dist/_pkgs/affine-block-surface/extensions/svg-sketch.d.ts +107 -0
  130. package/dist/_pkgs/affine-block-surface/extensions/svg-sketch.js +958 -0
  131. package/dist/_pkgs/affine-block-surface/extensions/tags-toolbar.d.ts +10 -0
  132. package/dist/_pkgs/affine-block-surface/extensions/tags-toolbar.js +295 -0
  133. package/dist/_pkgs/affine-block-surface/extensions/validation-toolbar.d.ts +27 -0
  134. package/dist/_pkgs/affine-block-surface/extensions/validation-toolbar.js +361 -0
  135. package/dist/_pkgs/affine-block-surface/extensions/validation.d.ts +2129 -0
  136. package/dist/_pkgs/affine-block-surface/extensions/validation.js +4620 -0
  137. package/dist/_pkgs/affine-block-surface/extensions/violation-detail-widget.d.ts +330 -0
  138. package/dist/_pkgs/affine-block-surface/extensions/violation-detail-widget.js +1004 -0
  139. package/dist/_pkgs/affine-block-surface/extensions/violation-timeline.d.ts +80 -0
  140. package/dist/_pkgs/affine-block-surface/extensions/violation-timeline.js +123 -0
  141. package/dist/_pkgs/affine-block-surface/framework-background/def.d.ts +610 -0
  142. package/dist/_pkgs/affine-block-surface/framework-background/def.js +206 -0
  143. package/dist/_pkgs/affine-block-surface/framework-background/facts.d.ts +188 -0
  144. package/dist/_pkgs/affine-block-surface/framework-background/facts.js +284 -0
  145. package/dist/_pkgs/affine-block-surface/framework-background/index.d.ts +5 -0
  146. package/dist/_pkgs/affine-block-surface/framework-background/index.js +5 -0
  147. package/dist/_pkgs/affine-block-surface/framework-background/interaction.d.ts +12 -0
  148. package/dist/_pkgs/affine-block-surface/framework-background/interaction.js +24 -0
  149. package/dist/_pkgs/affine-block-surface/framework-background/labels.d.ts +99 -0
  150. package/dist/_pkgs/affine-block-surface/framework-background/labels.js +193 -0
  151. package/dist/_pkgs/affine-block-surface/framework-background/renderer.d.ts +8 -0
  152. package/dist/_pkgs/affine-block-surface/framework-background/renderer.js +399 -0
  153. package/dist/_pkgs/affine-block-surface/index.d.ts +1 -0
  154. package/dist/_pkgs/affine-block-surface/index.js +1 -0
  155. package/dist/_pkgs/affine-block-surface/renderer/canvas-renderer.d.ts +69 -3
  156. package/dist/_pkgs/affine-block-surface/renderer/canvas-renderer.js +333 -44
  157. package/dist/_pkgs/affine-block-surface/renderer/dom-renderer.js +18 -2
  158. package/dist/_pkgs/affine-block-surface/renderer/overlay.js +1 -1
  159. package/dist/_pkgs/affine-block-surface/tool/default-tool.js +8 -0
  160. package/dist/_pkgs/affine-block-surface/utils/font.js +9 -3
  161. package/dist/_pkgs/affine-block-surface/view.d.ts +17 -0
  162. package/dist/_pkgs/affine-block-surface/view.js +57 -2
  163. package/dist/_pkgs/affine-block-surface-ref/portal/note.js +2 -2
  164. package/dist/_pkgs/affine-block-table/commands.js +1 -1
  165. package/dist/_pkgs/affine-block-table/selection-controller.d.ts +6 -0
  166. package/dist/_pkgs/affine-block-table/selection-controller.js +24 -1
  167. package/dist/_pkgs/affine-block-table/table-block.js +8 -2
  168. package/dist/_pkgs/affine-block-table/table-cell.js +5 -6
  169. package/dist/_pkgs/affine-block-table/table-keymap.d.ts +18 -0
  170. package/dist/_pkgs/affine-block-table/table-keymap.js +41 -0
  171. package/dist/_pkgs/affine-block-table/utils.d.ts +7 -0
  172. package/dist/_pkgs/affine-block-table/utils.js +12 -0
  173. package/dist/_pkgs/affine-block-table/view.js +2 -0
  174. package/dist/_pkgs/affine-components/caption/captioned-block-component.js +2 -1
  175. package/dist/_pkgs/affine-components/context-menu/button.d.ts +7 -0
  176. package/dist/_pkgs/affine-components/context-menu/button.js +7 -2
  177. package/dist/_pkgs/affine-components/context-menu/input.d.ts +4 -0
  178. package/dist/_pkgs/affine-components/context-menu/input.js +12 -0
  179. package/dist/_pkgs/affine-components/context-menu/menu-all.d.ts +2 -0
  180. package/dist/_pkgs/affine-components/context-menu/menu-renderer.js +8 -1
  181. package/dist/_pkgs/affine-components/context-menu/sub-menu.js +3 -0
  182. package/dist/_pkgs/affine-components/edgeless-shape-color-picker/color-picker.js +1 -1
  183. package/dist/_pkgs/affine-components/embed-card-modal/embed-card-edit-modal.js +1 -1
  184. package/dist/_pkgs/affine-components/filterable-list/styles.js +1 -1
  185. package/dist/_pkgs/affine-components/highlight-dropdown-menu/highlight-duotone-icon.js +8 -8
  186. package/dist/_pkgs/affine-components/highlight-dropdown-menu/text-duotone-icon.js +11 -11
  187. package/dist/_pkgs/affine-components/icon-picker/affine-icon-picker-panel.d.ts +28 -0
  188. package/dist/_pkgs/affine-components/icon-picker/affine-icon-picker-panel.js +231 -0
  189. package/dist/_pkgs/affine-components/icon-picker/emoji-data.d.ts +40 -0
  190. package/dist/_pkgs/affine-components/icon-picker/emoji-data.js +99 -0
  191. package/dist/_pkgs/affine-components/icon-picker/emoji-picker-panel.d.ts +32 -0
  192. package/dist/_pkgs/affine-components/icon-picker/emoji-picker-panel.js +276 -0
  193. package/dist/_pkgs/affine-components/icon-picker/icon-data.d.ts +34 -0
  194. package/dist/_pkgs/affine-components/icon-picker/icon-data.js +83 -0
  195. package/dist/_pkgs/affine-components/icon-picker/icon-picker.d.ts +39 -0
  196. package/dist/_pkgs/affine-components/icon-picker/icon-picker.js +233 -0
  197. package/dist/_pkgs/affine-components/icon-picker/index.d.ts +8 -0
  198. package/dist/_pkgs/affine-components/icon-picker/index.js +15 -0
  199. package/dist/_pkgs/affine-components/icon-picker/recent-store.d.ts +8 -0
  200. package/dist/_pkgs/affine-components/icon-picker/recent-store.js +41 -0
  201. package/dist/_pkgs/affine-components/icon-picker/styles.d.ts +5 -0
  202. package/dist/_pkgs/affine-components/icon-picker/styles.js +166 -0
  203. package/dist/_pkgs/affine-components/icon-picker/types.d.ts +22 -0
  204. package/dist/_pkgs/affine-components/icon-picker/types.js +10 -0
  205. package/dist/_pkgs/affine-components/icons/text.js +426 -426
  206. package/dist/_pkgs/affine-components/open-doc-dropdown-menu/dropdown-menu.d.ts +1 -0
  207. package/dist/_pkgs/affine-components/peek/peekable.js +1 -1
  208. package/dist/_pkgs/affine-components/portal/portal.d.ts +1 -1
  209. package/dist/_pkgs/affine-components/toolbar/index.d.ts +1 -0
  210. package/dist/_pkgs/affine-components/toolbar/index.js +1 -0
  211. package/dist/_pkgs/affine-components/toolbar/menu-button.js +2 -1
  212. package/dist/_pkgs/affine-components/toolbar/picker-menu.d.ts +55 -0
  213. package/dist/_pkgs/affine-components/toolbar/picker-menu.js +47 -0
  214. package/dist/_pkgs/affine-components/toolbar/toolbar.js +11 -10
  215. package/dist/_pkgs/affine-foundation/view.js +11 -2
  216. package/dist/_pkgs/affine-fragment-frame-panel/body/frame-panel-body.js +2 -2
  217. package/dist/_pkgs/affine-fragment-frame-panel/header/frame-panel-header.js +2 -2
  218. package/dist/_pkgs/affine-fragment-frame-panel/header/frames-setting-menu.js +1 -1
  219. package/dist/_pkgs/affine-fragment-outline/mobile-outline-panel.js +1 -1
  220. package/dist/_pkgs/affine-gfx-brush/index.d.ts +1 -0
  221. package/dist/_pkgs/affine-gfx-brush/index.js +1 -0
  222. package/dist/_pkgs/affine-gfx-brush/renderer/dom/brush.d.ts +1 -0
  223. package/dist/_pkgs/affine-gfx-brush/renderer/dom/brush.js +11 -0
  224. package/dist/_pkgs/affine-gfx-brush/renderer/dom/highlighter.d.ts +1 -0
  225. package/dist/_pkgs/affine-gfx-brush/renderer/dom/highlighter.js +11 -0
  226. package/dist/_pkgs/affine-gfx-brush/renderer/dom/index.d.ts +2 -0
  227. package/dist/_pkgs/affine-gfx-brush/renderer/dom/index.js +2 -0
  228. package/dist/_pkgs/affine-gfx-brush/renderer/dom/shared.d.ts +14 -0
  229. package/dist/_pkgs/affine-gfx-brush/renderer/dom/shared.js +54 -0
  230. package/dist/_pkgs/affine-gfx-brush/renderer/index.d.ts +1 -0
  231. package/dist/_pkgs/affine-gfx-brush/renderer/index.js +4 -0
  232. package/dist/_pkgs/affine-gfx-brush/toolbar/components/pen/pen-tool-button.js +1 -1
  233. package/dist/_pkgs/affine-gfx-brush/view.d.ts +14 -0
  234. package/dist/_pkgs/affine-gfx-brush/view.js +29 -3
  235. package/dist/_pkgs/affine-gfx-connector/connector-manager.js +39 -16
  236. package/dist/_pkgs/affine-gfx-connector/connector-tool.d.ts +26 -1
  237. package/dist/_pkgs/affine-gfx-connector/connector-tool.js +12 -3
  238. package/dist/_pkgs/affine-gfx-connector/connector-watcher.js +1 -4
  239. package/dist/_pkgs/affine-gfx-connector/direction/direction-reveal.d.ts +123 -0
  240. package/dist/_pkgs/affine-gfx-connector/direction/direction-reveal.js +282 -0
  241. package/dist/_pkgs/affine-gfx-connector/direction/direction-widget.d.ts +65 -0
  242. package/dist/_pkgs/affine-gfx-connector/direction/direction-widget.js +395 -0
  243. package/dist/_pkgs/affine-gfx-connector/direction/index.d.ts +4 -0
  244. package/dist/_pkgs/affine-gfx-connector/direction/index.js +4 -0
  245. package/dist/_pkgs/affine-gfx-connector/direction/invert-direction.d.ts +72 -0
  246. package/dist/_pkgs/affine-gfx-connector/direction/invert-direction.js +185 -0
  247. package/dist/_pkgs/affine-gfx-connector/direction/typed-edge.d.ts +69 -0
  248. package/dist/_pkgs/affine-gfx-connector/direction/typed-edge.js +66 -0
  249. package/dist/_pkgs/affine-gfx-connector/effects.d.ts +2 -0
  250. package/dist/_pkgs/affine-gfx-connector/effects.js +2 -0
  251. package/dist/_pkgs/affine-gfx-connector/element-renderer/connector-dom/index.js +78 -41
  252. package/dist/_pkgs/affine-gfx-connector/element-renderer/index.js +1 -1
  253. package/dist/_pkgs/affine-gfx-connector/element-renderer/utils.js +1 -1
  254. package/dist/_pkgs/affine-gfx-connector/index.d.ts +1 -0
  255. package/dist/_pkgs/affine-gfx-connector/index.js +1 -0
  256. package/dist/_pkgs/affine-gfx-connector/toolbar/config.d.ts +50 -0
  257. package/dist/_pkgs/affine-gfx-connector/toolbar/config.js +68 -2
  258. package/dist/_pkgs/affine-gfx-connector/view.js +16 -0
  259. package/dist/_pkgs/affine-gfx-group/command/group-api.js +150 -62
  260. package/dist/_pkgs/affine-gfx-group/text/edgeless-group-title-editor.js +4 -1
  261. package/dist/_pkgs/affine-gfx-mindmap/adapter/markdown/index.js +1 -1
  262. package/dist/_pkgs/affine-gfx-mindmap/adapter/utils.js +1 -1
  263. package/dist/_pkgs/affine-gfx-mindmap/templates/index.js +583 -4
  264. package/dist/_pkgs/affine-gfx-mindmap/toolbar/mindmap-menu.js +23 -23
  265. package/dist/_pkgs/affine-gfx-mindmap/toolbar/mindmap-tool-button.js +5 -1
  266. package/dist/_pkgs/affine-gfx-mindmap/view/utils.js +1 -1
  267. package/dist/_pkgs/affine-gfx-note/overlay/overlay.js +1 -1
  268. package/dist/_pkgs/affine-gfx-note/toolbar/note-senior-button.js +1 -1
  269. package/dist/_pkgs/affine-gfx-pointer/tools/pan-tool.d.ts +16 -0
  270. package/dist/_pkgs/affine-gfx-pointer/tools/pan-tool.js +102 -32
  271. package/dist/_pkgs/affine-gfx-shape/commands.d.ts +2 -0
  272. package/dist/_pkgs/affine-gfx-shape/commands.js +33 -0
  273. package/dist/_pkgs/affine-gfx-shape/consts.js +1 -1
  274. package/dist/_pkgs/affine-gfx-shape/draggable/shape-draggable.js +1 -1
  275. package/dist/_pkgs/affine-gfx-shape/element-renderer/shape/polygon.js +17 -9
  276. package/dist/_pkgs/affine-gfx-shape/element-renderer/shape/utils.js +8 -3
  277. package/dist/_pkgs/affine-gfx-shape/element-renderer/shape-dom/index.js +48 -19
  278. package/dist/_pkgs/affine-gfx-shape/element-view.js +19 -12
  279. package/dist/_pkgs/affine-gfx-shape/index.d.ts +1 -1
  280. package/dist/_pkgs/affine-gfx-shape/index.js +1 -1
  281. package/dist/_pkgs/affine-gfx-shape/overlay/polygon-drawing-overlay.js +1 -1
  282. package/dist/_pkgs/affine-gfx-shape/overlay/polygon-vertex-editing-overlay.js +12 -7
  283. package/dist/_pkgs/affine-gfx-shape/overlay/shape-overlay.js +1 -1
  284. package/dist/_pkgs/affine-gfx-shape/polygon-tool.js +4 -2
  285. package/dist/_pkgs/affine-gfx-shape/shape-tool.js +1 -1
  286. package/dist/_pkgs/affine-gfx-shape/text/edgeless-shape-text-editor.d.ts +26 -0
  287. package/dist/_pkgs/affine-gfx-shape/text/edgeless-shape-text-editor.js +124 -15
  288. package/dist/_pkgs/affine-gfx-shape/view.js +3 -3
  289. package/dist/_pkgs/affine-gfx-template/builtin/other.js +66 -17
  290. package/dist/_pkgs/affine-gfx-template/toolbar/overlay-scrollbar.js +1 -1
  291. package/dist/_pkgs/affine-gfx-template/toolbar/template-panel.js +1 -1
  292. package/dist/_pkgs/affine-gfx-template/toolbar/template-tool-button.d.ts +2 -0
  293. package/dist/_pkgs/affine-gfx-template/toolbar/template-tool-button.js +18 -1
  294. package/dist/_pkgs/affine-gfx-text/edgeless-text-editor.js +9 -5
  295. package/dist/_pkgs/affine-gfx-text/toolbar/actions.js +1 -1
  296. package/dist/_pkgs/affine-inline-latex/command.js +46 -26
  297. package/dist/_pkgs/affine-inline-latex/latex-node/latex-node.d.ts +10 -0
  298. package/dist/_pkgs/affine-inline-latex/latex-node/latex-node.js +23 -0
  299. package/dist/_pkgs/affine-inline-link/command.js +1 -1
  300. package/dist/_pkgs/affine-inline-link/link-node/affine-link.js +4 -1
  301. package/dist/_pkgs/affine-inline-preset/adapters/html/html-inline.d.ts +3 -0
  302. package/dist/_pkgs/affine-inline-preset/adapters/html/html-inline.js +29 -1
  303. package/dist/_pkgs/affine-inline-preset/command/format-block.js +1 -1
  304. package/dist/_pkgs/affine-inline-preset/command/format-native.js +2 -2
  305. package/dist/_pkgs/affine-inline-preset/command/format-text.js +1 -1
  306. package/dist/_pkgs/affine-inline-preset/inline-spec.js +1 -1
  307. package/dist/_pkgs/affine-inline-reference/reference-node/reference-node.js +1 -1
  308. package/dist/_pkgs/affine-model/blocks/code/code-model.d.ts +1 -0
  309. package/dist/_pkgs/affine-model/blocks/code/code-model.js +1 -0
  310. package/dist/_pkgs/affine-model/elements/bpmn/node.d.ts +40 -7
  311. package/dist/_pkgs/affine-model/elements/bpmn/node.js +4 -2
  312. package/dist/_pkgs/affine-model/elements/bpmn/pool.d.ts +74 -17
  313. package/dist/_pkgs/affine-model/elements/bpmn/pool.js +55 -26
  314. package/dist/_pkgs/affine-model/elements/c4/board.d.ts +88 -0
  315. package/dist/_pkgs/affine-model/elements/c4/board.js +128 -0
  316. package/dist/_pkgs/affine-model/elements/c4/boundary.d.ts +63 -0
  317. package/dist/_pkgs/affine-model/elements/c4/boundary.js +134 -0
  318. package/dist/_pkgs/affine-model/elements/c4/index.d.ts +3 -0
  319. package/dist/_pkgs/affine-model/elements/c4/index.js +3 -0
  320. package/dist/_pkgs/affine-model/elements/c4/node.d.ts +97 -0
  321. package/dist/_pkgs/affine-model/elements/c4/node.js +130 -0
  322. package/dist/_pkgs/affine-model/elements/connector/connector.js +25 -1
  323. package/dist/_pkgs/affine-model/elements/context-map/context-map.d.ts +27 -0
  324. package/dist/_pkgs/affine-model/elements/context-map/context-map.js +94 -0
  325. package/dist/_pkgs/affine-model/elements/context-map/index.d.ts +1 -0
  326. package/dist/_pkgs/affine-model/elements/context-map/index.js +1 -0
  327. package/dist/_pkgs/affine-model/elements/core-domain/core-domain.d.ts +34 -17
  328. package/dist/_pkgs/affine-model/elements/core-domain/core-domain.js +28 -26
  329. package/dist/_pkgs/affine-model/elements/edgy/board.d.ts +32 -0
  330. package/dist/_pkgs/affine-model/elements/edgy/board.js +112 -0
  331. package/dist/_pkgs/affine-model/elements/edgy/facets.d.ts +12 -0
  332. package/dist/_pkgs/affine-model/elements/edgy/facets.js +25 -1
  333. package/dist/_pkgs/affine-model/elements/edgy/index.d.ts +1 -0
  334. package/dist/_pkgs/affine-model/elements/edgy/index.js +1 -0
  335. package/dist/_pkgs/affine-model/elements/event-storming/event-storming.d.ts +36 -0
  336. package/dist/_pkgs/affine-model/elements/event-storming/event-storming.js +103 -0
  337. package/dist/_pkgs/affine-model/elements/event-storming/index.d.ts +1 -0
  338. package/dist/_pkgs/affine-model/elements/event-storming/index.js +1 -0
  339. package/dist/_pkgs/affine-model/elements/framework-background/background.d.ts +42 -0
  340. package/dist/_pkgs/affine-model/elements/framework-background/background.js +42 -0
  341. package/dist/_pkgs/affine-model/elements/framework-background/index.d.ts +1 -0
  342. package/dist/_pkgs/affine-model/elements/framework-background/index.js +1 -0
  343. package/dist/_pkgs/affine-model/elements/index.d.ts +14 -1
  344. package/dist/_pkgs/affine-model/elements/index.js +4 -0
  345. package/dist/_pkgs/affine-model/elements/mindmap/mindmap.js +8 -3
  346. package/dist/_pkgs/affine-model/elements/mindmap/style.d.ts +10 -0
  347. package/dist/_pkgs/affine-model/elements/mindmap/style.js +8 -0
  348. package/dist/_pkgs/affine-model/elements/shape/api/polygon.js +2 -8
  349. package/dist/_pkgs/affine-model/elements/wardley/wardley.d.ts +21 -29
  350. package/dist/_pkgs/affine-model/elements/wardley/wardley.js +41 -48
  351. package/dist/_pkgs/affine-shared/adapters/html/block-adapter.js +1 -1
  352. package/dist/_pkgs/affine-shared/adapters/markdown/block-adapter.js +1 -1
  353. package/dist/_pkgs/affine-shared/adapters/markdown/delta-converter.d.ts +6 -1
  354. package/dist/_pkgs/affine-shared/adapters/markdown/delta-converter.js +161 -3
  355. package/dist/_pkgs/affine-shared/adapters/markdown/markdown.js +5 -1
  356. package/dist/_pkgs/affine-shared/adapters/notion-html/block-adapter.js +1 -1
  357. package/dist/_pkgs/affine-shared/adapters/notion-html/delta-converter.js +1 -1
  358. package/dist/_pkgs/affine-shared/adapters/plain-text/block-adapter.js +1 -1
  359. package/dist/_pkgs/affine-shared/adapters/plain-text/delta-converter.js +1 -1
  360. package/dist/_pkgs/affine-shared/adapters/types/delta-converter.d.ts +1 -0
  361. package/dist/_pkgs/affine-shared/adapters/utils/color.d.ts +24 -0
  362. package/dist/_pkgs/affine-shared/adapters/utils/color.js +283 -0
  363. package/dist/_pkgs/affine-shared/adapters/utils/index.d.ts +1 -0
  364. package/dist/_pkgs/affine-shared/adapters/utils/index.js +1 -0
  365. package/dist/_pkgs/affine-shared/commands/block-crud/get-selected-blocks.js +10 -2
  366. package/dist/_pkgs/affine-shared/commands/model-crud/draft-selected-models.js +1 -1
  367. package/dist/_pkgs/affine-shared/commands/selection/focus-block-end.js +1 -1
  368. package/dist/_pkgs/affine-shared/commands/selection/focus-block-start.js +1 -1
  369. package/dist/_pkgs/affine-shared/consts/index.d.ts +10 -0
  370. package/dist/_pkgs/affine-shared/consts/index.js +10 -0
  371. package/dist/_pkgs/affine-shared/services/artefact-catalogue-service.d.ts +55 -0
  372. package/dist/_pkgs/affine-shared/services/artefact-catalogue-service.js +35 -0
  373. package/dist/_pkgs/affine-shared/services/audit-service.d.ts +311 -0
  374. package/dist/_pkgs/affine-shared/services/audit-service.js +228 -0
  375. package/dist/_pkgs/affine-shared/services/command-usage-service.d.ts +31 -0
  376. package/dist/_pkgs/affine-shared/services/command-usage-service.js +109 -0
  377. package/dist/_pkgs/affine-shared/services/comment-service/block-comment-manager.js +1 -1
  378. package/dist/_pkgs/affine-shared/services/doc-display-meta-service.js +1 -1
  379. package/dist/_pkgs/affine-shared/services/edit-props-store.d.ts +7 -0
  380. package/dist/_pkgs/affine-shared/services/edit-props-store.js +11 -0
  381. package/dist/_pkgs/affine-shared/services/embed-iframe/embed-iframe-config.js +1 -1
  382. package/dist/_pkgs/affine-shared/services/font-loader/font-loader-service.d.ts +26 -1
  383. package/dist/_pkgs/affine-shared/services/font-loader/font-loader-service.js +124 -7
  384. package/dist/_pkgs/affine-shared/services/index.d.ts +7 -0
  385. package/dist/_pkgs/affine-shared/services/index.js +7 -0
  386. package/dist/_pkgs/affine-shared/services/pivot-materiality-publisher.d.ts +129 -0
  387. package/dist/_pkgs/affine-shared/services/pivot-materiality-publisher.js +312 -0
  388. package/dist/_pkgs/affine-shared/services/pivot-properties-service.d.ts +217 -0
  389. package/dist/_pkgs/affine-shared/services/pivot-properties-service.js +114 -0
  390. package/dist/_pkgs/affine-shared/services/telemetry-service/code-block.d.ts +1 -1
  391. package/dist/_pkgs/affine-shared/services/telemetry-service/lifecycle.d.ts +255 -1
  392. package/dist/_pkgs/affine-shared/services/telemetry-service/telemetry-service.d.ts +2 -2
  393. package/dist/_pkgs/affine-shared/services/telemetry-service/types.d.ts +6 -1
  394. package/dist/_pkgs/affine-shared/services/toolbar-service/action.d.ts +10 -0
  395. package/dist/_pkgs/affine-shared/services/toolbar-service/index.d.ts +1 -0
  396. package/dist/_pkgs/affine-shared/services/toolbar-service/index.js +1 -0
  397. package/dist/_pkgs/affine-shared/services/toolbar-service/layout.d.ts +134 -0
  398. package/dist/_pkgs/affine-shared/services/toolbar-service/layout.js +146 -0
  399. package/dist/_pkgs/affine-shared/services/toolbar-service/registry.d.ts +44 -0
  400. package/dist/_pkgs/affine-shared/services/toolbar-service/registry.js +161 -3
  401. package/dist/_pkgs/affine-shared/services/translation-service/index.d.ts +68 -0
  402. package/dist/_pkgs/affine-shared/services/translation-service/index.js +39 -0
  403. package/dist/_pkgs/affine-shared/services/universe-tag-defs-service.d.ts +155 -0
  404. package/dist/_pkgs/affine-shared/services/universe-tag-defs-service.js +256 -0
  405. package/dist/_pkgs/affine-shared/test-utils/affine-template.js +1 -1
  406. package/dist/_pkgs/affine-shared/utils/dom/point-to-range.d.ts +4 -0
  407. package/dist/_pkgs/affine-shared/utils/dom/point-to-range.js +58 -2
  408. package/dist/_pkgs/affine-shared/utils/dom/viewport.d.ts +60 -0
  409. package/dist/_pkgs/affine-shared/utils/dom/viewport.js +58 -0
  410. package/dist/_pkgs/affine-shared/utils/edgeless.js +1 -1
  411. package/dist/_pkgs/affine-shared/utils/file/filesys.d.ts +34 -0
  412. package/dist/_pkgs/affine-shared/utils/file/filesys.js +48 -7
  413. package/dist/_pkgs/affine-shared/utils/print-to-pdf.d.ts +21 -0
  414. package/dist/_pkgs/affine-shared/utils/print-to-pdf.js +166 -32
  415. package/dist/_pkgs/affine-shared/utils/zod-schema.d.ts +7 -0
  416. package/dist/_pkgs/affine-shared/utils/zod-schema.js +25 -1
  417. package/dist/_pkgs/affine-widget-drag-handle/utils.js +1 -1
  418. package/dist/_pkgs/affine-widget-drag-handle/watchers/edgeless-watcher.d.ts +19 -10
  419. package/dist/_pkgs/affine-widget-drag-handle/watchers/edgeless-watcher.js +122 -23
  420. package/dist/_pkgs/affine-widget-drag-handle/watchers/pointer-event-watcher.d.ts +2 -0
  421. package/dist/_pkgs/affine-widget-drag-handle/watchers/pointer-event-watcher.js +25 -4
  422. package/dist/_pkgs/affine-widget-edgeless-auto-connect/index.js +1 -1
  423. package/dist/_pkgs/affine-widget-edgeless-dragging-area/edgeless-dragging-area-rect.js +1 -1
  424. package/dist/_pkgs/affine-widget-edgeless-selected-rect/auto-complete-panel.js +10 -5
  425. package/dist/_pkgs/affine-widget-edgeless-selected-rect/edgeless-auto-complete.d.ts +15 -1
  426. package/dist/_pkgs/affine-widget-edgeless-selected-rect/edgeless-auto-complete.js +37 -32
  427. package/dist/_pkgs/affine-widget-edgeless-selected-rect/edgeless-element-link.js +5 -4
  428. package/dist/_pkgs/affine-widget-edgeless-selected-rect/edgeless-selected-rect.js +19 -9
  429. package/dist/_pkgs/affine-widget-edgeless-selected-rect/utils.d.ts +16 -2
  430. package/dist/_pkgs/affine-widget-edgeless-selected-rect/utils.js +19 -2
  431. package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/artefact-catalogue-default.d.ts +14 -0
  432. package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/artefact-catalogue-default.js +40 -0
  433. package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/artefact-catalogue-widget.d.ts +158 -0
  434. package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/artefact-catalogue-widget.js +572 -0
  435. package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/catalogue-groups.d.ts +46 -0
  436. package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/catalogue-groups.js +66 -0
  437. package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/chord-format.d.ts +13 -0
  438. package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/chord-format.js +50 -0
  439. package/dist/_pkgs/affine-widget-edgeless-toolbar/edgeless-toolbar.d.ts +6 -0
  440. package/dist/_pkgs/affine-widget-edgeless-toolbar/edgeless-toolbar.js +15 -5
  441. package/dist/_pkgs/affine-widget-edgeless-toolbar/effects.d.ts +2 -0
  442. package/dist/_pkgs/affine-widget-edgeless-toolbar/effects.js +2 -0
  443. package/dist/_pkgs/affine-widget-edgeless-toolbar/extension/index.d.ts +7 -0
  444. package/dist/_pkgs/affine-widget-edgeless-toolbar/index.d.ts +5 -0
  445. package/dist/_pkgs/affine-widget-edgeless-toolbar/index.js +5 -0
  446. package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/command-menu.d.ts +57 -0
  447. package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/command-menu.js +140 -0
  448. package/dist/_pkgs/affine-widget-edgeless-toolbar/view.js +9 -0
  449. package/dist/_pkgs/affine-widget-frame-title/edgeless-frame-title-editor.js +4 -1
  450. package/dist/_pkgs/affine-widget-keyboard-toolbar/icons.js +98 -98
  451. package/dist/_pkgs/affine-widget-keyboard-toolbar/keyboard-tool-panel.js +1 -1
  452. package/dist/_pkgs/affine-widget-linked-doc/import-doc/import-doc.js +1 -1
  453. package/dist/_pkgs/affine-widget-linked-doc/linked-doc-popover.js +2 -15
  454. package/dist/_pkgs/affine-widget-linked-doc/transformers/markdown.d.ts +10 -1
  455. package/dist/_pkgs/affine-widget-linked-doc/transformers/markdown.js +133 -6
  456. package/dist/_pkgs/affine-widget-linked-doc/transformers/utils.d.ts +10 -0
  457. package/dist/_pkgs/affine-widget-linked-doc/transformers/utils.js +120 -3
  458. package/dist/_pkgs/affine-widget-linked-doc/utils.d.ts +12 -0
  459. package/dist/_pkgs/affine-widget-linked-doc/utils.js +33 -0
  460. package/dist/_pkgs/affine-widget-page-dragging-area/index.js +1 -1
  461. package/dist/_pkgs/affine-widget-remote-selection/doc/doc-remote-selection.js +1 -1
  462. package/dist/_pkgs/affine-widget-remote-selection/edgeless/index.js +6 -4
  463. package/dist/_pkgs/affine-widget-slash-menu/slash-menu-popover.js +8 -4
  464. package/dist/_pkgs/affine-widget-slash-menu/utils.d.ts +9 -0
  465. package/dist/_pkgs/affine-widget-slash-menu/utils.js +24 -0
  466. package/dist/_pkgs/affine-widget-toolbar/toolbar.d.ts +6 -0
  467. package/dist/_pkgs/affine-widget-toolbar/toolbar.js +40 -8
  468. package/dist/_pkgs/affine-widget-toolbar/utils.d.ts +146 -3
  469. package/dist/_pkgs/affine-widget-toolbar/utils.js +744 -58
  470. package/dist/_pkgs/data-view/core/common/property-menu.js +3 -16
  471. package/dist/_pkgs/data-view/core/component/tags/multi-tag-select.d.ts +4 -0
  472. package/dist/_pkgs/data-view/core/component/tags/multi-tag-select.js +28 -1
  473. package/dist/_pkgs/data-view/core/data-view.d.ts +3 -1
  474. package/dist/_pkgs/data-view/core/data-view.js +25 -3
  475. package/dist/_pkgs/data-view/core/detail/field.js +2 -2
  476. package/dist/_pkgs/data-view/core/detail/selection.d.ts +4 -2
  477. package/dist/_pkgs/data-view/core/detail/selection.js +23 -7
  478. package/dist/_pkgs/data-view/core/effect.js +2 -0
  479. package/dist/_pkgs/data-view/core/filter/eval.js +36 -23
  480. package/dist/_pkgs/data-view/core/filter/filter-fn/matcher.d.ts +7 -0
  481. package/dist/_pkgs/data-view/core/filter/filter-fn/matcher.js +12 -0
  482. package/dist/_pkgs/data-view/core/group-by/compare-date-keys.d.ts +11 -0
  483. package/dist/_pkgs/data-view/core/group-by/compare-date-keys.js +55 -0
  484. package/dist/_pkgs/data-view/core/group-by/define.d.ts +6 -0
  485. package/dist/_pkgs/data-view/core/group-by/define.js +114 -0
  486. package/dist/_pkgs/data-view/core/group-by/matcher.d.ts +7 -0
  487. package/dist/_pkgs/data-view/core/group-by/matcher.js +13 -0
  488. package/dist/_pkgs/data-view/core/group-by/renderer/boolean-group.js +11 -11
  489. package/dist/_pkgs/data-view/core/group-by/renderer/date-group.d.ts +9 -0
  490. package/dist/_pkgs/data-view/core/group-by/renderer/date-group.js +97 -0
  491. package/dist/_pkgs/data-view/core/group-by/setting.js +86 -7
  492. package/dist/_pkgs/data-view/core/group-by/trait.d.ts +34 -0
  493. package/dist/_pkgs/data-view/core/group-by/trait.js +106 -10
  494. package/dist/_pkgs/data-view/core/utils/menu-title.js +17 -17
  495. package/dist/_pkgs/data-view/property-presets/multi-select/cell-renderer.js +3 -1
  496. package/dist/_pkgs/data-view/property-presets/number/define.js +2 -1
  497. package/dist/_pkgs/data-view/property-presets/select/cell-renderer.js +3 -1
  498. package/dist/_pkgs/data-view/view-presets/calendar/calendar-view-manager.d.ts +70 -0
  499. package/dist/_pkgs/data-view/view-presets/calendar/calendar-view-manager.js +449 -0
  500. package/dist/_pkgs/data-view/view-presets/calendar/define.d.ts +10 -0
  501. package/dist/_pkgs/data-view/view-presets/calendar/define.js +27 -0
  502. package/dist/_pkgs/data-view/view-presets/calendar/effect.d.ts +1 -0
  503. package/dist/_pkgs/data-view/view-presets/calendar/effect.js +4 -0
  504. package/dist/_pkgs/data-view/view-presets/calendar/index.d.ts +6 -0
  505. package/dist/_pkgs/data-view/view-presets/calendar/index.js +6 -0
  506. package/dist/_pkgs/data-view/view-presets/calendar/layout.d.ts +37 -0
  507. package/dist/_pkgs/data-view/view-presets/calendar/layout.js +138 -0
  508. package/dist/_pkgs/data-view/view-presets/calendar/pc/actions.d.ts +7 -0
  509. package/dist/_pkgs/data-view/view-presets/calendar/pc/actions.js +64 -0
  510. package/dist/_pkgs/data-view/view-presets/calendar/pc/dnd.d.ts +32 -0
  511. package/dist/_pkgs/data-view/view-presets/calendar/pc/dnd.js +159 -0
  512. package/dist/_pkgs/data-view/view-presets/calendar/pc/effect.d.ts +1 -0
  513. package/dist/_pkgs/data-view/view-presets/calendar/pc/effect.js +7 -0
  514. package/dist/_pkgs/data-view/view-presets/calendar/pc/hit-test.d.ts +1 -0
  515. package/dist/_pkgs/data-view/view-presets/calendar/pc/hit-test.js +28 -0
  516. package/dist/_pkgs/data-view/view-presets/calendar/pc/styles.d.ts +1 -0
  517. package/dist/_pkgs/data-view/view-presets/calendar/pc/styles.js +707 -0
  518. package/dist/_pkgs/data-view/view-presets/calendar/pc/view.d.ts +89 -0
  519. package/dist/_pkgs/data-view/view-presets/calendar/pc/view.js +849 -0
  520. package/dist/_pkgs/data-view/view-presets/calendar/renderer.d.ts +2 -0
  521. package/dist/_pkgs/data-view/view-presets/calendar/renderer.js +8 -0
  522. package/dist/_pkgs/data-view/view-presets/calendar/source.d.ts +8 -0
  523. package/dist/_pkgs/data-view/view-presets/calendar/source.js +3 -0
  524. package/dist/_pkgs/data-view/view-presets/calendar/types.d.ts +79 -0
  525. package/dist/_pkgs/data-view/view-presets/calendar/types.js +1 -0
  526. package/dist/_pkgs/data-view/view-presets/convert.js +28 -0
  527. package/dist/_pkgs/data-view/view-presets/effect.js +2 -0
  528. package/dist/_pkgs/data-view/view-presets/index.d.ts +2 -0
  529. package/dist/_pkgs/data-view/view-presets/index.js +3 -0
  530. package/dist/_pkgs/data-view/view-presets/kanban/kanban-view-manager.js +3 -1
  531. package/dist/_pkgs/data-view/view-presets/kanban/mobile/cell.js +2 -2
  532. package/dist/_pkgs/data-view/view-presets/table/collapsed-state.d.ts +18 -0
  533. package/dist/_pkgs/data-view/view-presets/table/collapsed-state.js +36 -0
  534. package/dist/_pkgs/data-view/view-presets/table/mobile/cell.js +2 -2
  535. package/dist/_pkgs/data-view/view-presets/table/mobile/group.d.ts +11 -0
  536. package/dist/_pkgs/data-view/view-presets/table/mobile/group.js +89 -4
  537. package/dist/_pkgs/data-view/view-presets/table/pc/cell.d.ts +3 -0
  538. package/dist/_pkgs/data-view/view-presets/table/pc/cell.js +11 -2
  539. package/dist/_pkgs/data-view/view-presets/table/pc/controller/hotkeys.d.ts +1 -0
  540. package/dist/_pkgs/data-view/view-presets/table/pc/controller/hotkeys.js +39 -33
  541. package/dist/_pkgs/data-view/view-presets/table/pc/group.d.ts +10 -0
  542. package/dist/_pkgs/data-view/view-presets/table/pc/group.js +86 -5
  543. package/dist/_pkgs/data-view/view-presets/table/pc-virtual/controller/hotkeys.d.ts +1 -0
  544. package/dist/_pkgs/data-view/view-presets/table/pc-virtual/controller/hotkeys.js +39 -33
  545. package/dist/_pkgs/data-view/view-presets/table/pc-virtual/group/top/group-title.js +18 -18
  546. package/dist/_pkgs/data-view/view-presets/table/pc-virtual/row/cell.d.ts +3 -0
  547. package/dist/_pkgs/data-view/view-presets/table/pc-virtual/row/cell.js +8 -0
  548. package/dist/_pkgs/data-view/view-presets/table/table-view-manager.js +3 -1
  549. package/dist/_pkgs/data-view/view-presets/table/utils.d.ts +3 -0
  550. package/dist/_pkgs/data-view/view-presets/table/utils.js +16 -1
  551. package/dist/_pkgs/data-view/widget-presets/tools/presets/view-options/view-options.js +3 -1
  552. package/dist/_pkgs/global/gfx/curve.js +4 -3
  553. package/dist/_pkgs/std/clipboard/clipboard.js +13 -3
  554. package/dist/_pkgs/std/clipboard/utils.d.ts +5 -0
  555. package/dist/_pkgs/std/clipboard/utils.js +10 -0
  556. package/dist/_pkgs/std/event/dispatcher.js +27 -1
  557. package/dist/_pkgs/std/event/keymap.js +16 -6
  558. package/dist/_pkgs/std/extension/command-registry.d.ts +475 -0
  559. package/dist/_pkgs/std/extension/command-registry.js +431 -0
  560. package/dist/_pkgs/std/extension/dnd/index.d.ts +1 -1
  561. package/dist/_pkgs/std/extension/index.d.ts +2 -0
  562. package/dist/_pkgs/std/extension/index.js +2 -0
  563. package/dist/_pkgs/std/extension/shortcut.js +2 -1
  564. package/dist/_pkgs/std/extension/translation-manifest.d.ts +49 -0
  565. package/dist/_pkgs/std/extension/translation-manifest.js +71 -0
  566. package/dist/_pkgs/std/gfx/grid.js +1 -1
  567. package/dist/_pkgs/std/gfx/index.d.ts +7 -3
  568. package/dist/_pkgs/std/gfx/index.js +6 -2
  569. package/dist/_pkgs/std/gfx/interactivity/gfx-view-event-handler.js +6 -1
  570. package/dist/_pkgs/std/gfx/interactivity/manager.d.ts +8 -0
  571. package/dist/_pkgs/std/gfx/interactivity/manager.js +18 -0
  572. package/dist/_pkgs/std/gfx/layer.d.ts +1 -1
  573. package/dist/_pkgs/std/gfx/layer.js +1 -2
  574. package/dist/_pkgs/std/gfx/model/surface/decorators/field.js +9 -0
  575. package/dist/_pkgs/std/gfx/model/surface/decorators/index.d.ts +2 -2
  576. package/dist/_pkgs/std/gfx/model/surface/decorators/index.js +2 -2
  577. package/dist/_pkgs/std/gfx/model/surface/decorators/local.d.ts +14 -0
  578. package/dist/_pkgs/std/gfx/model/surface/decorators/local.js +22 -0
  579. package/dist/_pkgs/std/gfx/model/surface/decorators/observer.d.ts +2 -0
  580. package/dist/_pkgs/std/gfx/model/surface/decorators/observer.js +40 -1
  581. package/dist/_pkgs/std/gfx/model/surface/element-model.d.ts +442 -0
  582. package/dist/_pkgs/std/gfx/model/surface/element-model.js +510 -25
  583. package/dist/_pkgs/std/gfx/model/surface/pivot.d.ts +48 -0
  584. package/dist/_pkgs/std/gfx/model/surface/pivot.js +34 -0
  585. package/dist/_pkgs/std/gfx/model/surface/role.d.ts +153 -0
  586. package/dist/_pkgs/std/gfx/model/surface/role.js +117 -0
  587. package/dist/_pkgs/std/gfx/model/surface/surface-model.d.ts +70 -0
  588. package/dist/_pkgs/std/gfx/model/surface/surface-model.js +305 -17
  589. package/dist/_pkgs/std/gfx/model/surface/tags.d.ts +77 -0
  590. package/dist/_pkgs/std/gfx/model/surface/tags.js +246 -0
  591. package/dist/_pkgs/std/gfx/perf.d.ts +10 -0
  592. package/dist/_pkgs/std/gfx/perf.js +30 -0
  593. package/dist/_pkgs/std/gfx/selection.js +1 -1
  594. package/dist/_pkgs/std/gfx/tool/tool-controller.d.ts +13 -0
  595. package/dist/_pkgs/std/gfx/tool/tool-controller.js +26 -0
  596. package/dist/_pkgs/std/gfx/viewport.d.ts +12 -0
  597. package/dist/_pkgs/std/gfx/viewport.js +20 -2
  598. package/dist/_pkgs/std/inline/extensions/inline-manager.js +1 -1
  599. package/dist/_pkgs/std/inline/extensions/markdown-matcher.js +1 -1
  600. package/dist/_pkgs/std/inline/services/event.d.ts +2 -0
  601. package/dist/_pkgs/std/inline/services/event.js +96 -21
  602. package/dist/_pkgs/std/utils/layer.js +2 -6
  603. package/dist/_pkgs/std/utils/tree.d.ts +14 -0
  604. package/dist/_pkgs/std/utils/tree.js +59 -8
  605. package/dist/_pkgs/std/view/element/gfx-block-component.js +23 -13
  606. package/dist/_pkgs/store/extension/workspace/workspace-meta.d.ts +10 -0
  607. package/dist/_pkgs/store/model/block/flat-sync-controller.js +2 -12
  608. package/dist/_pkgs/store/model/store/crud.js +10 -4
  609. package/dist/_pkgs/store/reactive/flat-native-y/index.d.ts +1 -1
  610. package/dist/_pkgs/store/reactive/flat-native-y/index.js +24 -2
  611. package/dist/commands.d.ts +58 -0
  612. package/dist/commands.js +66 -0
  613. package/dist/extensions/command-telemetry.d.ts +21 -0
  614. package/dist/extensions/command-telemetry.js +89 -0
  615. package/dist/extensions/command-usage.d.ts +23 -0
  616. package/dist/extensions/command-usage.js +37 -0
  617. package/dist/extensions/store.d.ts +9 -4
  618. package/dist/extensions/store.js +27 -24
  619. package/dist/extensions/view.d.ts +9 -4
  620. package/dist/extensions/view.js +35 -8
  621. package/dist/flags.d.ts +98 -21
  622. package/dist/flags.js +103 -22
  623. package/dist/frameworks.d.ts +45 -0
  624. package/dist/frameworks.js +186 -0
  625. package/dist/schemas.d.ts +8 -5
  626. package/dist/schemas.js +28 -32
  627. package/dist/shortcuts.d.ts +16 -16
  628. package/dist/shortcuts.js +8 -36
  629. package/dist/translations.d.ts +56 -0
  630. package/dist/translations.js +200 -0
  631. package/package.json +16 -4
  632. package/dist/_pkgs/affine-block-root/keyboard/shortcuts.d.ts +0 -8
  633. package/dist/_pkgs/affine-block-root/keyboard/shortcuts.js +0 -48
  634. package/dist/_pkgs/affine-gfx-shape/shortcuts.d.ts +0 -6
  635. package/dist/_pkgs/affine-gfx-shape/shortcuts.js +0 -28
  636. package/dist/_pkgs/data-view/core/utils/cache.d.ts +0 -5
  637. package/dist/_pkgs/data-view/core/utils/cache.js +0 -28
@@ -0,0 +1,767 @@
1
+ import { getUniverseRegistry, hostLanguage, queryPivotProperties, } from '../../affine-shared/services/index.js';
2
+ import { createIdentifier } from '../../global/di/index.js';
3
+ import { LifeCycleWatcher, } from '../../std/index.js';
4
+ import { GfxControllerIdentifier, GfxPrimitiveElementModel, isPivotBound, readElementTags, roleIsA, } from '../../std/gfx/index.js';
5
+ import { effect, signal } from '@preact/signals-core';
6
+ // Straight at the two leaf modules rather than at the barrel, for the reason
7
+ // `validation.ts` states: `index.js` also re-exports the RENDERER, and a
8
+ // reading is a one-way read of pure declaration data that must never pull a
9
+ // canvas in.
10
+ import { backgroundPlot, } from '../framework-background/def.js';
11
+ import { backgroundTransitionBands } from '../framework-background/facts.js';
12
+ /** Deepest role chain reported by {@link ReadingNodeType.specialises}. */
13
+ const MAX_ROLE_DEPTH = 32;
14
+ /** Numeric slack on the two geometry comparisons. Model units. */
15
+ const GEOMETRY_EPSILON = 1e-6;
16
+ /** Complain once per malformed declaration: a reading can be asked for often. */
17
+ const warned = new Set();
18
+ function warnOnce(reason) {
19
+ if (warned.has(reason))
20
+ return;
21
+ warned.add(reason);
22
+ console.warn(`[reading] ${reason}`);
23
+ }
24
+ /**
25
+ * Compiled convention patterns, keyed by source. A profile is a module-level
26
+ * constant, so this cache holds one entry per declared convention for the life
27
+ * of the process — and a broken pattern is compiled (and complained about)
28
+ * once rather than on every render of the panel.
29
+ */
30
+ const patterns = new Map();
31
+ function compile(pattern) {
32
+ const cached = patterns.get(pattern);
33
+ if (cached !== undefined)
34
+ return cached;
35
+ let compiled = null;
36
+ try {
37
+ // `s` so `.` crosses the newline of a wrapped canvas label: without it an
38
+ // anchored pattern (`^…$`) fails on every two-line name whatever it says,
39
+ // which reads to the user as "the convention dislikes long names".
40
+ compiled = new RegExp(pattern, 'ius');
41
+ }
42
+ catch (error) {
43
+ warnOnce(`naming convention /${pattern}/ does not compile (${String(error)}) — ` +
44
+ `the naming line is dropped rather than reported as a mismatch.`);
45
+ }
46
+ patterns.set(pattern, compiled);
47
+ return compiled;
48
+ }
49
+ /** The text an element carries itself, `''` when it carries none. */
50
+ function ownText(element) {
51
+ const text = element.text;
52
+ if (typeof text === 'string')
53
+ return text.trim();
54
+ if (text && typeof text.toString === 'function') {
55
+ return String(text).trim();
56
+ }
57
+ return '';
58
+ }
59
+ /**
60
+ * The members of the group holding this element, or `null` when it is not
61
+ * grouped — or when asking cannot be done safely.
62
+ *
63
+ * `group` is a getter that walks the element's SURFACE, so on an element that
64
+ * is not attached to one it throws. A reading must never throw: a panel that
65
+ * crashes on an odd element is worse than one that has nothing to say about its
66
+ * name, and the caller's fallback (no name, therefore no naming line) is the
67
+ * same silence every other unreadable field produces.
68
+ */
69
+ function groupMembers(element) {
70
+ let group;
71
+ try {
72
+ group = element.group;
73
+ }
74
+ catch {
75
+ return null;
76
+ }
77
+ const children = group?.childElements;
78
+ return Array.isArray(children)
79
+ ? children
80
+ : null;
81
+ }
82
+ /**
83
+ * The subject's NAME.
84
+ *
85
+ * Its own text first, then — because a framework artefact on this canvas is a
86
+ * composite — the text of the sibling carrying the profile's label role. That
87
+ * is the same fact `tags-toolbar.ts` works around from the other direction: one
88
+ * click selects the group, the role lives on the circle, and the name lives on
89
+ * a free text beside it.
90
+ */
91
+ function readName(element, profile) {
92
+ const own = ownText(element);
93
+ if (own)
94
+ return own;
95
+ const labelRole = profile.labelRole;
96
+ if (!labelRole)
97
+ return '';
98
+ const children = groupMembers(element);
99
+ if (children === null)
100
+ return '';
101
+ for (const child of children) {
102
+ if (!(child instanceof GfxPrimitiveElementModel))
103
+ continue;
104
+ if (child.id === element.id)
105
+ continue;
106
+ if (!roleIsA(child.role, labelRole, profile.roles))
107
+ continue;
108
+ const text = ownText(child);
109
+ if (text)
110
+ return text;
111
+ }
112
+ return '';
113
+ }
114
+ /** The role chain above `roleId`, nearest first, bounded like `roleIsA` is. */
115
+ function specialisationChain(roleId, roles) {
116
+ const chain = [];
117
+ let current = roles[roleId]?.parent;
118
+ for (let hops = 0; current !== undefined && hops < MAX_ROLE_DEPTH; hops++) {
119
+ chain.push(current);
120
+ current = roles[current]?.parent;
121
+ }
122
+ return chain;
123
+ }
124
+ /** Centre of a bound. Reading a position is reading where the thing IS. */
125
+ const centreOf = (bound) => [
126
+ bound.x + bound.w / 2,
127
+ bound.y + bound.h / 2,
128
+ ];
129
+ /**
130
+ * The frame the subject sits ON — containment of its CENTRE, and nothing else.
131
+ *
132
+ * Deliberately not the "nearest map" attribution the validation engine uses: a
133
+ * finding has to be filed against some map even when the subject is off in the
134
+ * margin, whereas a phase read off a map the component is not on would be an
135
+ * invented fact. A component beside the map has no phase, and the panel says
136
+ * nothing rather than something plausible.
137
+ *
138
+ * The centre, not the whole bound: a node overhanging the edge of the map is
139
+ * still on it to every reader.
140
+ *
141
+ * ## Two frames under one component
142
+ *
143
+ * The first match in DOCUMENT order wins — not the smallest, not the topmost.
144
+ * Deterministic, and deliberately not clever: z-order is a paint concern and
145
+ * "the smallest frame containing it" is a rule nobody declared. Two overlapping
146
+ * maps of different sizes are a board that has not decided what it is, and a
147
+ * reading that quietly picked one of them by area would be harder to argue with
148
+ * than one that picked the first. The day a framework needs nesting, this is the
149
+ * one function to change.
150
+ */
151
+ function frameOf(element, elements, profile) {
152
+ const frame = profile.frame;
153
+ if (!frame)
154
+ return null;
155
+ const [cx, cy] = centreOf(element.elementBound);
156
+ for (const candidate of elements) {
157
+ if (candidate.id === element.id)
158
+ continue;
159
+ if (candidate.role === undefined)
160
+ continue;
161
+ if (!roleIsA(candidate.role, frame.backgroundRole, profile.roles))
162
+ continue;
163
+ const bound = candidate.elementBound;
164
+ if (cx >= bound.x &&
165
+ cx <= bound.x + bound.w &&
166
+ cy >= bound.y &&
167
+ cy <= bound.y + bound.h) {
168
+ return candidate;
169
+ }
170
+ }
171
+ return null;
172
+ }
173
+ /**
174
+ * The phase, read from the position and the frame's DECLARED zones.
175
+ *
176
+ * Two facts, both taken from the declaration and never from a number in this
177
+ * file: which zone the subject's centre falls in, and whether it is inside the
178
+ * band around a transition. The second is the "zone of punctuated equilibrium"
179
+ * — the frontier is a region, not a coordinate — and a component sitting in one
180
+ * is a different statement from a component sitting in a phase.
181
+ */
182
+ function readPhase(element, elements, profile) {
183
+ const frame = profile.frame;
184
+ if (!frame)
185
+ return undefined;
186
+ const background = frameOf(element, elements, profile);
187
+ if (!background)
188
+ return undefined;
189
+ const def = frame.background;
190
+ const bound = background.elementBound;
191
+ const plot = backgroundPlot(def, bound.w, bound.h);
192
+ const [cx, cy] = centreOf(element.elementBound);
193
+ const along = frame.axis === 'x' ? cx : cy;
194
+ const origin = frame.axis === 'x' ? bound.x + plot.x0 : bound.y + plot.y0;
195
+ const span = frame.axis === 'x' ? plot.width : plot.height;
196
+ if (!(span > 0))
197
+ return undefined;
198
+ const ratio = (along - origin) / span;
199
+ // Inside the card but outside the PLOT — on the margin the axes are drawn in.
200
+ // No zone covers it, and inventing the nearest one would put a component in a
201
+ // phase it is visibly not in.
202
+ if (ratio < 0 || ratio > 1)
203
+ return undefined;
204
+ const zone = (def.zones ?? []).find(({ rect }) => {
205
+ const start = frame.axis === 'x' ? rect.x : rect.y;
206
+ const size = frame.axis === 'x' ? rect.w : rect.h;
207
+ // Half-open, so a component exactly on a divider reads as the phase it is
208
+ // entering — the same side the band below reports as the frontier.
209
+ return ratio >= start && (ratio < start + size || start + size >= 1);
210
+ });
211
+ if (!zone)
212
+ return undefined;
213
+ const bands = backgroundTransitionBands(def, bound)[frame.axis];
214
+ const band = bands.find(({ min, max }) => along >= min && along <= max);
215
+ return {
216
+ zoneId: zone.id,
217
+ ...(zone.label?.labelKey !== undefined
218
+ ? { labelKey: zone.label.labelKey }
219
+ : {}),
220
+ ...(zone.label?.fallback !== undefined
221
+ ? { labelFallback: zone.label.fallback }
222
+ : {}),
223
+ inTransitionBand: band !== undefined,
224
+ ...(band !== undefined ? { bandId: band.id } : {}),
225
+ };
226
+ }
227
+ /** The two ends of a connector, when both are bound to an element. */
228
+ function endpointsOf(element) {
229
+ const source = element.source;
230
+ const target = element.target;
231
+ if (typeof source?.id !== 'string' || typeof target?.id !== 'string') {
232
+ return null;
233
+ }
234
+ if (!source.id || !target.id)
235
+ return null;
236
+ return { source: source.id, target: target.id };
237
+ }
238
+ /**
239
+ * Every typed edge touching the subject, read as a relation.
240
+ *
241
+ * An edge with an unbound end is skipped, exactly as ADR 0010 requires of W4:
242
+ * releasing the link tool over empty canvas produces one, and a stroke that
243
+ * links nothing states nothing.
244
+ */
245
+ function readRelations(element, elements, profile) {
246
+ const relation = profile.relation;
247
+ if (!relation)
248
+ return [];
249
+ const byId = new Map(elements.map(el => [el.id, el]));
250
+ const [, subjectY] = centreOf(element.elementBound);
251
+ const relations = [];
252
+ for (const edge of elements) {
253
+ if (edge.role === undefined)
254
+ continue;
255
+ if (!roleIsA(edge.role, relation.edgeRole, profile.roles))
256
+ continue;
257
+ const ends = endpointsOf(edge);
258
+ if (!ends)
259
+ continue;
260
+ const isSource = ends.source === element.id;
261
+ const isTarget = ends.target === element.id;
262
+ // A self-loop states nothing about an order and would report the subject as
263
+ // its own supplier.
264
+ if (isSource === isTarget)
265
+ continue;
266
+ const otherId = isSource ? ends.target : ends.source;
267
+ const other = byId.get(otherId);
268
+ if (!other)
269
+ continue;
270
+ const side = isSource ? 'supplier' : 'consumer';
271
+ const [, otherY] = centreOf(other.elementBound);
272
+ // `y` grows downwards, so "higher on the map" is a SMALLER y. A supplier is
273
+ // expected below the subject, a consumer above it.
274
+ const contradictsGeometry = side === 'supplier'
275
+ ? otherY < subjectY - GEOMETRY_EPSILON
276
+ : otherY > subjectY + GEOMETRY_EPSILON;
277
+ relations.push({
278
+ edgeId: edge.id,
279
+ otherId,
280
+ otherName: readName(other, profile),
281
+ side,
282
+ contradictsGeometry,
283
+ });
284
+ }
285
+ return relations;
286
+ }
287
+ /**
288
+ * The naming line, when there is a single nature, a convention for it, and that
289
+ * convention is IN SCOPE for the language the host is serving.
290
+ *
291
+ * The scope check is the difference between a suggestion and a nuisance: a
292
+ * motif is a motif of one language, and the first one whose `lang` matches
293
+ * wins. A convention that declares no language is agnostic and always applies.
294
+ */
295
+ function readNaming(element, profile, valueIds, lang) {
296
+ const nature = profile.nature;
297
+ if (!nature || valueIds.length !== 1)
298
+ return undefined;
299
+ const convention = nature.conventions.find(c => c.valueId === valueIds[0] && (c.lang === undefined || c.lang === lang));
300
+ if (!convention)
301
+ return undefined;
302
+ const name = readName(element, profile);
303
+ // Nothing to judge. An unnamed component is an unfinished drawing, not a
304
+ // naming mistake, and the panel has a better thing to say about it: nothing.
305
+ if (!name)
306
+ return undefined;
307
+ const pattern = compile(convention.pattern);
308
+ if (!pattern)
309
+ return undefined;
310
+ return {
311
+ name,
312
+ conforms: pattern.test(name),
313
+ hintKey: convention.hintKey,
314
+ hintFallback: convention.hintFallback,
315
+ };
316
+ }
317
+ /**
318
+ * Read one element. Pure: same elements, same profile, same options, same
319
+ * answer, and no write anywhere on any path through this function.
320
+ *
321
+ * `null` when the element does not carry the profile's subject role — the
322
+ * caller has nothing to show, which is what keeps the panel off every neutral
323
+ * rectangle on the board.
324
+ */
325
+ export function readElement(element, elements, profile, options = {}) {
326
+ const roleId = element.role;
327
+ if (roleId === undefined)
328
+ return null;
329
+ if (!roleIsA(roleId, profile.appliesTo, profile.roles))
330
+ return null;
331
+ const tagId = profile.nature?.tagId;
332
+ const carried = tagId ? (readElementTags(element)[tagId] ?? []) : [];
333
+ const labelKey = profile.roles[roleId]?.labelKey;
334
+ return {
335
+ elementId: element.id,
336
+ name: readName(element, profile),
337
+ nodeType: {
338
+ roleId,
339
+ ...(labelKey !== undefined ? { labelKey } : {}),
340
+ specialises: specialisationChain(roleId, profile.roles),
341
+ },
342
+ nature: tagId !== undefined && carried.length > 0
343
+ ? { tagId, valueIds: carried }
344
+ : undefined,
345
+ relations: readRelations(element, elements, profile),
346
+ phase: readPhase(element, elements, profile),
347
+ naming: readNaming(element, profile, carried, options.lang),
348
+ };
349
+ }
350
+ /**
351
+ * **The value flow** — the same typed edges as {@link ElementReading.relations},
352
+ * said the way a value chain is read: from the bottom up.
353
+ *
354
+ * A Wardley map is an anchor at the top and everything the anchor needs
355
+ * underneath it, so the VALUE travels the other way round from the dependency
356
+ * arrow: a supplier hands its value up to the consumer that needs it. ADR 0010
357
+ * § 2 fixes which end is which — on a `wardley:dependency` the `source` is the
358
+ * consumer and the `target` is the supplier — so the flow is entirely a
359
+ * restatement of what {@link readRelations} already resolved:
360
+ *
361
+ * - the other end is a SUPPLIER (an edge leaving the subject) → value comes up
362
+ * from it to the subject;
363
+ * - the other end is a CONSUMER (an edge arriving at the subject) → value goes
364
+ * up from the subject to it.
365
+ *
366
+ * Derived, not stored: no second traversal of the board, no second convention
367
+ * to keep in step with ADR 0010, and an element with no typed edge yields an
368
+ * empty list — which the panel renders as no section at all.
369
+ */
370
+ export function readValueFlows(reading) {
371
+ const subject = reading.name || reading.elementId;
372
+ return reading.relations.map(relation => {
373
+ const other = relation.otherName || relation.otherId;
374
+ return relation.side === 'supplier'
375
+ ? { edgeId: relation.edgeId, from: other, to: subject }
376
+ : { edgeId: relation.edgeId, from: subject, to: other };
377
+ });
378
+ }
379
+ /** The profile governing an element, or `null` — the first match wins. */
380
+ export function readingProfileFor(element, profiles) {
381
+ const roleId = element.role;
382
+ if (roleId === undefined)
383
+ return null;
384
+ return (profiles.find(profile => roleIsA(roleId, profile.appliesTo, profile.roles)) ?? null);
385
+ }
386
+ /**
387
+ * Resolve the record's words against the tag def's own values.
388
+ *
389
+ * Three ways a word is accepted, in order: the value id itself, the id
390
+ * case-insensitively, then the value's LABEL case-insensitively — because a
391
+ * host storing the words a human picked from a multi-select is the ordinary
392
+ * case, not the exotic one. Anything else is `unknown`: this is a resolver, not
393
+ * a guesser, and there is no fuzzy match anywhere in it.
394
+ *
395
+ * Two deliberate edge cases:
396
+ *
397
+ * - **no def** (the framework's pack is not seeded in this deployment) — every
398
+ * word is unknown. We cannot know the vocabulary, so proposing to write one of
399
+ * its words would be inventing it;
400
+ * - **`values: 'open'`** — the def says any string is a value of this tag, so
401
+ * everything resolves. That is the def's own claim, not ours.
402
+ */
403
+ export function resolveRecordNature(def, values) {
404
+ const resolved = [];
405
+ const unknown = [];
406
+ const seen = new Set();
407
+ if (!def)
408
+ return { resolved, unknown: [...values] };
409
+ if (def.values === 'open')
410
+ return { resolved: [...values], unknown };
411
+ const byId = new Map();
412
+ const byLabel = new Map();
413
+ for (const value of def.values) {
414
+ byId.set(value.id.toLowerCase(), value.id);
415
+ const label = (value.label || '').toLowerCase();
416
+ // First declaration wins: a label repeated across two values is an
417
+ // authoring bug in the pack, and picking the later one silently would make
418
+ // the resolution depend on declaration order.
419
+ if (label && !byLabel.has(label))
420
+ byLabel.set(label, value.id);
421
+ }
422
+ for (const raw of values) {
423
+ const key = raw.toLowerCase();
424
+ const id = byId.get(key) ?? byLabel.get(key);
425
+ if (id === undefined) {
426
+ if (!unknown.includes(raw))
427
+ unknown.push(raw);
428
+ continue;
429
+ }
430
+ if (seen.has(id))
431
+ continue;
432
+ seen.add(id);
433
+ resolved.push(id);
434
+ }
435
+ return { resolved, unknown };
436
+ }
437
+ /** A record property flattened to the strings a comparison can work on. */
438
+ function propertyStrings(snapshot, key) {
439
+ const property = snapshot.properties.find(p => p.key === key);
440
+ if (!property)
441
+ return [];
442
+ const { value } = property;
443
+ switch (value.kind) {
444
+ case 'text':
445
+ return value.value ? [value.value] : [];
446
+ case 'tags':
447
+ return value.value.filter(entry => entry.length > 0);
448
+ default:
449
+ // Every other kind is a value this comparison has no business
450
+ // interpreting. Unknown means silent, never "different".
451
+ return [];
452
+ }
453
+ }
454
+ /**
455
+ * The record's side of the comparison, read through the guarded seam.
456
+ *
457
+ * `undefined` on every degraded path — no binding, no provider, no configured
458
+ * fields, a dangling record, a still-loading one — and the caller shows the
459
+ * local reading alone. That is the `queryPivotProperties` contract: "this
460
+ * editor has no host data layer" is not an error to put in front of a user.
461
+ */
462
+ export function readRecord(std, element, profile) {
463
+ if (!isPivotBound(element))
464
+ return undefined;
465
+ const keys = profile.recordKeys;
466
+ if (!keys?.nature && !keys?.phase)
467
+ return undefined;
468
+ const state = queryPivotProperties(std, element.pivotDocId);
469
+ if (!state)
470
+ return undefined;
471
+ const current = state.value;
472
+ if (current.status !== 'ready')
473
+ return undefined;
474
+ const raw = keys.nature ? propertyStrings(current.snapshot, keys.nature) : [];
475
+ const phase = keys.phase ? propertyStrings(current.snapshot, keys.phase) : [];
476
+ // The record speaks the HOST's alphabet; the element speaks the framework's.
477
+ // Translating happens here, once, so that every consumer downstream — the
478
+ // proposal, the confirmation and the drift comparison — works on value ids a
479
+ // def describes and on nothing else.
480
+ const tagId = profile.nature?.tagId;
481
+ const { resolved, unknown } = tagId !== undefined && raw.length
482
+ ? resolveRecordNature(getUniverseRegistry(std).tag(tagId), raw)
483
+ : { resolved: [], unknown: [] };
484
+ return {
485
+ pivotDocId: element.pivotDocId,
486
+ ...(resolved.length ? { nature: resolved } : {}),
487
+ ...(unknown.length ? { unknownNature: unknown } : {}),
488
+ ...(phase.length ? { phase: phase[0] } : {}),
489
+ };
490
+ }
491
+ /**
492
+ * Where the drawing and the record disagree.
493
+ *
494
+ * A field the record does not carry is never a disagreement: the record simply
495
+ * has not been filled in, and calling that "drift" would turn an empty property
496
+ * into a permanent complaint. A field the BOARD cannot read is not one either —
497
+ * a component dragged off the map has no phase to be in conflict with.
498
+ *
499
+ * Neither is a word the framework does not describe ({@link RecordReading.unknownNature}):
500
+ * comparing `wardley:nature/activity` against the host's `"Activity"` would
501
+ * report a permanent, false disagreement on an element that is correctly
502
+ * qualified — and would offer the user two ways out, both of which corrupt one
503
+ * side. `readRecord` has already resolved what CAN be compared; what could not
504
+ * is not a difference of opinion, it is a difference of alphabet.
505
+ *
506
+ * The phase comparison accepts either the zone id or the zone's own wording,
507
+ * because a host is free to store "Product" where the declaration says
508
+ * `product`, and neither spelling is more correct than the other.
509
+ */
510
+ export function compareReading(reading, record) {
511
+ const fields = [];
512
+ const recorded = record.nature ?? [];
513
+ if (recorded.length) {
514
+ const read = reading.nature?.valueIds ?? [];
515
+ const same = read.length === recorded.length &&
516
+ read.every(value => recorded.includes(value));
517
+ if (!same) {
518
+ fields.push({
519
+ field: 'nature',
520
+ read: read.join(', '),
521
+ record: recorded.join(', '),
522
+ });
523
+ }
524
+ }
525
+ if (record.phase && reading.phase) {
526
+ const spellings = [
527
+ reading.phase.zoneId,
528
+ reading.phase.labelFallback ?? '',
529
+ ].map(value => value.toLowerCase());
530
+ if (!spellings.includes(record.phase.toLowerCase())) {
531
+ fields.push({
532
+ field: 'phase',
533
+ read: reading.phase.labelFallback ?? reading.phase.zoneId,
534
+ record: record.phase,
535
+ });
536
+ }
537
+ }
538
+ return fields;
539
+ }
540
+ /** A framework registers its reading profile here; nothing else registers one. */
541
+ export const ReadingProfileIdentifier = createIdentifier('ReadingProfile');
542
+ /**
543
+ * Register a framework's reading profile. Call it from the FLAG-GATED view
544
+ * extension, beside the rules and the profiles: reading a map is tooling, and a
545
+ * board whose framework is switched off keeps every one of its elements and
546
+ * simply stops being read (ADR 0009).
547
+ *
548
+ * ```ts
549
+ * context.register(ReadingProfileExtension(WARDLEY_READING));
550
+ * ```
551
+ */
552
+ export function ReadingProfileExtension(profile) {
553
+ return {
554
+ setup: di => {
555
+ di.addImpl(ReadingProfileIdentifier(profile.id), () => profile);
556
+ },
557
+ };
558
+ }
559
+ export const PivotRecordPickerProvider = createIdentifier('LabrePivotRecordPicker');
560
+ export function PivotRecordPickerExtension(picker) {
561
+ return {
562
+ setup: di => {
563
+ di.override(PivotRecordPickerProvider, () => picker);
564
+ },
565
+ };
566
+ }
567
+ /**
568
+ * Debounce of the drift trigger, in ms.
569
+ *
570
+ * Comfortably above a frame: the trigger is the one part of this feature that
571
+ * runs without being asked, so it stays off the critical path by construction —
572
+ * a drag of a bound component emits dozens of updates and must cost one check,
573
+ * after the hand has stopped. Longer than the validation engine's 120 ms
574
+ * because nothing here is a verdict: a record that is out of date can wait a
575
+ * fifth of a second longer than a rule can.
576
+ */
577
+ export const READING_DRIFT_DELAY_MS = 200;
578
+ /** Props whose change can move a reading away from a confirmed record. */
579
+ const DRIFT_PROPS = new Set(['xywh', 'rotate', 'tags', 'role', 'pivotDocId']);
580
+ const touchesReading = (payload) => {
581
+ const { props, oldValues } = payload;
582
+ if (!props && !oldValues)
583
+ return true;
584
+ return (Object.keys(props ?? {}).some(key => DRIFT_PROPS.has(key)) ||
585
+ Object.keys(oldValues ?? {}).some(key => DRIFT_PROPS.has(key)));
586
+ };
587
+ /**
588
+ * Owns the OPEN panel and the drift signal. It owns no reading: a reading is
589
+ * recomputed on demand from the document, so it can never be stale and can
590
+ * never be a second source of truth.
591
+ *
592
+ * Inert until a framework registers a {@link ReadingProfile} — a board with no
593
+ * framework enabled pays one empty-map check at mount and subscribes to
594
+ * nothing.
595
+ */
596
+ export class ReadingManager extends LifeCycleWatcher {
597
+ constructor() {
598
+ super(...arguments);
599
+ /**
600
+ * The element whose proposal is open, or `null`. Session state, set by the
601
+ * `element.read` command and by nothing else: the panel NEVER opens itself,
602
+ * which is the whole of the PO's arbitration.
603
+ */
604
+ this.open$ = signal(null);
605
+ /**
606
+ * The last drift observed, or `null`. Informative and non-blocking: nothing
607
+ * anywhere refuses a gesture because of it.
608
+ */
609
+ this.drift$ = signal(null);
610
+ this._profiles = null;
611
+ this._subscriptions = [];
612
+ this._disposeSurfaceEffect = null;
613
+ this._pending = null;
614
+ this._dirty = new Set();
615
+ }
616
+ static { this.key = 'reading-manager'; }
617
+ /** Registered profiles, resolved once. Empty when every flag is off. */
618
+ get profiles() {
619
+ this._profiles ??= Array.from(this.std.provider.getAll(ReadingProfileIdentifier).values());
620
+ return this._profiles;
621
+ }
622
+ mounted() {
623
+ if (this.profiles.length === 0)
624
+ return;
625
+ // The surface is a SIGNAL, not a fact: it can be null at mount and arrive
626
+ // later, and it is replaced if the surface block is.
627
+ this._disposeSurfaceEffect = effect(() => {
628
+ this._resubscribe(this.std.get(GfxControllerIdentifier).surface$.value);
629
+ });
630
+ }
631
+ unmounted() {
632
+ this._disposeSurfaceEffect?.();
633
+ this._disposeSurfaceEffect = null;
634
+ this._unsubscribe();
635
+ this.open$.value = null;
636
+ this.drift$.value = null;
637
+ super.unmounted();
638
+ }
639
+ /** Open the proposal for one element. Reads nothing yet, writes nothing ever. */
640
+ open(elementId) {
641
+ this.open$.value = elementId;
642
+ }
643
+ close() {
644
+ this.open$.value = null;
645
+ }
646
+ /** The current surface, or `null` before one arrives. */
647
+ get _surface() {
648
+ return this.std.get(GfxControllerIdentifier).surface$.value;
649
+ }
650
+ /**
651
+ * The reading of one element, recomputed from the document every time it is
652
+ * asked for. Cheap enough to be called from a render: one pass over the
653
+ * surface for the relations, one containment test per frame.
654
+ */
655
+ reading(elementId) {
656
+ const surface = this._surface;
657
+ const element = surface?.getElementById(elementId);
658
+ if (!surface || !element)
659
+ return null;
660
+ const profile = readingProfileFor(element, this.profiles);
661
+ if (!profile)
662
+ return null;
663
+ return readElement(element, surface.elementModels, profile, {
664
+ lang: hostLanguage(this.std),
665
+ });
666
+ }
667
+ /** The profile governing an element, for the panel's confirmation actions. */
668
+ profileOf(elementId) {
669
+ const element = this._surface?.getElementById(elementId);
670
+ return element ? readingProfileFor(element, this.profiles) : null;
671
+ }
672
+ _unsubscribe() {
673
+ for (const subscription of this._subscriptions)
674
+ subscription.unsubscribe();
675
+ this._subscriptions = [];
676
+ if (this._pending) {
677
+ clearTimeout(this._pending);
678
+ this._pending = null;
679
+ }
680
+ this._dirty.clear();
681
+ }
682
+ _resubscribe(surface) {
683
+ this._unsubscribe();
684
+ // A new surface is a new document: a drift observed on the last one says
685
+ // nothing about this one.
686
+ this.drift$.value = null;
687
+ this.open$.value = null;
688
+ if (!surface)
689
+ return;
690
+ this._subscriptions.push(surface.elementUpdated.subscribe(payload => {
691
+ // Local only, for the reason the materiality publisher documents:
692
+ // `local` partitions the fleet into one watcher and N−1 silent
693
+ // observers, with no leader election — and a colleague's drag is their
694
+ // drift to notice, not ours.
695
+ if (!payload.local)
696
+ return;
697
+ if (!touchesReading(payload))
698
+ return;
699
+ this._schedule(payload.id);
700
+ }));
701
+ this._subscriptions.push(surface.elementRemoved.subscribe(({ id }) => {
702
+ this._dirty.delete(id);
703
+ if (this.drift$.value?.elementId === id)
704
+ this.drift$.value = null;
705
+ if (this.open$.value === id)
706
+ this.open$.value = null;
707
+ }));
708
+ }
709
+ /**
710
+ * Never in the same tick, and never in the same frame.
711
+ *
712
+ * The whole trigger is one timer: a drag emits an update per pointer move,
713
+ * and each one pushes the single pending check further away, so the work
714
+ * happens once, after the hand has stopped, and the 16 ms budget of the drag
715
+ * itself is untouched by construction rather than by measurement.
716
+ */
717
+ _schedule(id) {
718
+ this._dirty.add(id);
719
+ if (this._pending)
720
+ clearTimeout(this._pending);
721
+ this._pending = setTimeout(() => {
722
+ this._pending = null;
723
+ const ids = [...this._dirty];
724
+ this._dirty.clear();
725
+ for (const dirty of ids)
726
+ this._check(dirty);
727
+ }, READING_DRIFT_DELAY_MS);
728
+ }
729
+ _check(elementId) {
730
+ const surface = this._surface;
731
+ const element = surface?.getElementById(elementId);
732
+ if (!surface || !element)
733
+ return;
734
+ // Only a LINKED element can drift: without a record there is nothing to
735
+ // disagree with, and the reading is just a reading.
736
+ if (!isPivotBound(element)) {
737
+ if (this.drift$.value?.elementId === elementId)
738
+ this.drift$.value = null;
739
+ return;
740
+ }
741
+ const profile = readingProfileFor(element, this.profiles);
742
+ if (!profile)
743
+ return;
744
+ const reading = readElement(element, surface.elementModels, profile, {
745
+ lang: hostLanguage(this.std),
746
+ });
747
+ if (!reading)
748
+ return;
749
+ const record = readRecord(this.std, element, profile);
750
+ if (!record) {
751
+ if (this.drift$.value?.elementId === elementId)
752
+ this.drift$.value = null;
753
+ return;
754
+ }
755
+ const fields = compareReading(reading, record);
756
+ if (fields.length === 0) {
757
+ if (this.drift$.value?.elementId === elementId)
758
+ this.drift$.value = null;
759
+ return;
760
+ }
761
+ this.drift$.value = {
762
+ elementId,
763
+ pivotDocId: record.pivotDocId,
764
+ fields,
765
+ };
766
+ }
767
+ }