@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.
- package/dist/_pkgs/affine-block-callout/callout-block.d.ts +6 -0
- package/dist/_pkgs/affine-block-callout/callout-block.js +25 -3
- package/dist/_pkgs/affine-block-callout/callout-keymap.js +59 -19
- package/dist/_pkgs/affine-block-callout/commands/callout-to-paragraph.d.ts +20 -0
- package/dist/_pkgs/affine-block-callout/commands/callout-to-paragraph.js +60 -0
- package/dist/_pkgs/affine-block-callout/commands/split-callout.d.ts +17 -0
- package/dist/_pkgs/affine-block-callout/commands/split-callout.js +42 -0
- package/dist/_pkgs/affine-block-callout/configs/slash-menu.js +9 -6
- package/dist/_pkgs/affine-block-callout/emoji-margin.d.ts +9 -0
- package/dist/_pkgs/affine-block-callout/emoji-margin.js +36 -0
- package/dist/_pkgs/affine-block-callout/emoji-menu.d.ts +5 -1
- package/dist/_pkgs/affine-block-callout/emoji-menu.js +5 -0
- package/dist/_pkgs/affine-block-code/code-block.d.ts +14 -0
- package/dist/_pkgs/affine-block-code/code-block.js +44 -6
- package/dist/_pkgs/affine-block-code/code-toolbar/components/code-toolbar.d.ts +2 -0
- package/dist/_pkgs/affine-block-code/code-toolbar/components/code-toolbar.js +23 -14
- package/dist/_pkgs/affine-block-code/code-toolbar/components/more-menu.d.ts +16 -0
- package/dist/_pkgs/affine-block-code/code-toolbar/components/more-menu.js +93 -0
- package/dist/_pkgs/affine-block-code/code-toolbar/config.js +52 -5
- package/dist/_pkgs/affine-block-code/effects.d.ts +2 -0
- package/dist/_pkgs/affine-block-code/effects.js +2 -0
- package/dist/_pkgs/affine-block-code/highlight/affine-code-unit.js +6 -1
- package/dist/_pkgs/affine-block-code/index.d.ts +1 -0
- package/dist/_pkgs/affine-block-code/index.js +1 -0
- package/dist/_pkgs/affine-block-code/line-numbers.d.ts +25 -0
- package/dist/_pkgs/affine-block-code/line-numbers.js +27 -0
- package/dist/_pkgs/affine-block-code/styles.js +31 -0
- package/dist/_pkgs/affine-block-data-view/data-view-block.js +1 -0
- package/dist/_pkgs/affine-block-database/components/title/index.js +4 -1
- package/dist/_pkgs/affine-block-database/configs/slash-menu.js +28 -1
- package/dist/_pkgs/affine-block-database/database-block.js +13 -0
- package/dist/_pkgs/affine-block-database/properties/paste-url.d.ts +24 -0
- package/dist/_pkgs/affine-block-database/properties/paste-url.js +98 -0
- package/dist/_pkgs/affine-block-database/properties/rich-text/cell-renderer.js +9 -19
- package/dist/_pkgs/affine-block-database/properties/title/text.js +20 -25
- package/dist/_pkgs/affine-block-database/views/index.js +1 -0
- package/dist/_pkgs/affine-block-edgeless-text/edgeless-text-block.js +10 -0
- package/dist/_pkgs/affine-block-edgeless-text/edgeless-toolbar/config.d.ts +3 -0
- package/dist/_pkgs/affine-block-edgeless-text/edgeless-toolbar/config.js +48 -1
- package/dist/_pkgs/affine-block-edgeless-text/edgeless-toolbar/font-size.d.ts +17 -0
- package/dist/_pkgs/affine-block-edgeless-text/edgeless-toolbar/font-size.js +24 -0
- package/dist/_pkgs/affine-block-embed-doc/common/doc-trashed.d.ts +9 -0
- package/dist/_pkgs/affine-block-embed-doc/common/doc-trashed.js +10 -0
- package/dist/_pkgs/affine-block-embed-doc/embed-linked-doc-block/embed-linked-doc-block.js +8 -4
- package/dist/_pkgs/affine-block-embed-doc/embed-synced-doc-block/embed-synced-doc-block.d.ts +4 -0
- package/dist/_pkgs/affine-block-embed-doc/embed-synced-doc-block/embed-synced-doc-block.js +22 -3
- package/dist/_pkgs/affine-block-frame/frame-manager.d.ts +13 -0
- package/dist/_pkgs/affine-block-frame/frame-manager.js +32 -2
- package/dist/_pkgs/affine-block-latex/styles.js +6 -1
- package/dist/_pkgs/affine-block-note/note-edgeless-block.d.ts +9 -0
- package/dist/_pkgs/affine-block-note/note-edgeless-block.js +29 -1
- package/dist/_pkgs/affine-block-root/commands/pivot-commands.d.ts +37 -0
- package/dist/_pkgs/affine-block-root/commands/pivot-commands.js +168 -0
- package/dist/_pkgs/affine-block-root/commands/reading-commands.d.ts +23 -0
- package/dist/_pkgs/affine-block-root/commands/reading-commands.js +107 -0
- package/dist/_pkgs/affine-block-root/commands/tag-commands.d.ts +47 -0
- package/dist/_pkgs/affine-block-root/commands/tag-commands.js +159 -0
- package/dist/_pkgs/affine-block-root/configs/toolbar.d.ts +1 -0
- package/dist/_pkgs/affine-block-root/edgeless/configs/toolbar/more.js +9 -2
- package/dist/_pkgs/affine-block-root/edgeless/configs/toolbar/render-linked-doc.js +1 -1
- package/dist/_pkgs/affine-block-root/edgeless/edgeless-keyboard.js +26 -1
- package/dist/_pkgs/affine-block-root/edgeless/edgeless-root-block.js +11 -2
- package/dist/_pkgs/affine-block-root/edgeless/edgeless-root-service.js +14 -0
- package/dist/_pkgs/affine-block-root/edgeless/index.d.ts +1 -0
- package/dist/_pkgs/affine-block-root/edgeless/index.js +1 -0
- package/dist/_pkgs/affine-block-root/edgeless/reserved-keys.d.ts +21 -0
- package/dist/_pkgs/affine-block-root/edgeless/reserved-keys.js +34 -0
- package/dist/_pkgs/affine-block-root/edgeless/utils/clone-utils.d.ts +7 -1
- package/dist/_pkgs/affine-block-root/edgeless/utils/clone-utils.js +11 -2
- package/dist/_pkgs/affine-block-root/index.d.ts +4 -1
- package/dist/_pkgs/affine-block-root/index.js +4 -1
- package/dist/_pkgs/affine-block-root/keyboard/commands.d.ts +2 -0
- package/dist/_pkgs/affine-block-root/keyboard/commands.js +147 -0
- package/dist/_pkgs/affine-block-root/view.js +13 -4
- package/dist/_pkgs/affine-block-surface/commands/reassociate-connectors.js +0 -1
- package/dist/_pkgs/affine-block-surface/effects.js +6 -0
- package/dist/_pkgs/affine-block-surface/element-model/index.d.ts +5 -2
- package/dist/_pkgs/affine-block-surface/element-model/index.js +4 -2
- package/dist/_pkgs/affine-block-surface/extensions/audit.d.ts +107 -0
- package/dist/_pkgs/affine-block-surface/extensions/audit.js +472 -0
- package/dist/_pkgs/affine-block-surface/extensions/crud-extension.d.ts +14 -0
- package/dist/_pkgs/affine-block-surface/extensions/crud-extension.js +27 -0
- package/dist/_pkgs/affine-block-surface/extensions/editor-anchored-panel.d.ts +133 -0
- package/dist/_pkgs/affine-block-surface/extensions/editor-anchored-panel.js +326 -0
- package/dist/_pkgs/affine-block-surface/extensions/index.d.ts +13 -0
- package/dist/_pkgs/affine-block-surface/extensions/index.js +13 -0
- package/dist/_pkgs/affine-block-surface/extensions/map-quality-widget.d.ts +146 -0
- package/dist/_pkgs/affine-block-surface/extensions/map-quality-widget.js +528 -0
- package/dist/_pkgs/affine-block-surface/extensions/map-quality.d.ts +109 -0
- package/dist/_pkgs/affine-block-surface/extensions/map-quality.js +84 -0
- package/dist/_pkgs/affine-block-surface/extensions/reading-toolbar.d.ts +15 -0
- package/dist/_pkgs/affine-block-surface/extensions/reading-toolbar.js +158 -0
- package/dist/_pkgs/affine-block-surface/extensions/reading-widget.d.ts +145 -0
- package/dist/_pkgs/affine-block-surface/extensions/reading-widget.js +590 -0
- package/dist/_pkgs/affine-block-surface/extensions/reading.d.ts +494 -0
- package/dist/_pkgs/affine-block-surface/extensions/reading.js +767 -0
- package/dist/_pkgs/affine-block-surface/extensions/spotlight.d.ts +45 -0
- package/dist/_pkgs/affine-block-surface/extensions/spotlight.js +177 -0
- package/dist/_pkgs/affine-block-surface/extensions/tags-toolbar.d.ts +10 -0
- package/dist/_pkgs/affine-block-surface/extensions/tags-toolbar.js +295 -0
- package/dist/_pkgs/affine-block-surface/extensions/validation-toolbar.d.ts +27 -0
- package/dist/_pkgs/affine-block-surface/extensions/validation-toolbar.js +361 -0
- package/dist/_pkgs/affine-block-surface/extensions/validation.d.ts +1340 -0
- package/dist/_pkgs/affine-block-surface/extensions/validation.js +3009 -0
- package/dist/_pkgs/affine-block-surface/extensions/violation-detail-widget.d.ts +286 -0
- package/dist/_pkgs/affine-block-surface/extensions/violation-detail-widget.js +907 -0
- package/dist/_pkgs/affine-block-surface/extensions/violation-timeline.d.ts +80 -0
- package/dist/_pkgs/affine-block-surface/extensions/violation-timeline.js +123 -0
- package/dist/_pkgs/affine-block-surface/framework-background/def.d.ts +321 -0
- package/dist/_pkgs/affine-block-surface/framework-background/def.js +81 -0
- package/dist/_pkgs/affine-block-surface/framework-background/facts.d.ts +188 -0
- package/dist/_pkgs/affine-block-surface/framework-background/facts.js +284 -0
- package/dist/_pkgs/affine-block-surface/framework-background/index.d.ts +5 -0
- package/dist/_pkgs/affine-block-surface/framework-background/index.js +5 -0
- package/dist/_pkgs/affine-block-surface/framework-background/interaction.d.ts +12 -0
- package/dist/_pkgs/affine-block-surface/framework-background/interaction.js +24 -0
- package/dist/_pkgs/affine-block-surface/framework-background/labels.d.ts +59 -0
- package/dist/_pkgs/affine-block-surface/framework-background/labels.js +117 -0
- package/dist/_pkgs/affine-block-surface/framework-background/renderer.d.ts +8 -0
- package/dist/_pkgs/affine-block-surface/framework-background/renderer.js +238 -0
- package/dist/_pkgs/affine-block-surface/index.d.ts +1 -0
- package/dist/_pkgs/affine-block-surface/index.js +1 -0
- package/dist/_pkgs/affine-block-surface/renderer/canvas-renderer.d.ts +69 -3
- package/dist/_pkgs/affine-block-surface/renderer/canvas-renderer.js +333 -44
- package/dist/_pkgs/affine-block-surface/renderer/dom-renderer.js +18 -2
- package/dist/_pkgs/affine-block-surface/tool/default-tool.js +8 -0
- package/dist/_pkgs/affine-block-surface/utils/font.js +9 -3
- package/dist/_pkgs/affine-block-surface/view.d.ts +17 -0
- package/dist/_pkgs/affine-block-surface/view.js +57 -2
- package/dist/_pkgs/affine-block-table/selection-controller.d.ts +6 -0
- package/dist/_pkgs/affine-block-table/selection-controller.js +24 -1
- package/dist/_pkgs/affine-block-table/table-block.js +8 -2
- package/dist/_pkgs/affine-block-table/table-cell.js +5 -6
- package/dist/_pkgs/affine-block-table/table-keymap.d.ts +18 -0
- package/dist/_pkgs/affine-block-table/table-keymap.js +41 -0
- package/dist/_pkgs/affine-block-table/utils.d.ts +7 -0
- package/dist/_pkgs/affine-block-table/utils.js +12 -0
- package/dist/_pkgs/affine-block-table/view.js +2 -0
- package/dist/_pkgs/affine-components/caption/captioned-block-component.js +2 -1
- package/dist/_pkgs/affine-components/context-menu/button.d.ts +7 -0
- package/dist/_pkgs/affine-components/context-menu/button.js +7 -2
- package/dist/_pkgs/affine-components/context-menu/input.d.ts +4 -0
- package/dist/_pkgs/affine-components/context-menu/input.js +12 -0
- package/dist/_pkgs/affine-components/context-menu/menu-all.d.ts +2 -0
- package/dist/_pkgs/affine-components/context-menu/menu-renderer.js +8 -1
- package/dist/_pkgs/affine-components/context-menu/sub-menu.js +3 -0
- package/dist/_pkgs/affine-components/highlight-dropdown-menu/highlight-duotone-icon.js +8 -8
- package/dist/_pkgs/affine-components/highlight-dropdown-menu/text-duotone-icon.js +11 -11
- package/dist/_pkgs/affine-components/icon-picker/affine-icon-picker-panel.d.ts +28 -0
- package/dist/_pkgs/affine-components/icon-picker/affine-icon-picker-panel.js +231 -0
- package/dist/_pkgs/affine-components/icon-picker/emoji-data.d.ts +40 -0
- package/dist/_pkgs/affine-components/icon-picker/emoji-data.js +99 -0
- package/dist/_pkgs/affine-components/icon-picker/emoji-picker-panel.d.ts +32 -0
- package/dist/_pkgs/affine-components/icon-picker/emoji-picker-panel.js +276 -0
- package/dist/_pkgs/affine-components/icon-picker/icon-data.d.ts +34 -0
- package/dist/_pkgs/affine-components/icon-picker/icon-data.js +83 -0
- package/dist/_pkgs/affine-components/icon-picker/icon-picker.d.ts +39 -0
- package/dist/_pkgs/affine-components/icon-picker/icon-picker.js +233 -0
- package/dist/_pkgs/affine-components/icon-picker/index.d.ts +8 -0
- package/dist/_pkgs/affine-components/icon-picker/index.js +15 -0
- package/dist/_pkgs/affine-components/icon-picker/recent-store.d.ts +8 -0
- package/dist/_pkgs/affine-components/icon-picker/recent-store.js +41 -0
- package/dist/_pkgs/affine-components/icon-picker/styles.d.ts +5 -0
- package/dist/_pkgs/affine-components/icon-picker/styles.js +166 -0
- package/dist/_pkgs/affine-components/icon-picker/types.d.ts +22 -0
- package/dist/_pkgs/affine-components/icon-picker/types.js +10 -0
- package/dist/_pkgs/affine-components/icons/text.js +426 -426
- package/dist/_pkgs/affine-components/open-doc-dropdown-menu/dropdown-menu.d.ts +1 -0
- package/dist/_pkgs/affine-components/portal/portal.d.ts +1 -1
- package/dist/_pkgs/affine-components/toolbar/menu-button.js +1 -0
- package/dist/_pkgs/affine-components/toolbar/toolbar.js +11 -10
- package/dist/_pkgs/affine-foundation/view.js +11 -2
- package/dist/_pkgs/affine-gfx-brush/index.d.ts +1 -0
- package/dist/_pkgs/affine-gfx-brush/index.js +1 -0
- package/dist/_pkgs/affine-gfx-brush/renderer/dom/brush.d.ts +1 -0
- package/dist/_pkgs/affine-gfx-brush/renderer/dom/brush.js +11 -0
- package/dist/_pkgs/affine-gfx-brush/renderer/dom/highlighter.d.ts +1 -0
- package/dist/_pkgs/affine-gfx-brush/renderer/dom/highlighter.js +11 -0
- package/dist/_pkgs/affine-gfx-brush/renderer/dom/index.d.ts +2 -0
- package/dist/_pkgs/affine-gfx-brush/renderer/dom/index.js +2 -0
- package/dist/_pkgs/affine-gfx-brush/renderer/dom/shared.d.ts +14 -0
- package/dist/_pkgs/affine-gfx-brush/renderer/dom/shared.js +54 -0
- package/dist/_pkgs/affine-gfx-brush/renderer/index.d.ts +1 -0
- package/dist/_pkgs/affine-gfx-brush/renderer/index.js +4 -0
- package/dist/_pkgs/affine-gfx-brush/view.d.ts +14 -0
- package/dist/_pkgs/affine-gfx-brush/view.js +29 -3
- package/dist/_pkgs/affine-gfx-connector/connector-manager.js +32 -6
- package/dist/_pkgs/affine-gfx-connector/connector-tool.d.ts +7 -0
- package/dist/_pkgs/affine-gfx-connector/connector-tool.js +2 -1
- package/dist/_pkgs/affine-gfx-connector/direction/direction-reveal.d.ts +123 -0
- package/dist/_pkgs/affine-gfx-connector/direction/direction-reveal.js +281 -0
- package/dist/_pkgs/affine-gfx-connector/direction/direction-widget.d.ts +65 -0
- package/dist/_pkgs/affine-gfx-connector/direction/direction-widget.js +395 -0
- package/dist/_pkgs/affine-gfx-connector/direction/index.d.ts +4 -0
- package/dist/_pkgs/affine-gfx-connector/direction/index.js +4 -0
- package/dist/_pkgs/affine-gfx-connector/direction/invert-direction.d.ts +72 -0
- package/dist/_pkgs/affine-gfx-connector/direction/invert-direction.js +187 -0
- package/dist/_pkgs/affine-gfx-connector/direction/typed-edge.d.ts +69 -0
- package/dist/_pkgs/affine-gfx-connector/direction/typed-edge.js +66 -0
- package/dist/_pkgs/affine-gfx-connector/effects.d.ts +2 -0
- package/dist/_pkgs/affine-gfx-connector/effects.js +2 -0
- package/dist/_pkgs/affine-gfx-connector/element-renderer/connector-dom/index.js +78 -41
- package/dist/_pkgs/affine-gfx-connector/index.d.ts +1 -0
- package/dist/_pkgs/affine-gfx-connector/index.js +1 -0
- package/dist/_pkgs/affine-gfx-connector/toolbar/config.d.ts +50 -0
- package/dist/_pkgs/affine-gfx-connector/toolbar/config.js +67 -1
- package/dist/_pkgs/affine-gfx-connector/view.js +16 -0
- package/dist/_pkgs/affine-gfx-group/command/group-api.js +150 -62
- package/dist/_pkgs/affine-gfx-group/text/edgeless-group-title-editor.js +4 -1
- package/dist/_pkgs/affine-gfx-pointer/tools/pan-tool.d.ts +16 -0
- package/dist/_pkgs/affine-gfx-pointer/tools/pan-tool.js +102 -32
- package/dist/_pkgs/affine-gfx-shape/commands.d.ts +2 -0
- package/dist/_pkgs/affine-gfx-shape/commands.js +33 -0
- package/dist/_pkgs/affine-gfx-shape/element-renderer/shape-dom/index.js +48 -19
- package/dist/_pkgs/affine-gfx-shape/index.d.ts +1 -1
- package/dist/_pkgs/affine-gfx-shape/index.js +1 -1
- package/dist/_pkgs/affine-gfx-shape/text/edgeless-shape-text-editor.d.ts +26 -0
- package/dist/_pkgs/affine-gfx-shape/text/edgeless-shape-text-editor.js +124 -13
- package/dist/_pkgs/affine-gfx-shape/view.js +3 -3
- package/dist/_pkgs/affine-gfx-template/toolbar/template-tool-button.d.ts +2 -0
- package/dist/_pkgs/affine-gfx-template/toolbar/template-tool-button.js +18 -1
- package/dist/_pkgs/affine-gfx-text/edgeless-text-editor.js +9 -5
- package/dist/_pkgs/affine-inline-latex/command.js +46 -26
- package/dist/_pkgs/affine-inline-latex/latex-node/latex-node.d.ts +10 -0
- package/dist/_pkgs/affine-inline-latex/latex-node/latex-node.js +23 -0
- package/dist/_pkgs/affine-inline-link/link-node/affine-link.js +4 -1
- package/dist/_pkgs/affine-inline-preset/adapters/html/html-inline.d.ts +3 -0
- package/dist/_pkgs/affine-inline-preset/adapters/html/html-inline.js +29 -1
- package/dist/_pkgs/affine-model/blocks/code/code-model.d.ts +1 -0
- package/dist/_pkgs/affine-model/blocks/code/code-model.js +1 -0
- package/dist/_pkgs/affine-model/elements/connector/connector.js +24 -0
- package/dist/_pkgs/affine-model/elements/edgy/board.d.ts +32 -0
- package/dist/_pkgs/affine-model/elements/edgy/board.js +112 -0
- package/dist/_pkgs/affine-model/elements/edgy/facets.d.ts +12 -0
- package/dist/_pkgs/affine-model/elements/edgy/facets.js +25 -1
- package/dist/_pkgs/affine-model/elements/edgy/index.d.ts +1 -0
- package/dist/_pkgs/affine-model/elements/edgy/index.js +1 -0
- package/dist/_pkgs/affine-model/elements/framework-background/background.d.ts +42 -0
- package/dist/_pkgs/affine-model/elements/framework-background/background.js +42 -0
- package/dist/_pkgs/affine-model/elements/framework-background/index.d.ts +1 -0
- package/dist/_pkgs/affine-model/elements/framework-background/index.js +1 -0
- package/dist/_pkgs/affine-model/elements/index.d.ts +3 -1
- package/dist/_pkgs/affine-model/elements/index.js +1 -0
- package/dist/_pkgs/affine-model/elements/mindmap/mindmap.js +8 -3
- package/dist/_pkgs/affine-model/elements/mindmap/style.d.ts +10 -0
- package/dist/_pkgs/affine-model/elements/mindmap/style.js +8 -0
- package/dist/_pkgs/affine-model/elements/wardley/wardley.d.ts +21 -29
- package/dist/_pkgs/affine-model/elements/wardley/wardley.js +41 -48
- package/dist/_pkgs/affine-shared/adapters/markdown/delta-converter.d.ts +6 -1
- package/dist/_pkgs/affine-shared/adapters/markdown/delta-converter.js +160 -2
- package/dist/_pkgs/affine-shared/adapters/markdown/markdown.js +5 -1
- package/dist/_pkgs/affine-shared/adapters/types/delta-converter.d.ts +1 -0
- package/dist/_pkgs/affine-shared/adapters/utils/color.d.ts +24 -0
- package/dist/_pkgs/affine-shared/adapters/utils/color.js +280 -0
- package/dist/_pkgs/affine-shared/adapters/utils/index.d.ts +1 -0
- package/dist/_pkgs/affine-shared/adapters/utils/index.js +1 -0
- package/dist/_pkgs/affine-shared/commands/block-crud/get-selected-blocks.js +10 -2
- package/dist/_pkgs/affine-shared/services/audit-service.d.ts +300 -0
- package/dist/_pkgs/affine-shared/services/audit-service.js +228 -0
- package/dist/_pkgs/affine-shared/services/edit-props-store.d.ts +7 -0
- package/dist/_pkgs/affine-shared/services/edit-props-store.js +11 -0
- package/dist/_pkgs/affine-shared/services/font-loader/font-loader-service.d.ts +26 -1
- package/dist/_pkgs/affine-shared/services/font-loader/font-loader-service.js +124 -7
- package/dist/_pkgs/affine-shared/services/index.d.ts +5 -0
- package/dist/_pkgs/affine-shared/services/index.js +5 -0
- package/dist/_pkgs/affine-shared/services/pivot-materiality-publisher.d.ts +129 -0
- package/dist/_pkgs/affine-shared/services/pivot-materiality-publisher.js +311 -0
- package/dist/_pkgs/affine-shared/services/pivot-properties-service.d.ts +217 -0
- package/dist/_pkgs/affine-shared/services/pivot-properties-service.js +114 -0
- package/dist/_pkgs/affine-shared/services/telemetry-service/code-block.d.ts +1 -1
- package/dist/_pkgs/affine-shared/services/telemetry-service/lifecycle.d.ts +182 -0
- package/dist/_pkgs/affine-shared/services/telemetry-service/telemetry-service.d.ts +2 -2
- package/dist/_pkgs/affine-shared/services/telemetry-service/types.d.ts +6 -1
- package/dist/_pkgs/affine-shared/services/toolbar-service/action.d.ts +10 -0
- package/dist/_pkgs/affine-shared/services/toolbar-service/index.d.ts +1 -0
- package/dist/_pkgs/affine-shared/services/toolbar-service/index.js +1 -0
- package/dist/_pkgs/affine-shared/services/toolbar-service/layout.d.ts +134 -0
- package/dist/_pkgs/affine-shared/services/toolbar-service/layout.js +146 -0
- package/dist/_pkgs/affine-shared/services/translation-service/index.d.ts +68 -0
- package/dist/_pkgs/affine-shared/services/translation-service/index.js +39 -0
- package/dist/_pkgs/affine-shared/services/universe-tag-defs-service.d.ts +155 -0
- package/dist/_pkgs/affine-shared/services/universe-tag-defs-service.js +254 -0
- package/dist/_pkgs/affine-shared/utils/dom/point-to-range.d.ts +4 -0
- package/dist/_pkgs/affine-shared/utils/dom/point-to-range.js +58 -2
- package/dist/_pkgs/affine-shared/utils/dom/viewport.d.ts +60 -0
- package/dist/_pkgs/affine-shared/utils/dom/viewport.js +58 -0
- package/dist/_pkgs/affine-shared/utils/print-to-pdf.d.ts +21 -0
- package/dist/_pkgs/affine-shared/utils/print-to-pdf.js +166 -32
- package/dist/_pkgs/affine-shared/utils/zod-schema.d.ts +7 -0
- package/dist/_pkgs/affine-shared/utils/zod-schema.js +27 -1
- package/dist/_pkgs/affine-widget-drag-handle/watchers/edgeless-watcher.d.ts +19 -10
- package/dist/_pkgs/affine-widget-drag-handle/watchers/edgeless-watcher.js +122 -23
- package/dist/_pkgs/affine-widget-drag-handle/watchers/pointer-event-watcher.d.ts +2 -0
- package/dist/_pkgs/affine-widget-drag-handle/watchers/pointer-event-watcher.js +25 -4
- package/dist/_pkgs/affine-widget-edgeless-selected-rect/auto-complete-panel.js +10 -5
- package/dist/_pkgs/affine-widget-edgeless-selected-rect/edgeless-auto-complete.d.ts +15 -1
- package/dist/_pkgs/affine-widget-edgeless-selected-rect/edgeless-auto-complete.js +37 -32
- package/dist/_pkgs/affine-widget-edgeless-selected-rect/edgeless-element-link.js +5 -4
- package/dist/_pkgs/affine-widget-edgeless-selected-rect/edgeless-selected-rect.js +19 -9
- package/dist/_pkgs/affine-widget-edgeless-selected-rect/utils.d.ts +16 -2
- package/dist/_pkgs/affine-widget-edgeless-selected-rect/utils.js +19 -2
- package/dist/_pkgs/affine-widget-edgeless-toolbar/index.d.ts +1 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/index.js +1 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/command-menu.d.ts +38 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/command-menu.js +99 -0
- package/dist/_pkgs/affine-widget-frame-title/edgeless-frame-title-editor.js +4 -1
- package/dist/_pkgs/affine-widget-keyboard-toolbar/icons.js +98 -98
- package/dist/_pkgs/affine-widget-linked-doc/linked-doc-popover.js +2 -15
- package/dist/_pkgs/affine-widget-linked-doc/transformers/markdown.d.ts +10 -1
- package/dist/_pkgs/affine-widget-linked-doc/transformers/markdown.js +133 -6
- package/dist/_pkgs/affine-widget-linked-doc/transformers/utils.d.ts +10 -0
- package/dist/_pkgs/affine-widget-linked-doc/transformers/utils.js +120 -3
- package/dist/_pkgs/affine-widget-linked-doc/utils.d.ts +12 -0
- package/dist/_pkgs/affine-widget-linked-doc/utils.js +33 -0
- package/dist/_pkgs/affine-widget-remote-selection/edgeless/index.js +6 -4
- package/dist/_pkgs/affine-widget-slash-menu/slash-menu-popover.js +8 -4
- package/dist/_pkgs/affine-widget-slash-menu/utils.d.ts +9 -0
- package/dist/_pkgs/affine-widget-slash-menu/utils.js +24 -0
- package/dist/_pkgs/affine-widget-toolbar/toolbar.d.ts +6 -0
- package/dist/_pkgs/affine-widget-toolbar/toolbar.js +34 -6
- package/dist/_pkgs/affine-widget-toolbar/utils.d.ts +146 -3
- package/dist/_pkgs/affine-widget-toolbar/utils.js +738 -56
- package/dist/_pkgs/data-view/core/common/property-menu.js +3 -16
- package/dist/_pkgs/data-view/core/component/tags/multi-tag-select.d.ts +4 -0
- package/dist/_pkgs/data-view/core/component/tags/multi-tag-select.js +28 -1
- package/dist/_pkgs/data-view/core/data-view.d.ts +3 -1
- package/dist/_pkgs/data-view/core/data-view.js +25 -3
- package/dist/_pkgs/data-view/core/detail/field.js +2 -2
- package/dist/_pkgs/data-view/core/detail/selection.d.ts +4 -2
- package/dist/_pkgs/data-view/core/detail/selection.js +23 -7
- package/dist/_pkgs/data-view/core/effect.js +2 -0
- package/dist/_pkgs/data-view/core/filter/eval.js +36 -23
- package/dist/_pkgs/data-view/core/filter/filter-fn/matcher.d.ts +7 -0
- package/dist/_pkgs/data-view/core/filter/filter-fn/matcher.js +12 -0
- package/dist/_pkgs/data-view/core/group-by/compare-date-keys.d.ts +11 -0
- package/dist/_pkgs/data-view/core/group-by/compare-date-keys.js +55 -0
- package/dist/_pkgs/data-view/core/group-by/define.d.ts +6 -0
- package/dist/_pkgs/data-view/core/group-by/define.js +114 -0
- package/dist/_pkgs/data-view/core/group-by/matcher.d.ts +7 -0
- package/dist/_pkgs/data-view/core/group-by/matcher.js +13 -0
- package/dist/_pkgs/data-view/core/group-by/renderer/boolean-group.js +11 -11
- package/dist/_pkgs/data-view/core/group-by/renderer/date-group.d.ts +9 -0
- package/dist/_pkgs/data-view/core/group-by/renderer/date-group.js +97 -0
- package/dist/_pkgs/data-view/core/group-by/setting.js +86 -7
- package/dist/_pkgs/data-view/core/group-by/trait.d.ts +34 -0
- package/dist/_pkgs/data-view/core/group-by/trait.js +106 -10
- package/dist/_pkgs/data-view/core/utils/menu-title.js +17 -17
- package/dist/_pkgs/data-view/property-presets/multi-select/cell-renderer.js +3 -1
- package/dist/_pkgs/data-view/property-presets/number/define.js +2 -1
- package/dist/_pkgs/data-view/property-presets/select/cell-renderer.js +3 -1
- package/dist/_pkgs/data-view/view-presets/calendar/calendar-view-manager.d.ts +70 -0
- package/dist/_pkgs/data-view/view-presets/calendar/calendar-view-manager.js +449 -0
- package/dist/_pkgs/data-view/view-presets/calendar/define.d.ts +10 -0
- package/dist/_pkgs/data-view/view-presets/calendar/define.js +27 -0
- package/dist/_pkgs/data-view/view-presets/calendar/effect.d.ts +1 -0
- package/dist/_pkgs/data-view/view-presets/calendar/effect.js +4 -0
- package/dist/_pkgs/data-view/view-presets/calendar/index.d.ts +6 -0
- package/dist/_pkgs/data-view/view-presets/calendar/index.js +6 -0
- package/dist/_pkgs/data-view/view-presets/calendar/layout.d.ts +37 -0
- package/dist/_pkgs/data-view/view-presets/calendar/layout.js +138 -0
- package/dist/_pkgs/data-view/view-presets/calendar/pc/actions.d.ts +7 -0
- package/dist/_pkgs/data-view/view-presets/calendar/pc/actions.js +68 -0
- package/dist/_pkgs/data-view/view-presets/calendar/pc/dnd.d.ts +32 -0
- package/dist/_pkgs/data-view/view-presets/calendar/pc/dnd.js +159 -0
- package/dist/_pkgs/data-view/view-presets/calendar/pc/effect.d.ts +1 -0
- package/dist/_pkgs/data-view/view-presets/calendar/pc/effect.js +7 -0
- package/dist/_pkgs/data-view/view-presets/calendar/pc/hit-test.d.ts +1 -0
- package/dist/_pkgs/data-view/view-presets/calendar/pc/hit-test.js +28 -0
- package/dist/_pkgs/data-view/view-presets/calendar/pc/styles.d.ts +1 -0
- package/dist/_pkgs/data-view/view-presets/calendar/pc/styles.js +707 -0
- package/dist/_pkgs/data-view/view-presets/calendar/pc/view.d.ts +89 -0
- package/dist/_pkgs/data-view/view-presets/calendar/pc/view.js +837 -0
- package/dist/_pkgs/data-view/view-presets/calendar/renderer.d.ts +2 -0
- package/dist/_pkgs/data-view/view-presets/calendar/renderer.js +8 -0
- package/dist/_pkgs/data-view/view-presets/calendar/source.d.ts +8 -0
- package/dist/_pkgs/data-view/view-presets/calendar/source.js +3 -0
- package/dist/_pkgs/data-view/view-presets/calendar/types.d.ts +79 -0
- package/dist/_pkgs/data-view/view-presets/calendar/types.js +1 -0
- package/dist/_pkgs/data-view/view-presets/convert.js +28 -0
- package/dist/_pkgs/data-view/view-presets/effect.js +2 -0
- package/dist/_pkgs/data-view/view-presets/index.d.ts +2 -0
- package/dist/_pkgs/data-view/view-presets/index.js +3 -0
- package/dist/_pkgs/data-view/view-presets/kanban/kanban-view-manager.js +3 -1
- package/dist/_pkgs/data-view/view-presets/kanban/mobile/cell.js +2 -2
- package/dist/_pkgs/data-view/view-presets/table/collapsed-state.d.ts +18 -0
- package/dist/_pkgs/data-view/view-presets/table/collapsed-state.js +36 -0
- package/dist/_pkgs/data-view/view-presets/table/mobile/cell.js +2 -2
- package/dist/_pkgs/data-view/view-presets/table/mobile/group.d.ts +11 -0
- package/dist/_pkgs/data-view/view-presets/table/mobile/group.js +87 -4
- package/dist/_pkgs/data-view/view-presets/table/pc/cell.d.ts +3 -0
- package/dist/_pkgs/data-view/view-presets/table/pc/cell.js +11 -2
- package/dist/_pkgs/data-view/view-presets/table/pc/controller/hotkeys.d.ts +1 -0
- package/dist/_pkgs/data-view/view-presets/table/pc/controller/hotkeys.js +39 -33
- package/dist/_pkgs/data-view/view-presets/table/pc/group.d.ts +10 -0
- package/dist/_pkgs/data-view/view-presets/table/pc/group.js +84 -5
- package/dist/_pkgs/data-view/view-presets/table/pc-virtual/controller/hotkeys.d.ts +1 -0
- package/dist/_pkgs/data-view/view-presets/table/pc-virtual/controller/hotkeys.js +39 -33
- package/dist/_pkgs/data-view/view-presets/table/pc-virtual/group/top/group-title.js +18 -18
- package/dist/_pkgs/data-view/view-presets/table/pc-virtual/row/cell.d.ts +3 -0
- package/dist/_pkgs/data-view/view-presets/table/pc-virtual/row/cell.js +8 -0
- package/dist/_pkgs/data-view/view-presets/table/table-view-manager.js +3 -1
- package/dist/_pkgs/data-view/view-presets/table/utils.d.ts +3 -0
- package/dist/_pkgs/data-view/view-presets/table/utils.js +16 -1
- package/dist/_pkgs/data-view/widget-presets/tools/presets/view-options/view-options.js +3 -1
- package/dist/_pkgs/global/gfx/curve.js +4 -3
- package/dist/_pkgs/std/clipboard/clipboard.js +13 -3
- package/dist/_pkgs/std/clipboard/utils.d.ts +5 -0
- package/dist/_pkgs/std/clipboard/utils.js +7 -0
- package/dist/_pkgs/std/event/dispatcher.js +27 -1
- package/dist/_pkgs/std/event/keymap.js +16 -6
- package/dist/_pkgs/std/extension/command-registry.d.ts +321 -0
- package/dist/_pkgs/std/extension/command-registry.js +233 -0
- package/dist/_pkgs/std/extension/dnd/index.d.ts +1 -1
- package/dist/_pkgs/std/extension/index.d.ts +2 -0
- package/dist/_pkgs/std/extension/index.js +2 -0
- package/dist/_pkgs/std/extension/translation-manifest.d.ts +49 -0
- package/dist/_pkgs/std/extension/translation-manifest.js +71 -0
- package/dist/_pkgs/std/gfx/index.d.ts +7 -3
- package/dist/_pkgs/std/gfx/index.js +6 -2
- package/dist/_pkgs/std/gfx/interactivity/gfx-view-event-handler.js +6 -1
- package/dist/_pkgs/std/gfx/interactivity/manager.d.ts +8 -0
- package/dist/_pkgs/std/gfx/interactivity/manager.js +18 -0
- package/dist/_pkgs/std/gfx/layer.d.ts +1 -1
- package/dist/_pkgs/std/gfx/layer.js +1 -2
- package/dist/_pkgs/std/gfx/model/surface/decorators/field.js +9 -0
- package/dist/_pkgs/std/gfx/model/surface/decorators/index.d.ts +2 -2
- package/dist/_pkgs/std/gfx/model/surface/decorators/index.js +2 -2
- package/dist/_pkgs/std/gfx/model/surface/decorators/local.d.ts +14 -0
- package/dist/_pkgs/std/gfx/model/surface/decorators/local.js +22 -0
- package/dist/_pkgs/std/gfx/model/surface/decorators/observer.d.ts +2 -0
- package/dist/_pkgs/std/gfx/model/surface/decorators/observer.js +40 -1
- package/dist/_pkgs/std/gfx/model/surface/element-model.d.ts +282 -0
- package/dist/_pkgs/std/gfx/model/surface/element-model.js +436 -25
- package/dist/_pkgs/std/gfx/model/surface/pivot.d.ts +48 -0
- package/dist/_pkgs/std/gfx/model/surface/pivot.js +34 -0
- package/dist/_pkgs/std/gfx/model/surface/role.d.ts +153 -0
- package/dist/_pkgs/std/gfx/model/surface/role.js +115 -0
- package/dist/_pkgs/std/gfx/model/surface/surface-model.d.ts +70 -0
- package/dist/_pkgs/std/gfx/model/surface/surface-model.js +304 -17
- package/dist/_pkgs/std/gfx/model/surface/tags.d.ts +77 -0
- package/dist/_pkgs/std/gfx/model/surface/tags.js +246 -0
- package/dist/_pkgs/std/gfx/perf.d.ts +10 -0
- package/dist/_pkgs/std/gfx/perf.js +30 -0
- package/dist/_pkgs/std/gfx/tool/tool-controller.d.ts +13 -0
- package/dist/_pkgs/std/gfx/tool/tool-controller.js +26 -0
- package/dist/_pkgs/std/gfx/viewport.d.ts +12 -0
- package/dist/_pkgs/std/gfx/viewport.js +19 -1
- package/dist/_pkgs/std/inline/services/event.d.ts +2 -0
- package/dist/_pkgs/std/inline/services/event.js +96 -21
- package/dist/_pkgs/std/utils/layer.js +2 -6
- package/dist/_pkgs/std/utils/tree.d.ts +14 -0
- package/dist/_pkgs/std/utils/tree.js +59 -8
- package/dist/_pkgs/std/view/element/gfx-block-component.js +23 -13
- package/dist/_pkgs/store/extension/workspace/workspace-meta.d.ts +10 -0
- package/dist/_pkgs/store/model/block/flat-sync-controller.js +2 -12
- package/dist/_pkgs/store/model/store/crud.js +7 -4
- package/dist/_pkgs/store/reactive/flat-native-y/index.d.ts +1 -1
- package/dist/_pkgs/store/reactive/flat-native-y/index.js +24 -2
- package/dist/commands.d.ts +58 -0
- package/dist/commands.js +66 -0
- package/dist/extensions/command-telemetry.d.ts +21 -0
- package/dist/extensions/command-telemetry.js +89 -0
- package/dist/extensions/store.d.ts +9 -4
- package/dist/extensions/store.js +27 -24
- package/dist/extensions/view.d.ts +9 -4
- package/dist/extensions/view.js +23 -8
- package/dist/flags.d.ts +98 -21
- package/dist/flags.js +103 -22
- package/dist/frameworks.d.ts +45 -0
- package/dist/frameworks.js +154 -0
- package/dist/schemas.d.ts +8 -5
- package/dist/schemas.js +28 -32
- package/dist/shortcuts.d.ts +16 -16
- package/dist/shortcuts.js +8 -36
- package/dist/translations.d.ts +56 -0
- package/dist/translations.js +112 -0
- package/package.json +16 -4
- package/dist/_pkgs/affine-block-root/keyboard/shortcuts.d.ts +0 -8
- package/dist/_pkgs/affine-block-root/keyboard/shortcuts.js +0 -48
- package/dist/_pkgs/affine-gfx-shape/shortcuts.d.ts +0 -6
- package/dist/_pkgs/affine-gfx-shape/shortcuts.js +0 -28
- package/dist/_pkgs/data-view/core/utils/cache.d.ts +0 -5
- package/dist/_pkgs/data-view/core/utils/cache.js +0 -28
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { ConnectorElementModel } from '../../affine-model/index.js';
|
|
2
|
+
import type { BlockStdScope } from '../../std/index.js';
|
|
3
|
+
import type { EdgeDirectionDef, RoleDef, RoleDefs } from '../../std/gfx/index.js';
|
|
4
|
+
/**
|
|
5
|
+
* "Is this connector a TYPED EDGE, and if so what does it say?" — the one
|
|
6
|
+
* question `docs/adr/0010` turns on.
|
|
7
|
+
*
|
|
8
|
+
* For an element whose `role` resolves to a `RoleDef` with `kind: 'edge'`, the
|
|
9
|
+
* persisted pair `source → target` IS the relation's orientation and part of
|
|
10
|
+
* the document's meaning. For a connector with no role — the generalist
|
|
11
|
+
* connector, the market glyph's wiring, an EDGY decoration — the two ends stay
|
|
12
|
+
* what they always were: the first and last point of a path, carrying no claim.
|
|
13
|
+
*
|
|
14
|
+
* Everything M1, M2 and M3 do is gated on this, and none of them knows a
|
|
15
|
+
* framework's name: the vocabulary is registered by whoever owns it
|
|
16
|
+
* (`RoleVocabularyExtension`), and this file only reads `kind` and the verb.
|
|
17
|
+
*/
|
|
18
|
+
/** A connector, plus the declaration that makes its direction mean something. */
|
|
19
|
+
export interface TypedEdge {
|
|
20
|
+
model: ConnectorElementModel;
|
|
21
|
+
role: RoleDef;
|
|
22
|
+
/** The verb and the gesture hint, when the role declares them. */
|
|
23
|
+
direction?: EdgeDirectionDef;
|
|
24
|
+
}
|
|
25
|
+
/** Every role vocabulary registered in this editor assembly. */
|
|
26
|
+
export declare function roleVocabularies(std: BlockStdScope): readonly RoleDefs[];
|
|
27
|
+
/**
|
|
28
|
+
* `element` read as a typed edge, or `null`.
|
|
29
|
+
*
|
|
30
|
+
* Three ways to be `null`, and all three are deliberate:
|
|
31
|
+
*
|
|
32
|
+
* - it is not a connector (the reveal is about edges, not about nodes);
|
|
33
|
+
* - it carries no role, or one no loaded framework declares — nothing is
|
|
34
|
+
* claimed about its ends and nothing is shown;
|
|
35
|
+
* - it carries a role of `kind: 'node'`, which on a connector is a mistake
|
|
36
|
+
* somebody's data made and is treated as neutral rather than guessed at.
|
|
37
|
+
*/
|
|
38
|
+
export declare function asTypedEdge(vocabularies: readonly RoleDefs[], element: unknown): TypedEdge | null;
|
|
39
|
+
/**
|
|
40
|
+
* Whether both ends of the edge are actually BOUND to an element.
|
|
41
|
+
*
|
|
42
|
+
* The guard `docs/adr/0010` asks for by name: an edge with a free endpoint
|
|
43
|
+
* relates nothing to nothing. Releasing the link tool over empty canvas
|
|
44
|
+
* produces one at any time, so this is not an edge case — it is a state the
|
|
45
|
+
* product reaches on the first misfire, and the honest answer there is silence.
|
|
46
|
+
* No chevron, no verb, and no W4 verdict either (the rule family applies the
|
|
47
|
+
* same test).
|
|
48
|
+
*/
|
|
49
|
+
export declare function edgeIsBound(model: ConnectorElementModel): boolean;
|
|
50
|
+
/** A word to say, and the fallback to use when the host has no catalogue. */
|
|
51
|
+
export interface EdgeVerb {
|
|
52
|
+
key: string;
|
|
53
|
+
fallback?: string;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* The ONE word a revealed edge is labelled with — the role's verb.
|
|
57
|
+
*
|
|
58
|
+
* Only the verb, since the PO recette of 02/08/2026: the label used to carry
|
|
59
|
+
* the whole sentence, `Kettle depends on Electricity`, and a sentence laid on a
|
|
60
|
+
* short link is longer than the link, so it covered the two components it was
|
|
61
|
+
* naming. The names are already on the canvas at both ends of the line; what
|
|
62
|
+
* the drawing does not say is what the line MEANS, and that is the verb.
|
|
63
|
+
*
|
|
64
|
+
* The role's LABEL when it declares no verb, because the label is the only mark
|
|
65
|
+
* left and an unlabelled arrow says which way without ever saying what. `null`
|
|
66
|
+
* when the role declares neither, which is the one case where the library
|
|
67
|
+
* genuinely has nothing to add.
|
|
68
|
+
*/
|
|
69
|
+
export declare function edgeVerbOf(edge: TypedEdge): EdgeVerb | null;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { ConnectorElementModel } from '../../affine-model/index.js';
|
|
2
|
+
import { findRoleDef, RoleVocabularyIdentifier } from '../../std/gfx/index.js';
|
|
3
|
+
/** Every role vocabulary registered in this editor assembly. */
|
|
4
|
+
export function roleVocabularies(std) {
|
|
5
|
+
return [...std.provider.getAll(RoleVocabularyIdentifier).values()];
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* `element` read as a typed edge, or `null`.
|
|
9
|
+
*
|
|
10
|
+
* Three ways to be `null`, and all three are deliberate:
|
|
11
|
+
*
|
|
12
|
+
* - it is not a connector (the reveal is about edges, not about nodes);
|
|
13
|
+
* - it carries no role, or one no loaded framework declares — nothing is
|
|
14
|
+
* claimed about its ends and nothing is shown;
|
|
15
|
+
* - it carries a role of `kind: 'node'`, which on a connector is a mistake
|
|
16
|
+
* somebody's data made and is treated as neutral rather than guessed at.
|
|
17
|
+
*/
|
|
18
|
+
export function asTypedEdge(vocabularies, element) {
|
|
19
|
+
if (!(element instanceof ConnectorElementModel))
|
|
20
|
+
return null;
|
|
21
|
+
const role = findRoleDef(vocabularies, element.role);
|
|
22
|
+
if (role === undefined || role.kind !== 'edge')
|
|
23
|
+
return null;
|
|
24
|
+
return role.direction
|
|
25
|
+
? { model: element, role, direction: role.direction }
|
|
26
|
+
: { model: element, role };
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Whether both ends of the edge are actually BOUND to an element.
|
|
30
|
+
*
|
|
31
|
+
* The guard `docs/adr/0010` asks for by name: an edge with a free endpoint
|
|
32
|
+
* relates nothing to nothing. Releasing the link tool over empty canvas
|
|
33
|
+
* produces one at any time, so this is not an edge case — it is a state the
|
|
34
|
+
* product reaches on the first misfire, and the honest answer there is silence.
|
|
35
|
+
* No chevron, no verb, and no W4 verdict either (the rule family applies the
|
|
36
|
+
* same test).
|
|
37
|
+
*/
|
|
38
|
+
export function edgeIsBound(model) {
|
|
39
|
+
return Boolean(model.source?.id) && Boolean(model.target?.id);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* The ONE word a revealed edge is labelled with — the role's verb.
|
|
43
|
+
*
|
|
44
|
+
* Only the verb, since the PO recette of 02/08/2026: the label used to carry
|
|
45
|
+
* the whole sentence, `Kettle depends on Electricity`, and a sentence laid on a
|
|
46
|
+
* short link is longer than the link, so it covered the two components it was
|
|
47
|
+
* naming. The names are already on the canvas at both ends of the line; what
|
|
48
|
+
* the drawing does not say is what the line MEANS, and that is the verb.
|
|
49
|
+
*
|
|
50
|
+
* The role's LABEL when it declares no verb, because the label is the only mark
|
|
51
|
+
* left and an unlabelled arrow says which way without ever saying what. `null`
|
|
52
|
+
* when the role declares neither, which is the one case where the library
|
|
53
|
+
* genuinely has nothing to add.
|
|
54
|
+
*/
|
|
55
|
+
export function edgeVerbOf(edge) {
|
|
56
|
+
const verb = edge.direction
|
|
57
|
+
? { key: edge.direction.verbKey, fallback: edge.direction.verbFallback }
|
|
58
|
+
: edge.role.labelKey !== undefined
|
|
59
|
+
? { key: edge.role.labelKey, fallback: edge.role.labelFallback }
|
|
60
|
+
: null;
|
|
61
|
+
if (verb === null)
|
|
62
|
+
return null;
|
|
63
|
+
return verb.fallback === undefined
|
|
64
|
+
? { key: verb.key }
|
|
65
|
+
: { key: verb.key, fallback: verb.fallback };
|
|
66
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { EdgelessConnectorHandle } from './components/connector-handle.js';
|
|
2
|
+
import { EdgeDirectionWidget } from './direction/direction-widget.js';
|
|
2
3
|
import { EdgelessConnectorLabelEditor } from './text/edgeless-connector-label-editor.js';
|
|
3
4
|
import { EdgelessConnectorMenu } from './toolbar/connector-menu.js';
|
|
4
5
|
import { EdgelessConnectorToolButton } from './toolbar/connector-tool-button.js';
|
|
@@ -9,5 +10,6 @@ declare global {
|
|
|
9
10
|
'edgeless-connector-menu': EdgelessConnectorMenu;
|
|
10
11
|
'edgeless-connector-label-editor': EdgelessConnectorLabelEditor;
|
|
11
12
|
'edgeless-connector-handle': EdgelessConnectorHandle;
|
|
13
|
+
'affine-edge-direction-widget': EdgeDirectionWidget;
|
|
12
14
|
}
|
|
13
15
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { EdgelessConnectorHandle } from './components/connector-handle.js';
|
|
2
|
+
import { EDGE_DIRECTION_WIDGET, EdgeDirectionWidget, } from './direction/direction-widget.js';
|
|
2
3
|
import { EdgelessConnectorLabelEditor } from './text/edgeless-connector-label-editor.js';
|
|
3
4
|
import { EdgelessConnectorMenu } from './toolbar/connector-menu.js';
|
|
4
5
|
import { EdgelessConnectorToolButton } from './toolbar/connector-tool-button.js';
|
|
@@ -7,4 +8,5 @@ export function effects() {
|
|
|
7
8
|
customElements.define('edgeless-connector-menu', EdgelessConnectorMenu);
|
|
8
9
|
customElements.define('edgeless-connector-label-editor', EdgelessConnectorLabelEditor);
|
|
9
10
|
customElements.define('edgeless-connector-handle', EdgelessConnectorHandle);
|
|
11
|
+
customElements.define(EDGE_DIRECTION_WIDGET, EdgeDirectionWidget);
|
|
10
12
|
}
|
|
@@ -2,6 +2,13 @@ import { ConnectorMode, DefaultTheme, } from '../../../affine-model/index.js';
|
|
|
2
2
|
import { PointLocation, SVGPathBuilder } from '../../../global/gfx/index.js';
|
|
3
3
|
import { isConnectorWithLabel } from '../../connector-manager.js';
|
|
4
4
|
import { DEFAULT_ARROW_SIZE } from '../utils.js';
|
|
5
|
+
const SVG_NS = 'http://www.w3.org/2000/svg';
|
|
6
|
+
/**
|
|
7
|
+
* The nodes a connector host already owns, kept across renders. Rebuilding the
|
|
8
|
+
* whole `<svg>` subtree on every frame allocated one element per connector per
|
|
9
|
+
* pan, zoom or drag; the attributes are cheap to overwrite in place.
|
|
10
|
+
*/
|
|
11
|
+
const retainedConnectorDom = new WeakMap();
|
|
5
12
|
function calculatePathBounds(path) {
|
|
6
13
|
if (path.length === 0) {
|
|
7
14
|
return { minX: 0, minY: 0, maxX: 0, maxY: 0 };
|
|
@@ -40,7 +47,7 @@ function createConnectorPath(points, mode) {
|
|
|
40
47
|
return pathBuilder.build();
|
|
41
48
|
}
|
|
42
49
|
function createArrowMarker(id, style, color, strokeWidth, isStart = false) {
|
|
43
|
-
const marker = document.createElementNS(
|
|
50
|
+
const marker = document.createElementNS(SVG_NS, 'marker');
|
|
44
51
|
const size = DEFAULT_ARROW_SIZE * (strokeWidth / 2);
|
|
45
52
|
marker.id = id;
|
|
46
53
|
marker.setAttribute('viewBox', '0 0 20 20');
|
|
@@ -52,7 +59,7 @@ function createArrowMarker(id, style, color, strokeWidth, isStart = false) {
|
|
|
52
59
|
marker.setAttribute('markerUnits', 'strokeWidth');
|
|
53
60
|
switch (style) {
|
|
54
61
|
case 'Arrow': {
|
|
55
|
-
const path = document.createElementNS(
|
|
62
|
+
const path = document.createElementNS(SVG_NS, 'path');
|
|
56
63
|
path.setAttribute('d', isStart ? 'M 20 5 L 10 10 L 20 15 Z' : 'M 0 5 L 10 10 L 0 15 Z');
|
|
57
64
|
path.setAttribute('fill', color);
|
|
58
65
|
path.setAttribute('stroke', color);
|
|
@@ -60,7 +67,7 @@ function createArrowMarker(id, style, color, strokeWidth, isStart = false) {
|
|
|
60
67
|
break;
|
|
61
68
|
}
|
|
62
69
|
case 'Triangle': {
|
|
63
|
-
const path = document.createElementNS(
|
|
70
|
+
const path = document.createElementNS(SVG_NS, 'path');
|
|
64
71
|
path.setAttribute('d', isStart ? 'M 20 7 L 12 10 L 20 13 Z' : 'M 0 7 L 8 10 L 0 13 Z');
|
|
65
72
|
path.setAttribute('fill', color);
|
|
66
73
|
path.setAttribute('stroke', color);
|
|
@@ -68,7 +75,7 @@ function createArrowMarker(id, style, color, strokeWidth, isStart = false) {
|
|
|
68
75
|
break;
|
|
69
76
|
}
|
|
70
77
|
case 'Circle': {
|
|
71
|
-
const circle = document.createElementNS(
|
|
78
|
+
const circle = document.createElementNS(SVG_NS, 'circle');
|
|
72
79
|
circle.setAttribute('cx', '10');
|
|
73
80
|
circle.setAttribute('cy', '10');
|
|
74
81
|
circle.setAttribute('r', '4');
|
|
@@ -78,7 +85,7 @@ function createArrowMarker(id, style, color, strokeWidth, isStart = false) {
|
|
|
78
85
|
break;
|
|
79
86
|
}
|
|
80
87
|
case 'Diamond': {
|
|
81
|
-
const path = document.createElementNS(
|
|
88
|
+
const path = document.createElementNS(SVG_NS, 'path');
|
|
82
89
|
path.setAttribute('d', 'M 10 6 L 14 10 L 10 14 L 6 10 Z');
|
|
83
90
|
path.setAttribute('fill', color);
|
|
84
91
|
path.setAttribute('stroke', color);
|
|
@@ -88,14 +95,53 @@ function createArrowMarker(id, style, color, strokeWidth, isStart = false) {
|
|
|
88
95
|
}
|
|
89
96
|
return marker;
|
|
90
97
|
}
|
|
91
|
-
function
|
|
98
|
+
function clearRetainedConnectorDom(element) {
|
|
99
|
+
retainedConnectorDom.delete(element);
|
|
100
|
+
element.replaceChildren();
|
|
101
|
+
}
|
|
102
|
+
function getRetainedConnectorDom(element) {
|
|
103
|
+
const existing = retainedConnectorDom.get(element);
|
|
104
|
+
if (existing) {
|
|
105
|
+
return existing;
|
|
106
|
+
}
|
|
107
|
+
const svg = document.createElementNS(SVG_NS, 'svg');
|
|
108
|
+
svg.style.position = 'absolute';
|
|
109
|
+
svg.style.overflow = 'visible';
|
|
110
|
+
svg.style.pointerEvents = 'none';
|
|
111
|
+
const defs = document.createElementNS(SVG_NS, 'defs');
|
|
112
|
+
const path = document.createElementNS(SVG_NS, 'path');
|
|
113
|
+
path.setAttribute('fill', 'none');
|
|
114
|
+
path.setAttribute('stroke-linecap', 'round');
|
|
115
|
+
path.setAttribute('stroke-linejoin', 'round');
|
|
116
|
+
svg.append(defs, path);
|
|
117
|
+
element.replaceChildren(svg);
|
|
118
|
+
const retained = {
|
|
119
|
+
svg,
|
|
120
|
+
defs,
|
|
121
|
+
path,
|
|
122
|
+
label: null,
|
|
123
|
+
};
|
|
124
|
+
retainedConnectorDom.set(element, retained);
|
|
125
|
+
return retained;
|
|
126
|
+
}
|
|
127
|
+
function getOrCreateLabelElement(retained) {
|
|
128
|
+
if (retained.label) {
|
|
129
|
+
return retained.label;
|
|
130
|
+
}
|
|
131
|
+
const label = document.createElement('div');
|
|
132
|
+
retained.svg.insertAdjacentElement('afterend', label);
|
|
133
|
+
retained.label = label;
|
|
134
|
+
return label;
|
|
135
|
+
}
|
|
136
|
+
function renderConnectorLabel(model, retained, renderer, zoom) {
|
|
92
137
|
if (!isConnectorWithLabel(model) || !model.labelXYWH) {
|
|
138
|
+
retained.label?.remove();
|
|
139
|
+
retained.label = null;
|
|
93
140
|
return;
|
|
94
141
|
}
|
|
95
142
|
const [lx, ly, lw, lh] = model.labelXYWH;
|
|
96
143
|
const { labelStyle: { color, fontSize, fontWeight, fontStyle, fontFamily, textAlign, }, } = model;
|
|
97
|
-
|
|
98
|
-
const labelElement = document.createElement('div');
|
|
144
|
+
const labelElement = getOrCreateLabelElement(retained);
|
|
99
145
|
labelElement.style.position = 'absolute';
|
|
100
146
|
labelElement.style.left = `${lx * zoom}px`;
|
|
101
147
|
labelElement.style.top = `${ly * zoom}px`;
|
|
@@ -122,10 +168,7 @@ function renderConnectorLabel(model, container, renderer, zoom) {
|
|
|
122
168
|
labelElement.style.whiteSpace = 'pre-wrap';
|
|
123
169
|
labelElement.style.wordWrap = 'break-word';
|
|
124
170
|
// Add text content
|
|
125
|
-
|
|
126
|
-
labelElement.textContent = model.text.toString();
|
|
127
|
-
}
|
|
128
|
-
container.append(labelElement);
|
|
171
|
+
labelElement.textContent = model.text ? model.text.toString() : '';
|
|
129
172
|
}
|
|
130
173
|
/**
|
|
131
174
|
* Renders a ConnectorElementModel to a given HTMLElement using DOM/SVG.
|
|
@@ -138,12 +181,12 @@ function renderConnectorLabel(model, container, renderer, zoom) {
|
|
|
138
181
|
export const connectorDomRenderer = (model, element, renderer) => {
|
|
139
182
|
const { zoom } = renderer.viewport;
|
|
140
183
|
const { mode, path: points, strokeStyle, frontEndpointStyle, rearEndpointStyle, strokeWidth, stroke, } = model;
|
|
141
|
-
// Clear previous content
|
|
142
|
-
element.innerHTML = '';
|
|
143
184
|
// Early return if no path points
|
|
144
185
|
if (!points || points.length < 2) {
|
|
186
|
+
clearRetainedConnectorDom(element);
|
|
145
187
|
return;
|
|
146
188
|
}
|
|
189
|
+
const retained = getRetainedConnectorDom(element);
|
|
147
190
|
// Calculate bounds for the SVG viewBox
|
|
148
191
|
const pathBounds = calculatePathBounds(points);
|
|
149
192
|
const padding = Math.max(strokeWidth * 2, 20); // Add padding for arrows
|
|
@@ -151,8 +194,7 @@ export const connectorDomRenderer = (model, element, renderer) => {
|
|
|
151
194
|
const svgHeight = (pathBounds.maxY - pathBounds.minY + padding * 2) * zoom;
|
|
152
195
|
const offsetX = pathBounds.minX - padding;
|
|
153
196
|
const offsetY = pathBounds.minY - padding;
|
|
154
|
-
|
|
155
|
-
const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
|
|
197
|
+
const { defs, path, svg } = retained;
|
|
156
198
|
svg.style.position = 'absolute';
|
|
157
199
|
svg.style.left = `${offsetX * zoom}px`;
|
|
158
200
|
svg.style.top = `${offsetY * zoom}px`;
|
|
@@ -161,25 +203,20 @@ export const connectorDomRenderer = (model, element, renderer) => {
|
|
|
161
203
|
svg.style.overflow = 'visible';
|
|
162
204
|
svg.style.pointerEvents = 'none';
|
|
163
205
|
svg.setAttribute('viewBox', `0 0 ${svgWidth / zoom} ${svgHeight / zoom}`);
|
|
164
|
-
// Create defs for markers
|
|
165
|
-
const defs = document.createElementNS('http://www.w3.org/2000/svg', 'defs');
|
|
166
|
-
svg.append(defs);
|
|
167
206
|
const strokeColor = renderer.getColorValue(stroke, DefaultTheme.connectorColor, true);
|
|
168
207
|
// Create markers for endpoints
|
|
208
|
+
const markers = [];
|
|
169
209
|
let startMarkerId = '';
|
|
170
210
|
let endMarkerId = '';
|
|
171
211
|
if (frontEndpointStyle !== 'None') {
|
|
172
212
|
startMarkerId = `start-marker-${model.id}`;
|
|
173
|
-
|
|
174
|
-
defs.append(startMarker);
|
|
213
|
+
markers.push(createArrowMarker(startMarkerId, frontEndpointStyle, strokeColor, strokeWidth, true));
|
|
175
214
|
}
|
|
176
215
|
if (rearEndpointStyle !== 'None') {
|
|
177
216
|
endMarkerId = `end-marker-${model.id}`;
|
|
178
|
-
|
|
179
|
-
defs.append(endMarker);
|
|
217
|
+
markers.push(createArrowMarker(endMarkerId, rearEndpointStyle, strokeColor, strokeWidth, false));
|
|
180
218
|
}
|
|
181
|
-
|
|
182
|
-
const pathElement = document.createElementNS('http://www.w3.org/2000/svg', 'path');
|
|
219
|
+
defs.replaceChildren(...markers);
|
|
183
220
|
// Adjust points relative to the SVG coordinate system
|
|
184
221
|
const adjustedPoints = points.map(point => {
|
|
185
222
|
const adjustedPoint = new PointLocation([
|
|
@@ -201,32 +238,32 @@ export const connectorDomRenderer = (model, element, renderer) => {
|
|
|
201
238
|
return adjustedPoint;
|
|
202
239
|
});
|
|
203
240
|
const pathData = createConnectorPath(adjustedPoints, mode);
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
pathElement.setAttribute('fill', 'none');
|
|
208
|
-
pathElement.setAttribute('stroke-linecap', 'round');
|
|
209
|
-
pathElement.setAttribute('stroke-linejoin', 'round');
|
|
210
|
-
// Apply stroke style
|
|
241
|
+
path.setAttribute('d', pathData);
|
|
242
|
+
path.setAttribute('stroke', strokeColor);
|
|
243
|
+
path.setAttribute('stroke-width', String(strokeWidth));
|
|
211
244
|
if (strokeStyle === 'dash') {
|
|
212
|
-
|
|
245
|
+
path.setAttribute('stroke-dasharray', '12,12');
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
path.removeAttribute('stroke-dasharray');
|
|
213
249
|
}
|
|
214
|
-
// Apply markers
|
|
215
250
|
if (startMarkerId) {
|
|
216
|
-
|
|
251
|
+
path.setAttribute('marker-start', `url(#${startMarkerId})`);
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
path.removeAttribute('marker-start');
|
|
217
255
|
}
|
|
218
256
|
if (endMarkerId) {
|
|
219
|
-
|
|
257
|
+
path.setAttribute('marker-end', `url(#${endMarkerId})`);
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
path.removeAttribute('marker-end');
|
|
220
261
|
}
|
|
221
|
-
svg.append(pathElement);
|
|
222
|
-
element.append(svg);
|
|
223
262
|
// Set element size and position
|
|
224
263
|
element.style.width = `${model.w * zoom}px`;
|
|
225
264
|
element.style.height = `${model.h * zoom}px`;
|
|
226
265
|
element.style.overflow = 'visible';
|
|
227
266
|
element.style.pointerEvents = 'none';
|
|
228
|
-
// Set z-index for layering
|
|
229
|
-
element.style.zIndex = renderer.layerManager.getZIndex(model).toString();
|
|
230
267
|
// Render label if present
|
|
231
|
-
renderConnectorLabel(model,
|
|
268
|
+
renderConnectorLabel(model, retained, renderer, zoom);
|
|
232
269
|
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * from './adapter/index.js';
|
|
2
2
|
export * from './connector-manager.js';
|
|
3
3
|
export * from './connector-tool.js';
|
|
4
|
+
export * from './direction/index.js';
|
|
4
5
|
export * from './element-renderer/index.js';
|
|
5
6
|
export { ConnectorDomRendererExtension } from './element-renderer/connector-dom.js';
|
|
6
7
|
export * from './element-transform/index.js';
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * from './adapter/index.js';
|
|
2
2
|
export * from './connector-manager.js';
|
|
3
3
|
export * from './connector-tool.js';
|
|
4
|
+
export * from './direction/index.js';
|
|
4
5
|
export * from './element-renderer/index.js';
|
|
5
6
|
export { ConnectorDomRendererExtension } from './element-renderer/connector-dom.js';
|
|
6
7
|
export * from './element-transform/index.js';
|
|
@@ -16,10 +16,60 @@ export declare const connectorToolbarConfig: {
|
|
|
16
16
|
readonly id: "b.flip-direction";
|
|
17
17
|
readonly icon: import("lit-html").TemplateResult<1>;
|
|
18
18
|
readonly tooltip: "Flip direction";
|
|
19
|
+
/**
|
|
20
|
+
* Hidden for a TYPED EDGE (`docs/adr/0010` M3).
|
|
21
|
+
*
|
|
22
|
+
* This entry swaps the two endpoint STYLES and does not touch
|
|
23
|
+
* `source`/`target`. On a generalist connector that is honest — it is
|
|
24
|
+
* an arrowhead menu. On an edge whose persisted direction is the
|
|
25
|
+
* relation's orientation it would move the only visible sign of that
|
|
26
|
+
* relation while leaving the relation intact: the picture and the
|
|
27
|
+
* data would then disagree. Such an edge gets `d.invert-direction`
|
|
28
|
+
* instead, which moves both.
|
|
29
|
+
*
|
|
30
|
+
* Not gated on any framework flag: the vocabulary that answers "is
|
|
31
|
+
* this a typed edge" is registered by the always-on render extension,
|
|
32
|
+
* so a Wardley link stays protected on a board whose Wardley tooling
|
|
33
|
+
* is switched off.
|
|
34
|
+
*
|
|
35
|
+
* `some`, so a MIXED selection hides it too: one swap applied to
|
|
36
|
+
* every selected connector would still lie about the typed one, and
|
|
37
|
+
* `b.invert-direction` appears in its place and acts on that half.
|
|
38
|
+
* A typed edge with a free end also keeps it hidden — the entry is
|
|
39
|
+
* hidden by what the element IS, never by what it happens to bind.
|
|
40
|
+
*/
|
|
41
|
+
readonly when: (ctx: ToolbarContext) => boolean;
|
|
19
42
|
readonly run: (ctx: ToolbarContext) => void;
|
|
20
43
|
}, {
|
|
21
44
|
readonly id: "c.end-point-style";
|
|
22
45
|
readonly content: (ctx: ToolbarContext) => import("lit-html").TemplateResult<1> | null;
|
|
46
|
+
}, {
|
|
47
|
+
/**
|
|
48
|
+
* **Reverse direction** — M3 of `docs/adr/0010`, and the only
|
|
49
|
+
* supported inversion of a typed edge.
|
|
50
|
+
*
|
|
51
|
+
* It sits where `b.flip-direction` would have been, appears only when
|
|
52
|
+
* every selected connector is a typed edge, and runs the registered
|
|
53
|
+
* command rather than a private copy of it — so the contextual
|
|
54
|
+
* toolbar, the palette, Settings › Shortcuts and the agent all reach
|
|
55
|
+
* the same behaviour and the same single telemetry emission.
|
|
56
|
+
*/
|
|
57
|
+
readonly id: "b.invert-direction";
|
|
58
|
+
readonly icon: import("lit-html").TemplateResult<1>;
|
|
59
|
+
readonly tooltip: "Reverse direction";
|
|
60
|
+
/**
|
|
61
|
+
* Shown as soon as the selection holds ONE reversible typed edge, and
|
|
62
|
+
* it then acts on the typed edges of that selection and on nothing
|
|
63
|
+
* else — `invertibleEdges` is the same filter on both sides.
|
|
64
|
+
*
|
|
65
|
+
* `some`, not `every`, on purpose: a selection mixing a Wardley link
|
|
66
|
+
* with a plain arrow used to show NEITHER this entry (not every model
|
|
67
|
+
* is typed) nor `b.flip-direction` (some model is), so lassoing two
|
|
68
|
+
* connectors silently took the direction affordance away. A partial
|
|
69
|
+
* gesture that says what it did beats a menu that vanishes.
|
|
70
|
+
*/
|
|
71
|
+
readonly when: (ctx: ToolbarContext) => boolean;
|
|
72
|
+
readonly run: (ctx: ToolbarContext) => void;
|
|
23
73
|
}, {
|
|
24
74
|
readonly id: "d.connector-shape";
|
|
25
75
|
readonly content: (ctx: ToolbarContext) => import("lit-html").TemplateResult<1> | null;
|
|
@@ -7,10 +7,12 @@ import { getMostCommonResolvedValue, getMostCommonValue, } from '../../affine-sh
|
|
|
7
7
|
import { getRootBlock, LINE_STYLE_LIST, renderMenu, } from '../../affine-widget-edgeless-toolbar/index.js';
|
|
8
8
|
import { Bound } from '../../global/gfx/index.js';
|
|
9
9
|
import { AddTextIcon, ConnectorCIcon, ConnectorEIcon, ConnectorLIcon, EndPointArrowIcon, EndPointCircleIcon, EndPointDiamondIcon, EndPointTriangleIcon, FlipDirectionIcon, StartPointArrowIcon, StartPointCircleIcon, StartPointDiamondIcon, StartPointIcon, StartPointTriangleIcon, } from '@blocksuite/icons/lit';
|
|
10
|
-
import { BlockFlavourIdentifier } from '../../std/index.js';
|
|
10
|
+
import { BlockFlavourIdentifier, getRegisteredCommands, runCommand, } from '../../std/index.js';
|
|
11
11
|
import { html } from 'lit';
|
|
12
12
|
import { styleMap } from 'lit/directives/style-map.js';
|
|
13
13
|
import { isConnectorWithLabel } from '../connector-manager.js';
|
|
14
|
+
import { INVERT_EDGE_DIRECTION } from '../direction/invert-direction.js';
|
|
15
|
+
import { asTypedEdge, edgeIsBound, roleVocabularies, } from '../direction/typed-edge.js';
|
|
14
16
|
import { mountConnectorLabelEditor } from '../text/index.js';
|
|
15
17
|
const FRONT_ENDPOINT_STYLE_LIST = [
|
|
16
18
|
{
|
|
@@ -200,6 +202,31 @@ export const connectorToolbarConfig = {
|
|
|
200
202
|
id: 'b.flip-direction',
|
|
201
203
|
icon: FlipDirectionIcon(),
|
|
202
204
|
tooltip: 'Flip direction',
|
|
205
|
+
/**
|
|
206
|
+
* Hidden for a TYPED EDGE (`docs/adr/0010` M3).
|
|
207
|
+
*
|
|
208
|
+
* This entry swaps the two endpoint STYLES and does not touch
|
|
209
|
+
* `source`/`target`. On a generalist connector that is honest — it is
|
|
210
|
+
* an arrowhead menu. On an edge whose persisted direction is the
|
|
211
|
+
* relation's orientation it would move the only visible sign of that
|
|
212
|
+
* relation while leaving the relation intact: the picture and the
|
|
213
|
+
* data would then disagree. Such an edge gets `d.invert-direction`
|
|
214
|
+
* instead, which moves both.
|
|
215
|
+
*
|
|
216
|
+
* Not gated on any framework flag: the vocabulary that answers "is
|
|
217
|
+
* this a typed edge" is registered by the always-on render extension,
|
|
218
|
+
* so a Wardley link stays protected on a board whose Wardley tooling
|
|
219
|
+
* is switched off.
|
|
220
|
+
*
|
|
221
|
+
* `some`, so a MIXED selection hides it too: one swap applied to
|
|
222
|
+
* every selected connector would still lie about the typed one, and
|
|
223
|
+
* `b.invert-direction` appears in its place and acts on that half.
|
|
224
|
+
* A typed edge with a free end also keeps it hidden — the entry is
|
|
225
|
+
* hidden by what the element IS, never by what it happens to bind.
|
|
226
|
+
*/
|
|
227
|
+
when: ctx => !ctx
|
|
228
|
+
.getSurfaceModelsByType(ConnectorElementModel)
|
|
229
|
+
.some(model => asTypedEdge(roleVocabularies(ctx.std), model)),
|
|
203
230
|
run(ctx) {
|
|
204
231
|
const models = ctx.getSurfaceModelsByType(ConnectorElementModel);
|
|
205
232
|
if (!models.length)
|
|
@@ -237,6 +264,45 @@ export const connectorToolbarConfig = {
|
|
|
237
264
|
});
|
|
238
265
|
},
|
|
239
266
|
},
|
|
267
|
+
{
|
|
268
|
+
/**
|
|
269
|
+
* **Reverse direction** — M3 of `docs/adr/0010`, and the only
|
|
270
|
+
* supported inversion of a typed edge.
|
|
271
|
+
*
|
|
272
|
+
* It sits where `b.flip-direction` would have been, appears only when
|
|
273
|
+
* every selected connector is a typed edge, and runs the registered
|
|
274
|
+
* command rather than a private copy of it — so the contextual
|
|
275
|
+
* toolbar, the palette, Settings › Shortcuts and the agent all reach
|
|
276
|
+
* the same behaviour and the same single telemetry emission.
|
|
277
|
+
*/
|
|
278
|
+
id: 'b.invert-direction',
|
|
279
|
+
icon: FlipDirectionIcon(),
|
|
280
|
+
tooltip: 'Reverse direction',
|
|
281
|
+
/**
|
|
282
|
+
* Shown as soon as the selection holds ONE reversible typed edge, and
|
|
283
|
+
* it then acts on the typed edges of that selection and on nothing
|
|
284
|
+
* else — `invertibleEdges` is the same filter on both sides.
|
|
285
|
+
*
|
|
286
|
+
* `some`, not `every`, on purpose: a selection mixing a Wardley link
|
|
287
|
+
* with a plain arrow used to show NEITHER this entry (not every model
|
|
288
|
+
* is typed) nor `b.flip-direction` (some model is), so lassoing two
|
|
289
|
+
* connectors silently took the direction affordance away. A partial
|
|
290
|
+
* gesture that says what it did beats a menu that vanishes.
|
|
291
|
+
*/
|
|
292
|
+
when: ctx => ctx
|
|
293
|
+
.getSurfaceModelsByType(ConnectorElementModel)
|
|
294
|
+
.some(model => asTypedEdge(roleVocabularies(ctx.std), model) !== null &&
|
|
295
|
+
edgeIsBound(model)),
|
|
296
|
+
run(ctx) {
|
|
297
|
+
const command = getRegisteredCommands(ctx.std).find(candidate => candidate.id === INVERT_EDGE_DIRECTION);
|
|
298
|
+
if (!command)
|
|
299
|
+
return;
|
|
300
|
+
runCommand(ctx.std, command, {
|
|
301
|
+
surface: 'contextual-toolbar',
|
|
302
|
+
source: 'toolbar:general',
|
|
303
|
+
});
|
|
304
|
+
},
|
|
305
|
+
},
|
|
240
306
|
{
|
|
241
307
|
id: 'd.connector-shape',
|
|
242
308
|
content(ctx) {
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { ViewExtensionProvider, } from '../affine-ext-loader/index.js';
|
|
2
|
+
import { CommandExtension } from '../std/index.js';
|
|
2
3
|
import { ConnectionOverlay } from './connector-manager.js';
|
|
3
4
|
import { ConnectorTool } from './connector-tool.js';
|
|
5
|
+
import { edgeDirectionCommands, EdgeDirectionManager, edgeDirectionWidget, } from './direction/index.js';
|
|
4
6
|
import { effects } from './effects.js';
|
|
5
7
|
import { ConnectorElementRendererExtension } from './element-renderer/index.js';
|
|
6
8
|
import { ConnectorDomRendererExtension } from './element-renderer/connector-dom.js';
|
|
@@ -29,6 +31,20 @@ export class ConnectorViewExtension extends ViewExtensionProvider {
|
|
|
29
31
|
context.register(connectorToolbarExtension);
|
|
30
32
|
context.register(ConnectionOverlay);
|
|
31
33
|
context.register(ConnectorInteraction);
|
|
34
|
+
// The direction affordance of `docs/adr/0010`, registered ALWAYS-ON with
|
|
35
|
+
// the rest of the connector view: a typed edge is document content, so
|
|
36
|
+
// what shows its orientation (M2) and what lets the user reverse it (M3)
|
|
37
|
+
// must keep working when the framework that minted it is flagged off —
|
|
38
|
+
// and `b.flip-direction`, which lies about such an edge, is hidden
|
|
39
|
+
// whatever the flag says. All three are no-ops until some framework
|
|
40
|
+
// registers a role vocabulary.
|
|
41
|
+
//
|
|
42
|
+
// No canvas overlay any more: since the PO acceptance of 02/08/2026 the
|
|
43
|
+
// reveal is ONE mark, the sentence laid along the link with a point at
|
|
44
|
+
// its target end, and that mark is DOM.
|
|
45
|
+
context.register(EdgeDirectionManager);
|
|
46
|
+
context.register(edgeDirectionWidget);
|
|
47
|
+
context.register(CommandExtension(edgeDirectionCommands));
|
|
32
48
|
}
|
|
33
49
|
}
|
|
34
50
|
}
|