@formicoidea/labre-core 0.41.0 → 0.42.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 (252) hide show
  1. package/LICENSE +384 -0
  2. package/dist/_pkgs/affine-block-bookmark/bookmark-block.js +2 -2
  3. package/dist/_pkgs/affine-block-edgeless-text/edgeless-toolbar/config.js +7 -1
  4. package/dist/_pkgs/affine-block-embed/embed-figma-block/embed-figma-block.js +2 -1
  5. package/dist/_pkgs/affine-block-embed/embed-github-block/embed-github-block.js +2 -1
  6. package/dist/_pkgs/affine-block-embed/embed-iframe-block/consts.d.ts +2 -0
  7. package/dist/_pkgs/affine-block-embed/embed-iframe-block/consts.js +5 -0
  8. package/dist/_pkgs/affine-block-embed/embed-iframe-block/embed-iframe-block.d.ts +1 -0
  9. package/dist/_pkgs/affine-block-embed/embed-iframe-block/embed-iframe-block.js +30 -8
  10. package/dist/_pkgs/affine-block-embed/embed-iframe-block/utils.d.ts +8 -0
  11. package/dist/_pkgs/affine-block-embed/embed-iframe-block/utils.js +19 -0
  12. package/dist/_pkgs/affine-block-embed/embed-loom-block/embed-loom-block.js +2 -1
  13. package/dist/_pkgs/affine-block-embed/embed-youtube-block/embed-youtube-block.js +2 -1
  14. package/dist/_pkgs/affine-block-frame/frame-manager.js +1 -1
  15. package/dist/_pkgs/affine-block-frame/frame-tool.js +1 -1
  16. package/dist/_pkgs/affine-block-frame/frame-toolbar.js +6 -1
  17. package/dist/_pkgs/affine-block-list/list-keymap.js +7 -0
  18. package/dist/_pkgs/affine-block-note/note-keymap.js +7 -1
  19. package/dist/_pkgs/affine-block-paragraph/paragraph-keymap.js +7 -1
  20. package/dist/_pkgs/affine-block-root/commands/pivot-commands.js +1 -8
  21. package/dist/_pkgs/affine-block-root/commands/tag-commands.js +1 -8
  22. package/dist/_pkgs/affine-block-root/edgeless/edgeless-keyboard.d.ts +9 -0
  23. package/dist/_pkgs/affine-block-root/edgeless/edgeless-keyboard.js +51 -0
  24. package/dist/_pkgs/affine-block-root/edgeless/edgeless-root-block.d.ts +22 -0
  25. package/dist/_pkgs/affine-block-root/edgeless/edgeless-root-block.js +46 -0
  26. package/dist/_pkgs/affine-block-root/edgeless/utils/pinch-zoom.d.ts +21 -0
  27. package/dist/_pkgs/affine-block-root/edgeless/utils/pinch-zoom.js +24 -0
  28. package/dist/_pkgs/affine-block-root/edgeless/utils/query.js +8 -0
  29. package/dist/_pkgs/affine-block-root/keyboard/keymap.js +1 -16
  30. package/dist/_pkgs/affine-block-surface/element-model/index.d.ts +21 -3
  31. package/dist/_pkgs/affine-block-surface/element-model/index.js +14 -2
  32. package/dist/_pkgs/affine-block-surface/extensions/export-svg/command.d.ts +23 -0
  33. package/dist/_pkgs/affine-block-surface/extensions/export-svg/command.js +89 -0
  34. package/dist/_pkgs/affine-block-surface/extensions/export-svg/index.d.ts +7 -0
  35. package/dist/_pkgs/affine-block-surface/extensions/export-svg/index.js +5 -0
  36. package/dist/_pkgs/affine-block-surface/extensions/export-svg/render.d.ts +41 -0
  37. package/dist/_pkgs/affine-block-surface/extensions/export-svg/render.js +70 -0
  38. package/dist/_pkgs/affine-block-surface/extensions/export-svg/svg-context.d.ts +49 -0
  39. package/dist/_pkgs/affine-block-surface/extensions/export-svg/svg-context.js +257 -0
  40. package/dist/_pkgs/affine-block-surface/extensions/export-svg/tagged-path.d.ts +16 -0
  41. package/dist/_pkgs/affine-block-surface/extensions/export-svg/tagged-path.js +24 -0
  42. package/dist/_pkgs/affine-block-surface/extensions/export-svg/toolbar.d.ts +24 -0
  43. package/dist/_pkgs/affine-block-surface/extensions/export-svg/toolbar.js +66 -0
  44. package/dist/_pkgs/affine-block-surface/extensions/index.d.ts +4 -0
  45. package/dist/_pkgs/affine-block-surface/extensions/index.js +4 -0
  46. package/dist/_pkgs/affine-block-surface/extensions/interchange-import.d.ts +66 -4
  47. package/dist/_pkgs/affine-block-surface/extensions/interchange-import.js +241 -11
  48. package/dist/_pkgs/affine-block-surface/extensions/interchange.d.ts +18 -0
  49. package/dist/_pkgs/affine-block-surface/extensions/legend-toolbar.d.ts +81 -0
  50. package/dist/_pkgs/affine-block-surface/extensions/legend-toolbar.js +81 -0
  51. package/dist/_pkgs/affine-block-surface/extensions/legend.d.ts +136 -0
  52. package/dist/_pkgs/affine-block-surface/extensions/legend.js +439 -0
  53. package/dist/_pkgs/affine-block-surface/extensions/reading-widget.d.ts +17 -3
  54. package/dist/_pkgs/affine-block-surface/extensions/reading-widget.js +35 -13
  55. package/dist/_pkgs/affine-block-surface/extensions/reading.d.ts +61 -1
  56. package/dist/_pkgs/affine-block-surface/extensions/reading.js +85 -39
  57. package/dist/_pkgs/affine-block-surface/extensions/record-action.d.ts +66 -0
  58. package/dist/_pkgs/affine-block-surface/extensions/record-action.js +145 -0
  59. package/dist/_pkgs/affine-block-surface/extensions/validation.d.ts +253 -28
  60. package/dist/_pkgs/affine-block-surface/extensions/validation.js +489 -41
  61. package/dist/_pkgs/affine-block-surface/framework-background/background-view.d.ts +115 -0
  62. package/dist/_pkgs/affine-block-surface/framework-background/background-view.js +185 -0
  63. package/dist/_pkgs/affine-block-surface/framework-background/index.d.ts +1 -0
  64. package/dist/_pkgs/affine-block-surface/framework-background/index.js +1 -0
  65. package/dist/_pkgs/affine-block-surface/framework-background/labels.d.ts +16 -1
  66. package/dist/_pkgs/affine-block-surface/framework-background/labels.js +31 -21
  67. package/dist/_pkgs/affine-block-surface/framework-background/renderer.js +29 -5
  68. package/dist/_pkgs/affine-block-surface/framework-background/stacking.d.ts +6 -4
  69. package/dist/_pkgs/affine-block-surface/framework-background/stacking.js +56 -8
  70. package/dist/_pkgs/affine-block-surface/renderer/canvas-renderer.d.ts +12 -0
  71. package/dist/_pkgs/affine-block-surface/renderer/canvas-renderer.js +15 -0
  72. package/dist/_pkgs/affine-block-surface/view.js +8 -1
  73. package/dist/_pkgs/affine-block-surface-ref/configs/slash-menu.js +1 -1
  74. package/dist/_pkgs/affine-components/color-picker/button.d.ts +56 -1
  75. package/dist/_pkgs/affine-components/color-picker/button.js +168 -23
  76. package/dist/_pkgs/affine-components/color-picker/framework-palette.d.ts +106 -0
  77. package/dist/_pkgs/affine-components/color-picker/framework-palette.js +177 -0
  78. package/dist/_pkgs/affine-components/color-picker/index.d.ts +2 -0
  79. package/dist/_pkgs/affine-components/color-picker/index.js +2 -0
  80. package/dist/_pkgs/affine-components/color-picker/palette-carousel.d.ts +85 -0
  81. package/dist/_pkgs/affine-components/color-picker/palette-carousel.js +440 -0
  82. package/dist/_pkgs/affine-components/edgeless-shape-color-picker/color-picker.d.ts +31 -1
  83. package/dist/_pkgs/affine-components/edgeless-shape-color-picker/color-picker.js +189 -63
  84. package/dist/_pkgs/affine-components/resource/resource.js +29 -16
  85. package/dist/_pkgs/affine-components/translations.d.ts +8 -0
  86. package/dist/_pkgs/affine-components/translations.js +17 -0
  87. package/dist/_pkgs/affine-foundation/view.js +2 -1
  88. package/dist/_pkgs/affine-gfx-brush/element-renderer.js +2 -2
  89. package/dist/_pkgs/affine-gfx-brush/toolbar/configs/brush.js +6 -1
  90. package/dist/_pkgs/affine-gfx-brush/toolbar/configs/highlighter.js +6 -1
  91. package/dist/_pkgs/affine-gfx-connector/connector-manager.d.ts +9 -1
  92. package/dist/_pkgs/affine-gfx-connector/connector-manager.js +61 -0
  93. package/dist/_pkgs/affine-gfx-connector/element-renderer/connector-dom/index.d.ts +7 -1
  94. package/dist/_pkgs/affine-gfx-connector/element-renderer/connector-dom/index.js +87 -17
  95. package/dist/_pkgs/affine-gfx-connector/element-renderer/index.js +78 -17
  96. package/dist/_pkgs/affine-gfx-connector/element-renderer/utils.d.ts +24 -2
  97. package/dist/_pkgs/affine-gfx-connector/element-renderer/utils.js +31 -8
  98. package/dist/_pkgs/affine-gfx-connector/text/edgeless-connector-label-editor.d.ts +124 -3
  99. package/dist/_pkgs/affine-gfx-connector/text/edgeless-connector-label-editor.js +216 -54
  100. package/dist/_pkgs/affine-gfx-connector/text/text.d.ts +13 -4
  101. package/dist/_pkgs/affine-gfx-connector/text/text.js +13 -44
  102. package/dist/_pkgs/affine-gfx-connector/toolbar/config.d.ts +56 -0
  103. package/dist/_pkgs/affine-gfx-connector/toolbar/config.js +72 -4
  104. package/dist/_pkgs/affine-gfx-connector/toolbar/hollow-endpoint-icons.d.ts +8 -0
  105. package/dist/_pkgs/affine-gfx-connector/toolbar/hollow-endpoint-icons.js +118 -0
  106. package/dist/_pkgs/affine-gfx-connector/view/view.d.ts +37 -1
  107. package/dist/_pkgs/affine-gfx-connector/view/view.js +97 -8
  108. package/dist/_pkgs/affine-gfx-group/command/group-api.js +1 -1
  109. package/dist/_pkgs/affine-gfx-group/store.js +0 -2
  110. package/dist/_pkgs/affine-gfx-group/translations.d.ts +9 -10
  111. package/dist/_pkgs/affine-gfx-group/translations.js +9 -13
  112. package/dist/_pkgs/affine-gfx-mindmap/templates/index.js +1 -1
  113. package/dist/_pkgs/affine-gfx-mindmap/toolbar/basket-elements.js +1 -1
  114. package/dist/_pkgs/affine-gfx-mindmap/toolbar/utils/import-mindmap.js +2 -2
  115. package/dist/_pkgs/affine-gfx-mindmap/translations.d.ts +1 -1
  116. package/dist/_pkgs/affine-gfx-mindmap/translations.js +1 -1
  117. package/dist/_pkgs/affine-gfx-shape/element-renderer/highlighter.js +2 -2
  118. package/dist/_pkgs/affine-gfx-shape/overlay/polygon-drawing-overlay.d.ts +6 -0
  119. package/dist/_pkgs/affine-gfx-shape/overlay/polygon-drawing-overlay.js +30 -1
  120. package/dist/_pkgs/affine-gfx-shape/polygon-tool.d.ts +20 -1
  121. package/dist/_pkgs/affine-gfx-shape/polygon-tool.js +9 -1
  122. package/dist/_pkgs/affine-gfx-shape/toolbar/config.js +6 -1
  123. package/dist/_pkgs/affine-gfx-shape/toolbar/palette-color-action.js +11 -1
  124. package/dist/_pkgs/affine-gfx-template/builtin/other.js +1 -1
  125. package/dist/_pkgs/affine-gfx-template/snapshot-from-action.js +32 -119
  126. package/dist/_pkgs/affine-gfx-template/toolbar/template-type.d.ts +1 -1
  127. package/dist/_pkgs/affine-gfx-text/dblclick-add-edgeless-text.d.ts +13 -1
  128. package/dist/_pkgs/affine-gfx-text/dblclick-add-edgeless-text.js +19 -4
  129. package/dist/_pkgs/affine-gfx-text/edgeless-text-editor.d.ts +41 -0
  130. package/dist/_pkgs/affine-gfx-text/edgeless-text-editor.js +57 -2
  131. package/dist/_pkgs/affine-gfx-text/toolbar/actions.d.ts +8 -1
  132. package/dist/_pkgs/affine-gfx-text/toolbar/actions.js +12 -2
  133. package/dist/_pkgs/affine-gfx-text/translations.d.ts +1 -0
  134. package/dist/_pkgs/affine-gfx-text/translations.js +2 -1
  135. package/dist/_pkgs/affine-inline-preset/markdown.js +5 -1
  136. package/dist/_pkgs/affine-model/consts/connector.d.ts +28 -2
  137. package/dist/_pkgs/affine-model/consts/connector.js +26 -0
  138. package/dist/_pkgs/affine-model/elements/bpmn/pool.js +1 -1
  139. package/dist/_pkgs/affine-model/elements/brush/brush.js +1 -1
  140. package/dist/_pkgs/affine-model/elements/c4/board.js +1 -1
  141. package/dist/_pkgs/affine-model/elements/c4/boundary.js +1 -1
  142. package/dist/_pkgs/affine-model/elements/connector/connector.d.ts +135 -0
  143. package/dist/_pkgs/affine-model/elements/connector/connector.js +246 -5
  144. package/dist/_pkgs/affine-model/elements/connector/end-label.d.ts +83 -0
  145. package/dist/_pkgs/affine-model/elements/connector/end-label.js +119 -0
  146. package/dist/_pkgs/affine-model/elements/connector/index.d.ts +1 -0
  147. package/dist/_pkgs/affine-model/elements/connector/index.js +1 -0
  148. package/dist/_pkgs/affine-model/elements/context-map/context-map.js +1 -1
  149. package/dist/_pkgs/affine-model/elements/core-domain/core-domain.d.ts +28 -0
  150. package/dist/_pkgs/affine-model/elements/core-domain/core-domain.js +129 -2
  151. package/dist/_pkgs/affine-model/elements/cynefin/cynefin.d.ts +8 -0
  152. package/dist/_pkgs/affine-model/elements/cynefin/cynefin.js +45 -2
  153. package/dist/_pkgs/affine-model/elements/edgy/board.js +1 -1
  154. package/dist/_pkgs/affine-model/elements/edgy/facets.js +1 -1
  155. package/dist/_pkgs/affine-model/elements/estuarine/estuarine.d.ts +6 -0
  156. package/dist/_pkgs/affine-model/elements/estuarine/estuarine.js +36 -2
  157. package/dist/_pkgs/affine-model/elements/event-storming/event-storming.d.ts +18 -7
  158. package/dist/_pkgs/affine-model/elements/event-storming/event-storming.js +23 -8
  159. package/dist/_pkgs/affine-model/elements/framework-background/background.d.ts +16 -0
  160. package/dist/_pkgs/affine-model/elements/framework-background/background.js +18 -0
  161. package/dist/_pkgs/affine-model/elements/highlighter/highlighter.js +1 -1
  162. package/dist/_pkgs/affine-model/elements/index.d.ts +8 -0
  163. package/dist/_pkgs/affine-model/elements/index.js +1 -0
  164. package/dist/_pkgs/affine-model/elements/shape/shape.js +1 -1
  165. package/dist/_pkgs/affine-model/elements/text/text.js +1 -1
  166. package/dist/_pkgs/affine-model/elements/uml/band.d.ts +39 -0
  167. package/dist/_pkgs/affine-model/elements/uml/band.js +31 -0
  168. package/dist/_pkgs/affine-model/elements/uml/diagram.d.ts +158 -0
  169. package/dist/_pkgs/affine-model/elements/uml/diagram.js +229 -0
  170. package/dist/_pkgs/affine-model/elements/uml/fragment.d.ts +161 -0
  171. package/dist/_pkgs/affine-model/elements/uml/fragment.js +205 -0
  172. package/dist/_pkgs/affine-model/elements/uml/index.d.ts +8 -0
  173. package/dist/_pkgs/affine-model/elements/uml/index.js +8 -0
  174. package/dist/_pkgs/affine-model/elements/uml/lifeline.d.ts +77 -0
  175. package/dist/_pkgs/affine-model/elements/uml/lifeline.js +89 -0
  176. package/dist/_pkgs/affine-model/elements/uml/node.d.ts +142 -0
  177. package/dist/_pkgs/affine-model/elements/uml/node.js +190 -0
  178. package/dist/_pkgs/affine-model/elements/uml/partition.d.ts +106 -0
  179. package/dist/_pkgs/affine-model/elements/uml/partition.js +172 -0
  180. package/dist/_pkgs/affine-model/elements/uml/region.d.ts +75 -0
  181. package/dist/_pkgs/affine-model/elements/uml/region.js +150 -0
  182. package/dist/_pkgs/affine-model/elements/uml/subject.d.ts +37 -0
  183. package/dist/_pkgs/affine-model/elements/uml/subject.js +108 -0
  184. package/dist/_pkgs/affine-model/elements/wardley/wardley.js +1 -1
  185. package/dist/_pkgs/affine-shared/services/embed-iframe/embed-iframe-config.d.ts +1 -0
  186. package/dist/_pkgs/affine-shared/services/font-loader/config.d.ts +7 -0
  187. package/dist/_pkgs/affine-shared/services/font-loader/config.js +43 -0
  188. package/dist/_pkgs/affine-shared/services/pivot-materiality-publisher.js +1 -9
  189. package/dist/_pkgs/affine-shared/services/telemetry-service/document-damage-watcher.d.ts +53 -0
  190. package/dist/_pkgs/affine-shared/services/telemetry-service/document-damage-watcher.js +95 -0
  191. package/dist/_pkgs/affine-shared/services/telemetry-service/index.d.ts +1 -0
  192. package/dist/_pkgs/affine-shared/services/telemetry-service/index.js +1 -0
  193. package/dist/_pkgs/affine-shared/services/telemetry-service/lifecycle.d.ts +26 -1
  194. package/dist/_pkgs/affine-shared/services/telemetry-service/telemetry-service.d.ts +2 -2
  195. package/dist/_pkgs/affine-shared/services/toolbar-service/command-action.d.ts +34 -0
  196. package/dist/_pkgs/affine-shared/services/toolbar-service/command-action.js +63 -0
  197. package/dist/_pkgs/affine-shared/services/toolbar-service/index.d.ts +1 -0
  198. package/dist/_pkgs/affine-shared/services/toolbar-service/index.js +1 -0
  199. package/dist/_pkgs/affine-shared/services/translation-service/chrome.d.ts +77 -7
  200. package/dist/_pkgs/affine-shared/services/translation-service/chrome.js +97 -7
  201. package/dist/_pkgs/affine-shared/styles/index.d.ts +1 -0
  202. package/dist/_pkgs/affine-shared/styles/index.js +1 -0
  203. package/dist/_pkgs/affine-shared/styles/motion.d.ts +14 -0
  204. package/dist/_pkgs/affine-shared/styles/motion.js +38 -0
  205. package/dist/_pkgs/affine-shared/utils/event.d.ts +10 -0
  206. package/dist/_pkgs/affine-shared/utils/event.js +20 -0
  207. package/dist/_pkgs/affine-shared/utils/file/filesys.d.ts +16 -0
  208. package/dist/_pkgs/affine-shared/utils/file/filesys.js +25 -0
  209. package/dist/_pkgs/affine-shared/utils/index.d.ts +1 -0
  210. package/dist/_pkgs/affine-shared/utils/index.js +1 -0
  211. package/dist/_pkgs/affine-shared/utils/link-preview-refresh.d.ts +12 -0
  212. package/dist/_pkgs/affine-shared/utils/link-preview-refresh.js +13 -0
  213. package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/artefact-catalogue-widget.d.ts +12 -4
  214. package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/artefact-catalogue-widget.js +27 -4
  215. package/dist/_pkgs/affine-widget-edgeless-toolbar/create-popper.js +13 -0
  216. package/dist/_pkgs/affine-widget-edgeless-toolbar/index.d.ts +2 -0
  217. package/dist/_pkgs/affine-widget-edgeless-toolbar/index.js +2 -0
  218. package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/command-menu.d.ts +80 -0
  219. package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/command-menu.js +270 -81
  220. package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/senior-menu-selection.d.ts +15 -0
  221. package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/senior-menu-selection.js +15 -0
  222. package/dist/_pkgs/affine-widget-edgeless-toolbar/panel/font-weight-and-style-panel.js +8 -1
  223. package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/artefact-ghost-overlay.d.ts +42 -0
  224. package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/artefact-ghost-overlay.js +100 -0
  225. package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/artefact-placement-tool.d.ts +100 -0
  226. package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/artefact-placement-tool.js +274 -0
  227. package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/index.d.ts +3 -0
  228. package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/index.js +3 -0
  229. package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/translate-created.d.ts +25 -0
  230. package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/translate-created.js +67 -0
  231. package/dist/_pkgs/affine-widget-edgeless-toolbar/view.js +5 -0
  232. package/dist/_pkgs/global/gfx/xywh.js +7 -0
  233. package/dist/_pkgs/std/extension/command-registry.d.ts +158 -1
  234. package/dist/_pkgs/std/extension/command-registry.js +22 -0
  235. package/dist/_pkgs/std/gfx/index.d.ts +1 -1
  236. package/dist/_pkgs/std/gfx/interactivity/gfx-view-event-handler.d.ts +12 -0
  237. package/dist/_pkgs/std/gfx/interactivity/gfx-view-event-handler.js +20 -1
  238. package/dist/_pkgs/std/gfx/interactivity/manager.d.ts +10 -0
  239. package/dist/_pkgs/std/gfx/interactivity/manager.js +12 -0
  240. package/dist/_pkgs/std/gfx/model/surface/element-model.js +12 -7
  241. package/dist/_pkgs/std/gfx/model/surface/surface-model.d.ts +56 -0
  242. package/dist/_pkgs/std/gfx/model/surface/surface-model.js +84 -3
  243. package/dist/_pkgs/std/gfx/view/view.d.ts +11 -2
  244. package/dist/_pkgs/std/gfx/view/view.js +16 -2
  245. package/dist/commands.d.ts +6 -0
  246. package/dist/commands.js +8 -1
  247. package/dist/frameworks.d.ts +9 -0
  248. package/dist/frameworks.js +19 -0
  249. package/dist/translations.js +16 -0
  250. package/package.json +9 -4
  251. package/dist/_pkgs/affine-gfx-group/group-watcher.d.ts +0 -1
  252. package/dist/_pkgs/affine-gfx-group/group-watcher.js +0 -20
@@ -146,7 +146,7 @@ export class EdgelessFrameManager extends GfxExtension {
146
146
  .get(EditPropsStore)
147
147
  .applyLastProps('affine:frame', {
148
148
  // Translated HERE and once: the title is document content the moment
149
- // it lands (ADR 0016), so the host's catalogue is asked at placement
149
+ // it lands (ADR 0023), so the host's catalogue is asked at placement
150
150
  // and never again — a renamed frame keeps its name.
151
151
  title: new Text(new Y.Text(translateKey(this.gfx.std, ...FRAME_SEED_NAME, {
152
152
  n: this.frames.length + 1,
@@ -50,7 +50,7 @@ export class FrameTool extends BaseTool {
50
50
  .get(EditPropsStore)
51
51
  .applyLastProps('affine:frame', {
52
52
  // Translated HERE and once, like `EdgelessFrameManager._addFrameBlock`:
53
- // the title is document content the moment it lands (ADR 0016).
53
+ // the title is document content the moment it lands (ADR 0023).
54
54
  title: new Text(new Y.Text(translateKey(this.std, ...FRAME_SEED_NAME, {
55
55
  n: frames.length + 1,
56
56
  }))),
@@ -1,5 +1,5 @@
1
1
  import { EdgelessCRUDIdentifier } from '../affine-block-surface/index.js';
2
- import { packColor, } from '../affine-components/color-picker/index.js';
2
+ import { frameworkPaletteGroups, packColor, } from '../affine-components/color-picker/index.js';
3
3
  import { toast } from '../affine-components/toast/index.js';
4
4
  import { DEFAULT_NOTE_HEIGHT, DefaultTheme, FrameBlockModel, FrameBlockSchema, NoteBlockModel, NoteBlockSchema, NoteDisplayMode, resolveColor, SurfaceRefBlockSchema, } from '../affine-model/index.js';
5
5
  import { NotificationProvider, TOAST_FRAME_INSERTED_INTO_PAGE, TOOLBAR_RENAME, ToolbarModuleExtension, translateKey, } from '../affine-shared/services/index.js';
@@ -135,6 +135,9 @@ const builtinSurfaceToolbarConfig = {
135
135
  break;
136
136
  }
137
137
  };
138
+ // A frame drawn over a framework board opens on that framework's hues
139
+ // (`docs/adr/0027`); the editor palette stays page one.
140
+ const carousel = frameworkPaletteGroups(ctx.std, models, DefaultTheme.Palettes);
138
141
  return html `
139
142
  <edgeless-color-picker-button
140
143
  class="background"
@@ -144,6 +147,8 @@ const builtinSurfaceToolbarConfig = {
144
147
  .theme=${theme}
145
148
  .std=${ctx.std}
146
149
  .originalColor=${firstModel.props.background}
150
+ .paletteGroups=${carousel.groups}
151
+ .activeGroupKey=${carousel.activeKey}
147
152
  .enableCustomColor=${enableCustomColor}
148
153
  >
149
154
  </edgeless-color-picker-button>
@@ -1,6 +1,7 @@
1
1
  import { textKeymap } from '../affine-inline-preset/index.js';
2
2
  import { ListBlockSchema } from '../affine-model/index.js';
3
3
  import { getSelectedModelsCommand } from '../affine-shared/commands/index.js';
4
+ import { isNativeFocusableTarget } from '../affine-shared/utils/index.js';
4
5
  import { IS_MAC } from '../global/env/index.js';
5
6
  import { KeymapExtension, TextSelection } from '../std/index.js';
6
7
  import { canDedentListCommand, dedentListCommand, } from './commands/dedent-list.js';
@@ -11,6 +12,8 @@ import { forwardDelete } from './utils/forward-delete.js';
11
12
  export const ListKeymapExtension = KeymapExtension(std => {
12
13
  return {
13
14
  Enter: ctx => {
15
+ if (isNativeFocusableTarget(ctx.get('keyboardState').raw.target))
16
+ return;
14
17
  const text = std.selection.find(TextSelection);
15
18
  if (!text)
16
19
  return false;
@@ -39,6 +42,8 @@ export const ListKeymapExtension = KeymapExtension(std => {
39
42
  return true;
40
43
  },
41
44
  Tab: ctx => {
45
+ if (isNativeFocusableTarget(ctx.get('keyboardState').raw.target))
46
+ return;
42
47
  const [_, { selectedModels }] = std.command
43
48
  .chain()
44
49
  .pipe(getSelectedModelsCommand, {
@@ -63,6 +68,8 @@ export const ListKeymapExtension = KeymapExtension(std => {
63
68
  return true;
64
69
  },
65
70
  'Shift-Tab': ctx => {
71
+ if (isNativeFocusableTarget(ctx.get('keyboardState').raw.target))
72
+ return;
66
73
  const [_, { selectedModels }] = std.command
67
74
  .chain()
68
75
  .pipe(getSelectedModelsCommand, {
@@ -1,7 +1,7 @@
1
1
  import { CodeBlockModel, ListBlockModel, NoteBlockModel, NoteBlockSchema, ParagraphBlockModel, } from '../affine-model/index.js';
2
2
  import { textConversionConfigs } from '../affine-rich-text/index.js';
3
3
  import { focusBlockEnd, focusBlockStart, getBlockSelectionsCommand, getNextBlockCommand, getPrevBlockCommand, getTextSelectionCommand, } from '../affine-shared/commands/index.js';
4
- import { asyncGetBlockComponent, matchModels, } from '../affine-shared/utils/index.js';
4
+ import { asyncGetBlockComponent, isNativeFocusableTarget, matchModels, } from '../affine-shared/utils/index.js';
5
5
  import { BlockSelection, KeymapExtension, TextSelection, } from '../std/index.js';
6
6
  import { dedentBlocks, dedentBlocksToRoot, indentBlocks, selectBlock, selectBlocksBetween, updateBlockType, } from './commands/index.js';
7
7
  import { moveBlockConfigs } from './move-block.js';
@@ -338,6 +338,8 @@ class NoteKeymap {
338
338
  };
339
339
  this._onEnter = (ctx) => {
340
340
  const event = ctx.get('defaultState').event;
341
+ if (isNativeFocusableTarget(event.target))
342
+ return;
341
343
  const [result] = this._std.command
342
344
  .chain()
343
345
  .pipe(getBlockSelectionsCommand)
@@ -448,6 +450,8 @@ class NoteKeymap {
448
450
  ...this._bindQuickActionHotKey(),
449
451
  ...this._bindTextConversionHotKey(),
450
452
  Tab: ctx => {
453
+ if (isNativeFocusableTarget(ctx.get('keyboardState').raw.target))
454
+ return;
451
455
  const [success] = this.std.command.exec(indentBlocks);
452
456
  if (!success)
453
457
  return;
@@ -455,6 +459,8 @@ class NoteKeymap {
455
459
  return true;
456
460
  },
457
461
  'Shift-Tab': ctx => {
462
+ if (isNativeFocusableTarget(ctx.get('keyboardState').raw.target))
463
+ return;
458
464
  const [success] = this.std.command.exec(dedentBlocks);
459
465
  if (!success)
460
466
  return;
@@ -1,7 +1,7 @@
1
1
  import { textKeymap } from '../affine-inline-preset/index.js';
2
2
  import { CalloutBlockModel, ParagraphBlockModel, ParagraphBlockSchema, } from '../affine-model/index.js';
3
3
  import { focusTextModel, getInlineEditorByModel, } from '../affine-rich-text/index.js';
4
- import { calculateCollapsedSiblings, matchModels, } from '../affine-shared/utils/index.js';
4
+ import { calculateCollapsedSiblings, isNativeFocusableTarget, matchModels, } from '../affine-shared/utils/index.js';
5
5
  import { IS_MAC } from '../global/env/index.js';
6
6
  import { KeymapExtension, TextSelection } from '../std/index.js';
7
7
  import { addParagraphCommand } from './commands/add-paragraph.js';
@@ -76,6 +76,8 @@ export const ParagraphKeymapExtension = KeymapExtension(std => {
76
76
  return true;
77
77
  },
78
78
  Enter: ctx => {
79
+ if (isNativeFocusableTarget(ctx.get('keyboardState').raw.target))
80
+ return;
79
81
  const { store } = std;
80
82
  const text = std.selection.find(TextSelection);
81
83
  if (!text)
@@ -157,6 +159,8 @@ export const ParagraphKeymapExtension = KeymapExtension(std => {
157
159
  return true;
158
160
  },
159
161
  Tab: ctx => {
162
+ if (isNativeFocusableTarget(ctx.get('keyboardState').raw.target))
163
+ return;
160
164
  const [success] = std.command
161
165
  .chain()
162
166
  .pipe(canIndentParagraphCommand)
@@ -169,6 +173,8 @@ export const ParagraphKeymapExtension = KeymapExtension(std => {
169
173
  return true;
170
174
  },
171
175
  'Shift-Tab': ctx => {
176
+ if (isNativeFocusableTarget(ctx.get('keyboardState').raw.target))
177
+ return;
172
178
  const [success] = std.command
173
179
  .chain()
174
180
  .pipe(canDedentParagraphCommand)
@@ -8,7 +8,7 @@
8
8
  * makes the command usable by the agent surface with no UI at all.
9
9
  */
10
10
  import { TelemetryProvider } from '../../affine-shared/services/index.js';
11
- import { FRAMEWORK_IDS, } from '../../std/index.js';
11
+ import { frameworkOfRole, } from '../../std/index.js';
12
12
  import { GfxControllerIdentifier, GfxPrimitiveElementModel, } from '../../std/gfx/index.js';
13
13
  import { z } from 'zod';
14
14
  const PIVOT_DOC_ID = 'pivotDocId';
@@ -58,13 +58,6 @@ function pivotTargets(std, elementIds) {
58
58
  * which is bad in a different way.
59
59
  */
60
60
  const isBindable = (std) => !std.store.readonly;
61
- /** `'wardley:component'` → `'wardley'`, when that names a real framework. */
62
- function frameworkOfRole(role) {
63
- const namespace = role?.split(':')[0];
64
- return FRAMEWORK_IDS.includes(namespace ?? '')
65
- ? namespace
66
- : undefined;
67
- }
68
61
  /** The single value shared by every target, or `undefined` if they disagree. */
69
62
  function unanimous(values) {
70
63
  const distinct = new Set(values);
@@ -14,7 +14,7 @@
14
14
  * tags with no `pivotDocId`, and a `pivotDocId` with no `role`.
15
15
  */
16
16
  import { TelemetryProvider } from '../../affine-shared/services/index.js';
17
- import { FRAMEWORK_IDS, } from '../../std/index.js';
17
+ import { frameworkOfRole, } from '../../std/index.js';
18
18
  import { GfxControllerIdentifier, GfxPrimitiveElementModel, setElementTag, } from '../../std/gfx/index.js';
19
19
  import { z } from 'zod';
20
20
  /**
@@ -69,13 +69,6 @@ function tagTargets(std, elementIds) {
69
69
  * guard of their own.
70
70
  */
71
71
  const isQualifiable = (std) => !std.store.readonly;
72
- /** `'wardley:component'` → `'wardley'`, when that names a real framework. */
73
- function frameworkOfRole(role) {
74
- const namespace = role?.split(':')[0];
75
- return FRAMEWORK_IDS.includes(namespace ?? '')
76
- ? namespace
77
- : undefined;
78
- }
79
72
  /** The single value shared by every target, or `undefined` if they disagree. */
80
73
  function unanimous(values) {
81
74
  const distinct = new Set(values);
@@ -18,6 +18,15 @@ export declare class EdgelessPageKeyboardManager extends PageKeyboardManager {
18
18
  toolbarLocked: import("rxjs").Subject<boolean>;
19
19
  };
20
20
  get std(): import("../../std/index.js").BlockStdScope;
21
+ /**
22
+ * The framework sub-menu the toolbar has open, when it has one open.
23
+ *
24
+ * Asked of the widget rather than of a service because the popover is not a
25
+ * tool: it is a transient element the toolbar parks in `activePopper`, and
26
+ * only the generic command menu answers to the keys below — a colour picker
27
+ * or a note sub-menu sitting in the same slot keeps its own behaviour.
28
+ */
29
+ private get _seniorMenu();
21
30
  constructor(rootComponent: EdgelessRootBlockComponent);
22
31
  private _bindToggleHand;
23
32
  private _delete;
@@ -14,6 +14,7 @@ import { TextTool } from '../../affine-gfx-text/index.js';
14
14
  import { ConnectorElementModel, EdgelessTextBlockModel, GroupElementModel, LayoutType, MindmapElementModel, NoteBlockModel, NoteDisplayMode, } from '../../affine-model/index.js';
15
15
  import { BLOCK_NAME_TEXT, EditPropsStore, TelemetryProvider, translateKey, } from '../../affine-shared/services/index.js';
16
16
  import { matchModels } from '../../affine-shared/utils/index.js';
17
+ import { cycleArmedArtefact, EDGELESS_TOOLBAR_WIDGET, EdgelessCommandMenu, } from '../../affine-widget-edgeless-toolbar/index.js';
17
18
  import { IS_MAC } from '../../global/env/index.js';
18
19
  import { Bound, getCommonBound } from '../../global/gfx/index.js';
19
20
  import { SurfaceSelection, TextSelection } from '../../std/index.js';
@@ -33,6 +34,23 @@ export class EdgelessPageKeyboardManager extends PageKeyboardManager {
33
34
  get std() {
34
35
  return this.rootComponent.std;
35
36
  }
37
+ /**
38
+ * The framework sub-menu the toolbar has open, when it has one open.
39
+ *
40
+ * Asked of the widget rather than of a service because the popover is not a
41
+ * tool: it is a transient element the toolbar parks in `activePopper`, and
42
+ * only the generic command menu answers to the keys below — a colour picker
43
+ * or a note sub-menu sitting in the same slot keeps its own behaviour.
44
+ */
45
+ get _seniorMenu() {
46
+ // A keystroke aimed at a canvas text editor belongs to that editor, open
47
+ // menu or not — the same condition the shape cycling below already has.
48
+ if (this.rootComponent.service.selection.editing)
49
+ return null;
50
+ const toolbar = this.rootComponent.widgetComponents[EDGELESS_TOOLBAR_WIDGET];
51
+ const element = toolbar?.activePopper?.element;
52
+ return element instanceof EdgelessCommandMenu ? element : null;
53
+ }
36
54
  constructor(rootComponent) {
37
55
  super(rootComponent);
38
56
  this.rootComponent = rootComponent;
@@ -157,8 +175,24 @@ export class EdgelessPageKeyboardManager extends PageKeyboardManager {
157
175
  .catch(console.error);
158
176
  },
159
177
  'Shift-s': () => {
178
+ // Over an open senior menu the very same keystroke steps backwards
179
+ // through the artefacts it offers — the shape tool's "previous
180
+ // variant", applied to the row a framework opened. With an artefact
181
+ // armed the menu walks the TOOL instead, so the ghost moves with the
182
+ // highlight.
183
+ const menu = this._seniorMenu;
184
+ if (menu) {
185
+ menu.cycle(-1);
186
+ return;
187
+ }
160
188
  if (this.rootComponent.service.locked)
161
189
  return;
190
+ // The same walk with no menu open: the framework's row is what the
191
+ // armed artefact belongs to, whether or not it is on screen.
192
+ if (!this.rootComponent.service.selection.editing &&
193
+ cycleArmedArtefact(rootComponent.gfx, -1)) {
194
+ return;
195
+ }
162
196
  const controller = rootComponent.gfx.tool.currentTool$.peek();
163
197
  if (this.rootComponent.service.selection.editing ||
164
198
  !(controller instanceof ShapeTool)) {
@@ -265,9 +299,22 @@ export class EdgelessPageKeyboardManager extends PageKeyboardManager {
265
299
  this._move('ArrowDown');
266
300
  },
267
301
  ArrowLeft: () => {
302
+ // Same highlight as Shift+S, spelled the way a row of buttons is
303
+ // normally walked. The guard also keeps the arrows from nudging the
304
+ // selection behind a menu the user is reading.
305
+ const menu = this._seniorMenu;
306
+ if (menu) {
307
+ menu.cycle(-1);
308
+ return;
309
+ }
268
310
  this._move('ArrowLeft');
269
311
  },
270
312
  ArrowRight: () => {
313
+ const menu = this._seniorMenu;
314
+ if (menu) {
315
+ menu.cycle(1);
316
+ return;
317
+ }
271
318
  this._move('ArrowRight');
272
319
  },
273
320
  'Shift-ArrowUp': () => {
@@ -283,6 +330,10 @@ export class EdgelessPageKeyboardManager extends PageKeyboardManager {
283
330
  this._move('ArrowRight', true);
284
331
  },
285
332
  Enter: () => {
333
+ // A highlighted sub-menu button consumes Enter; with nothing
334
+ // highlighted the menu takes nothing and the canvas keeps its own.
335
+ if (this._seniorMenu?.activate())
336
+ return;
286
337
  const { service } = rootComponent;
287
338
  const selection = service.selection;
288
339
  const elements = selection.selectedElements;
@@ -23,6 +23,28 @@ export declare class EdgelessRootBlockComponent extends BlockComponent<RootBlock
23
23
  private _initResizeEffect;
24
24
  private _initSlotEffects;
25
25
  private _initViewport;
26
+ /**
27
+ * A pinch (or ctrl+wheel) that the capture handler below has already turned
28
+ * into a canvas zoom. The dispatcher's own handler still receives the event
29
+ * when nothing swallowed it, and must not zoom a second time.
30
+ */
31
+ private readonly _pinchZoomed;
32
+ /**
33
+ * Ctrl+wheel and trackpad pinch zoom the CANVAS, never the browser page.
34
+ *
35
+ * What stops a browser from page-zooming is `preventDefault()`, and the only
36
+ * handler that calls it hangs off the event dispatcher — a bubble-phase
37
+ * listener on the editor host. Two kinds of overlay keep it from ever
38
+ * running: popups portalled out to `document.body` (the event never reaches
39
+ * the host), and in-host overlays that stop the wheel on purpose so they
40
+ * scroll instead of the board (the element toolbar, the validation bubble,
41
+ * the artefact catalogue…). Under either one the page zoomed.
42
+ *
43
+ * One capture-phase listener on `document` sees the gesture before all of
44
+ * them, and it is deliberately narrow: pinches only — a plain wheel still
45
+ * belongs to whatever is under the pointer — and only inside this editor.
46
+ */
47
+ private readonly _onDocumentPinch;
26
48
  private _initWheelEvent;
27
49
  bindHotKey(keymap: Record<string, UIEventHandler>, options?: {
28
50
  global?: boolean;
@@ -49,6 +49,7 @@ import { css, html } from 'lit';
49
49
  import { query } from 'lit/decorators.js';
50
50
  import { repeat } from 'lit/directives/repeat.js';
51
51
  import { EdgelessPageKeyboardManager } from './edgeless-keyboard.js';
52
+ import { pinchZoomAction } from './utils/pinch-zoom.js';
52
53
  import { isCanvasElement } from './utils/query.js';
53
54
  let EdgelessRootBlockComponent = (() => {
54
55
  let _classSuper = BlockComponent;
@@ -268,11 +269,20 @@ let EdgelessRootBlockComponent = (() => {
268
269
  });
269
270
  }
270
271
  _initWheelEvent() {
272
+ this._disposables.addFromEvent(document, 'wheel', this._onDocumentPinch, {
273
+ passive: false,
274
+ capture: true,
275
+ });
271
276
  this._disposables.add(this.std.event.add('wheel', ctx => {
272
277
  const config = this.std.getOptional(EditorSettingProvider)?.setting$;
273
278
  const state = ctx.get('defaultState');
274
279
  const e = state.event;
275
280
  const edgelessScrollZoom = config?.peek().edgelessScrollZoom ?? false;
281
+ // Already zoomed, on the way down: the default action is cancelled too.
282
+ if (this._pinchZoomed.has(e)) {
283
+ e.stopPropagation();
284
+ return;
285
+ }
276
286
  e.preventDefault();
277
287
  const { viewport } = this.gfx;
278
288
  if (viewport.locked)
@@ -436,6 +446,42 @@ let EdgelessRootBlockComponent = (() => {
436
446
  }, this);
437
447
  this._resizeObserver = null;
438
448
  this.keyboardManager = null;
449
+ /**
450
+ * A pinch (or ctrl+wheel) that the capture handler below has already turned
451
+ * into a canvas zoom. The dispatcher's own handler still receives the event
452
+ * when nothing swallowed it, and must not zoom a second time.
453
+ */
454
+ this._pinchZoomed = new WeakSet();
455
+ /**
456
+ * Ctrl+wheel and trackpad pinch zoom the CANVAS, never the browser page.
457
+ *
458
+ * What stops a browser from page-zooming is `preventDefault()`, and the only
459
+ * handler that calls it hangs off the event dispatcher — a bubble-phase
460
+ * listener on the editor host. Two kinds of overlay keep it from ever
461
+ * running: popups portalled out to `document.body` (the event never reaches
462
+ * the host), and in-host overlays that stop the wheel on purpose so they
463
+ * scroll instead of the board (the element toolbar, the validation bubble,
464
+ * the artefact catalogue…). Under either one the page zoomed.
465
+ *
466
+ * One capture-phase listener on `document` sees the gesture before all of
467
+ * them, and it is deliberately narrow: pinches only — a plain wheel still
468
+ * belongs to whatever is under the pointer — and only inside this editor.
469
+ */
470
+ this._onDocumentPinch = (e) => {
471
+ const action = pinchZoomAction(e, this.std.host);
472
+ if (action === 'ignore')
473
+ return;
474
+ e.preventDefault();
475
+ if (action === 'swallow')
476
+ return;
477
+ const { viewport } = this.gfx;
478
+ if (viewport.locked)
479
+ return;
480
+ const rect = this.getBoundingClientRect();
481
+ const [baseX, baseY] = viewport.toModelCoord(e.clientX - rect.x, e.clientY - rect.y);
482
+ viewport.setZoom(normalizeWheelDeltaY(e.deltaY, viewport.zoom), new Point(baseX, baseY), true);
483
+ this._pinchZoomed.add(e);
484
+ };
439
485
  this.#backgroundElm_accessor_storage = __runInitializers(this, _backgroundElm_initializers, null);
440
486
  this.#gfxViewportElm_accessor_storage = (__runInitializers(this, _backgroundElm_extraInitializers), __runInitializers(this, _gfxViewportElm_initializers, void 0));
441
487
  this.#mountElm_accessor_storage = (__runInitializers(this, _gfxViewportElm_extraInitializers), __runInitializers(this, _mountElm_initializers, null));
@@ -0,0 +1,21 @@
1
+ /**
2
+ * The class `createSimplePortal` stamps on every portal root it appends to
3
+ * `document.body` — the only thing a popup rendered OUTSIDE the editor host
4
+ * still has in common with the editor that opened it.
5
+ */
6
+ export declare const PORTAL_CLASS = "blocksuite-portal";
7
+ /**
8
+ * What the edgeless board owes a wheel event seen on `document`, in capture:
9
+ *
10
+ * - `ignore`: not a pinch, or not this editor's business — the page keeps it.
11
+ * - `swallow`: a pinch inside a popup the editor portalled out to
12
+ * `document.body`. The browser must not page-zoom, but the board must not
13
+ * move either: zooming under an anchored popup leaves it pointing at nothing.
14
+ * - `zoom`: a pinch inside the editor — the canvas zooms.
15
+ */
16
+ export type PinchZoomAction = 'ignore' | 'swallow' | 'zoom';
17
+ /**
18
+ * The whole decision, readable from the event and the host alone so it can be
19
+ * tested without a live editor.
20
+ */
21
+ export declare function pinchZoomAction(event: WheelEvent, host: EventTarget): PinchZoomAction;
@@ -0,0 +1,24 @@
1
+ import { isTouchPadPinchEvent } from '../../../affine-shared/utils/index.js';
2
+ /**
3
+ * The class `createSimplePortal` stamps on every portal root it appends to
4
+ * `document.body` — the only thing a popup rendered OUTSIDE the editor host
5
+ * still has in common with the editor that opened it.
6
+ */
7
+ export const PORTAL_CLASS = 'blocksuite-portal';
8
+ /**
9
+ * The whole decision, readable from the event and the host alone so it can be
10
+ * tested without a live editor.
11
+ */
12
+ export function pinchZoomAction(event, host) {
13
+ // A plain wheel still belongs to whatever is under the pointer: an
14
+ // overflowing toolbar, a bubble, a panel. Only the zoom gesture is claimed.
15
+ if (!isTouchPadPinchEvent(event))
16
+ return 'ignore';
17
+ const path = event.composedPath();
18
+ if (path.includes(host))
19
+ return 'zoom';
20
+ if (path.some(node => node instanceof Element && node.classList.contains(PORTAL_CLASS))) {
21
+ return 'swallow';
22
+ }
23
+ return 'ignore';
24
+ }
@@ -43,6 +43,14 @@ export function getCursorMode(edgelessTool) {
43
43
  return drawingCursor;
44
44
  case 'eraser':
45
45
  case 'shape':
46
+ // The polygon tool is armed long before it draws anything — the first
47
+ // click only places a corner — so the cursor is the only thing that says
48
+ // the next click lands on the canvas rather than selecting.
49
+ case 'polygon':
50
+ // An armed framework artefact: the ghost says WHAT lands, the crosshair
51
+ // says WHERE — and it is all there is for an artefact with nothing drawable
52
+ // to preview (a lone connector).
53
+ case 'artefact-placement':
46
54
  case 'connector':
47
55
  case 'frame':
48
56
  case 'affine:note':
@@ -1,20 +1,5 @@
1
+ import { isNativeFocusableTarget } from '../../affine-shared/utils/index.js';
1
2
  import { KeymapExtension } from '../../std/index.js';
2
- const NATIVE_FOCUSABLE_SELECTOR = 'button, a[href], input, select, textarea, [tabindex]:not([tabindex="-1"])';
3
- /**
4
- * The editor host swallows Tab and Shift-Tab so that indentation stays under
5
- * the control of the block-scoped handlers. That would however trap the focus
6
- * on the native controls the editor renders (the collapse button of headings
7
- * and lists, for instance), which then could neither be reached nor left with
8
- * the keyboard. When the event originates from such a control — and not from
9
- * editable text — the native tabbing behaviour is let through.
10
- */
11
- const isNativeFocusableTarget = (target) => {
12
- if (!(target instanceof Element))
13
- return false;
14
- if (target instanceof HTMLElement && target.isContentEditable)
15
- return false;
16
- return !!target.closest(NATIVE_FOCUSABLE_SELECTOR);
17
- };
18
3
  export const fallbackKeymap = KeymapExtension(() => {
19
4
  return {
20
5
  Tab: ctx => {
@@ -1,4 +1,4 @@
1
- import { BpmnNodeElementModel, BpmnPoolElementModel, BrushElementModel, C4BoardElementModel, C4BoundaryElementModel, C4NodeElementModel, ConnectorElementModel, ContextMapBoardElementModel, CoreDomainChartElementModel, CynefinElementModel, EdgyBoardElementModel, EdgyFacetsElementModel, EdgyNodeElementModel, EstuarineElementModel, EventStormingBoardElementModel, GroupElementModel, HighlighterElementModel, MindmapElementModel, ShapeElementModel, TextElementModel, WardleyBackgroundElementModel, WardleyNodeElementModel } from '../../affine-model/index.js';
1
+ import { BpmnNodeElementModel, BpmnPoolElementModel, BrushElementModel, C4BoardElementModel, C4BoundaryElementModel, C4NodeElementModel, ConnectorElementModel, ContextMapBoardElementModel, CoreDomainChartElementModel, CynefinElementModel, EdgyBoardElementModel, EdgyFacetsElementModel, EdgyNodeElementModel, EstuarineElementModel, EventStormingBoardElementModel, GroupElementModel, HighlighterElementModel, MindmapElementModel, ShapeElementModel, TextElementModel, UmlDiagramElementModel, UmlFragmentElementModel, UmlNodeElementModel, UmlPartitionElementModel, UmlRegionElementModel, UmlSubjectElementModel, WardleyBackgroundElementModel, WardleyNodeElementModel } from '../../affine-model/index.js';
2
2
  import { SurfaceElementModel } from './base.js';
3
3
  export declare const elementsCtorMap: {
4
4
  group: typeof GroupElementModel;
@@ -23,8 +23,14 @@ export declare const elementsCtorMap: {
23
23
  c4Node: typeof C4NodeElementModel;
24
24
  c4Board: typeof C4BoardElementModel;
25
25
  c4Boundary: typeof C4BoundaryElementModel;
26
+ umlNode: typeof UmlNodeElementModel;
27
+ umlDiagram: typeof UmlDiagramElementModel;
28
+ umlSubject: typeof UmlSubjectElementModel;
29
+ umlPartition: typeof UmlPartitionElementModel;
30
+ umlRegion: typeof UmlRegionElementModel;
31
+ umlFragment: typeof UmlFragmentElementModel;
26
32
  };
27
- export { BpmnNodeElementModel, BpmnPoolElementModel, BrushElementModel, C4BoardElementModel, C4BoundaryElementModel, C4NodeElementModel, ConnectorElementModel, ContextMapBoardElementModel, CoreDomainChartElementModel, CynefinElementModel, EdgyBoardElementModel, EdgyFacetsElementModel, EdgyNodeElementModel, EstuarineElementModel, EventStormingBoardElementModel, GroupElementModel, HighlighterElementModel, MindmapElementModel, ShapeElementModel, SurfaceElementModel, TextElementModel, WardleyBackgroundElementModel, WardleyNodeElementModel, };
33
+ export { BpmnNodeElementModel, BpmnPoolElementModel, BrushElementModel, C4BoardElementModel, C4BoundaryElementModel, C4NodeElementModel, ConnectorElementModel, ContextMapBoardElementModel, CoreDomainChartElementModel, CynefinElementModel, EdgyBoardElementModel, EdgyFacetsElementModel, EdgyNodeElementModel, EstuarineElementModel, EventStormingBoardElementModel, GroupElementModel, HighlighterElementModel, MindmapElementModel, ShapeElementModel, SurfaceElementModel, TextElementModel, UmlDiagramElementModel, UmlFragmentElementModel, UmlNodeElementModel, UmlPartitionElementModel, UmlRegionElementModel, UmlSubjectElementModel, WardleyBackgroundElementModel, WardleyNodeElementModel, };
28
34
  export declare enum CanvasElementType {
29
35
  BRUSH = "brush",
30
36
  CONNECTOR = "connector",
@@ -47,7 +53,13 @@ export declare enum CanvasElementType {
47
53
  BPMNPOOL = "bpmnPool",
48
54
  C4NODE = "c4Node",
49
55
  C4BOARD = "c4Board",
50
- C4BOUNDARY = "c4Boundary"
56
+ C4BOUNDARY = "c4Boundary",
57
+ UMLNODE = "umlNode",
58
+ UMLDIAGRAM = "umlDiagram",
59
+ UMLSUBJECT = "umlSubject",
60
+ UMLPARTITION = "umlPartition",
61
+ UMLREGION = "umlRegion",
62
+ UMLFRAGMENT = "umlFragment"
51
63
  }
52
64
  export type ElementModelMap = {
53
65
  ['shape']: ShapeElementModel;
@@ -72,5 +84,11 @@ export type ElementModelMap = {
72
84
  ['c4Node']: C4NodeElementModel;
73
85
  ['c4Board']: C4BoardElementModel;
74
86
  ['c4Boundary']: C4BoundaryElementModel;
87
+ ['umlNode']: UmlNodeElementModel;
88
+ ['umlDiagram']: UmlDiagramElementModel;
89
+ ['umlSubject']: UmlSubjectElementModel;
90
+ ['umlPartition']: UmlPartitionElementModel;
91
+ ['umlRegion']: UmlRegionElementModel;
92
+ ['umlFragment']: UmlFragmentElementModel;
75
93
  };
76
94
  export declare function isCanvasElementType(type: string): type is CanvasElementType;
@@ -1,4 +1,4 @@
1
- import { BpmnNodeElementModel, BpmnPoolElementModel, BrushElementModel, C4BoardElementModel, C4BoundaryElementModel, C4NodeElementModel, ConnectorElementModel, ContextMapBoardElementModel, CoreDomainChartElementModel, CynefinElementModel, EdgyBoardElementModel, EdgyFacetsElementModel, EdgyNodeElementModel, EstuarineElementModel, EventStormingBoardElementModel, GroupElementModel, HighlighterElementModel, MindmapElementModel, ShapeElementModel, TextElementModel, WardleyBackgroundElementModel, WardleyNodeElementModel, } from '../../affine-model/index.js';
1
+ import { BpmnNodeElementModel, BpmnPoolElementModel, BrushElementModel, C4BoardElementModel, C4BoundaryElementModel, C4NodeElementModel, ConnectorElementModel, ContextMapBoardElementModel, CoreDomainChartElementModel, CynefinElementModel, EdgyBoardElementModel, EdgyFacetsElementModel, EdgyNodeElementModel, EstuarineElementModel, EventStormingBoardElementModel, GroupElementModel, HighlighterElementModel, MindmapElementModel, ShapeElementModel, TextElementModel, UmlDiagramElementModel, UmlFragmentElementModel, UmlNodeElementModel, UmlPartitionElementModel, UmlRegionElementModel, UmlSubjectElementModel, WardleyBackgroundElementModel, WardleyNodeElementModel, } from '../../affine-model/index.js';
2
2
  import { SurfaceElementModel } from './base.js';
3
3
  export const elementsCtorMap = {
4
4
  group: GroupElementModel,
@@ -23,8 +23,14 @@ export const elementsCtorMap = {
23
23
  c4Node: C4NodeElementModel,
24
24
  c4Board: C4BoardElementModel,
25
25
  c4Boundary: C4BoundaryElementModel,
26
+ umlNode: UmlNodeElementModel,
27
+ umlDiagram: UmlDiagramElementModel,
28
+ umlSubject: UmlSubjectElementModel,
29
+ umlPartition: UmlPartitionElementModel,
30
+ umlRegion: UmlRegionElementModel,
31
+ umlFragment: UmlFragmentElementModel,
26
32
  };
27
- export { BpmnNodeElementModel, BpmnPoolElementModel, BrushElementModel, C4BoardElementModel, C4BoundaryElementModel, C4NodeElementModel, ConnectorElementModel, ContextMapBoardElementModel, CoreDomainChartElementModel, CynefinElementModel, EdgyBoardElementModel, EdgyFacetsElementModel, EdgyNodeElementModel, EstuarineElementModel, EventStormingBoardElementModel, GroupElementModel, HighlighterElementModel, MindmapElementModel, ShapeElementModel, SurfaceElementModel, TextElementModel, WardleyBackgroundElementModel, WardleyNodeElementModel, };
33
+ export { BpmnNodeElementModel, BpmnPoolElementModel, BrushElementModel, C4BoardElementModel, C4BoundaryElementModel, C4NodeElementModel, ConnectorElementModel, ContextMapBoardElementModel, CoreDomainChartElementModel, CynefinElementModel, EdgyBoardElementModel, EdgyFacetsElementModel, EdgyNodeElementModel, EstuarineElementModel, EventStormingBoardElementModel, GroupElementModel, HighlighterElementModel, MindmapElementModel, ShapeElementModel, SurfaceElementModel, TextElementModel, UmlDiagramElementModel, UmlFragmentElementModel, UmlNodeElementModel, UmlPartitionElementModel, UmlRegionElementModel, UmlSubjectElementModel, WardleyBackgroundElementModel, WardleyNodeElementModel, };
28
34
  export var CanvasElementType;
29
35
  (function (CanvasElementType) {
30
36
  CanvasElementType["BRUSH"] = "brush";
@@ -49,6 +55,12 @@ export var CanvasElementType;
49
55
  CanvasElementType["C4NODE"] = "c4Node";
50
56
  CanvasElementType["C4BOARD"] = "c4Board";
51
57
  CanvasElementType["C4BOUNDARY"] = "c4Boundary";
58
+ CanvasElementType["UMLNODE"] = "umlNode";
59
+ CanvasElementType["UMLDIAGRAM"] = "umlDiagram";
60
+ CanvasElementType["UMLSUBJECT"] = "umlSubject";
61
+ CanvasElementType["UMLPARTITION"] = "umlPartition";
62
+ CanvasElementType["UMLREGION"] = "umlRegion";
63
+ CanvasElementType["UMLFRAGMENT"] = "umlFragment";
52
64
  })(CanvasElementType || (CanvasElementType = {}));
53
65
  export function isCanvasElementType(type) {
54
66
  return type.toLocaleUpperCase() in CanvasElementType;
@@ -0,0 +1,23 @@
1
+ import { FrameworkBackgroundElementModel } from '../../../affine-model/index.js';
2
+ import type { AnyCommandDescriptor, BlockStdScope } from '../../../std/index.js';
3
+ /**
4
+ * The framework boards in the current canvas selection.
5
+ *
6
+ * `FrameworkBackgroundElementModel` is the whole test, and that is the point of
7
+ * this command: eleven board kinds today — a Wardley map, a BPMN pool, a C4
8
+ * board and its boundaries, the three DDD boards, Cynefin, Estuarine, the two
9
+ * EDGY ones — and whatever a framework adds next, because a board IS the class
10
+ * and nothing about SVG is per framework (ADR 0025).
11
+ */
12
+ export declare function selectedBoards(std: BlockStdScope): FrameworkBackgroundElementModel[];
13
+ /**
14
+ * Render the selected board and hand it to the browser.
15
+ *
16
+ * ponytail: ONE board per click, the first of the selection. Browsers throttle
17
+ * (and Safari silently drops) programmatic downloads fired in a burst, so a
18
+ * selection of three boards would yield one file, two files or three depending
19
+ * on the browser — a result nobody can read off the gesture. One board, one
20
+ * file, every time.
21
+ */
22
+ export declare function exportBoardSvg(std: BlockStdScope): void;
23
+ export declare const exportSvgCommands: AnyCommandDescriptor[];