@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
|
@@ -35,13 +35,13 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
|
|
|
35
35
|
import { DefaultTool, EdgelessCRUDIdentifier, TextUtils, } from '../../affine-block-surface/index.js';
|
|
36
36
|
import { MindmapElementModel, ShapeElementModel, TextFitMode, TextResizing, } from '../../affine-model/index.js';
|
|
37
37
|
import { ThemeProvider } from '../../affine-shared/services/index.js';
|
|
38
|
-
import { getSelectedRect } from '../../affine-shared/utils/index.js';
|
|
38
|
+
import { getSelectedRect, overlayScale, toOverlayCoord, } from '../../affine-shared/utils/index.js';
|
|
39
39
|
import { BlockSuiteError, ErrorCode } from '../../global/exceptions/index.js';
|
|
40
40
|
import { Bound, toRadian, Vec } from '../../global/gfx/index.js';
|
|
41
41
|
import { WithDisposable } from '../../global/lit/index.js';
|
|
42
42
|
import { ShadowlessElement, stdContext, } from '../../std/index.js';
|
|
43
43
|
import { GfxControllerIdentifier } from '../../std/gfx/index.js';
|
|
44
|
-
import { RANGE_SYNC_EXCLUDE_ATTR } from '../../std/inline/index.js';
|
|
44
|
+
import { InlineEditor, RANGE_SYNC_EXCLUDE_ATTR } from '../../std/inline/index.js';
|
|
45
45
|
import { consume } from '@lit/context';
|
|
46
46
|
import { html, nothing } from 'lit';
|
|
47
47
|
import { property, query } from 'lit/decorators.js';
|
|
@@ -160,6 +160,7 @@ let EdgelessShapeTextEditor = (() => {
|
|
|
160
160
|
});
|
|
161
161
|
}
|
|
162
162
|
_unmount() {
|
|
163
|
+
this._cancelScheduledElementWHUpdate();
|
|
163
164
|
this._resizeObserver?.disconnect();
|
|
164
165
|
this._resizeObserver = null;
|
|
165
166
|
if (this.element.text) {
|
|
@@ -180,6 +181,90 @@ let EdgelessShapeTextEditor = (() => {
|
|
|
180
181
|
editing: false,
|
|
181
182
|
});
|
|
182
183
|
}
|
|
184
|
+
_cancelScheduledElementWHUpdate() {
|
|
185
|
+
if (this._compositionUpdateRaf !== null) {
|
|
186
|
+
cancelAnimationFrame(this._compositionUpdateRaf);
|
|
187
|
+
this._compositionUpdateRaf = null;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* While an IME composition is in progress the text is only in the DOM, not
|
|
192
|
+
* yet in the model, so `renderComplete` never fires and the shape keeps the
|
|
193
|
+
* size it had before the user started composing — the preedit string spills
|
|
194
|
+
* out of it. Remeasure once per frame instead, and once more when the
|
|
195
|
+
* composition ends.
|
|
196
|
+
*/
|
|
197
|
+
_scheduleElementWHUpdate(flush = false) {
|
|
198
|
+
if (flush) {
|
|
199
|
+
this._cancelScheduledElementWHUpdate();
|
|
200
|
+
this._updateElementWH();
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
if (this._compositionUpdateRaf !== null) {
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
this._compositionUpdateRaf = requestAnimationFrame(() => {
|
|
207
|
+
this._compositionUpdateRaf = null;
|
|
208
|
+
this._updateElementWH();
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
_getInlineEditorContentRect() {
|
|
212
|
+
if (!this.inlineEditorContainer) {
|
|
213
|
+
return null;
|
|
214
|
+
}
|
|
215
|
+
const textNodes = InlineEditor.getTextNodesFromElement(this.inlineEditorContainer);
|
|
216
|
+
const firstText = textNodes[0];
|
|
217
|
+
const lastText = textNodes.at(-1);
|
|
218
|
+
if (!firstText || !lastText) {
|
|
219
|
+
return null;
|
|
220
|
+
}
|
|
221
|
+
const range = this.ownerDocument.createRange();
|
|
222
|
+
range.setStart(firstText, 0);
|
|
223
|
+
range.setEnd(lastText, lastText.length);
|
|
224
|
+
const rect = range.getBoundingClientRect();
|
|
225
|
+
return rect.width > 0 || rect.height > 0 ? rect : null;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* The size the shape should take, measured on the editor DOM.
|
|
229
|
+
*
|
|
230
|
+
* Without a numeric `maxWidth` the editor box *is* the text box, so its own
|
|
231
|
+
* offset size is the whole measure. Every framework shape (Wardley, EDGY,
|
|
232
|
+
* DDD, Cynefin) is in that case, and takes exactly the path it took before
|
|
233
|
+
* mind map nodes gained a maximum width.
|
|
234
|
+
*
|
|
235
|
+
* With a numeric `maxWidth` the box is capped by CSS and wraps, so
|
|
236
|
+
* `offsetWidth` alone no longer describes the text: a preedit string the
|
|
237
|
+
* browser has not reflowed yet extends past the box it is painted in. Take
|
|
238
|
+
* the widest measure available, then clamp it back to `maxWidth` so the
|
|
239
|
+
* shape never grows past the cap.
|
|
240
|
+
*/
|
|
241
|
+
_measureEditorSize(textResizing) {
|
|
242
|
+
const containerWidth = this.richText.offsetWidth;
|
|
243
|
+
const containerHeight = this.richText.offsetHeight;
|
|
244
|
+
const maxWidth = this.element.maxWidth;
|
|
245
|
+
if (typeof maxWidth !== 'number' ||
|
|
246
|
+
textResizing !== TextResizing.AUTO_WIDTH_AND_HEIGHT) {
|
|
247
|
+
return { containerWidth, containerHeight };
|
|
248
|
+
}
|
|
249
|
+
const [verticalPadding, horizontalPadding] = this.element.padding;
|
|
250
|
+
const bcr = this.richText.getBoundingClientRect();
|
|
251
|
+
const contentRect = this._getInlineEditorContentRect();
|
|
252
|
+
const rangeRect = this.inlineEditor
|
|
253
|
+
?.getNativeRange()
|
|
254
|
+
?.getBoundingClientRect();
|
|
255
|
+
const contentRectWidth = contentRect != null ? contentRect.width + horizontalPadding * 2 : 0;
|
|
256
|
+
const contentRectHeight = contentRect != null ? contentRect.height + verticalPadding * 2 : 0;
|
|
257
|
+
const rangeWidth = rangeRect != null
|
|
258
|
+
? Math.max(0, rangeRect.right - bcr.left + horizontalPadding)
|
|
259
|
+
: 0;
|
|
260
|
+
const rangeHeight = rangeRect != null
|
|
261
|
+
? Math.max(0, rangeRect.bottom - bcr.top + verticalPadding)
|
|
262
|
+
: 0;
|
|
263
|
+
return {
|
|
264
|
+
containerWidth: Math.min(Math.max(containerWidth, contentRectWidth, rangeWidth), maxWidth),
|
|
265
|
+
containerHeight: Math.max(containerHeight, contentRectHeight, rangeHeight),
|
|
266
|
+
};
|
|
267
|
+
}
|
|
183
268
|
_updateElementWH() {
|
|
184
269
|
if (this.element.textFitMode !== TextFitMode.Grow) {
|
|
185
270
|
// Fixed shape bounds: typing never resizes the shape. Contained mode
|
|
@@ -194,9 +279,8 @@ let EdgelessShapeTextEditor = (() => {
|
|
|
194
279
|
return;
|
|
195
280
|
}
|
|
196
281
|
const bcr = this.richText.getBoundingClientRect();
|
|
197
|
-
const containerHeight = this.richText.offsetHeight;
|
|
198
|
-
const containerWidth = this.richText.offsetWidth;
|
|
199
282
|
const textResizing = this.element.textResizing;
|
|
283
|
+
const { containerWidth, containerHeight } = this._measureEditorSize(textResizing);
|
|
200
284
|
if ((containerHeight !== this.element.h &&
|
|
201
285
|
textResizing === TextResizing.AUTO_HEIGHT) ||
|
|
202
286
|
(textResizing === TextResizing.AUTO_WIDTH_AND_HEIGHT &&
|
|
@@ -214,7 +298,11 @@ let EdgelessShapeTextEditor = (() => {
|
|
|
214
298
|
}
|
|
215
299
|
if (this.isMindMapNode) {
|
|
216
300
|
const mindmap = this.element.group;
|
|
217
|
-
|
|
301
|
+
// Re-place the nodes, but without re-applying the style: that would
|
|
302
|
+
// fit the node back to the text the *model* holds and undo the size
|
|
303
|
+
// just measured from the editor. The full layout runs again when the
|
|
304
|
+
// editor is unmounted.
|
|
305
|
+
mindmap.layout(mindmap.tree, { applyStyle: false });
|
|
218
306
|
}
|
|
219
307
|
this.richText.style.minHeight = `${containerHeight}px`;
|
|
220
308
|
}
|
|
@@ -264,6 +352,12 @@ let EdgelessShapeTextEditor = (() => {
|
|
|
264
352
|
return;
|
|
265
353
|
this._unmount();
|
|
266
354
|
});
|
|
355
|
+
this.disposables.addFromEvent(this.inlineEditorContainer, 'compositionupdate', () => {
|
|
356
|
+
this._scheduleElementWHUpdate();
|
|
357
|
+
});
|
|
358
|
+
this.disposables.addFromEvent(this.inlineEditorContainer, 'compositionend', () => {
|
|
359
|
+
this._scheduleElementWHUpdate(true);
|
|
360
|
+
});
|
|
267
361
|
})
|
|
268
362
|
.catch(console.error);
|
|
269
363
|
this.disposables.addFromEvent(this, 'keydown', evt => {
|
|
@@ -293,13 +387,19 @@ let EdgelessShapeTextEditor = (() => {
|
|
|
293
387
|
const [verticalPadding, horiPadding] = this.element.padding;
|
|
294
388
|
const textResizing = this.element.textResizing;
|
|
295
389
|
const viewport = this.gfx.viewport;
|
|
296
|
-
|
|
390
|
+
// The editor is mounted inside the container the host may have scaled, so
|
|
391
|
+
// it is placed and scaled the way a gfx block is, not in screen pixels.
|
|
392
|
+
const scale = overlayScale(viewport);
|
|
297
393
|
const rect = getSelectedRect([this.element]);
|
|
298
394
|
const rotate = this.element.rotate;
|
|
299
395
|
const [leftTopX, leftTopY] = Vec.rotWith([rect.left, rect.top], [rect.left + rect.width / 2, rect.top + rect.height / 2], toRadian(rotate));
|
|
300
|
-
const [x, y] =
|
|
396
|
+
const [x, y] = toOverlayCoord(viewport, leftTopX, leftTopY);
|
|
301
397
|
const fixedBounds = this.element.textFitMode !== TextFitMode.Grow;
|
|
302
398
|
const autoWidth = !fixedBounds && textResizing === TextResizing.AUTO_WIDTH_AND_HEIGHT;
|
|
399
|
+
// A shape that grows up to a maximum width wraps instead of running off:
|
|
400
|
+
// `max-content` keeps the intrinsic width the box wants, `max-width` caps
|
|
401
|
+
// it, and the wrapping rules below break the overflowing line.
|
|
402
|
+
const constrainedAutoWidth = autoWidth && typeof this.element.maxWidth === 'number';
|
|
303
403
|
const color = this.std
|
|
304
404
|
.get(ThemeProvider)
|
|
305
405
|
.generateColorProperty(this.element.color, '#000000');
|
|
@@ -307,11 +407,15 @@ let EdgelessShapeTextEditor = (() => {
|
|
|
307
407
|
position: 'absolute',
|
|
308
408
|
left: x + 'px',
|
|
309
409
|
top: y + 'px',
|
|
310
|
-
width:
|
|
410
|
+
width: constrainedAutoWidth
|
|
411
|
+
? 'max-content'
|
|
412
|
+
: autoWidth
|
|
413
|
+
? 'fit-content'
|
|
414
|
+
: rect.width + 'px',
|
|
311
415
|
// override rich-text style (height: 100%)
|
|
312
416
|
height: 'initial',
|
|
313
417
|
minHeight: autoWidth ? '1em' : `${rect.height}px`,
|
|
314
|
-
maxWidth:
|
|
418
|
+
maxWidth: constrainedAutoWidth
|
|
315
419
|
? `${this.element.maxWidth}px`
|
|
316
420
|
: undefined,
|
|
317
421
|
boxSizing: 'border-box',
|
|
@@ -320,7 +424,7 @@ let EdgelessShapeTextEditor = (() => {
|
|
|
320
424
|
fontWeight: this.element.fontWeight,
|
|
321
425
|
lineHeight: 'normal',
|
|
322
426
|
outline: 'none',
|
|
323
|
-
transform: `scale(${
|
|
427
|
+
transform: `scale(${scale}, ${scale}) rotate(${rotate}deg)`,
|
|
324
428
|
transformOrigin: 'top left',
|
|
325
429
|
color,
|
|
326
430
|
padding: `${verticalPadding}px ${horiPadding}px`,
|
|
@@ -339,9 +443,15 @@ let EdgelessShapeTextEditor = (() => {
|
|
|
339
443
|
this._lastXYWH = this.element.xywh;
|
|
340
444
|
return html ` <style>
|
|
341
445
|
edgeless-shape-text-editor v-text [data-v-text] {
|
|
342
|
-
overflow-wrap: ${autoWidth
|
|
343
|
-
|
|
344
|
-
|
|
446
|
+
overflow-wrap: ${autoWidth && !constrainedAutoWidth
|
|
447
|
+
? 'normal'
|
|
448
|
+
: 'anywhere'};
|
|
449
|
+
word-break: ${autoWidth && !constrainedAutoWidth
|
|
450
|
+
? 'normal'
|
|
451
|
+
: 'break-word'} !important;
|
|
452
|
+
white-space: ${autoWidth && !constrainedAutoWidth
|
|
453
|
+
? 'pre'
|
|
454
|
+
: 'pre-wrap'} !important;
|
|
345
455
|
}
|
|
346
456
|
|
|
347
457
|
edgeless-shape-text-editor .inline-editor {
|
|
@@ -369,6 +479,7 @@ let EdgelessShapeTextEditor = (() => {
|
|
|
369
479
|
set richText(value) { this.#richText_accessor_storage = value; }
|
|
370
480
|
constructor() {
|
|
371
481
|
super(...arguments);
|
|
482
|
+
this._compositionUpdateRaf = null;
|
|
372
483
|
this._keeping = false;
|
|
373
484
|
this._lastXYWH = '';
|
|
374
485
|
this._resizeObserver = null;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ViewExtensionProvider, } from '../affine-ext-loader/index.js';
|
|
2
|
-
import {
|
|
2
|
+
import { CommandExtension } from '../std/index.js';
|
|
3
|
+
import { shapeCommands } from './commands.js';
|
|
3
4
|
import { effects } from './effects.js';
|
|
4
|
-
import { shapeShortcuts } from './shortcuts.js';
|
|
5
5
|
import { HighlighterElementRendererExtension, ShapeElementRendererExtension, } from './element-renderer/index.js';
|
|
6
6
|
import { ShapeDomRendererExtension } from './element-renderer/shape-dom.js';
|
|
7
7
|
import { ShapeElementView, ShapeViewInteraction } from './element-view.js';
|
|
@@ -30,7 +30,7 @@ export class ShapeViewExtension extends ViewExtensionProvider {
|
|
|
30
30
|
context.register(shapeToolbarExtension);
|
|
31
31
|
context.register(ShapeViewInteraction);
|
|
32
32
|
// Edgeless-scoped, enumerable/rebindable (installer: root view.ts).
|
|
33
|
-
context.register(
|
|
33
|
+
context.register(CommandExtension(shapeCommands));
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
}
|
|
@@ -4,10 +4,12 @@ declare const EdgelessTemplateButton_base: typeof LitElement & import("../../glo
|
|
|
4
4
|
export declare class EdgelessTemplateButton extends EdgelessTemplateButton_base {
|
|
5
5
|
static styles: import("lit").CSSResult;
|
|
6
6
|
private _cleanup;
|
|
7
|
+
private _autoUpdateCleanup;
|
|
7
8
|
private _prevTool;
|
|
8
9
|
enableActiveBackground: boolean;
|
|
9
10
|
type: typeof TemplateTool;
|
|
10
11
|
get cards(): import("lit-html").TemplateResult<2>[];
|
|
12
|
+
connectedCallback(): void;
|
|
11
13
|
private _closePanel;
|
|
12
14
|
private _togglePanel;
|
|
13
15
|
render(): import("lit-html").TemplateResult<1>;
|
|
@@ -151,10 +151,21 @@ let EdgelessTemplateButton = (() => {
|
|
|
151
151
|
const { theme } = this;
|
|
152
152
|
return [TemplateCard1[theme], TemplateCard2[theme], TemplateCard3[theme]];
|
|
153
153
|
}
|
|
154
|
+
connectedCallback() {
|
|
155
|
+
super.connectedCallback();
|
|
156
|
+
// The panel can still be open when the button is removed: without this the
|
|
157
|
+
// `autoUpdate` listeners outlive the element and leak.
|
|
158
|
+
this.disposables.add(() => {
|
|
159
|
+
this._autoUpdateCleanup?.();
|
|
160
|
+
this._autoUpdateCleanup = null;
|
|
161
|
+
});
|
|
162
|
+
}
|
|
154
163
|
_closePanel() {
|
|
155
164
|
if (this._openedPanel) {
|
|
156
165
|
this._openedPanel.remove();
|
|
157
166
|
this._openedPanel = null;
|
|
167
|
+
this._autoUpdateCleanup?.();
|
|
168
|
+
this._autoUpdateCleanup = null;
|
|
158
169
|
this._cleanup?.();
|
|
159
170
|
this._cleanup = null;
|
|
160
171
|
this.requestUpdate();
|
|
@@ -188,8 +199,13 @@ let EdgelessTemplateButton = (() => {
|
|
|
188
199
|
this._openedPanel = panel;
|
|
189
200
|
this.renderRoot.append(panel);
|
|
190
201
|
requestAnimationFrame(() => {
|
|
202
|
+
// The panel may already have been closed before this frame ran; starting
|
|
203
|
+
// a loop on it now would never be stopped.
|
|
204
|
+
if (this._openedPanel !== panel)
|
|
205
|
+
return;
|
|
191
206
|
const arrowEl = panel.renderRoot.querySelector('.arrow');
|
|
192
|
-
|
|
207
|
+
this._autoUpdateCleanup?.();
|
|
208
|
+
this._autoUpdateCleanup = autoUpdate(this, panel, () => {
|
|
193
209
|
computePosition(this, panel, {
|
|
194
210
|
placement: 'top',
|
|
195
211
|
middleware: [offset(20), arrow({ element: arrowEl }), shift()],
|
|
@@ -230,6 +246,7 @@ let EdgelessTemplateButton = (() => {
|
|
|
230
246
|
constructor() {
|
|
231
247
|
super(...arguments);
|
|
232
248
|
this._cleanup = null;
|
|
249
|
+
this._autoUpdateCleanup = null;
|
|
233
250
|
this._prevTool = null;
|
|
234
251
|
this.enableActiveBackground = true;
|
|
235
252
|
this.type = TemplateTool;
|
|
@@ -35,7 +35,7 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
|
|
|
35
35
|
import { CanvasElementType, DefaultTool, EdgelessCRUDIdentifier, getSurfaceBlock, TextUtils, } from '../affine-block-surface/index.js';
|
|
36
36
|
import { DefaultTheme, TextElementModel } from '../affine-model/index.js';
|
|
37
37
|
import { ThemeProvider } from '../affine-shared/services/index.js';
|
|
38
|
-
import { getSelectedRect } from '../affine-shared/utils/index.js';
|
|
38
|
+
import { getSelectedRect, overlayScale, toOverlayCoord, } from '../affine-shared/utils/index.js';
|
|
39
39
|
import { Bound, toRadian, Vec } from '../global/gfx/index.js';
|
|
40
40
|
import { WithDisposable } from '../global/lit/index.js';
|
|
41
41
|
import { ShadowlessElement, stdContext, } from '../std/index.js';
|
|
@@ -281,13 +281,17 @@ let EdgelessTextEditor = (() => {
|
|
|
281
281
|
const { text, fontFamily, fontSize, fontWeight, fontStyle, textAlign, rotate, hasMaxWidth, w, } = this.element;
|
|
282
282
|
const lineHeight = getLineHeight(fontFamily, fontSize, fontWeight);
|
|
283
283
|
const rect = getSelectedRect([this.element]);
|
|
284
|
-
const
|
|
284
|
+
const viewport = this.gfx.viewport;
|
|
285
285
|
const [visualX, visualY] = this.getVisualPosition(this.element);
|
|
286
286
|
const containerOffset = this.getContainerOffset();
|
|
287
|
+
// The editor is mounted inside the container the host may have scaled, so
|
|
288
|
+
// it is placed and scaled the way a gfx block is, not in screen pixels.
|
|
289
|
+
// Panning the viewport and reaching the element are one and the same
|
|
290
|
+
// translation, which is what `toOverlayCoord` answers.
|
|
291
|
+
const [x, y] = toOverlayCoord(viewport, visualX, visualY);
|
|
287
292
|
const transformOperation = [
|
|
288
|
-
`translate(${
|
|
289
|
-
`
|
|
290
|
-
`scale(${zoom})`,
|
|
293
|
+
`translate(${x}px, ${y}px)`,
|
|
294
|
+
`scale(${overlayScale(viewport)})`,
|
|
291
295
|
`rotate(${rotate}deg)`,
|
|
292
296
|
`translate(${containerOffset})`,
|
|
293
297
|
];
|
|
@@ -1,7 +1,37 @@
|
|
|
1
1
|
import { DocModeProvider, TelemetryProvider, } from '../affine-shared/services/index.js';
|
|
2
|
+
function openInlineLatexEditor(inlineEditor, index) {
|
|
3
|
+
inlineEditor
|
|
4
|
+
.waitForUpdate()
|
|
5
|
+
.then(async () => {
|
|
6
|
+
await inlineEditor.waitForUpdate();
|
|
7
|
+
const textPoint = inlineEditor.getTextPoint(index);
|
|
8
|
+
if (!textPoint)
|
|
9
|
+
return;
|
|
10
|
+
const [text] = textPoint;
|
|
11
|
+
const latexNode = text.parentElement?.closest('affine-latex-node');
|
|
12
|
+
if (!latexNode)
|
|
13
|
+
return;
|
|
14
|
+
latexNode.toggleEditor();
|
|
15
|
+
})
|
|
16
|
+
.catch(console.error);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* An inline equation can only replace a range living in a single block, so a
|
|
20
|
+
* selection spanning several blocks is refused instead of silently applying to
|
|
21
|
+
* its first block.
|
|
22
|
+
*/
|
|
23
|
+
function getSingleBlockInlineRange(textSelection) {
|
|
24
|
+
if (textSelection.to) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
index: textSelection.from.index,
|
|
29
|
+
length: textSelection.from.length,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
2
32
|
export const insertInlineLatex = (ctx, next) => {
|
|
3
33
|
const textSelection = ctx.textSelection ?? ctx.currentTextSelection;
|
|
4
|
-
if (!textSelection
|
|
34
|
+
if (!textSelection)
|
|
5
35
|
return;
|
|
6
36
|
const blockComponent = ctx.std.view.getBlock(textSelection.from.blockId);
|
|
7
37
|
if (!blockComponent)
|
|
@@ -12,18 +42,17 @@ export const insertInlineLatex = (ctx, next) => {
|
|
|
12
42
|
const inlineEditor = richText.inlineEditor;
|
|
13
43
|
if (!inlineEditor)
|
|
14
44
|
return;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
});
|
|
45
|
+
const inlineRange = getSingleBlockInlineRange(textSelection);
|
|
46
|
+
if (!inlineRange)
|
|
47
|
+
return;
|
|
48
|
+
// A non-collapsed selection becomes the equation source, so selecting a
|
|
49
|
+
// formula and asking for an inline equation renders what was already typed.
|
|
50
|
+
const latex = textSelection.isCollapsed()
|
|
51
|
+
? ''
|
|
52
|
+
: inlineEditor.yTextString.slice(inlineRange.index, inlineRange.index + inlineRange.length);
|
|
53
|
+
inlineEditor.insertText(inlineRange, ' ', { latex });
|
|
25
54
|
inlineEditor.setInlineRange({
|
|
26
|
-
index:
|
|
55
|
+
index: inlineRange.index,
|
|
27
56
|
length: 1,
|
|
28
57
|
});
|
|
29
58
|
const mode = ctx.std.get(DocModeProvider).getEditorMode() ?? 'page';
|
|
@@ -39,19 +68,10 @@ export const insertInlineLatex = (ctx, next) => {
|
|
|
39
68
|
module: 'inline equation',
|
|
40
69
|
control: 'create inline equation',
|
|
41
70
|
});
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
if (!textPoint)
|
|
48
|
-
return;
|
|
49
|
-
const [text] = textPoint;
|
|
50
|
-
const latexNode = text.parentElement?.closest('affine-latex-node');
|
|
51
|
-
if (!latexNode)
|
|
52
|
-
return;
|
|
53
|
-
latexNode.toggleEditor();
|
|
54
|
-
})
|
|
55
|
-
.catch(console.error);
|
|
71
|
+
// Only an empty equation needs the editor right away; one built from a
|
|
72
|
+
// selection already has its content.
|
|
73
|
+
if (textSelection.isCollapsed()) {
|
|
74
|
+
openInlineLatexEditor(inlineEditor, inlineRange.index + 1);
|
|
75
|
+
}
|
|
56
76
|
next();
|
|
57
77
|
};
|
|
@@ -2,15 +2,25 @@ import type { AffineTextAttributes } from '../../affine-shared/types/index.js';
|
|
|
2
2
|
import { type BlockStdScope, ShadowlessElement } from '../../std/index.js';
|
|
3
3
|
import { type InlineEditor } from '../../std/inline/index.js';
|
|
4
4
|
import type { DeltaInsert } from '../../store/index.js';
|
|
5
|
+
import { type PropertyValues } from 'lit';
|
|
5
6
|
declare const AffineLatexNode_base: typeof ShadowlessElement & import("../../global/utils/types.js").Constructor<import("../../global/lit/with-disposable.js").DisposableClass>;
|
|
6
7
|
export declare class AffineLatexNode extends AffineLatexNode_base {
|
|
7
8
|
static styles: import("lit").CSSResult;
|
|
8
9
|
private _editorAbortController;
|
|
10
|
+
private _isEditorOpen;
|
|
9
11
|
readonly latex$: import("@preact/signals-core").Signal<string>;
|
|
10
12
|
readonly latexEditorSignal: import("@preact/signals-core").Signal<string>;
|
|
11
13
|
get deltaLatex(): string;
|
|
12
14
|
get latexContainer(): HTMLElement | null;
|
|
13
15
|
connectedCallback(): void;
|
|
16
|
+
/**
|
|
17
|
+
* The delta is the source of truth: when it changes underneath us (undo, a
|
|
18
|
+
* remote edit, a paste replacing the node) the signals must follow it,
|
|
19
|
+
* otherwise the node keeps painting the equation it was first created with.
|
|
20
|
+
* While the editor is open the user is the source of truth instead, so the
|
|
21
|
+
* in-flight draft is left alone.
|
|
22
|
+
*/
|
|
23
|
+
protected updated(changedProperties: PropertyValues<this>): void;
|
|
14
24
|
render(): import("lit-html").TemplateResult<1>;
|
|
15
25
|
toggleEditor(): void;
|
|
16
26
|
get readonly(): boolean;
|
|
@@ -203,6 +203,26 @@ let AffineLatexNode = (() => {
|
|
|
203
203
|
});
|
|
204
204
|
return result;
|
|
205
205
|
}
|
|
206
|
+
/**
|
|
207
|
+
* The delta is the source of truth: when it changes underneath us (undo, a
|
|
208
|
+
* remote edit, a paste replacing the node) the signals must follow it,
|
|
209
|
+
* otherwise the node keeps painting the equation it was first created with.
|
|
210
|
+
* While the editor is open the user is the source of truth instead, so the
|
|
211
|
+
* in-flight draft is left alone.
|
|
212
|
+
*/
|
|
213
|
+
updated(changedProperties) {
|
|
214
|
+
super.updated(changedProperties);
|
|
215
|
+
if (!changedProperties.has('delta') || this._isEditorOpen) {
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
const latex = this.deltaLatex;
|
|
219
|
+
if (this.latex$.peek() !== latex) {
|
|
220
|
+
this.latex$.value = latex;
|
|
221
|
+
}
|
|
222
|
+
if (this.latexEditorSignal.peek() !== latex) {
|
|
223
|
+
this.latexEditorSignal.value = latex;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
206
226
|
render() {
|
|
207
227
|
return html `<span class="affine-latex" data-selected=${this.selected}
|
|
208
228
|
><div class="latex-container"></div>
|
|
@@ -237,7 +257,9 @@ let AffineLatexNode = (() => {
|
|
|
237
257
|
zIndex: 'var(--affine-z-index-popover)',
|
|
238
258
|
},
|
|
239
259
|
});
|
|
260
|
+
this._isEditorOpen = true;
|
|
240
261
|
this._editorAbortController.signal.addEventListener('abort', () => {
|
|
262
|
+
this._isEditorOpen = false;
|
|
241
263
|
portal.remove();
|
|
242
264
|
const latex = this.latexEditorSignal.peek();
|
|
243
265
|
this.latex$.value = latex;
|
|
@@ -279,6 +301,7 @@ let AffineLatexNode = (() => {
|
|
|
279
301
|
constructor() {
|
|
280
302
|
super(...arguments);
|
|
281
303
|
this._editorAbortController = null;
|
|
304
|
+
this._isEditorOpen = false;
|
|
282
305
|
this.latex$ = signal('');
|
|
283
306
|
this.latexEditorSignal = signal('');
|
|
284
307
|
this.#delta_accessor_storage = __runInitializers(this, _delta_initializers, {
|
|
@@ -124,10 +124,13 @@ let AffineLink = (() => {
|
|
|
124
124
|
></a>`;
|
|
125
125
|
}
|
|
126
126
|
render() {
|
|
127
|
+
// No `text-decoration` here on purpose: this object is the OVERRIDE handed
|
|
128
|
+
// to `affineTextStyles`, and it is spread last, so any decoration it names
|
|
129
|
+
// would silently erase the one computed from `strike` / `underline`.
|
|
130
|
+
// A plain link still shows none — `affineTextStyles` defaults to 'none'.
|
|
127
131
|
const linkStyle = {
|
|
128
132
|
color: 'var(--affine-link-color)',
|
|
129
133
|
fill: 'var(--affine-link-color)',
|
|
130
|
-
'text-decoration': 'none',
|
|
131
134
|
cursor: 'pointer',
|
|
132
135
|
};
|
|
133
136
|
if (this.delta.attributes && this.delta.attributes?.code) {
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
export declare const htmlTextToDeltaMatcher: import("../../../store/index.js").ExtensionType & {
|
|
2
2
|
identifier: import("../../../global/di/types.js").ServiceIdentifier<import("../../../affine-shared/adapters/index.js").HtmlASTToDeltaMatcher>;
|
|
3
3
|
};
|
|
4
|
+
export declare const htmlColorStyleElementToDeltaMatcher: import("../../../store/index.js").ExtensionType & {
|
|
5
|
+
identifier: import("../../../global/di/types.js").ServiceIdentifier<import("../../../affine-shared/adapters/index.js").HtmlASTToDeltaMatcher>;
|
|
6
|
+
};
|
|
4
7
|
export declare const htmlTextLikeElementToDeltaMatcher: import("../../../store/index.js").ExtensionType & {
|
|
5
8
|
identifier: import("../../../global/di/types.js").ServiceIdentifier<import("../../../affine-shared/adapters/index.js").HtmlASTToDeltaMatcher>;
|
|
6
9
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { HtmlASTToDeltaExtension, } from '../../../affine-shared/adapters/index.js';
|
|
1
|
+
import { extractColorFromStyle, HtmlASTToDeltaExtension, resolveNearestSupportedColor, } from '../../../affine-shared/adapters/index.js';
|
|
2
2
|
import { collapseWhiteSpace } from 'collapse-white-space';
|
|
3
3
|
/**
|
|
4
4
|
* Handle empty text nodes created by HTML parser for styling purposes.
|
|
@@ -147,6 +147,33 @@ export const htmlTextToDeltaMatcher = HtmlASTToDeltaExtension({
|
|
|
147
147
|
return value ? [{ insert: value }] : [];
|
|
148
148
|
},
|
|
149
149
|
});
|
|
150
|
+
export const htmlColorStyleElementToDeltaMatcher = HtmlASTToDeltaExtension({
|
|
151
|
+
name: 'color-style-element',
|
|
152
|
+
match: ast => isElement(ast) &&
|
|
153
|
+
ast.tagName === 'span' &&
|
|
154
|
+
typeof ast.properties?.style === 'string' &&
|
|
155
|
+
/color\s*:/i.test(ast.properties.style),
|
|
156
|
+
toDelta: (ast, context) => {
|
|
157
|
+
if (!isElement(ast)) {
|
|
158
|
+
return [];
|
|
159
|
+
}
|
|
160
|
+
const baseOptions = { ...context.options, trim: false };
|
|
161
|
+
// In preformatted contexts (e.g. code blocks) we don't keep inline colors.
|
|
162
|
+
if (baseOptions.pre) {
|
|
163
|
+
return ast.children.flatMap(child => context.toDelta(child, baseOptions));
|
|
164
|
+
}
|
|
165
|
+
const colorValue = extractColorFromStyle(typeof ast.properties?.style === 'string' ? ast.properties.style : '');
|
|
166
|
+
const mappedColor = colorValue
|
|
167
|
+
? resolveNearestSupportedColor(colorValue)
|
|
168
|
+
: null;
|
|
169
|
+
return ast.children.flatMap(child => context.toDelta(child, baseOptions).map(delta => {
|
|
170
|
+
if (mappedColor) {
|
|
171
|
+
delta.attributes = { ...delta.attributes, color: mappedColor };
|
|
172
|
+
}
|
|
173
|
+
return delta;
|
|
174
|
+
}));
|
|
175
|
+
},
|
|
176
|
+
});
|
|
150
177
|
export const htmlTextLikeElementToDeltaMatcher = HtmlASTToDeltaExtension({
|
|
151
178
|
name: 'text-like-element',
|
|
152
179
|
match: ast => isTextLikeElement(ast),
|
|
@@ -251,6 +278,7 @@ export const htmlBrElementToDeltaMatcher = HtmlASTToDeltaExtension({
|
|
|
251
278
|
});
|
|
252
279
|
export const HtmlInlineToDeltaAdapterExtensions = [
|
|
253
280
|
htmlTextToDeltaMatcher,
|
|
281
|
+
htmlColorStyleElementToDeltaMatcher,
|
|
254
282
|
htmlTextLikeElementToDeltaMatcher,
|
|
255
283
|
htmlStrongElementToDeltaMatcher,
|
|
256
284
|
htmlItalicElementToDeltaMatcher,
|
|
@@ -225,6 +225,10 @@ let ConnectorElementModel = (() => {
|
|
|
225
225
|
*/
|
|
226
226
|
getNearestPoint(point) {
|
|
227
227
|
const { mode, absolutePath: path } = this;
|
|
228
|
+
// Degraded connector (vanished endpoint): no path to project onto.
|
|
229
|
+
if (path.length === 0) {
|
|
230
|
+
return [this.x, this.y];
|
|
231
|
+
}
|
|
228
232
|
if (mode === ConnectorMode.Straight) {
|
|
229
233
|
const first = path[0];
|
|
230
234
|
const last = path[path.length - 1];
|
|
@@ -249,6 +253,10 @@ let ConnectorElementModel = (() => {
|
|
|
249
253
|
*/
|
|
250
254
|
getOffsetDistanceByPoint(point, bounds) {
|
|
251
255
|
const { mode, absolutePath: path } = this;
|
|
256
|
+
// Degraded connector (vanished endpoint): no path to measure along.
|
|
257
|
+
if (path.length === 0) {
|
|
258
|
+
return 0.5;
|
|
259
|
+
}
|
|
252
260
|
let { x, y, w, h } = this;
|
|
253
261
|
if (bounds) {
|
|
254
262
|
x = bounds.x;
|
|
@@ -256,6 +264,9 @@ let ConnectorElementModel = (() => {
|
|
|
256
264
|
w = bounds.w;
|
|
257
265
|
h = bounds.h;
|
|
258
266
|
}
|
|
267
|
+
if (path.length === 0) {
|
|
268
|
+
return 0.5;
|
|
269
|
+
}
|
|
259
270
|
point[0] = Vec.clamp(point[0], x, x + w);
|
|
260
271
|
point[1] = Vec.clamp(point[1], y, y + h);
|
|
261
272
|
if (mode === ConnectorMode.Straight) {
|
|
@@ -282,6 +293,11 @@ let ConnectorElementModel = (() => {
|
|
|
282
293
|
*/
|
|
283
294
|
getPointByOffsetDistance(offsetDistance = 0.5, bounds) {
|
|
284
295
|
const { mode, absolutePath: path } = this;
|
|
296
|
+
// Degraded connector (vanished endpoint): fall back to the bound center.
|
|
297
|
+
if (path.length === 0) {
|
|
298
|
+
const b = bounds ?? this;
|
|
299
|
+
return [b.x + b.w / 2, b.y + b.h / 2];
|
|
300
|
+
}
|
|
285
301
|
if (mode === ConnectorMode.Straight) {
|
|
286
302
|
const first = path[0];
|
|
287
303
|
const last = path[path.length - 1];
|
|
@@ -294,6 +310,9 @@ let ConnectorElementModel = (() => {
|
|
|
294
310
|
w = bounds.w;
|
|
295
311
|
h = bounds.h;
|
|
296
312
|
}
|
|
313
|
+
if (path.length === 0) {
|
|
314
|
+
return [x + w / 2, y + h / 2];
|
|
315
|
+
}
|
|
297
316
|
if (mode === ConnectorMode.Orthogonal) {
|
|
298
317
|
const points = path.map(p => [p[0], p[1]]);
|
|
299
318
|
const point = Polyline.pointAt(points, offsetDistance);
|
|
@@ -323,6 +342,11 @@ let ConnectorElementModel = (() => {
|
|
|
323
342
|
return true;
|
|
324
343
|
}
|
|
325
344
|
const { mode, strokeWidth, absolutePath: path } = this;
|
|
345
|
+
// Degraded connector (vanished endpoint): nothing painted, nothing hit.
|
|
346
|
+
// The label check above still applies if a label is displayed.
|
|
347
|
+
if (path.length === 0) {
|
|
348
|
+
return false;
|
|
349
|
+
}
|
|
326
350
|
const point = mode === ConnectorMode.Curve
|
|
327
351
|
? getBezierNearestPoint(getBezierParameters(path), currentPoint)
|
|
328
352
|
: polyLineNearestPoint(path, currentPoint);
|