@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,155 @@
1
+ import type { BlockStdScope, FrameworkId } from '../../std/index.js';
2
+ import type { RoleDefs, RoleId } from '../../std/gfx/index.js';
3
+ import type { ExtensionType } from '../../store/index.js';
4
+ /**
5
+ * `'<framework>:<local>'` — e.g. `'wardley:component'`, `'wardley:nature'`.
6
+ *
7
+ * A **seed-time** validation aid only. Persisted values are plain `string`s and
8
+ * are never narrowed to this, because a document may legitimately carry an id
9
+ * whose def was removed, renamed or never seeded in this deployment — and it
10
+ * must still open.
11
+ */
12
+ export type QualifiedId = `${string}:${string}`;
13
+ /** `'<tagId>/<local>'` — e.g. `'wardley:nature/data'`. */
14
+ export type TagValueId = string;
15
+ export type TagValueDef = {
16
+ /** `'<tagId>/<local>'`, e.g. `'wardley:nature/data'`. */
17
+ id: TagValueId;
18
+ /** Display label, already localized by the host. */
19
+ label: string;
20
+ description?: string;
21
+ /** Advisory colour token. The library may ignore it; it never affects layout. */
22
+ color?: string;
23
+ /** Hidden from pickers; still displayed when already present on an element. */
24
+ deprecated?: boolean;
25
+ };
26
+ export type TagDef = {
27
+ /** `'<framework>:<local>'`, e.g. `'wardley:nature'`. */
28
+ id: QualifiedId;
29
+ label: string;
30
+ description?: string;
31
+ /** How many values an element may carry for this tag. */
32
+ cardinality: 'single' | 'multi';
33
+ /** A closed list, or `'open'` for free-text values. */
34
+ values: TagValueDef[] | 'open';
35
+ /**
36
+ * Role ids this tag qualifies. `'*'` = every role of this framework.
37
+ * Specialisation applies: a tag on `'wardley:component'` also applies to
38
+ * every role whose `parent` chain reaches it — resolved with `roleIsA`
39
+ * against the framework's own `RoleDefs`, which the CALLER supplies.
40
+ */
41
+ appliesTo: RoleId[] | '*';
42
+ /**
43
+ * Advisory only. A missing "required" tag is reported by the rules engine; it
44
+ * NEVER blocks a gesture, a save, or a document load.
45
+ */
46
+ required?: boolean;
47
+ /** Ascending display order. Ties broken by seed order, then by id. */
48
+ order?: number;
49
+ deprecated?: boolean;
50
+ };
51
+ /**
52
+ * One pack of tag definitions. Plain data — no functions, no classes, no
53
+ * `Symbol` — so the TS type IS the JSON schema and a pack can ship as a `.json`
54
+ * asset.
55
+ *
56
+ * `roles` is deliberately absent: roles are lib-side data modules shipped by
57
+ * the framework that renders them (`WARDLEY_ROLES`), not app-seeded, and never
58
+ * pass through this registry (ADR 0007 § 2bis).
59
+ */
60
+ export type UniverseTagDefs = {
61
+ /** Bumped only on a breaking change to THIS format. Currently 1. */
62
+ formatVersion: 1;
63
+ /**
64
+ * Unique id of this *pack*, not of the framework: several packs may extend
65
+ * the same framework (a base Wardley pack + a client's private extension).
66
+ * Doubles as the DI variant.
67
+ */
68
+ packId: string;
69
+ framework: FrameworkId;
70
+ label: string;
71
+ tags: TagDef[];
72
+ };
73
+ /** A seed-time problem, for a host diagnostics panel. Never thrown. */
74
+ export type UniverseDefIssue = {
75
+ severity: 'warning' | 'error';
76
+ code: 'invalid-id' | 'cross-framework-id' | 'duplicate-conflict' | 'unsupported-format-version';
77
+ id?: string;
78
+ message: string;
79
+ };
80
+ /**
81
+ * Merged, validated, read-only view over the registered packs. **TAGS ONLY.**
82
+ */
83
+ export interface UniverseRegistry {
84
+ frameworks(): FrameworkId[];
85
+ /**
86
+ * Tags applying to a role, ordered. Role specialisation is resolved with
87
+ * `roleIsA` against the framework's own `RoleDefs`, which the caller supplies
88
+ * — the registry holds no role vocabulary of its own.
89
+ */
90
+ tagsForRole(roleId: RoleId, defs: RoleDefs): TagDef[];
91
+ tag(id: string): TagDef | undefined;
92
+ /** Every merged tag, ordered. */
93
+ tags(): TagDef[];
94
+ /** Seed-time problems. Never thrown. */
95
+ issues(): UniverseDefIssue[];
96
+ }
97
+ /**
98
+ * Variant-parameterized: **one registration per pack, keyed by `packId`** —
99
+ * the same mechanism as `SpotlightHostExtension(elementType)` and
100
+ * `ExternalGroupByConfigProvider(config.name)`.
101
+ */
102
+ export declare const UniverseTagDefsProvider: import("../../global/di/types.js").ServiceIdentifier<UniverseTagDefs> & (<U extends UniverseTagDefs = UniverseTagDefs>(variant: import("../../global/di/types.js").ServiceVariant) => import("../../global/di/types.js").ServiceIdentifier<U>);
103
+ /**
104
+ * Seed one or more packs.
105
+ *
106
+ * `di.override`, **not** `di.addImpl`: `addImpl` throws
107
+ * `DuplicateServiceDefinitionError` when the same `[scope, identifier, variant]`
108
+ * is registered twice, while `override` works whether or not a prior
109
+ * registration exists. That is exactly the idempotency this needs — **distinct
110
+ * `packId`s accumulate, identical `packId`s replace** — so a host that
111
+ * re-registers on every render never throws and never grows the registry.
112
+ *
113
+ * Order stability is load-bearing and non-obvious: `getAll` returns a
114
+ * `Map<ServiceVariant, T>`, and `Map.set` on an EXISTING key keeps that key's
115
+ * original insertion position. Re-seeding a pack therefore updates it in place
116
+ * rather than moving it to the end, so a re-registration cannot silently flip
117
+ * which pack wins a cosmetic field.
118
+ *
119
+ * **All packs MUST be registered in the same DI scope.** `getAllRaw` falls back
120
+ * to the parent scope only when the current scope has no registration for the
121
+ * identifier AT ALL; it never merges across scopes. Seeding one pack from a
122
+ * `StoreExtension` and another from a `ViewExtension` would silently hide the
123
+ * first behind the second. The library cannot enforce this, so it is stated
124
+ * here and belongs in the host integration checklist.
125
+ */
126
+ export declare function UniverseTagDefsExtension(defs: UniverseTagDefs | UniverseTagDefs[]): ExtensionType;
127
+ /**
128
+ * Merge every registered pack into one read-only view.
129
+ *
130
+ * Pure, so it is testable with literals and no container. The merge rules, in
131
+ * full:
132
+ *
133
+ * - **Union by id.** Several packs may extend the same universe.
134
+ * - **Additive fields merge:** `values` are unioned by value id, `appliesTo`
135
+ * arrays are unioned, and `'*'` absorbs any list.
136
+ * - **Cosmetic fields — last pack wins:** `label`, `description`, `color`,
137
+ * `order`, `required`, `deprecated`.
138
+ * - **Structural fields — first pack wins, conflict recorded:** `cardinality`,
139
+ * and `values: 'open'` vs a closed list. The conflict becomes a
140
+ * `duplicate-conflict` error issue and does NOT throw. A host that needs a
141
+ * deterministic winner should not define the same structural field twice; the
142
+ * registry reports the collision rather than guessing.
143
+ * - **Idempotent by value.** Activating a universe twice yields the same
144
+ * registry.
145
+ */
146
+ export declare function buildUniverseRegistry(packs: readonly UniverseTagDefs[]): UniverseRegistry;
147
+ /**
148
+ * Whether a tag qualifies a role, following specialisation: a tag declared on
149
+ * `'wardley:component'` also applies to `'wardley:market'`, which specialises
150
+ * it. `'*'` matches every role of the tag's own framework and nothing else —
151
+ * a wildcard that crossed framework boundaries would make two taxonomies
152
+ * qualify each other's elements.
153
+ */
154
+ export declare function tagAppliesToRole(def: TagDef, roleId: RoleId | undefined, defs: RoleDefs): boolean;
155
+ export declare function getUniverseRegistry(std: BlockStdScope): UniverseRegistry;
@@ -0,0 +1,254 @@
1
+ /**
2
+ * Per-universe tag definitions — the format, the seeding mechanism and the
3
+ * merged read-only view over them (MF3 / ADR 0007 §§ 2 and 3).
4
+ *
5
+ * The **application seeds** the definitions per universe; the **library fixes
6
+ * their format**. That split is the whole point: a new business universe
7
+ * (cynefin, TOGAF, a client's private taxonomy) must be addable without
8
+ * shipping library code. The library ships exactly one pack of its own —
9
+ * Wardley's four natures — as a worked example, on the same mechanism a host
10
+ * would use.
11
+ *
12
+ * Three rules govern everything below, and they are not negotiable:
13
+ *
14
+ * - **Nothing throws, ever.** An invalid id, a cross-framework id, an
15
+ * unrecognised `formatVersion` — each drops the offending def and records an
16
+ * issue. A malformed seed must never prevent a document from opening. That is
17
+ * the hard boundary between "the app misconfigured a pack" and "the user lost
18
+ * their board".
19
+ * - **Defs are runtime configuration and are NEVER persisted.** The document
20
+ * stores ids only. A value whose def has vanished still loads and is shown as
21
+ * its raw id, marked unknown.
22
+ * - **Ids are forever.** A def is never removed, only `deprecated`.
23
+ */
24
+ import { createIdentifier } from '../../global/di/index.js';
25
+ import { FRAMEWORK_IDS } from '../../std/index.js';
26
+ import { roleIsA } from '../../std/gfx/index.js';
27
+ /**
28
+ * Lower-kebab, case-sensitive, no unicode, no dots. Hyphenated framework ids
29
+ * are legal, so `cynefin-estuarine:domain` is well formed.
30
+ */
31
+ const ID_PATTERN = /^[a-z0-9][a-z0-9-]*:[a-z0-9][a-z0-9-]*(\/[a-z0-9][a-z0-9-]*)?$/;
32
+ /**
33
+ * Variant-parameterized: **one registration per pack, keyed by `packId`** —
34
+ * the same mechanism as `SpotlightHostExtension(elementType)` and
35
+ * `ExternalGroupByConfigProvider(config.name)`.
36
+ */
37
+ export const UniverseTagDefsProvider = createIdentifier('LabreUniverseTagDefs');
38
+ /**
39
+ * Seed one or more packs.
40
+ *
41
+ * `di.override`, **not** `di.addImpl`: `addImpl` throws
42
+ * `DuplicateServiceDefinitionError` when the same `[scope, identifier, variant]`
43
+ * is registered twice, while `override` works whether or not a prior
44
+ * registration exists. That is exactly the idempotency this needs — **distinct
45
+ * `packId`s accumulate, identical `packId`s replace** — so a host that
46
+ * re-registers on every render never throws and never grows the registry.
47
+ *
48
+ * Order stability is load-bearing and non-obvious: `getAll` returns a
49
+ * `Map<ServiceVariant, T>`, and `Map.set` on an EXISTING key keeps that key's
50
+ * original insertion position. Re-seeding a pack therefore updates it in place
51
+ * rather than moving it to the end, so a re-registration cannot silently flip
52
+ * which pack wins a cosmetic field.
53
+ *
54
+ * **All packs MUST be registered in the same DI scope.** `getAllRaw` falls back
55
+ * to the parent scope only when the current scope has no registration for the
56
+ * identifier AT ALL; it never merges across scopes. Seeding one pack from a
57
+ * `StoreExtension` and another from a `ViewExtension` would silently hide the
58
+ * first behind the second. The library cannot enforce this, so it is stated
59
+ * here and belongs in the host integration checklist.
60
+ */
61
+ export function UniverseTagDefsExtension(defs) {
62
+ return {
63
+ setup: di => {
64
+ for (const pack of Array.isArray(defs) ? defs : [defs]) {
65
+ di.override(UniverseTagDefsProvider(pack.packId), () => pack);
66
+ }
67
+ },
68
+ };
69
+ }
70
+ /** `'wardley:nature'` → `'wardley'`. */
71
+ const namespaceOf = (id) => id.split(':')[0] ?? '';
72
+ /** `'wardley:nature/data'` → `'wardley:nature'`. */
73
+ const tagOfValue = (valueId) => valueId.split('/')[0] ?? '';
74
+ /**
75
+ * Merge every registered pack into one read-only view.
76
+ *
77
+ * Pure, so it is testable with literals and no container. The merge rules, in
78
+ * full:
79
+ *
80
+ * - **Union by id.** Several packs may extend the same universe.
81
+ * - **Additive fields merge:** `values` are unioned by value id, `appliesTo`
82
+ * arrays are unioned, and `'*'` absorbs any list.
83
+ * - **Cosmetic fields — last pack wins:** `label`, `description`, `color`,
84
+ * `order`, `required`, `deprecated`.
85
+ * - **Structural fields — first pack wins, conflict recorded:** `cardinality`,
86
+ * and `values: 'open'` vs a closed list. The conflict becomes a
87
+ * `duplicate-conflict` error issue and does NOT throw. A host that needs a
88
+ * deterministic winner should not define the same structural field twice; the
89
+ * registry reports the collision rather than guessing.
90
+ * - **Idempotent by value.** Activating a universe twice yields the same
91
+ * registry.
92
+ */
93
+ export function buildUniverseRegistry(packs) {
94
+ const issues = [];
95
+ const drafts = new Map();
96
+ const frameworks = [];
97
+ let rank = 0;
98
+ const issue = (severity, code, message, id) => issues.push(id === undefined ? { severity, code, message } : { severity, code, id, message });
99
+ for (const pack of packs) {
100
+ if (pack?.formatVersion !== 1) {
101
+ // The WHOLE pack is dropped: a format we do not understand may mean
102
+ // anything. Documents still open; the tooling is simply unavailable.
103
+ issue('error', 'unsupported-format-version', `Pack "${pack?.packId ?? '<unnamed>'}" declares formatVersion ${String(pack?.formatVersion)}; this build understands 1. The pack is ignored.`, pack?.packId);
104
+ continue;
105
+ }
106
+ if (!FRAMEWORK_IDS.includes(pack.framework)) {
107
+ issue('warning', 'cross-framework-id', `Pack "${pack.packId}" declares the unknown framework "${pack.framework}".`, pack.packId);
108
+ }
109
+ if (!frameworks.includes(pack.framework))
110
+ frameworks.push(pack.framework);
111
+ for (const def of pack.tags ?? []) {
112
+ if (typeof def?.id !== 'string' || !ID_PATTERN.test(def.id)) {
113
+ issue('error', 'invalid-id', `Tag id "${String(def?.id)}" in pack "${pack.packId}" is not a well-formed '<framework>:<local>' id.`, typeof def?.id === 'string' ? def.id : undefined);
114
+ continue;
115
+ }
116
+ // The `<framework>` segment of every id in a pack MUST equal the pack's
117
+ // own framework. A cross-framework id is how one taxonomy would quietly
118
+ // start answering for another's roles.
119
+ if (namespaceOf(def.id) !== pack.framework) {
120
+ issue('error', 'cross-framework-id', `Tag "${def.id}" is namespaced "${namespaceOf(def.id)}" but pack "${pack.packId}" declares framework "${pack.framework}".`, def.id);
121
+ continue;
122
+ }
123
+ mergeTagDef(drafts, def, pack, issue, rank++);
124
+ }
125
+ }
126
+ const merged = [...drafts.values()]
127
+ .map(draft => finishDraft(draft))
128
+ .sort((a, b) => (a.order ?? 0) - (b.order ?? 0) ||
129
+ (drafts.get(a.id).rank - drafts.get(b.id).rank) ||
130
+ a.id.localeCompare(b.id));
131
+ // Keyed by plain `string`, not by `QualifiedId`: a lookup comes from a
132
+ // DOCUMENT, which may carry any id at all, and the template-literal type is a
133
+ // seed-time aid rather than a claim about what is persisted.
134
+ const byId = new Map(merged.map(def => [def.id, def]));
135
+ return {
136
+ frameworks: () => [...frameworks],
137
+ tags: () => [...merged],
138
+ tag: id => byId.get(id),
139
+ tagsForRole: (roleId, defs) => merged.filter(def => tagAppliesToRole(def, roleId, defs)),
140
+ issues: () => [...issues],
141
+ };
142
+ }
143
+ function mergeTagDef(drafts, def, pack, issue, rank) {
144
+ const existing = drafts.get(def.id);
145
+ if (!existing) {
146
+ drafts.set(def.id, {
147
+ def: { ...def },
148
+ values: valueMapOf(def, pack, issue),
149
+ appliesTo: appliesToOf(def),
150
+ rank,
151
+ });
152
+ return;
153
+ }
154
+ // Cosmetic: last pack wins. Absent stays absent rather than blanking what an
155
+ // earlier pack said.
156
+ const draft = existing.def;
157
+ if (def.label !== undefined)
158
+ draft.label = def.label;
159
+ if (def.description !== undefined)
160
+ draft.description = def.description;
161
+ if (def.order !== undefined)
162
+ draft.order = def.order;
163
+ if (def.required !== undefined)
164
+ draft.required = def.required;
165
+ if (def.deprecated !== undefined)
166
+ draft.deprecated = def.deprecated;
167
+ // Structural: first pack wins, and the collision is REPORTED rather than
168
+ // guessed at.
169
+ if (def.cardinality !== draft.cardinality) {
170
+ issue('error', 'duplicate-conflict', `Tag "${def.id}": pack "${pack.packId}" declares cardinality "${def.cardinality}" but "${draft.cardinality}" was declared first and stands.`, def.id);
171
+ }
172
+ const incomingOpen = def.values === 'open';
173
+ const existingOpen = existing.values === 'open';
174
+ if (incomingOpen !== existingOpen) {
175
+ issue('error', 'duplicate-conflict', `Tag "${def.id}": pack "${pack.packId}" declares ${incomingOpen ? "an open value list" : 'a closed value list'} but the opposite was declared first and stands.`, def.id);
176
+ }
177
+ else if (existing.values !== 'open') {
178
+ // Additive: values union by value id, last cosmetic wins.
179
+ for (const [valueId, value] of valueMapOf(def, pack, issue)) {
180
+ const current = existing.values.get(valueId);
181
+ existing.values.set(valueId, current ? { ...current, ...value } : value);
182
+ }
183
+ }
184
+ // Additive: `'*'` absorbs any list, in either direction.
185
+ const incomingRoles = appliesToOf(def);
186
+ if (existing.appliesTo !== '*') {
187
+ if (incomingRoles === '*')
188
+ existing.appliesTo = '*';
189
+ else
190
+ for (const role of incomingRoles)
191
+ existing.appliesTo.add(role);
192
+ }
193
+ }
194
+ function valueMapOf(def, pack, issue) {
195
+ if (def.values === 'open')
196
+ return 'open';
197
+ const values = new Map();
198
+ for (const value of def.values ?? []) {
199
+ if (typeof value?.id !== 'string' || !ID_PATTERN.test(value.id)) {
200
+ issue('error', 'invalid-id', `Value id "${String(value?.id)}" of tag "${def.id}" in pack "${pack.packId}" is not a well-formed '<tagId>/<local>' id.`, typeof value?.id === 'string' ? value.id : undefined);
201
+ continue;
202
+ }
203
+ // A value belongs to its tag, spelled out in the id itself. Anything else
204
+ // would let a pack file a value under a tag it does not own.
205
+ if (tagOfValue(value.id) !== def.id) {
206
+ issue('error', 'invalid-id', `Value "${value.id}" is not a value of tag "${def.id}".`, value.id);
207
+ continue;
208
+ }
209
+ values.set(value.id, { ...value });
210
+ }
211
+ return values;
212
+ }
213
+ const appliesToOf = (def) => def.appliesTo === '*' ? '*' : new Set(def.appliesTo ?? []);
214
+ function finishDraft(draft) {
215
+ return {
216
+ ...draft.def,
217
+ values: draft.values === 'open' ? 'open' : [...draft.values.values()],
218
+ appliesTo: draft.appliesTo === '*' ? '*' : [...draft.appliesTo],
219
+ };
220
+ }
221
+ /**
222
+ * Whether a tag qualifies a role, following specialisation: a tag declared on
223
+ * `'wardley:component'` also applies to `'wardley:market'`, which specialises
224
+ * it. `'*'` matches every role of the tag's own framework and nothing else —
225
+ * a wildcard that crossed framework boundaries would make two taxonomies
226
+ * qualify each other's elements.
227
+ */
228
+ export function tagAppliesToRole(def, roleId, defs) {
229
+ if (!roleId)
230
+ return false;
231
+ if (def.appliesTo === '*')
232
+ return namespaceOf(roleId) === namespaceOf(def.id);
233
+ return def.appliesTo.some(ancestor => roleIsA(roleId, ancestor, defs));
234
+ }
235
+ /**
236
+ * The merged registry for this editor assembly.
237
+ *
238
+ * Memoized per `BlockStdScope`: the merge is pure and the packs are fixed at
239
+ * assembly time, while callers (a toolbar section rebuilt on every selection
240
+ * change) ask for it often. A host that re-seeds a pack after the first read
241
+ * therefore needs a new scope — which is what re-creating the editor already
242
+ * does, and the only cost of not re-validating a static configuration on every
243
+ * keystroke.
244
+ */
245
+ const REGISTRY_CACHE = new WeakMap();
246
+ export function getUniverseRegistry(std) {
247
+ const cached = REGISTRY_CACHE.get(std);
248
+ if (cached)
249
+ return cached;
250
+ const packs = [...std.provider.getAll(UniverseTagDefsProvider).values()];
251
+ const registry = buildUniverseRegistry(packs);
252
+ REGISTRY_CACHE.set(std, registry);
253
+ return registry;
254
+ }
@@ -13,4 +13,8 @@ declare global {
13
13
  export declare function caretRangeFromPoint(clientX: number, clientY: number): Range | null;
14
14
  export declare function resetNativeSelection(range: Range | null): void;
15
15
  export declare function getCurrentNativeRange(selection?: Selection | null): Range | null;
16
+ export declare const api: {
17
+ caretRangeFromPoint: typeof caretRangeFromPoint;
18
+ resetNativeSelection: typeof resetNativeSelection;
19
+ };
16
20
  export declare function handleNativeRangeAtPoint(x: number, y: number): void;
@@ -63,11 +63,67 @@ export function getCurrentNativeRange(selection = window.getSelection()) {
63
63
  }
64
64
  return selection.getRangeAt(0);
65
65
  }
66
+ // Indirection so that unit tests can mock these two browser-bound functions.
67
+ export const api = {
68
+ caretRangeFromPoint,
69
+ resetNativeSelection,
70
+ };
66
71
  export function handleNativeRangeAtPoint(x, y) {
67
- const range = caretRangeFromPoint(x, y);
72
+ const range = api.caretRangeFromPoint(x, y);
73
+ if (range) {
74
+ normalizeCaretRange(range);
75
+ }
68
76
  const startContainer = range?.startContainer;
69
77
  // click on rich text
70
78
  if (startContainer instanceof Node) {
71
- resetNativeSelection(range);
79
+ api.resetNativeSelection(range);
80
+ }
81
+ }
82
+ function lastMeaningfulTextNode(node) {
83
+ const walker = document.createTreeWalker(node, NodeFilter.SHOW_TEXT, {
84
+ acceptNode(node) {
85
+ return node.textContent && node.textContent.trim().length > 0
86
+ ? NodeFilter.FILTER_ACCEPT
87
+ : NodeFilter.FILTER_REJECT;
88
+ },
89
+ });
90
+ let last = null;
91
+ while (walker.nextNode()) {
92
+ last = walker.currentNode;
93
+ }
94
+ return last;
95
+ }
96
+ /**
97
+ * Clicking past the end of a line gives back a caret anchored on an *element*
98
+ * rather than on a text node. Such a range paints a caret for a frame and then
99
+ * loses it, because the editor only tracks carets that live inside text. Move
100
+ * the caret to the nearest meaningful text node so that it survives.
101
+ */
102
+ function normalizeCaretRange(range) {
103
+ const { startContainer, startOffset } = range;
104
+ if (startContainer.nodeType === Node.TEXT_NODE)
105
+ return;
106
+ // Try to find text in the element at `startOffset`
107
+ const offsetEl = startOffset > 0
108
+ ? startContainer.childNodes[startOffset - 1]
109
+ : startContainer.childNodes[0];
110
+ if (offsetEl) {
111
+ if (offsetEl.nodeType === Node.TEXT_NODE) {
112
+ range.setStart(offsetEl, startOffset > 0 ? (offsetEl.textContent?.length ?? 0) : 0);
113
+ range.collapse(true);
114
+ return;
115
+ }
116
+ const text = lastMeaningfulTextNode(offsetEl);
117
+ if (text) {
118
+ range.setStart(text, text.textContent?.length ?? 0);
119
+ range.collapse(true);
120
+ return;
121
+ }
122
+ }
123
+ // Fallback, try to find text in startContainer
124
+ const text = lastMeaningfulTextNode(startContainer);
125
+ if (text) {
126
+ range.setStart(text, text.textContent?.length ?? 0);
127
+ range.collapse(true);
72
128
  }
73
129
  }
@@ -11,3 +11,63 @@ import type { EditorHost } from '../../../std/index.js';
11
11
  * ```
12
12
  */
13
13
  export declare function getViewportElement(editorHost: EditorHost): HTMLElement | null;
14
+ /**
15
+ * Where a model point lands, in CSS pixels, for an overlay drawn *inside* the
16
+ * edgeless container: the selection rectangle, the resize handles, the remote
17
+ * cursors, the text editors mounted over an element.
18
+ *
19
+ * `Viewport.toViewCoord` answers in real screen pixels, so it multiplies by
20
+ * `viewScale` — the CSS scale an outer container puts on the whole editor,
21
+ * which is not 1 in a nested editor such as an embedded synced edgeless doc.
22
+ * An overlay lives *inside* that container, so its placement has to be stated
23
+ * in the container's already scaled space, exactly the way
24
+ * `GfxBlockComponent.getCSSTransform` states a block's. Positioning an overlay
25
+ * from `toViewCoord` lets the container apply its scale a second time, and the
26
+ * overlay drifts away from the element it decorates as soon as
27
+ * `viewScale !== 1`.
28
+ */
29
+ export declare function toOverlayCoord(viewport: {
30
+ viewportX: number;
31
+ viewportY: number;
32
+ zoom: number;
33
+ viewScale: number;
34
+ }, modelX: number, modelY: number): [number, number];
35
+ /**
36
+ * The scale an overlay drawn inside the edgeless container has to wear so that
37
+ * it ends up painted at the viewport zoom. Counterpart of
38
+ * {@link toOverlayCoord}; same reasoning about `viewScale`.
39
+ */
40
+ export declare function overlayScale(viewport: {
41
+ zoom: number;
42
+ viewScale: number;
43
+ }): number;
44
+ /**
45
+ * How wide and tall the visible viewport is *in the same units as*
46
+ * {@link toOverlayCoord}, so an overlay can tell whether it is about to run off
47
+ * the edge.
48
+ *
49
+ * `Viewport.width` / `Viewport.height` are the bounding client rect, i.e. real
50
+ * screen pixels. Comparing an overlay coordinate against them mixes two spaces
51
+ * and the flip or the clamp fires at the wrong moment under a scaled host.
52
+ */
53
+ export declare function overlayViewportSize(viewport: {
54
+ width: number;
55
+ height: number;
56
+ viewScale: number;
57
+ }): [number, number];
58
+ /**
59
+ * Where a model point lands in *client* coordinates — what
60
+ * `document.caretRangeFromPoint`, `elementFromPoint` and a `PointerEvent`'s
61
+ * `clientX`/`clientY` speak.
62
+ *
63
+ * `Viewport.toViewCoord` answers relative to the viewport element's own top
64
+ * left corner, so handing its result to a client-coordinate API drops the
65
+ * viewport's offset in the window: the caret lands elsewhere as soon as the
66
+ * editor is not flush against the window origin — a sidebar, a header, or the
67
+ * editor embedded in a panel. Inverse of `Viewport.toViewCoordFromClientCoord`.
68
+ */
69
+ export declare function toClientCoord(viewport: {
70
+ left: number;
71
+ top: number;
72
+ toViewCoord: (modelX: number, modelY: number) => number[];
73
+ }, modelX: number, modelY: number): [number, number];
@@ -13,3 +13,61 @@ export function getViewportElement(editorHost) {
13
13
  return (editorHost.closest('.affine-page-viewport') ??
14
14
  editorHost.closest('.affine-edgeless-viewport'));
15
15
  }
16
+ /**
17
+ * Where a model point lands, in CSS pixels, for an overlay drawn *inside* the
18
+ * edgeless container: the selection rectangle, the resize handles, the remote
19
+ * cursors, the text editors mounted over an element.
20
+ *
21
+ * `Viewport.toViewCoord` answers in real screen pixels, so it multiplies by
22
+ * `viewScale` — the CSS scale an outer container puts on the whole editor,
23
+ * which is not 1 in a nested editor such as an embedded synced edgeless doc.
24
+ * An overlay lives *inside* that container, so its placement has to be stated
25
+ * in the container's already scaled space, exactly the way
26
+ * `GfxBlockComponent.getCSSTransform` states a block's. Positioning an overlay
27
+ * from `toViewCoord` lets the container apply its scale a second time, and the
28
+ * overlay drifts away from the element it decorates as soon as
29
+ * `viewScale !== 1`.
30
+ */
31
+ export function toOverlayCoord(viewport, modelX, modelY) {
32
+ const { viewportX, viewportY, zoom, viewScale } = viewport;
33
+ return [
34
+ ((modelX - viewportX) * zoom) / viewScale,
35
+ ((modelY - viewportY) * zoom) / viewScale,
36
+ ];
37
+ }
38
+ /**
39
+ * The scale an overlay drawn inside the edgeless container has to wear so that
40
+ * it ends up painted at the viewport zoom. Counterpart of
41
+ * {@link toOverlayCoord}; same reasoning about `viewScale`.
42
+ */
43
+ export function overlayScale(viewport) {
44
+ return viewport.zoom / viewport.viewScale;
45
+ }
46
+ /**
47
+ * How wide and tall the visible viewport is *in the same units as*
48
+ * {@link toOverlayCoord}, so an overlay can tell whether it is about to run off
49
+ * the edge.
50
+ *
51
+ * `Viewport.width` / `Viewport.height` are the bounding client rect, i.e. real
52
+ * screen pixels. Comparing an overlay coordinate against them mixes two spaces
53
+ * and the flip or the clamp fires at the wrong moment under a scaled host.
54
+ */
55
+ export function overlayViewportSize(viewport) {
56
+ const { width, height, viewScale } = viewport;
57
+ return [width / viewScale, height / viewScale];
58
+ }
59
+ /**
60
+ * Where a model point lands in *client* coordinates — what
61
+ * `document.caretRangeFromPoint`, `elementFromPoint` and a `PointerEvent`'s
62
+ * `clientX`/`clientY` speak.
63
+ *
64
+ * `Viewport.toViewCoord` answers relative to the viewport element's own top
65
+ * left corner, so handing its result to a client-coordinate API drops the
66
+ * viewport's offset in the window: the caret lands elsewhere as soon as the
67
+ * editor is not flush against the window origin — a sidebar, a header, or the
68
+ * editor embedded in a panel. Inverse of `Viewport.toViewCoordFromClientCoord`.
69
+ */
70
+ export function toClientCoord(viewport, modelX, modelY) {
71
+ const [x, y] = viewport.toViewCoord(modelX, modelY);
72
+ return [x + viewport.left, y + viewport.top];
73
+ }
@@ -1,3 +1,24 @@
1
+ /**
2
+ * Styles injected into the print iframe.
3
+ *
4
+ * The printed document is always rendered on white paper, so the whole
5
+ * palette is pinned to a light one: a document read in the dark theme would
6
+ * otherwise print light text on a background the printer leaves white, and
7
+ * every one of those elements would come out invisible.
8
+ *
9
+ * Exported so the print-fidelity rules can be asserted in unit tests.
10
+ */
11
+ export declare const printToPdfStyles = "@media print {\n html, body {\n height: initial !important;\n overflow: initial !important;\n print-color-adjust: exact;\n -webkit-print-color-adjust: exact;\n color: #000 !important;\n background: #fff !important;\n color-scheme: light !important;\n }\n ::-webkit-scrollbar {\n display: none;\n }\n :root, body {\n --affine-text-primary: #000 !important;\n --affine-text-secondary: #111 !important;\n --affine-text-tertiary: #333 !important;\n --affine-background-primary: #fff !important;\n --affine-background-secondary: #fff !important;\n --affine-background-tertiary: #fff !important;\n --affine-background-code-block: #f5f5f5 !important;\n --affine-quote-color: #e3e3e3 !important;\n --affine-border-color: #e3e3e3 !important;\n }\n body, [data-theme='dark'] {\n color: #000 !important;\n background: #fff !important;\n }\n body * {\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n }\n :root {\n --affine-note-shadow-box: none !important;\n --affine-note-shadow-sticker: none !important;\n }\n }";
12
+ /**
13
+ * Waits until every image inside `container` — shadow roots included — has
14
+ * either decoded or given up.
15
+ *
16
+ * A print dialog opened while images are still in flight prints their empty
17
+ * frames, so this is awaited before handing the document to the printer. An
18
+ * image that fails to load resolves too: a broken picture must not hang the
19
+ * print for ever.
20
+ */
21
+ export declare function waitForImages(container: HTMLElement): Promise<void>;
1
22
  export declare function printToPdf(rootElement?: HTMLElement | null, options?: {
2
23
  /**
3
24
  * Callback that is called when ready to print.