@formicoidea/labre-core 0.41.0 → 0.42.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/LICENSE +384 -0
- package/dist/_pkgs/affine-block-bookmark/bookmark-block.js +2 -2
- package/dist/_pkgs/affine-block-edgeless-text/edgeless-toolbar/config.js +7 -1
- package/dist/_pkgs/affine-block-embed/embed-figma-block/embed-figma-block.js +2 -1
- package/dist/_pkgs/affine-block-embed/embed-github-block/embed-github-block.js +2 -1
- package/dist/_pkgs/affine-block-embed/embed-iframe-block/consts.d.ts +2 -0
- package/dist/_pkgs/affine-block-embed/embed-iframe-block/consts.js +5 -0
- package/dist/_pkgs/affine-block-embed/embed-iframe-block/embed-iframe-block.d.ts +1 -0
- package/dist/_pkgs/affine-block-embed/embed-iframe-block/embed-iframe-block.js +30 -8
- package/dist/_pkgs/affine-block-embed/embed-iframe-block/utils.d.ts +8 -0
- package/dist/_pkgs/affine-block-embed/embed-iframe-block/utils.js +19 -0
- package/dist/_pkgs/affine-block-embed/embed-loom-block/embed-loom-block.js +2 -1
- package/dist/_pkgs/affine-block-embed/embed-youtube-block/embed-youtube-block.js +2 -1
- package/dist/_pkgs/affine-block-frame/frame-manager.js +1 -1
- package/dist/_pkgs/affine-block-frame/frame-tool.js +1 -1
- package/dist/_pkgs/affine-block-frame/frame-toolbar.js +6 -1
- package/dist/_pkgs/affine-block-list/list-keymap.js +7 -0
- package/dist/_pkgs/affine-block-note/note-keymap.js +7 -1
- package/dist/_pkgs/affine-block-paragraph/paragraph-keymap.js +7 -1
- package/dist/_pkgs/affine-block-root/commands/pivot-commands.js +1 -8
- package/dist/_pkgs/affine-block-root/commands/tag-commands.js +1 -8
- package/dist/_pkgs/affine-block-root/edgeless/edgeless-keyboard.d.ts +9 -0
- package/dist/_pkgs/affine-block-root/edgeless/edgeless-keyboard.js +51 -0
- package/dist/_pkgs/affine-block-root/edgeless/edgeless-root-block.d.ts +22 -0
- package/dist/_pkgs/affine-block-root/edgeless/edgeless-root-block.js +46 -0
- package/dist/_pkgs/affine-block-root/edgeless/utils/pinch-zoom.d.ts +21 -0
- package/dist/_pkgs/affine-block-root/edgeless/utils/pinch-zoom.js +24 -0
- package/dist/_pkgs/affine-block-root/edgeless/utils/query.js +8 -0
- package/dist/_pkgs/affine-block-root/keyboard/keymap.js +1 -16
- 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/export-svg/command.d.ts +23 -0
- package/dist/_pkgs/affine-block-surface/extensions/export-svg/command.js +89 -0
- package/dist/_pkgs/affine-block-surface/extensions/export-svg/index.d.ts +7 -0
- package/dist/_pkgs/affine-block-surface/extensions/export-svg/index.js +5 -0
- package/dist/_pkgs/affine-block-surface/extensions/export-svg/render.d.ts +41 -0
- package/dist/_pkgs/affine-block-surface/extensions/export-svg/render.js +70 -0
- package/dist/_pkgs/affine-block-surface/extensions/export-svg/svg-context.d.ts +49 -0
- package/dist/_pkgs/affine-block-surface/extensions/export-svg/svg-context.js +257 -0
- package/dist/_pkgs/affine-block-surface/extensions/export-svg/tagged-path.d.ts +16 -0
- package/dist/_pkgs/affine-block-surface/extensions/export-svg/tagged-path.js +24 -0
- package/dist/_pkgs/affine-block-surface/extensions/export-svg/toolbar.d.ts +24 -0
- package/dist/_pkgs/affine-block-surface/extensions/export-svg/toolbar.js +66 -0
- package/dist/_pkgs/affine-block-surface/extensions/index.d.ts +4 -0
- package/dist/_pkgs/affine-block-surface/extensions/index.js +4 -0
- package/dist/_pkgs/affine-block-surface/extensions/interchange-import.d.ts +66 -4
- package/dist/_pkgs/affine-block-surface/extensions/interchange-import.js +241 -11
- package/dist/_pkgs/affine-block-surface/extensions/interchange.d.ts +18 -0
- package/dist/_pkgs/affine-block-surface/extensions/legend-toolbar.d.ts +81 -0
- package/dist/_pkgs/affine-block-surface/extensions/legend-toolbar.js +81 -0
- package/dist/_pkgs/affine-block-surface/extensions/legend.d.ts +136 -0
- package/dist/_pkgs/affine-block-surface/extensions/legend.js +439 -0
- package/dist/_pkgs/affine-block-surface/extensions/reading-widget.d.ts +17 -3
- package/dist/_pkgs/affine-block-surface/extensions/reading-widget.js +35 -13
- package/dist/_pkgs/affine-block-surface/extensions/reading.d.ts +61 -1
- package/dist/_pkgs/affine-block-surface/extensions/reading.js +85 -39
- package/dist/_pkgs/affine-block-surface/extensions/record-action.d.ts +66 -0
- package/dist/_pkgs/affine-block-surface/extensions/record-action.js +145 -0
- package/dist/_pkgs/affine-block-surface/extensions/validation.d.ts +253 -28
- package/dist/_pkgs/affine-block-surface/extensions/validation.js +489 -41
- package/dist/_pkgs/affine-block-surface/framework-background/background-view.d.ts +115 -0
- package/dist/_pkgs/affine-block-surface/framework-background/background-view.js +185 -0
- package/dist/_pkgs/affine-block-surface/framework-background/index.d.ts +1 -0
- package/dist/_pkgs/affine-block-surface/framework-background/index.js +1 -0
- package/dist/_pkgs/affine-block-surface/framework-background/labels.d.ts +16 -1
- package/dist/_pkgs/affine-block-surface/framework-background/labels.js +31 -21
- package/dist/_pkgs/affine-block-surface/framework-background/renderer.js +29 -5
- package/dist/_pkgs/affine-block-surface/framework-background/stacking.d.ts +6 -4
- package/dist/_pkgs/affine-block-surface/framework-background/stacking.js +56 -8
- package/dist/_pkgs/affine-block-surface/renderer/canvas-renderer.d.ts +12 -0
- package/dist/_pkgs/affine-block-surface/renderer/canvas-renderer.js +15 -0
- package/dist/_pkgs/affine-block-surface/view.js +8 -1
- package/dist/_pkgs/affine-block-surface-ref/configs/slash-menu.js +1 -1
- package/dist/_pkgs/affine-components/color-picker/button.d.ts +56 -1
- package/dist/_pkgs/affine-components/color-picker/button.js +168 -23
- package/dist/_pkgs/affine-components/color-picker/framework-palette.d.ts +106 -0
- package/dist/_pkgs/affine-components/color-picker/framework-palette.js +177 -0
- package/dist/_pkgs/affine-components/color-picker/index.d.ts +2 -0
- package/dist/_pkgs/affine-components/color-picker/index.js +2 -0
- package/dist/_pkgs/affine-components/color-picker/palette-carousel.d.ts +85 -0
- package/dist/_pkgs/affine-components/color-picker/palette-carousel.js +440 -0
- package/dist/_pkgs/affine-components/edgeless-shape-color-picker/color-picker.d.ts +31 -1
- package/dist/_pkgs/affine-components/edgeless-shape-color-picker/color-picker.js +189 -63
- package/dist/_pkgs/affine-components/resource/resource.js +29 -16
- package/dist/_pkgs/affine-components/translations.d.ts +8 -0
- package/dist/_pkgs/affine-components/translations.js +17 -0
- package/dist/_pkgs/affine-foundation/view.js +2 -1
- package/dist/_pkgs/affine-gfx-brush/element-renderer.js +2 -2
- package/dist/_pkgs/affine-gfx-brush/toolbar/configs/brush.js +6 -1
- package/dist/_pkgs/affine-gfx-brush/toolbar/configs/highlighter.js +6 -1
- package/dist/_pkgs/affine-gfx-connector/connector-manager.d.ts +9 -1
- package/dist/_pkgs/affine-gfx-connector/connector-manager.js +61 -0
- package/dist/_pkgs/affine-gfx-connector/element-renderer/connector-dom/index.d.ts +7 -1
- package/dist/_pkgs/affine-gfx-connector/element-renderer/connector-dom/index.js +87 -17
- package/dist/_pkgs/affine-gfx-connector/element-renderer/index.js +78 -17
- package/dist/_pkgs/affine-gfx-connector/element-renderer/utils.d.ts +24 -2
- package/dist/_pkgs/affine-gfx-connector/element-renderer/utils.js +31 -8
- package/dist/_pkgs/affine-gfx-connector/text/edgeless-connector-label-editor.d.ts +124 -3
- package/dist/_pkgs/affine-gfx-connector/text/edgeless-connector-label-editor.js +216 -54
- package/dist/_pkgs/affine-gfx-connector/text/text.d.ts +13 -4
- package/dist/_pkgs/affine-gfx-connector/text/text.js +13 -44
- package/dist/_pkgs/affine-gfx-connector/toolbar/config.d.ts +56 -0
- package/dist/_pkgs/affine-gfx-connector/toolbar/config.js +72 -4
- package/dist/_pkgs/affine-gfx-connector/toolbar/hollow-endpoint-icons.d.ts +8 -0
- package/dist/_pkgs/affine-gfx-connector/toolbar/hollow-endpoint-icons.js +118 -0
- package/dist/_pkgs/affine-gfx-connector/view/view.d.ts +37 -1
- package/dist/_pkgs/affine-gfx-connector/view/view.js +97 -8
- package/dist/_pkgs/affine-gfx-group/command/group-api.js +1 -1
- package/dist/_pkgs/affine-gfx-group/store.js +0 -2
- package/dist/_pkgs/affine-gfx-group/translations.d.ts +9 -10
- package/dist/_pkgs/affine-gfx-group/translations.js +9 -13
- package/dist/_pkgs/affine-gfx-mindmap/templates/index.js +1 -1
- package/dist/_pkgs/affine-gfx-mindmap/toolbar/basket-elements.js +1 -1
- package/dist/_pkgs/affine-gfx-mindmap/toolbar/utils/import-mindmap.js +2 -2
- package/dist/_pkgs/affine-gfx-mindmap/translations.d.ts +1 -1
- package/dist/_pkgs/affine-gfx-mindmap/translations.js +1 -1
- package/dist/_pkgs/affine-gfx-shape/element-renderer/highlighter.js +2 -2
- package/dist/_pkgs/affine-gfx-shape/overlay/polygon-drawing-overlay.d.ts +6 -0
- package/dist/_pkgs/affine-gfx-shape/overlay/polygon-drawing-overlay.js +30 -1
- package/dist/_pkgs/affine-gfx-shape/polygon-tool.d.ts +20 -1
- package/dist/_pkgs/affine-gfx-shape/polygon-tool.js +9 -1
- package/dist/_pkgs/affine-gfx-shape/toolbar/config.js +6 -1
- package/dist/_pkgs/affine-gfx-shape/toolbar/palette-color-action.js +11 -1
- package/dist/_pkgs/affine-gfx-template/builtin/other.js +1 -1
- package/dist/_pkgs/affine-gfx-template/snapshot-from-action.js +32 -119
- package/dist/_pkgs/affine-gfx-template/toolbar/template-type.d.ts +1 -1
- package/dist/_pkgs/affine-gfx-text/dblclick-add-edgeless-text.d.ts +13 -1
- package/dist/_pkgs/affine-gfx-text/dblclick-add-edgeless-text.js +19 -4
- package/dist/_pkgs/affine-gfx-text/edgeless-text-editor.d.ts +41 -0
- package/dist/_pkgs/affine-gfx-text/edgeless-text-editor.js +57 -2
- package/dist/_pkgs/affine-gfx-text/toolbar/actions.d.ts +8 -1
- package/dist/_pkgs/affine-gfx-text/toolbar/actions.js +12 -2
- package/dist/_pkgs/affine-gfx-text/translations.d.ts +1 -0
- package/dist/_pkgs/affine-gfx-text/translations.js +2 -1
- package/dist/_pkgs/affine-inline-preset/markdown.js +5 -1
- package/dist/_pkgs/affine-model/consts/connector.d.ts +28 -2
- package/dist/_pkgs/affine-model/consts/connector.js +26 -0
- package/dist/_pkgs/affine-model/elements/bpmn/pool.js +1 -1
- package/dist/_pkgs/affine-model/elements/brush/brush.js +1 -1
- package/dist/_pkgs/affine-model/elements/c4/board.js +1 -1
- package/dist/_pkgs/affine-model/elements/c4/boundary.js +1 -1
- package/dist/_pkgs/affine-model/elements/connector/connector.d.ts +135 -0
- package/dist/_pkgs/affine-model/elements/connector/connector.js +246 -5
- package/dist/_pkgs/affine-model/elements/connector/end-label.d.ts +83 -0
- package/dist/_pkgs/affine-model/elements/connector/end-label.js +119 -0
- package/dist/_pkgs/affine-model/elements/connector/index.d.ts +1 -0
- package/dist/_pkgs/affine-model/elements/connector/index.js +1 -0
- package/dist/_pkgs/affine-model/elements/context-map/context-map.js +1 -1
- package/dist/_pkgs/affine-model/elements/core-domain/core-domain.d.ts +28 -0
- package/dist/_pkgs/affine-model/elements/core-domain/core-domain.js +129 -2
- package/dist/_pkgs/affine-model/elements/cynefin/cynefin.d.ts +8 -0
- package/dist/_pkgs/affine-model/elements/cynefin/cynefin.js +45 -2
- package/dist/_pkgs/affine-model/elements/edgy/board.js +1 -1
- package/dist/_pkgs/affine-model/elements/edgy/facets.js +1 -1
- package/dist/_pkgs/affine-model/elements/estuarine/estuarine.d.ts +6 -0
- package/dist/_pkgs/affine-model/elements/estuarine/estuarine.js +36 -2
- package/dist/_pkgs/affine-model/elements/event-storming/event-storming.d.ts +18 -7
- package/dist/_pkgs/affine-model/elements/event-storming/event-storming.js +23 -8
- package/dist/_pkgs/affine-model/elements/framework-background/background.d.ts +16 -0
- package/dist/_pkgs/affine-model/elements/framework-background/background.js +18 -0
- package/dist/_pkgs/affine-model/elements/highlighter/highlighter.js +1 -1
- package/dist/_pkgs/affine-model/elements/index.d.ts +8 -0
- package/dist/_pkgs/affine-model/elements/index.js +1 -0
- package/dist/_pkgs/affine-model/elements/shape/shape.js +1 -1
- package/dist/_pkgs/affine-model/elements/text/text.js +1 -1
- package/dist/_pkgs/affine-model/elements/uml/band.d.ts +39 -0
- package/dist/_pkgs/affine-model/elements/uml/band.js +31 -0
- package/dist/_pkgs/affine-model/elements/uml/diagram.d.ts +158 -0
- package/dist/_pkgs/affine-model/elements/uml/diagram.js +229 -0
- package/dist/_pkgs/affine-model/elements/uml/fragment.d.ts +161 -0
- package/dist/_pkgs/affine-model/elements/uml/fragment.js +205 -0
- package/dist/_pkgs/affine-model/elements/uml/index.d.ts +8 -0
- package/dist/_pkgs/affine-model/elements/uml/index.js +8 -0
- package/dist/_pkgs/affine-model/elements/uml/lifeline.d.ts +77 -0
- package/dist/_pkgs/affine-model/elements/uml/lifeline.js +89 -0
- package/dist/_pkgs/affine-model/elements/uml/node.d.ts +142 -0
- package/dist/_pkgs/affine-model/elements/uml/node.js +190 -0
- package/dist/_pkgs/affine-model/elements/uml/partition.d.ts +106 -0
- package/dist/_pkgs/affine-model/elements/uml/partition.js +172 -0
- package/dist/_pkgs/affine-model/elements/uml/region.d.ts +75 -0
- package/dist/_pkgs/affine-model/elements/uml/region.js +150 -0
- package/dist/_pkgs/affine-model/elements/uml/subject.d.ts +37 -0
- package/dist/_pkgs/affine-model/elements/uml/subject.js +108 -0
- package/dist/_pkgs/affine-model/elements/wardley/wardley.js +1 -1
- package/dist/_pkgs/affine-shared/services/embed-iframe/embed-iframe-config.d.ts +1 -0
- package/dist/_pkgs/affine-shared/services/font-loader/config.d.ts +7 -0
- package/dist/_pkgs/affine-shared/services/font-loader/config.js +43 -0
- package/dist/_pkgs/affine-shared/services/pivot-materiality-publisher.js +1 -9
- package/dist/_pkgs/affine-shared/services/telemetry-service/document-damage-watcher.d.ts +53 -0
- package/dist/_pkgs/affine-shared/services/telemetry-service/document-damage-watcher.js +95 -0
- package/dist/_pkgs/affine-shared/services/telemetry-service/index.d.ts +1 -0
- package/dist/_pkgs/affine-shared/services/telemetry-service/index.js +1 -0
- package/dist/_pkgs/affine-shared/services/telemetry-service/lifecycle.d.ts +26 -1
- package/dist/_pkgs/affine-shared/services/telemetry-service/telemetry-service.d.ts +2 -2
- package/dist/_pkgs/affine-shared/services/toolbar-service/command-action.d.ts +34 -0
- package/dist/_pkgs/affine-shared/services/toolbar-service/command-action.js +63 -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/translation-service/chrome.d.ts +77 -7
- package/dist/_pkgs/affine-shared/services/translation-service/chrome.js +97 -7
- package/dist/_pkgs/affine-shared/styles/index.d.ts +1 -0
- package/dist/_pkgs/affine-shared/styles/index.js +1 -0
- package/dist/_pkgs/affine-shared/styles/motion.d.ts +14 -0
- package/dist/_pkgs/affine-shared/styles/motion.js +38 -0
- package/dist/_pkgs/affine-shared/utils/event.d.ts +10 -0
- package/dist/_pkgs/affine-shared/utils/event.js +20 -0
- package/dist/_pkgs/affine-shared/utils/file/filesys.d.ts +16 -0
- package/dist/_pkgs/affine-shared/utils/file/filesys.js +25 -0
- package/dist/_pkgs/affine-shared/utils/index.d.ts +1 -0
- package/dist/_pkgs/affine-shared/utils/index.js +1 -0
- package/dist/_pkgs/affine-shared/utils/link-preview-refresh.d.ts +12 -0
- package/dist/_pkgs/affine-shared/utils/link-preview-refresh.js +13 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/artefact-catalogue-widget.d.ts +12 -4
- package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/artefact-catalogue-widget.js +27 -4
- package/dist/_pkgs/affine-widget-edgeless-toolbar/create-popper.js +13 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/index.d.ts +2 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/index.js +2 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/command-menu.d.ts +80 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/command-menu.js +270 -81
- package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/senior-menu-selection.d.ts +15 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/senior-menu-selection.js +15 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/panel/font-weight-and-style-panel.js +8 -1
- package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/artefact-ghost-overlay.d.ts +42 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/artefact-ghost-overlay.js +100 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/artefact-placement-tool.d.ts +100 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/artefact-placement-tool.js +274 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/index.d.ts +3 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/index.js +3 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/translate-created.d.ts +25 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/translate-created.js +67 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/view.js +5 -0
- package/dist/_pkgs/global/gfx/xywh.js +7 -0
- package/dist/_pkgs/std/extension/command-registry.d.ts +158 -1
- package/dist/_pkgs/std/extension/command-registry.js +22 -0
- package/dist/_pkgs/std/gfx/index.d.ts +1 -1
- package/dist/_pkgs/std/gfx/interactivity/gfx-view-event-handler.d.ts +12 -0
- package/dist/_pkgs/std/gfx/interactivity/gfx-view-event-handler.js +20 -1
- package/dist/_pkgs/std/gfx/interactivity/manager.d.ts +10 -0
- package/dist/_pkgs/std/gfx/interactivity/manager.js +12 -0
- package/dist/_pkgs/std/gfx/model/surface/element-model.js +12 -7
- package/dist/_pkgs/std/gfx/model/surface/surface-model.d.ts +56 -0
- package/dist/_pkgs/std/gfx/model/surface/surface-model.js +84 -3
- package/dist/_pkgs/std/gfx/view/view.d.ts +11 -2
- package/dist/_pkgs/std/gfx/view/view.js +16 -2
- package/dist/commands.d.ts +6 -0
- package/dist/commands.js +8 -1
- package/dist/frameworks.d.ts +9 -0
- package/dist/frameworks.js +19 -0
- package/dist/translations.js +16 -0
- package/package.json +9 -4
- package/dist/_pkgs/affine-gfx-group/group-watcher.d.ts +0 -1
- package/dist/_pkgs/affine-gfx-group/group-watcher.js +0 -20
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
2
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
3
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
4
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
5
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
6
|
+
var _, done = false;
|
|
7
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
8
|
+
var context = {};
|
|
9
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
10
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
11
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
12
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
13
|
+
if (kind === "accessor") {
|
|
14
|
+
if (result === void 0) continue;
|
|
15
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
16
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
17
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
18
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
19
|
+
}
|
|
20
|
+
else if (_ = accept(result)) {
|
|
21
|
+
if (kind === "field") initializers.unshift(_);
|
|
22
|
+
else descriptor[key] = _;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
26
|
+
done = true;
|
|
27
|
+
};
|
|
28
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
29
|
+
var useValue = arguments.length > 2;
|
|
30
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
31
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
32
|
+
}
|
|
33
|
+
return useValue ? value : void 0;
|
|
34
|
+
};
|
|
35
|
+
import { field } from '../../../std/gfx/index.js';
|
|
36
|
+
import { FrameworkBackgroundElementModel } from '../framework-background/index.js';
|
|
37
|
+
import { umlInNameBand } from './band.js';
|
|
38
|
+
/**
|
|
39
|
+
* Height of a region's NAME BAND — the strip its name is written in, in model
|
|
40
|
+
* units.
|
|
41
|
+
*
|
|
42
|
+
* Owned by the model for the reason {@link UML_PARTITION_BAND} is: the region's
|
|
43
|
+
* own hit test reads it, and `affine-model` cannot reach into the package where
|
|
44
|
+
* the declaration is resolved. The same 36 the partition uses, and deliberately
|
|
45
|
+
* so — the two are the same piece of furniture, a name written in a strip along
|
|
46
|
+
* the top of a transparent frame, and two numbers would drift.
|
|
47
|
+
*/
|
|
48
|
+
export const UML_REGION_BAND = 36;
|
|
49
|
+
/**
|
|
50
|
+
* A COMPOSITE STATE — the region of UML 2.5.1 §14.2.4: the rounded rectangle
|
|
51
|
+
* drawn round the sub-states of a state that has its own state machine inside
|
|
52
|
+
* it.
|
|
53
|
+
*
|
|
54
|
+
* A framework background, transparent like {@link UmlPartitionElementModel}: it
|
|
55
|
+
* is drawn OVER states that are already there, and membership is geometry at
|
|
56
|
+
* read time (R11).
|
|
57
|
+
*
|
|
58
|
+
* ## Why a composite state IS the region, rather than a state with regions in it
|
|
59
|
+
*
|
|
60
|
+
* The metamodel has two objects — a State that `isComposite`, and the Regions it
|
|
61
|
+
* owns — and the notation draws ONE: a rounded rectangle with the state's name
|
|
62
|
+
* at the top and the sub-machine inside (§14.2.4, Figure 14.6). A drawing tool
|
|
63
|
+
* that made the author place a `state` node and then a `umlRegion` inside it
|
|
64
|
+
* would be asking them to draw two things to get one picture, and would leave
|
|
65
|
+
* every rule with two elements to decide which of them the composite state is.
|
|
66
|
+
*
|
|
67
|
+
* So this element IS the composite state: it carries the name, it draws the
|
|
68
|
+
* rounded rectangle, and its sub-states sit inside it by geometry.
|
|
69
|
+
*
|
|
70
|
+
* ## The ceiling, stated out loud
|
|
71
|
+
*
|
|
72
|
+
* ORTHOGONAL regions — a composite state cut into concurrent regions by dashed
|
|
73
|
+
* separators (§14.2.4, Figure 14.8) — are NOT drawn. One region per composite
|
|
74
|
+
* state is what this element is; a second one is a phase-3 refinement, and it
|
|
75
|
+
* will arrive the way the BPMN pool's lanes did (an instance partition on the
|
|
76
|
+
* declaration) rather than as a field added here in a hurry.
|
|
77
|
+
*
|
|
78
|
+
* What it LOOKS like is declared, not coded: see `UML_REGION_FRAME` in
|
|
79
|
+
* `@labre/affine-gfx-uml`.
|
|
80
|
+
*/
|
|
81
|
+
let UmlRegionElementModel = (() => {
|
|
82
|
+
let _classSuper = FrameworkBackgroundElementModel;
|
|
83
|
+
let _name_decorators;
|
|
84
|
+
let _name_initializers = [];
|
|
85
|
+
let _name_extraInitializers = [];
|
|
86
|
+
let _resizeEnabled_decorators;
|
|
87
|
+
let _resizeEnabled_initializers = [];
|
|
88
|
+
let _resizeEnabled_extraInitializers = [];
|
|
89
|
+
let _rotate_decorators;
|
|
90
|
+
let _rotate_initializers = [];
|
|
91
|
+
let _rotate_extraInitializers = [];
|
|
92
|
+
let _xywh_decorators;
|
|
93
|
+
let _xywh_initializers = [];
|
|
94
|
+
let _xywh_extraInitializers = [];
|
|
95
|
+
return class UmlRegionElementModel extends _classSuper {
|
|
96
|
+
static {
|
|
97
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
98
|
+
_name_decorators = [field('State')];
|
|
99
|
+
_resizeEnabled_decorators = [field(true)];
|
|
100
|
+
_rotate_decorators = [field(0)];
|
|
101
|
+
_xywh_decorators = [field()];
|
|
102
|
+
__esDecorate(this, null, _name_decorators, { kind: "accessor", name: "name", static: false, private: false, access: { has: obj => "name" in obj, get: obj => obj.name, set: (obj, value) => { obj.name = value; } }, metadata: _metadata }, _name_initializers, _name_extraInitializers);
|
|
103
|
+
__esDecorate(this, null, _resizeEnabled_decorators, { kind: "accessor", name: "resizeEnabled", static: false, private: false, access: { has: obj => "resizeEnabled" in obj, get: obj => obj.resizeEnabled, set: (obj, value) => { obj.resizeEnabled = value; } }, metadata: _metadata }, _resizeEnabled_initializers, _resizeEnabled_extraInitializers);
|
|
104
|
+
__esDecorate(this, null, _rotate_decorators, { kind: "accessor", name: "rotate", static: false, private: false, access: { has: obj => "rotate" in obj, get: obj => obj.rotate, set: (obj, value) => { obj.rotate = value; } }, metadata: _metadata }, _rotate_initializers, _rotate_extraInitializers);
|
|
105
|
+
__esDecorate(this, null, _xywh_decorators, { kind: "accessor", name: "xywh", static: false, private: false, access: { has: obj => "xywh" in obj, get: obj => obj.xywh, set: (obj, value) => { obj.xywh = value; } }, metadata: _metadata }, _xywh_initializers, _xywh_extraInitializers);
|
|
106
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
107
|
+
}
|
|
108
|
+
get type() {
|
|
109
|
+
return 'umlRegion';
|
|
110
|
+
}
|
|
111
|
+
#name_accessor_storage = __runInitializers(this, _name_initializers, 'State');
|
|
112
|
+
/**
|
|
113
|
+
* `State`, not `Region`: this element IS the composite state on the page, and
|
|
114
|
+
* a fresh one that called itself a Region would be naming the metamodel
|
|
115
|
+
* object rather than the thing the author drew (see the header).
|
|
116
|
+
*/
|
|
117
|
+
get name() { return this.#name_accessor_storage; }
|
|
118
|
+
set name(value) { this.#name_accessor_storage = value; }
|
|
119
|
+
#resizeEnabled_accessor_storage = (__runInitializers(this, _name_extraInitializers), __runInitializers(this, _resizeEnabled_initializers, true));
|
|
120
|
+
get resizeEnabled() { return this.#resizeEnabled_accessor_storage; }
|
|
121
|
+
set resizeEnabled(value) { this.#resizeEnabled_accessor_storage = value; }
|
|
122
|
+
#rotate_accessor_storage = (__runInitializers(this, _resizeEnabled_extraInitializers), __runInitializers(this, _rotate_initializers, 0));
|
|
123
|
+
get rotate() { return this.#rotate_accessor_storage; }
|
|
124
|
+
set rotate(value) { this.#rotate_accessor_storage = value; }
|
|
125
|
+
#xywh_accessor_storage = (__runInitializers(this, _rotate_extraInitializers), __runInitializers(this, _xywh_initializers, '[0,0,520,320]'));
|
|
126
|
+
/** Room for a small sub-machine — an initial, two states and a final. */
|
|
127
|
+
get xywh() { return this.#xywh_accessor_storage; }
|
|
128
|
+
set xywh(value) { this.#xywh_accessor_storage = value; }
|
|
129
|
+
/**
|
|
130
|
+
* Picked by its BORDER and by its NAME BAND — the carve-out the diagram frame
|
|
131
|
+
* and the partition both make, and for the same reason: the band is the only
|
|
132
|
+
* part of the composite state that is the STATE rather than the sub-machine
|
|
133
|
+
* drawn inside it.
|
|
134
|
+
*
|
|
135
|
+
* Always the TOP edge: unlike a partition, a composite state has no
|
|
136
|
+
* orientation to turn — §14.2.4 writes its name across the top and nowhere
|
|
137
|
+
* else.
|
|
138
|
+
*/
|
|
139
|
+
includesPoint(x, y, options) {
|
|
140
|
+
if (super.includesPoint(x, y, options))
|
|
141
|
+
return true;
|
|
142
|
+
return umlInNameBand(this, 'top', UML_REGION_BAND, x, y);
|
|
143
|
+
}
|
|
144
|
+
constructor() {
|
|
145
|
+
super(...arguments);
|
|
146
|
+
__runInitializers(this, _xywh_extraInitializers);
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
})();
|
|
150
|
+
export { UmlRegionElementModel };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { SerializedXYWH } from '../../../global/gfx/index.js';
|
|
2
|
+
import type { FrameworkBackgroundProps } from '../framework-background/index.js';
|
|
3
|
+
import { FrameworkBackgroundElementModel } from '../framework-background/index.js';
|
|
4
|
+
export type UmlSubjectProps = FrameworkBackgroundProps & {
|
|
5
|
+
/** The subject name, written top-left — edited inline on dblclick. */
|
|
6
|
+
name?: string;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* A UML use case SUBJECT: the system boundary of UML 2.5.1 §18.1.4 — the plain
|
|
10
|
+
* rectangle drawn around the use cases a system offers, with its name written
|
|
11
|
+
* top-left and the actors left outside it.
|
|
12
|
+
*
|
|
13
|
+
* A framework background, so use cases are dropped on it and connectors never
|
|
14
|
+
* snap to it — but a TRANSPARENT one, like {@link C4BoundaryElementModel} and
|
|
15
|
+
* for the same reason: a subject is drawn over the diagram frame it sits on,
|
|
16
|
+
* and an opaque card would hide the use cases it encloses. Containment is
|
|
17
|
+
* visual only; membership, as for every board in the library, is computed from
|
|
18
|
+
* geometry at read time (R11).
|
|
19
|
+
*
|
|
20
|
+
* ## Why no variant, and no compartments
|
|
21
|
+
*
|
|
22
|
+
* The notation gives it none. §18.1.4 draws one rectangle with one name — there
|
|
23
|
+
* is no dashed flavour, no keyword line and no second tier — so, unlike a C4
|
|
24
|
+
* boundary (which draws system and container identically and tells them apart
|
|
25
|
+
* by the label), there is nothing here for a discriminant to discriminate. A
|
|
26
|
+
* field with one possible value is a field that can only ever go stale.
|
|
27
|
+
*
|
|
28
|
+
* What it LOOKS like is declared, not coded: see `UML_SUBJECT_BACKGROUND` in
|
|
29
|
+
* `@labre/affine-gfx-uml`.
|
|
30
|
+
*/
|
|
31
|
+
export declare class UmlSubjectElementModel extends FrameworkBackgroundElementModel<UmlSubjectProps> {
|
|
32
|
+
get type(): string;
|
|
33
|
+
accessor name: string;
|
|
34
|
+
accessor resizeEnabled: boolean;
|
|
35
|
+
accessor rotate: number;
|
|
36
|
+
accessor xywh: SerializedXYWH;
|
|
37
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
2
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
3
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
4
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
5
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
6
|
+
var _, done = false;
|
|
7
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
8
|
+
var context = {};
|
|
9
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
10
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
11
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
12
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
13
|
+
if (kind === "accessor") {
|
|
14
|
+
if (result === void 0) continue;
|
|
15
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
16
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
17
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
18
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
19
|
+
}
|
|
20
|
+
else if (_ = accept(result)) {
|
|
21
|
+
if (kind === "field") initializers.unshift(_);
|
|
22
|
+
else descriptor[key] = _;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
26
|
+
done = true;
|
|
27
|
+
};
|
|
28
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
29
|
+
var useValue = arguments.length > 2;
|
|
30
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
31
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
32
|
+
}
|
|
33
|
+
return useValue ? value : void 0;
|
|
34
|
+
};
|
|
35
|
+
import { field } from '../../../std/gfx/index.js';
|
|
36
|
+
import { FrameworkBackgroundElementModel } from '../framework-background/index.js';
|
|
37
|
+
/**
|
|
38
|
+
* A UML use case SUBJECT: the system boundary of UML 2.5.1 §18.1.4 — the plain
|
|
39
|
+
* rectangle drawn around the use cases a system offers, with its name written
|
|
40
|
+
* top-left and the actors left outside it.
|
|
41
|
+
*
|
|
42
|
+
* A framework background, so use cases are dropped on it and connectors never
|
|
43
|
+
* snap to it — but a TRANSPARENT one, like {@link C4BoundaryElementModel} and
|
|
44
|
+
* for the same reason: a subject is drawn over the diagram frame it sits on,
|
|
45
|
+
* and an opaque card would hide the use cases it encloses. Containment is
|
|
46
|
+
* visual only; membership, as for every board in the library, is computed from
|
|
47
|
+
* geometry at read time (R11).
|
|
48
|
+
*
|
|
49
|
+
* ## Why no variant, and no compartments
|
|
50
|
+
*
|
|
51
|
+
* The notation gives it none. §18.1.4 draws one rectangle with one name — there
|
|
52
|
+
* is no dashed flavour, no keyword line and no second tier — so, unlike a C4
|
|
53
|
+
* boundary (which draws system and container identically and tells them apart
|
|
54
|
+
* by the label), there is nothing here for a discriminant to discriminate. A
|
|
55
|
+
* field with one possible value is a field that can only ever go stale.
|
|
56
|
+
*
|
|
57
|
+
* What it LOOKS like is declared, not coded: see `UML_SUBJECT_BACKGROUND` in
|
|
58
|
+
* `@labre/affine-gfx-uml`.
|
|
59
|
+
*/
|
|
60
|
+
let UmlSubjectElementModel = (() => {
|
|
61
|
+
let _classSuper = FrameworkBackgroundElementModel;
|
|
62
|
+
let _name_decorators;
|
|
63
|
+
let _name_initializers = [];
|
|
64
|
+
let _name_extraInitializers = [];
|
|
65
|
+
let _resizeEnabled_decorators;
|
|
66
|
+
let _resizeEnabled_initializers = [];
|
|
67
|
+
let _resizeEnabled_extraInitializers = [];
|
|
68
|
+
let _rotate_decorators;
|
|
69
|
+
let _rotate_initializers = [];
|
|
70
|
+
let _rotate_extraInitializers = [];
|
|
71
|
+
let _xywh_decorators;
|
|
72
|
+
let _xywh_initializers = [];
|
|
73
|
+
let _xywh_extraInitializers = [];
|
|
74
|
+
return class UmlSubjectElementModel extends _classSuper {
|
|
75
|
+
static {
|
|
76
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
77
|
+
_name_decorators = [field('Subject')];
|
|
78
|
+
_resizeEnabled_decorators = [field(true)];
|
|
79
|
+
_rotate_decorators = [field(0)];
|
|
80
|
+
_xywh_decorators = [field()];
|
|
81
|
+
__esDecorate(this, null, _name_decorators, { kind: "accessor", name: "name", static: false, private: false, access: { has: obj => "name" in obj, get: obj => obj.name, set: (obj, value) => { obj.name = value; } }, metadata: _metadata }, _name_initializers, _name_extraInitializers);
|
|
82
|
+
__esDecorate(this, null, _resizeEnabled_decorators, { kind: "accessor", name: "resizeEnabled", static: false, private: false, access: { has: obj => "resizeEnabled" in obj, get: obj => obj.resizeEnabled, set: (obj, value) => { obj.resizeEnabled = value; } }, metadata: _metadata }, _resizeEnabled_initializers, _resizeEnabled_extraInitializers);
|
|
83
|
+
__esDecorate(this, null, _rotate_decorators, { kind: "accessor", name: "rotate", static: false, private: false, access: { has: obj => "rotate" in obj, get: obj => obj.rotate, set: (obj, value) => { obj.rotate = value; } }, metadata: _metadata }, _rotate_initializers, _rotate_extraInitializers);
|
|
84
|
+
__esDecorate(this, null, _xywh_decorators, { kind: "accessor", name: "xywh", static: false, private: false, access: { has: obj => "xywh" in obj, get: obj => obj.xywh, set: (obj, value) => { obj.xywh = value; } }, metadata: _metadata }, _xywh_initializers, _xywh_extraInitializers);
|
|
85
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
86
|
+
}
|
|
87
|
+
get type() {
|
|
88
|
+
return 'umlSubject';
|
|
89
|
+
}
|
|
90
|
+
#name_accessor_storage = __runInitializers(this, _name_initializers, 'Subject');
|
|
91
|
+
get name() { return this.#name_accessor_storage; }
|
|
92
|
+
set name(value) { this.#name_accessor_storage = value; }
|
|
93
|
+
#resizeEnabled_accessor_storage = (__runInitializers(this, _name_extraInitializers), __runInitializers(this, _resizeEnabled_initializers, true));
|
|
94
|
+
get resizeEnabled() { return this.#resizeEnabled_accessor_storage; }
|
|
95
|
+
set resizeEnabled(value) { this.#resizeEnabled_accessor_storage = value; }
|
|
96
|
+
#rotate_accessor_storage = (__runInitializers(this, _resizeEnabled_extraInitializers), __runInitializers(this, _rotate_initializers, 0));
|
|
97
|
+
get rotate() { return this.#rotate_accessor_storage; }
|
|
98
|
+
set rotate(value) { this.#rotate_accessor_storage = value; }
|
|
99
|
+
#xywh_accessor_storage = (__runInitializers(this, _rotate_extraInitializers), __runInitializers(this, _xywh_initializers, '[0,0,520,360]'));
|
|
100
|
+
get xywh() { return this.#xywh_accessor_storage; }
|
|
101
|
+
set xywh(value) { this.#xywh_accessor_storage = value; }
|
|
102
|
+
constructor() {
|
|
103
|
+
super(...arguments);
|
|
104
|
+
__runInitializers(this, _xywh_extraInitializers);
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
})();
|
|
108
|
+
export { UmlSubjectElementModel };
|
|
@@ -138,7 +138,7 @@ let WardleyBackgroundElementModel = (() => {
|
|
|
138
138
|
_showCornerLabels_decorators = [field(true)];
|
|
139
139
|
_showVisibilityLabels_decorators = [field(true)];
|
|
140
140
|
_rotate_decorators = [field(0)];
|
|
141
|
-
_xywh_decorators = [field()];
|
|
141
|
+
_xywh_decorators = [field('[0,0,0,0]')];
|
|
142
142
|
__esDecorate(this, null, _banded_decorators, { kind: "accessor", name: "banded", static: false, private: false, access: { has: obj => "banded" in obj, get: obj => obj.banded, set: (obj, value) => { obj.banded = value; } }, metadata: _metadata }, _banded_initializers, _banded_extraInitializers);
|
|
143
143
|
__esDecorate(this, null, _variant_decorators, { kind: "accessor", name: "variant", static: false, private: false, access: { has: obj => "variant" in obj, get: obj => obj.variant, set: (obj, value) => { obj.variant = value; } }, metadata: _metadata }, _variant_initializers, _variant_extraInitializers);
|
|
144
144
|
__esDecorate(this, null, _showGradient_decorators, { kind: "accessor", name: "showGradient", static: false, private: false, access: { has: obj => "showGradient" in obj, get: obj => obj.showGradient, set: (obj, value) => { obj.showGradient = value; } }, metadata: _metadata }, _showGradient_initializers, _showGradient_extraInitializers);
|
|
@@ -16,5 +16,12 @@ export declare const fontConfigSchema: z.ZodObject<{
|
|
|
16
16
|
weight: string;
|
|
17
17
|
}>;
|
|
18
18
|
export type FontConfig = z.infer<typeof fontConfigSchema>;
|
|
19
|
+
/**
|
|
20
|
+
* The AFFiNE-hosted mirror. It carries strictly fewer files than the community
|
|
21
|
+
* list: `cdn.affine.pro` answers 404 for every `Inter-Bold`, `Poppins-Bold`
|
|
22
|
+
* and `BebasNeue-Bold` spelling, so those three families offer no 700 weight
|
|
23
|
+
* here. The Kalam / Satoshi / Lora `SemiBold` entries below already point at
|
|
24
|
+
* the 700 file — those families ship a single heavy face, not two.
|
|
25
|
+
*/
|
|
19
26
|
export declare const AffineCanvasTextFonts: FontConfig[];
|
|
20
27
|
export declare const CommunityCanvasTextFonts: FontConfig[];
|
|
@@ -6,6 +6,13 @@ export const fontConfigSchema = z.object({
|
|
|
6
6
|
url: z.string(),
|
|
7
7
|
style: z.string(),
|
|
8
8
|
});
|
|
9
|
+
/**
|
|
10
|
+
* The AFFiNE-hosted mirror. It carries strictly fewer files than the community
|
|
11
|
+
* list: `cdn.affine.pro` answers 404 for every `Inter-Bold`, `Poppins-Bold`
|
|
12
|
+
* and `BebasNeue-Bold` spelling, so those three families offer no 700 weight
|
|
13
|
+
* here. The Kalam / Satoshi / Lora `SemiBold` entries below already point at
|
|
14
|
+
* the 700 file — those families ship a single heavy face, not two.
|
|
15
|
+
*/
|
|
9
16
|
export const AffineCanvasTextFonts = [
|
|
10
17
|
// Inter, https://fonts.cdnfonts.com/css/inter?styles=29139,29134,29135,29136,29140,29141
|
|
11
18
|
{
|
|
@@ -221,13 +228,27 @@ export const CommunityCanvasTextFonts = [
|
|
|
221
228
|
weight: FontWeight.Regular,
|
|
222
229
|
style: FontStyle.Italic,
|
|
223
230
|
},
|
|
231
|
+
{
|
|
232
|
+
font: FontFamily.Inter,
|
|
233
|
+
url: 'https://fonts.cdnfonts.com/s/19795/Inter-Bold.woff',
|
|
234
|
+
weight: FontWeight.Bold,
|
|
235
|
+
style: FontStyle.Normal,
|
|
236
|
+
},
|
|
224
237
|
{
|
|
225
238
|
font: FontFamily.Inter,
|
|
226
239
|
url: 'https://fonts.cdnfonts.com/s/19795/Inter-SemiBoldItalic.woff',
|
|
227
240
|
weight: FontWeight.SemiBold,
|
|
228
241
|
style: FontStyle.Italic,
|
|
229
242
|
},
|
|
243
|
+
{
|
|
244
|
+
font: FontFamily.Inter,
|
|
245
|
+
url: 'https://fonts.cdnfonts.com/s/19795/Inter-BoldItalic.woff',
|
|
246
|
+
weight: FontWeight.Bold,
|
|
247
|
+
style: FontStyle.Italic,
|
|
248
|
+
},
|
|
230
249
|
// Kalam, https://fonts.cdnfonts.com/css/kalam?styles=15166,170689,170687
|
|
250
|
+
// Kalam ships no 600 face: its `SemiBold` entry below already IS the 700
|
|
251
|
+
// file, so the family offers one heavy weight, not two.
|
|
231
252
|
{
|
|
232
253
|
font: FontFamily.Kalam,
|
|
233
254
|
url: 'https://fonts.cdnfonts.com/s/13130/Kalam-Light.woff',
|
|
@@ -308,6 +329,12 @@ export const CommunityCanvasTextFonts = [
|
|
|
308
329
|
weight: FontWeight.SemiBold,
|
|
309
330
|
style: FontStyle.Normal,
|
|
310
331
|
},
|
|
332
|
+
{
|
|
333
|
+
font: FontFamily.Poppins,
|
|
334
|
+
url: 'https://fonts.cdnfonts.com/s/16009/Poppins-Bold.woff',
|
|
335
|
+
weight: FontWeight.Bold,
|
|
336
|
+
style: FontStyle.Normal,
|
|
337
|
+
},
|
|
311
338
|
{
|
|
312
339
|
font: FontFamily.Poppins,
|
|
313
340
|
url: 'https://fonts.cdnfonts.com/s/16009/Poppins-LightItalic.woff',
|
|
@@ -326,7 +353,15 @@ export const CommunityCanvasTextFonts = [
|
|
|
326
353
|
weight: FontWeight.SemiBold,
|
|
327
354
|
style: FontStyle.Italic,
|
|
328
355
|
},
|
|
356
|
+
{
|
|
357
|
+
font: FontFamily.Poppins,
|
|
358
|
+
url: 'https://fonts.cdnfonts.com/s/16009/Poppins-BoldItalic.woff',
|
|
359
|
+
weight: FontWeight.Bold,
|
|
360
|
+
style: FontStyle.Italic,
|
|
361
|
+
},
|
|
329
362
|
// Lora, https://fonts.cdnfonts.com/css/lora-4?styles=50357,50356,50354,50355
|
|
363
|
+
// Lora ships no 600 face either: as with Kalam and Satoshi, the entries
|
|
364
|
+
// below map the 700 file onto `SemiBold` and the family has a single heavy.
|
|
330
365
|
{
|
|
331
366
|
font: FontFamily.Lora,
|
|
332
367
|
url: 'https://fonts.cdnfonts.com/s/29883/Lora-Regular.woff',
|
|
@@ -364,6 +399,14 @@ export const CommunityCanvasTextFonts = [
|
|
|
364
399
|
weight: FontWeight.Regular,
|
|
365
400
|
style: FontStyle.Normal,
|
|
366
401
|
},
|
|
402
|
+
{
|
|
403
|
+
font: FontFamily.BebasNeue,
|
|
404
|
+
// The bold face is the one Bebas Neue file whose name is spelled with a
|
|
405
|
+
// space, like the light one above and unlike the regular one.
|
|
406
|
+
url: 'https://fonts.cdnfonts.com/s/14902/BebasNeue%20Bold.woff',
|
|
407
|
+
weight: FontWeight.Bold,
|
|
408
|
+
style: FontStyle.Normal,
|
|
409
|
+
},
|
|
367
410
|
// OrelegaOne, https://fonts.cdnfonts.com/css/orelega-one?styles=148618
|
|
368
411
|
{
|
|
369
412
|
font: FontFamily.OrelegaOne,
|
|
@@ -42,8 +42,7 @@
|
|
|
42
42
|
* materiality by scanning `collectPivotOccurrences`. Derived materialities are
|
|
43
43
|
* a cache of the boards, never a second original.
|
|
44
44
|
*/
|
|
45
|
-
import { LifeCycleWatcher } from '../../std/index.js';
|
|
46
|
-
import { FRAMEWORK_IDS } from '../../std/index.js';
|
|
45
|
+
import { frameworkOfRole, LifeCycleWatcher } from '../../std/index.js';
|
|
47
46
|
import { GfxControllerIdentifier, isPivotBound, readElementTags, } from '../../std/gfx/index.js';
|
|
48
47
|
import { effect } from '@preact/signals-core';
|
|
49
48
|
import { PivotPropertiesProvider, publishOccurrenceMaterialities, } from './pivot-properties-service.js';
|
|
@@ -51,13 +50,6 @@ import { PivotPropertiesProvider, publishOccurrenceMaterialities, } from './pivo
|
|
|
51
50
|
const MATERIAL_PROPS = new Set(['tags', 'role', 'pivotDocId']);
|
|
52
51
|
const touchesMateriality = (payload) => Object.keys(payload.props).some(key => MATERIAL_PROPS.has(key)) ||
|
|
53
52
|
Object.keys(payload.oldValues).some(key => MATERIAL_PROPS.has(key));
|
|
54
|
-
/** `'wardley:component'` → `'wardley'`, when that names a real framework. */
|
|
55
|
-
function frameworkOfRole(role) {
|
|
56
|
-
const namespace = role?.split(':')[0];
|
|
57
|
-
return FRAMEWORK_IDS.includes(namespace ?? '')
|
|
58
|
-
? namespace
|
|
59
|
-
: undefined;
|
|
60
|
-
}
|
|
61
53
|
/**
|
|
62
54
|
* `(pivotDocId, elementId)` — the host's primary key for a derived materiality.
|
|
63
55
|
*
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { LifeCycleWatcher } from '../../../std/index.js';
|
|
2
|
+
import type { SurfaceElementDamage, SurfaceElementDamageReport } from '../../../std/gfx/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* The whole surface API this watcher touches, named structurally on purpose:
|
|
5
|
+
* it is also the entire harness a unit spec has to stand up, and it keeps the
|
|
6
|
+
* watcher from caring which block flavour grew a `damagedElements` map next.
|
|
7
|
+
*/
|
|
8
|
+
export type DamageReportingSurface = {
|
|
9
|
+
readonly damagedElements: ReadonlyMap<string, SurfaceElementDamage>;
|
|
10
|
+
readonly elementDamaged: {
|
|
11
|
+
subscribe(next: (report: SurfaceElementDamageReport) => void): {
|
|
12
|
+
unsubscribe(): void;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
export declare function isDamageReportingSurface(model: unknown): model is DamageReportingSurface;
|
|
17
|
+
/**
|
|
18
|
+
* Reports `DocumentDamaged` — how many documents open carrying elements the
|
|
19
|
+
* editor cannot draw (#318, follow-up of #321).
|
|
20
|
+
*
|
|
21
|
+
* **Why a state read and not only a subscription.** The surface builds its
|
|
22
|
+
* element models when the block model is created, well before any view or
|
|
23
|
+
* `LifeCycleWatcher` is mounted, so every element the document OPENED with is
|
|
24
|
+
* already damaged by the time this watcher exists. It therefore reads
|
|
25
|
+
* `surface.damagedElements` once at mount for the opening batch, and only then
|
|
26
|
+
* subscribes for what a remote sync delivers afterwards.
|
|
27
|
+
*
|
|
28
|
+
* **One event per batch, elements deduplicated for the watcher's lifetime.**
|
|
29
|
+
* A sync can deliver several damaged elements in one go; sending one event per
|
|
30
|
+
* element would make "how many damaged documents" unreadable, and re-sending an
|
|
31
|
+
* id already counted would make it wrong. Later arrivals are therefore
|
|
32
|
+
* aggregated in a microtask and filtered against what was already reported.
|
|
33
|
+
*
|
|
34
|
+
* `page` is left unset here for the reason `BlockLifecycleTelemetryWatcher`
|
|
35
|
+
* leaves it unset: this is store plumbing, it has no editor mode to state, and
|
|
36
|
+
* a damaged document is damaged in either one.
|
|
37
|
+
*
|
|
38
|
+
* Inert when no `TelemetryService` is injected.
|
|
39
|
+
*/
|
|
40
|
+
export declare class DocumentDamageTelemetryWatcher extends LifeCycleWatcher {
|
|
41
|
+
static readonly key = "document-damage-telemetry";
|
|
42
|
+
/** Ids already counted, so a document never counts an element twice. */
|
|
43
|
+
private readonly _counted;
|
|
44
|
+
private readonly _pending;
|
|
45
|
+
private _flushScheduled;
|
|
46
|
+
private _stopped;
|
|
47
|
+
private _subscriptions;
|
|
48
|
+
private _telemetry?;
|
|
49
|
+
mounted(): void;
|
|
50
|
+
unmounted(): void;
|
|
51
|
+
private _schedule;
|
|
52
|
+
private _flush;
|
|
53
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { LifeCycleWatcher } from '../../../std/index.js';
|
|
2
|
+
import { TelemetryProvider, } from './telemetry-service.js';
|
|
3
|
+
export function isDamageReportingSurface(model) {
|
|
4
|
+
const candidate = model;
|
|
5
|
+
return (!!candidate &&
|
|
6
|
+
candidate.damagedElements instanceof Map &&
|
|
7
|
+
typeof candidate.elementDamaged?.subscribe === 'function');
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Reports `DocumentDamaged` — how many documents open carrying elements the
|
|
11
|
+
* editor cannot draw (#318, follow-up of #321).
|
|
12
|
+
*
|
|
13
|
+
* **Why a state read and not only a subscription.** The surface builds its
|
|
14
|
+
* element models when the block model is created, well before any view or
|
|
15
|
+
* `LifeCycleWatcher` is mounted, so every element the document OPENED with is
|
|
16
|
+
* already damaged by the time this watcher exists. It therefore reads
|
|
17
|
+
* `surface.damagedElements` once at mount for the opening batch, and only then
|
|
18
|
+
* subscribes for what a remote sync delivers afterwards.
|
|
19
|
+
*
|
|
20
|
+
* **One event per batch, elements deduplicated for the watcher's lifetime.**
|
|
21
|
+
* A sync can deliver several damaged elements in one go; sending one event per
|
|
22
|
+
* element would make "how many damaged documents" unreadable, and re-sending an
|
|
23
|
+
* id already counted would make it wrong. Later arrivals are therefore
|
|
24
|
+
* aggregated in a microtask and filtered against what was already reported.
|
|
25
|
+
*
|
|
26
|
+
* `page` is left unset here for the reason `BlockLifecycleTelemetryWatcher`
|
|
27
|
+
* leaves it unset: this is store plumbing, it has no editor mode to state, and
|
|
28
|
+
* a damaged document is damaged in either one.
|
|
29
|
+
*
|
|
30
|
+
* Inert when no `TelemetryService` is injected.
|
|
31
|
+
*/
|
|
32
|
+
export class DocumentDamageTelemetryWatcher extends LifeCycleWatcher {
|
|
33
|
+
constructor() {
|
|
34
|
+
super(...arguments);
|
|
35
|
+
/** Ids already counted, so a document never counts an element twice. */
|
|
36
|
+
this._counted = new Set();
|
|
37
|
+
this._pending = new Set();
|
|
38
|
+
this._flushScheduled = false;
|
|
39
|
+
this._stopped = false;
|
|
40
|
+
this._subscriptions = [];
|
|
41
|
+
}
|
|
42
|
+
static { this.key = 'document-damage-telemetry'; }
|
|
43
|
+
mounted() {
|
|
44
|
+
const telemetry = this.std.getOptional(TelemetryProvider);
|
|
45
|
+
if (!telemetry)
|
|
46
|
+
return;
|
|
47
|
+
this._telemetry = telemetry;
|
|
48
|
+
// Structural, not `instanceof SurfaceBlockModel`: the watcher needs two
|
|
49
|
+
// members, not a class, and the guard is what states that.
|
|
50
|
+
const surfaces = this.std.store.getModelsByFlavour('affine:surface').filter(isDamageReportingSurface);
|
|
51
|
+
for (const surface of surfaces) {
|
|
52
|
+
for (const id of surface.damagedElements.keys())
|
|
53
|
+
this._pending.add(id);
|
|
54
|
+
this._subscriptions.push(surface.elementDamaged.subscribe(({ id }) => {
|
|
55
|
+
this._pending.add(id);
|
|
56
|
+
this._schedule();
|
|
57
|
+
}));
|
|
58
|
+
}
|
|
59
|
+
// The opening batch, synchronously: it is complete already, and nothing
|
|
60
|
+
// gained by making the host wait a tick for the number it opened with.
|
|
61
|
+
this._flush();
|
|
62
|
+
}
|
|
63
|
+
unmounted() {
|
|
64
|
+
this._stopped = true;
|
|
65
|
+
for (const subscription of this._subscriptions)
|
|
66
|
+
subscription.unsubscribe();
|
|
67
|
+
this._subscriptions = [];
|
|
68
|
+
this._pending.clear();
|
|
69
|
+
this._counted.clear();
|
|
70
|
+
this._telemetry = undefined;
|
|
71
|
+
super.unmounted();
|
|
72
|
+
}
|
|
73
|
+
_schedule() {
|
|
74
|
+
if (this._flushScheduled)
|
|
75
|
+
return;
|
|
76
|
+
this._flushScheduled = true;
|
|
77
|
+
queueMicrotask(() => {
|
|
78
|
+
this._flushScheduled = false;
|
|
79
|
+
if (!this._stopped)
|
|
80
|
+
this._flush();
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
_flush() {
|
|
84
|
+
const fresh = [...this._pending].filter(id => !this._counted.has(id));
|
|
85
|
+
this._pending.clear();
|
|
86
|
+
if (fresh.length === 0)
|
|
87
|
+
return;
|
|
88
|
+
for (const id of fresh)
|
|
89
|
+
this._counted.add(id);
|
|
90
|
+
this._telemetry?.track('DocumentDamaged', {
|
|
91
|
+
reason: 'missing-xywh',
|
|
92
|
+
elementCount: fresh.length,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
@@ -34,7 +34,7 @@ export type BlockLifecycleEvents = {
|
|
|
34
34
|
* manipulated ('background:classic', 'node:market', 'connector:link'…).
|
|
35
35
|
*/
|
|
36
36
|
export interface FrameworkElementEvent extends TelemetryEvent {
|
|
37
|
-
framework: 'wardley' | 'edgy' | 'cynefin' | 'bpmn' | 'c4' | 'event-storming' | 'core-domain' | 'context-map';
|
|
37
|
+
framework: 'wardley' | 'edgy' | 'cynefin' | 'bpmn' | 'c4' | 'event-storming' | 'core-domain' | 'context-map' | 'uml';
|
|
38
38
|
element: string;
|
|
39
39
|
}
|
|
40
40
|
/**
|
|
@@ -295,3 +295,28 @@ export type AuditEvents = {
|
|
|
295
295
|
MapAuditCompleted: MapAuditCompletedEvent;
|
|
296
296
|
MapAuditInterrupted: MapAuditInterruptedEvent;
|
|
297
297
|
};
|
|
298
|
+
/**
|
|
299
|
+
* A document was opened carrying elements the editor cannot draw — today, a
|
|
300
|
+
* surface element whose `xywh` never arrived (#318), which reads a zero-size
|
|
301
|
+
* bound and paints nothing.
|
|
302
|
+
*
|
|
303
|
+
* **Not a lifecycle event and not a user gesture: a health event.** The block
|
|
304
|
+
* taxonomy describes what someone did; this one describes what a document IS
|
|
305
|
+
* when it lands, which no existing event can say. It was already reported as a
|
|
306
|
+
* `console.warn` by the surface model — invisible to analytics, and therefore
|
|
307
|
+
* unable to answer the one question that matters after the app-side
|
|
308
|
+
* persistence fix: *how many documents open damaged*. The metric the dashboard
|
|
309
|
+
* reads is the count of DISTINCT documents, not of events.
|
|
310
|
+
*
|
|
311
|
+
* Counts only. Never an element id, never a type name, never board content.
|
|
312
|
+
*/
|
|
313
|
+
export interface DocumentDamagedEvent extends TelemetryEvent {
|
|
314
|
+
page?: 'doc editor' | 'whiteboard editor';
|
|
315
|
+
/** What is wrong with the elements this event counts. */
|
|
316
|
+
reason: 'missing-xywh';
|
|
317
|
+
/** How many damaged elements this batch found. */
|
|
318
|
+
elementCount: number;
|
|
319
|
+
}
|
|
320
|
+
export type DocumentHealthEvents = {
|
|
321
|
+
DocumentDamaged: DocumentDamagedEvent;
|
|
322
|
+
};
|