@formicoidea/labre-core 0.31.0 → 0.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_pkgs/affine-block-callout/callout-block.d.ts +6 -0
- package/dist/_pkgs/affine-block-callout/callout-block.js +25 -3
- package/dist/_pkgs/affine-block-callout/callout-keymap.js +59 -19
- package/dist/_pkgs/affine-block-callout/commands/callout-to-paragraph.d.ts +20 -0
- package/dist/_pkgs/affine-block-callout/commands/callout-to-paragraph.js +60 -0
- package/dist/_pkgs/affine-block-callout/commands/split-callout.d.ts +17 -0
- package/dist/_pkgs/affine-block-callout/commands/split-callout.js +42 -0
- package/dist/_pkgs/affine-block-callout/configs/slash-menu.js +9 -6
- package/dist/_pkgs/affine-block-callout/emoji-margin.d.ts +9 -0
- package/dist/_pkgs/affine-block-callout/emoji-margin.js +36 -0
- package/dist/_pkgs/affine-block-callout/emoji-menu.d.ts +5 -1
- package/dist/_pkgs/affine-block-callout/emoji-menu.js +5 -0
- package/dist/_pkgs/affine-block-code/code-block.d.ts +14 -0
- package/dist/_pkgs/affine-block-code/code-block.js +44 -6
- package/dist/_pkgs/affine-block-code/code-toolbar/components/code-toolbar.d.ts +2 -0
- package/dist/_pkgs/affine-block-code/code-toolbar/components/code-toolbar.js +23 -14
- package/dist/_pkgs/affine-block-code/code-toolbar/components/more-menu.d.ts +16 -0
- package/dist/_pkgs/affine-block-code/code-toolbar/components/more-menu.js +93 -0
- package/dist/_pkgs/affine-block-code/code-toolbar/config.js +52 -5
- package/dist/_pkgs/affine-block-code/effects.d.ts +2 -0
- package/dist/_pkgs/affine-block-code/effects.js +2 -0
- package/dist/_pkgs/affine-block-code/highlight/affine-code-unit.js +6 -1
- package/dist/_pkgs/affine-block-code/index.d.ts +1 -0
- package/dist/_pkgs/affine-block-code/index.js +1 -0
- package/dist/_pkgs/affine-block-code/line-numbers.d.ts +25 -0
- package/dist/_pkgs/affine-block-code/line-numbers.js +27 -0
- package/dist/_pkgs/affine-block-code/styles.js +31 -0
- package/dist/_pkgs/affine-block-data-view/data-view-block.js +1 -0
- package/dist/_pkgs/affine-block-database/components/title/index.js +4 -1
- package/dist/_pkgs/affine-block-database/configs/slash-menu.js +28 -1
- package/dist/_pkgs/affine-block-database/database-block.js +13 -0
- package/dist/_pkgs/affine-block-database/properties/paste-url.d.ts +24 -0
- package/dist/_pkgs/affine-block-database/properties/paste-url.js +98 -0
- package/dist/_pkgs/affine-block-database/properties/rich-text/cell-renderer.js +9 -19
- package/dist/_pkgs/affine-block-database/properties/title/text.js +20 -25
- package/dist/_pkgs/affine-block-database/views/index.js +1 -0
- package/dist/_pkgs/affine-block-edgeless-text/edgeless-text-block.js +10 -0
- package/dist/_pkgs/affine-block-edgeless-text/edgeless-toolbar/config.d.ts +3 -0
- package/dist/_pkgs/affine-block-edgeless-text/edgeless-toolbar/config.js +48 -1
- package/dist/_pkgs/affine-block-edgeless-text/edgeless-toolbar/font-size.d.ts +17 -0
- package/dist/_pkgs/affine-block-edgeless-text/edgeless-toolbar/font-size.js +24 -0
- package/dist/_pkgs/affine-block-embed-doc/common/doc-trashed.d.ts +9 -0
- package/dist/_pkgs/affine-block-embed-doc/common/doc-trashed.js +10 -0
- package/dist/_pkgs/affine-block-embed-doc/embed-linked-doc-block/embed-linked-doc-block.js +8 -4
- package/dist/_pkgs/affine-block-embed-doc/embed-synced-doc-block/embed-synced-doc-block.d.ts +4 -0
- package/dist/_pkgs/affine-block-embed-doc/embed-synced-doc-block/embed-synced-doc-block.js +22 -3
- package/dist/_pkgs/affine-block-frame/frame-manager.d.ts +13 -0
- package/dist/_pkgs/affine-block-frame/frame-manager.js +32 -2
- package/dist/_pkgs/affine-block-latex/styles.js +6 -1
- package/dist/_pkgs/affine-block-note/note-edgeless-block.d.ts +9 -0
- package/dist/_pkgs/affine-block-note/note-edgeless-block.js +29 -1
- package/dist/_pkgs/affine-block-root/commands/pivot-commands.d.ts +37 -0
- package/dist/_pkgs/affine-block-root/commands/pivot-commands.js +168 -0
- package/dist/_pkgs/affine-block-root/commands/reading-commands.d.ts +23 -0
- package/dist/_pkgs/affine-block-root/commands/reading-commands.js +107 -0
- package/dist/_pkgs/affine-block-root/commands/tag-commands.d.ts +47 -0
- package/dist/_pkgs/affine-block-root/commands/tag-commands.js +159 -0
- package/dist/_pkgs/affine-block-root/configs/toolbar.d.ts +1 -0
- package/dist/_pkgs/affine-block-root/edgeless/configs/toolbar/more.js +9 -2
- package/dist/_pkgs/affine-block-root/edgeless/configs/toolbar/render-linked-doc.js +1 -1
- package/dist/_pkgs/affine-block-root/edgeless/edgeless-keyboard.js +26 -1
- package/dist/_pkgs/affine-block-root/edgeless/edgeless-root-block.js +11 -2
- package/dist/_pkgs/affine-block-root/edgeless/edgeless-root-service.js +14 -0
- package/dist/_pkgs/affine-block-root/edgeless/index.d.ts +1 -0
- package/dist/_pkgs/affine-block-root/edgeless/index.js +1 -0
- package/dist/_pkgs/affine-block-root/edgeless/reserved-keys.d.ts +21 -0
- package/dist/_pkgs/affine-block-root/edgeless/reserved-keys.js +34 -0
- package/dist/_pkgs/affine-block-root/edgeless/utils/clone-utils.d.ts +7 -1
- package/dist/_pkgs/affine-block-root/edgeless/utils/clone-utils.js +11 -2
- package/dist/_pkgs/affine-block-root/index.d.ts +4 -1
- package/dist/_pkgs/affine-block-root/index.js +4 -1
- package/dist/_pkgs/affine-block-root/keyboard/commands.d.ts +2 -0
- package/dist/_pkgs/affine-block-root/keyboard/commands.js +147 -0
- package/dist/_pkgs/affine-block-root/view.js +13 -4
- package/dist/_pkgs/affine-block-surface/commands/reassociate-connectors.js +0 -1
- package/dist/_pkgs/affine-block-surface/effects.js +6 -0
- package/dist/_pkgs/affine-block-surface/element-model/index.d.ts +5 -2
- package/dist/_pkgs/affine-block-surface/element-model/index.js +4 -2
- package/dist/_pkgs/affine-block-surface/extensions/audit.d.ts +107 -0
- package/dist/_pkgs/affine-block-surface/extensions/audit.js +472 -0
- package/dist/_pkgs/affine-block-surface/extensions/crud-extension.d.ts +14 -0
- package/dist/_pkgs/affine-block-surface/extensions/crud-extension.js +27 -0
- package/dist/_pkgs/affine-block-surface/extensions/editor-anchored-panel.d.ts +133 -0
- package/dist/_pkgs/affine-block-surface/extensions/editor-anchored-panel.js +326 -0
- package/dist/_pkgs/affine-block-surface/extensions/index.d.ts +13 -0
- package/dist/_pkgs/affine-block-surface/extensions/index.js +13 -0
- package/dist/_pkgs/affine-block-surface/extensions/map-quality-widget.d.ts +146 -0
- package/dist/_pkgs/affine-block-surface/extensions/map-quality-widget.js +528 -0
- package/dist/_pkgs/affine-block-surface/extensions/map-quality.d.ts +109 -0
- package/dist/_pkgs/affine-block-surface/extensions/map-quality.js +84 -0
- package/dist/_pkgs/affine-block-surface/extensions/reading-toolbar.d.ts +15 -0
- package/dist/_pkgs/affine-block-surface/extensions/reading-toolbar.js +158 -0
- package/dist/_pkgs/affine-block-surface/extensions/reading-widget.d.ts +145 -0
- package/dist/_pkgs/affine-block-surface/extensions/reading-widget.js +590 -0
- package/dist/_pkgs/affine-block-surface/extensions/reading.d.ts +494 -0
- package/dist/_pkgs/affine-block-surface/extensions/reading.js +767 -0
- package/dist/_pkgs/affine-block-surface/extensions/spotlight.d.ts +45 -0
- package/dist/_pkgs/affine-block-surface/extensions/spotlight.js +177 -0
- package/dist/_pkgs/affine-block-surface/extensions/tags-toolbar.d.ts +10 -0
- package/dist/_pkgs/affine-block-surface/extensions/tags-toolbar.js +295 -0
- package/dist/_pkgs/affine-block-surface/extensions/validation-toolbar.d.ts +27 -0
- package/dist/_pkgs/affine-block-surface/extensions/validation-toolbar.js +361 -0
- package/dist/_pkgs/affine-block-surface/extensions/validation.d.ts +1340 -0
- package/dist/_pkgs/affine-block-surface/extensions/validation.js +3009 -0
- package/dist/_pkgs/affine-block-surface/extensions/violation-detail-widget.d.ts +286 -0
- package/dist/_pkgs/affine-block-surface/extensions/violation-detail-widget.js +907 -0
- package/dist/_pkgs/affine-block-surface/extensions/violation-timeline.d.ts +80 -0
- package/dist/_pkgs/affine-block-surface/extensions/violation-timeline.js +123 -0
- package/dist/_pkgs/affine-block-surface/framework-background/def.d.ts +321 -0
- package/dist/_pkgs/affine-block-surface/framework-background/def.js +81 -0
- package/dist/_pkgs/affine-block-surface/framework-background/facts.d.ts +188 -0
- package/dist/_pkgs/affine-block-surface/framework-background/facts.js +284 -0
- package/dist/_pkgs/affine-block-surface/framework-background/index.d.ts +5 -0
- package/dist/_pkgs/affine-block-surface/framework-background/index.js +5 -0
- package/dist/_pkgs/affine-block-surface/framework-background/interaction.d.ts +12 -0
- package/dist/_pkgs/affine-block-surface/framework-background/interaction.js +24 -0
- package/dist/_pkgs/affine-block-surface/framework-background/labels.d.ts +59 -0
- package/dist/_pkgs/affine-block-surface/framework-background/labels.js +117 -0
- package/dist/_pkgs/affine-block-surface/framework-background/renderer.d.ts +8 -0
- package/dist/_pkgs/affine-block-surface/framework-background/renderer.js +238 -0
- package/dist/_pkgs/affine-block-surface/index.d.ts +1 -0
- package/dist/_pkgs/affine-block-surface/index.js +1 -0
- package/dist/_pkgs/affine-block-surface/renderer/canvas-renderer.d.ts +69 -3
- package/dist/_pkgs/affine-block-surface/renderer/canvas-renderer.js +333 -44
- package/dist/_pkgs/affine-block-surface/renderer/dom-renderer.js +18 -2
- package/dist/_pkgs/affine-block-surface/tool/default-tool.js +8 -0
- package/dist/_pkgs/affine-block-surface/utils/font.js +9 -3
- package/dist/_pkgs/affine-block-surface/view.d.ts +17 -0
- package/dist/_pkgs/affine-block-surface/view.js +57 -2
- package/dist/_pkgs/affine-block-table/selection-controller.d.ts +6 -0
- package/dist/_pkgs/affine-block-table/selection-controller.js +24 -1
- package/dist/_pkgs/affine-block-table/table-block.js +8 -2
- package/dist/_pkgs/affine-block-table/table-cell.js +5 -6
- package/dist/_pkgs/affine-block-table/table-keymap.d.ts +18 -0
- package/dist/_pkgs/affine-block-table/table-keymap.js +41 -0
- package/dist/_pkgs/affine-block-table/utils.d.ts +7 -0
- package/dist/_pkgs/affine-block-table/utils.js +12 -0
- package/dist/_pkgs/affine-block-table/view.js +2 -0
- package/dist/_pkgs/affine-components/caption/captioned-block-component.js +2 -1
- package/dist/_pkgs/affine-components/context-menu/button.d.ts +7 -0
- package/dist/_pkgs/affine-components/context-menu/button.js +7 -2
- package/dist/_pkgs/affine-components/context-menu/input.d.ts +4 -0
- package/dist/_pkgs/affine-components/context-menu/input.js +12 -0
- package/dist/_pkgs/affine-components/context-menu/menu-all.d.ts +2 -0
- package/dist/_pkgs/affine-components/context-menu/menu-renderer.js +8 -1
- package/dist/_pkgs/affine-components/context-menu/sub-menu.js +3 -0
- package/dist/_pkgs/affine-components/highlight-dropdown-menu/highlight-duotone-icon.js +8 -8
- package/dist/_pkgs/affine-components/highlight-dropdown-menu/text-duotone-icon.js +11 -11
- package/dist/_pkgs/affine-components/icon-picker/affine-icon-picker-panel.d.ts +28 -0
- package/dist/_pkgs/affine-components/icon-picker/affine-icon-picker-panel.js +231 -0
- package/dist/_pkgs/affine-components/icon-picker/emoji-data.d.ts +40 -0
- package/dist/_pkgs/affine-components/icon-picker/emoji-data.js +99 -0
- package/dist/_pkgs/affine-components/icon-picker/emoji-picker-panel.d.ts +32 -0
- package/dist/_pkgs/affine-components/icon-picker/emoji-picker-panel.js +276 -0
- package/dist/_pkgs/affine-components/icon-picker/icon-data.d.ts +34 -0
- package/dist/_pkgs/affine-components/icon-picker/icon-data.js +83 -0
- package/dist/_pkgs/affine-components/icon-picker/icon-picker.d.ts +39 -0
- package/dist/_pkgs/affine-components/icon-picker/icon-picker.js +233 -0
- package/dist/_pkgs/affine-components/icon-picker/index.d.ts +8 -0
- package/dist/_pkgs/affine-components/icon-picker/index.js +15 -0
- package/dist/_pkgs/affine-components/icon-picker/recent-store.d.ts +8 -0
- package/dist/_pkgs/affine-components/icon-picker/recent-store.js +41 -0
- package/dist/_pkgs/affine-components/icon-picker/styles.d.ts +5 -0
- package/dist/_pkgs/affine-components/icon-picker/styles.js +166 -0
- package/dist/_pkgs/affine-components/icon-picker/types.d.ts +22 -0
- package/dist/_pkgs/affine-components/icon-picker/types.js +10 -0
- package/dist/_pkgs/affine-components/icons/text.js +426 -426
- package/dist/_pkgs/affine-components/open-doc-dropdown-menu/dropdown-menu.d.ts +1 -0
- package/dist/_pkgs/affine-components/portal/portal.d.ts +1 -1
- package/dist/_pkgs/affine-components/toolbar/menu-button.js +1 -0
- package/dist/_pkgs/affine-components/toolbar/toolbar.js +11 -10
- package/dist/_pkgs/affine-foundation/view.js +11 -2
- package/dist/_pkgs/affine-gfx-brush/index.d.ts +1 -0
- package/dist/_pkgs/affine-gfx-brush/index.js +1 -0
- package/dist/_pkgs/affine-gfx-brush/renderer/dom/brush.d.ts +1 -0
- package/dist/_pkgs/affine-gfx-brush/renderer/dom/brush.js +11 -0
- package/dist/_pkgs/affine-gfx-brush/renderer/dom/highlighter.d.ts +1 -0
- package/dist/_pkgs/affine-gfx-brush/renderer/dom/highlighter.js +11 -0
- package/dist/_pkgs/affine-gfx-brush/renderer/dom/index.d.ts +2 -0
- package/dist/_pkgs/affine-gfx-brush/renderer/dom/index.js +2 -0
- package/dist/_pkgs/affine-gfx-brush/renderer/dom/shared.d.ts +14 -0
- package/dist/_pkgs/affine-gfx-brush/renderer/dom/shared.js +54 -0
- package/dist/_pkgs/affine-gfx-brush/renderer/index.d.ts +1 -0
- package/dist/_pkgs/affine-gfx-brush/renderer/index.js +4 -0
- package/dist/_pkgs/affine-gfx-brush/view.d.ts +14 -0
- package/dist/_pkgs/affine-gfx-brush/view.js +29 -3
- package/dist/_pkgs/affine-gfx-connector/connector-manager.js +32 -6
- package/dist/_pkgs/affine-gfx-connector/connector-tool.d.ts +7 -0
- package/dist/_pkgs/affine-gfx-connector/connector-tool.js +2 -1
- package/dist/_pkgs/affine-gfx-connector/direction/direction-reveal.d.ts +123 -0
- package/dist/_pkgs/affine-gfx-connector/direction/direction-reveal.js +281 -0
- package/dist/_pkgs/affine-gfx-connector/direction/direction-widget.d.ts +65 -0
- package/dist/_pkgs/affine-gfx-connector/direction/direction-widget.js +395 -0
- package/dist/_pkgs/affine-gfx-connector/direction/index.d.ts +4 -0
- package/dist/_pkgs/affine-gfx-connector/direction/index.js +4 -0
- package/dist/_pkgs/affine-gfx-connector/direction/invert-direction.d.ts +72 -0
- package/dist/_pkgs/affine-gfx-connector/direction/invert-direction.js +187 -0
- package/dist/_pkgs/affine-gfx-connector/direction/typed-edge.d.ts +69 -0
- package/dist/_pkgs/affine-gfx-connector/direction/typed-edge.js +66 -0
- package/dist/_pkgs/affine-gfx-connector/effects.d.ts +2 -0
- package/dist/_pkgs/affine-gfx-connector/effects.js +2 -0
- package/dist/_pkgs/affine-gfx-connector/element-renderer/connector-dom/index.js +78 -41
- package/dist/_pkgs/affine-gfx-connector/index.d.ts +1 -0
- package/dist/_pkgs/affine-gfx-connector/index.js +1 -0
- package/dist/_pkgs/affine-gfx-connector/toolbar/config.d.ts +50 -0
- package/dist/_pkgs/affine-gfx-connector/toolbar/config.js +67 -1
- package/dist/_pkgs/affine-gfx-connector/view.js +16 -0
- package/dist/_pkgs/affine-gfx-group/command/group-api.js +150 -62
- package/dist/_pkgs/affine-gfx-group/text/edgeless-group-title-editor.js +4 -1
- package/dist/_pkgs/affine-gfx-pointer/tools/pan-tool.d.ts +16 -0
- package/dist/_pkgs/affine-gfx-pointer/tools/pan-tool.js +102 -32
- package/dist/_pkgs/affine-gfx-shape/commands.d.ts +2 -0
- package/dist/_pkgs/affine-gfx-shape/commands.js +33 -0
- package/dist/_pkgs/affine-gfx-shape/element-renderer/shape-dom/index.js +48 -19
- package/dist/_pkgs/affine-gfx-shape/index.d.ts +1 -1
- package/dist/_pkgs/affine-gfx-shape/index.js +1 -1
- package/dist/_pkgs/affine-gfx-shape/text/edgeless-shape-text-editor.d.ts +26 -0
- package/dist/_pkgs/affine-gfx-shape/text/edgeless-shape-text-editor.js +124 -13
- package/dist/_pkgs/affine-gfx-shape/view.js +3 -3
- package/dist/_pkgs/affine-gfx-template/toolbar/template-tool-button.d.ts +2 -0
- package/dist/_pkgs/affine-gfx-template/toolbar/template-tool-button.js +18 -1
- package/dist/_pkgs/affine-gfx-text/edgeless-text-editor.js +9 -5
- package/dist/_pkgs/affine-inline-latex/command.js +46 -26
- package/dist/_pkgs/affine-inline-latex/latex-node/latex-node.d.ts +10 -0
- package/dist/_pkgs/affine-inline-latex/latex-node/latex-node.js +23 -0
- package/dist/_pkgs/affine-inline-link/link-node/affine-link.js +4 -1
- package/dist/_pkgs/affine-inline-preset/adapters/html/html-inline.d.ts +3 -0
- package/dist/_pkgs/affine-inline-preset/adapters/html/html-inline.js +29 -1
- package/dist/_pkgs/affine-model/blocks/code/code-model.d.ts +1 -0
- package/dist/_pkgs/affine-model/blocks/code/code-model.js +1 -0
- package/dist/_pkgs/affine-model/elements/connector/connector.js +24 -0
- package/dist/_pkgs/affine-model/elements/edgy/board.d.ts +32 -0
- package/dist/_pkgs/affine-model/elements/edgy/board.js +112 -0
- package/dist/_pkgs/affine-model/elements/edgy/facets.d.ts +12 -0
- package/dist/_pkgs/affine-model/elements/edgy/facets.js +25 -1
- package/dist/_pkgs/affine-model/elements/edgy/index.d.ts +1 -0
- package/dist/_pkgs/affine-model/elements/edgy/index.js +1 -0
- package/dist/_pkgs/affine-model/elements/framework-background/background.d.ts +42 -0
- package/dist/_pkgs/affine-model/elements/framework-background/background.js +42 -0
- package/dist/_pkgs/affine-model/elements/framework-background/index.d.ts +1 -0
- package/dist/_pkgs/affine-model/elements/framework-background/index.js +1 -0
- package/dist/_pkgs/affine-model/elements/index.d.ts +3 -1
- package/dist/_pkgs/affine-model/elements/index.js +1 -0
- package/dist/_pkgs/affine-model/elements/mindmap/mindmap.js +8 -3
- package/dist/_pkgs/affine-model/elements/mindmap/style.d.ts +10 -0
- package/dist/_pkgs/affine-model/elements/mindmap/style.js +8 -0
- package/dist/_pkgs/affine-model/elements/wardley/wardley.d.ts +21 -29
- package/dist/_pkgs/affine-model/elements/wardley/wardley.js +41 -48
- package/dist/_pkgs/affine-shared/adapters/markdown/delta-converter.d.ts +6 -1
- package/dist/_pkgs/affine-shared/adapters/markdown/delta-converter.js +160 -2
- package/dist/_pkgs/affine-shared/adapters/markdown/markdown.js +5 -1
- package/dist/_pkgs/affine-shared/adapters/types/delta-converter.d.ts +1 -0
- package/dist/_pkgs/affine-shared/adapters/utils/color.d.ts +24 -0
- package/dist/_pkgs/affine-shared/adapters/utils/color.js +280 -0
- package/dist/_pkgs/affine-shared/adapters/utils/index.d.ts +1 -0
- package/dist/_pkgs/affine-shared/adapters/utils/index.js +1 -0
- package/dist/_pkgs/affine-shared/commands/block-crud/get-selected-blocks.js +10 -2
- package/dist/_pkgs/affine-shared/services/audit-service.d.ts +300 -0
- package/dist/_pkgs/affine-shared/services/audit-service.js +228 -0
- package/dist/_pkgs/affine-shared/services/edit-props-store.d.ts +7 -0
- package/dist/_pkgs/affine-shared/services/edit-props-store.js +11 -0
- package/dist/_pkgs/affine-shared/services/font-loader/font-loader-service.d.ts +26 -1
- package/dist/_pkgs/affine-shared/services/font-loader/font-loader-service.js +124 -7
- package/dist/_pkgs/affine-shared/services/index.d.ts +5 -0
- package/dist/_pkgs/affine-shared/services/index.js +5 -0
- package/dist/_pkgs/affine-shared/services/pivot-materiality-publisher.d.ts +129 -0
- package/dist/_pkgs/affine-shared/services/pivot-materiality-publisher.js +311 -0
- package/dist/_pkgs/affine-shared/services/pivot-properties-service.d.ts +217 -0
- package/dist/_pkgs/affine-shared/services/pivot-properties-service.js +114 -0
- package/dist/_pkgs/affine-shared/services/telemetry-service/code-block.d.ts +1 -1
- package/dist/_pkgs/affine-shared/services/telemetry-service/lifecycle.d.ts +182 -0
- package/dist/_pkgs/affine-shared/services/telemetry-service/telemetry-service.d.ts +2 -2
- package/dist/_pkgs/affine-shared/services/telemetry-service/types.d.ts +6 -1
- package/dist/_pkgs/affine-shared/services/toolbar-service/action.d.ts +10 -0
- package/dist/_pkgs/affine-shared/services/toolbar-service/index.d.ts +1 -0
- package/dist/_pkgs/affine-shared/services/toolbar-service/index.js +1 -0
- package/dist/_pkgs/affine-shared/services/toolbar-service/layout.d.ts +134 -0
- package/dist/_pkgs/affine-shared/services/toolbar-service/layout.js +146 -0
- package/dist/_pkgs/affine-shared/services/translation-service/index.d.ts +68 -0
- package/dist/_pkgs/affine-shared/services/translation-service/index.js +39 -0
- package/dist/_pkgs/affine-shared/services/universe-tag-defs-service.d.ts +155 -0
- package/dist/_pkgs/affine-shared/services/universe-tag-defs-service.js +254 -0
- package/dist/_pkgs/affine-shared/utils/dom/point-to-range.d.ts +4 -0
- package/dist/_pkgs/affine-shared/utils/dom/point-to-range.js +58 -2
- package/dist/_pkgs/affine-shared/utils/dom/viewport.d.ts +60 -0
- package/dist/_pkgs/affine-shared/utils/dom/viewport.js +58 -0
- package/dist/_pkgs/affine-shared/utils/print-to-pdf.d.ts +21 -0
- package/dist/_pkgs/affine-shared/utils/print-to-pdf.js +166 -32
- package/dist/_pkgs/affine-shared/utils/zod-schema.d.ts +7 -0
- package/dist/_pkgs/affine-shared/utils/zod-schema.js +27 -1
- package/dist/_pkgs/affine-widget-drag-handle/watchers/edgeless-watcher.d.ts +19 -10
- package/dist/_pkgs/affine-widget-drag-handle/watchers/edgeless-watcher.js +122 -23
- package/dist/_pkgs/affine-widget-drag-handle/watchers/pointer-event-watcher.d.ts +2 -0
- package/dist/_pkgs/affine-widget-drag-handle/watchers/pointer-event-watcher.js +25 -4
- package/dist/_pkgs/affine-widget-edgeless-selected-rect/auto-complete-panel.js +10 -5
- package/dist/_pkgs/affine-widget-edgeless-selected-rect/edgeless-auto-complete.d.ts +15 -1
- package/dist/_pkgs/affine-widget-edgeless-selected-rect/edgeless-auto-complete.js +37 -32
- package/dist/_pkgs/affine-widget-edgeless-selected-rect/edgeless-element-link.js +5 -4
- package/dist/_pkgs/affine-widget-edgeless-selected-rect/edgeless-selected-rect.js +19 -9
- package/dist/_pkgs/affine-widget-edgeless-selected-rect/utils.d.ts +16 -2
- package/dist/_pkgs/affine-widget-edgeless-selected-rect/utils.js +19 -2
- package/dist/_pkgs/affine-widget-edgeless-toolbar/index.d.ts +1 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/index.js +1 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/command-menu.d.ts +38 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/command-menu.js +99 -0
- package/dist/_pkgs/affine-widget-frame-title/edgeless-frame-title-editor.js +4 -1
- package/dist/_pkgs/affine-widget-keyboard-toolbar/icons.js +98 -98
- package/dist/_pkgs/affine-widget-linked-doc/linked-doc-popover.js +2 -15
- package/dist/_pkgs/affine-widget-linked-doc/transformers/markdown.d.ts +10 -1
- package/dist/_pkgs/affine-widget-linked-doc/transformers/markdown.js +133 -6
- package/dist/_pkgs/affine-widget-linked-doc/transformers/utils.d.ts +10 -0
- package/dist/_pkgs/affine-widget-linked-doc/transformers/utils.js +120 -3
- package/dist/_pkgs/affine-widget-linked-doc/utils.d.ts +12 -0
- package/dist/_pkgs/affine-widget-linked-doc/utils.js +33 -0
- package/dist/_pkgs/affine-widget-remote-selection/edgeless/index.js +6 -4
- package/dist/_pkgs/affine-widget-slash-menu/slash-menu-popover.js +8 -4
- package/dist/_pkgs/affine-widget-slash-menu/utils.d.ts +9 -0
- package/dist/_pkgs/affine-widget-slash-menu/utils.js +24 -0
- package/dist/_pkgs/affine-widget-toolbar/toolbar.d.ts +6 -0
- package/dist/_pkgs/affine-widget-toolbar/toolbar.js +34 -6
- package/dist/_pkgs/affine-widget-toolbar/utils.d.ts +146 -3
- package/dist/_pkgs/affine-widget-toolbar/utils.js +738 -56
- package/dist/_pkgs/data-view/core/common/property-menu.js +3 -16
- package/dist/_pkgs/data-view/core/component/tags/multi-tag-select.d.ts +4 -0
- package/dist/_pkgs/data-view/core/component/tags/multi-tag-select.js +28 -1
- package/dist/_pkgs/data-view/core/data-view.d.ts +3 -1
- package/dist/_pkgs/data-view/core/data-view.js +25 -3
- package/dist/_pkgs/data-view/core/detail/field.js +2 -2
- package/dist/_pkgs/data-view/core/detail/selection.d.ts +4 -2
- package/dist/_pkgs/data-view/core/detail/selection.js +23 -7
- package/dist/_pkgs/data-view/core/effect.js +2 -0
- package/dist/_pkgs/data-view/core/filter/eval.js +36 -23
- package/dist/_pkgs/data-view/core/filter/filter-fn/matcher.d.ts +7 -0
- package/dist/_pkgs/data-view/core/filter/filter-fn/matcher.js +12 -0
- package/dist/_pkgs/data-view/core/group-by/compare-date-keys.d.ts +11 -0
- package/dist/_pkgs/data-view/core/group-by/compare-date-keys.js +55 -0
- package/dist/_pkgs/data-view/core/group-by/define.d.ts +6 -0
- package/dist/_pkgs/data-view/core/group-by/define.js +114 -0
- package/dist/_pkgs/data-view/core/group-by/matcher.d.ts +7 -0
- package/dist/_pkgs/data-view/core/group-by/matcher.js +13 -0
- package/dist/_pkgs/data-view/core/group-by/renderer/boolean-group.js +11 -11
- package/dist/_pkgs/data-view/core/group-by/renderer/date-group.d.ts +9 -0
- package/dist/_pkgs/data-view/core/group-by/renderer/date-group.js +97 -0
- package/dist/_pkgs/data-view/core/group-by/setting.js +86 -7
- package/dist/_pkgs/data-view/core/group-by/trait.d.ts +34 -0
- package/dist/_pkgs/data-view/core/group-by/trait.js +106 -10
- package/dist/_pkgs/data-view/core/utils/menu-title.js +17 -17
- package/dist/_pkgs/data-view/property-presets/multi-select/cell-renderer.js +3 -1
- package/dist/_pkgs/data-view/property-presets/number/define.js +2 -1
- package/dist/_pkgs/data-view/property-presets/select/cell-renderer.js +3 -1
- package/dist/_pkgs/data-view/view-presets/calendar/calendar-view-manager.d.ts +70 -0
- package/dist/_pkgs/data-view/view-presets/calendar/calendar-view-manager.js +449 -0
- package/dist/_pkgs/data-view/view-presets/calendar/define.d.ts +10 -0
- package/dist/_pkgs/data-view/view-presets/calendar/define.js +27 -0
- package/dist/_pkgs/data-view/view-presets/calendar/effect.d.ts +1 -0
- package/dist/_pkgs/data-view/view-presets/calendar/effect.js +4 -0
- package/dist/_pkgs/data-view/view-presets/calendar/index.d.ts +6 -0
- package/dist/_pkgs/data-view/view-presets/calendar/index.js +6 -0
- package/dist/_pkgs/data-view/view-presets/calendar/layout.d.ts +37 -0
- package/dist/_pkgs/data-view/view-presets/calendar/layout.js +138 -0
- package/dist/_pkgs/data-view/view-presets/calendar/pc/actions.d.ts +7 -0
- package/dist/_pkgs/data-view/view-presets/calendar/pc/actions.js +68 -0
- package/dist/_pkgs/data-view/view-presets/calendar/pc/dnd.d.ts +32 -0
- package/dist/_pkgs/data-view/view-presets/calendar/pc/dnd.js +159 -0
- package/dist/_pkgs/data-view/view-presets/calendar/pc/effect.d.ts +1 -0
- package/dist/_pkgs/data-view/view-presets/calendar/pc/effect.js +7 -0
- package/dist/_pkgs/data-view/view-presets/calendar/pc/hit-test.d.ts +1 -0
- package/dist/_pkgs/data-view/view-presets/calendar/pc/hit-test.js +28 -0
- package/dist/_pkgs/data-view/view-presets/calendar/pc/styles.d.ts +1 -0
- package/dist/_pkgs/data-view/view-presets/calendar/pc/styles.js +707 -0
- package/dist/_pkgs/data-view/view-presets/calendar/pc/view.d.ts +89 -0
- package/dist/_pkgs/data-view/view-presets/calendar/pc/view.js +837 -0
- package/dist/_pkgs/data-view/view-presets/calendar/renderer.d.ts +2 -0
- package/dist/_pkgs/data-view/view-presets/calendar/renderer.js +8 -0
- package/dist/_pkgs/data-view/view-presets/calendar/source.d.ts +8 -0
- package/dist/_pkgs/data-view/view-presets/calendar/source.js +3 -0
- package/dist/_pkgs/data-view/view-presets/calendar/types.d.ts +79 -0
- package/dist/_pkgs/data-view/view-presets/calendar/types.js +1 -0
- package/dist/_pkgs/data-view/view-presets/convert.js +28 -0
- package/dist/_pkgs/data-view/view-presets/effect.js +2 -0
- package/dist/_pkgs/data-view/view-presets/index.d.ts +2 -0
- package/dist/_pkgs/data-view/view-presets/index.js +3 -0
- package/dist/_pkgs/data-view/view-presets/kanban/kanban-view-manager.js +3 -1
- package/dist/_pkgs/data-view/view-presets/kanban/mobile/cell.js +2 -2
- package/dist/_pkgs/data-view/view-presets/table/collapsed-state.d.ts +18 -0
- package/dist/_pkgs/data-view/view-presets/table/collapsed-state.js +36 -0
- package/dist/_pkgs/data-view/view-presets/table/mobile/cell.js +2 -2
- package/dist/_pkgs/data-view/view-presets/table/mobile/group.d.ts +11 -0
- package/dist/_pkgs/data-view/view-presets/table/mobile/group.js +87 -4
- package/dist/_pkgs/data-view/view-presets/table/pc/cell.d.ts +3 -0
- package/dist/_pkgs/data-view/view-presets/table/pc/cell.js +11 -2
- package/dist/_pkgs/data-view/view-presets/table/pc/controller/hotkeys.d.ts +1 -0
- package/dist/_pkgs/data-view/view-presets/table/pc/controller/hotkeys.js +39 -33
- package/dist/_pkgs/data-view/view-presets/table/pc/group.d.ts +10 -0
- package/dist/_pkgs/data-view/view-presets/table/pc/group.js +84 -5
- package/dist/_pkgs/data-view/view-presets/table/pc-virtual/controller/hotkeys.d.ts +1 -0
- package/dist/_pkgs/data-view/view-presets/table/pc-virtual/controller/hotkeys.js +39 -33
- package/dist/_pkgs/data-view/view-presets/table/pc-virtual/group/top/group-title.js +18 -18
- package/dist/_pkgs/data-view/view-presets/table/pc-virtual/row/cell.d.ts +3 -0
- package/dist/_pkgs/data-view/view-presets/table/pc-virtual/row/cell.js +8 -0
- package/dist/_pkgs/data-view/view-presets/table/table-view-manager.js +3 -1
- package/dist/_pkgs/data-view/view-presets/table/utils.d.ts +3 -0
- package/dist/_pkgs/data-view/view-presets/table/utils.js +16 -1
- package/dist/_pkgs/data-view/widget-presets/tools/presets/view-options/view-options.js +3 -1
- package/dist/_pkgs/global/gfx/curve.js +4 -3
- package/dist/_pkgs/std/clipboard/clipboard.js +13 -3
- package/dist/_pkgs/std/clipboard/utils.d.ts +5 -0
- package/dist/_pkgs/std/clipboard/utils.js +7 -0
- package/dist/_pkgs/std/event/dispatcher.js +27 -1
- package/dist/_pkgs/std/event/keymap.js +16 -6
- package/dist/_pkgs/std/extension/command-registry.d.ts +321 -0
- package/dist/_pkgs/std/extension/command-registry.js +233 -0
- package/dist/_pkgs/std/extension/dnd/index.d.ts +1 -1
- package/dist/_pkgs/std/extension/index.d.ts +2 -0
- package/dist/_pkgs/std/extension/index.js +2 -0
- package/dist/_pkgs/std/extension/translation-manifest.d.ts +49 -0
- package/dist/_pkgs/std/extension/translation-manifest.js +71 -0
- package/dist/_pkgs/std/gfx/index.d.ts +7 -3
- package/dist/_pkgs/std/gfx/index.js +6 -2
- package/dist/_pkgs/std/gfx/interactivity/gfx-view-event-handler.js +6 -1
- package/dist/_pkgs/std/gfx/interactivity/manager.d.ts +8 -0
- package/dist/_pkgs/std/gfx/interactivity/manager.js +18 -0
- package/dist/_pkgs/std/gfx/layer.d.ts +1 -1
- package/dist/_pkgs/std/gfx/layer.js +1 -2
- package/dist/_pkgs/std/gfx/model/surface/decorators/field.js +9 -0
- package/dist/_pkgs/std/gfx/model/surface/decorators/index.d.ts +2 -2
- package/dist/_pkgs/std/gfx/model/surface/decorators/index.js +2 -2
- package/dist/_pkgs/std/gfx/model/surface/decorators/local.d.ts +14 -0
- package/dist/_pkgs/std/gfx/model/surface/decorators/local.js +22 -0
- package/dist/_pkgs/std/gfx/model/surface/decorators/observer.d.ts +2 -0
- package/dist/_pkgs/std/gfx/model/surface/decorators/observer.js +40 -1
- package/dist/_pkgs/std/gfx/model/surface/element-model.d.ts +282 -0
- package/dist/_pkgs/std/gfx/model/surface/element-model.js +436 -25
- package/dist/_pkgs/std/gfx/model/surface/pivot.d.ts +48 -0
- package/dist/_pkgs/std/gfx/model/surface/pivot.js +34 -0
- package/dist/_pkgs/std/gfx/model/surface/role.d.ts +153 -0
- package/dist/_pkgs/std/gfx/model/surface/role.js +115 -0
- package/dist/_pkgs/std/gfx/model/surface/surface-model.d.ts +70 -0
- package/dist/_pkgs/std/gfx/model/surface/surface-model.js +304 -17
- package/dist/_pkgs/std/gfx/model/surface/tags.d.ts +77 -0
- package/dist/_pkgs/std/gfx/model/surface/tags.js +246 -0
- package/dist/_pkgs/std/gfx/perf.d.ts +10 -0
- package/dist/_pkgs/std/gfx/perf.js +30 -0
- package/dist/_pkgs/std/gfx/tool/tool-controller.d.ts +13 -0
- package/dist/_pkgs/std/gfx/tool/tool-controller.js +26 -0
- package/dist/_pkgs/std/gfx/viewport.d.ts +12 -0
- package/dist/_pkgs/std/gfx/viewport.js +19 -1
- package/dist/_pkgs/std/inline/services/event.d.ts +2 -0
- package/dist/_pkgs/std/inline/services/event.js +96 -21
- package/dist/_pkgs/std/utils/layer.js +2 -6
- package/dist/_pkgs/std/utils/tree.d.ts +14 -0
- package/dist/_pkgs/std/utils/tree.js +59 -8
- package/dist/_pkgs/std/view/element/gfx-block-component.js +23 -13
- package/dist/_pkgs/store/extension/workspace/workspace-meta.d.ts +10 -0
- package/dist/_pkgs/store/model/block/flat-sync-controller.js +2 -12
- package/dist/_pkgs/store/model/store/crud.js +7 -4
- package/dist/_pkgs/store/reactive/flat-native-y/index.d.ts +1 -1
- package/dist/_pkgs/store/reactive/flat-native-y/index.js +24 -2
- package/dist/commands.d.ts +58 -0
- package/dist/commands.js +66 -0
- package/dist/extensions/command-telemetry.d.ts +21 -0
- package/dist/extensions/command-telemetry.js +89 -0
- package/dist/extensions/store.d.ts +9 -4
- package/dist/extensions/store.js +27 -24
- package/dist/extensions/view.d.ts +9 -4
- package/dist/extensions/view.js +23 -8
- package/dist/flags.d.ts +98 -21
- package/dist/flags.js +103 -22
- package/dist/frameworks.d.ts +45 -0
- package/dist/frameworks.js +154 -0
- package/dist/schemas.d.ts +8 -5
- package/dist/schemas.js +28 -32
- package/dist/shortcuts.d.ts +16 -16
- package/dist/shortcuts.js +8 -36
- package/dist/translations.d.ts +56 -0
- package/dist/translations.js +112 -0
- package/package.json +16 -4
- package/dist/_pkgs/affine-block-root/keyboard/shortcuts.d.ts +0 -8
- package/dist/_pkgs/affine-block-root/keyboard/shortcuts.js +0 -48
- package/dist/_pkgs/affine-gfx-shape/shortcuts.d.ts +0 -6
- package/dist/_pkgs/affine-gfx-shape/shortcuts.js +0 -28
- package/dist/_pkgs/data-view/core/utils/cache.d.ts +0 -5
- package/dist/_pkgs/data-view/core/utils/cache.js +0 -28
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
import { cssVarV2, darkThemeV2, lightThemeV2 } from '@toeverything/theme/v2';
|
|
2
|
+
/**
|
|
3
|
+
* A colour is treated as a shade of grey below this chroma, and is then only
|
|
4
|
+
* ever mapped onto the grey highlight — never onto a hue.
|
|
5
|
+
*/
|
|
6
|
+
const ACHROMATIC_CHROMA_THRESHOLD = 0.02;
|
|
7
|
+
/**
|
|
8
|
+
* Greys this dark or this light are the reader's own text and background
|
|
9
|
+
* colours: leaving them unmapped is what keeps a pasted document legible in
|
|
10
|
+
* both themes.
|
|
11
|
+
*/
|
|
12
|
+
const DEFAULT_TEXT_LIGHTNESS_MIN = 0.4;
|
|
13
|
+
const DEFAULT_TEXT_LIGHTNESS_MAX = 0.9;
|
|
14
|
+
const MAX_COLOR_DISTANCE = 0.18;
|
|
15
|
+
const MAX_CHROMA_DISTANCE = 0.12;
|
|
16
|
+
const MAX_HUE_DISTANCE = 45;
|
|
17
|
+
const supportedTextColorNames = [
|
|
18
|
+
'red',
|
|
19
|
+
'orange',
|
|
20
|
+
'yellow',
|
|
21
|
+
'green',
|
|
22
|
+
'teal',
|
|
23
|
+
'blue',
|
|
24
|
+
'purple',
|
|
25
|
+
'grey',
|
|
26
|
+
];
|
|
27
|
+
/**
|
|
28
|
+
* The basic CSS colour keywords. Anything outside this set parses as `null`,
|
|
29
|
+
* which means "leave the text alone" — the conservative outcome.
|
|
30
|
+
*/
|
|
31
|
+
const NAMED_COLORS = {
|
|
32
|
+
aqua: '#00ffff',
|
|
33
|
+
black: '#000000',
|
|
34
|
+
blue: '#0000ff',
|
|
35
|
+
cyan: '#00ffff',
|
|
36
|
+
fuchsia: '#ff00ff',
|
|
37
|
+
gray: '#808080',
|
|
38
|
+
green: '#008000',
|
|
39
|
+
grey: '#808080',
|
|
40
|
+
lime: '#00ff00',
|
|
41
|
+
magenta: '#ff00ff',
|
|
42
|
+
maroon: '#800000',
|
|
43
|
+
navy: '#000080',
|
|
44
|
+
olive: '#808000',
|
|
45
|
+
orange: '#ffa500',
|
|
46
|
+
purple: '#800080',
|
|
47
|
+
red: '#ff0000',
|
|
48
|
+
silver: '#c0c0c0',
|
|
49
|
+
teal: '#008080',
|
|
50
|
+
transparent: '#00000000',
|
|
51
|
+
white: '#ffffff',
|
|
52
|
+
yellow: '#ffff00',
|
|
53
|
+
};
|
|
54
|
+
const clamp = (value, min, max) => Math.min(max, Math.max(min, value));
|
|
55
|
+
const parseHex = (value) => {
|
|
56
|
+
const hex = value.slice(1);
|
|
57
|
+
if (!/^[0-9a-f]+$/i.test(hex))
|
|
58
|
+
return null;
|
|
59
|
+
const expand = (part) => part.length === 1 ? Number.parseInt(part + part, 16) : Number.parseInt(part, 16);
|
|
60
|
+
const size = hex.length === 3 || hex.length === 4 ? 1 : 2;
|
|
61
|
+
if (hex.length !== size * 3 && hex.length !== size * 4)
|
|
62
|
+
return null;
|
|
63
|
+
return {
|
|
64
|
+
r: expand(hex.slice(0, size)),
|
|
65
|
+
g: expand(hex.slice(size, size * 2)),
|
|
66
|
+
b: expand(hex.slice(size * 2, size * 3)),
|
|
67
|
+
alpha: hex.length === size * 4 ? expand(hex.slice(size * 3, size * 4)) / 255 : 1,
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
/** A colour channel: `0-255`, or a percentage of 255. */
|
|
71
|
+
const parseChannel = (token) => {
|
|
72
|
+
const trimmed = token.trim();
|
|
73
|
+
if (!trimmed)
|
|
74
|
+
return null;
|
|
75
|
+
const isPercentage = trimmed.endsWith('%');
|
|
76
|
+
const value = Number.parseFloat(isPercentage ? trimmed.slice(0, -1) : trimmed);
|
|
77
|
+
if (Number.isNaN(value))
|
|
78
|
+
return null;
|
|
79
|
+
return clamp(Math.round(isPercentage ? (value / 100) * 255 : value), 0, 255);
|
|
80
|
+
};
|
|
81
|
+
/** An alpha value: `0-1`, or a percentage. */
|
|
82
|
+
const parseAlpha = (token) => {
|
|
83
|
+
if (token === null)
|
|
84
|
+
return 1;
|
|
85
|
+
const trimmed = token.trim();
|
|
86
|
+
if (!trimmed)
|
|
87
|
+
return null;
|
|
88
|
+
const isPercentage = trimmed.endsWith('%');
|
|
89
|
+
const value = Number.parseFloat(isPercentage ? trimmed.slice(0, -1) : trimmed);
|
|
90
|
+
if (Number.isNaN(value))
|
|
91
|
+
return null;
|
|
92
|
+
return clamp(isPercentage ? value / 100 : value, 0, 1);
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Split the body of a colour function into its arguments and its alpha,
|
|
96
|
+
* accepting both the legacy comma syntax (`rgb(1, 2, 3, 0.5)`) and the modern
|
|
97
|
+
* space syntax (`rgb(1 2 3 / 50%)`).
|
|
98
|
+
*/
|
|
99
|
+
const splitFunctionArgs = (body) => {
|
|
100
|
+
const [main, alphaPart] = body.split('/');
|
|
101
|
+
const args = main.split(/[\s,]+/).filter(Boolean);
|
|
102
|
+
let alpha = alphaPart?.trim() ? alphaPart.trim() : null;
|
|
103
|
+
if (alpha === null && args.length === 4) {
|
|
104
|
+
alpha = args.pop() ?? null;
|
|
105
|
+
}
|
|
106
|
+
return { args, alpha };
|
|
107
|
+
};
|
|
108
|
+
const parseHue = (token) => {
|
|
109
|
+
const trimmed = token.trim().toLowerCase();
|
|
110
|
+
const value = Number.parseFloat(trimmed);
|
|
111
|
+
if (Number.isNaN(value))
|
|
112
|
+
return null;
|
|
113
|
+
if (trimmed.endsWith('turn'))
|
|
114
|
+
return value * 360;
|
|
115
|
+
if (trimmed.endsWith('rad'))
|
|
116
|
+
return (value * 180) / Math.PI;
|
|
117
|
+
if (trimmed.endsWith('grad'))
|
|
118
|
+
return value * 0.9;
|
|
119
|
+
return value;
|
|
120
|
+
};
|
|
121
|
+
const hslToRgb = (h, s, l) => {
|
|
122
|
+
const hue = ((h % 360) + 360) % 360;
|
|
123
|
+
const c = (1 - Math.abs(2 * l - 1)) * s;
|
|
124
|
+
const x = c * (1 - Math.abs(((hue / 60) % 2) - 1));
|
|
125
|
+
const m = l - c / 2;
|
|
126
|
+
const [r, g, b] = [
|
|
127
|
+
[c, x, 0],
|
|
128
|
+
[x, c, 0],
|
|
129
|
+
[0, c, x],
|
|
130
|
+
[0, x, c],
|
|
131
|
+
[x, 0, c],
|
|
132
|
+
[c, 0, x],
|
|
133
|
+
][Math.floor(hue / 60) % 6];
|
|
134
|
+
return {
|
|
135
|
+
r: Math.round((r + m) * 255),
|
|
136
|
+
g: Math.round((g + m) * 255),
|
|
137
|
+
b: Math.round((b + m) * 255),
|
|
138
|
+
};
|
|
139
|
+
};
|
|
140
|
+
/**
|
|
141
|
+
* Parse the subset of CSS colour syntax that turns up in pasted HTML: hex,
|
|
142
|
+
* `rgb()`/`rgba()`, `hsl()`/`hsla()` and the basic colour keywords. Anything
|
|
143
|
+
* else — `color-mix()`, a custom property, an unknown keyword — is `null`.
|
|
144
|
+
*/
|
|
145
|
+
export const parseCssColor = (value) => {
|
|
146
|
+
const trimmed = value.trim().toLowerCase();
|
|
147
|
+
if (!trimmed)
|
|
148
|
+
return null;
|
|
149
|
+
const named = NAMED_COLORS[trimmed];
|
|
150
|
+
if (named)
|
|
151
|
+
return parseHex(named);
|
|
152
|
+
if (trimmed.startsWith('#'))
|
|
153
|
+
return parseHex(trimmed);
|
|
154
|
+
const fn = trimmed.match(/^(rgba?|hsla?)\(([^)]*)\)$/);
|
|
155
|
+
if (!fn)
|
|
156
|
+
return null;
|
|
157
|
+
const { args, alpha: rawAlpha } = splitFunctionArgs(fn[2]);
|
|
158
|
+
if (args.length !== 3)
|
|
159
|
+
return null;
|
|
160
|
+
const alpha = parseAlpha(rawAlpha);
|
|
161
|
+
if (alpha === null)
|
|
162
|
+
return null;
|
|
163
|
+
if (fn[1].startsWith('rgb')) {
|
|
164
|
+
const [r, g, b] = args.map(parseChannel);
|
|
165
|
+
if (r === null || g === null || b === null)
|
|
166
|
+
return null;
|
|
167
|
+
return { r, g, b, alpha };
|
|
168
|
+
}
|
|
169
|
+
const hue = parseHue(args[0]);
|
|
170
|
+
const saturation = parseAlpha(args[1]);
|
|
171
|
+
const lightness = parseAlpha(args[2]);
|
|
172
|
+
if (hue === null || saturation === null || lightness === null)
|
|
173
|
+
return null;
|
|
174
|
+
return { ...hslToRgb(hue, saturation, lightness), alpha };
|
|
175
|
+
};
|
|
176
|
+
const srgbToLinear = (channel) => {
|
|
177
|
+
const value = channel / 255;
|
|
178
|
+
return value <= 0.04045
|
|
179
|
+
? value / 12.92
|
|
180
|
+
: Math.pow((value + 0.055) / 1.055, 2.4);
|
|
181
|
+
};
|
|
182
|
+
/**
|
|
183
|
+
* Oklab is perceptually uniform, so "near enough to count as the same colour"
|
|
184
|
+
* is a plain distance here, which it is not in sRGB.
|
|
185
|
+
*/
|
|
186
|
+
const rgbToOklab = ({ r, g, b }) => {
|
|
187
|
+
const red = srgbToLinear(r);
|
|
188
|
+
const green = srgbToLinear(g);
|
|
189
|
+
const blue = srgbToLinear(b);
|
|
190
|
+
const l = Math.cbrt(0.4122214708 * red + 0.5363325363 * green + 0.0514459929 * blue);
|
|
191
|
+
const m = Math.cbrt(0.2119034982 * red + 0.6806995451 * green + 0.1073969566 * blue);
|
|
192
|
+
const s = Math.cbrt(0.0883024619 * red + 0.2817188376 * green + 0.6299787005 * blue);
|
|
193
|
+
const result = {
|
|
194
|
+
l: 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s,
|
|
195
|
+
a: 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s,
|
|
196
|
+
b: 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s,
|
|
197
|
+
};
|
|
198
|
+
return {
|
|
199
|
+
...result,
|
|
200
|
+
chroma: Math.hypot(result.a, result.b),
|
|
201
|
+
hue: (Math.atan2(result.b, result.a) * 180) / Math.PI,
|
|
202
|
+
};
|
|
203
|
+
};
|
|
204
|
+
const supportedTextColors = supportedTextColorNames.map(name => ({
|
|
205
|
+
name,
|
|
206
|
+
cssVar: cssVarV2(`text/highlight/fg/${name}`),
|
|
207
|
+
// Both themes are candidates: a document is pasted in one theme and read in
|
|
208
|
+
// the other, so whichever reference is nearer decides the highlight.
|
|
209
|
+
references: [
|
|
210
|
+
lightThemeV2[`text/highlight/fg/${name}`],
|
|
211
|
+
darkThemeV2[`text/highlight/fg/${name}`],
|
|
212
|
+
].flatMap(color => {
|
|
213
|
+
const parsed = parseCssColor(color);
|
|
214
|
+
return parsed ? [rgbToOklab(parsed)] : [];
|
|
215
|
+
}),
|
|
216
|
+
}));
|
|
217
|
+
const colorDistance = (a, b) => Math.hypot(a.l - b.l, a.a - b.a, a.b - b.b);
|
|
218
|
+
const hueDistance = (a, b) => {
|
|
219
|
+
const distance = Math.abs(a - b) % 360;
|
|
220
|
+
return Math.min(distance, 360 - distance);
|
|
221
|
+
};
|
|
222
|
+
/**
|
|
223
|
+
* Map a CSS colour onto the nearest supported text highlight, or `null` when
|
|
224
|
+
* nothing is near enough. `null` is the good outcome for the reader: text with
|
|
225
|
+
* no colour follows the theme, whereas a wrong colour can leave it unreadable
|
|
226
|
+
* in one of the two themes.
|
|
227
|
+
*/
|
|
228
|
+
export const resolveNearestSupportedColor = (color) => {
|
|
229
|
+
const parsed = parseCssColor(color);
|
|
230
|
+
// A translucent colour was picked to sit on the source background, not ours.
|
|
231
|
+
if (!parsed || parsed.alpha < 1) {
|
|
232
|
+
return null;
|
|
233
|
+
}
|
|
234
|
+
const target = rgbToOklab(parsed);
|
|
235
|
+
const achromatic = target.chroma < ACHROMATIC_CHROMA_THRESHOLD;
|
|
236
|
+
if (achromatic &&
|
|
237
|
+
(target.l < DEFAULT_TEXT_LIGHTNESS_MIN || target.l > DEFAULT_TEXT_LIGHTNESS_MAX)) {
|
|
238
|
+
return null;
|
|
239
|
+
}
|
|
240
|
+
let nearest;
|
|
241
|
+
for (const supported of supportedTextColors) {
|
|
242
|
+
// A grey never becomes a hue, and a hue never becomes the grey.
|
|
243
|
+
if (achromatic !== (supported.name === 'grey')) {
|
|
244
|
+
continue;
|
|
245
|
+
}
|
|
246
|
+
for (const reference of supported.references) {
|
|
247
|
+
const distance = colorDistance(target, reference);
|
|
248
|
+
if (distance > MAX_COLOR_DISTANCE ||
|
|
249
|
+
(!achromatic &&
|
|
250
|
+
(Math.abs(target.chroma - reference.chroma) > MAX_CHROMA_DISTANCE ||
|
|
251
|
+
hueDistance(target.hue, reference.hue) > MAX_HUE_DISTANCE))) {
|
|
252
|
+
continue;
|
|
253
|
+
}
|
|
254
|
+
if (!nearest || distance < nearest.distance) {
|
|
255
|
+
nearest = { cssVar: supported.cssVar, distance };
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return nearest?.cssVar ?? null;
|
|
260
|
+
};
|
|
261
|
+
/**
|
|
262
|
+
* Read the `color` declaration out of an inline `style` attribute, leaving
|
|
263
|
+
* `background-color` and friends alone.
|
|
264
|
+
*/
|
|
265
|
+
export const extractColorFromStyle = (style) => {
|
|
266
|
+
if (typeof style !== 'string') {
|
|
267
|
+
return null;
|
|
268
|
+
}
|
|
269
|
+
for (const declaration of style.split(';')) {
|
|
270
|
+
const colon = declaration.indexOf(':');
|
|
271
|
+
if (colon === -1)
|
|
272
|
+
continue;
|
|
273
|
+
// Split on the first colon only: `rgb(0 0 0 / 50%)` has none, but a
|
|
274
|
+
// `url()` or a future colour syntax may.
|
|
275
|
+
if (declaration.slice(0, colon).trim().toLowerCase() === 'color') {
|
|
276
|
+
return declaration.slice(colon + 1).trim();
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
return null;
|
|
280
|
+
};
|
|
@@ -86,9 +86,17 @@ export const getSelectedBlocksCommand = (ctx, next) => {
|
|
|
86
86
|
if (ctx.filter) {
|
|
87
87
|
dirtyResult = dirtyResult.filter(ctx.filter);
|
|
88
88
|
}
|
|
89
|
-
//
|
|
89
|
+
// Remove duplicate elements. A `Set` and not `indexOf`: selecting a whole
|
|
90
|
+
// document hands this command every block at once, and a scan per block is
|
|
91
|
+
// quadratic in the size of the document.
|
|
92
|
+
const seen = new Set();
|
|
90
93
|
const result = dirtyResult
|
|
91
|
-
.filter(
|
|
94
|
+
.filter(el => {
|
|
95
|
+
if (seen.has(el))
|
|
96
|
+
return false;
|
|
97
|
+
seen.add(el);
|
|
98
|
+
return true;
|
|
99
|
+
})
|
|
92
100
|
// sort by document position
|
|
93
101
|
.sort((a, b) => {
|
|
94
102
|
if (a === b) {
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
import type { BlockStdScope } from '../../std/index.js';
|
|
2
|
+
import type { ExtensionType } from '../../store/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* One audit criterion, as DATA owned by its framework and versioned like a
|
|
5
|
+
* validation rule.
|
|
6
|
+
*
|
|
7
|
+
* The criterion carries its own PROSE, in {@link prompt} — and that is a
|
|
8
|
+
* deliberate exception to the library's "no sentences" rule, not an oversight.
|
|
9
|
+
* A rule's message is addressed to a USER and therefore belongs to a host
|
|
10
|
+
* catalogue (hence `messageKey` + `messageFallback`); a criterion's prompt is
|
|
11
|
+
* addressed to an ASSISTANT, is not displayed anywhere, and is exactly the kind
|
|
12
|
+
* of thing that must be reviewable, diffable and versioned in the repository
|
|
13
|
+
* rather than retyped in an app. The user-facing half still goes through
|
|
14
|
+
* {@link labelKey} + {@link fallback}, unchanged.
|
|
15
|
+
*/
|
|
16
|
+
export interface AuditCriterion {
|
|
17
|
+
/** Stable id, namespaced by framework: `wardley.A1`. */
|
|
18
|
+
id: string;
|
|
19
|
+
/** Owning framework, e.g. `wardley`. A criterion never crosses frameworks. */
|
|
20
|
+
framework: string;
|
|
21
|
+
/** i18n key of the human name; resolved by the host. */
|
|
22
|
+
labelKey: string;
|
|
23
|
+
/** The framework's own wording when the host ships no catalogue for the key. */
|
|
24
|
+
fallback: string;
|
|
25
|
+
/**
|
|
26
|
+
* The criterion itself, in words, for the assistant. Never rendered.
|
|
27
|
+
*
|
|
28
|
+
* Written as an instruction to a reviewer, not as a message to a user: it
|
|
29
|
+
* states what to look for and what would make the map fail it.
|
|
30
|
+
*/
|
|
31
|
+
prompt: string;
|
|
32
|
+
/** Bumped when the criterion's meaning changes, so a host can pin behaviour. */
|
|
33
|
+
version: number;
|
|
34
|
+
}
|
|
35
|
+
/** A role, as the assistant sees it. Vocabulary only, no geometry. */
|
|
36
|
+
export interface AuditRoleFact {
|
|
37
|
+
id: string;
|
|
38
|
+
/**
|
|
39
|
+
* Mirrors `RoleKind` structurally rather than importing it: this package sits
|
|
40
|
+
* below `@labre/std/gfx` in the seam, and the DTO must stay a plain shape a
|
|
41
|
+
* host can implement. Kept in sync by the collector, which fails to compile
|
|
42
|
+
* if `RoleKind` gains a member this union does not have — which is exactly
|
|
43
|
+
* how `'text'` arrived here (MF3).
|
|
44
|
+
*/
|
|
45
|
+
kind: 'node' | 'edge' | 'text';
|
|
46
|
+
/** Data hierarchy: `wardley:market` specialises `wardley:component`. */
|
|
47
|
+
parent?: string;
|
|
48
|
+
/** Optional, mirroring `RoleDef.labelKey`: a role may ship without one. */
|
|
49
|
+
labelKey?: string;
|
|
50
|
+
}
|
|
51
|
+
/** An axis of a framework frame. Same facts the rule families read. */
|
|
52
|
+
export interface AuditAxisFact {
|
|
53
|
+
id: string;
|
|
54
|
+
orientation: 'horizontal' | 'vertical';
|
|
55
|
+
/** Unit vector of increasing value, model space (`y` grows downwards). */
|
|
56
|
+
forward: readonly [number, number];
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* A named zone of a framework frame, as PLOT RATIOS.
|
|
60
|
+
*
|
|
61
|
+
* Ratios, never model coordinates: a zone is a statement about the frame, and
|
|
62
|
+
* expressing it in model units would make it a statement about how big the user
|
|
63
|
+
* happened to draw the map. `{ x: 0.4, w: 0.3 }` is "Product" on every Wardley
|
|
64
|
+
* map ever drawn.
|
|
65
|
+
*/
|
|
66
|
+
export interface AuditZoneFact {
|
|
67
|
+
id: string;
|
|
68
|
+
rect: {
|
|
69
|
+
x: number;
|
|
70
|
+
y: number;
|
|
71
|
+
w: number;
|
|
72
|
+
h: number;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/** One framework frame on the board — a Wardley map, a Cynefin grid. */
|
|
76
|
+
export interface AuditFrameFact {
|
|
77
|
+
elementId: string;
|
|
78
|
+
framework: string;
|
|
79
|
+
/** Background declaration type, e.g. `'wardley'`. */
|
|
80
|
+
type: string;
|
|
81
|
+
/** The level of requirement in force, when the frame names one. */
|
|
82
|
+
profileId?: string;
|
|
83
|
+
axes: readonly AuditAxisFact[];
|
|
84
|
+
zones: readonly AuditZoneFact[];
|
|
85
|
+
}
|
|
86
|
+
/** One element measured against a frame. */
|
|
87
|
+
export interface AuditElementFact {
|
|
88
|
+
id: string;
|
|
89
|
+
/** Role id, e.g. `wardley:component`. Neutral elements are never collected. */
|
|
90
|
+
role: string;
|
|
91
|
+
/** The frame it was attributed to, when it sits on one. */
|
|
92
|
+
frameId?: string;
|
|
93
|
+
/**
|
|
94
|
+
* Where it sits INSIDE that frame's plot, as ratios — `[0.62, 0.31]` reads as
|
|
95
|
+
* "in Product, fairly high up the value chain" on any Wardley map, at any
|
|
96
|
+
* size. Absent when the element is on no frame.
|
|
97
|
+
*/
|
|
98
|
+
at?: readonly [number, number];
|
|
99
|
+
/** The zone its centre falls in, when the frame declares zones. */
|
|
100
|
+
zone?: string;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* A level 1 / level 2 finding, handed to the assistant as a FACT about the map.
|
|
104
|
+
*
|
|
105
|
+
* The deterministic engine's output is an input to the audit and never the
|
|
106
|
+
* other way round. Structurally a subset of the engine's `Violation`, so the
|
|
107
|
+
* collector copies rather than converts — and so this package needs no
|
|
108
|
+
* dependency on `@labre/affine-block-surface`, which depends on it.
|
|
109
|
+
*/
|
|
110
|
+
export interface AuditViolationFact {
|
|
111
|
+
ruleId: string;
|
|
112
|
+
/** Never `'audit'`: an audit finding is not a fact about the map. */
|
|
113
|
+
severity: 'blocking-overridable' | 'warning';
|
|
114
|
+
elementIds: string[];
|
|
115
|
+
messageKey: string;
|
|
116
|
+
backgroundId?: string;
|
|
117
|
+
/** Set when a user already arbitrated this finding away (PF8). */
|
|
118
|
+
exemption?: 'element' | 'map';
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Everything the assistant is told about the board. **Render-free** (ADR 0006
|
|
122
|
+
* § 5): no `TemplateResult`, no element model, no function, no DOM — a plain
|
|
123
|
+
* object that survives `structuredClone` and a `postMessage`.
|
|
124
|
+
*/
|
|
125
|
+
export interface AuditFacts {
|
|
126
|
+
/** The role vocabulary in play, so an id is never an opaque string. */
|
|
127
|
+
roles: readonly AuditRoleFact[];
|
|
128
|
+
frames: readonly AuditFrameFact[];
|
|
129
|
+
elements: readonly AuditElementFact[];
|
|
130
|
+
/** Levels 1 and 2, as computed by the deterministic engine. */
|
|
131
|
+
violations: readonly AuditViolationFact[];
|
|
132
|
+
}
|
|
133
|
+
/** What the assistant is asked to do. */
|
|
134
|
+
export interface AuditRequest {
|
|
135
|
+
criteria: readonly AuditCriterion[];
|
|
136
|
+
facts: AuditFacts;
|
|
137
|
+
}
|
|
138
|
+
/** How far along a run is. Reported, never awaited. */
|
|
139
|
+
export interface AuditProgress {
|
|
140
|
+
/** Criteria settled so far. */
|
|
141
|
+
done: number;
|
|
142
|
+
/** Criteria in the request — `request.criteria.length`. */
|
|
143
|
+
total: number;
|
|
144
|
+
/** The criterion currently being evaluated, when the provider says. */
|
|
145
|
+
criterionId?: string;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* One audit result, in the shape of a violation object at `audit` severity.
|
|
149
|
+
*
|
|
150
|
+
* Structurally assignable to the engine's `Violation` (a test pins that), which
|
|
151
|
+
* is what lets a host panel render an audit finding with the very same code it
|
|
152
|
+
* renders a rule finding with — while `userFacingViolations` keeps it off the
|
|
153
|
+
* canvas, because that is what `audit` severity means.
|
|
154
|
+
*/
|
|
155
|
+
export interface AuditFinding {
|
|
156
|
+
/**
|
|
157
|
+
* Namespaced as `audit:<criterionId>` so it can never collide with a
|
|
158
|
+
* registered rule id, and so `ValidationManager.ruleOf` returns nothing for it
|
|
159
|
+
* — an audit finding is not arbitrable with a user exception. It is an
|
|
160
|
+
* opinion, and an opinion is not a rule to be waived.
|
|
161
|
+
*/
|
|
162
|
+
ruleId: string;
|
|
163
|
+
/**
|
|
164
|
+
* The elements the finding is about — **not validated against the surface**.
|
|
165
|
+
*
|
|
166
|
+
* The library checks that these are strings and nothing more. An id naming an
|
|
167
|
+
* element that no longer exists, or one from another document, is published
|
|
168
|
+
* as-is: validating would cost a lookup per id, and a missing id is not
|
|
169
|
+
* *wrong* so much as *stale* — the board moves on while an audit is in
|
|
170
|
+
* flight, which is the normal case for a call that takes seconds.
|
|
171
|
+
*
|
|
172
|
+
* **A host panel must therefore tolerate absent ids**: resolve them
|
|
173
|
+
* defensively and render what it can, rather than assuming every id is a live
|
|
174
|
+
* element. This is the one place the "render it with the code you already
|
|
175
|
+
* have" claim needs a caveat.
|
|
176
|
+
*/
|
|
177
|
+
elementIds: string[];
|
|
178
|
+
/** Always `'audit'`. Forced by {@link normalizeFinding}, never trusted. */
|
|
179
|
+
severity: 'audit';
|
|
180
|
+
messageKey: string;
|
|
181
|
+
messageFallback?: string;
|
|
182
|
+
suggestion?: string;
|
|
183
|
+
suggestionFallback?: string;
|
|
184
|
+
backgroundId?: string;
|
|
185
|
+
/** The criterion this came from. */
|
|
186
|
+
criterionId: string;
|
|
187
|
+
/** The criterion's `version` at the time of the run. */
|
|
188
|
+
criterionVersion: number;
|
|
189
|
+
/** When the run that produced it finished, `Date.now()`. */
|
|
190
|
+
at: number;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* How a run ended.
|
|
194
|
+
*
|
|
195
|
+
* - `complete` — the provider settled every criterion.
|
|
196
|
+
* - `aborted` — the caller's `AbortSignal` fired. Findings produced before the
|
|
197
|
+
* abort are KEPT: an audit interrupted halfway has still said something true.
|
|
198
|
+
* - `error` — the provider threw or rejected. A host's broken build must not
|
|
199
|
+
* become a crash on a keystroke.
|
|
200
|
+
* - `unavailable` — nothing could answer. Either no provider is registered in
|
|
201
|
+
* this assembly (the standalone playground, where the whole of levels 1 and 2
|
|
202
|
+
* still works), or a registered one **declared itself unavailable** — an
|
|
203
|
+
* assistant behind an app-side feature flag, an exhausted quota, no model
|
|
204
|
+
* configured. The second case is passed through rather than folded into
|
|
205
|
+
* `complete`: `unavailable` is the count of users reaching for an audit this
|
|
206
|
+
* build cannot deliver, and it is worthless if a provider can opt out of it
|
|
207
|
+
* by answering politely.
|
|
208
|
+
* - `superseded` — a NEWER run for the same editor started while this one was
|
|
209
|
+
* in flight. Its `findings` are **always empty**: the answer described a
|
|
210
|
+
* board the user has already moved past, so it is dropped from the return
|
|
211
|
+
* value as well as from the signal, and a host that awaits without checking
|
|
212
|
+
* the status cannot render it. Never returned by {@link requestAudit}:
|
|
213
|
+
* superseding is the library's arbitration between two of its own calls, not
|
|
214
|
+
* something a provider can declare (one that returns it is read as
|
|
215
|
+
* `complete`).
|
|
216
|
+
*/
|
|
217
|
+
export type AuditStatus = 'complete' | 'aborted' | 'error' | 'unavailable' | 'superseded';
|
|
218
|
+
export interface AuditResult {
|
|
219
|
+
status: AuditStatus;
|
|
220
|
+
findings: readonly AuditFinding[];
|
|
221
|
+
/** Free-form diagnostic for `error`. Never rendered. */
|
|
222
|
+
reason?: string;
|
|
223
|
+
}
|
|
224
|
+
export interface AuditRunOptions {
|
|
225
|
+
onProgress?: (progress: AuditProgress) => void;
|
|
226
|
+
signal?: AbortSignal;
|
|
227
|
+
}
|
|
228
|
+
export interface AuditService {
|
|
229
|
+
/**
|
|
230
|
+
* Run the audit. The ONE method of this seam.
|
|
231
|
+
*
|
|
232
|
+
* Contract for hosts:
|
|
233
|
+
* - MUST honour `signal`: stop work and either resolve with what it has or
|
|
234
|
+
* reject with an `AbortError`. Both are accepted — {@link requestAudit}
|
|
235
|
+
* normalises them into `status: 'aborted'`.
|
|
236
|
+
* - MUST NOT mutate anything it is handed. `request` is the library's data.
|
|
237
|
+
* - SHOULD call `onProgress` as criteria settle. Purely advisory: a provider
|
|
238
|
+
* that never calls it is correct, just silent.
|
|
239
|
+
* - MAY reject. The library guards it anyway — see {@link requestAudit}.
|
|
240
|
+
*/
|
|
241
|
+
runAudit(request: AuditRequest, options: AuditRunOptions): Promise<AuditResult>;
|
|
242
|
+
}
|
|
243
|
+
export declare const AuditProvider: import("../../global/di/types.js").ServiceIdentifier<AuditService> & (<U extends AuditService = AuditService>(variant: import("../../global/di/types.js").ServiceVariant) => import("../../global/di/types.js").ServiceIdentifier<U>);
|
|
244
|
+
/**
|
|
245
|
+
* The ONLY way in. **No noop default is registered**, exactly as for
|
|
246
|
+
* `PivotPropertiesProvider`: absence is a *meaningful* state (standalone
|
|
247
|
+
* playground, unit tests, a labreapp build that has not wired its assistant),
|
|
248
|
+
* and making it the tested default is what keeps the degraded path honest.
|
|
249
|
+
*/
|
|
250
|
+
export declare function AuditExtension(service: AuditService): ExtensionType;
|
|
251
|
+
/** Multi-instance: one registered {@link AuditCriterion} per impl. */
|
|
252
|
+
export declare const AuditCriterionIdentifier: import("../../global/di/types.js").ServiceIdentifier<AuditCriterion> & (<U extends AuditCriterion = AuditCriterion>(variant: import("../../global/di/types.js").ServiceVariant) => import("../../global/di/types.js").ServiceIdentifier<U>);
|
|
253
|
+
/**
|
|
254
|
+
* Register a framework's audit criteria. Call it from the FLAG-GATED view
|
|
255
|
+
* extension, beside `ValidationRuleExtension`: criteria are tooling, so a
|
|
256
|
+
* disabled framework contributes none and an audit of its maps has nothing to
|
|
257
|
+
* ask about.
|
|
258
|
+
*
|
|
259
|
+
* ```ts
|
|
260
|
+
* context.register(AuditCriterionExtension(WARDLEY_AUDIT_CRITERIA));
|
|
261
|
+
* ```
|
|
262
|
+
*/
|
|
263
|
+
export declare function AuditCriterionExtension(criteria: readonly AuditCriterion[]): ExtensionType;
|
|
264
|
+
/** Every criterion registered in this editor assembly. */
|
|
265
|
+
export declare function getAuditCriteria(std: BlockStdScope): AuditCriterion[];
|
|
266
|
+
/**
|
|
267
|
+
* The guarded call every in-library consumer uses — the one place the provider
|
|
268
|
+
* contract is enforced rather than trusted.
|
|
269
|
+
*
|
|
270
|
+
* - **No provider registered** → `{ status: 'unavailable', findings: [] }`. A
|
|
271
|
+
* clean refusal, not a throw and not a crash: levels 1 and 2 are untouched
|
|
272
|
+
* and the caller reports nothing.
|
|
273
|
+
* - **The provider throws or rejects** → `{ status: 'error' }`, with the reason
|
|
274
|
+
* kept for logs and never rendered.
|
|
275
|
+
* - **The caller aborted** → `{ status: 'aborted' }`, keeping whatever findings
|
|
276
|
+
* the provider had already returned.
|
|
277
|
+
* - **`onProgress` throws** → swallowed. A broken progress bar must not kill
|
|
278
|
+
* the run that feeds it.
|
|
279
|
+
*
|
|
280
|
+
* ## The request is ISOLATED before it crosses (the outbound half)
|
|
281
|
+
*
|
|
282
|
+
* `normalizeFinding` exists because a provider is not believed on the way back.
|
|
283
|
+
* This is the same statement on the way out, and it was missing: the facts a
|
|
284
|
+
* collector assembles are not all fresh objects. `backgroundAxisFacts` returns
|
|
285
|
+
* `forward` straight from a module constant (`FORWARD` in
|
|
286
|
+
* `framework-background/facts.ts`) — `as const` is compile-time only and
|
|
287
|
+
* nothing is frozen — so every `frames[].axes[].forward` handed over WAS the
|
|
288
|
+
* very array the engine multiplies against in `evaluateOrientationAgainstAxis`.
|
|
289
|
+
* A provider writing into the facts it is given (normalising a vector in place,
|
|
290
|
+
* say) flipped the axis convention for the whole process, and correct arrows
|
|
291
|
+
* started reporting as violations on the canvas. That is precisely what this
|
|
292
|
+
* file's header declares impossible.
|
|
293
|
+
*
|
|
294
|
+
* `structuredClone` at the boundary fixes the whole class rather than that one
|
|
295
|
+
* field: no future fact can leak identity either, and the cost is a constraint
|
|
296
|
+
* the seam already claims (ADR 0006 § 5 — the request must be serializable, and
|
|
297
|
+
* a test round-trips it). Value-comparing tests were structurally blind to it;
|
|
298
|
+
* an identity assertion (`.toBe`) now guards it.
|
|
299
|
+
*/
|
|
300
|
+
export declare function requestAudit(std: BlockStdScope, request: AuditRequest, options?: AuditRunOptions): Promise<AuditResult>;
|