@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,280 @@
1
+ import { cssVarV2, darkThemeV2, lightThemeV2 } from '@toeverything/theme/v2';
2
+ /**
3
+ * A colour is treated as a shade of grey below this chroma, and is then only
4
+ * ever mapped onto the grey highlight — never onto a hue.
5
+ */
6
+ const ACHROMATIC_CHROMA_THRESHOLD = 0.02;
7
+ /**
8
+ * Greys this dark or this light are the reader's own text and background
9
+ * colours: leaving them unmapped is what keeps a pasted document legible in
10
+ * both themes.
11
+ */
12
+ const DEFAULT_TEXT_LIGHTNESS_MIN = 0.4;
13
+ const DEFAULT_TEXT_LIGHTNESS_MAX = 0.9;
14
+ const MAX_COLOR_DISTANCE = 0.18;
15
+ const MAX_CHROMA_DISTANCE = 0.12;
16
+ const MAX_HUE_DISTANCE = 45;
17
+ const supportedTextColorNames = [
18
+ 'red',
19
+ 'orange',
20
+ 'yellow',
21
+ 'green',
22
+ 'teal',
23
+ 'blue',
24
+ 'purple',
25
+ 'grey',
26
+ ];
27
+ /**
28
+ * The basic CSS colour keywords. Anything outside this set parses as `null`,
29
+ * which means "leave the text alone" — the conservative outcome.
30
+ */
31
+ const NAMED_COLORS = {
32
+ aqua: '#00ffff',
33
+ black: '#000000',
34
+ blue: '#0000ff',
35
+ cyan: '#00ffff',
36
+ fuchsia: '#ff00ff',
37
+ gray: '#808080',
38
+ green: '#008000',
39
+ grey: '#808080',
40
+ lime: '#00ff00',
41
+ magenta: '#ff00ff',
42
+ maroon: '#800000',
43
+ navy: '#000080',
44
+ olive: '#808000',
45
+ orange: '#ffa500',
46
+ purple: '#800080',
47
+ red: '#ff0000',
48
+ silver: '#c0c0c0',
49
+ teal: '#008080',
50
+ transparent: '#00000000',
51
+ white: '#ffffff',
52
+ yellow: '#ffff00',
53
+ };
54
+ const clamp = (value, min, max) => Math.min(max, Math.max(min, value));
55
+ const parseHex = (value) => {
56
+ const hex = value.slice(1);
57
+ if (!/^[0-9a-f]+$/i.test(hex))
58
+ return null;
59
+ const expand = (part) => part.length === 1 ? Number.parseInt(part + part, 16) : Number.parseInt(part, 16);
60
+ const size = hex.length === 3 || hex.length === 4 ? 1 : 2;
61
+ if (hex.length !== size * 3 && hex.length !== size * 4)
62
+ return null;
63
+ return {
64
+ r: expand(hex.slice(0, size)),
65
+ g: expand(hex.slice(size, size * 2)),
66
+ b: expand(hex.slice(size * 2, size * 3)),
67
+ alpha: hex.length === size * 4 ? expand(hex.slice(size * 3, size * 4)) / 255 : 1,
68
+ };
69
+ };
70
+ /** A colour channel: `0-255`, or a percentage of 255. */
71
+ const parseChannel = (token) => {
72
+ const trimmed = token.trim();
73
+ if (!trimmed)
74
+ return null;
75
+ const isPercentage = trimmed.endsWith('%');
76
+ const value = Number.parseFloat(isPercentage ? trimmed.slice(0, -1) : trimmed);
77
+ if (Number.isNaN(value))
78
+ return null;
79
+ return clamp(Math.round(isPercentage ? (value / 100) * 255 : value), 0, 255);
80
+ };
81
+ /** An alpha value: `0-1`, or a percentage. */
82
+ const parseAlpha = (token) => {
83
+ if (token === null)
84
+ return 1;
85
+ const trimmed = token.trim();
86
+ if (!trimmed)
87
+ return null;
88
+ const isPercentage = trimmed.endsWith('%');
89
+ const value = Number.parseFloat(isPercentage ? trimmed.slice(0, -1) : trimmed);
90
+ if (Number.isNaN(value))
91
+ return null;
92
+ return clamp(isPercentage ? value / 100 : value, 0, 1);
93
+ };
94
+ /**
95
+ * Split the body of a colour function into its arguments and its alpha,
96
+ * accepting both the legacy comma syntax (`rgb(1, 2, 3, 0.5)`) and the modern
97
+ * space syntax (`rgb(1 2 3 / 50%)`).
98
+ */
99
+ const splitFunctionArgs = (body) => {
100
+ const [main, alphaPart] = body.split('/');
101
+ const args = main.split(/[\s,]+/).filter(Boolean);
102
+ let alpha = alphaPart?.trim() ? alphaPart.trim() : null;
103
+ if (alpha === null && args.length === 4) {
104
+ alpha = args.pop() ?? null;
105
+ }
106
+ return { args, alpha };
107
+ };
108
+ const parseHue = (token) => {
109
+ const trimmed = token.trim().toLowerCase();
110
+ const value = Number.parseFloat(trimmed);
111
+ if (Number.isNaN(value))
112
+ return null;
113
+ if (trimmed.endsWith('turn'))
114
+ return value * 360;
115
+ if (trimmed.endsWith('rad'))
116
+ return (value * 180) / Math.PI;
117
+ if (trimmed.endsWith('grad'))
118
+ return value * 0.9;
119
+ return value;
120
+ };
121
+ const hslToRgb = (h, s, l) => {
122
+ const hue = ((h % 360) + 360) % 360;
123
+ const c = (1 - Math.abs(2 * l - 1)) * s;
124
+ const x = c * (1 - Math.abs(((hue / 60) % 2) - 1));
125
+ const m = l - c / 2;
126
+ const [r, g, b] = [
127
+ [c, x, 0],
128
+ [x, c, 0],
129
+ [0, c, x],
130
+ [0, x, c],
131
+ [x, 0, c],
132
+ [c, 0, x],
133
+ ][Math.floor(hue / 60) % 6];
134
+ return {
135
+ r: Math.round((r + m) * 255),
136
+ g: Math.round((g + m) * 255),
137
+ b: Math.round((b + m) * 255),
138
+ };
139
+ };
140
+ /**
141
+ * Parse the subset of CSS colour syntax that turns up in pasted HTML: hex,
142
+ * `rgb()`/`rgba()`, `hsl()`/`hsla()` and the basic colour keywords. Anything
143
+ * else — `color-mix()`, a custom property, an unknown keyword — is `null`.
144
+ */
145
+ export const parseCssColor = (value) => {
146
+ const trimmed = value.trim().toLowerCase();
147
+ if (!trimmed)
148
+ return null;
149
+ const named = NAMED_COLORS[trimmed];
150
+ if (named)
151
+ return parseHex(named);
152
+ if (trimmed.startsWith('#'))
153
+ return parseHex(trimmed);
154
+ const fn = trimmed.match(/^(rgba?|hsla?)\(([^)]*)\)$/);
155
+ if (!fn)
156
+ return null;
157
+ const { args, alpha: rawAlpha } = splitFunctionArgs(fn[2]);
158
+ if (args.length !== 3)
159
+ return null;
160
+ const alpha = parseAlpha(rawAlpha);
161
+ if (alpha === null)
162
+ return null;
163
+ if (fn[1].startsWith('rgb')) {
164
+ const [r, g, b] = args.map(parseChannel);
165
+ if (r === null || g === null || b === null)
166
+ return null;
167
+ return { r, g, b, alpha };
168
+ }
169
+ const hue = parseHue(args[0]);
170
+ const saturation = parseAlpha(args[1]);
171
+ const lightness = parseAlpha(args[2]);
172
+ if (hue === null || saturation === null || lightness === null)
173
+ return null;
174
+ return { ...hslToRgb(hue, saturation, lightness), alpha };
175
+ };
176
+ const srgbToLinear = (channel) => {
177
+ const value = channel / 255;
178
+ return value <= 0.04045
179
+ ? value / 12.92
180
+ : Math.pow((value + 0.055) / 1.055, 2.4);
181
+ };
182
+ /**
183
+ * Oklab is perceptually uniform, so "near enough to count as the same colour"
184
+ * is a plain distance here, which it is not in sRGB.
185
+ */
186
+ const rgbToOklab = ({ r, g, b }) => {
187
+ const red = srgbToLinear(r);
188
+ const green = srgbToLinear(g);
189
+ const blue = srgbToLinear(b);
190
+ const l = Math.cbrt(0.4122214708 * red + 0.5363325363 * green + 0.0514459929 * blue);
191
+ const m = Math.cbrt(0.2119034982 * red + 0.6806995451 * green + 0.1073969566 * blue);
192
+ const s = Math.cbrt(0.0883024619 * red + 0.2817188376 * green + 0.6299787005 * blue);
193
+ const result = {
194
+ l: 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s,
195
+ a: 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s,
196
+ b: 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s,
197
+ };
198
+ return {
199
+ ...result,
200
+ chroma: Math.hypot(result.a, result.b),
201
+ hue: (Math.atan2(result.b, result.a) * 180) / Math.PI,
202
+ };
203
+ };
204
+ const supportedTextColors = supportedTextColorNames.map(name => ({
205
+ name,
206
+ cssVar: cssVarV2(`text/highlight/fg/${name}`),
207
+ // Both themes are candidates: a document is pasted in one theme and read in
208
+ // the other, so whichever reference is nearer decides the highlight.
209
+ references: [
210
+ lightThemeV2[`text/highlight/fg/${name}`],
211
+ darkThemeV2[`text/highlight/fg/${name}`],
212
+ ].flatMap(color => {
213
+ const parsed = parseCssColor(color);
214
+ return parsed ? [rgbToOklab(parsed)] : [];
215
+ }),
216
+ }));
217
+ const colorDistance = (a, b) => Math.hypot(a.l - b.l, a.a - b.a, a.b - b.b);
218
+ const hueDistance = (a, b) => {
219
+ const distance = Math.abs(a - b) % 360;
220
+ return Math.min(distance, 360 - distance);
221
+ };
222
+ /**
223
+ * Map a CSS colour onto the nearest supported text highlight, or `null` when
224
+ * nothing is near enough. `null` is the good outcome for the reader: text with
225
+ * no colour follows the theme, whereas a wrong colour can leave it unreadable
226
+ * in one of the two themes.
227
+ */
228
+ export const resolveNearestSupportedColor = (color) => {
229
+ const parsed = parseCssColor(color);
230
+ // A translucent colour was picked to sit on the source background, not ours.
231
+ if (!parsed || parsed.alpha < 1) {
232
+ return null;
233
+ }
234
+ const target = rgbToOklab(parsed);
235
+ const achromatic = target.chroma < ACHROMATIC_CHROMA_THRESHOLD;
236
+ if (achromatic &&
237
+ (target.l < DEFAULT_TEXT_LIGHTNESS_MIN || target.l > DEFAULT_TEXT_LIGHTNESS_MAX)) {
238
+ return null;
239
+ }
240
+ let nearest;
241
+ for (const supported of supportedTextColors) {
242
+ // A grey never becomes a hue, and a hue never becomes the grey.
243
+ if (achromatic !== (supported.name === 'grey')) {
244
+ continue;
245
+ }
246
+ for (const reference of supported.references) {
247
+ const distance = colorDistance(target, reference);
248
+ if (distance > MAX_COLOR_DISTANCE ||
249
+ (!achromatic &&
250
+ (Math.abs(target.chroma - reference.chroma) > MAX_CHROMA_DISTANCE ||
251
+ hueDistance(target.hue, reference.hue) > MAX_HUE_DISTANCE))) {
252
+ continue;
253
+ }
254
+ if (!nearest || distance < nearest.distance) {
255
+ nearest = { cssVar: supported.cssVar, distance };
256
+ }
257
+ }
258
+ }
259
+ return nearest?.cssVar ?? null;
260
+ };
261
+ /**
262
+ * Read the `color` declaration out of an inline `style` attribute, leaving
263
+ * `background-color` and friends alone.
264
+ */
265
+ export const extractColorFromStyle = (style) => {
266
+ if (typeof style !== 'string') {
267
+ return null;
268
+ }
269
+ for (const declaration of style.split(';')) {
270
+ const colon = declaration.indexOf(':');
271
+ if (colon === -1)
272
+ continue;
273
+ // Split on the first colon only: `rgb(0 0 0 / 50%)` has none, but a
274
+ // `url()` or a future colour syntax may.
275
+ if (declaration.slice(0, colon).trim().toLowerCase() === 'color') {
276
+ return declaration.slice(colon + 1).trim();
277
+ }
278
+ }
279
+ return null;
280
+ };
@@ -1,3 +1,4 @@
1
+ export * from './color.js';
1
2
  export * from './fetch.js';
2
3
  export * from './file-path.js';
3
4
  export * from './hast.js';
@@ -1,3 +1,4 @@
1
+ export * from './color.js';
1
2
  export * from './fetch.js';
2
3
  export * from './file-path.js';
3
4
  export * from './hast.js';
@@ -86,9 +86,17 @@ export const getSelectedBlocksCommand = (ctx, next) => {
86
86
  if (ctx.filter) {
87
87
  dirtyResult = dirtyResult.filter(ctx.filter);
88
88
  }
89
- // remove duplicate elements
89
+ // Remove duplicate elements. A `Set` and not `indexOf`: selecting a whole
90
+ // document hands this command every block at once, and a scan per block is
91
+ // quadratic in the size of the document.
92
+ const seen = new Set();
90
93
  const result = dirtyResult
91
- .filter((el, index) => dirtyResult.indexOf(el) === index)
94
+ .filter(el => {
95
+ if (seen.has(el))
96
+ return false;
97
+ seen.add(el);
98
+ return true;
99
+ })
92
100
  // sort by document position
93
101
  .sort((a, b) => {
94
102
  if (a === b) {
@@ -0,0 +1,300 @@
1
+ import type { BlockStdScope } from '../../std/index.js';
2
+ import type { ExtensionType } from '../../store/index.js';
3
+ /**
4
+ * One audit criterion, as DATA owned by its framework and versioned like a
5
+ * validation rule.
6
+ *
7
+ * The criterion carries its own PROSE, in {@link prompt} — and that is a
8
+ * deliberate exception to the library's "no sentences" rule, not an oversight.
9
+ * A rule's message is addressed to a USER and therefore belongs to a host
10
+ * catalogue (hence `messageKey` + `messageFallback`); a criterion's prompt is
11
+ * addressed to an ASSISTANT, is not displayed anywhere, and is exactly the kind
12
+ * of thing that must be reviewable, diffable and versioned in the repository
13
+ * rather than retyped in an app. The user-facing half still goes through
14
+ * {@link labelKey} + {@link fallback}, unchanged.
15
+ */
16
+ export interface AuditCriterion {
17
+ /** Stable id, namespaced by framework: `wardley.A1`. */
18
+ id: string;
19
+ /** Owning framework, e.g. `wardley`. A criterion never crosses frameworks. */
20
+ framework: string;
21
+ /** i18n key of the human name; resolved by the host. */
22
+ labelKey: string;
23
+ /** The framework's own wording when the host ships no catalogue for the key. */
24
+ fallback: string;
25
+ /**
26
+ * The criterion itself, in words, for the assistant. Never rendered.
27
+ *
28
+ * Written as an instruction to a reviewer, not as a message to a user: it
29
+ * states what to look for and what would make the map fail it.
30
+ */
31
+ prompt: string;
32
+ /** Bumped when the criterion's meaning changes, so a host can pin behaviour. */
33
+ version: number;
34
+ }
35
+ /** A role, as the assistant sees it. Vocabulary only, no geometry. */
36
+ export interface AuditRoleFact {
37
+ id: string;
38
+ /**
39
+ * Mirrors `RoleKind` structurally rather than importing it: this package sits
40
+ * below `@labre/std/gfx` in the seam, and the DTO must stay a plain shape a
41
+ * host can implement. Kept in sync by the collector, which fails to compile
42
+ * if `RoleKind` gains a member this union does not have — which is exactly
43
+ * how `'text'` arrived here (MF3).
44
+ */
45
+ kind: 'node' | 'edge' | 'text';
46
+ /** Data hierarchy: `wardley:market` specialises `wardley:component`. */
47
+ parent?: string;
48
+ /** Optional, mirroring `RoleDef.labelKey`: a role may ship without one. */
49
+ labelKey?: string;
50
+ }
51
+ /** An axis of a framework frame. Same facts the rule families read. */
52
+ export interface AuditAxisFact {
53
+ id: string;
54
+ orientation: 'horizontal' | 'vertical';
55
+ /** Unit vector of increasing value, model space (`y` grows downwards). */
56
+ forward: readonly [number, number];
57
+ }
58
+ /**
59
+ * A named zone of a framework frame, as PLOT RATIOS.
60
+ *
61
+ * Ratios, never model coordinates: a zone is a statement about the frame, and
62
+ * expressing it in model units would make it a statement about how big the user
63
+ * happened to draw the map. `{ x: 0.4, w: 0.3 }` is "Product" on every Wardley
64
+ * map ever drawn.
65
+ */
66
+ export interface AuditZoneFact {
67
+ id: string;
68
+ rect: {
69
+ x: number;
70
+ y: number;
71
+ w: number;
72
+ h: number;
73
+ };
74
+ }
75
+ /** One framework frame on the board — a Wardley map, a Cynefin grid. */
76
+ export interface AuditFrameFact {
77
+ elementId: string;
78
+ framework: string;
79
+ /** Background declaration type, e.g. `'wardley'`. */
80
+ type: string;
81
+ /** The level of requirement in force, when the frame names one. */
82
+ profileId?: string;
83
+ axes: readonly AuditAxisFact[];
84
+ zones: readonly AuditZoneFact[];
85
+ }
86
+ /** One element measured against a frame. */
87
+ export interface AuditElementFact {
88
+ id: string;
89
+ /** Role id, e.g. `wardley:component`. Neutral elements are never collected. */
90
+ role: string;
91
+ /** The frame it was attributed to, when it sits on one. */
92
+ frameId?: string;
93
+ /**
94
+ * Where it sits INSIDE that frame's plot, as ratios — `[0.62, 0.31]` reads as
95
+ * "in Product, fairly high up the value chain" on any Wardley map, at any
96
+ * size. Absent when the element is on no frame.
97
+ */
98
+ at?: readonly [number, number];
99
+ /** The zone its centre falls in, when the frame declares zones. */
100
+ zone?: string;
101
+ }
102
+ /**
103
+ * A level 1 / level 2 finding, handed to the assistant as a FACT about the map.
104
+ *
105
+ * The deterministic engine's output is an input to the audit and never the
106
+ * other way round. Structurally a subset of the engine's `Violation`, so the
107
+ * collector copies rather than converts — and so this package needs no
108
+ * dependency on `@labre/affine-block-surface`, which depends on it.
109
+ */
110
+ export interface AuditViolationFact {
111
+ ruleId: string;
112
+ /** Never `'audit'`: an audit finding is not a fact about the map. */
113
+ severity: 'blocking-overridable' | 'warning';
114
+ elementIds: string[];
115
+ messageKey: string;
116
+ backgroundId?: string;
117
+ /** Set when a user already arbitrated this finding away (PF8). */
118
+ exemption?: 'element' | 'map';
119
+ }
120
+ /**
121
+ * Everything the assistant is told about the board. **Render-free** (ADR 0006
122
+ * § 5): no `TemplateResult`, no element model, no function, no DOM — a plain
123
+ * object that survives `structuredClone` and a `postMessage`.
124
+ */
125
+ export interface AuditFacts {
126
+ /** The role vocabulary in play, so an id is never an opaque string. */
127
+ roles: readonly AuditRoleFact[];
128
+ frames: readonly AuditFrameFact[];
129
+ elements: readonly AuditElementFact[];
130
+ /** Levels 1 and 2, as computed by the deterministic engine. */
131
+ violations: readonly AuditViolationFact[];
132
+ }
133
+ /** What the assistant is asked to do. */
134
+ export interface AuditRequest {
135
+ criteria: readonly AuditCriterion[];
136
+ facts: AuditFacts;
137
+ }
138
+ /** How far along a run is. Reported, never awaited. */
139
+ export interface AuditProgress {
140
+ /** Criteria settled so far. */
141
+ done: number;
142
+ /** Criteria in the request — `request.criteria.length`. */
143
+ total: number;
144
+ /** The criterion currently being evaluated, when the provider says. */
145
+ criterionId?: string;
146
+ }
147
+ /**
148
+ * One audit result, in the shape of a violation object at `audit` severity.
149
+ *
150
+ * Structurally assignable to the engine's `Violation` (a test pins that), which
151
+ * is what lets a host panel render an audit finding with the very same code it
152
+ * renders a rule finding with — while `userFacingViolations` keeps it off the
153
+ * canvas, because that is what `audit` severity means.
154
+ */
155
+ export interface AuditFinding {
156
+ /**
157
+ * Namespaced as `audit:<criterionId>` so it can never collide with a
158
+ * registered rule id, and so `ValidationManager.ruleOf` returns nothing for it
159
+ * — an audit finding is not arbitrable with a user exception. It is an
160
+ * opinion, and an opinion is not a rule to be waived.
161
+ */
162
+ ruleId: string;
163
+ /**
164
+ * The elements the finding is about — **not validated against the surface**.
165
+ *
166
+ * The library checks that these are strings and nothing more. An id naming an
167
+ * element that no longer exists, or one from another document, is published
168
+ * as-is: validating would cost a lookup per id, and a missing id is not
169
+ * *wrong* so much as *stale* — the board moves on while an audit is in
170
+ * flight, which is the normal case for a call that takes seconds.
171
+ *
172
+ * **A host panel must therefore tolerate absent ids**: resolve them
173
+ * defensively and render what it can, rather than assuming every id is a live
174
+ * element. This is the one place the "render it with the code you already
175
+ * have" claim needs a caveat.
176
+ */
177
+ elementIds: string[];
178
+ /** Always `'audit'`. Forced by {@link normalizeFinding}, never trusted. */
179
+ severity: 'audit';
180
+ messageKey: string;
181
+ messageFallback?: string;
182
+ suggestion?: string;
183
+ suggestionFallback?: string;
184
+ backgroundId?: string;
185
+ /** The criterion this came from. */
186
+ criterionId: string;
187
+ /** The criterion's `version` at the time of the run. */
188
+ criterionVersion: number;
189
+ /** When the run that produced it finished, `Date.now()`. */
190
+ at: number;
191
+ }
192
+ /**
193
+ * How a run ended.
194
+ *
195
+ * - `complete` — the provider settled every criterion.
196
+ * - `aborted` — the caller's `AbortSignal` fired. Findings produced before the
197
+ * abort are KEPT: an audit interrupted halfway has still said something true.
198
+ * - `error` — the provider threw or rejected. A host's broken build must not
199
+ * become a crash on a keystroke.
200
+ * - `unavailable` — nothing could answer. Either no provider is registered in
201
+ * this assembly (the standalone playground, where the whole of levels 1 and 2
202
+ * still works), or a registered one **declared itself unavailable** — an
203
+ * assistant behind an app-side feature flag, an exhausted quota, no model
204
+ * configured. The second case is passed through rather than folded into
205
+ * `complete`: `unavailable` is the count of users reaching for an audit this
206
+ * build cannot deliver, and it is worthless if a provider can opt out of it
207
+ * by answering politely.
208
+ * - `superseded` — a NEWER run for the same editor started while this one was
209
+ * in flight. Its `findings` are **always empty**: the answer described a
210
+ * board the user has already moved past, so it is dropped from the return
211
+ * value as well as from the signal, and a host that awaits without checking
212
+ * the status cannot render it. Never returned by {@link requestAudit}:
213
+ * superseding is the library's arbitration between two of its own calls, not
214
+ * something a provider can declare (one that returns it is read as
215
+ * `complete`).
216
+ */
217
+ export type AuditStatus = 'complete' | 'aborted' | 'error' | 'unavailable' | 'superseded';
218
+ export interface AuditResult {
219
+ status: AuditStatus;
220
+ findings: readonly AuditFinding[];
221
+ /** Free-form diagnostic for `error`. Never rendered. */
222
+ reason?: string;
223
+ }
224
+ export interface AuditRunOptions {
225
+ onProgress?: (progress: AuditProgress) => void;
226
+ signal?: AbortSignal;
227
+ }
228
+ export interface AuditService {
229
+ /**
230
+ * Run the audit. The ONE method of this seam.
231
+ *
232
+ * Contract for hosts:
233
+ * - MUST honour `signal`: stop work and either resolve with what it has or
234
+ * reject with an `AbortError`. Both are accepted — {@link requestAudit}
235
+ * normalises them into `status: 'aborted'`.
236
+ * - MUST NOT mutate anything it is handed. `request` is the library's data.
237
+ * - SHOULD call `onProgress` as criteria settle. Purely advisory: a provider
238
+ * that never calls it is correct, just silent.
239
+ * - MAY reject. The library guards it anyway — see {@link requestAudit}.
240
+ */
241
+ runAudit(request: AuditRequest, options: AuditRunOptions): Promise<AuditResult>;
242
+ }
243
+ export declare const AuditProvider: import("../../global/di/types.js").ServiceIdentifier<AuditService> & (<U extends AuditService = AuditService>(variant: import("../../global/di/types.js").ServiceVariant) => import("../../global/di/types.js").ServiceIdentifier<U>);
244
+ /**
245
+ * The ONLY way in. **No noop default is registered**, exactly as for
246
+ * `PivotPropertiesProvider`: absence is a *meaningful* state (standalone
247
+ * playground, unit tests, a labreapp build that has not wired its assistant),
248
+ * and making it the tested default is what keeps the degraded path honest.
249
+ */
250
+ export declare function AuditExtension(service: AuditService): ExtensionType;
251
+ /** Multi-instance: one registered {@link AuditCriterion} per impl. */
252
+ export declare const AuditCriterionIdentifier: import("../../global/di/types.js").ServiceIdentifier<AuditCriterion> & (<U extends AuditCriterion = AuditCriterion>(variant: import("../../global/di/types.js").ServiceVariant) => import("../../global/di/types.js").ServiceIdentifier<U>);
253
+ /**
254
+ * Register a framework's audit criteria. Call it from the FLAG-GATED view
255
+ * extension, beside `ValidationRuleExtension`: criteria are tooling, so a
256
+ * disabled framework contributes none and an audit of its maps has nothing to
257
+ * ask about.
258
+ *
259
+ * ```ts
260
+ * context.register(AuditCriterionExtension(WARDLEY_AUDIT_CRITERIA));
261
+ * ```
262
+ */
263
+ export declare function AuditCriterionExtension(criteria: readonly AuditCriterion[]): ExtensionType;
264
+ /** Every criterion registered in this editor assembly. */
265
+ export declare function getAuditCriteria(std: BlockStdScope): AuditCriterion[];
266
+ /**
267
+ * The guarded call every in-library consumer uses — the one place the provider
268
+ * contract is enforced rather than trusted.
269
+ *
270
+ * - **No provider registered** → `{ status: 'unavailable', findings: [] }`. A
271
+ * clean refusal, not a throw and not a crash: levels 1 and 2 are untouched
272
+ * and the caller reports nothing.
273
+ * - **The provider throws or rejects** → `{ status: 'error' }`, with the reason
274
+ * kept for logs and never rendered.
275
+ * - **The caller aborted** → `{ status: 'aborted' }`, keeping whatever findings
276
+ * the provider had already returned.
277
+ * - **`onProgress` throws** → swallowed. A broken progress bar must not kill
278
+ * the run that feeds it.
279
+ *
280
+ * ## The request is ISOLATED before it crosses (the outbound half)
281
+ *
282
+ * `normalizeFinding` exists because a provider is not believed on the way back.
283
+ * This is the same statement on the way out, and it was missing: the facts a
284
+ * collector assembles are not all fresh objects. `backgroundAxisFacts` returns
285
+ * `forward` straight from a module constant (`FORWARD` in
286
+ * `framework-background/facts.ts`) — `as const` is compile-time only and
287
+ * nothing is frozen — so every `frames[].axes[].forward` handed over WAS the
288
+ * very array the engine multiplies against in `evaluateOrientationAgainstAxis`.
289
+ * A provider writing into the facts it is given (normalising a vector in place,
290
+ * say) flipped the axis convention for the whole process, and correct arrows
291
+ * started reporting as violations on the canvas. That is precisely what this
292
+ * file's header declares impossible.
293
+ *
294
+ * `structuredClone` at the boundary fixes the whole class rather than that one
295
+ * field: no future fact can leak identity either, and the cost is a constraint
296
+ * the seam already claims (ADR 0006 § 5 — the request must be serializable, and
297
+ * a test round-trips it). Value-comparing tests were structurally blind to it;
298
+ * an identity assertion (`.toBe`) now guards it.
299
+ */
300
+ export declare function requestAudit(std: BlockStdScope, request: AuditRequest, options?: AuditRunOptions): Promise<AuditResult>;