@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
|
@@ -0,0 +1,767 @@
|
|
|
1
|
+
import { getUniverseRegistry, hostLanguage, queryPivotProperties, } from '../../affine-shared/services/index.js';
|
|
2
|
+
import { createIdentifier } from '../../global/di/index.js';
|
|
3
|
+
import { LifeCycleWatcher, } from '../../std/index.js';
|
|
4
|
+
import { GfxControllerIdentifier, GfxPrimitiveElementModel, isPivotBound, readElementTags, roleIsA, } from '../../std/gfx/index.js';
|
|
5
|
+
import { effect, signal } from '@preact/signals-core';
|
|
6
|
+
// Straight at the two leaf modules rather than at the barrel, for the reason
|
|
7
|
+
// `validation.ts` states: `index.js` also re-exports the RENDERER, and a
|
|
8
|
+
// reading is a one-way read of pure declaration data that must never pull a
|
|
9
|
+
// canvas in.
|
|
10
|
+
import { backgroundPlot, } from '../framework-background/def.js';
|
|
11
|
+
import { backgroundTransitionBands } from '../framework-background/facts.js';
|
|
12
|
+
/** Deepest role chain reported by {@link ReadingNodeType.specialises}. */
|
|
13
|
+
const MAX_ROLE_DEPTH = 32;
|
|
14
|
+
/** Numeric slack on the two geometry comparisons. Model units. */
|
|
15
|
+
const GEOMETRY_EPSILON = 1e-6;
|
|
16
|
+
/** Complain once per malformed declaration: a reading can be asked for often. */
|
|
17
|
+
const warned = new Set();
|
|
18
|
+
function warnOnce(reason) {
|
|
19
|
+
if (warned.has(reason))
|
|
20
|
+
return;
|
|
21
|
+
warned.add(reason);
|
|
22
|
+
console.warn(`[reading] ${reason}`);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Compiled convention patterns, keyed by source. A profile is a module-level
|
|
26
|
+
* constant, so this cache holds one entry per declared convention for the life
|
|
27
|
+
* of the process — and a broken pattern is compiled (and complained about)
|
|
28
|
+
* once rather than on every render of the panel.
|
|
29
|
+
*/
|
|
30
|
+
const patterns = new Map();
|
|
31
|
+
function compile(pattern) {
|
|
32
|
+
const cached = patterns.get(pattern);
|
|
33
|
+
if (cached !== undefined)
|
|
34
|
+
return cached;
|
|
35
|
+
let compiled = null;
|
|
36
|
+
try {
|
|
37
|
+
// `s` so `.` crosses the newline of a wrapped canvas label: without it an
|
|
38
|
+
// anchored pattern (`^…$`) fails on every two-line name whatever it says,
|
|
39
|
+
// which reads to the user as "the convention dislikes long names".
|
|
40
|
+
compiled = new RegExp(pattern, 'ius');
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
warnOnce(`naming convention /${pattern}/ does not compile (${String(error)}) — ` +
|
|
44
|
+
`the naming line is dropped rather than reported as a mismatch.`);
|
|
45
|
+
}
|
|
46
|
+
patterns.set(pattern, compiled);
|
|
47
|
+
return compiled;
|
|
48
|
+
}
|
|
49
|
+
/** The text an element carries itself, `''` when it carries none. */
|
|
50
|
+
function ownText(element) {
|
|
51
|
+
const text = element.text;
|
|
52
|
+
if (typeof text === 'string')
|
|
53
|
+
return text.trim();
|
|
54
|
+
if (text && typeof text.toString === 'function') {
|
|
55
|
+
return String(text).trim();
|
|
56
|
+
}
|
|
57
|
+
return '';
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The members of the group holding this element, or `null` when it is not
|
|
61
|
+
* grouped — or when asking cannot be done safely.
|
|
62
|
+
*
|
|
63
|
+
* `group` is a getter that walks the element's SURFACE, so on an element that
|
|
64
|
+
* is not attached to one it throws. A reading must never throw: a panel that
|
|
65
|
+
* crashes on an odd element is worse than one that has nothing to say about its
|
|
66
|
+
* name, and the caller's fallback (no name, therefore no naming line) is the
|
|
67
|
+
* same silence every other unreadable field produces.
|
|
68
|
+
*/
|
|
69
|
+
function groupMembers(element) {
|
|
70
|
+
let group;
|
|
71
|
+
try {
|
|
72
|
+
group = element.group;
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
const children = group?.childElements;
|
|
78
|
+
return Array.isArray(children)
|
|
79
|
+
? children
|
|
80
|
+
: null;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* The subject's NAME.
|
|
84
|
+
*
|
|
85
|
+
* Its own text first, then — because a framework artefact on this canvas is a
|
|
86
|
+
* composite — the text of the sibling carrying the profile's label role. That
|
|
87
|
+
* is the same fact `tags-toolbar.ts` works around from the other direction: one
|
|
88
|
+
* click selects the group, the role lives on the circle, and the name lives on
|
|
89
|
+
* a free text beside it.
|
|
90
|
+
*/
|
|
91
|
+
function readName(element, profile) {
|
|
92
|
+
const own = ownText(element);
|
|
93
|
+
if (own)
|
|
94
|
+
return own;
|
|
95
|
+
const labelRole = profile.labelRole;
|
|
96
|
+
if (!labelRole)
|
|
97
|
+
return '';
|
|
98
|
+
const children = groupMembers(element);
|
|
99
|
+
if (children === null)
|
|
100
|
+
return '';
|
|
101
|
+
for (const child of children) {
|
|
102
|
+
if (!(child instanceof GfxPrimitiveElementModel))
|
|
103
|
+
continue;
|
|
104
|
+
if (child.id === element.id)
|
|
105
|
+
continue;
|
|
106
|
+
if (!roleIsA(child.role, labelRole, profile.roles))
|
|
107
|
+
continue;
|
|
108
|
+
const text = ownText(child);
|
|
109
|
+
if (text)
|
|
110
|
+
return text;
|
|
111
|
+
}
|
|
112
|
+
return '';
|
|
113
|
+
}
|
|
114
|
+
/** The role chain above `roleId`, nearest first, bounded like `roleIsA` is. */
|
|
115
|
+
function specialisationChain(roleId, roles) {
|
|
116
|
+
const chain = [];
|
|
117
|
+
let current = roles[roleId]?.parent;
|
|
118
|
+
for (let hops = 0; current !== undefined && hops < MAX_ROLE_DEPTH; hops++) {
|
|
119
|
+
chain.push(current);
|
|
120
|
+
current = roles[current]?.parent;
|
|
121
|
+
}
|
|
122
|
+
return chain;
|
|
123
|
+
}
|
|
124
|
+
/** Centre of a bound. Reading a position is reading where the thing IS. */
|
|
125
|
+
const centreOf = (bound) => [
|
|
126
|
+
bound.x + bound.w / 2,
|
|
127
|
+
bound.y + bound.h / 2,
|
|
128
|
+
];
|
|
129
|
+
/**
|
|
130
|
+
* The frame the subject sits ON — containment of its CENTRE, and nothing else.
|
|
131
|
+
*
|
|
132
|
+
* Deliberately not the "nearest map" attribution the validation engine uses: a
|
|
133
|
+
* finding has to be filed against some map even when the subject is off in the
|
|
134
|
+
* margin, whereas a phase read off a map the component is not on would be an
|
|
135
|
+
* invented fact. A component beside the map has no phase, and the panel says
|
|
136
|
+
* nothing rather than something plausible.
|
|
137
|
+
*
|
|
138
|
+
* The centre, not the whole bound: a node overhanging the edge of the map is
|
|
139
|
+
* still on it to every reader.
|
|
140
|
+
*
|
|
141
|
+
* ## Two frames under one component
|
|
142
|
+
*
|
|
143
|
+
* The first match in DOCUMENT order wins — not the smallest, not the topmost.
|
|
144
|
+
* Deterministic, and deliberately not clever: z-order is a paint concern and
|
|
145
|
+
* "the smallest frame containing it" is a rule nobody declared. Two overlapping
|
|
146
|
+
* maps of different sizes are a board that has not decided what it is, and a
|
|
147
|
+
* reading that quietly picked one of them by area would be harder to argue with
|
|
148
|
+
* than one that picked the first. The day a framework needs nesting, this is the
|
|
149
|
+
* one function to change.
|
|
150
|
+
*/
|
|
151
|
+
function frameOf(element, elements, profile) {
|
|
152
|
+
const frame = profile.frame;
|
|
153
|
+
if (!frame)
|
|
154
|
+
return null;
|
|
155
|
+
const [cx, cy] = centreOf(element.elementBound);
|
|
156
|
+
for (const candidate of elements) {
|
|
157
|
+
if (candidate.id === element.id)
|
|
158
|
+
continue;
|
|
159
|
+
if (candidate.role === undefined)
|
|
160
|
+
continue;
|
|
161
|
+
if (!roleIsA(candidate.role, frame.backgroundRole, profile.roles))
|
|
162
|
+
continue;
|
|
163
|
+
const bound = candidate.elementBound;
|
|
164
|
+
if (cx >= bound.x &&
|
|
165
|
+
cx <= bound.x + bound.w &&
|
|
166
|
+
cy >= bound.y &&
|
|
167
|
+
cy <= bound.y + bound.h) {
|
|
168
|
+
return candidate;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* The phase, read from the position and the frame's DECLARED zones.
|
|
175
|
+
*
|
|
176
|
+
* Two facts, both taken from the declaration and never from a number in this
|
|
177
|
+
* file: which zone the subject's centre falls in, and whether it is inside the
|
|
178
|
+
* band around a transition. The second is the "zone of punctuated equilibrium"
|
|
179
|
+
* — the frontier is a region, not a coordinate — and a component sitting in one
|
|
180
|
+
* is a different statement from a component sitting in a phase.
|
|
181
|
+
*/
|
|
182
|
+
function readPhase(element, elements, profile) {
|
|
183
|
+
const frame = profile.frame;
|
|
184
|
+
if (!frame)
|
|
185
|
+
return undefined;
|
|
186
|
+
const background = frameOf(element, elements, profile);
|
|
187
|
+
if (!background)
|
|
188
|
+
return undefined;
|
|
189
|
+
const def = frame.background;
|
|
190
|
+
const bound = background.elementBound;
|
|
191
|
+
const plot = backgroundPlot(def, bound.w, bound.h);
|
|
192
|
+
const [cx, cy] = centreOf(element.elementBound);
|
|
193
|
+
const along = frame.axis === 'x' ? cx : cy;
|
|
194
|
+
const origin = frame.axis === 'x' ? bound.x + plot.x0 : bound.y + plot.y0;
|
|
195
|
+
const span = frame.axis === 'x' ? plot.width : plot.height;
|
|
196
|
+
if (!(span > 0))
|
|
197
|
+
return undefined;
|
|
198
|
+
const ratio = (along - origin) / span;
|
|
199
|
+
// Inside the card but outside the PLOT — on the margin the axes are drawn in.
|
|
200
|
+
// No zone covers it, and inventing the nearest one would put a component in a
|
|
201
|
+
// phase it is visibly not in.
|
|
202
|
+
if (ratio < 0 || ratio > 1)
|
|
203
|
+
return undefined;
|
|
204
|
+
const zone = (def.zones ?? []).find(({ rect }) => {
|
|
205
|
+
const start = frame.axis === 'x' ? rect.x : rect.y;
|
|
206
|
+
const size = frame.axis === 'x' ? rect.w : rect.h;
|
|
207
|
+
// Half-open, so a component exactly on a divider reads as the phase it is
|
|
208
|
+
// entering — the same side the band below reports as the frontier.
|
|
209
|
+
return ratio >= start && (ratio < start + size || start + size >= 1);
|
|
210
|
+
});
|
|
211
|
+
if (!zone)
|
|
212
|
+
return undefined;
|
|
213
|
+
const bands = backgroundTransitionBands(def, bound)[frame.axis];
|
|
214
|
+
const band = bands.find(({ min, max }) => along >= min && along <= max);
|
|
215
|
+
return {
|
|
216
|
+
zoneId: zone.id,
|
|
217
|
+
...(zone.label?.labelKey !== undefined
|
|
218
|
+
? { labelKey: zone.label.labelKey }
|
|
219
|
+
: {}),
|
|
220
|
+
...(zone.label?.fallback !== undefined
|
|
221
|
+
? { labelFallback: zone.label.fallback }
|
|
222
|
+
: {}),
|
|
223
|
+
inTransitionBand: band !== undefined,
|
|
224
|
+
...(band !== undefined ? { bandId: band.id } : {}),
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
/** The two ends of a connector, when both are bound to an element. */
|
|
228
|
+
function endpointsOf(element) {
|
|
229
|
+
const source = element.source;
|
|
230
|
+
const target = element.target;
|
|
231
|
+
if (typeof source?.id !== 'string' || typeof target?.id !== 'string') {
|
|
232
|
+
return null;
|
|
233
|
+
}
|
|
234
|
+
if (!source.id || !target.id)
|
|
235
|
+
return null;
|
|
236
|
+
return { source: source.id, target: target.id };
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Every typed edge touching the subject, read as a relation.
|
|
240
|
+
*
|
|
241
|
+
* An edge with an unbound end is skipped, exactly as ADR 0010 requires of W4:
|
|
242
|
+
* releasing the link tool over empty canvas produces one, and a stroke that
|
|
243
|
+
* links nothing states nothing.
|
|
244
|
+
*/
|
|
245
|
+
function readRelations(element, elements, profile) {
|
|
246
|
+
const relation = profile.relation;
|
|
247
|
+
if (!relation)
|
|
248
|
+
return [];
|
|
249
|
+
const byId = new Map(elements.map(el => [el.id, el]));
|
|
250
|
+
const [, subjectY] = centreOf(element.elementBound);
|
|
251
|
+
const relations = [];
|
|
252
|
+
for (const edge of elements) {
|
|
253
|
+
if (edge.role === undefined)
|
|
254
|
+
continue;
|
|
255
|
+
if (!roleIsA(edge.role, relation.edgeRole, profile.roles))
|
|
256
|
+
continue;
|
|
257
|
+
const ends = endpointsOf(edge);
|
|
258
|
+
if (!ends)
|
|
259
|
+
continue;
|
|
260
|
+
const isSource = ends.source === element.id;
|
|
261
|
+
const isTarget = ends.target === element.id;
|
|
262
|
+
// A self-loop states nothing about an order and would report the subject as
|
|
263
|
+
// its own supplier.
|
|
264
|
+
if (isSource === isTarget)
|
|
265
|
+
continue;
|
|
266
|
+
const otherId = isSource ? ends.target : ends.source;
|
|
267
|
+
const other = byId.get(otherId);
|
|
268
|
+
if (!other)
|
|
269
|
+
continue;
|
|
270
|
+
const side = isSource ? 'supplier' : 'consumer';
|
|
271
|
+
const [, otherY] = centreOf(other.elementBound);
|
|
272
|
+
// `y` grows downwards, so "higher on the map" is a SMALLER y. A supplier is
|
|
273
|
+
// expected below the subject, a consumer above it.
|
|
274
|
+
const contradictsGeometry = side === 'supplier'
|
|
275
|
+
? otherY < subjectY - GEOMETRY_EPSILON
|
|
276
|
+
: otherY > subjectY + GEOMETRY_EPSILON;
|
|
277
|
+
relations.push({
|
|
278
|
+
edgeId: edge.id,
|
|
279
|
+
otherId,
|
|
280
|
+
otherName: readName(other, profile),
|
|
281
|
+
side,
|
|
282
|
+
contradictsGeometry,
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
return relations;
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* The naming line, when there is a single nature, a convention for it, and that
|
|
289
|
+
* convention is IN SCOPE for the language the host is serving.
|
|
290
|
+
*
|
|
291
|
+
* The scope check is the difference between a suggestion and a nuisance: a
|
|
292
|
+
* motif is a motif of one language, and the first one whose `lang` matches
|
|
293
|
+
* wins. A convention that declares no language is agnostic and always applies.
|
|
294
|
+
*/
|
|
295
|
+
function readNaming(element, profile, valueIds, lang) {
|
|
296
|
+
const nature = profile.nature;
|
|
297
|
+
if (!nature || valueIds.length !== 1)
|
|
298
|
+
return undefined;
|
|
299
|
+
const convention = nature.conventions.find(c => c.valueId === valueIds[0] && (c.lang === undefined || c.lang === lang));
|
|
300
|
+
if (!convention)
|
|
301
|
+
return undefined;
|
|
302
|
+
const name = readName(element, profile);
|
|
303
|
+
// Nothing to judge. An unnamed component is an unfinished drawing, not a
|
|
304
|
+
// naming mistake, and the panel has a better thing to say about it: nothing.
|
|
305
|
+
if (!name)
|
|
306
|
+
return undefined;
|
|
307
|
+
const pattern = compile(convention.pattern);
|
|
308
|
+
if (!pattern)
|
|
309
|
+
return undefined;
|
|
310
|
+
return {
|
|
311
|
+
name,
|
|
312
|
+
conforms: pattern.test(name),
|
|
313
|
+
hintKey: convention.hintKey,
|
|
314
|
+
hintFallback: convention.hintFallback,
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Read one element. Pure: same elements, same profile, same options, same
|
|
319
|
+
* answer, and no write anywhere on any path through this function.
|
|
320
|
+
*
|
|
321
|
+
* `null` when the element does not carry the profile's subject role — the
|
|
322
|
+
* caller has nothing to show, which is what keeps the panel off every neutral
|
|
323
|
+
* rectangle on the board.
|
|
324
|
+
*/
|
|
325
|
+
export function readElement(element, elements, profile, options = {}) {
|
|
326
|
+
const roleId = element.role;
|
|
327
|
+
if (roleId === undefined)
|
|
328
|
+
return null;
|
|
329
|
+
if (!roleIsA(roleId, profile.appliesTo, profile.roles))
|
|
330
|
+
return null;
|
|
331
|
+
const tagId = profile.nature?.tagId;
|
|
332
|
+
const carried = tagId ? (readElementTags(element)[tagId] ?? []) : [];
|
|
333
|
+
const labelKey = profile.roles[roleId]?.labelKey;
|
|
334
|
+
return {
|
|
335
|
+
elementId: element.id,
|
|
336
|
+
name: readName(element, profile),
|
|
337
|
+
nodeType: {
|
|
338
|
+
roleId,
|
|
339
|
+
...(labelKey !== undefined ? { labelKey } : {}),
|
|
340
|
+
specialises: specialisationChain(roleId, profile.roles),
|
|
341
|
+
},
|
|
342
|
+
nature: tagId !== undefined && carried.length > 0
|
|
343
|
+
? { tagId, valueIds: carried }
|
|
344
|
+
: undefined,
|
|
345
|
+
relations: readRelations(element, elements, profile),
|
|
346
|
+
phase: readPhase(element, elements, profile),
|
|
347
|
+
naming: readNaming(element, profile, carried, options.lang),
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* **The value flow** — the same typed edges as {@link ElementReading.relations},
|
|
352
|
+
* said the way a value chain is read: from the bottom up.
|
|
353
|
+
*
|
|
354
|
+
* A Wardley map is an anchor at the top and everything the anchor needs
|
|
355
|
+
* underneath it, so the VALUE travels the other way round from the dependency
|
|
356
|
+
* arrow: a supplier hands its value up to the consumer that needs it. ADR 0010
|
|
357
|
+
* § 2 fixes which end is which — on a `wardley:dependency` the `source` is the
|
|
358
|
+
* consumer and the `target` is the supplier — so the flow is entirely a
|
|
359
|
+
* restatement of what {@link readRelations} already resolved:
|
|
360
|
+
*
|
|
361
|
+
* - the other end is a SUPPLIER (an edge leaving the subject) → value comes up
|
|
362
|
+
* from it to the subject;
|
|
363
|
+
* - the other end is a CONSUMER (an edge arriving at the subject) → value goes
|
|
364
|
+
* up from the subject to it.
|
|
365
|
+
*
|
|
366
|
+
* Derived, not stored: no second traversal of the board, no second convention
|
|
367
|
+
* to keep in step with ADR 0010, and an element with no typed edge yields an
|
|
368
|
+
* empty list — which the panel renders as no section at all.
|
|
369
|
+
*/
|
|
370
|
+
export function readValueFlows(reading) {
|
|
371
|
+
const subject = reading.name || reading.elementId;
|
|
372
|
+
return reading.relations.map(relation => {
|
|
373
|
+
const other = relation.otherName || relation.otherId;
|
|
374
|
+
return relation.side === 'supplier'
|
|
375
|
+
? { edgeId: relation.edgeId, from: other, to: subject }
|
|
376
|
+
: { edgeId: relation.edgeId, from: subject, to: other };
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
/** The profile governing an element, or `null` — the first match wins. */
|
|
380
|
+
export function readingProfileFor(element, profiles) {
|
|
381
|
+
const roleId = element.role;
|
|
382
|
+
if (roleId === undefined)
|
|
383
|
+
return null;
|
|
384
|
+
return (profiles.find(profile => roleIsA(roleId, profile.appliesTo, profile.roles)) ?? null);
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Resolve the record's words against the tag def's own values.
|
|
388
|
+
*
|
|
389
|
+
* Three ways a word is accepted, in order: the value id itself, the id
|
|
390
|
+
* case-insensitively, then the value's LABEL case-insensitively — because a
|
|
391
|
+
* host storing the words a human picked from a multi-select is the ordinary
|
|
392
|
+
* case, not the exotic one. Anything else is `unknown`: this is a resolver, not
|
|
393
|
+
* a guesser, and there is no fuzzy match anywhere in it.
|
|
394
|
+
*
|
|
395
|
+
* Two deliberate edge cases:
|
|
396
|
+
*
|
|
397
|
+
* - **no def** (the framework's pack is not seeded in this deployment) — every
|
|
398
|
+
* word is unknown. We cannot know the vocabulary, so proposing to write one of
|
|
399
|
+
* its words would be inventing it;
|
|
400
|
+
* - **`values: 'open'`** — the def says any string is a value of this tag, so
|
|
401
|
+
* everything resolves. That is the def's own claim, not ours.
|
|
402
|
+
*/
|
|
403
|
+
export function resolveRecordNature(def, values) {
|
|
404
|
+
const resolved = [];
|
|
405
|
+
const unknown = [];
|
|
406
|
+
const seen = new Set();
|
|
407
|
+
if (!def)
|
|
408
|
+
return { resolved, unknown: [...values] };
|
|
409
|
+
if (def.values === 'open')
|
|
410
|
+
return { resolved: [...values], unknown };
|
|
411
|
+
const byId = new Map();
|
|
412
|
+
const byLabel = new Map();
|
|
413
|
+
for (const value of def.values) {
|
|
414
|
+
byId.set(value.id.toLowerCase(), value.id);
|
|
415
|
+
const label = (value.label || '').toLowerCase();
|
|
416
|
+
// First declaration wins: a label repeated across two values is an
|
|
417
|
+
// authoring bug in the pack, and picking the later one silently would make
|
|
418
|
+
// the resolution depend on declaration order.
|
|
419
|
+
if (label && !byLabel.has(label))
|
|
420
|
+
byLabel.set(label, value.id);
|
|
421
|
+
}
|
|
422
|
+
for (const raw of values) {
|
|
423
|
+
const key = raw.toLowerCase();
|
|
424
|
+
const id = byId.get(key) ?? byLabel.get(key);
|
|
425
|
+
if (id === undefined) {
|
|
426
|
+
if (!unknown.includes(raw))
|
|
427
|
+
unknown.push(raw);
|
|
428
|
+
continue;
|
|
429
|
+
}
|
|
430
|
+
if (seen.has(id))
|
|
431
|
+
continue;
|
|
432
|
+
seen.add(id);
|
|
433
|
+
resolved.push(id);
|
|
434
|
+
}
|
|
435
|
+
return { resolved, unknown };
|
|
436
|
+
}
|
|
437
|
+
/** A record property flattened to the strings a comparison can work on. */
|
|
438
|
+
function propertyStrings(snapshot, key) {
|
|
439
|
+
const property = snapshot.properties.find(p => p.key === key);
|
|
440
|
+
if (!property)
|
|
441
|
+
return [];
|
|
442
|
+
const { value } = property;
|
|
443
|
+
switch (value.kind) {
|
|
444
|
+
case 'text':
|
|
445
|
+
return value.value ? [value.value] : [];
|
|
446
|
+
case 'tags':
|
|
447
|
+
return value.value.filter(entry => entry.length > 0);
|
|
448
|
+
default:
|
|
449
|
+
// Every other kind is a value this comparison has no business
|
|
450
|
+
// interpreting. Unknown means silent, never "different".
|
|
451
|
+
return [];
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
/**
|
|
455
|
+
* The record's side of the comparison, read through the guarded seam.
|
|
456
|
+
*
|
|
457
|
+
* `undefined` on every degraded path — no binding, no provider, no configured
|
|
458
|
+
* fields, a dangling record, a still-loading one — and the caller shows the
|
|
459
|
+
* local reading alone. That is the `queryPivotProperties` contract: "this
|
|
460
|
+
* editor has no host data layer" is not an error to put in front of a user.
|
|
461
|
+
*/
|
|
462
|
+
export function readRecord(std, element, profile) {
|
|
463
|
+
if (!isPivotBound(element))
|
|
464
|
+
return undefined;
|
|
465
|
+
const keys = profile.recordKeys;
|
|
466
|
+
if (!keys?.nature && !keys?.phase)
|
|
467
|
+
return undefined;
|
|
468
|
+
const state = queryPivotProperties(std, element.pivotDocId);
|
|
469
|
+
if (!state)
|
|
470
|
+
return undefined;
|
|
471
|
+
const current = state.value;
|
|
472
|
+
if (current.status !== 'ready')
|
|
473
|
+
return undefined;
|
|
474
|
+
const raw = keys.nature ? propertyStrings(current.snapshot, keys.nature) : [];
|
|
475
|
+
const phase = keys.phase ? propertyStrings(current.snapshot, keys.phase) : [];
|
|
476
|
+
// The record speaks the HOST's alphabet; the element speaks the framework's.
|
|
477
|
+
// Translating happens here, once, so that every consumer downstream — the
|
|
478
|
+
// proposal, the confirmation and the drift comparison — works on value ids a
|
|
479
|
+
// def describes and on nothing else.
|
|
480
|
+
const tagId = profile.nature?.tagId;
|
|
481
|
+
const { resolved, unknown } = tagId !== undefined && raw.length
|
|
482
|
+
? resolveRecordNature(getUniverseRegistry(std).tag(tagId), raw)
|
|
483
|
+
: { resolved: [], unknown: [] };
|
|
484
|
+
return {
|
|
485
|
+
pivotDocId: element.pivotDocId,
|
|
486
|
+
...(resolved.length ? { nature: resolved } : {}),
|
|
487
|
+
...(unknown.length ? { unknownNature: unknown } : {}),
|
|
488
|
+
...(phase.length ? { phase: phase[0] } : {}),
|
|
489
|
+
};
|
|
490
|
+
}
|
|
491
|
+
/**
|
|
492
|
+
* Where the drawing and the record disagree.
|
|
493
|
+
*
|
|
494
|
+
* A field the record does not carry is never a disagreement: the record simply
|
|
495
|
+
* has not been filled in, and calling that "drift" would turn an empty property
|
|
496
|
+
* into a permanent complaint. A field the BOARD cannot read is not one either —
|
|
497
|
+
* a component dragged off the map has no phase to be in conflict with.
|
|
498
|
+
*
|
|
499
|
+
* Neither is a word the framework does not describe ({@link RecordReading.unknownNature}):
|
|
500
|
+
* comparing `wardley:nature/activity` against the host's `"Activity"` would
|
|
501
|
+
* report a permanent, false disagreement on an element that is correctly
|
|
502
|
+
* qualified — and would offer the user two ways out, both of which corrupt one
|
|
503
|
+
* side. `readRecord` has already resolved what CAN be compared; what could not
|
|
504
|
+
* is not a difference of opinion, it is a difference of alphabet.
|
|
505
|
+
*
|
|
506
|
+
* The phase comparison accepts either the zone id or the zone's own wording,
|
|
507
|
+
* because a host is free to store "Product" where the declaration says
|
|
508
|
+
* `product`, and neither spelling is more correct than the other.
|
|
509
|
+
*/
|
|
510
|
+
export function compareReading(reading, record) {
|
|
511
|
+
const fields = [];
|
|
512
|
+
const recorded = record.nature ?? [];
|
|
513
|
+
if (recorded.length) {
|
|
514
|
+
const read = reading.nature?.valueIds ?? [];
|
|
515
|
+
const same = read.length === recorded.length &&
|
|
516
|
+
read.every(value => recorded.includes(value));
|
|
517
|
+
if (!same) {
|
|
518
|
+
fields.push({
|
|
519
|
+
field: 'nature',
|
|
520
|
+
read: read.join(', '),
|
|
521
|
+
record: recorded.join(', '),
|
|
522
|
+
});
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
if (record.phase && reading.phase) {
|
|
526
|
+
const spellings = [
|
|
527
|
+
reading.phase.zoneId,
|
|
528
|
+
reading.phase.labelFallback ?? '',
|
|
529
|
+
].map(value => value.toLowerCase());
|
|
530
|
+
if (!spellings.includes(record.phase.toLowerCase())) {
|
|
531
|
+
fields.push({
|
|
532
|
+
field: 'phase',
|
|
533
|
+
read: reading.phase.labelFallback ?? reading.phase.zoneId,
|
|
534
|
+
record: record.phase,
|
|
535
|
+
});
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
return fields;
|
|
539
|
+
}
|
|
540
|
+
/** A framework registers its reading profile here; nothing else registers one. */
|
|
541
|
+
export const ReadingProfileIdentifier = createIdentifier('ReadingProfile');
|
|
542
|
+
/**
|
|
543
|
+
* Register a framework's reading profile. Call it from the FLAG-GATED view
|
|
544
|
+
* extension, beside the rules and the profiles: reading a map is tooling, and a
|
|
545
|
+
* board whose framework is switched off keeps every one of its elements and
|
|
546
|
+
* simply stops being read (ADR 0009).
|
|
547
|
+
*
|
|
548
|
+
* ```ts
|
|
549
|
+
* context.register(ReadingProfileExtension(WARDLEY_READING));
|
|
550
|
+
* ```
|
|
551
|
+
*/
|
|
552
|
+
export function ReadingProfileExtension(profile) {
|
|
553
|
+
return {
|
|
554
|
+
setup: di => {
|
|
555
|
+
di.addImpl(ReadingProfileIdentifier(profile.id), () => profile);
|
|
556
|
+
},
|
|
557
|
+
};
|
|
558
|
+
}
|
|
559
|
+
export const PivotRecordPickerProvider = createIdentifier('LabrePivotRecordPicker');
|
|
560
|
+
export function PivotRecordPickerExtension(picker) {
|
|
561
|
+
return {
|
|
562
|
+
setup: di => {
|
|
563
|
+
di.override(PivotRecordPickerProvider, () => picker);
|
|
564
|
+
},
|
|
565
|
+
};
|
|
566
|
+
}
|
|
567
|
+
/**
|
|
568
|
+
* Debounce of the drift trigger, in ms.
|
|
569
|
+
*
|
|
570
|
+
* Comfortably above a frame: the trigger is the one part of this feature that
|
|
571
|
+
* runs without being asked, so it stays off the critical path by construction —
|
|
572
|
+
* a drag of a bound component emits dozens of updates and must cost one check,
|
|
573
|
+
* after the hand has stopped. Longer than the validation engine's 120 ms
|
|
574
|
+
* because nothing here is a verdict: a record that is out of date can wait a
|
|
575
|
+
* fifth of a second longer than a rule can.
|
|
576
|
+
*/
|
|
577
|
+
export const READING_DRIFT_DELAY_MS = 200;
|
|
578
|
+
/** Props whose change can move a reading away from a confirmed record. */
|
|
579
|
+
const DRIFT_PROPS = new Set(['xywh', 'rotate', 'tags', 'role', 'pivotDocId']);
|
|
580
|
+
const touchesReading = (payload) => {
|
|
581
|
+
const { props, oldValues } = payload;
|
|
582
|
+
if (!props && !oldValues)
|
|
583
|
+
return true;
|
|
584
|
+
return (Object.keys(props ?? {}).some(key => DRIFT_PROPS.has(key)) ||
|
|
585
|
+
Object.keys(oldValues ?? {}).some(key => DRIFT_PROPS.has(key)));
|
|
586
|
+
};
|
|
587
|
+
/**
|
|
588
|
+
* Owns the OPEN panel and the drift signal. It owns no reading: a reading is
|
|
589
|
+
* recomputed on demand from the document, so it can never be stale and can
|
|
590
|
+
* never be a second source of truth.
|
|
591
|
+
*
|
|
592
|
+
* Inert until a framework registers a {@link ReadingProfile} — a board with no
|
|
593
|
+
* framework enabled pays one empty-map check at mount and subscribes to
|
|
594
|
+
* nothing.
|
|
595
|
+
*/
|
|
596
|
+
export class ReadingManager extends LifeCycleWatcher {
|
|
597
|
+
constructor() {
|
|
598
|
+
super(...arguments);
|
|
599
|
+
/**
|
|
600
|
+
* The element whose proposal is open, or `null`. Session state, set by the
|
|
601
|
+
* `element.read` command and by nothing else: the panel NEVER opens itself,
|
|
602
|
+
* which is the whole of the PO's arbitration.
|
|
603
|
+
*/
|
|
604
|
+
this.open$ = signal(null);
|
|
605
|
+
/**
|
|
606
|
+
* The last drift observed, or `null`. Informative and non-blocking: nothing
|
|
607
|
+
* anywhere refuses a gesture because of it.
|
|
608
|
+
*/
|
|
609
|
+
this.drift$ = signal(null);
|
|
610
|
+
this._profiles = null;
|
|
611
|
+
this._subscriptions = [];
|
|
612
|
+
this._disposeSurfaceEffect = null;
|
|
613
|
+
this._pending = null;
|
|
614
|
+
this._dirty = new Set();
|
|
615
|
+
}
|
|
616
|
+
static { this.key = 'reading-manager'; }
|
|
617
|
+
/** Registered profiles, resolved once. Empty when every flag is off. */
|
|
618
|
+
get profiles() {
|
|
619
|
+
this._profiles ??= Array.from(this.std.provider.getAll(ReadingProfileIdentifier).values());
|
|
620
|
+
return this._profiles;
|
|
621
|
+
}
|
|
622
|
+
mounted() {
|
|
623
|
+
if (this.profiles.length === 0)
|
|
624
|
+
return;
|
|
625
|
+
// The surface is a SIGNAL, not a fact: it can be null at mount and arrive
|
|
626
|
+
// later, and it is replaced if the surface block is.
|
|
627
|
+
this._disposeSurfaceEffect = effect(() => {
|
|
628
|
+
this._resubscribe(this.std.get(GfxControllerIdentifier).surface$.value);
|
|
629
|
+
});
|
|
630
|
+
}
|
|
631
|
+
unmounted() {
|
|
632
|
+
this._disposeSurfaceEffect?.();
|
|
633
|
+
this._disposeSurfaceEffect = null;
|
|
634
|
+
this._unsubscribe();
|
|
635
|
+
this.open$.value = null;
|
|
636
|
+
this.drift$.value = null;
|
|
637
|
+
super.unmounted();
|
|
638
|
+
}
|
|
639
|
+
/** Open the proposal for one element. Reads nothing yet, writes nothing ever. */
|
|
640
|
+
open(elementId) {
|
|
641
|
+
this.open$.value = elementId;
|
|
642
|
+
}
|
|
643
|
+
close() {
|
|
644
|
+
this.open$.value = null;
|
|
645
|
+
}
|
|
646
|
+
/** The current surface, or `null` before one arrives. */
|
|
647
|
+
get _surface() {
|
|
648
|
+
return this.std.get(GfxControllerIdentifier).surface$.value;
|
|
649
|
+
}
|
|
650
|
+
/**
|
|
651
|
+
* The reading of one element, recomputed from the document every time it is
|
|
652
|
+
* asked for. Cheap enough to be called from a render: one pass over the
|
|
653
|
+
* surface for the relations, one containment test per frame.
|
|
654
|
+
*/
|
|
655
|
+
reading(elementId) {
|
|
656
|
+
const surface = this._surface;
|
|
657
|
+
const element = surface?.getElementById(elementId);
|
|
658
|
+
if (!surface || !element)
|
|
659
|
+
return null;
|
|
660
|
+
const profile = readingProfileFor(element, this.profiles);
|
|
661
|
+
if (!profile)
|
|
662
|
+
return null;
|
|
663
|
+
return readElement(element, surface.elementModels, profile, {
|
|
664
|
+
lang: hostLanguage(this.std),
|
|
665
|
+
});
|
|
666
|
+
}
|
|
667
|
+
/** The profile governing an element, for the panel's confirmation actions. */
|
|
668
|
+
profileOf(elementId) {
|
|
669
|
+
const element = this._surface?.getElementById(elementId);
|
|
670
|
+
return element ? readingProfileFor(element, this.profiles) : null;
|
|
671
|
+
}
|
|
672
|
+
_unsubscribe() {
|
|
673
|
+
for (const subscription of this._subscriptions)
|
|
674
|
+
subscription.unsubscribe();
|
|
675
|
+
this._subscriptions = [];
|
|
676
|
+
if (this._pending) {
|
|
677
|
+
clearTimeout(this._pending);
|
|
678
|
+
this._pending = null;
|
|
679
|
+
}
|
|
680
|
+
this._dirty.clear();
|
|
681
|
+
}
|
|
682
|
+
_resubscribe(surface) {
|
|
683
|
+
this._unsubscribe();
|
|
684
|
+
// A new surface is a new document: a drift observed on the last one says
|
|
685
|
+
// nothing about this one.
|
|
686
|
+
this.drift$.value = null;
|
|
687
|
+
this.open$.value = null;
|
|
688
|
+
if (!surface)
|
|
689
|
+
return;
|
|
690
|
+
this._subscriptions.push(surface.elementUpdated.subscribe(payload => {
|
|
691
|
+
// Local only, for the reason the materiality publisher documents:
|
|
692
|
+
// `local` partitions the fleet into one watcher and N−1 silent
|
|
693
|
+
// observers, with no leader election — and a colleague's drag is their
|
|
694
|
+
// drift to notice, not ours.
|
|
695
|
+
if (!payload.local)
|
|
696
|
+
return;
|
|
697
|
+
if (!touchesReading(payload))
|
|
698
|
+
return;
|
|
699
|
+
this._schedule(payload.id);
|
|
700
|
+
}));
|
|
701
|
+
this._subscriptions.push(surface.elementRemoved.subscribe(({ id }) => {
|
|
702
|
+
this._dirty.delete(id);
|
|
703
|
+
if (this.drift$.value?.elementId === id)
|
|
704
|
+
this.drift$.value = null;
|
|
705
|
+
if (this.open$.value === id)
|
|
706
|
+
this.open$.value = null;
|
|
707
|
+
}));
|
|
708
|
+
}
|
|
709
|
+
/**
|
|
710
|
+
* Never in the same tick, and never in the same frame.
|
|
711
|
+
*
|
|
712
|
+
* The whole trigger is one timer: a drag emits an update per pointer move,
|
|
713
|
+
* and each one pushes the single pending check further away, so the work
|
|
714
|
+
* happens once, after the hand has stopped, and the 16 ms budget of the drag
|
|
715
|
+
* itself is untouched by construction rather than by measurement.
|
|
716
|
+
*/
|
|
717
|
+
_schedule(id) {
|
|
718
|
+
this._dirty.add(id);
|
|
719
|
+
if (this._pending)
|
|
720
|
+
clearTimeout(this._pending);
|
|
721
|
+
this._pending = setTimeout(() => {
|
|
722
|
+
this._pending = null;
|
|
723
|
+
const ids = [...this._dirty];
|
|
724
|
+
this._dirty.clear();
|
|
725
|
+
for (const dirty of ids)
|
|
726
|
+
this._check(dirty);
|
|
727
|
+
}, READING_DRIFT_DELAY_MS);
|
|
728
|
+
}
|
|
729
|
+
_check(elementId) {
|
|
730
|
+
const surface = this._surface;
|
|
731
|
+
const element = surface?.getElementById(elementId);
|
|
732
|
+
if (!surface || !element)
|
|
733
|
+
return;
|
|
734
|
+
// Only a LINKED element can drift: without a record there is nothing to
|
|
735
|
+
// disagree with, and the reading is just a reading.
|
|
736
|
+
if (!isPivotBound(element)) {
|
|
737
|
+
if (this.drift$.value?.elementId === elementId)
|
|
738
|
+
this.drift$.value = null;
|
|
739
|
+
return;
|
|
740
|
+
}
|
|
741
|
+
const profile = readingProfileFor(element, this.profiles);
|
|
742
|
+
if (!profile)
|
|
743
|
+
return;
|
|
744
|
+
const reading = readElement(element, surface.elementModels, profile, {
|
|
745
|
+
lang: hostLanguage(this.std),
|
|
746
|
+
});
|
|
747
|
+
if (!reading)
|
|
748
|
+
return;
|
|
749
|
+
const record = readRecord(this.std, element, profile);
|
|
750
|
+
if (!record) {
|
|
751
|
+
if (this.drift$.value?.elementId === elementId)
|
|
752
|
+
this.drift$.value = null;
|
|
753
|
+
return;
|
|
754
|
+
}
|
|
755
|
+
const fields = compareReading(reading, record);
|
|
756
|
+
if (fields.length === 0) {
|
|
757
|
+
if (this.drift$.value?.elementId === elementId)
|
|
758
|
+
this.drift$.value = null;
|
|
759
|
+
return;
|
|
760
|
+
}
|
|
761
|
+
this.drift$.value = {
|
|
762
|
+
elementId,
|
|
763
|
+
pivotDocId: record.pivotDocId,
|
|
764
|
+
fields,
|
|
765
|
+
};
|
|
766
|
+
}
|
|
767
|
+
}
|