@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,98 @@
|
|
|
1
|
+
import { isValidUrl, normalizeUrl } from '../../affine-shared/utils/index.js';
|
|
2
|
+
const URL_SCHEME_IN_TOKEN_REGEXP = /(?:https?:\/\/|ftp:\/\/|sftp:\/\/|mailto:|tel:|www\.)/i;
|
|
3
|
+
const URL_LEADING_DELIMITER_REGEXP = /^[-([{<'"~]+/;
|
|
4
|
+
const URL_TRAILING_DELIMITER_REGEXP = /[)\]}>.,;:!?'"]+$/;
|
|
5
|
+
function appendUrlTextSegment(segments, segment) {
|
|
6
|
+
if (!segment.text)
|
|
7
|
+
return;
|
|
8
|
+
const last = segments[segments.length - 1];
|
|
9
|
+
if (last && !last.link && !segment.link) {
|
|
10
|
+
last.text += segment.text;
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
segments.push(segment);
|
|
14
|
+
}
|
|
15
|
+
function splitTokenByUrl(token, baseUrl) {
|
|
16
|
+
const schemeMatch = token.match(URL_SCHEME_IN_TOKEN_REGEXP);
|
|
17
|
+
const schemeIndex = schemeMatch?.index;
|
|
18
|
+
if (typeof schemeIndex === 'number' && schemeIndex > 0) {
|
|
19
|
+
return [
|
|
20
|
+
{ text: token.slice(0, schemeIndex) },
|
|
21
|
+
...splitTokenByUrl(token.slice(schemeIndex), baseUrl),
|
|
22
|
+
];
|
|
23
|
+
}
|
|
24
|
+
const leading = token.match(URL_LEADING_DELIMITER_REGEXP)?.[0] ?? '';
|
|
25
|
+
const withoutLeading = token.slice(leading.length);
|
|
26
|
+
const trailing = withoutLeading.match(URL_TRAILING_DELIMITER_REGEXP)?.[0] ?? '';
|
|
27
|
+
const core = trailing
|
|
28
|
+
? withoutLeading.slice(0, withoutLeading.length - trailing.length)
|
|
29
|
+
: withoutLeading;
|
|
30
|
+
if (core && isValidUrl(core, baseUrl)) {
|
|
31
|
+
const segments = [];
|
|
32
|
+
appendUrlTextSegment(segments, { text: leading });
|
|
33
|
+
appendUrlTextSegment(segments, { text: core, link: normalizeUrl(core) });
|
|
34
|
+
appendUrlTextSegment(segments, { text: trailing });
|
|
35
|
+
return segments;
|
|
36
|
+
}
|
|
37
|
+
return [{ text: token }];
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Split pasted plain text into mixed segments, where only the URL segments
|
|
41
|
+
* carry link metadata. Text like `see https://example.com, then stop` keeps its
|
|
42
|
+
* prose as prose and linkifies only the address, punctuation excluded.
|
|
43
|
+
*/
|
|
44
|
+
export function splitTextByUrl(text, baseUrl = location.origin) {
|
|
45
|
+
const chunks = text.match(/\s+|\S+/g);
|
|
46
|
+
if (!chunks) {
|
|
47
|
+
return [];
|
|
48
|
+
}
|
|
49
|
+
const segments = [];
|
|
50
|
+
chunks.forEach(chunk => {
|
|
51
|
+
if (/^\s+$/.test(chunk)) {
|
|
52
|
+
appendUrlTextSegment(segments, { text: chunk });
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
splitTokenByUrl(chunk, baseUrl).forEach(segment => {
|
|
56
|
+
appendUrlTextSegment(segments, segment);
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
return segments;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Describe a paste for the database cells: the segments to insert, plus the
|
|
63
|
+
* single URL the whole paste amounts to (if any), which is the only case where
|
|
64
|
+
* a doc link may be resolved instead.
|
|
65
|
+
*/
|
|
66
|
+
export function analyzeTextForUrlPaste(text) {
|
|
67
|
+
const segments = splitTextByUrl(text);
|
|
68
|
+
const firstSegment = segments[0];
|
|
69
|
+
const singleUrl = segments.length === 1 && firstSegment?.link && firstSegment.text === text
|
|
70
|
+
? firstSegment.link
|
|
71
|
+
: undefined;
|
|
72
|
+
return {
|
|
73
|
+
segments,
|
|
74
|
+
singleUrl,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
export function insertUrlTextSegments(inlineEditor, inlineRange, segments) {
|
|
78
|
+
let index = inlineRange.index;
|
|
79
|
+
let replacedSelection = false;
|
|
80
|
+
segments.forEach(segment => {
|
|
81
|
+
if (!segment.text)
|
|
82
|
+
return;
|
|
83
|
+
const attributes = segment.link
|
|
84
|
+
? { link: segment.link }
|
|
85
|
+
: undefined;
|
|
86
|
+
inlineEditor.insertText({
|
|
87
|
+
index,
|
|
88
|
+
// Only the first insertion replaces what the user had selected.
|
|
89
|
+
length: replacedSelection ? 0 : inlineRange.length,
|
|
90
|
+
}, segment.text, attributes);
|
|
91
|
+
replacedSelection = true;
|
|
92
|
+
index += segment.text.length;
|
|
93
|
+
});
|
|
94
|
+
inlineEditor.setInlineRange({
|
|
95
|
+
index,
|
|
96
|
+
length: 0,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DefaultInlineManagerExtension } from '../../../affine-inline-preset/index.js';
|
|
2
2
|
import { ParseDocUrlProvider, TelemetryProvider, } from '../../../affine-shared/services/index.js';
|
|
3
|
-
import { getViewportElement
|
|
3
|
+
import { getViewportElement } from '../../../affine-shared/utils/index.js';
|
|
4
4
|
import { BaseCellRenderer, createFromBaseCellRenderer, createIcon, } from '../../../data-view/index.js';
|
|
5
5
|
import { IS_MAC } from '../../../global/env/index.js';
|
|
6
6
|
import { Text } from '../../../store/index.js';
|
|
@@ -8,6 +8,7 @@ import { computed, effect, signal } from '@preact/signals-core';
|
|
|
8
8
|
import { ref } from 'lit/directives/ref.js';
|
|
9
9
|
import { html } from 'lit/static-html.js';
|
|
10
10
|
import { EditorHostKey } from '../../context/host-context.js';
|
|
11
|
+
import { analyzeTextForUrlPaste, insertUrlTextSegments } from '../paste-url.js';
|
|
11
12
|
import { richTextCellStyle, richTextContainerStyle, } from './cell-renderer-css.js';
|
|
12
13
|
import { richTextPropertyModelConfig } from './define.js';
|
|
13
14
|
function toggleStyle(inlineEditor, attrs) {
|
|
@@ -197,9 +198,12 @@ export class RichTextCell extends BaseCellRenderer {
|
|
|
197
198
|
?.replace(/\r?\n|\r/g, '\n');
|
|
198
199
|
if (!text)
|
|
199
200
|
return;
|
|
200
|
-
|
|
201
|
+
const { segments, singleUrl } = analyzeTextForUrlPaste(text);
|
|
202
|
+
if (singleUrl) {
|
|
201
203
|
const std = this.std;
|
|
202
|
-
const result = std
|
|
204
|
+
const result = std
|
|
205
|
+
?.getOptional(ParseDocUrlProvider)
|
|
206
|
+
?.parseDocUrl(singleUrl);
|
|
203
207
|
if (result) {
|
|
204
208
|
const text = ' ';
|
|
205
209
|
inlineEditor.insertText(inlineRange, text, {
|
|
@@ -224,24 +228,10 @@ export class RichTextCell extends BaseCellRenderer {
|
|
|
224
228
|
segment: 'database',
|
|
225
229
|
parentFlavour: 'affine:database',
|
|
226
230
|
});
|
|
231
|
+
return;
|
|
227
232
|
}
|
|
228
|
-
else {
|
|
229
|
-
inlineEditor.insertText(inlineRange, text, {
|
|
230
|
-
link: text,
|
|
231
|
-
});
|
|
232
|
-
inlineEditor.setInlineRange({
|
|
233
|
-
index: inlineRange.index + text.length,
|
|
234
|
-
length: 0,
|
|
235
|
-
});
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
else {
|
|
239
|
-
inlineEditor.insertText(inlineRange, text);
|
|
240
|
-
inlineEditor.setInlineRange({
|
|
241
|
-
index: inlineRange.index + text.length,
|
|
242
|
-
length: 0,
|
|
243
|
-
});
|
|
244
233
|
}
|
|
234
|
+
insertUrlTextSegments(inlineEditor, inlineRange, segments);
|
|
245
235
|
};
|
|
246
236
|
this.insertDelta = (delta) => {
|
|
247
237
|
const inlineEditor = this.inlineEditor$.value;
|
|
@@ -34,7 +34,7 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
|
|
|
34
34
|
};
|
|
35
35
|
import { DefaultInlineManagerExtension } from '../../../affine-inline-preset/index.js';
|
|
36
36
|
import { ParseDocUrlProvider, TelemetryProvider, } from '../../../affine-shared/services/index.js';
|
|
37
|
-
import { getViewportElement
|
|
37
|
+
import { getViewportElement } from '../../../affine-shared/utils/index.js';
|
|
38
38
|
import { BaseCellRenderer } from '../../../data-view/index.js';
|
|
39
39
|
import { IS_MAC } from '../../../global/env/index.js';
|
|
40
40
|
import { LinkedPageIcon } from '@blocksuite/icons/lit';
|
|
@@ -44,6 +44,7 @@ import { createRef, ref } from 'lit/directives/ref.js';
|
|
|
44
44
|
import { html } from 'lit/static-html.js';
|
|
45
45
|
import { EditorHostKey } from '../../context/host-context.js';
|
|
46
46
|
import { getSingleDocIdFromText } from '../../utils/title-doc.js';
|
|
47
|
+
import { analyzeTextForUrlPaste, insertUrlTextSegments } from '../paste-url.js';
|
|
47
48
|
import { headerAreaIconStyle, titleCellStyle, titleRichTextStyle, } from './cell-renderer-css.js';
|
|
48
49
|
let HeaderAreaTextCell = (() => {
|
|
49
50
|
let _classSuper = BaseCellRenderer;
|
|
@@ -106,7 +107,10 @@ let HeaderAreaTextCell = (() => {
|
|
|
106
107
|
if (this.richText.value) {
|
|
107
108
|
this.disposables.addFromEvent(this.richText.value, 'copy', this._onCopy);
|
|
108
109
|
this.disposables.addFromEvent(this.richText.value, 'cut', this._onCut);
|
|
109
|
-
this.disposables.addFromEvent(this.richText.value, 'paste', this._onPaste
|
|
110
|
+
this.disposables.addFromEvent(this.richText.value, 'paste', this._onPaste,
|
|
111
|
+
// Capture: the cell must claim the paste before the rich text's own
|
|
112
|
+
// handler turns it into a document paste.
|
|
113
|
+
true);
|
|
110
114
|
const inlineEditor = this.inlineEditor;
|
|
111
115
|
if (inlineEditor) {
|
|
112
116
|
this.disposables.add(inlineEditor.slots.keydown.subscribe(this._handleKeyDown));
|
|
@@ -194,8 +198,12 @@ let HeaderAreaTextCell = (() => {
|
|
|
194
198
|
this._onPaste = (e) => {
|
|
195
199
|
const inlineEditor = this.inlineEditor;
|
|
196
200
|
const inlineRange = inlineEditor?.getInlineRange();
|
|
197
|
-
if (!inlineRange)
|
|
201
|
+
if (!inlineEditor || !inlineRange)
|
|
198
202
|
return;
|
|
203
|
+
// The cell owns the paste: stop it before the document clipboard sees it,
|
|
204
|
+
// whichever branch below ends up handling the payload.
|
|
205
|
+
e.preventDefault();
|
|
206
|
+
e.stopPropagation();
|
|
199
207
|
if (e.clipboardData) {
|
|
200
208
|
try {
|
|
201
209
|
const getDeltas = (snapshot) => {
|
|
@@ -219,14 +227,15 @@ let HeaderAreaTextCell = (() => {
|
|
|
219
227
|
?.replace(/\r?\n|\r/g, '\n');
|
|
220
228
|
if (!text)
|
|
221
229
|
return;
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
if (isValidUrl(text)) {
|
|
230
|
+
const { segments, singleUrl } = analyzeTextForUrlPaste(text);
|
|
231
|
+
if (singleUrl) {
|
|
225
232
|
const std = this.std;
|
|
226
|
-
const result = std
|
|
233
|
+
const result = std
|
|
234
|
+
?.getOptional(ParseDocUrlProvider)
|
|
235
|
+
?.parseDocUrl(singleUrl);
|
|
227
236
|
if (result) {
|
|
228
237
|
const text = ' ';
|
|
229
|
-
inlineEditor
|
|
238
|
+
inlineEditor.insertText(inlineRange, text, {
|
|
230
239
|
reference: {
|
|
231
240
|
type: 'LinkedPage',
|
|
232
241
|
pageId: result.docId,
|
|
@@ -237,7 +246,7 @@ let HeaderAreaTextCell = (() => {
|
|
|
237
246
|
},
|
|
238
247
|
},
|
|
239
248
|
});
|
|
240
|
-
inlineEditor
|
|
249
|
+
inlineEditor.setInlineRange({
|
|
241
250
|
index: inlineRange.index + text.length,
|
|
242
251
|
length: 0,
|
|
243
252
|
});
|
|
@@ -248,24 +257,10 @@ let HeaderAreaTextCell = (() => {
|
|
|
248
257
|
segment: 'database',
|
|
249
258
|
parentFlavour: 'affine:database',
|
|
250
259
|
});
|
|
260
|
+
return;
|
|
251
261
|
}
|
|
252
|
-
else {
|
|
253
|
-
inlineEditor?.insertText(inlineRange, text, {
|
|
254
|
-
link: text,
|
|
255
|
-
});
|
|
256
|
-
inlineEditor?.setInlineRange({
|
|
257
|
-
index: inlineRange.index + text.length,
|
|
258
|
-
length: 0,
|
|
259
|
-
});
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
else {
|
|
263
|
-
inlineEditor?.insertText(inlineRange, text);
|
|
264
|
-
inlineEditor?.setInlineRange({
|
|
265
|
-
index: inlineRange.index + text.length,
|
|
266
|
-
length: 0,
|
|
267
|
-
});
|
|
268
262
|
}
|
|
263
|
+
insertUrlTextSegments(inlineEditor, inlineRange, segments);
|
|
269
264
|
};
|
|
270
265
|
this.insertDelta = (delta) => {
|
|
271
266
|
const inlineEditor = this.inlineEditor;
|
|
@@ -2,6 +2,7 @@ import { viewConverts, viewPresets } from '../../data-view/view-presets/index.js
|
|
|
2
2
|
export const databaseBlockViews = [
|
|
3
3
|
viewPresets.tableViewMeta,
|
|
4
4
|
viewPresets.kanbanViewMeta,
|
|
5
|
+
viewPresets.calendarViewMeta,
|
|
5
6
|
];
|
|
6
7
|
export const databaseBlockViewMap = Object.fromEntries(databaseBlockViews.map(view => [view.type, view]));
|
|
7
8
|
export const databaseBlockViewConverts = [...viewConverts];
|
|
@@ -81,6 +81,15 @@ let EdgelessTextBlockComponent = (() => {
|
|
|
81
81
|
font-weight: var(--edgeless-text-font-weight);
|
|
82
82
|
text-align: var(--edgeless-text-text-align);
|
|
83
83
|
}
|
|
84
|
+
|
|
85
|
+
/*
|
|
86
|
+
* Locking a text block is meant to stop accidental edits, not to stop
|
|
87
|
+
* navigation, so links stay reachable inside otherwise inert content.
|
|
88
|
+
*/
|
|
89
|
+
.edgeless-text-block-container .locked-content a[href] {
|
|
90
|
+
pointer-events: auto;
|
|
91
|
+
cursor: pointer;
|
|
92
|
+
}
|
|
84
93
|
`; }
|
|
85
94
|
_updateH() {
|
|
86
95
|
const bound = Bound.deserialize(this.model.xywh);
|
|
@@ -263,6 +272,7 @@ let EdgelessTextBlockComponent = (() => {
|
|
|
263
272
|
style=${styleMap(containerStyle)}
|
|
264
273
|
>
|
|
265
274
|
<div
|
|
275
|
+
class=${!editing && this.model.isLocked() ? 'locked-content' : ''}
|
|
266
276
|
style=${styleMap({
|
|
267
277
|
pointerEvents: editing ? 'auto' : 'none',
|
|
268
278
|
userSelect: editing ? 'auto' : 'none',
|
|
@@ -15,6 +15,9 @@ export declare const edgelessTextToolbarConfig: {
|
|
|
15
15
|
}, {
|
|
16
16
|
readonly id: "e.alignment";
|
|
17
17
|
readonly content: (ctx: import("../../affine-shared/services/index.js").ToolbarContext) => import("lit-html").TemplateResult<1> | null;
|
|
18
|
+
}, {
|
|
19
|
+
readonly id: "d.text-size";
|
|
20
|
+
readonly content: (ctx: import("../../affine-shared/services/index.js").ToolbarContext) => import("lit-html").TemplateResult<1> | null;
|
|
18
21
|
}];
|
|
19
22
|
readonly when: (ctx: import("../../affine-shared/services/index.js").ToolbarContext) => boolean;
|
|
20
23
|
};
|
|
@@ -1,10 +1,57 @@
|
|
|
1
|
+
import { EdgelessCRUDIdentifier } from '../../affine-block-surface/index.js';
|
|
1
2
|
import { createTextActions } from '../../affine-gfx-text/index.js';
|
|
2
3
|
import { EdgelessTextBlockModel } from '../../affine-model/index.js';
|
|
3
4
|
import { ToolbarModuleExtension, } from '../../affine-shared/services/index.js';
|
|
5
|
+
import { getMostCommonValue } from '../../affine-shared/utils/index.js';
|
|
6
|
+
import { Bound } from '../../global/gfx/index.js';
|
|
4
7
|
import { BlockFlavourIdentifier } from '../../std/index.js';
|
|
8
|
+
import { signal } from '@preact/signals-core';
|
|
9
|
+
import { html } from 'lit';
|
|
10
|
+
import { boundForScale, scaleFromSize, sizeFromScale, } from './font-size.js';
|
|
11
|
+
const FONT_SIZE_LIST = [
|
|
12
|
+
{ value: 16 },
|
|
13
|
+
{ value: 24 },
|
|
14
|
+
{ value: 32 },
|
|
15
|
+
{ value: 40 },
|
|
16
|
+
{ value: 64 },
|
|
17
|
+
{ value: 128 },
|
|
18
|
+
];
|
|
5
19
|
export const edgelessTextToolbarConfig = {
|
|
6
20
|
// No need to adjust element bounds, which updates itself using ResizeObserver
|
|
7
|
-
actions:
|
|
21
|
+
actions: [
|
|
22
|
+
...createTextActions(EdgelessTextBlockModel, 'edgeless-text'),
|
|
23
|
+
{
|
|
24
|
+
// The shared `d.font-size` action is disabled for edgeless text (the
|
|
25
|
+
// model has no `fontSize` prop); this one drives `scale` instead, the
|
|
26
|
+
// same prop ratio-locked corner resizing writes.
|
|
27
|
+
id: 'd.text-size',
|
|
28
|
+
content(ctx) {
|
|
29
|
+
const models = ctx.getSurfaceModelsByType(EdgelessTextBlockModel);
|
|
30
|
+
if (!models.length)
|
|
31
|
+
return null;
|
|
32
|
+
const size$ = signal(sizeFromScale(getMostCommonValue(models.map(model => model.props), 'scale') ?? 1));
|
|
33
|
+
const onPick = (e) => {
|
|
34
|
+
e.stopPropagation();
|
|
35
|
+
const scale = scaleFromSize(e.detail);
|
|
36
|
+
const crud = ctx.std.get(EdgelessCRUDIdentifier);
|
|
37
|
+
for (const model of models) {
|
|
38
|
+
const bound = boundForScale(Bound.deserialize(model.xywh), model.props.scale, scale);
|
|
39
|
+
crud.updateElement(model.id, {
|
|
40
|
+
scale,
|
|
41
|
+
xywh: bound.serialize(),
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
return html `<affine-size-dropdown-menu
|
|
46
|
+
@select=${onPick}
|
|
47
|
+
.label="${'Font size'}"
|
|
48
|
+
.sizes=${FONT_SIZE_LIST}
|
|
49
|
+
.size$=${size$}
|
|
50
|
+
.minSize=${1}
|
|
51
|
+
></affine-size-dropdown-menu>`;
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
],
|
|
8
55
|
when: ctx => ctx.getSurfaceModelsByType(EdgelessTextBlockModel).length > 0,
|
|
9
56
|
};
|
|
10
57
|
export const edgelessTextToolbarExtension = ToolbarModuleExtension({
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Bound } from '../../global/gfx/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* An edgeless text block has no `fontSize` prop — its visual text size is
|
|
4
|
+
* `scale` applied to the page base font size (`--affine-font-base`, 15px).
|
|
5
|
+
* The toolbar size selector converts between that scale and the pixel size
|
|
6
|
+
* users actually reason about.
|
|
7
|
+
*/
|
|
8
|
+
export declare const EDGELESS_TEXT_BASE_FONT_SIZE = 15;
|
|
9
|
+
export declare function sizeFromScale(scale: number): number;
|
|
10
|
+
export declare function scaleFromSize(size: number): number;
|
|
11
|
+
/**
|
|
12
|
+
* Rescale a block bound the same way corner (ratio-locked) resizing does:
|
|
13
|
+
* top-left anchored, width and height proportional to the scale. This keeps
|
|
14
|
+
* the real layout size (`w / scale`) untouched, so the text wrapping does not
|
|
15
|
+
* change — only the rendered size does.
|
|
16
|
+
*/
|
|
17
|
+
export declare function boundForScale(bound: Bound, oldScale: number, newScale: number): Bound;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Bound } from '../../global/gfx/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* An edgeless text block has no `fontSize` prop — its visual text size is
|
|
4
|
+
* `scale` applied to the page base font size (`--affine-font-base`, 15px).
|
|
5
|
+
* The toolbar size selector converts between that scale and the pixel size
|
|
6
|
+
* users actually reason about.
|
|
7
|
+
*/
|
|
8
|
+
export const EDGELESS_TEXT_BASE_FONT_SIZE = 15;
|
|
9
|
+
export function sizeFromScale(scale) {
|
|
10
|
+
return Math.round(scale * EDGELESS_TEXT_BASE_FONT_SIZE);
|
|
11
|
+
}
|
|
12
|
+
export function scaleFromSize(size) {
|
|
13
|
+
return size / EDGELESS_TEXT_BASE_FONT_SIZE;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Rescale a block bound the same way corner (ratio-locked) resizing does:
|
|
17
|
+
* top-left anchored, width and height proportional to the scale. This keeps
|
|
18
|
+
* the real layout size (`w / scale`) untouched, so the text wrapping does not
|
|
19
|
+
* change — only the rendered size does.
|
|
20
|
+
*/
|
|
21
|
+
export function boundForScale(bound, oldScale, newScale) {
|
|
22
|
+
const ratio = newScale / oldScale;
|
|
23
|
+
return new Bound(bound.x, bound.y, bound.w * ratio, bound.h * ratio);
|
|
24
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Store } from '../../store/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Whether the host has moved this doc to its trash.
|
|
4
|
+
*
|
|
5
|
+
* A trashed doc is still in the workspace and still loads, so a card pointing
|
|
6
|
+
* at it has to ask: cards render a trashed doc as deleted, the same way they
|
|
7
|
+
* render a doc that has left the workspace altogether.
|
|
8
|
+
*/
|
|
9
|
+
export declare function isDocTrashed(doc: Store | null | undefined): boolean;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether the host has moved this doc to its trash.
|
|
3
|
+
*
|
|
4
|
+
* A trashed doc is still in the workspace and still loads, so a card pointing
|
|
5
|
+
* at it has to ask: cards render a trashed doc as deleted, the same way they
|
|
6
|
+
* render a doc that has left the workspace altogether.
|
|
7
|
+
*/
|
|
8
|
+
export function isDocTrashed(doc) {
|
|
9
|
+
return !!doc?.meta?.trash;
|
|
10
|
+
}
|
|
@@ -54,6 +54,7 @@ import { when } from 'lit/directives/when.js';
|
|
|
54
54
|
import throttle from 'lodash-es/throttle.js';
|
|
55
55
|
import { filter } from 'rxjs/operators';
|
|
56
56
|
import * as Y from 'yjs';
|
|
57
|
+
import { isDocTrashed } from '../common/doc-trashed.js';
|
|
57
58
|
import { renderLinkedDocInCard } from '../common/render-linked-doc.js';
|
|
58
59
|
import { SyncedDocErrorIcon } from '../embed-synced-doc-block/styles.js';
|
|
59
60
|
import { styles } from './styles.js';
|
|
@@ -167,9 +168,6 @@ let EmbedLinkedDocBlockComponent = (() => {
|
|
|
167
168
|
});
|
|
168
169
|
}, RENDER_CARD_THROTTLE_MS)));
|
|
169
170
|
this._setDocUpdatedAt();
|
|
170
|
-
this.disposables.add(this.store.workspace.slots.docListUpdated.subscribe(() => {
|
|
171
|
-
this._setDocUpdatedAt();
|
|
172
|
-
}));
|
|
173
171
|
if (this._referenceToNode) {
|
|
174
172
|
this._linkedDocMode = this.model.props.params?.mode ?? 'page';
|
|
175
173
|
}
|
|
@@ -192,6 +190,12 @@ let EmbedLinkedDocBlockComponent = (() => {
|
|
|
192
190
|
});
|
|
193
191
|
}
|
|
194
192
|
}));
|
|
193
|
+
// Subscribed whether or not the doc exists right now: the doc list is also
|
|
194
|
+
// what tells the card that its target was trashed, restored or recreated.
|
|
195
|
+
this.disposables.add(this.store.workspace.slots.docListUpdated.subscribe(() => {
|
|
196
|
+
this._setDocUpdatedAt();
|
|
197
|
+
this.refreshData();
|
|
198
|
+
}));
|
|
195
199
|
this._trackCitationDeleteEvent();
|
|
196
200
|
}
|
|
197
201
|
getInitialState() {
|
|
@@ -437,7 +441,7 @@ let EmbedLinkedDocBlockComponent = (() => {
|
|
|
437
441
|
};
|
|
438
442
|
this._renderEmbedView = () => {
|
|
439
443
|
const linkedDoc = this.linkedDoc;
|
|
440
|
-
const isDeleted = !linkedDoc;
|
|
444
|
+
const isDeleted = !linkedDoc || isDocTrashed(linkedDoc);
|
|
441
445
|
const isLoading = this._loading;
|
|
442
446
|
const isError = this.isError;
|
|
443
447
|
const isEmpty = this._isDocEmpty() && this.isBannerEmpty;
|
package/dist/_pkgs/affine-block-embed-doc/embed-synced-doc-block/embed-synced-doc-block.d.ts
CHANGED
|
@@ -8,6 +8,10 @@ import type { EmbedSyncedDocCard } from './components/embed-synced-doc-card.js';
|
|
|
8
8
|
export declare class EmbedSyncedDocBlockComponent extends EmbedBlockComponent<EmbedSyncedDocModel> {
|
|
9
9
|
static styles: import("lit").CSSResult;
|
|
10
10
|
private _cachedBounds;
|
|
11
|
+
/** Whether the nested editor has been rendered at least once. */
|
|
12
|
+
private _hasRenderedSyncedView;
|
|
13
|
+
/** Whether the fit effect below has already been installed. */
|
|
14
|
+
private _hasInitedFitEffect;
|
|
11
15
|
private readonly _initEdgelessFitEffect;
|
|
12
16
|
private readonly _pageFilter;
|
|
13
17
|
protected _buildPreviewSpec: (name: "preview-page" | "preview-edgeless") => import("../../store/index.js").ExtensionType[];
|
|
@@ -52,6 +52,7 @@ import { classMap } from 'lit/directives/class-map.js';
|
|
|
52
52
|
import { guard } from 'lit/directives/guard.js';
|
|
53
53
|
import { styleMap } from 'lit/directives/style-map.js';
|
|
54
54
|
import * as Y from 'yjs';
|
|
55
|
+
import { isDocTrashed } from '../common/doc-trashed.js';
|
|
55
56
|
import { blockStyles } from './styles.js';
|
|
56
57
|
let EmbedSyncedDocBlockComponent = (() => {
|
|
57
58
|
let _classDecorators = [Peekable({
|
|
@@ -97,6 +98,10 @@ let EmbedSyncedDocBlockComponent = (() => {
|
|
|
97
98
|
super(...arguments);
|
|
98
99
|
// Caches total bounds, includes all blocks and elements.
|
|
99
100
|
this._cachedBounds = null;
|
|
101
|
+
/** Whether the nested editor has been rendered at least once. */
|
|
102
|
+
this._hasRenderedSyncedView = false;
|
|
103
|
+
/** Whether the fit effect below has already been installed. */
|
|
104
|
+
this._hasInitedFitEffect = false;
|
|
100
105
|
this._initEdgelessFitEffect = () => {
|
|
101
106
|
const fitToContent = () => {
|
|
102
107
|
if (this.isPageMode)
|
|
@@ -336,7 +341,11 @@ let EmbedSyncedDocBlockComponent = (() => {
|
|
|
336
341
|
?.docLinkClicked.next({ ...event, pageId, host: this.host });
|
|
337
342
|
};
|
|
338
343
|
this.refreshData = () => {
|
|
339
|
-
this._load()
|
|
344
|
+
this._load()
|
|
345
|
+
.then(() => {
|
|
346
|
+
this._isEmptySyncedDoc = isEmptyDoc(this.syncedDoc, this.editorMode);
|
|
347
|
+
})
|
|
348
|
+
.catch(e => {
|
|
340
349
|
console.error(e);
|
|
341
350
|
this._error = true;
|
|
342
351
|
});
|
|
@@ -444,7 +453,7 @@ let EmbedSyncedDocBlockComponent = (() => {
|
|
|
444
453
|
this._deleted = false;
|
|
445
454
|
this._cycle = false;
|
|
446
455
|
const syncedDoc = this.syncedDoc;
|
|
447
|
-
if (!syncedDoc) {
|
|
456
|
+
if (!syncedDoc || isDocTrashed(syncedDoc)) {
|
|
448
457
|
this._deleted = true;
|
|
449
458
|
this._loading = false;
|
|
450
459
|
return;
|
|
@@ -506,6 +515,7 @@ let EmbedSyncedDocBlockComponent = (() => {
|
|
|
506
515
|
this._setDocUpdatedAt();
|
|
507
516
|
this.disposables.add(this.store.workspace.slots.docListUpdated.subscribe(() => {
|
|
508
517
|
this._setDocUpdatedAt();
|
|
518
|
+
this.refreshData();
|
|
509
519
|
}));
|
|
510
520
|
if (!this.linkedMode) {
|
|
511
521
|
const docMode = this.std.get(DocModeProvider);
|
|
@@ -529,7 +539,6 @@ let EmbedSyncedDocBlockComponent = (() => {
|
|
|
529
539
|
this._selectBlock();
|
|
530
540
|
}
|
|
531
541
|
});
|
|
532
|
-
this._initEdgelessFitEffect();
|
|
533
542
|
}
|
|
534
543
|
renderBlock() {
|
|
535
544
|
delete this.dataset.nestedEditor;
|
|
@@ -549,11 +558,21 @@ let EmbedSyncedDocBlockComponent = (() => {
|
|
|
549
558
|
></affine-embed-synced-doc-card>
|
|
550
559
|
`);
|
|
551
560
|
}
|
|
561
|
+
this._hasRenderedSyncedView = true;
|
|
552
562
|
return this._renderSyncedView();
|
|
553
563
|
}
|
|
554
564
|
updated(changedProperties) {
|
|
555
565
|
super.updated(changedProperties);
|
|
556
566
|
this.syncedDocCard?.requestUpdate();
|
|
567
|
+
// The fit effect reads the nested viewport's cached bounding rect, which
|
|
568
|
+
// only the viewport's own resize observer invalidates. Installing it here,
|
|
569
|
+
// after the nested editor has rendered and registered that observer, is
|
|
570
|
+
// what keeps the first resize after a zoom change from fitting to a stale
|
|
571
|
+
// size.
|
|
572
|
+
if (!this._hasInitedFitEffect && this._hasRenderedSyncedView) {
|
|
573
|
+
this._hasInitedFitEffect = true;
|
|
574
|
+
this._initEdgelessFitEffect();
|
|
575
|
+
}
|
|
557
576
|
}
|
|
558
577
|
#_cycle_accessor_storage;
|
|
559
578
|
get _cycle() { return this.#_cycle_accessor_storage; }
|
|
@@ -36,6 +36,19 @@ export declare class EdgelessFrameManager extends GfxExtension {
|
|
|
36
36
|
private _addChildrenToLegacyFrame;
|
|
37
37
|
private _addFrameBlock;
|
|
38
38
|
private _watchElementAdded;
|
|
39
|
+
/**
|
|
40
|
+
* Whether `element` fully encloses `frame`.
|
|
41
|
+
*
|
|
42
|
+
* A frame always renders behind everything it owns (`compare` short-circuits
|
|
43
|
+
* on the ancestor relationship, ignoring indexes) and "bring to front" only
|
|
44
|
+
* reorders top-level siblings — a grouped child is no longer one. So if a
|
|
45
|
+
* frame auto-adopted an element that encloses it (a Wardley map background
|
|
46
|
+
* the frame was drawn on top of, matched only because its center happened to
|
|
47
|
+
* fall inside the frame), the frame would be permanently buried behind its
|
|
48
|
+
* own child with no way to raise it. Such a backdrop must never become frame
|
|
49
|
+
* content. Mirrors the existing frame-inside-frame guard for canvas elements.
|
|
50
|
+
*/
|
|
51
|
+
private _enclosesFrame;
|
|
39
52
|
/**
|
|
40
53
|
* Adopt an element that was just created inside the frame's bounds.
|
|
41
54
|
*
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Overlay } from '../affine-block-surface/index.js';
|
|
2
|
+
import { FrameworkBackgroundElementModel } from '../affine-model/index.js';
|
|
2
3
|
import { EditPropsStore } from '../affine-shared/services/index.js';
|
|
3
4
|
import { DisposableGroup } from '../global/disposable/index.js';
|
|
4
5
|
import { BlockSuiteError, ErrorCode } from '../global/exceptions/index.js';
|
|
@@ -186,8 +187,10 @@ export class EdgelessFrameManager extends GfxExtension {
|
|
|
186
187
|
element.hasChild(frame)) {
|
|
187
188
|
return;
|
|
188
189
|
}
|
|
189
|
-
// Only add elements that aren't already grouped and have a valid
|
|
190
|
-
|
|
190
|
+
// Only add elements that aren't already grouped and have a valid
|
|
191
|
+
// frame, and never let the frame swallow a backdrop that encloses
|
|
192
|
+
// it (e.g. a Wardley map background the frame was drawn on top of).
|
|
193
|
+
if (!element.group && frame && !this._enclosesFrame(element, frame)) {
|
|
191
194
|
this._adoptNewlyCreatedElement(frame, element);
|
|
192
195
|
}
|
|
193
196
|
});
|
|
@@ -204,6 +207,12 @@ export class EdgelessFrameManager extends GfxExtension {
|
|
|
204
207
|
payload.model.containsBound(frame.elementBound)) {
|
|
205
208
|
return;
|
|
206
209
|
}
|
|
210
|
+
// A block that encloses the frame is a backdrop, not frame content —
|
|
211
|
+
// adopting it would bury the frame behind its own child (see
|
|
212
|
+
// `_enclosesFrame`).
|
|
213
|
+
if (this._enclosesFrame(payload.model, frame)) {
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
207
216
|
if (payload.isLocal) {
|
|
208
217
|
this._adoptNewlyCreatedElement(frame, payload.model);
|
|
209
218
|
}
|
|
@@ -216,6 +225,27 @@ export class EdgelessFrameManager extends GfxExtension {
|
|
|
216
225
|
}
|
|
217
226
|
}));
|
|
218
227
|
}
|
|
228
|
+
/**
|
|
229
|
+
* Whether `element` fully encloses `frame`.
|
|
230
|
+
*
|
|
231
|
+
* A frame always renders behind everything it owns (`compare` short-circuits
|
|
232
|
+
* on the ancestor relationship, ignoring indexes) and "bring to front" only
|
|
233
|
+
* reorders top-level siblings — a grouped child is no longer one. So if a
|
|
234
|
+
* frame auto-adopted an element that encloses it (a Wardley map background
|
|
235
|
+
* the frame was drawn on top of, matched only because its center happened to
|
|
236
|
+
* fall inside the frame), the frame would be permanently buried behind its
|
|
237
|
+
* own child with no way to raise it. Such a backdrop must never become frame
|
|
238
|
+
* content. Mirrors the existing frame-inside-frame guard for canvas elements.
|
|
239
|
+
*/
|
|
240
|
+
_enclosesFrame(element, frame) {
|
|
241
|
+
// A framework background is never frame content, whatever its geometry:
|
|
242
|
+
// the geometric test below has a hole (a frame TALLER than the map
|
|
243
|
+
// satisfies center-in-frame adoption without being fully enclosed), and
|
|
244
|
+
// since PF2 the model says outright what the geometry only hinted at.
|
|
245
|
+
if (element instanceof FrameworkBackgroundElementModel)
|
|
246
|
+
return true;
|
|
247
|
+
return element.elementBound.contains(frame.elementBound);
|
|
248
|
+
}
|
|
219
249
|
/**
|
|
220
250
|
* Adopt an element that was just created inside the frame's bounds.
|
|
221
251
|
*
|
|
@@ -8,7 +8,12 @@ export const latexBlockStyles = css `
|
|
|
8
8
|
height: 100%;
|
|
9
9
|
padding: 10px 24px;
|
|
10
10
|
flex-direction: column;
|
|
11
|
-
|
|
11
|
+
/**
|
|
12
|
+
* The rendered formula must span the container so a wide equation can be
|
|
13
|
+
* scrolled through (overflow-x below); centring shrank it to its content
|
|
14
|
+
* and pushed the overflow out of reach.
|
|
15
|
+
*/
|
|
16
|
+
align-items: stretch;
|
|
12
17
|
justify-content: center;
|
|
13
18
|
border-radius: 4px;
|
|
14
19
|
overflow-x: auto;
|