@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,256 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-universe tag definitions — the format, the seeding mechanism and the
|
|
3
|
+
* merged read-only view over them (MF3 / ADR 0007 §§ 2 and 3).
|
|
4
|
+
*
|
|
5
|
+
* The **application seeds** the definitions per universe; the **library fixes
|
|
6
|
+
* their format**. That split is the whole point: a new business universe
|
|
7
|
+
* (cynefin, TOGAF, a client's private taxonomy) must be addable without
|
|
8
|
+
* shipping library code. The library ships exactly one pack of its own —
|
|
9
|
+
* Wardley's four natures — as a worked example, on the same mechanism a host
|
|
10
|
+
* would use.
|
|
11
|
+
*
|
|
12
|
+
* Three rules govern everything below, and they are not negotiable:
|
|
13
|
+
*
|
|
14
|
+
* - **Nothing throws, ever.** An invalid id, a cross-framework id, an
|
|
15
|
+
* unrecognised `formatVersion` — each drops the offending def and records an
|
|
16
|
+
* issue. A malformed seed must never prevent a document from opening. That is
|
|
17
|
+
* the hard boundary between "the app misconfigured a pack" and "the user lost
|
|
18
|
+
* their board".
|
|
19
|
+
* - **Defs are runtime configuration and are NEVER persisted.** The document
|
|
20
|
+
* stores ids only. A value whose def has vanished still loads and is shown as
|
|
21
|
+
* its raw id, marked unknown.
|
|
22
|
+
* - **Ids are forever.** A def is never removed, only `deprecated`.
|
|
23
|
+
*/
|
|
24
|
+
import { createIdentifier } from '../../global/di/index.js';
|
|
25
|
+
import { FRAMEWORK_IDS } from '../../std/index.js';
|
|
26
|
+
import { roleIsA } from '../../std/gfx/index.js';
|
|
27
|
+
/**
|
|
28
|
+
* Lower-kebab, case-sensitive, no unicode, no dots. Hyphenated framework ids
|
|
29
|
+
* are legal, so `cynefin-estuarine:domain` is well formed.
|
|
30
|
+
*/
|
|
31
|
+
const ID_PATTERN = /^[a-z0-9][a-z0-9-]*:[a-z0-9][a-z0-9-]*(\/[a-z0-9][a-z0-9-]*)?$/;
|
|
32
|
+
/**
|
|
33
|
+
* Variant-parameterized: **one registration per pack, keyed by `packId`** —
|
|
34
|
+
* the same mechanism as `SpotlightHostExtension(elementType)` and
|
|
35
|
+
* `ExternalGroupByConfigProvider(config.name)`.
|
|
36
|
+
*/
|
|
37
|
+
export const UniverseTagDefsProvider = createIdentifier('LabreUniverseTagDefs');
|
|
38
|
+
/**
|
|
39
|
+
* Seed one or more packs.
|
|
40
|
+
*
|
|
41
|
+
* `di.override`, **not** `di.addImpl`: `addImpl` throws
|
|
42
|
+
* `DuplicateServiceDefinitionError` when the same `[scope, identifier, variant]`
|
|
43
|
+
* is registered twice, while `override` works whether or not a prior
|
|
44
|
+
* registration exists. That is exactly the idempotency this needs — **distinct
|
|
45
|
+
* `packId`s accumulate, identical `packId`s replace** — so a host that
|
|
46
|
+
* re-registers on every render never throws and never grows the registry.
|
|
47
|
+
*
|
|
48
|
+
* Order stability is load-bearing and non-obvious: `getAll` returns a
|
|
49
|
+
* `Map<ServiceVariant, T>`, and `Map.set` on an EXISTING key keeps that key's
|
|
50
|
+
* original insertion position. Re-seeding a pack therefore updates it in place
|
|
51
|
+
* rather than moving it to the end, so a re-registration cannot silently flip
|
|
52
|
+
* which pack wins a cosmetic field.
|
|
53
|
+
*
|
|
54
|
+
* **All packs MUST be registered in the same DI scope.** `getAllRaw` falls back
|
|
55
|
+
* to the parent scope only when the current scope has no registration for the
|
|
56
|
+
* identifier AT ALL; it never merges across scopes. Seeding one pack from a
|
|
57
|
+
* `StoreExtension` and another from a `ViewExtension` would silently hide the
|
|
58
|
+
* first behind the second. The library cannot enforce this, so it is stated
|
|
59
|
+
* here and belongs in the host integration checklist.
|
|
60
|
+
*/
|
|
61
|
+
export function UniverseTagDefsExtension(defs) {
|
|
62
|
+
return {
|
|
63
|
+
setup: di => {
|
|
64
|
+
for (const pack of Array.isArray(defs) ? defs : [defs]) {
|
|
65
|
+
di.override(UniverseTagDefsProvider(pack.packId), () => pack);
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/** `'wardley:nature'` → `'wardley'`. */
|
|
71
|
+
const namespaceOf = (id) => id.split(':')[0] ?? '';
|
|
72
|
+
/** `'wardley:nature/data'` → `'wardley:nature'`. */
|
|
73
|
+
const tagOfValue = (valueId) => valueId.split('/')[0] ?? '';
|
|
74
|
+
/**
|
|
75
|
+
* Merge every registered pack into one read-only view.
|
|
76
|
+
*
|
|
77
|
+
* Pure, so it is testable with literals and no container. The merge rules, in
|
|
78
|
+
* full:
|
|
79
|
+
*
|
|
80
|
+
* - **Union by id.** Several packs may extend the same universe.
|
|
81
|
+
* - **Additive fields merge:** `values` are unioned by value id, `appliesTo`
|
|
82
|
+
* arrays are unioned, and `'*'` absorbs any list.
|
|
83
|
+
* - **Cosmetic fields — last pack wins:** `label`, `description`, `color`,
|
|
84
|
+
* `order`, `required`, `deprecated`.
|
|
85
|
+
* - **Structural fields — first pack wins, conflict recorded:** `cardinality`,
|
|
86
|
+
* and `values: 'open'` vs a closed list. The conflict becomes a
|
|
87
|
+
* `duplicate-conflict` error issue and does NOT throw. A host that needs a
|
|
88
|
+
* deterministic winner should not define the same structural field twice; the
|
|
89
|
+
* registry reports the collision rather than guessing.
|
|
90
|
+
* - **Idempotent by value.** Activating a universe twice yields the same
|
|
91
|
+
* registry.
|
|
92
|
+
*/
|
|
93
|
+
export function buildUniverseRegistry(packs) {
|
|
94
|
+
const issues = [];
|
|
95
|
+
const drafts = new Map();
|
|
96
|
+
const frameworks = [];
|
|
97
|
+
let rank = 0;
|
|
98
|
+
const issue = (severity, code, message, id) => issues.push(id === undefined
|
|
99
|
+
? { severity, code, message }
|
|
100
|
+
: { severity, code, id, message });
|
|
101
|
+
for (const pack of packs) {
|
|
102
|
+
if (pack?.formatVersion !== 1) {
|
|
103
|
+
// The WHOLE pack is dropped: a format we do not understand may mean
|
|
104
|
+
// anything. Documents still open; the tooling is simply unavailable.
|
|
105
|
+
issue('error', 'unsupported-format-version', `Pack "${pack?.packId ?? '<unnamed>'}" declares formatVersion ${String(pack?.formatVersion)}; this build understands 1. The pack is ignored.`, pack?.packId);
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
if (!FRAMEWORK_IDS.includes(pack.framework)) {
|
|
109
|
+
issue('warning', 'cross-framework-id', `Pack "${pack.packId}" declares the unknown framework "${pack.framework}".`, pack.packId);
|
|
110
|
+
}
|
|
111
|
+
if (!frameworks.includes(pack.framework))
|
|
112
|
+
frameworks.push(pack.framework);
|
|
113
|
+
for (const def of pack.tags ?? []) {
|
|
114
|
+
if (typeof def?.id !== 'string' || !ID_PATTERN.test(def.id)) {
|
|
115
|
+
issue('error', 'invalid-id', `Tag id "${String(def?.id)}" in pack "${pack.packId}" is not a well-formed '<framework>:<local>' id.`, typeof def?.id === 'string' ? def.id : undefined);
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
// The `<framework>` segment of every id in a pack MUST equal the pack's
|
|
119
|
+
// own framework. A cross-framework id is how one taxonomy would quietly
|
|
120
|
+
// start answering for another's roles.
|
|
121
|
+
if (namespaceOf(def.id) !== pack.framework) {
|
|
122
|
+
issue('error', 'cross-framework-id', `Tag "${def.id}" is namespaced "${namespaceOf(def.id)}" but pack "${pack.packId}" declares framework "${pack.framework}".`, def.id);
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
mergeTagDef(drafts, def, pack, issue, rank++);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
const merged = [...drafts.values()]
|
|
129
|
+
.map(draft => finishDraft(draft))
|
|
130
|
+
.sort((a, b) => (a.order ?? 0) - (b.order ?? 0) ||
|
|
131
|
+
drafts.get(a.id).rank - drafts.get(b.id).rank ||
|
|
132
|
+
a.id.localeCompare(b.id));
|
|
133
|
+
// Keyed by plain `string`, not by `QualifiedId`: a lookup comes from a
|
|
134
|
+
// DOCUMENT, which may carry any id at all, and the template-literal type is a
|
|
135
|
+
// seed-time aid rather than a claim about what is persisted.
|
|
136
|
+
const byId = new Map(merged.map(def => [def.id, def]));
|
|
137
|
+
return {
|
|
138
|
+
frameworks: () => [...frameworks],
|
|
139
|
+
tags: () => [...merged],
|
|
140
|
+
tag: id => byId.get(id),
|
|
141
|
+
tagsForRole: (roleId, defs) => merged.filter(def => tagAppliesToRole(def, roleId, defs)),
|
|
142
|
+
issues: () => [...issues],
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
function mergeTagDef(drafts, def, pack, issue, rank) {
|
|
146
|
+
const existing = drafts.get(def.id);
|
|
147
|
+
if (!existing) {
|
|
148
|
+
drafts.set(def.id, {
|
|
149
|
+
def: { ...def },
|
|
150
|
+
values: valueMapOf(def, pack, issue),
|
|
151
|
+
appliesTo: appliesToOf(def),
|
|
152
|
+
rank,
|
|
153
|
+
});
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
// Cosmetic: last pack wins. Absent stays absent rather than blanking what an
|
|
157
|
+
// earlier pack said.
|
|
158
|
+
const draft = existing.def;
|
|
159
|
+
if (def.label !== undefined)
|
|
160
|
+
draft.label = def.label;
|
|
161
|
+
if (def.description !== undefined)
|
|
162
|
+
draft.description = def.description;
|
|
163
|
+
if (def.order !== undefined)
|
|
164
|
+
draft.order = def.order;
|
|
165
|
+
if (def.required !== undefined)
|
|
166
|
+
draft.required = def.required;
|
|
167
|
+
if (def.deprecated !== undefined)
|
|
168
|
+
draft.deprecated = def.deprecated;
|
|
169
|
+
// Structural: first pack wins, and the collision is REPORTED rather than
|
|
170
|
+
// guessed at.
|
|
171
|
+
if (def.cardinality !== draft.cardinality) {
|
|
172
|
+
issue('error', 'duplicate-conflict', `Tag "${def.id}": pack "${pack.packId}" declares cardinality "${def.cardinality}" but "${draft.cardinality}" was declared first and stands.`, def.id);
|
|
173
|
+
}
|
|
174
|
+
const incomingOpen = def.values === 'open';
|
|
175
|
+
const existingOpen = existing.values === 'open';
|
|
176
|
+
if (incomingOpen !== existingOpen) {
|
|
177
|
+
issue('error', 'duplicate-conflict', `Tag "${def.id}": pack "${pack.packId}" declares ${incomingOpen ? 'an open value list' : 'a closed value list'} but the opposite was declared first and stands.`, def.id);
|
|
178
|
+
}
|
|
179
|
+
else if (existing.values !== 'open') {
|
|
180
|
+
// Additive: values union by value id, last cosmetic wins.
|
|
181
|
+
for (const [valueId, value] of valueMapOf(def, pack, issue)) {
|
|
182
|
+
const current = existing.values.get(valueId);
|
|
183
|
+
existing.values.set(valueId, current ? { ...current, ...value } : value);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
// Additive: `'*'` absorbs any list, in either direction.
|
|
187
|
+
const incomingRoles = appliesToOf(def);
|
|
188
|
+
if (existing.appliesTo !== '*') {
|
|
189
|
+
if (incomingRoles === '*')
|
|
190
|
+
existing.appliesTo = '*';
|
|
191
|
+
else
|
|
192
|
+
for (const role of incomingRoles)
|
|
193
|
+
existing.appliesTo.add(role);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
function valueMapOf(def, pack, issue) {
|
|
197
|
+
if (def.values === 'open')
|
|
198
|
+
return 'open';
|
|
199
|
+
const values = new Map();
|
|
200
|
+
for (const value of def.values ?? []) {
|
|
201
|
+
if (typeof value?.id !== 'string' || !ID_PATTERN.test(value.id)) {
|
|
202
|
+
issue('error', 'invalid-id', `Value id "${String(value?.id)}" of tag "${def.id}" in pack "${pack.packId}" is not a well-formed '<tagId>/<local>' id.`, typeof value?.id === 'string' ? value.id : undefined);
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
// A value belongs to its tag, spelled out in the id itself. Anything else
|
|
206
|
+
// would let a pack file a value under a tag it does not own.
|
|
207
|
+
if (tagOfValue(value.id) !== def.id) {
|
|
208
|
+
issue('error', 'invalid-id', `Value "${value.id}" is not a value of tag "${def.id}".`, value.id);
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
values.set(value.id, { ...value });
|
|
212
|
+
}
|
|
213
|
+
return values;
|
|
214
|
+
}
|
|
215
|
+
const appliesToOf = (def) => def.appliesTo === '*' ? '*' : new Set(def.appliesTo ?? []);
|
|
216
|
+
function finishDraft(draft) {
|
|
217
|
+
return {
|
|
218
|
+
...draft.def,
|
|
219
|
+
values: draft.values === 'open' ? 'open' : [...draft.values.values()],
|
|
220
|
+
appliesTo: draft.appliesTo === '*' ? '*' : [...draft.appliesTo],
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Whether a tag qualifies a role, following specialisation: a tag declared on
|
|
225
|
+
* `'wardley:component'` also applies to `'wardley:market'`, which specialises
|
|
226
|
+
* it. `'*'` matches every role of the tag's own framework and nothing else —
|
|
227
|
+
* a wildcard that crossed framework boundaries would make two taxonomies
|
|
228
|
+
* qualify each other's elements.
|
|
229
|
+
*/
|
|
230
|
+
export function tagAppliesToRole(def, roleId, defs) {
|
|
231
|
+
if (!roleId)
|
|
232
|
+
return false;
|
|
233
|
+
if (def.appliesTo === '*')
|
|
234
|
+
return namespaceOf(roleId) === namespaceOf(def.id);
|
|
235
|
+
return def.appliesTo.some(ancestor => roleIsA(roleId, ancestor, defs));
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* The merged registry for this editor assembly.
|
|
239
|
+
*
|
|
240
|
+
* Memoized per `BlockStdScope`: the merge is pure and the packs are fixed at
|
|
241
|
+
* assembly time, while callers (a toolbar section rebuilt on every selection
|
|
242
|
+
* change) ask for it often. A host that re-seeds a pack after the first read
|
|
243
|
+
* therefore needs a new scope — which is what re-creating the editor already
|
|
244
|
+
* does, and the only cost of not re-validating a static configuration on every
|
|
245
|
+
* keystroke.
|
|
246
|
+
*/
|
|
247
|
+
const REGISTRY_CACHE = new WeakMap();
|
|
248
|
+
export function getUniverseRegistry(std) {
|
|
249
|
+
const cached = REGISTRY_CACHE.get(std);
|
|
250
|
+
if (cached)
|
|
251
|
+
return cached;
|
|
252
|
+
const packs = [...std.provider.getAll(UniverseTagDefsProvider).values()];
|
|
253
|
+
const registry = buildUniverseRegistry(packs);
|
|
254
|
+
REGISTRY_CACHE.set(std, registry);
|
|
255
|
+
return registry;
|
|
256
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CodeBlockSchemaExtension, DatabaseBlockSchemaExtension, ImageBlockSchemaExtension, ListBlockSchemaExtension, NoteBlockSchemaExtension, ParagraphBlockSchemaExtension, RootBlockSchemaExtension, } from '../../affine-model/index.js';
|
|
2
2
|
import { Container } from '../../global/di/index.js';
|
|
3
3
|
import { TextSelection } from '../../std/index.js';
|
|
4
|
-
import { Text
|
|
4
|
+
import { Text } from '../../store/index.js';
|
|
5
5
|
import { TestWorkspace } from '../../store/test/index.js';
|
|
6
6
|
import { createTestHost } from './create-test-host.js';
|
|
7
7
|
const DEFAULT_EXTENSIONS = [
|
|
@@ -13,4 +13,8 @@ declare global {
|
|
|
13
13
|
export declare function caretRangeFromPoint(clientX: number, clientY: number): Range | null;
|
|
14
14
|
export declare function resetNativeSelection(range: Range | null): void;
|
|
15
15
|
export declare function getCurrentNativeRange(selection?: Selection | null): Range | null;
|
|
16
|
+
export declare const api: {
|
|
17
|
+
caretRangeFromPoint: typeof caretRangeFromPoint;
|
|
18
|
+
resetNativeSelection: typeof resetNativeSelection;
|
|
19
|
+
};
|
|
16
20
|
export declare function handleNativeRangeAtPoint(x: number, y: number): void;
|
|
@@ -63,11 +63,67 @@ export function getCurrentNativeRange(selection = window.getSelection()) {
|
|
|
63
63
|
}
|
|
64
64
|
return selection.getRangeAt(0);
|
|
65
65
|
}
|
|
66
|
+
// Indirection so that unit tests can mock these two browser-bound functions.
|
|
67
|
+
export const api = {
|
|
68
|
+
caretRangeFromPoint,
|
|
69
|
+
resetNativeSelection,
|
|
70
|
+
};
|
|
66
71
|
export function handleNativeRangeAtPoint(x, y) {
|
|
67
|
-
const range = caretRangeFromPoint(x, y);
|
|
72
|
+
const range = api.caretRangeFromPoint(x, y);
|
|
73
|
+
if (range) {
|
|
74
|
+
normalizeCaretRange(range);
|
|
75
|
+
}
|
|
68
76
|
const startContainer = range?.startContainer;
|
|
69
77
|
// click on rich text
|
|
70
78
|
if (startContainer instanceof Node) {
|
|
71
|
-
resetNativeSelection(range);
|
|
79
|
+
api.resetNativeSelection(range);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
function lastMeaningfulTextNode(node) {
|
|
83
|
+
const walker = document.createTreeWalker(node, NodeFilter.SHOW_TEXT, {
|
|
84
|
+
acceptNode(node) {
|
|
85
|
+
return node.textContent && node.textContent.trim().length > 0
|
|
86
|
+
? NodeFilter.FILTER_ACCEPT
|
|
87
|
+
: NodeFilter.FILTER_REJECT;
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
let last = null;
|
|
91
|
+
while (walker.nextNode()) {
|
|
92
|
+
last = walker.currentNode;
|
|
93
|
+
}
|
|
94
|
+
return last;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Clicking past the end of a line gives back a caret anchored on an *element*
|
|
98
|
+
* rather than on a text node. Such a range paints a caret for a frame and then
|
|
99
|
+
* loses it, because the editor only tracks carets that live inside text. Move
|
|
100
|
+
* the caret to the nearest meaningful text node so that it survives.
|
|
101
|
+
*/
|
|
102
|
+
function normalizeCaretRange(range) {
|
|
103
|
+
const { startContainer, startOffset } = range;
|
|
104
|
+
if (startContainer.nodeType === Node.TEXT_NODE)
|
|
105
|
+
return;
|
|
106
|
+
// Try to find text in the element at `startOffset`
|
|
107
|
+
const offsetEl = startOffset > 0
|
|
108
|
+
? startContainer.childNodes[startOffset - 1]
|
|
109
|
+
: startContainer.childNodes[0];
|
|
110
|
+
if (offsetEl) {
|
|
111
|
+
if (offsetEl.nodeType === Node.TEXT_NODE) {
|
|
112
|
+
range.setStart(offsetEl, startOffset > 0 ? (offsetEl.textContent?.length ?? 0) : 0);
|
|
113
|
+
range.collapse(true);
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const text = lastMeaningfulTextNode(offsetEl);
|
|
117
|
+
if (text) {
|
|
118
|
+
range.setStart(text, text.textContent?.length ?? 0);
|
|
119
|
+
range.collapse(true);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Fallback, try to find text in startContainer
|
|
124
|
+
const text = lastMeaningfulTextNode(startContainer);
|
|
125
|
+
if (text) {
|
|
126
|
+
range.setStart(text, text.textContent?.length ?? 0);
|
|
127
|
+
range.collapse(true);
|
|
72
128
|
}
|
|
73
129
|
}
|
|
@@ -11,3 +11,63 @@ import type { EditorHost } from '../../../std/index.js';
|
|
|
11
11
|
* ```
|
|
12
12
|
*/
|
|
13
13
|
export declare function getViewportElement(editorHost: EditorHost): HTMLElement | null;
|
|
14
|
+
/**
|
|
15
|
+
* Where a model point lands, in CSS pixels, for an overlay drawn *inside* the
|
|
16
|
+
* edgeless container: the selection rectangle, the resize handles, the remote
|
|
17
|
+
* cursors, the text editors mounted over an element.
|
|
18
|
+
*
|
|
19
|
+
* `Viewport.toViewCoord` answers in real screen pixels, so it multiplies by
|
|
20
|
+
* `viewScale` — the CSS scale an outer container puts on the whole editor,
|
|
21
|
+
* which is not 1 in a nested editor such as an embedded synced edgeless doc.
|
|
22
|
+
* An overlay lives *inside* that container, so its placement has to be stated
|
|
23
|
+
* in the container's already scaled space, exactly the way
|
|
24
|
+
* `GfxBlockComponent.getCSSTransform` states a block's. Positioning an overlay
|
|
25
|
+
* from `toViewCoord` lets the container apply its scale a second time, and the
|
|
26
|
+
* overlay drifts away from the element it decorates as soon as
|
|
27
|
+
* `viewScale !== 1`.
|
|
28
|
+
*/
|
|
29
|
+
export declare function toOverlayCoord(viewport: {
|
|
30
|
+
viewportX: number;
|
|
31
|
+
viewportY: number;
|
|
32
|
+
zoom: number;
|
|
33
|
+
viewScale: number;
|
|
34
|
+
}, modelX: number, modelY: number): [number, number];
|
|
35
|
+
/**
|
|
36
|
+
* The scale an overlay drawn inside the edgeless container has to wear so that
|
|
37
|
+
* it ends up painted at the viewport zoom. Counterpart of
|
|
38
|
+
* {@link toOverlayCoord}; same reasoning about `viewScale`.
|
|
39
|
+
*/
|
|
40
|
+
export declare function overlayScale(viewport: {
|
|
41
|
+
zoom: number;
|
|
42
|
+
viewScale: number;
|
|
43
|
+
}): number;
|
|
44
|
+
/**
|
|
45
|
+
* How wide and tall the visible viewport is *in the same units as*
|
|
46
|
+
* {@link toOverlayCoord}, so an overlay can tell whether it is about to run off
|
|
47
|
+
* the edge.
|
|
48
|
+
*
|
|
49
|
+
* `Viewport.width` / `Viewport.height` are the bounding client rect, i.e. real
|
|
50
|
+
* screen pixels. Comparing an overlay coordinate against them mixes two spaces
|
|
51
|
+
* and the flip or the clamp fires at the wrong moment under a scaled host.
|
|
52
|
+
*/
|
|
53
|
+
export declare function overlayViewportSize(viewport: {
|
|
54
|
+
width: number;
|
|
55
|
+
height: number;
|
|
56
|
+
viewScale: number;
|
|
57
|
+
}): [number, number];
|
|
58
|
+
/**
|
|
59
|
+
* Where a model point lands in *client* coordinates — what
|
|
60
|
+
* `document.caretRangeFromPoint`, `elementFromPoint` and a `PointerEvent`'s
|
|
61
|
+
* `clientX`/`clientY` speak.
|
|
62
|
+
*
|
|
63
|
+
* `Viewport.toViewCoord` answers relative to the viewport element's own top
|
|
64
|
+
* left corner, so handing its result to a client-coordinate API drops the
|
|
65
|
+
* viewport's offset in the window: the caret lands elsewhere as soon as the
|
|
66
|
+
* editor is not flush against the window origin — a sidebar, a header, or the
|
|
67
|
+
* editor embedded in a panel. Inverse of `Viewport.toViewCoordFromClientCoord`.
|
|
68
|
+
*/
|
|
69
|
+
export declare function toClientCoord(viewport: {
|
|
70
|
+
left: number;
|
|
71
|
+
top: number;
|
|
72
|
+
toViewCoord: (modelX: number, modelY: number) => number[];
|
|
73
|
+
}, modelX: number, modelY: number): [number, number];
|
|
@@ -13,3 +13,61 @@ export function getViewportElement(editorHost) {
|
|
|
13
13
|
return (editorHost.closest('.affine-page-viewport') ??
|
|
14
14
|
editorHost.closest('.affine-edgeless-viewport'));
|
|
15
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Where a model point lands, in CSS pixels, for an overlay drawn *inside* the
|
|
18
|
+
* edgeless container: the selection rectangle, the resize handles, the remote
|
|
19
|
+
* cursors, the text editors mounted over an element.
|
|
20
|
+
*
|
|
21
|
+
* `Viewport.toViewCoord` answers in real screen pixels, so it multiplies by
|
|
22
|
+
* `viewScale` — the CSS scale an outer container puts on the whole editor,
|
|
23
|
+
* which is not 1 in a nested editor such as an embedded synced edgeless doc.
|
|
24
|
+
* An overlay lives *inside* that container, so its placement has to be stated
|
|
25
|
+
* in the container's already scaled space, exactly the way
|
|
26
|
+
* `GfxBlockComponent.getCSSTransform` states a block's. Positioning an overlay
|
|
27
|
+
* from `toViewCoord` lets the container apply its scale a second time, and the
|
|
28
|
+
* overlay drifts away from the element it decorates as soon as
|
|
29
|
+
* `viewScale !== 1`.
|
|
30
|
+
*/
|
|
31
|
+
export function toOverlayCoord(viewport, modelX, modelY) {
|
|
32
|
+
const { viewportX, viewportY, zoom, viewScale } = viewport;
|
|
33
|
+
return [
|
|
34
|
+
((modelX - viewportX) * zoom) / viewScale,
|
|
35
|
+
((modelY - viewportY) * zoom) / viewScale,
|
|
36
|
+
];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* The scale an overlay drawn inside the edgeless container has to wear so that
|
|
40
|
+
* it ends up painted at the viewport zoom. Counterpart of
|
|
41
|
+
* {@link toOverlayCoord}; same reasoning about `viewScale`.
|
|
42
|
+
*/
|
|
43
|
+
export function overlayScale(viewport) {
|
|
44
|
+
return viewport.zoom / viewport.viewScale;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* How wide and tall the visible viewport is *in the same units as*
|
|
48
|
+
* {@link toOverlayCoord}, so an overlay can tell whether it is about to run off
|
|
49
|
+
* the edge.
|
|
50
|
+
*
|
|
51
|
+
* `Viewport.width` / `Viewport.height` are the bounding client rect, i.e. real
|
|
52
|
+
* screen pixels. Comparing an overlay coordinate against them mixes two spaces
|
|
53
|
+
* and the flip or the clamp fires at the wrong moment under a scaled host.
|
|
54
|
+
*/
|
|
55
|
+
export function overlayViewportSize(viewport) {
|
|
56
|
+
const { width, height, viewScale } = viewport;
|
|
57
|
+
return [width / viewScale, height / viewScale];
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Where a model point lands in *client* coordinates — what
|
|
61
|
+
* `document.caretRangeFromPoint`, `elementFromPoint` and a `PointerEvent`'s
|
|
62
|
+
* `clientX`/`clientY` speak.
|
|
63
|
+
*
|
|
64
|
+
* `Viewport.toViewCoord` answers relative to the viewport element's own top
|
|
65
|
+
* left corner, so handing its result to a client-coordinate API drops the
|
|
66
|
+
* viewport's offset in the window: the caret lands elsewhere as soon as the
|
|
67
|
+
* editor is not flush against the window origin — a sidebar, a header, or the
|
|
68
|
+
* editor embedded in a panel. Inverse of `Viewport.toViewCoordFromClientCoord`.
|
|
69
|
+
*/
|
|
70
|
+
export function toClientCoord(viewport, modelX, modelY) {
|
|
71
|
+
const [x, y] = viewport.toViewCoord(modelX, modelY);
|
|
72
|
+
return [x + viewport.left, y + viewport.top];
|
|
73
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FrameBlockModel, GroupElementModel } from '../../affine-model/index.js';
|
|
2
|
-
import { deserializeXYWH, getQuadBoundWithRotation
|
|
2
|
+
import { deserializeXYWH, getQuadBoundWithRotation } from '../../global/gfx/index.js';
|
|
3
3
|
export function getSelectedRect(selected) {
|
|
4
4
|
if (selected.length === 0) {
|
|
5
5
|
return new DOMRect();
|
|
@@ -11,12 +11,46 @@ declare global {
|
|
|
11
11
|
showOpenFilePicker?: (options?: OpenFilePickerOptions) => Promise<FileSystemFileHandle[]>;
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* One filter a file dialog offers: what to call it, and the MIME types it
|
|
16
|
+
* accepts with the extensions that go with each.
|
|
17
|
+
*
|
|
18
|
+
* The table below is the CLOSED list of filters this library ships. It is not
|
|
19
|
+
* the only source of one: an interchange format declares its own extensions and
|
|
20
|
+
* mime (`docs/adr/0012`), and a picker built from a registry entry cannot be a
|
|
21
|
+
* row in a hand-maintained table — the whole point of the registry is that a
|
|
22
|
+
* framework adds a format without a second file agreeing to it. So the shape is
|
|
23
|
+
* named and {@link openSingleFileWithSpec} takes it directly; `FileTypes` keeps
|
|
24
|
+
* naming the filters that are the editor's own.
|
|
25
|
+
*/
|
|
26
|
+
export interface FilePickerSpec {
|
|
27
|
+
description: string;
|
|
28
|
+
accept: Record<string, string[]>;
|
|
29
|
+
}
|
|
14
30
|
/**
|
|
15
31
|
* See https://web.dev/patterns/files/open-one-or-multiple-files/
|
|
32
|
+
*
|
|
33
|
+
* There is no `'Bpmn'` here any more, and no row for it above. A BPMN document
|
|
34
|
+
* is not the editor's own kind of file: it is one INTERCHANGE FORMAT among the
|
|
35
|
+
* several a framework declares (`docs/adr/0012`), and its filter is built from
|
|
36
|
+
* that declaration by {@link openSingleFileWithSpec}. Keeping a second copy in
|
|
37
|
+
* this table would be a copy nobody reads and everybody has to keep in step —
|
|
38
|
+
* the format's `extensions` and `mime` are the one statement of what a `.bpmn`
|
|
39
|
+
* file is called.
|
|
16
40
|
*/
|
|
17
41
|
type AcceptTypes = 'Any' | 'Images' | 'Videos' | 'Audios' | 'Markdown' | 'Html' | 'Zip' | 'MindMap';
|
|
18
42
|
export declare function openFilesWith(acceptType?: AcceptTypes, multiple?: boolean): Promise<File[] | null>;
|
|
19
43
|
export declare function openSingleFileWith(acceptType?: AcceptTypes): Promise<File | null>;
|
|
44
|
+
/**
|
|
45
|
+
* One file, filtered by a spec the caller built rather than by a name in
|
|
46
|
+
* {@link FileTypes}.
|
|
47
|
+
*
|
|
48
|
+
* What {@link openSingleFileWith} is for the editor's own dialogs, this is for
|
|
49
|
+
* anything whose filter is DECLARED somewhere else — today the interchange
|
|
50
|
+
* registry, whose formats each carry their extensions and their mime and are
|
|
51
|
+
* added by a framework, not by editing the table above.
|
|
52
|
+
*/
|
|
53
|
+
export declare function openSingleFileWithSpec(spec: FilePickerSpec): Promise<File | null>;
|
|
20
54
|
export declare function getImageFilesFromLocal(): Promise<File[]>;
|
|
21
55
|
export declare function downloadBlob(blob: Blob, name: string): void;
|
|
22
56
|
/**
|
|
@@ -79,6 +79,27 @@ const FileTypes = [
|
|
|
79
79
|
},
|
|
80
80
|
];
|
|
81
81
|
export async function openFilesWith(acceptType = 'Any', multiple = true) {
|
|
82
|
+
if (acceptType === 'Any')
|
|
83
|
+
return openFilesWithSpec(undefined, multiple);
|
|
84
|
+
const fileType = FileTypes.find(i => i.description === acceptType);
|
|
85
|
+
if (!fileType) {
|
|
86
|
+
// Unreachable through the closed `AcceptTypes` union, and reported rather
|
|
87
|
+
// than thrown for the same reason it always was: the picker branch used to
|
|
88
|
+
// throw this inside its own try/catch, log it and answer `null`. A caller
|
|
89
|
+
// asking for a filter that does not exist gets no dialog, not an exception
|
|
90
|
+
// it never had to handle.
|
|
91
|
+
console.error(new BlockSuiteError(ErrorCode.DefaultRuntimeError, `Unexpected acceptType "${acceptType}"`));
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
return openFilesWithSpec(fileType, multiple);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* The picker itself, over a filter rather than over a name in the table.
|
|
98
|
+
*
|
|
99
|
+
* `undefined` is "Any": no filter at all, which is what the dialog shows when
|
|
100
|
+
* nobody narrowed it.
|
|
101
|
+
*/
|
|
102
|
+
async function openFilesWithSpec(spec, multiple) {
|
|
82
103
|
// Feature detection. The API needs to be supported
|
|
83
104
|
// and the app not run in an iframe.
|
|
84
105
|
const supportsFileSystemAccess = 'showOpenFilePicker' in window &&
|
|
@@ -93,11 +114,8 @@ export async function openFilesWith(acceptType = 'Any', multiple = true) {
|
|
|
93
114
|
// If the File System Access API is supported…
|
|
94
115
|
if (supportsFileSystemAccess && window.showOpenFilePicker) {
|
|
95
116
|
try {
|
|
96
|
-
const fileType = FileTypes.find(i => i.description === acceptType);
|
|
97
|
-
if (acceptType !== 'Any' && !fileType)
|
|
98
|
-
throw new BlockSuiteError(ErrorCode.DefaultRuntimeError, `Unexpected acceptType "${acceptType}"`);
|
|
99
117
|
const pickerOpts = {
|
|
100
|
-
types:
|
|
118
|
+
types: spec ? [spec] : undefined,
|
|
101
119
|
multiple,
|
|
102
120
|
};
|
|
103
121
|
// Show the file picker, optionally allowing multiple files.
|
|
@@ -117,9 +135,19 @@ export async function openFilesWith(acceptType = 'Any', multiple = true) {
|
|
|
117
135
|
input.style.display = 'none';
|
|
118
136
|
input.type = 'file';
|
|
119
137
|
input.multiple = multiple;
|
|
120
|
-
if (
|
|
121
|
-
// For example, `accept="image
|
|
122
|
-
|
|
138
|
+
if (spec) {
|
|
139
|
+
// For example, `accept="image/*,.png,.jpg"` or `accept="video/*,.mp4"`.
|
|
140
|
+
//
|
|
141
|
+
// The EXTENSIONS as well as the MIME types, and the extensions are the
|
|
142
|
+
// half that matters for anything the OS has no type for: `.bpmn`, `.mm`
|
|
143
|
+
// and `.opml` are registered nowhere, so a filter built from
|
|
144
|
+
// `application/xml` alone greys them out in the native dialog and the
|
|
145
|
+
// file cannot be picked at all. This is the branch every browser without
|
|
146
|
+
// the File System Access API takes — Firefox and Safari — and
|
|
147
|
+
// `showOpenFilePicker` above already reads both halves of the same
|
|
148
|
+
// filter.
|
|
149
|
+
const type = spec.accept;
|
|
150
|
+
input.accept = [...Object.keys(type), ...Object.values(type).flat()].join(',');
|
|
123
151
|
}
|
|
124
152
|
document.body.append(input);
|
|
125
153
|
// The `change` event fires when the user interacts with the dialog.
|
|
@@ -143,6 +171,19 @@ export async function openSingleFileWith(acceptType) {
|
|
|
143
171
|
const files = await openFilesWith(acceptType, false);
|
|
144
172
|
return files?.at(0) ?? null;
|
|
145
173
|
}
|
|
174
|
+
/**
|
|
175
|
+
* One file, filtered by a spec the caller built rather than by a name in
|
|
176
|
+
* {@link FileTypes}.
|
|
177
|
+
*
|
|
178
|
+
* What {@link openSingleFileWith} is for the editor's own dialogs, this is for
|
|
179
|
+
* anything whose filter is DECLARED somewhere else — today the interchange
|
|
180
|
+
* registry, whose formats each carry their extensions and their mime and are
|
|
181
|
+
* added by a framework, not by editing the table above.
|
|
182
|
+
*/
|
|
183
|
+
export async function openSingleFileWithSpec(spec) {
|
|
184
|
+
const files = await openFilesWithSpec(spec, false);
|
|
185
|
+
return files?.at(0) ?? null;
|
|
186
|
+
}
|
|
146
187
|
export async function getImageFilesFromLocal() {
|
|
147
188
|
const files = await openFilesWith('Images');
|
|
148
189
|
return files ?? [];
|
|
@@ -1,3 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Styles injected into the print iframe.
|
|
3
|
+
*
|
|
4
|
+
* The printed document is always rendered on white paper, so the whole
|
|
5
|
+
* palette is pinned to a light one: a document read in the dark theme would
|
|
6
|
+
* otherwise print light text on a background the printer leaves white, and
|
|
7
|
+
* every one of those elements would come out invisible.
|
|
8
|
+
*
|
|
9
|
+
* Exported so the print-fidelity rules can be asserted in unit tests.
|
|
10
|
+
*/
|
|
11
|
+
export declare const printToPdfStyles = "@media print {\n html, body {\n height: initial !important;\n overflow: initial !important;\n print-color-adjust: exact;\n -webkit-print-color-adjust: exact;\n color: #000 !important;\n background: #fff !important;\n color-scheme: light !important;\n }\n ::-webkit-scrollbar {\n display: none;\n }\n :root, body {\n --affine-text-primary: #000 !important;\n --affine-text-secondary: #111 !important;\n --affine-text-tertiary: #333 !important;\n --affine-background-primary: #fff !important;\n --affine-background-secondary: #fff !important;\n --affine-background-tertiary: #fff !important;\n --affine-background-code-block: #f5f5f5 !important;\n --affine-quote-color: #e3e3e3 !important;\n --affine-border-color: #e3e3e3 !important;\n }\n body, [data-theme='dark'] {\n color: #000 !important;\n background: #fff !important;\n }\n body * {\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n }\n :root {\n --affine-note-shadow-box: none !important;\n --affine-note-shadow-sticker: none !important;\n }\n }";
|
|
12
|
+
/**
|
|
13
|
+
* Waits until every image inside `container` — shadow roots included — has
|
|
14
|
+
* either decoded or given up.
|
|
15
|
+
*
|
|
16
|
+
* A print dialog opened while images are still in flight prints their empty
|
|
17
|
+
* frames, so this is awaited before handing the document to the printer. An
|
|
18
|
+
* image that fails to load resolves too: a broken picture must not hang the
|
|
19
|
+
* print for ever.
|
|
20
|
+
*/
|
|
21
|
+
export declare function waitForImages(container: HTMLElement): Promise<void>;
|
|
1
22
|
export declare function printToPdf(rootElement?: HTMLElement | null, options?: {
|
|
2
23
|
/**
|
|
3
24
|
* Callback that is called when ready to print.
|