@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,246 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reading and writing the level-3 qualification carried by
|
|
3
|
+
* {@link GfxPrimitiveElementModel.tags} (ADR 0007 § 4).
|
|
4
|
+
*
|
|
5
|
+
* The persisted shape is a nested `Y.Map<string[]>` keyed by tag def id, so two
|
|
6
|
+
* people qualifying one element on two DIFFERENT tags both keep their work.
|
|
7
|
+
* Everything that reads it wants a plain object, and everything that writes it
|
|
8
|
+
* has exactly three cases to get right (create the map, mutate it in place,
|
|
9
|
+
* remove the key when the last tag goes). Both live here so no call site has to
|
|
10
|
+
* remember either.
|
|
11
|
+
*
|
|
12
|
+
* Nothing in this module knows what a tag MEANS. Definitions are runtime
|
|
13
|
+
* configuration owned by the host (`UniverseTagDefsProvider`) and are never
|
|
14
|
+
* persisted: a value whose def has vanished still loads, and is displayed as its
|
|
15
|
+
* raw id.
|
|
16
|
+
*/
|
|
17
|
+
import * as Y from 'yjs';
|
|
18
|
+
/** The `@field()` key. Spelled once. */
|
|
19
|
+
export const ELEMENT_TAGS_FIELD = 'tags';
|
|
20
|
+
/**
|
|
21
|
+
* Value ids, cleaned: strings only, no blanks, no duplicates, order preserved.
|
|
22
|
+
*
|
|
23
|
+
* Persisted values are plain `string`s and are never narrowed, because a
|
|
24
|
+
* document may legitimately carry an id whose def was removed, renamed or never
|
|
25
|
+
* seeded in this deployment — and it must still open. What this rejects is not
|
|
26
|
+
* an unknown id but a non-value: `null`, a number, an object, the empty string.
|
|
27
|
+
*/
|
|
28
|
+
function cleanValues(values) {
|
|
29
|
+
if (!Array.isArray(values))
|
|
30
|
+
return [];
|
|
31
|
+
const seen = new Set();
|
|
32
|
+
const cleaned = [];
|
|
33
|
+
for (const value of values) {
|
|
34
|
+
if (typeof value !== 'string' || value.length === 0)
|
|
35
|
+
continue;
|
|
36
|
+
if (seen.has(value))
|
|
37
|
+
continue;
|
|
38
|
+
seen.add(value);
|
|
39
|
+
cleaned.push(value);
|
|
40
|
+
}
|
|
41
|
+
return cleaned;
|
|
42
|
+
}
|
|
43
|
+
const sameValues = (a, b) => a.length === b.length && a.every((value, i) => value === b[i]);
|
|
44
|
+
/**
|
|
45
|
+
* The **degraded shape**: `tags` stored as a plain object rather than a
|
|
46
|
+
* `Y.Map`.
|
|
47
|
+
*
|
|
48
|
+
* This is not a hypothetical. A client that predates this field does not
|
|
49
|
+
* DECLARE it, so on the five element-creation-from-props paths (paste,
|
|
50
|
+
* duplicate, alt-drag clone, turn-into-linked-doc, `updateElement` with an
|
|
51
|
+
* undeclared key) `_assignElementProp` routes it down the unknown-key branch —
|
|
52
|
+
* and that branch's encodability guard accepts the serialized form of the
|
|
53
|
+
* nested map perfectly, because it IS flat JSON: an object of arrays of
|
|
54
|
+
* strings. So the value is written verbatim, as a plain object.
|
|
55
|
+
*
|
|
56
|
+
* The unknown-key branch is doing exactly its job — preserving a key it does
|
|
57
|
+
* not understand. It is THIS side that has to meet it halfway, and in this
|
|
58
|
+
* release rather than a later one: the whole point of shipping the declaration
|
|
59
|
+
* before anything writes the field is that the fleet floor tolerates the key,
|
|
60
|
+
* and tolerance that cannot read the only other shape in existence is not
|
|
61
|
+
* tolerance.
|
|
62
|
+
*
|
|
63
|
+
* Reading normalizes it (below); the first write CONVERTS it
|
|
64
|
+
* ({@link setElementTag}), so the degraded shape is transitional per element
|
|
65
|
+
* and never persists past a qualification gesture.
|
|
66
|
+
*/
|
|
67
|
+
function isDegradedTags(value) {
|
|
68
|
+
return (typeof value === 'object' &&
|
|
69
|
+
value !== null &&
|
|
70
|
+
!(value instanceof Y.AbstractType) &&
|
|
71
|
+
!Array.isArray(value) &&
|
|
72
|
+
!(value instanceof Uint8Array));
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* The element's tags as `[tagId, rawValues]` pairs, whichever shape they are
|
|
76
|
+
* stored in. One place normalizes the two vintages so no reader has to know
|
|
77
|
+
* that there are two.
|
|
78
|
+
*/
|
|
79
|
+
function tagEntries(element) {
|
|
80
|
+
const stored = element.tags;
|
|
81
|
+
if (stored instanceof Y.Map)
|
|
82
|
+
return [...stored.entries()];
|
|
83
|
+
if (isDegradedTags(stored))
|
|
84
|
+
return Object.entries(stored);
|
|
85
|
+
return [];
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Every tag on the element, as plain JSON. `{}` when unqualified — absent and
|
|
89
|
+
* empty are the same fact, and no caller should have to distinguish them.
|
|
90
|
+
*
|
|
91
|
+
* Defensive by construction: the map is a document value, so a client of any
|
|
92
|
+
* vintage may have written something else into it. Both shapes a real client
|
|
93
|
+
* can produce are read ({@link isDegradedTags}); a malformed entry is skipped,
|
|
94
|
+
* never thrown on. A board that cannot be read is worse than a tag that is not.
|
|
95
|
+
*/
|
|
96
|
+
export function readElementTags(element) {
|
|
97
|
+
const tags = {};
|
|
98
|
+
for (const [tagId, values] of tagEntries(element)) {
|
|
99
|
+
if (typeof tagId !== 'string' || tagId.length === 0)
|
|
100
|
+
continue;
|
|
101
|
+
const cleaned = cleanValues(values);
|
|
102
|
+
if (cleaned.length)
|
|
103
|
+
tags[tagId] = cleaned;
|
|
104
|
+
}
|
|
105
|
+
return tags;
|
|
106
|
+
}
|
|
107
|
+
/** The value ids selected for one tag, `[]` when it carries none. */
|
|
108
|
+
export function elementTagValues(element, tagId) {
|
|
109
|
+
const stored = element.tags;
|
|
110
|
+
if (stored instanceof Y.Map)
|
|
111
|
+
return cleanValues(stored.get(tagId));
|
|
112
|
+
if (isDegradedTags(stored))
|
|
113
|
+
return cleanValues(stored[tagId]);
|
|
114
|
+
return [];
|
|
115
|
+
}
|
|
116
|
+
/** Whether the element carries `valueId` under `tagId`. */
|
|
117
|
+
export function hasElementTagValue(element, tagId, valueId) {
|
|
118
|
+
return elementTagValues(element, tagId).includes(valueId);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Set (or, with an empty `values`, remove) ONE tag on ONE element. Returns
|
|
122
|
+
* whether anything was written — a gesture that changes nothing must not cost an
|
|
123
|
+
* undo step and must not be reported.
|
|
124
|
+
*
|
|
125
|
+
* The caller owns `store.captureSync()`, and owes it BEFORE this call: the undo
|
|
126
|
+
* manager is built with no `captureTimeout`, so a qualification issued within
|
|
127
|
+
* 500 ms of a drag would otherwise be undone together with the drag — making a
|
|
128
|
+
* promotion look like it moved geometry, which is exactly what the ladder's
|
|
129
|
+
* invariants forbid.
|
|
130
|
+
*
|
|
131
|
+
* ## The cases, and why the first one is the point
|
|
132
|
+
*
|
|
133
|
+
* - **A `Y.Map` already** — the entry is set IN PLACE. Replacing the whole map
|
|
134
|
+
* instead would restore whole-blob last-write-wins and silently drop a
|
|
135
|
+
* concurrent edit on a different tag, which is the single reason the field is
|
|
136
|
+
* a nested map at all. Removing the last entry removes the key with
|
|
137
|
+
* `clearField` rather than leaving an empty map behind: an element qualified
|
|
138
|
+
* and then un-qualified goes back to costing nothing, like one that never was.
|
|
139
|
+
* - **Nothing yet** — a map is created and assigned through `updateElement`,
|
|
140
|
+
* which is what attaches it to the document and starts the nested observer.
|
|
141
|
+
* - **The degraded shape** ({@link isDegradedTags}) — the map is created from
|
|
142
|
+
* what is ALREADY there, plus the change. This is the one case where
|
|
143
|
+
* replacing wholesale is right, because a plain object was never mergeable in
|
|
144
|
+
* the first place; what would be wrong, and was, is replacing it with a map
|
|
145
|
+
* holding only the new tag. A colleague's qualification, written by a client
|
|
146
|
+
* that predates this field, would leave without a word.
|
|
147
|
+
*
|
|
148
|
+
* ## Read-only
|
|
149
|
+
*
|
|
150
|
+
* A read-only store is a no-op with a warning, not a throw and not a write.
|
|
151
|
+
* This is exported from `@labre/std/gfx`, so a host can call it directly, and
|
|
152
|
+
* the three write paths below reach the document three different ways: an
|
|
153
|
+
* in-place `store.transact` and `clearField` carry no read-only guard of their
|
|
154
|
+
* own (they would silently succeed), while `updateElement` throws. Three
|
|
155
|
+
* behaviours for one refusal is not a contract; one guard here is.
|
|
156
|
+
*/
|
|
157
|
+
export function setElementTag(element, tagId, values) {
|
|
158
|
+
if (typeof tagId !== 'string' || tagId.length === 0)
|
|
159
|
+
return false;
|
|
160
|
+
if (element.surface.store.readonly) {
|
|
161
|
+
console.warn(`Refusing to qualify element "${element.id}" with "${tagId}": the document is read-only.`);
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
const next = cleanValues(values);
|
|
165
|
+
const stored = element.tags;
|
|
166
|
+
if (sameValues(elementTagValues(element, tagId), next))
|
|
167
|
+
return false;
|
|
168
|
+
// The native shape: merge per tag, which is the whole design.
|
|
169
|
+
if (stored instanceof Y.Map) {
|
|
170
|
+
if (next.length === 0) {
|
|
171
|
+
element.surface.store.transact(() => {
|
|
172
|
+
stored.delete(tagId);
|
|
173
|
+
});
|
|
174
|
+
if (stored.size === 0)
|
|
175
|
+
element.clearField(ELEMENT_TAGS_FIELD);
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
element.surface.store.transact(() => {
|
|
179
|
+
stored.set(tagId, next);
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
return true;
|
|
183
|
+
}
|
|
184
|
+
// Absent, or the degraded shape. `readElementTags` normalizes both, so the
|
|
185
|
+
// conversion preserves whatever a pre-declaration client left behind.
|
|
186
|
+
const merged = readElementTags(element);
|
|
187
|
+
if (next.length === 0)
|
|
188
|
+
delete merged[tagId];
|
|
189
|
+
else
|
|
190
|
+
merged[tagId] = next;
|
|
191
|
+
const entries = Object.entries(merged);
|
|
192
|
+
if (entries.length === 0) {
|
|
193
|
+
// A degraded value emptied by this call: remove the key rather than write
|
|
194
|
+
// an empty map. (Absent-and-empty returned above, at `sameValues`.)
|
|
195
|
+
element.clearField(ELEMENT_TAGS_FIELD);
|
|
196
|
+
return true;
|
|
197
|
+
}
|
|
198
|
+
const created = new Y.Map();
|
|
199
|
+
for (const [id, cleaned] of entries)
|
|
200
|
+
created.set(id, cleaned);
|
|
201
|
+
element.surface.updateElement(element.id, { tags: created });
|
|
202
|
+
return true;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Rebuild `tags` as a `Y.Map` when it arrives as plain JSON.
|
|
206
|
+
*
|
|
207
|
+
* Called by `SurfaceBlockModel._propsToY` for EVERY element type, because the
|
|
208
|
+
* field is declared on the base class and per-class `propsToY` hooks are not.
|
|
209
|
+
* Without it, paste / duplicate / alt-drag clone would each store the copy's
|
|
210
|
+
* qualification as one opaque plain object — indistinguishable from a correct
|
|
211
|
+
* copy until two people edited it and one of them lost their tag.
|
|
212
|
+
*
|
|
213
|
+
* `element.serialize()` is `yMap.toJSON()`, so the nested map reaches every one
|
|
214
|
+
* of those paths as a plain object with no wrapper; the snapshot path arrives
|
|
215
|
+
* already converted by the `SURFACE_YMAP_UNIQ_IDENTIFIER` branch above the call
|
|
216
|
+
* and is passed through untouched. An empty (or unusable) value drops the key
|
|
217
|
+
* entirely rather than writing a tombstone.
|
|
218
|
+
*/
|
|
219
|
+
export function tagsPropToY(props) {
|
|
220
|
+
if (!(ELEMENT_TAGS_FIELD in props))
|
|
221
|
+
return;
|
|
222
|
+
const value = props[ELEMENT_TAGS_FIELD];
|
|
223
|
+
if (value instanceof Y.AbstractType)
|
|
224
|
+
return;
|
|
225
|
+
if (value === null || typeof value !== 'object') {
|
|
226
|
+
delete props[ELEMENT_TAGS_FIELD];
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
const entries = Object.entries(value)
|
|
230
|
+
.filter(([tagId]) => tagId.length > 0)
|
|
231
|
+
.map(([tagId, values]) => [tagId, cleanValues(values)])
|
|
232
|
+
.filter(([, cleaned]) => cleaned.length > 0);
|
|
233
|
+
if (entries.length === 0) {
|
|
234
|
+
delete props[ELEMENT_TAGS_FIELD];
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
const map = new Y.Map();
|
|
238
|
+
for (const [tagId, cleaned] of entries)
|
|
239
|
+
map.set(tagId, cleaned);
|
|
240
|
+
// The entry count is taken from the array above and NOT from `map.size`: a
|
|
241
|
+
// `Y.Map` that has not been integrated into a document yet holds its content
|
|
242
|
+
// in `_prelimContent`, so `size` reads 0 and logs "Add Yjs type to a document
|
|
243
|
+
// before reading data". Silently dropping every pasted qualification is
|
|
244
|
+
// exactly the failure this whole conversion exists to prevent.
|
|
245
|
+
props[ELEMENT_TAGS_FIELD] = map;
|
|
246
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Measure the cost of an operation through the Performance API when the host
|
|
3
|
+
* provides one, and just run it when it does not.
|
|
4
|
+
*
|
|
5
|
+
* This is a devtools aid, not telemetry: nothing is sent anywhere, and the
|
|
6
|
+
* editor's telemetry bus stays the single reporting seam. The marks are
|
|
7
|
+
* cleared, while the measure entries are kept on purpose so the operation
|
|
8
|
+
* shows up in a browser performance profile.
|
|
9
|
+
*/
|
|
10
|
+
export declare const measureOperation: <T>(name: string, fn: () => T) => T;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
let opMeasureSeq = 0;
|
|
2
|
+
/**
|
|
3
|
+
* Measure the cost of an operation through the Performance API when the host
|
|
4
|
+
* provides one, and just run it when it does not.
|
|
5
|
+
*
|
|
6
|
+
* This is a devtools aid, not telemetry: nothing is sent anywhere, and the
|
|
7
|
+
* editor's telemetry bus stays the single reporting seam. The marks are
|
|
8
|
+
* cleared, while the measure entries are kept on purpose so the operation
|
|
9
|
+
* shows up in a browser performance profile.
|
|
10
|
+
*/
|
|
11
|
+
export const measureOperation = (name, fn) => {
|
|
12
|
+
if (typeof performance === 'undefined' ||
|
|
13
|
+
typeof performance.mark !== 'function' ||
|
|
14
|
+
typeof performance.measure !== 'function') {
|
|
15
|
+
return fn();
|
|
16
|
+
}
|
|
17
|
+
const operationId = opMeasureSeq++;
|
|
18
|
+
const startMark = `${name}:${operationId}:start`;
|
|
19
|
+
const endMark = `${name}:${operationId}:end`;
|
|
20
|
+
performance.mark(startMark);
|
|
21
|
+
try {
|
|
22
|
+
return fn();
|
|
23
|
+
}
|
|
24
|
+
finally {
|
|
25
|
+
performance.mark(endMark);
|
|
26
|
+
performance.measure(name, startMark, endMark);
|
|
27
|
+
performance.clearMarks(startMark);
|
|
28
|
+
performance.clearMarks(endMark);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
@@ -36,6 +36,19 @@ export interface ToolEventTarget {
|
|
|
36
36
|
*/
|
|
37
37
|
addHook<K extends SupportedHooks | SupportedEvents>(evtName: K, handler: (evtState: K extends SupportedHooks ? BuiltInEventMap[K] : PointerEventState) => void | boolean): void;
|
|
38
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* The only tools a readonly document will activate: selection, panning, the
|
|
41
|
+
* presentation navigator and the no-op placeholder. Everything else — brush,
|
|
42
|
+
* highlighter, connector, shape, polygon, text, note, frame, template, eraser —
|
|
43
|
+
* creates or erases on its first gesture, calling `surface.addElement` /
|
|
44
|
+
* `store.addBlock` directly, which used to raise uncaught `BlockSuiteError`s on
|
|
45
|
+
* ordinary keystrokes.
|
|
46
|
+
*
|
|
47
|
+
* A whitelist rather than a blacklist, and enforced at {@link
|
|
48
|
+
* ToolController.setTool}: a new tool is a writer until someone proves
|
|
49
|
+
* otherwise, and no new entry point can bypass the check by construction.
|
|
50
|
+
*/
|
|
51
|
+
export declare const READONLY_SAFE_TOOLS: Set<string>;
|
|
39
52
|
export declare class ToolController extends GfxExtension {
|
|
40
53
|
static key: string;
|
|
41
54
|
private readonly _builtInHookSlot;
|
|
@@ -25,6 +25,24 @@ export var MouseButton;
|
|
|
25
25
|
MouseButton[MouseButton["MIDDLE"] = 1] = "MIDDLE";
|
|
26
26
|
MouseButton[MouseButton["SECONDARY"] = 2] = "SECONDARY";
|
|
27
27
|
})(MouseButton || (MouseButton = {}));
|
|
28
|
+
/**
|
|
29
|
+
* The only tools a readonly document will activate: selection, panning, the
|
|
30
|
+
* presentation navigator and the no-op placeholder. Everything else — brush,
|
|
31
|
+
* highlighter, connector, shape, polygon, text, note, frame, template, eraser —
|
|
32
|
+
* creates or erases on its first gesture, calling `surface.addElement` /
|
|
33
|
+
* `store.addBlock` directly, which used to raise uncaught `BlockSuiteError`s on
|
|
34
|
+
* ordinary keystrokes.
|
|
35
|
+
*
|
|
36
|
+
* A whitelist rather than a blacklist, and enforced at {@link
|
|
37
|
+
* ToolController.setTool}: a new tool is a writer until someone proves
|
|
38
|
+
* otherwise, and no new entry point can bypass the check by construction.
|
|
39
|
+
*/
|
|
40
|
+
export const READONLY_SAFE_TOOLS = new Set([
|
|
41
|
+
'default',
|
|
42
|
+
'pan',
|
|
43
|
+
'frameNavigator',
|
|
44
|
+
'empty',
|
|
45
|
+
]);
|
|
28
46
|
export class ToolController extends GfxExtension {
|
|
29
47
|
constructor() {
|
|
30
48
|
super(...arguments);
|
|
@@ -110,6 +128,14 @@ export class ToolController extends GfxExtension {
|
|
|
110
128
|
};
|
|
111
129
|
this.setTool = (toolType, options) => {
|
|
112
130
|
const toolNameStr = toolType.toolName;
|
|
131
|
+
// THE bottleneck for tool activation: keyboard managers, the toolbar and
|
|
132
|
+
// its mixins, senior buttons and framework modules all land here. A guard
|
|
133
|
+
// placed higher up is an inventory that goes stale — `s` (shape) is bound
|
|
134
|
+
// by `shape-draggable.ts` through the toolbar mixin and never sees the
|
|
135
|
+
// keyboard manager at all.
|
|
136
|
+
if (this.std.store.readonly && !READONLY_SAFE_TOOLS.has(toolNameStr)) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
113
139
|
const beforeUpdateCtx = this._createBuiltInHookCtx('beforeToolUpdate', {
|
|
114
140
|
toolName: toolNameStr,
|
|
115
141
|
});
|
|
@@ -67,6 +67,18 @@ export declare class Viewport {
|
|
|
67
67
|
* Note this is different from the zoom property.
|
|
68
68
|
* The editor itself may be scaled by outer container which is common in nested editor scenarios.
|
|
69
69
|
* This property is used to calculate the scale of the editor.
|
|
70
|
+
*
|
|
71
|
+
* The scale is read as "what the host paints" over "what the host lays out":
|
|
72
|
+
* `getBoundingClientRect().width` is the painted width, transforms included
|
|
73
|
+
* and fractional; `offsetWidth` is the laid out width with no transform, but
|
|
74
|
+
* the browser gives it as an integer — it rounds both border-box edges, so it
|
|
75
|
+
* can sit up to a pixel away from the fractional width even when nothing is
|
|
76
|
+
* scaled at all. A host that is merely a fraction of a pixel wide (a HiDPI
|
|
77
|
+
* window, a flex remainder) would otherwise report a phantom scale of
|
|
78
|
+
* ~1.0001, and every pointer delta divided by it comes back short: a 100px
|
|
79
|
+
* drag moves the element 99.986. Below the rounding error there is no scale
|
|
80
|
+
* to read, so answer exactly 1; a container that really scales the editor is
|
|
81
|
+
* orders of magnitude past that pixel.
|
|
70
82
|
*/
|
|
71
83
|
get viewScale(): number;
|
|
72
84
|
get top(): number;
|
|
@@ -132,13 +132,31 @@ export class Viewport {
|
|
|
132
132
|
* Note this is different from the zoom property.
|
|
133
133
|
* The editor itself may be scaled by outer container which is common in nested editor scenarios.
|
|
134
134
|
* This property is used to calculate the scale of the editor.
|
|
135
|
+
*
|
|
136
|
+
* The scale is read as "what the host paints" over "what the host lays out":
|
|
137
|
+
* `getBoundingClientRect().width` is the painted width, transforms included
|
|
138
|
+
* and fractional; `offsetWidth` is the laid out width with no transform, but
|
|
139
|
+
* the browser gives it as an integer — it rounds both border-box edges, so it
|
|
140
|
+
* can sit up to a pixel away from the fractional width even when nothing is
|
|
141
|
+
* scaled at all. A host that is merely a fraction of a pixel wide (a HiDPI
|
|
142
|
+
* window, a flex remainder) would otherwise report a phantom scale of
|
|
143
|
+
* ~1.0001, and every pointer delta divided by it comes back short: a 100px
|
|
144
|
+
* drag moves the element 99.986. Below the rounding error there is no scale
|
|
145
|
+
* to read, so answer exactly 1; a container that really scales the editor is
|
|
146
|
+
* orders of magnitude past that pixel.
|
|
135
147
|
*/
|
|
136
148
|
get viewScale() {
|
|
137
149
|
if (!this._shell ||
|
|
138
150
|
this._cachedOffsetWidth === null ||
|
|
139
151
|
this._cachedOffsetWidth === 0)
|
|
140
152
|
return 1;
|
|
141
|
-
|
|
153
|
+
const width = this.boundingClientRect.width;
|
|
154
|
+
// offsetWidth is rounded to an integer while the client rect is not:
|
|
155
|
+
// on fractional devicePixelRatio displays an untransformed shell has a
|
|
156
|
+
// fractional CSS width, which must not be mistaken for an outer scale.
|
|
157
|
+
if (Math.abs(width - this._cachedOffsetWidth) <= 0.5)
|
|
158
|
+
return 1;
|
|
159
|
+
return width / this._cachedOffsetWidth;
|
|
142
160
|
}
|
|
143
161
|
get top() {
|
|
144
162
|
return this._top;
|
|
@@ -4,6 +4,8 @@ export declare class EventService<TextAttributes extends BaseTextAttributes> {
|
|
|
4
4
|
readonly editor: InlineEditor<TextAttributes>;
|
|
5
5
|
private _compositionInlineRange;
|
|
6
6
|
private _isComposing;
|
|
7
|
+
private readonly _getClosestInlineRoot;
|
|
8
|
+
private readonly _containsNode;
|
|
7
9
|
private readonly _isRangeCompletelyInRoot;
|
|
8
10
|
private readonly _onBeforeInput;
|
|
9
11
|
private readonly _onClick;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { INLINE_ROOT_ATTR } from '../consts.js';
|
|
1
2
|
import { isInEmbedElement, isInEmbedGap, isInEmptyLine, } from '../utils/index.js';
|
|
2
3
|
import { isMaybeInlineRangeEqual } from '../utils/inline-range.js';
|
|
3
4
|
import { transformInput } from '../utils/transform-input.js';
|
|
@@ -9,34 +10,105 @@ export class EventService {
|
|
|
9
10
|
this.editor = editor;
|
|
10
11
|
this._compositionInlineRange = null;
|
|
11
12
|
this._isComposing = false;
|
|
13
|
+
this._getClosestInlineRoot = (node) => {
|
|
14
|
+
const el = node instanceof Element ? node : node.parentElement;
|
|
15
|
+
return el?.closest(`[${INLINE_ROOT_ATTR}]`) ?? null;
|
|
16
|
+
};
|
|
17
|
+
this._containsNode = (rootElement, node) => node === rootElement || rootElement.contains(node);
|
|
12
18
|
this._isRangeCompletelyInRoot = (range) => {
|
|
13
19
|
if (range.commonAncestorContainer.ownerDocument !== document)
|
|
14
20
|
return false;
|
|
15
21
|
const rootElement = this.editor.rootElement;
|
|
16
22
|
if (!rootElement)
|
|
17
23
|
return false;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
rootRange.comparePoint(range.endContainer, range.endOffset) <= 0);
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
return (rootRange.comparePoint(range.endContainer, range.startOffset) >= 0 &&
|
|
27
|
-
rootRange.comparePoint(range.startContainer, range.endOffset) <= 0);
|
|
28
|
-
}
|
|
24
|
+
// Avoid `Range.comparePoint` here — Firefox and Chrome have subtle
|
|
25
|
+
// differences around selection points in `contenteditable` and around
|
|
26
|
+
// comment marker nodes.
|
|
27
|
+
return (this._containsNode(rootElement, range.startContainer) &&
|
|
28
|
+
this._containsNode(rootElement, range.endContainer));
|
|
29
29
|
};
|
|
30
|
-
this._onBeforeInput = (event) => {
|
|
30
|
+
this._onBeforeInput = async (event) => {
|
|
31
31
|
const range = this.editor.rangeService.getNativeRange();
|
|
32
|
-
if (this.editor.isReadonly ||
|
|
33
|
-
this._isComposing ||
|
|
34
|
-
!range ||
|
|
35
|
-
!this._isRangeCompletelyInRoot(range))
|
|
32
|
+
if (this.editor.isReadonly || !range)
|
|
36
33
|
return;
|
|
37
|
-
|
|
38
|
-
if (!
|
|
34
|
+
const rootElement = this.editor.rootElement;
|
|
35
|
+
if (!rootElement)
|
|
36
|
+
return;
|
|
37
|
+
const startInRoot = this._containsNode(rootElement, range.startContainer);
|
|
38
|
+
const endInRoot = this._containsNode(rootElement, range.endContainer);
|
|
39
|
+
// Not this inline editor.
|
|
40
|
+
if (!startInRoot && !endInRoot)
|
|
39
41
|
return;
|
|
42
|
+
// If the selection spans into another inline editor, let the range binding
|
|
43
|
+
// handle it.
|
|
44
|
+
if (startInRoot !== endInRoot) {
|
|
45
|
+
const otherNode = startInRoot ? range.endContainer : range.startContainer;
|
|
46
|
+
const otherRoot = this._getClosestInlineRoot(otherNode);
|
|
47
|
+
if (otherRoot && otherRoot !== rootElement)
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (this._isComposing)
|
|
51
|
+
return;
|
|
52
|
+
// Always prevent native DOM mutations inside the inline editor. Browsers
|
|
53
|
+
// (notably Firefox) may remove Lit marker comment nodes during native
|
|
54
|
+
// edits, which crashes subsequent Lit updates with
|
|
55
|
+
// `ChildPart has no parentNode`.
|
|
56
|
+
event.preventDefault();
|
|
57
|
+
let inlineRange = this.editor.toInlineRange(range);
|
|
58
|
+
if (!inlineRange) {
|
|
59
|
+
// Some browsers may report selection points on non-text nodes inside
|
|
60
|
+
// `contenteditable`. Prefer the target range if available.
|
|
61
|
+
try {
|
|
62
|
+
const targetRanges = event.getTargetRanges();
|
|
63
|
+
if (targetRanges.length > 0) {
|
|
64
|
+
const staticRange = targetRanges[0];
|
|
65
|
+
const targetRange = document.createRange();
|
|
66
|
+
targetRange.setStart(staticRange.startContainer, staticRange.startOffset);
|
|
67
|
+
targetRange.setEnd(staticRange.endContainer, staticRange.endOffset);
|
|
68
|
+
inlineRange = this.editor.toInlineRange(targetRange);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
// ignore
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (!inlineRange && startInRoot !== endInRoot) {
|
|
76
|
+
// Clamp a partially-outside selection to this editor so native editing
|
|
77
|
+
// won't touch Lit marker nodes.
|
|
78
|
+
const pointRange = document.createRange();
|
|
79
|
+
if (startInRoot) {
|
|
80
|
+
pointRange.setStart(range.startContainer, range.startOffset);
|
|
81
|
+
pointRange.setEnd(range.startContainer, range.startOffset);
|
|
82
|
+
const startPoint = this.editor.toInlineRange(pointRange);
|
|
83
|
+
if (startPoint) {
|
|
84
|
+
inlineRange = {
|
|
85
|
+
index: startPoint.index,
|
|
86
|
+
length: this.editor.yTextLength - startPoint.index,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
pointRange.setStart(range.endContainer, range.endOffset);
|
|
92
|
+
pointRange.setEnd(range.endContainer, range.endOffset);
|
|
93
|
+
const endPoint = this.editor.toInlineRange(pointRange);
|
|
94
|
+
if (endPoint) {
|
|
95
|
+
inlineRange = {
|
|
96
|
+
index: 0,
|
|
97
|
+
length: endPoint.index,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
if (!inlineRange) {
|
|
103
|
+
// Try to recover from an unexpected DOM/selection state by rebuilding the
|
|
104
|
+
// editor DOM and retrying the range conversion.
|
|
105
|
+
this.editor.rerenderWholeEditor();
|
|
106
|
+
await this.editor.waitForUpdate();
|
|
107
|
+
const newRange = this.editor.rangeService.getNativeRange();
|
|
108
|
+
inlineRange = newRange ? this.editor.toInlineRange(newRange) : null;
|
|
109
|
+
if (!inlineRange)
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
40
112
|
let ifHandleTargetRange = true;
|
|
41
113
|
if (event.inputType.startsWith('delete')) {
|
|
42
114
|
if (isInEmbedGap(range.commonAncestorContainer) &&
|
|
@@ -70,14 +142,15 @@ export class EventService {
|
|
|
70
142
|
range.setStart(staticRange.startContainer, staticRange.startOffset);
|
|
71
143
|
range.setEnd(staticRange.endContainer, staticRange.endOffset);
|
|
72
144
|
const targetInlineRange = this.editor.toInlineRange(range);
|
|
73
|
-
|
|
145
|
+
// Ignore an un-resolvable target range to avoid swallowing the input.
|
|
146
|
+
if (targetInlineRange &&
|
|
147
|
+
!isMaybeInlineRangeEqual(inlineRange, targetInlineRange)) {
|
|
74
148
|
inlineRange = targetInlineRange;
|
|
75
149
|
}
|
|
76
150
|
}
|
|
77
151
|
}
|
|
78
152
|
if (!inlineRange)
|
|
79
153
|
return;
|
|
80
|
-
event.preventDefault();
|
|
81
154
|
const ctx = {
|
|
82
155
|
inlineEditor: this.editor,
|
|
83
156
|
raw: event,
|
|
@@ -276,7 +349,9 @@ export class EventService {
|
|
|
276
349
|
console.error('Mount inline editor without event source ready');
|
|
277
350
|
return;
|
|
278
351
|
}
|
|
279
|
-
this.editor.disposables.addFromEvent(eventSource, 'beforeinput',
|
|
352
|
+
this.editor.disposables.addFromEvent(eventSource, 'beforeinput', e => {
|
|
353
|
+
this._onBeforeInput(e).catch(console.error);
|
|
354
|
+
});
|
|
280
355
|
this.editor.disposables.addFromEvent(eventSource, 'compositionstart', this._onCompositionStart);
|
|
281
356
|
this.editor.disposables.addFromEvent(eventSource, 'compositionupdate', this._onCompositionUpdate);
|
|
282
357
|
this.editor.disposables.addFromEvent(eventSource, 'compositionend', e => {
|
|
@@ -3,11 +3,7 @@ import {} from '../gfx/model/gfx-block-model.js';
|
|
|
3
3
|
import { GfxLocalElementModel } from '../gfx/model/surface/local-element-model.js';
|
|
4
4
|
export function getLayerEndZIndex(layers, layerIndex) {
|
|
5
5
|
const layer = layers[layerIndex];
|
|
6
|
-
return layer
|
|
7
|
-
? layer.type === 'block'
|
|
8
|
-
? layer.zIndex + layer.elements.length - 1
|
|
9
|
-
: layer.zIndex
|
|
10
|
-
: 0;
|
|
6
|
+
return layer ? layer.zIndex + layer.elements.length - 1 : 0;
|
|
11
7
|
}
|
|
12
8
|
export function updateLayersZIndex(layers, startIdx) {
|
|
13
9
|
const startLayer = layers[startIdx];
|
|
@@ -15,7 +11,7 @@ export function updateLayersZIndex(layers, startIdx) {
|
|
|
15
11
|
for (let i = startIdx; i < layers.length; ++i) {
|
|
16
12
|
const curLayer = layers[i];
|
|
17
13
|
curLayer.zIndex = curIndex;
|
|
18
|
-
curIndex += curLayer.
|
|
14
|
+
curIndex += curLayer.elements.length;
|
|
19
15
|
}
|
|
20
16
|
}
|
|
21
17
|
export function getElementIndex(indexable) {
|
|
@@ -20,6 +20,20 @@ import type { GfxGroupModel, GfxModel } from '../gfx/model/model.js';
|
|
|
20
20
|
* The result should be `[G1, G4, E6]`
|
|
21
21
|
*/
|
|
22
22
|
export declare function getTopElements(elements: GfxModel[]): GfxModel[];
|
|
23
|
+
/**
|
|
24
|
+
* Add several children to a container in one go.
|
|
25
|
+
*
|
|
26
|
+
* A container that knows how to take a batch (`addChildren`) gets the whole
|
|
27
|
+
* list, so it can write them within a single transaction; anything else falls
|
|
28
|
+
* back to one `addChild` per element, which is exactly what the caller would
|
|
29
|
+
* have written by hand.
|
|
30
|
+
*/
|
|
31
|
+
export declare function batchAddChildren(container: GfxGroupCompatibleInterface, elements: GfxModel[]): void;
|
|
32
|
+
/**
|
|
33
|
+
* Remove several children from a container in one go. See
|
|
34
|
+
* {@link batchAddChildren}.
|
|
35
|
+
*/
|
|
36
|
+
export declare function batchRemoveChildren(container: GfxGroupCompatibleInterface, elements: GfxModel[]): void;
|
|
23
37
|
export declare function descendantElementsImpl(container: GfxGroupCompatibleInterface): GfxModel[];
|
|
24
38
|
export declare function hasDescendantElementImpl(container: GfxGroupCompatibleInterface, element: GfxCompatibleInterface): boolean;
|
|
25
39
|
/**
|