@formicoidea/labre-core 0.31.0 → 0.33.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-attachment/attachment-block.js +1 -1
- package/dist/_pkgs/affine-block-callout/callout-block.d.ts +6 -0
- package/dist/_pkgs/affine-block-callout/callout-block.js +26 -4
- 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-inline.js +1 -1
- 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 +54 -5
- package/dist/_pkgs/affine-block-code/code-toolbar/index.js +1 -1
- 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/data-source.js +1 -2
- package/dist/_pkgs/affine-block-database/database-block.js +13 -0
- package/dist/_pkgs/affine-block-database/external-data-source.js +1 -1
- 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 +11 -1
- 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/embed-figma-block/embed-figma-service.js +1 -1
- package/dist/_pkgs/affine-block-embed/embed-iframe-block/configs/toolbar.js +2 -2
- 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/configs/toolbar.js +1 -1
- 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-linked-doc-block/utils.js +1 -1
- package/dist/_pkgs/affine-block-embed-doc/embed-synced-doc-block/configs/toolbar.js +1 -1
- 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 +23 -4
- package/dist/_pkgs/affine-block-frame/frame-manager.d.ts +13 -0
- package/dist/_pkgs/affine-block-frame/frame-manager.js +34 -2
- package/dist/_pkgs/affine-block-frame/frame-tool.js +1 -1
- package/dist/_pkgs/affine-block-image/components/page-image-block.js +1 -1
- package/dist/_pkgs/affine-block-image/image-edgeless-block.js +1 -1
- package/dist/_pkgs/affine-block-latex/styles.js +6 -1
- package/dist/_pkgs/affine-block-list/utils/forward-delete.js +1 -1
- package/dist/_pkgs/affine-block-note/commands/select-block.js +1 -1
- package/dist/_pkgs/affine-block-note/commands/select-blocks-between.js +1 -1
- package/dist/_pkgs/affine-block-note/move-block.js +1 -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-paragraph/utils/forward-delete.js +2 -2
- package/dist/_pkgs/affine-block-paragraph/utils/merge-with-prev.js +1 -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 +10 -3
- 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 +27 -2
- 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/clipboard-utils.js +1 -1
- 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/adapters/markdown/element-adapter/type.js +1 -1
- package/dist/_pkgs/affine-block-surface/adapters/plain-text/element-adapter/type.js +1 -1
- 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 +21 -3
- package/dist/_pkgs/affine-block-surface/element-model/index.js +14 -2
- package/dist/_pkgs/affine-block-surface/extensions/audit.d.ts +107 -0
- package/dist/_pkgs/affine-block-surface/extensions/audit.js +489 -0
- package/dist/_pkgs/affine-block-surface/extensions/crud-extension.d.ts +14 -0
- package/dist/_pkgs/affine-block-surface/extensions/crud-extension.js +37 -5
- 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 +327 -0
- package/dist/_pkgs/affine-block-surface/extensions/element-renderer.js +1 -1
- package/dist/_pkgs/affine-block-surface/extensions/export-manager/export-manager.js +1 -1
- package/dist/_pkgs/affine-block-surface/extensions/index.d.ts +17 -0
- package/dist/_pkgs/affine-block-surface/extensions/index.js +17 -0
- package/dist/_pkgs/affine-block-surface/extensions/interchange-import.d.ts +172 -0
- package/dist/_pkgs/affine-block-surface/extensions/interchange-import.js +393 -0
- package/dist/_pkgs/affine-block-surface/extensions/interchange.d.ts +306 -0
- package/dist/_pkgs/affine-block-surface/extensions/interchange.js +64 -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/morph-toolbar.d.ts +248 -0
- package/dist/_pkgs/affine-block-surface/extensions/morph-toolbar.js +248 -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 +588 -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/svg-sketch.d.ts +107 -0
- package/dist/_pkgs/affine-block-surface/extensions/svg-sketch.js +958 -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 +2129 -0
- package/dist/_pkgs/affine-block-surface/extensions/validation.js +4620 -0
- package/dist/_pkgs/affine-block-surface/extensions/violation-detail-widget.d.ts +330 -0
- package/dist/_pkgs/affine-block-surface/extensions/violation-detail-widget.js +1004 -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 +610 -0
- package/dist/_pkgs/affine-block-surface/framework-background/def.js +206 -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 +99 -0
- package/dist/_pkgs/affine-block-surface/framework-background/labels.js +193 -0
- package/dist/_pkgs/affine-block-surface/framework-background/renderer.d.ts +8 -0
- package/dist/_pkgs/affine-block-surface/framework-background/renderer.js +399 -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/renderer/overlay.js +1 -1
- 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-surface-ref/portal/note.js +2 -2
- package/dist/_pkgs/affine-block-table/commands.js +1 -1
- 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/edgeless-shape-color-picker/color-picker.js +1 -1
- package/dist/_pkgs/affine-components/embed-card-modal/embed-card-edit-modal.js +1 -1
- package/dist/_pkgs/affine-components/filterable-list/styles.js +1 -1
- 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/peek/peekable.js +1 -1
- package/dist/_pkgs/affine-components/portal/portal.d.ts +1 -1
- package/dist/_pkgs/affine-components/toolbar/index.d.ts +1 -0
- package/dist/_pkgs/affine-components/toolbar/index.js +1 -0
- package/dist/_pkgs/affine-components/toolbar/menu-button.js +2 -1
- package/dist/_pkgs/affine-components/toolbar/picker-menu.d.ts +55 -0
- package/dist/_pkgs/affine-components/toolbar/picker-menu.js +47 -0
- package/dist/_pkgs/affine-components/toolbar/toolbar.js +11 -10
- package/dist/_pkgs/affine-foundation/view.js +11 -2
- package/dist/_pkgs/affine-fragment-frame-panel/body/frame-panel-body.js +2 -2
- package/dist/_pkgs/affine-fragment-frame-panel/header/frame-panel-header.js +2 -2
- package/dist/_pkgs/affine-fragment-frame-panel/header/frames-setting-menu.js +1 -1
- package/dist/_pkgs/affine-fragment-outline/mobile-outline-panel.js +1 -1
- 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/toolbar/components/pen/pen-tool-button.js +1 -1
- 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 +39 -16
- package/dist/_pkgs/affine-gfx-connector/connector-tool.d.ts +26 -1
- package/dist/_pkgs/affine-gfx-connector/connector-tool.js +12 -3
- package/dist/_pkgs/affine-gfx-connector/connector-watcher.js +1 -4
- package/dist/_pkgs/affine-gfx-connector/direction/direction-reveal.d.ts +123 -0
- package/dist/_pkgs/affine-gfx-connector/direction/direction-reveal.js +282 -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 +185 -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/element-renderer/index.js +1 -1
- package/dist/_pkgs/affine-gfx-connector/element-renderer/utils.js +1 -1
- 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 +68 -2
- 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-mindmap/adapter/markdown/index.js +1 -1
- package/dist/_pkgs/affine-gfx-mindmap/adapter/utils.js +1 -1
- package/dist/_pkgs/affine-gfx-mindmap/templates/index.js +583 -4
- package/dist/_pkgs/affine-gfx-mindmap/toolbar/mindmap-menu.js +23 -23
- package/dist/_pkgs/affine-gfx-mindmap/toolbar/mindmap-tool-button.js +5 -1
- package/dist/_pkgs/affine-gfx-mindmap/view/utils.js +1 -1
- package/dist/_pkgs/affine-gfx-note/overlay/overlay.js +1 -1
- package/dist/_pkgs/affine-gfx-note/toolbar/note-senior-button.js +1 -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/consts.js +1 -1
- package/dist/_pkgs/affine-gfx-shape/draggable/shape-draggable.js +1 -1
- package/dist/_pkgs/affine-gfx-shape/element-renderer/shape/polygon.js +17 -9
- package/dist/_pkgs/affine-gfx-shape/element-renderer/shape/utils.js +8 -3
- package/dist/_pkgs/affine-gfx-shape/element-renderer/shape-dom/index.js +48 -19
- package/dist/_pkgs/affine-gfx-shape/element-view.js +19 -12
- 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/overlay/polygon-drawing-overlay.js +1 -1
- package/dist/_pkgs/affine-gfx-shape/overlay/polygon-vertex-editing-overlay.js +12 -7
- package/dist/_pkgs/affine-gfx-shape/overlay/shape-overlay.js +1 -1
- package/dist/_pkgs/affine-gfx-shape/polygon-tool.js +4 -2
- package/dist/_pkgs/affine-gfx-shape/shape-tool.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 -15
- package/dist/_pkgs/affine-gfx-shape/view.js +3 -3
- package/dist/_pkgs/affine-gfx-template/builtin/other.js +66 -17
- package/dist/_pkgs/affine-gfx-template/toolbar/overlay-scrollbar.js +1 -1
- package/dist/_pkgs/affine-gfx-template/toolbar/template-panel.js +1 -1
- 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-gfx-text/toolbar/actions.js +1 -1
- 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/command.js +1 -1
- 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-inline-preset/command/format-block.js +1 -1
- package/dist/_pkgs/affine-inline-preset/command/format-native.js +2 -2
- package/dist/_pkgs/affine-inline-preset/command/format-text.js +1 -1
- package/dist/_pkgs/affine-inline-preset/inline-spec.js +1 -1
- package/dist/_pkgs/affine-inline-reference/reference-node/reference-node.js +1 -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/bpmn/node.d.ts +40 -7
- package/dist/_pkgs/affine-model/elements/bpmn/node.js +4 -2
- package/dist/_pkgs/affine-model/elements/bpmn/pool.d.ts +74 -17
- package/dist/_pkgs/affine-model/elements/bpmn/pool.js +55 -26
- package/dist/_pkgs/affine-model/elements/c4/board.d.ts +88 -0
- package/dist/_pkgs/affine-model/elements/c4/board.js +128 -0
- package/dist/_pkgs/affine-model/elements/c4/boundary.d.ts +63 -0
- package/dist/_pkgs/affine-model/elements/c4/boundary.js +134 -0
- package/dist/_pkgs/affine-model/elements/c4/index.d.ts +3 -0
- package/dist/_pkgs/affine-model/elements/c4/index.js +3 -0
- package/dist/_pkgs/affine-model/elements/c4/node.d.ts +97 -0
- package/dist/_pkgs/affine-model/elements/c4/node.js +130 -0
- package/dist/_pkgs/affine-model/elements/connector/connector.js +25 -1
- package/dist/_pkgs/affine-model/elements/context-map/context-map.d.ts +27 -0
- package/dist/_pkgs/affine-model/elements/context-map/context-map.js +94 -0
- package/dist/_pkgs/affine-model/elements/context-map/index.d.ts +1 -0
- package/dist/_pkgs/affine-model/elements/context-map/index.js +1 -0
- package/dist/_pkgs/affine-model/elements/core-domain/core-domain.d.ts +34 -17
- package/dist/_pkgs/affine-model/elements/core-domain/core-domain.js +28 -26
- 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/event-storming/event-storming.d.ts +36 -0
- package/dist/_pkgs/affine-model/elements/event-storming/event-storming.js +103 -0
- package/dist/_pkgs/affine-model/elements/event-storming/index.d.ts +1 -0
- package/dist/_pkgs/affine-model/elements/event-storming/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 +14 -1
- package/dist/_pkgs/affine-model/elements/index.js +4 -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/shape/api/polygon.js +2 -8
- 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/html/block-adapter.js +1 -1
- package/dist/_pkgs/affine-shared/adapters/markdown/block-adapter.js +1 -1
- package/dist/_pkgs/affine-shared/adapters/markdown/delta-converter.d.ts +6 -1
- package/dist/_pkgs/affine-shared/adapters/markdown/delta-converter.js +161 -3
- package/dist/_pkgs/affine-shared/adapters/markdown/markdown.js +5 -1
- package/dist/_pkgs/affine-shared/adapters/notion-html/block-adapter.js +1 -1
- package/dist/_pkgs/affine-shared/adapters/notion-html/delta-converter.js +1 -1
- package/dist/_pkgs/affine-shared/adapters/plain-text/block-adapter.js +1 -1
- package/dist/_pkgs/affine-shared/adapters/plain-text/delta-converter.js +1 -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 +283 -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/commands/model-crud/draft-selected-models.js +1 -1
- package/dist/_pkgs/affine-shared/commands/selection/focus-block-end.js +1 -1
- package/dist/_pkgs/affine-shared/commands/selection/focus-block-start.js +1 -1
- package/dist/_pkgs/affine-shared/consts/index.d.ts +10 -0
- package/dist/_pkgs/affine-shared/consts/index.js +10 -0
- package/dist/_pkgs/affine-shared/services/artefact-catalogue-service.d.ts +55 -0
- package/dist/_pkgs/affine-shared/services/artefact-catalogue-service.js +35 -0
- package/dist/_pkgs/affine-shared/services/audit-service.d.ts +311 -0
- package/dist/_pkgs/affine-shared/services/audit-service.js +228 -0
- package/dist/_pkgs/affine-shared/services/command-usage-service.d.ts +31 -0
- package/dist/_pkgs/affine-shared/services/command-usage-service.js +109 -0
- package/dist/_pkgs/affine-shared/services/comment-service/block-comment-manager.js +1 -1
- package/dist/_pkgs/affine-shared/services/doc-display-meta-service.js +1 -1
- 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/embed-iframe/embed-iframe-config.js +1 -1
- 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 +7 -0
- package/dist/_pkgs/affine-shared/services/index.js +7 -0
- package/dist/_pkgs/affine-shared/services/pivot-materiality-publisher.d.ts +129 -0
- package/dist/_pkgs/affine-shared/services/pivot-materiality-publisher.js +312 -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 +255 -1
- 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/toolbar-service/registry.d.ts +44 -0
- package/dist/_pkgs/affine-shared/services/toolbar-service/registry.js +161 -3
- 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 +256 -0
- package/dist/_pkgs/affine-shared/test-utils/affine-template.js +1 -1
- 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/edgeless.js +1 -1
- package/dist/_pkgs/affine-shared/utils/file/filesys.d.ts +34 -0
- package/dist/_pkgs/affine-shared/utils/file/filesys.js +48 -7
- 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 +25 -1
- package/dist/_pkgs/affine-widget-drag-handle/utils.js +1 -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-auto-connect/index.js +1 -1
- package/dist/_pkgs/affine-widget-edgeless-dragging-area/edgeless-dragging-area-rect.js +1 -1
- 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/catalogue/artefact-catalogue-default.d.ts +14 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/artefact-catalogue-default.js +40 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/artefact-catalogue-widget.d.ts +158 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/artefact-catalogue-widget.js +572 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/catalogue-groups.d.ts +46 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/catalogue-groups.js +66 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/chord-format.d.ts +13 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/chord-format.js +50 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/edgeless-toolbar.d.ts +6 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/edgeless-toolbar.js +15 -5
- package/dist/_pkgs/affine-widget-edgeless-toolbar/effects.d.ts +2 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/effects.js +2 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/extension/index.d.ts +7 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/index.d.ts +5 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/index.js +5 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/command-menu.d.ts +57 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/command-menu.js +140 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/view.js +9 -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-keyboard-toolbar/keyboard-tool-panel.js +1 -1
- package/dist/_pkgs/affine-widget-linked-doc/import-doc/import-doc.js +1 -1
- 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-page-dragging-area/index.js +1 -1
- package/dist/_pkgs/affine-widget-remote-selection/doc/doc-remote-selection.js +1 -1
- 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 +40 -8
- package/dist/_pkgs/affine-widget-toolbar/utils.d.ts +146 -3
- package/dist/_pkgs/affine-widget-toolbar/utils.js +744 -58
- 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 +64 -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 +849 -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 +89 -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 +86 -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 +10 -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 +475 -0
- package/dist/_pkgs/std/extension/command-registry.js +431 -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/shortcut.js +2 -1
- 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/grid.js +1 -1
- 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 +442 -0
- package/dist/_pkgs/std/gfx/model/surface/element-model.js +510 -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 +117 -0
- package/dist/_pkgs/std/gfx/model/surface/surface-model.d.ts +70 -0
- package/dist/_pkgs/std/gfx/model/surface/surface-model.js +305 -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/selection.js +1 -1
- 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 +20 -2
- package/dist/_pkgs/std/inline/extensions/inline-manager.js +1 -1
- package/dist/_pkgs/std/inline/extensions/markdown-matcher.js +1 -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 +10 -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/command-usage.d.ts +23 -0
- package/dist/extensions/command-usage.js +37 -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 +35 -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 +186 -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 +200 -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
|
@@ -41,7 +41,55 @@ import { Subject } from 'rxjs';
|
|
|
41
41
|
import * as Y from 'yjs';
|
|
42
42
|
import { descendantElementsImpl, hasDescendantElementImpl, isLockedByAncestorImpl, isLockedBySelfImpl, isLockedImpl, lockElementImpl, unlockElementImpl, } from '../../../utils/tree.js';
|
|
43
43
|
import { gfxGroupCompatibleSymbol } from '../base.js';
|
|
44
|
-
import { convertProps, field, getDerivedProps, getFieldPropsSet, local, updateDerivedProps, watch, } from './decorators/index.js';
|
|
44
|
+
import { convertProps, field, getDerivedProps, getFieldPropsSet, hasObserveMeta, local, observe, startObserve, updateDerivedProps, watch, } from './decorators/index.js';
|
|
45
|
+
/**
|
|
46
|
+
* Declared `@field()`s that {@link GfxPrimitiveElementModel.clearField} refuses
|
|
47
|
+
* to remove, because they have no meaningful ABSENT state: every one of them is
|
|
48
|
+
* read unconditionally, with no fallback, by code that has no way to cope.
|
|
49
|
+
*
|
|
50
|
+
* - `index` — the fractional z-order key. Gone, the element's stacking is
|
|
51
|
+
* `undefined` and the layer manager sorts it nowhere, silently.
|
|
52
|
+
* - `xywh` — gone, `elementBound` collapses to `{0,0,0,0}` and the renderer
|
|
53
|
+
* throws `"undefined" is not valid JSON` on every frame.
|
|
54
|
+
* - `seed` — the roughness seed; gone, the hand-drawn renderers produce a
|
|
55
|
+
* different shape on every repaint.
|
|
56
|
+
*
|
|
57
|
+
* An optional field is exactly one whose accessor declares a usable default (or
|
|
58
|
+
* `undefined`), and those stay clearable. This list is the short answer to
|
|
59
|
+
* "which declared fields are not optional"; it is a deny-list on purpose, so a
|
|
60
|
+
* new optional field needs no ceremony and a new structural one is a deliberate
|
|
61
|
+
* addition here.
|
|
62
|
+
*/
|
|
63
|
+
const UNCLEARABLE_ELEMENT_FIELDS = new Set(['index', 'seed', 'xywh']);
|
|
64
|
+
/**
|
|
65
|
+
* Republish a nested-`Y.Map` field change as an element-level change.
|
|
66
|
+
*
|
|
67
|
+
* `syncElementFromY` observes the element's OWN `Y.Map` only, so mutating a
|
|
68
|
+
* value INSIDE {@link GfxPrimitiveElementModel.tags} — which is the whole point
|
|
69
|
+
* of storing it as a nested map, since that is what makes two people qualifying
|
|
70
|
+
* one element on two different tags both keep their work — emits nothing. This
|
|
71
|
+
* is the `Y.Map` counterpart of the `watchText` bridge the same file already
|
|
72
|
+
* ships for nested `Y.Text`, and it is what puts a per-tag write on the same
|
|
73
|
+
* footing as every other field: one `elementUpdated`, carrying the transaction's
|
|
74
|
+
* own `local` flag, for the renderer, the rules engine and
|
|
75
|
+
* `PivotMaterialityPublisher` alike.
|
|
76
|
+
*
|
|
77
|
+
* `transaction === null` is the observer ATTACHING, not a change (see
|
|
78
|
+
* `startObserve`); republishing there would fire on every mount and on every
|
|
79
|
+
* re-attach.
|
|
80
|
+
*/
|
|
81
|
+
function observeTags(_, instance, transaction) {
|
|
82
|
+
if (transaction === null)
|
|
83
|
+
return;
|
|
84
|
+
instance['_onChange']({
|
|
85
|
+
props: { tags: instance.tags },
|
|
86
|
+
// Deliberately empty, exactly like `watchText`: Yjs gives the delta of the
|
|
87
|
+
// NESTED map, and inventing a previous value for the whole field would be
|
|
88
|
+
// a guess. Consumers that need the old set read it from their own state.
|
|
89
|
+
oldValues: {},
|
|
90
|
+
local: transaction.local,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
45
93
|
let GfxPrimitiveElementModel = (() => {
|
|
46
94
|
let _display_decorators;
|
|
47
95
|
let _display_initializers = [];
|
|
@@ -61,6 +109,27 @@ let GfxPrimitiveElementModel = (() => {
|
|
|
61
109
|
let _linkedDocId_decorators;
|
|
62
110
|
let _linkedDocId_initializers = [];
|
|
63
111
|
let _linkedDocId_extraInitializers = [];
|
|
112
|
+
let _pivotDocId_decorators;
|
|
113
|
+
let _pivotDocId_initializers = [];
|
|
114
|
+
let _pivotDocId_extraInitializers = [];
|
|
115
|
+
let _role_decorators;
|
|
116
|
+
let _role_initializers = [];
|
|
117
|
+
let _role_extraInitializers = [];
|
|
118
|
+
let _tags_decorators;
|
|
119
|
+
let _tags_initializers = [];
|
|
120
|
+
let _tags_extraInitializers = [];
|
|
121
|
+
let _validationExceptions_decorators;
|
|
122
|
+
let _validationExceptions_initializers = [];
|
|
123
|
+
let _validationExceptions_extraInitializers = [];
|
|
124
|
+
let _validationProfile_decorators;
|
|
125
|
+
let _validationProfile_initializers = [];
|
|
126
|
+
let _validationProfile_extraInitializers = [];
|
|
127
|
+
let _qualityChecklist_decorators;
|
|
128
|
+
let _qualityChecklist_initializers = [];
|
|
129
|
+
let _qualityChecklist_extraInitializers = [];
|
|
130
|
+
let _interchange_decorators;
|
|
131
|
+
let _interchange_initializers = [];
|
|
132
|
+
let _interchange_extraInitializers = [];
|
|
64
133
|
let _lockedBySelf_decorators;
|
|
65
134
|
let _lockedBySelf_initializers = [];
|
|
66
135
|
let _lockedBySelf_extraInitializers = [];
|
|
@@ -84,6 +153,13 @@ let GfxPrimitiveElementModel = (() => {
|
|
|
84
153
|
_index_decorators = [field()];
|
|
85
154
|
_externalLink_decorators = [field()];
|
|
86
155
|
_linkedDocId_decorators = [field()];
|
|
156
|
+
_pivotDocId_decorators = [field()];
|
|
157
|
+
_role_decorators = [field()];
|
|
158
|
+
_tags_decorators = [observe(observeTags), field()];
|
|
159
|
+
_validationExceptions_decorators = [field()];
|
|
160
|
+
_validationProfile_decorators = [field()];
|
|
161
|
+
_qualityChecklist_decorators = [field()];
|
|
162
|
+
_interchange_decorators = [field()];
|
|
87
163
|
_lockedBySelf_decorators = [field()];
|
|
88
164
|
_opacity_decorators = [local()];
|
|
89
165
|
_responseExtension_decorators = [local()];
|
|
@@ -94,6 +170,13 @@ let GfxPrimitiveElementModel = (() => {
|
|
|
94
170
|
__esDecorate(this, null, _index_decorators, { kind: "accessor", name: "index", static: false, private: false, access: { has: obj => "index" in obj, get: obj => obj.index, set: (obj, value) => { obj.index = value; } }, metadata: _metadata }, _index_initializers, _index_extraInitializers);
|
|
95
171
|
__esDecorate(this, null, _externalLink_decorators, { kind: "accessor", name: "externalLink", static: false, private: false, access: { has: obj => "externalLink" in obj, get: obj => obj.externalLink, set: (obj, value) => { obj.externalLink = value; } }, metadata: _metadata }, _externalLink_initializers, _externalLink_extraInitializers);
|
|
96
172
|
__esDecorate(this, null, _linkedDocId_decorators, { kind: "accessor", name: "linkedDocId", static: false, private: false, access: { has: obj => "linkedDocId" in obj, get: obj => obj.linkedDocId, set: (obj, value) => { obj.linkedDocId = value; } }, metadata: _metadata }, _linkedDocId_initializers, _linkedDocId_extraInitializers);
|
|
173
|
+
__esDecorate(this, null, _pivotDocId_decorators, { kind: "accessor", name: "pivotDocId", static: false, private: false, access: { has: obj => "pivotDocId" in obj, get: obj => obj.pivotDocId, set: (obj, value) => { obj.pivotDocId = value; } }, metadata: _metadata }, _pivotDocId_initializers, _pivotDocId_extraInitializers);
|
|
174
|
+
__esDecorate(this, null, _role_decorators, { kind: "accessor", name: "role", static: false, private: false, access: { has: obj => "role" in obj, get: obj => obj.role, set: (obj, value) => { obj.role = value; } }, metadata: _metadata }, _role_initializers, _role_extraInitializers);
|
|
175
|
+
__esDecorate(this, null, _tags_decorators, { kind: "accessor", name: "tags", static: false, private: false, access: { has: obj => "tags" in obj, get: obj => obj.tags, set: (obj, value) => { obj.tags = value; } }, metadata: _metadata }, _tags_initializers, _tags_extraInitializers);
|
|
176
|
+
__esDecorate(this, null, _validationExceptions_decorators, { kind: "accessor", name: "validationExceptions", static: false, private: false, access: { has: obj => "validationExceptions" in obj, get: obj => obj.validationExceptions, set: (obj, value) => { obj.validationExceptions = value; } }, metadata: _metadata }, _validationExceptions_initializers, _validationExceptions_extraInitializers);
|
|
177
|
+
__esDecorate(this, null, _validationProfile_decorators, { kind: "accessor", name: "validationProfile", static: false, private: false, access: { has: obj => "validationProfile" in obj, get: obj => obj.validationProfile, set: (obj, value) => { obj.validationProfile = value; } }, metadata: _metadata }, _validationProfile_initializers, _validationProfile_extraInitializers);
|
|
178
|
+
__esDecorate(this, null, _qualityChecklist_decorators, { kind: "accessor", name: "qualityChecklist", static: false, private: false, access: { has: obj => "qualityChecklist" in obj, get: obj => obj.qualityChecklist, set: (obj, value) => { obj.qualityChecklist = value; } }, metadata: _metadata }, _qualityChecklist_initializers, _qualityChecklist_extraInitializers);
|
|
179
|
+
__esDecorate(this, null, _interchange_decorators, { kind: "accessor", name: "interchange", static: false, private: false, access: { has: obj => "interchange" in obj, get: obj => obj.interchange, set: (obj, value) => { obj.interchange = value; } }, metadata: _metadata }, _interchange_initializers, _interchange_extraInitializers);
|
|
97
180
|
__esDecorate(this, null, _lockedBySelf_decorators, { kind: "accessor", name: "lockedBySelf", static: false, private: false, access: { has: obj => "lockedBySelf" in obj, get: obj => obj.lockedBySelf, set: (obj, value) => { obj.lockedBySelf = value; } }, metadata: _metadata }, _lockedBySelf_initializers, _lockedBySelf_extraInitializers);
|
|
98
181
|
__esDecorate(this, null, _opacity_decorators, { kind: "accessor", name: "opacity", static: false, private: false, access: { has: obj => "opacity" in obj, get: obj => obj.opacity, set: (obj, value) => { obj.opacity = value; } }, metadata: _metadata }, _opacity_initializers, _opacity_extraInitializers);
|
|
99
182
|
__esDecorate(this, null, _responseExtension_decorators, { kind: "accessor", name: "responseExtension", static: false, private: false, access: { has: obj => "responseExtension" in obj, get: obj => obj.responseExtension, set: (obj, value) => { obj.responseExtension = value; } }, metadata: _metadata }, _responseExtension_initializers, _responseExtension_extraInitializers);
|
|
@@ -104,8 +187,10 @@ let GfxPrimitiveElementModel = (() => {
|
|
|
104
187
|
return true;
|
|
105
188
|
}
|
|
106
189
|
get deserializedXYWH() {
|
|
107
|
-
|
|
108
|
-
|
|
190
|
+
// Read `xywh` once: on a group it is a derived getter that may recompute
|
|
191
|
+
// the union of every child bound, so reading it twice doubles the cost.
|
|
192
|
+
const xywh = this.xywh;
|
|
193
|
+
if (!this._lastXYWH || xywh !== this._lastXYWH) {
|
|
109
194
|
this._local.set('deserializedXYWH', deserializeXYWH(xywh));
|
|
110
195
|
this._lastXYWH = xywh;
|
|
111
196
|
}
|
|
@@ -174,7 +259,14 @@ let GfxPrimitiveElementModel = (() => {
|
|
|
174
259
|
this.#index_accessor_storage = (__runInitializers(this, _hidden_extraInitializers), __runInitializers(this, _index_initializers, void 0));
|
|
175
260
|
this.#externalLink_accessor_storage = (__runInitializers(this, _index_extraInitializers), __runInitializers(this, _externalLink_initializers, undefined));
|
|
176
261
|
this.#linkedDocId_accessor_storage = (__runInitializers(this, _externalLink_extraInitializers), __runInitializers(this, _linkedDocId_initializers, undefined));
|
|
177
|
-
this.#
|
|
262
|
+
this.#pivotDocId_accessor_storage = (__runInitializers(this, _linkedDocId_extraInitializers), __runInitializers(this, _pivotDocId_initializers, undefined));
|
|
263
|
+
this.#role_accessor_storage = (__runInitializers(this, _pivotDocId_extraInitializers), __runInitializers(this, _role_initializers, undefined));
|
|
264
|
+
this.#tags_accessor_storage = (__runInitializers(this, _role_extraInitializers), __runInitializers(this, _tags_initializers, undefined));
|
|
265
|
+
this.#validationExceptions_accessor_storage = (__runInitializers(this, _tags_extraInitializers), __runInitializers(this, _validationExceptions_initializers, undefined));
|
|
266
|
+
this.#validationProfile_accessor_storage = (__runInitializers(this, _validationExceptions_extraInitializers), __runInitializers(this, _validationProfile_initializers, undefined));
|
|
267
|
+
this.#qualityChecklist_accessor_storage = (__runInitializers(this, _validationProfile_extraInitializers), __runInitializers(this, _qualityChecklist_initializers, undefined));
|
|
268
|
+
this.#interchange_accessor_storage = (__runInitializers(this, _qualityChecklist_extraInitializers), __runInitializers(this, _interchange_initializers, undefined));
|
|
269
|
+
this.#lockedBySelf_accessor_storage = (__runInitializers(this, _interchange_extraInitializers), __runInitializers(this, _lockedBySelf_initializers, false));
|
|
178
270
|
this.#opacity_accessor_storage = (__runInitializers(this, _lockedBySelf_extraInitializers), __runInitializers(this, _opacity_initializers, 1));
|
|
179
271
|
this.#responseExtension_accessor_storage = (__runInitializers(this, _opacity_extraInitializers), __runInitializers(this, _responseExtension_initializers, [0, 0]));
|
|
180
272
|
this.#seed_accessor_storage = (__runInitializers(this, _responseExtension_extraInitializers), __runInitializers(this, _seed_initializers, void 0));
|
|
@@ -185,6 +277,12 @@ let GfxPrimitiveElementModel = (() => {
|
|
|
185
277
|
this.surface = model;
|
|
186
278
|
this._stashed = stashedStore;
|
|
187
279
|
this._onChange = onChange;
|
|
280
|
+
// DO NOT turn these two into field initializers. `@field()` deliberately
|
|
281
|
+
// does NOT write an `undefined` default into the Y.Map (see
|
|
282
|
+
// `./decorators/field.ts`), and both accessors are declared without an
|
|
283
|
+
// initializer — so these assignments, which go through the SETTER, are the
|
|
284
|
+
// only reason `index` and `seed` reach the document at all. Losing `index`
|
|
285
|
+
// would silently corrupt z-order on every new element.
|
|
188
286
|
this.index = 'a0';
|
|
189
287
|
this.seed = randomSeed();
|
|
190
288
|
}
|
|
@@ -288,6 +386,63 @@ let GfxPrimitiveElementModel = (() => {
|
|
|
288
386
|
unlock() {
|
|
289
387
|
unlockElementImpl(this.surface.store, this);
|
|
290
388
|
}
|
|
389
|
+
/**
|
|
390
|
+
* Remove an OPTIONAL `@field()` from the document entirely.
|
|
391
|
+
*
|
|
392
|
+
* The missing half of `@field()`. Its setter is unconditional — assigning
|
|
393
|
+
* `undefined` still calls `yMap.set(prop, undefined)` — so "clearing" an
|
|
394
|
+
* optional field through the accessor leaves the KEY behind. The getter reads
|
|
395
|
+
* `undefined` and nothing misbehaves, but the element is no longer
|
|
396
|
+
* byte-identical to one that never had the field: the phantom key syncs to
|
|
397
|
+
* every peer and ships in every snapshot. `init` is already careful to write
|
|
398
|
+
* nothing for an `undefined` default; this is how a field gets back to that
|
|
399
|
+
* state once it has been set.
|
|
400
|
+
*
|
|
401
|
+
* Emits a `delete` action rather than an `update`, so a consumer filtering on
|
|
402
|
+
* `props` will see an EMPTY payload and must inspect `oldValues` — the same
|
|
403
|
+
* shape an undo of the original write produces.
|
|
404
|
+
*
|
|
405
|
+
* ## What it refuses, and why that is load-bearing
|
|
406
|
+
*
|
|
407
|
+
* This is a direct write path into the element's Y.Map, on the class that
|
|
408
|
+
* carries the document format, exported by `@labre/std` and therefore
|
|
409
|
+
* callable by a host. `_assignElementProp` learned the same lesson in the
|
|
410
|
+
* unknown-props change (see `docs/spikes/us-1-8-unknown-props-preservation.md`,
|
|
411
|
+
* whose deny-list is explicitly security rather than hygiene); an unguarded
|
|
412
|
+
* delete re-opens the door from the other side. So:
|
|
413
|
+
*
|
|
414
|
+
* - a key the element class does not DECLARE as a `@field()` is refused. It
|
|
415
|
+
* is either an unknown key preserved verbatim for a newer client — deleting
|
|
416
|
+
* it is exactly the data loss that change exists to prevent — or not
|
|
417
|
+
* document data at all;
|
|
418
|
+
* - a STRUCTURAL field is refused even though it is declared
|
|
419
|
+
* ({@link UNCLEARABLE_ELEMENT_FIELDS}).
|
|
420
|
+
*
|
|
421
|
+
* Refusal is a no-op plus a `console.warn`, the same way an unencodable value
|
|
422
|
+
* is dropped rather than thrown: a misuse must not take the board down, and
|
|
423
|
+
* must not silently corrupt it either.
|
|
424
|
+
*/
|
|
425
|
+
clearField(prop) {
|
|
426
|
+
if (UNCLEARABLE_ELEMENT_FIELDS.has(prop)) {
|
|
427
|
+
console.warn(`Refusing to clear the structural element field "${prop}": it has no meaningful absent state.`);
|
|
428
|
+
return;
|
|
429
|
+
}
|
|
430
|
+
if (!getFieldPropsSet(this).has(prop)) {
|
|
431
|
+
console.warn(`Refusing to clear "${prop}": not a declared @field() on this element. Unknown keys are preserved deliberately.`);
|
|
432
|
+
return;
|
|
433
|
+
}
|
|
434
|
+
if (!this.yMap.has(prop))
|
|
435
|
+
return;
|
|
436
|
+
if (this.yMap.doc) {
|
|
437
|
+
this.surface.store.transact(() => {
|
|
438
|
+
this.yMap.delete(prop);
|
|
439
|
+
});
|
|
440
|
+
// The Y.Map observer prunes `_preserved` on the delete action.
|
|
441
|
+
return;
|
|
442
|
+
}
|
|
443
|
+
this.yMap.delete(prop);
|
|
444
|
+
this._preserved.delete(prop);
|
|
445
|
+
}
|
|
291
446
|
#display_accessor_storage;
|
|
292
447
|
get display() { return this.#display_accessor_storage; }
|
|
293
448
|
set display(value) { this.#display_accessor_storage = value; }
|
|
@@ -317,6 +472,271 @@ let GfxPrimitiveElementModel = (() => {
|
|
|
317
472
|
#linkedDocId_accessor_storage;
|
|
318
473
|
get linkedDocId() { return this.#linkedDocId_accessor_storage; }
|
|
319
474
|
set linkedDocId(value) { this.#linkedDocId_accessor_storage = value; }
|
|
475
|
+
#pivotDocId_accessor_storage;
|
|
476
|
+
/**
|
|
477
|
+
* Identity binding to a host-owned **pivot record**: this element is an
|
|
478
|
+
* *occurrence* of the document `pivotDocId`. Many elements, across many
|
|
479
|
+
* boards, may carry the same `pivotDocId` — that is the point. A Wardley
|
|
480
|
+
* `component` drawn on three maps is the same component (MF1, ADR 0005).
|
|
481
|
+
*
|
|
482
|
+
* Opaque to the library: the framework never dereferences it, never fetches
|
|
483
|
+
* it, never renders it. Reading it is the host's job, through
|
|
484
|
+
* `PivotPropertiesProvider` (`@labre/affine-shared/services`, ADR 0006).
|
|
485
|
+
* No renderer, no hit-test, no layout and no exporter may read it; it
|
|
486
|
+
* participates in no `@derive`, `@convert` or `@watch` chain, so it cannot
|
|
487
|
+
* move, resize or restyle anything.
|
|
488
|
+
*
|
|
489
|
+
* Orthogonal to {@link linkedDocId} / {@link externalLink}, which are a
|
|
490
|
+
* *hyperlink* (navigation), not an identity. They differ on every axis that
|
|
491
|
+
* matters — cardinality (a hyperlink is one target per element and is
|
|
492
|
+
* exclusive with `externalLink`; a binding is many-elements-to-one-record),
|
|
493
|
+
* lifecycle (a hyperlink is picked from a search modal, a binding is created
|
|
494
|
+
* by promotion) and consumers (an arrow that navigates vs. a hover card and
|
|
495
|
+
* a rules engine). An element may legitimately carry both, and code reading
|
|
496
|
+
* one as a stand-in for the other is a bug.
|
|
497
|
+
*
|
|
498
|
+
* Declared on the BASE class for the same reason as {@link role}: an element
|
|
499
|
+
* re-created from props (paste, duplicate, alt-drag clone, template
|
|
500
|
+
* insertion) only reaches the Y.Map through keys that have a declared
|
|
501
|
+
* accessor, so a binding declared per subclass would be silently dropped on
|
|
502
|
+
* copy — and the loss would be invisible until the next reload.
|
|
503
|
+
*
|
|
504
|
+
* `undefined` = unbound, and no key is written for it, so an element that
|
|
505
|
+
* never binds stays byte-identical to one created before the field existed:
|
|
506
|
+
* optional field, no schema version bump, no migration. Clearing it goes
|
|
507
|
+
* through {@link clearField}, which removes the key rather than leaving a
|
|
508
|
+
* tombstone.
|
|
509
|
+
*
|
|
510
|
+
* A binding to a record that does not (yet) exist — or was deleted, or is
|
|
511
|
+
* invisible to this user — is a legal, persisted state: the library never
|
|
512
|
+
* validates it and never deletes host data. It resolves to `missing` at read
|
|
513
|
+
* time (ADR 0006).
|
|
514
|
+
*/
|
|
515
|
+
get pivotDocId() { return this.#pivotDocId_accessor_storage; }
|
|
516
|
+
set pivotDocId(value) { this.#pivotDocId_accessor_storage = value; }
|
|
517
|
+
#role_accessor_storage;
|
|
518
|
+
/**
|
|
519
|
+
* Semantic role of the element, `<framework>:<role>` (see `./role.ts`).
|
|
520
|
+
* `undefined` = neutral: generalist elements carry no role, and no key is
|
|
521
|
+
* written for them at creation.
|
|
522
|
+
*
|
|
523
|
+
* Declared on the BASE class on purpose, even though only framework modules
|
|
524
|
+
* set it: an element re-created from props (paste, duplicate, template
|
|
525
|
+
* insertion) only reaches the Y.Map through keys that have a declared
|
|
526
|
+
* accessor, so a role declared per subclass would be silently dropped on
|
|
527
|
+
* copy. Flat string on purpose — element serialization is one level deep.
|
|
528
|
+
*/
|
|
529
|
+
get role() { return this.#role_accessor_storage; }
|
|
530
|
+
set role(value) { this.#role_accessor_storage = value; }
|
|
531
|
+
#tags_accessor_storage;
|
|
532
|
+
/**
|
|
533
|
+
* Level 3 — **contextual qualification** (ADR 0007 § 4). Tag def id → the
|
|
534
|
+
* value ids selected for it, e.g. `{ 'wardley:nature': ['wardley:nature/data'] }`.
|
|
535
|
+
*
|
|
536
|
+
* Both halves of a key are namespaced by framework on purpose: two universes
|
|
537
|
+
* WILL collide on a word like `activity` — `edgy:activity` is already an EDGY
|
|
538
|
+
* base element while `activity` is one of Wardley's four natures — and
|
|
539
|
+
* namespacing is what makes that collision harmless rather than decorative.
|
|
540
|
+
*
|
|
541
|
+
* Absent and empty are equivalent (both mean "unqualified"), and the default
|
|
542
|
+
* is `undefined`, **never** `new Y.Map()`: `@field()`'s `init` writes nothing
|
|
543
|
+
* for an `undefined` default, so an element that is never qualified — every
|
|
544
|
+
* brush stroke, every connector — stays byte-identical to one created before
|
|
545
|
+
* the field existed. A non-`undefined` default on this base class would
|
|
546
|
+
* reinstate that cost on every element of every document. The qualification
|
|
547
|
+
* writer (`setElementTag`, `./tags.js`) creates the map on first use and
|
|
548
|
+
* removes the key again when the last tag goes.
|
|
549
|
+
*
|
|
550
|
+
* ## Why a NESTED `Y.Map` and not a plain object
|
|
551
|
+
*
|
|
552
|
+
* `@field()` writes straight into the element's `Y.Map` with no `native2Y` in
|
|
553
|
+
* the path, so a plain object here really would be ONE opaque value: two
|
|
554
|
+
* people qualifying the same element on two DIFFERENT tags would silently
|
|
555
|
+
* lose one of the two. A nested map merges per tag, which is what the shape
|
|
556
|
+
* has to do — there is no migration runner for surface elements, so it is
|
|
557
|
+
* chosen once. The `string[]` of a SINGLE tag stays last-write-wins, and that
|
|
558
|
+
* is correct: one tag's value set is one atomic choice.
|
|
559
|
+
*
|
|
560
|
+
* Exactly one level of Y-awareness, with plain arrays as values — shallower
|
|
561
|
+
* than `MindmapElementModel.children` (`Y.Map<NodeDetail>`), which already
|
|
562
|
+
* ships, and inside what `surface-transformer`'s `SURFACE_YMAP_UNIQ_IDENTIFIER`
|
|
563
|
+
* envelope round-trips generically.
|
|
564
|
+
*
|
|
565
|
+
* Declared on the BASE class for the same reason as {@link role} and
|
|
566
|
+
* {@link pivotDocId}: an element re-created from props (paste, duplicate,
|
|
567
|
+
* alt-drag clone, template insertion) only reaches the `Y.Map` through keys
|
|
568
|
+
* that have a declared accessor, and a qualification the user authored is
|
|
569
|
+
* exactly the kind of thing that must survive a copy. `SurfaceBlockModel`'s
|
|
570
|
+
* `_propsToY` rebuilds the map from the plain JSON `serialize()` produces, so
|
|
571
|
+
* a copy is a copy of the values and never a second reference to one map.
|
|
572
|
+
*
|
|
573
|
+
* Opaque to the framework: no renderer, no hit-test, no layout and no
|
|
574
|
+
* exporter reads it, and it participates in no `@derive` / `@convert` chain.
|
|
575
|
+
* Values whose def has vanished still load and are displayed as raw ids —
|
|
576
|
+
* defs are runtime configuration and are NEVER persisted.
|
|
577
|
+
*/
|
|
578
|
+
get tags() { return this.#tags_accessor_storage; }
|
|
579
|
+
set tags(value) { this.#tags_accessor_storage = value; }
|
|
580
|
+
#validationExceptions_accessor_storage;
|
|
581
|
+
/**
|
|
582
|
+
* Validation rules this element is excused from (PF8, "no rule is a wall").
|
|
583
|
+
*
|
|
584
|
+
* Declared on the BASE class for the same reason as {@link role}: an element
|
|
585
|
+
* re-created from props (paste, duplicate, template insertion) only reaches
|
|
586
|
+
* the Y.Map through keys that have a declared accessor, so an exception
|
|
587
|
+
* declared per subclass would be silently dropped on copy — and an arbitration
|
|
588
|
+
* the user made explicitly is exactly the kind of thing that must survive a
|
|
589
|
+
* copy.
|
|
590
|
+
*
|
|
591
|
+
* `undefined` = no exception, and no key is written for it, so an element that
|
|
592
|
+
* never got one stays byte-identical to one created before the field existed:
|
|
593
|
+
* optional field, no schema version bump, no migration.
|
|
594
|
+
*
|
|
595
|
+
* Flat JSON on purpose — element serialization is one level deep, and a value
|
|
596
|
+
* a Yjs update can encode is the contract enforced by `_assignElementProp`.
|
|
597
|
+
* The engine that reads it lives in `@labre/affine-block-surface`; the base
|
|
598
|
+
* model only carries the data, and knows nothing about rules.
|
|
599
|
+
*/
|
|
600
|
+
get validationExceptions() { return this.#validationExceptions_accessor_storage; }
|
|
601
|
+
set validationExceptions(value) { this.#validationExceptions_accessor_storage = value; }
|
|
602
|
+
#validationProfile_accessor_storage;
|
|
603
|
+
/**
|
|
604
|
+
* Id of the validation PROFILE this element's framework is checked against
|
|
605
|
+
* (PF9) — a set of enabled rules and their severities, declared as data by
|
|
606
|
+
* the framework.
|
|
607
|
+
*
|
|
608
|
+
* Carried by the framework's BACKGROUND element, i.e. the root instance, and
|
|
609
|
+
* not by the document: two maps on one canvas are two independent pieces of
|
|
610
|
+
* work, and a sketch has to be able to sit next to a deliverable without
|
|
611
|
+
* either of them dictating the other's requirements (PF9.1). The engine reads
|
|
612
|
+
* it off the background a finding was measured against, which it already
|
|
613
|
+
* names (`Violation.backgroundId`).
|
|
614
|
+
*
|
|
615
|
+
* Declared on the BASE class for the same reason as {@link role} and
|
|
616
|
+
* {@link validationExceptions}: an element re-created from props (paste,
|
|
617
|
+
* duplicate, template insertion) only reaches the Y.Map through keys that
|
|
618
|
+
* have a declared accessor, so a profile declared per subclass would be
|
|
619
|
+
* silently dropped on copy — and duplicating a strict map must give a strict
|
|
620
|
+
* map.
|
|
621
|
+
*
|
|
622
|
+
* `undefined` = "no explicit choice", which resolves to the framework's
|
|
623
|
+
* DEFAULT profile — the most permissive reasonable one, because the sketch
|
|
624
|
+
* wins. No key is written for it, so a document authored before this field
|
|
625
|
+
* existed stays byte-identical: optional field, no schema version bump, no
|
|
626
|
+
* migration. Choosing the default back again removes the key rather than
|
|
627
|
+
* writing it.
|
|
628
|
+
*
|
|
629
|
+
* Flat string on purpose — element serialization is one level deep. The
|
|
630
|
+
* engine that interprets it lives in `@labre/affine-block-surface`; the base
|
|
631
|
+
* model only carries the id, and knows nothing about profiles.
|
|
632
|
+
*/
|
|
633
|
+
get validationProfile() { return this.#validationProfile_accessor_storage; }
|
|
634
|
+
set validationProfile(value) { this.#validationProfile_accessor_storage = value; }
|
|
635
|
+
#qualityChecklist_accessor_storage;
|
|
636
|
+
/**
|
|
637
|
+
* The map-quality NUDGES the user has ticked off on this instance (PF7.10) —
|
|
638
|
+
* ids of declarative reminders their framework ships, never rules the engine
|
|
639
|
+
* evaluates.
|
|
640
|
+
*
|
|
641
|
+
* A nudge is an expectation the tool cannot judge ("the map has a title that
|
|
642
|
+
* frames the study"): the content can exist without being good, so nothing
|
|
643
|
+
* here is ever computed. Ticking one is the same gesture as granting an
|
|
644
|
+
* exception — the user says "I have taken care of this" and the tool records
|
|
645
|
+
* it rather than pretending to check it.
|
|
646
|
+
*
|
|
647
|
+
* Carried by the framework's BACKGROUND element, i.e. the root instance, for
|
|
648
|
+
* the same reason {@link validationProfile} is: two maps on one canvas are two
|
|
649
|
+
* independent pieces of work, and a checklist ticked on one says nothing about
|
|
650
|
+
* the other.
|
|
651
|
+
*
|
|
652
|
+
* Declared on the BASE class for the same reason as {@link role} and
|
|
653
|
+
* {@link validationExceptions}: an element re-created from props (paste,
|
|
654
|
+
* duplicate, template insertion) only reaches the Y.Map through keys that have
|
|
655
|
+
* a declared accessor, so a checklist declared per subclass would be silently
|
|
656
|
+
* dropped on copy.
|
|
657
|
+
*
|
|
658
|
+
* `undefined` = nothing ticked, and no key is written for it, so a document
|
|
659
|
+
* authored before this field existed stays byte-identical: optional field, no
|
|
660
|
+
* schema version bump, no migration. Unticking the last one goes through
|
|
661
|
+
* {@link clearField}, which removes the key rather than leaving a tombstone.
|
|
662
|
+
*
|
|
663
|
+
* Flat JSON — an array of strings — on purpose: element serialization is one
|
|
664
|
+
* level deep, and a value a Yjs update can encode is the contract enforced by
|
|
665
|
+
* `_assignElementProp`. The library that interprets the ids lives in
|
|
666
|
+
* `@labre/affine-block-surface`; the base model only carries them, and knows
|
|
667
|
+
* nothing about nudges. Ids of nudges no framework declares any more are kept,
|
|
668
|
+
* not pruned: the tooling comes and goes with a flag, the decision does not.
|
|
669
|
+
*/
|
|
670
|
+
get qualityChecklist() { return this.#qualityChecklist_accessor_storage; }
|
|
671
|
+
set qualityChecklist(value) { this.#qualityChecklist_accessor_storage = value; }
|
|
672
|
+
#interchange_accessor_storage;
|
|
673
|
+
/**
|
|
674
|
+
* Verbatim foreign matter from an interchange import, keyed by FORMAT id
|
|
675
|
+
* (`bpmn`, `owm`, …) — never by framework, because a `.bpmn` and an OWM file
|
|
676
|
+
* make different promises about the same element (ADR 0012 § D2).
|
|
677
|
+
*
|
|
678
|
+
* This field is dumb storage, and that is the whole design. ADR 0012 sorts
|
|
679
|
+
* every node of an imported file into three states — **mapped** (there is a
|
|
680
|
+
* Labre artefact, re-emitted from the drawing), **carried** (no artefact,
|
|
681
|
+
* kept verbatim here, re-emitted in place) and **quarantined** (kept, but
|
|
682
|
+
* re-emitting it would contradict the document, so it is not). That contract
|
|
683
|
+
* lives entirely in the importers and exporters; the base model neither
|
|
684
|
+
* classifies, validates, dereferences nor re-emits anything, and knows no
|
|
685
|
+
* format. No renderer, hit-test, layout or `@derive` / `@convert` chain reads
|
|
686
|
+
* it, so nothing here can move, resize or restyle an element.
|
|
687
|
+
*
|
|
688
|
+
* Declared on the BASE class for the same reason as {@link role} and
|
|
689
|
+
* {@link validationExceptions}, and for one more: a BPMN `sequenceFlow`
|
|
690
|
+
* carrying a `conditionExpression` is a plain **connector**, and
|
|
691
|
+
* `ConnectorElementModel` is shared plumbing that will never be a BPMN class.
|
|
692
|
+
* An element re-created from props (paste, duplicate, alt-drag clone,
|
|
693
|
+
* template insertion) only reaches the Y.Map through keys that have a
|
|
694
|
+
* declared accessor, so a payload declared per subclass would be silently
|
|
695
|
+
* dropped on copy — the exact loss `docs/spikes/us-1-8-unknown-props-preservation.md`
|
|
696
|
+
* exists to prevent. Declaring it, rather than leaning on that spike's
|
|
697
|
+
* verbatim fallback for undeclared keys, is what makes it a contract: a field
|
|
698
|
+
* nothing declares is a field nothing can test, strip or find.
|
|
699
|
+
*
|
|
700
|
+
* `undefined` = this element never met an import, and no key is written for
|
|
701
|
+
* it, so it stays byte-identical to one created before the field existed:
|
|
702
|
+
* optional field, no schema version bump, no migration. An import writes no
|
|
703
|
+
* key for a visual-tier capability, and none for an element that carried
|
|
704
|
+
* nothing. Clearing goes through {@link clearField}, which removes the key
|
|
705
|
+
* rather than leaving a tombstone.
|
|
706
|
+
*
|
|
707
|
+
* Flat JSON on purpose — a value a Yjs update can encode is the contract
|
|
708
|
+
* enforced by `_assignElementProp`, and the whole payload is ONE Y.Map entry,
|
|
709
|
+
* written once at import and never mutated afterwards. Two peers writing it
|
|
710
|
+
* concurrently therefore resolve last-write-wins on the whole blob, which is
|
|
711
|
+
* `lanes`' trade (ADR 0007): nobody edits this value, so the window is the
|
|
712
|
+
* import itself.
|
|
713
|
+
*
|
|
714
|
+
* ## Writing it, for the importer
|
|
715
|
+
*
|
|
716
|
+
* - **Write the whole blob in one assignment**, the way an import already
|
|
717
|
+
* produces it. Never read-modify-write it key by key: the Y.Map entry is the
|
|
718
|
+
* entire `Record`, so a partial update is still a last-write-wins overwrite
|
|
719
|
+
* of everything, and two of them racing lose a whole format's payload rather
|
|
720
|
+
* than merging.
|
|
721
|
+
* - **Key what you carry by its {@link InterchangeScope}.** One Labre element
|
|
722
|
+
* stands for several source elements, and an unscoped map lets what came off
|
|
723
|
+
* one overwrite what came off another — a silent loss, into a persisted
|
|
724
|
+
* value, of exactly the data this field exists to keep. The scope is also
|
|
725
|
+
* the only record of where a fragment has to be put back.
|
|
726
|
+
* - **Write no key at all** when there is nothing to carry — an element the
|
|
727
|
+
* import mapped cleanly, or any visual-tier capability, which by contract
|
|
728
|
+
* writes none (ADR 0012 P2). Absent and empty are NOT equivalent here:
|
|
729
|
+
* `{}` costs every element a Y.Map entry and makes P2's "writes no
|
|
730
|
+
* `interchange` key" untestable.
|
|
731
|
+
* - **Removing it is {@link clearField}**, never an assignment to `undefined`
|
|
732
|
+
* — the former deletes the key, the latter can leave a tombstone.
|
|
733
|
+
* - **Nothing caps the size of this value** (ADR 0012, open question 3). A
|
|
734
|
+
* pathological file would produce a document that is mostly foreign matter;
|
|
735
|
+
* a cap that dropped data would contradict D2, so the only honest cap is a
|
|
736
|
+
* refusal at import time. That is the importer's call, not the model's.
|
|
737
|
+
*/
|
|
738
|
+
get interchange() { return this.#interchange_accessor_storage; }
|
|
739
|
+
set interchange(value) { this.#interchange_accessor_storage = value; }
|
|
320
740
|
#lockedBySelf_accessor_storage;
|
|
321
741
|
get lockedBySelf() { return this.#lockedBySelf_accessor_storage; }
|
|
322
742
|
set lockedBySelf(value) { this.#lockedBySelf_accessor_storage = value; }
|
|
@@ -337,6 +757,17 @@ export class GfxGroupLikeElementModel extends GfxPrimitiveElementModel {
|
|
|
337
757
|
super(...arguments);
|
|
338
758
|
this._childIds = [];
|
|
339
759
|
this._mutex = createMutex();
|
|
760
|
+
/**
|
|
761
|
+
* Whether the cached `xywh` must be recomputed from the children.
|
|
762
|
+
*
|
|
763
|
+
* The bound of a group is the union of its children bounds, which used to be
|
|
764
|
+
* recomputed on **every** read of `xywh` — and `xywh` is read many times per
|
|
765
|
+
* frame (renderer, hit test, toolbar anchor, selection rect…). It is now
|
|
766
|
+
* computed once per mutation: the surface marks the group dirty (or
|
|
767
|
+
* refreshes it eagerly) whenever a child changes, see
|
|
768
|
+
* {@link invalidateXYWH} / {@link refreshXYWH}.
|
|
769
|
+
*/
|
|
770
|
+
this._xywhDirty = true;
|
|
340
771
|
this[_a] = true;
|
|
341
772
|
}
|
|
342
773
|
static { _a = gfxGroupCompatibleSymbol; }
|
|
@@ -361,26 +792,47 @@ export class GfxGroupLikeElementModel extends GfxPrimitiveElementModel {
|
|
|
361
792
|
}
|
|
362
793
|
get xywh() {
|
|
363
794
|
this._mutex(() => {
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
if (curXYWH !== newXYWH || !this._local.has('xywh')) {
|
|
367
|
-
this._local.set('xywh', newXYWH);
|
|
368
|
-
if (curXYWH !== newXYWH) {
|
|
369
|
-
this._onChange({
|
|
370
|
-
props: {
|
|
371
|
-
xywh: newXYWH,
|
|
372
|
-
},
|
|
373
|
-
oldValues: {
|
|
374
|
-
xywh: curXYWH,
|
|
375
|
-
},
|
|
376
|
-
local: true,
|
|
377
|
-
});
|
|
378
|
-
}
|
|
795
|
+
if (this._xywhDirty || !this._local.has('xywh')) {
|
|
796
|
+
this._recomputeXYWH(true);
|
|
379
797
|
}
|
|
380
798
|
});
|
|
381
799
|
return this._local.get('xywh') ?? '[0,0,0,0]';
|
|
382
800
|
}
|
|
383
801
|
set xywh(_) { }
|
|
802
|
+
/**
|
|
803
|
+
* Recompute the cached bound and notify the listeners when it moved.
|
|
804
|
+
*
|
|
805
|
+
* Always run it through {@link _mutex}: the notification re-enters the
|
|
806
|
+
* `xywh` getter (a parent group unites this bound again), and the mutex is
|
|
807
|
+
* what keeps that read from recomputing this very group a second time.
|
|
808
|
+
*/
|
|
809
|
+
_recomputeXYWH(local) {
|
|
810
|
+
const oldXYWH = this._local.get('xywh') ?? '[0,0,0,0]';
|
|
811
|
+
const hadXYWH = this._local.has('xywh');
|
|
812
|
+
const nextXYWH = this._getXYWH().serialize();
|
|
813
|
+
this._xywhDirty = false;
|
|
814
|
+
if (hadXYWH && oldXYWH === nextXYWH) {
|
|
815
|
+
return;
|
|
816
|
+
}
|
|
817
|
+
// Set before notifying: the listeners read `xywh` back, and the mutex
|
|
818
|
+
// makes that read return the cached value instead of recomputing.
|
|
819
|
+
this._local.set('xywh', nextXYWH);
|
|
820
|
+
if (oldXYWH !== nextXYWH) {
|
|
821
|
+
this._onChange({
|
|
822
|
+
props: {
|
|
823
|
+
xywh: nextXYWH,
|
|
824
|
+
},
|
|
825
|
+
oldValues: {
|
|
826
|
+
xywh: oldXYWH,
|
|
827
|
+
},
|
|
828
|
+
local,
|
|
829
|
+
});
|
|
830
|
+
}
|
|
831
|
+
}
|
|
832
|
+
/**
|
|
833
|
+
* Pure: it only reads the children. The cache is written by
|
|
834
|
+
* {@link _recomputeXYWH}, which is the single place allowed to store it.
|
|
835
|
+
*/
|
|
384
836
|
_getXYWH() {
|
|
385
837
|
let bound;
|
|
386
838
|
this.childElements.forEach(child => {
|
|
@@ -389,14 +841,29 @@ export class GfxGroupLikeElementModel extends GfxPrimitiveElementModel {
|
|
|
389
841
|
}
|
|
390
842
|
bound = bound ? bound.unite(child.elementBound) : child.elementBound;
|
|
391
843
|
});
|
|
392
|
-
if (bound) {
|
|
393
|
-
this._local.set('xywh', bound.serialize());
|
|
394
|
-
}
|
|
395
|
-
else {
|
|
396
|
-
this._local.delete('xywh');
|
|
397
|
-
}
|
|
398
844
|
return bound ?? new Bound(0, 0, 0, 0);
|
|
399
845
|
}
|
|
846
|
+
/**
|
|
847
|
+
* Mark the cached bound as stale without recomputing it. The next read of
|
|
848
|
+
* `xywh` pays for the recomputation, and notifies the listeners if the
|
|
849
|
+
* bound actually moved.
|
|
850
|
+
*
|
|
851
|
+
* Use it for the changes that only *may* move the bound (a custom prop a
|
|
852
|
+
* subclass folds into its own `elementBound`); use {@link refreshXYWH} for
|
|
853
|
+
* the changes that are known to move it.
|
|
854
|
+
*/
|
|
855
|
+
invalidateXYWH() {
|
|
856
|
+
this._xywhDirty = true;
|
|
857
|
+
}
|
|
858
|
+
/**
|
|
859
|
+
* Recompute the cached bound right away, and notify the listeners when it
|
|
860
|
+
* moved. `local` is the origin of the mutation that moved it.
|
|
861
|
+
*/
|
|
862
|
+
refreshXYWH(local) {
|
|
863
|
+
this._mutex(() => {
|
|
864
|
+
this._recomputeXYWH(local);
|
|
865
|
+
});
|
|
866
|
+
}
|
|
400
867
|
/**
|
|
401
868
|
* The actual field that stores the children of the group.
|
|
402
869
|
* It should be a ymap decorated with `@field`.
|
|
@@ -418,6 +885,7 @@ export class GfxGroupLikeElementModel extends GfxPrimitiveElementModel {
|
|
|
418
885
|
setChildIds(value, fromLocal) {
|
|
419
886
|
const oldChildIds = this.childIds;
|
|
420
887
|
this._childIds = value;
|
|
888
|
+
this.invalidateXYWH();
|
|
421
889
|
this._onChange({
|
|
422
890
|
props: {
|
|
423
891
|
childIds: value,
|
|
@@ -446,12 +914,29 @@ export function syncElementFromY(model, callback) {
|
|
|
446
914
|
disposables[key]?.();
|
|
447
915
|
disposables[key] = watchText(key, value, callback);
|
|
448
916
|
}
|
|
917
|
+
// A nested Y type declared with `@observe` gets a FRESH instance every
|
|
918
|
+
// time the key itself is rewritten — by a remote peer, or by undo/redo,
|
|
919
|
+
// neither of which goes through the accessor's setter (the only other
|
|
920
|
+
// caller of `startObserve`). Without this the observer is left on a
|
|
921
|
+
// detached type and every later in-place mutation goes unseen: set a
|
|
922
|
+
// tag, undo, redo, set another one, and the second write is invisible
|
|
923
|
+
// to the publisher. Guarded on identity so re-setting the same instance
|
|
924
|
+
// does not needlessly re-run the observer's initialising call.
|
|
925
|
+
if (model['_preserved'].get(key) !== value &&
|
|
926
|
+
hasObserveMeta(key, model)) {
|
|
927
|
+
startObserve(key, model);
|
|
928
|
+
}
|
|
449
929
|
model['_preserved'].set(key, value);
|
|
450
930
|
props[key] = value;
|
|
451
931
|
oldValues[key] = oldValue;
|
|
452
932
|
}
|
|
453
933
|
else {
|
|
934
|
+
// `_preserved` is pruned FIRST: `startObserve` re-reads the accessor,
|
|
935
|
+
// which falls back to `_preserved`, so the other order would re-attach
|
|
936
|
+
// the observer to the very map that has just been deleted.
|
|
454
937
|
model['_preserved'].delete(key);
|
|
938
|
+
if (hasObserveMeta(key, model))
|
|
939
|
+
startObserve(key, model);
|
|
455
940
|
oldValues[key] = oldValue;
|
|
456
941
|
}
|
|
457
942
|
});
|