@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,205 @@
|
|
|
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 combined fragment's OPERATOR BAND — the strip across its top the
|
|
40
|
+
* pentagon tag is drawn in, in model units.
|
|
41
|
+
*
|
|
42
|
+
* Owned by the model for the reason {@link UML_FRAME_BAND_HEIGHT} is: the
|
|
43
|
+
* fragment's own hit test reads it (a fragment is clickable by its tag strip as
|
|
44
|
+
* well as by its border), and `affine-model` cannot reach into
|
|
45
|
+
* `affine-block-surface` where the declaration is resolved.
|
|
46
|
+
*
|
|
47
|
+
* The diagram frame's own 44, and deliberately: §17.6.4 draws the operator in
|
|
48
|
+
* the very same cut-corner pentagon Annex A draws a frame heading in — it IS a
|
|
49
|
+
* frame, nested in another one — and two numbers for one piece of furniture
|
|
50
|
+
* would drift.
|
|
51
|
+
*/
|
|
52
|
+
export const UML_FRAGMENT_BAND = 44;
|
|
53
|
+
/**
|
|
54
|
+
* A COMBINED FRAGMENT — the rectangle drawn round part of a sequence diagram
|
|
55
|
+
* with an operator in its corner (UML 2.5.1 §17.6.4), and, under the `ref`
|
|
56
|
+
* operator, the InteractionUse of §17.7.4.
|
|
57
|
+
*
|
|
58
|
+
* A framework background, and a TRANSPARENT one, like
|
|
59
|
+
* {@link UmlSubjectElementModel} and {@link UmlPartitionElementModel}: it is
|
|
60
|
+
* drawn OVER lifelines and messages that are already there, and an opaque card
|
|
61
|
+
* would hide the very conversation it is qualifying. Membership — which
|
|
62
|
+
* messages are inside the `alt`, which lifelines it covers — is geometry at
|
|
63
|
+
* read time (R11), never a stored list.
|
|
64
|
+
*
|
|
65
|
+
* ## Why the operator is a field and the operands are not elements
|
|
66
|
+
*
|
|
67
|
+
* The operator IS the fragment: `alt` and `loop` are the same rectangle saying
|
|
68
|
+
* two entirely different things, and nothing in the picture distinguishes them
|
|
69
|
+
* but the word. So it is stored, with `alt` as the default — the fragment an
|
|
70
|
+
* architect reaches for first, and the one §17.6.4 opens with.
|
|
71
|
+
*
|
|
72
|
+
* The operands are bands of that one rectangle, and they follow the BPMN pool's
|
|
73
|
+
* lanes exactly: an optional flat array, `undefined` rather than `[]` until the
|
|
74
|
+
* first one is added, so a fragment with a single operand stays byte-identical
|
|
75
|
+
* to one written before the field existed. The trade the pool's own note
|
|
76
|
+
* states applies here unchanged — two peers reordering the operands at the same
|
|
77
|
+
* moment resolve last-write-wins, one whole list winning over the other — and
|
|
78
|
+
* it is stated so it is reviewed rather than discovered.
|
|
79
|
+
*
|
|
80
|
+
* What it LOOKS like is declared, not coded: see `UML_FRAGMENT_FRAME` in
|
|
81
|
+
* `@labre/affine-gfx-uml`.
|
|
82
|
+
*/
|
|
83
|
+
let UmlFragmentElementModel = (() => {
|
|
84
|
+
let _classSuper = FrameworkBackgroundElementModel;
|
|
85
|
+
let _operator_decorators;
|
|
86
|
+
let _operator_initializers = [];
|
|
87
|
+
let _operator_extraInitializers = [];
|
|
88
|
+
let _name_decorators;
|
|
89
|
+
let _name_initializers = [];
|
|
90
|
+
let _name_extraInitializers = [];
|
|
91
|
+
let _resizeEnabled_decorators;
|
|
92
|
+
let _resizeEnabled_initializers = [];
|
|
93
|
+
let _resizeEnabled_extraInitializers = [];
|
|
94
|
+
let _rotate_decorators;
|
|
95
|
+
let _rotate_initializers = [];
|
|
96
|
+
let _rotate_extraInitializers = [];
|
|
97
|
+
let _xywh_decorators;
|
|
98
|
+
let _xywh_initializers = [];
|
|
99
|
+
let _xywh_extraInitializers = [];
|
|
100
|
+
let _operands_decorators;
|
|
101
|
+
let _operands_initializers = [];
|
|
102
|
+
let _operands_extraInitializers = [];
|
|
103
|
+
return class UmlFragmentElementModel extends _classSuper {
|
|
104
|
+
static {
|
|
105
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
106
|
+
_operator_decorators = [field('alt')];
|
|
107
|
+
_name_decorators = [field('')];
|
|
108
|
+
_resizeEnabled_decorators = [field(true)];
|
|
109
|
+
_rotate_decorators = [field(0)];
|
|
110
|
+
_xywh_decorators = [field()];
|
|
111
|
+
_operands_decorators = [field()];
|
|
112
|
+
__esDecorate(this, null, _operator_decorators, { kind: "accessor", name: "operator", static: false, private: false, access: { has: obj => "operator" in obj, get: obj => obj.operator, set: (obj, value) => { obj.operator = value; } }, metadata: _metadata }, _operator_initializers, _operator_extraInitializers);
|
|
113
|
+
__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);
|
|
114
|
+
__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);
|
|
115
|
+
__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);
|
|
116
|
+
__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);
|
|
117
|
+
__esDecorate(this, null, _operands_decorators, { kind: "accessor", name: "operands", static: false, private: false, access: { has: obj => "operands" in obj, get: obj => obj.operands, set: (obj, value) => { obj.operands = value; } }, metadata: _metadata }, _operands_initializers, _operands_extraInitializers);
|
|
118
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
119
|
+
}
|
|
120
|
+
get type() {
|
|
121
|
+
return 'umlFragment';
|
|
122
|
+
}
|
|
123
|
+
#operator_accessor_storage = __runInitializers(this, _operator_initializers, 'alt');
|
|
124
|
+
/**
|
|
125
|
+
* The operator — REQUIRED, with `alt` as the default, for the reason
|
|
126
|
+
* `UmlDiagramElementModel.kind` is required: it is part of the NOTATION
|
|
127
|
+
* rather than a claim an author may decline to make. A fragment with no
|
|
128
|
+
* operator has no word to write in its pentagon, and a pentagon with nothing
|
|
129
|
+
* in it is a rectangle with a bitten corner.
|
|
130
|
+
*/
|
|
131
|
+
get operator() { return this.#operator_accessor_storage; }
|
|
132
|
+
set operator(value) { this.#operator_accessor_storage = value; }
|
|
133
|
+
#name_accessor_storage = (__runInitializers(this, _operator_extraInitializers), __runInitializers(this, _name_initializers, ''));
|
|
134
|
+
/**
|
|
135
|
+
* The first operand's guard, or — under `ref` — the name of the interaction
|
|
136
|
+
* being referred to.
|
|
137
|
+
*
|
|
138
|
+
* Seeded EMPTY, unlike every other UML frame's name: §17.6.4 draws a guard
|
|
139
|
+
* only where there is one to draw, and `[alt]` with an empty bracket under it
|
|
140
|
+
* would be the notation inventing a condition the author has not written. An
|
|
141
|
+
* empty string keeps the field in the document (the `@field` default is
|
|
142
|
+
* written) without putting words on the page.
|
|
143
|
+
*/
|
|
144
|
+
get name() { return this.#name_accessor_storage; }
|
|
145
|
+
set name(value) { this.#name_accessor_storage = value; }
|
|
146
|
+
#resizeEnabled_accessor_storage = (__runInitializers(this, _name_extraInitializers), __runInitializers(this, _resizeEnabled_initializers, true));
|
|
147
|
+
get resizeEnabled() { return this.#resizeEnabled_accessor_storage; }
|
|
148
|
+
set resizeEnabled(value) { this.#resizeEnabled_accessor_storage = value; }
|
|
149
|
+
#rotate_accessor_storage = (__runInitializers(this, _resizeEnabled_extraInitializers), __runInitializers(this, _rotate_initializers, 0));
|
|
150
|
+
get rotate() { return this.#rotate_accessor_storage; }
|
|
151
|
+
set rotate(value) { this.#rotate_accessor_storage = value; }
|
|
152
|
+
#xywh_accessor_storage = (__runInitializers(this, _rotate_extraInitializers), __runInitializers(this, _xywh_initializers, '[0,0,600,260]'));
|
|
153
|
+
/**
|
|
154
|
+
* Wide enough to cover three lifelines at the 200-unit spacing a sequence
|
|
155
|
+
* diagram is laid out on, and tall enough for three or four exchanges — the
|
|
156
|
+
* size an `alt` is actually drawn round.
|
|
157
|
+
*/
|
|
158
|
+
get xywh() { return this.#xywh_accessor_storage; }
|
|
159
|
+
set xywh(value) { this.#xywh_accessor_storage = value; }
|
|
160
|
+
#operands_accessor_storage = (__runInitializers(this, _xywh_extraInitializers), __runInitializers(this, _operands_initializers, undefined));
|
|
161
|
+
/**
|
|
162
|
+
* The fragment's partition into operands, top to bottom.
|
|
163
|
+
*
|
|
164
|
+
* `undefined`, not `[]`, and for the three reasons `BpmnPoolElementModel
|
|
165
|
+
* .lanes` states in full: `@field()` writes nothing for an undefined default,
|
|
166
|
+
* so a fragment with a single operand — which is every `opt`, every `loop`
|
|
167
|
+
* and every `ref` — is byte-identical to one created before this field
|
|
168
|
+
* existed; the value is flat JSON because a list of operands is one atomic
|
|
169
|
+
* choice about how one fragment is cut; and it is declared here rather than
|
|
170
|
+
* on the base class because an operand is a subdivision of a combined
|
|
171
|
+
* fragment and of nothing else.
|
|
172
|
+
*
|
|
173
|
+
* What it MEANS is declared, not coded: `UML_FRAGMENT_FRAME.instanceZones`
|
|
174
|
+
* in `@labre/affine-gfx-uml` names this prop, and the framework-background
|
|
175
|
+
* primitive paints the separators and the guards from it.
|
|
176
|
+
*/
|
|
177
|
+
get operands() { return this.#operands_accessor_storage; }
|
|
178
|
+
set operands(value) { this.#operands_accessor_storage = value; }
|
|
179
|
+
/**
|
|
180
|
+
* Picked by its BORDER — and by its OPERATOR BAND, the one carve-out it
|
|
181
|
+
* keeps.
|
|
182
|
+
*
|
|
183
|
+
* The same carve-out the diagram frame, the partition and the composite state
|
|
184
|
+
* all make, and for the same reason: the band is the only part of the
|
|
185
|
+
* fragment that is the FRAGMENT rather than the conversation drawn inside it.
|
|
186
|
+
* Without it the pentagon would be unreachable, a background being picked by
|
|
187
|
+
* its border alone — and a transparent fragment's border is a thin line round
|
|
188
|
+
* a region full of other people's messages.
|
|
189
|
+
*
|
|
190
|
+
* Nothing below the band is claimed, which matters here as much as on a
|
|
191
|
+
* partition: a fragment is drawn OVER lifelines, so every point that is not
|
|
192
|
+
* its own furniture has to fall through to whatever is under the pointer.
|
|
193
|
+
*/
|
|
194
|
+
includesPoint(x, y, options) {
|
|
195
|
+
if (super.includesPoint(x, y, options))
|
|
196
|
+
return true;
|
|
197
|
+
return umlInNameBand(this, 'top', UML_FRAGMENT_BAND, x, y);
|
|
198
|
+
}
|
|
199
|
+
constructor() {
|
|
200
|
+
super(...arguments);
|
|
201
|
+
__runInitializers(this, _operands_extraInitializers);
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
})();
|
|
205
|
+
export { UmlFragmentElementModel };
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The LIFELINE's geometry — the two numbers a lifeline is drawn, selected and
|
|
3
|
+
* hit-tested from (UML 2.5.1 §17.3.4).
|
|
4
|
+
*
|
|
5
|
+
* Declared HERE, in the model, and re-exported by `@labre/affine-gfx-uml`, for
|
|
6
|
+
* the reason {@link UML_FRAME_BAND_HEIGHT} and {@link UML_PARTITION_BAND} are:
|
|
7
|
+
* the element's own `elementBound` and `includesPoint` read them (a lifeline's
|
|
8
|
+
* HEAD overflows the column the element actually is), and `affine-model` cannot
|
|
9
|
+
* reach into the package where the renderer lives. One pair of numbers, owned by
|
|
10
|
+
* the layer that the model, the renderer and the label layout can all read.
|
|
11
|
+
*
|
|
12
|
+
* ## Why a lifeline is a narrow column and not a head-shaped box
|
|
13
|
+
*
|
|
14
|
+
* §17.3.4 draws a lifeline as a named rectangle with a dashed vertical line
|
|
15
|
+
* falling out of its bottom edge, down the whole height of the interaction. The
|
|
16
|
+
* thing a message ATTACHES to is that line, never the rectangle — so the element
|
|
17
|
+
* is the COLUMN (16 wide, {@link UML_LIFELINE_SPINE} tall), whose native
|
|
18
|
+
* perimeter puts every connector anchor on the spine's own x, and the head is
|
|
19
|
+
* painted over its top by the glyph layer.
|
|
20
|
+
*
|
|
21
|
+
* The consequence is the one thing this module exists to fix: the head is 160
|
|
22
|
+
* wide against a 16-wide element, so it hangs 72 units off each side of the box
|
|
23
|
+
* the platform knows about. Selection, hit testing and frame fitting would all
|
|
24
|
+
* stop at the column — a user would see a named box and be unable to click it.
|
|
25
|
+
* {@link umlLifelineHeadRect} is the shared answer, read by the model's two
|
|
26
|
+
* overrides and by the renderer alike.
|
|
27
|
+
*/
|
|
28
|
+
export declare const UML_LIFELINE_HEAD: {
|
|
29
|
+
readonly w: 160;
|
|
30
|
+
readonly h: 48;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* How tall a fresh lifeline's COLUMN is — the head plus the dashed spine under
|
|
34
|
+
* it, in model units.
|
|
35
|
+
*
|
|
36
|
+
* 600 is a sheet's worth of conversation: at the 40-unit rhythm a sequence
|
|
37
|
+
* diagram's messages are drawn on, it holds a dozen or so exchanges before the
|
|
38
|
+
* author has to drag it longer. Which is the resize a lifeline ever WANTS — the
|
|
39
|
+
* column is only ever wanted taller. It is not the only resize it accepts:
|
|
40
|
+
* nothing constrains the handles, and a wider column simply widens the painted
|
|
41
|
+
* head, which {@link umlLifelineHeadRect} sizes at `max(160, w)`.
|
|
42
|
+
*/
|
|
43
|
+
export declare const UML_LIFELINE_SPINE = 600;
|
|
44
|
+
/** What a lifeline geometry question needs of an element: its box. */
|
|
45
|
+
export interface UmlLifelineGeometry {
|
|
46
|
+
deserializedXYWH: readonly number[];
|
|
47
|
+
rotate?: number;
|
|
48
|
+
}
|
|
49
|
+
/** A rectangle in the element's own (unrotated) local frame. */
|
|
50
|
+
export interface UmlLifelineRect {
|
|
51
|
+
x: number;
|
|
52
|
+
y: number;
|
|
53
|
+
w: number;
|
|
54
|
+
h: number;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* The head box, in ELEMENT-LOCAL model units — the named rectangle §17.3.4
|
|
58
|
+
* draws at the top of the lifeline, centred on the column and flush with its
|
|
59
|
+
* top.
|
|
60
|
+
*
|
|
61
|
+
* `null` when there is nothing to draw: a column dragged to nothing.
|
|
62
|
+
*
|
|
63
|
+
* Never NARROWER than the column: a lifeline dragged wider than 160 units is a
|
|
64
|
+
* lifeline whose head is the whole of it, which is the only reading that keeps
|
|
65
|
+
* the head a box round the spine rather than a stripe down the middle of one.
|
|
66
|
+
* Clamped in height for the same reason the frame's heading band is — a column
|
|
67
|
+
* shorter than its own head keeps a head, cut down to what there is.
|
|
68
|
+
*/
|
|
69
|
+
export declare function umlLifelineHeadRect(model: UmlLifelineGeometry): UmlLifelineRect | null;
|
|
70
|
+
/**
|
|
71
|
+
* Whether a CANVAS point lies in the lifeline's head.
|
|
72
|
+
*
|
|
73
|
+
* The rotation is undone about the element's centre before anything is
|
|
74
|
+
* measured, exactly as {@link umlInNameBand} does it: the head is axis-aligned
|
|
75
|
+
* INSIDE the lifeline, never on the canvas.
|
|
76
|
+
*/
|
|
77
|
+
export declare function umlInLifelineHead(model: UmlLifelineGeometry, x: number, y: number): boolean;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { rotatePoint } from '../../../global/gfx/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* The LIFELINE's geometry — the two numbers a lifeline is drawn, selected and
|
|
4
|
+
* hit-tested from (UML 2.5.1 §17.3.4).
|
|
5
|
+
*
|
|
6
|
+
* Declared HERE, in the model, and re-exported by `@labre/affine-gfx-uml`, for
|
|
7
|
+
* the reason {@link UML_FRAME_BAND_HEIGHT} and {@link UML_PARTITION_BAND} are:
|
|
8
|
+
* the element's own `elementBound` and `includesPoint` read them (a lifeline's
|
|
9
|
+
* HEAD overflows the column the element actually is), and `affine-model` cannot
|
|
10
|
+
* reach into the package where the renderer lives. One pair of numbers, owned by
|
|
11
|
+
* the layer that the model, the renderer and the label layout can all read.
|
|
12
|
+
*
|
|
13
|
+
* ## Why a lifeline is a narrow column and not a head-shaped box
|
|
14
|
+
*
|
|
15
|
+
* §17.3.4 draws a lifeline as a named rectangle with a dashed vertical line
|
|
16
|
+
* falling out of its bottom edge, down the whole height of the interaction. The
|
|
17
|
+
* thing a message ATTACHES to is that line, never the rectangle — so the element
|
|
18
|
+
* is the COLUMN (16 wide, {@link UML_LIFELINE_SPINE} tall), whose native
|
|
19
|
+
* perimeter puts every connector anchor on the spine's own x, and the head is
|
|
20
|
+
* painted over its top by the glyph layer.
|
|
21
|
+
*
|
|
22
|
+
* The consequence is the one thing this module exists to fix: the head is 160
|
|
23
|
+
* wide against a 16-wide element, so it hangs 72 units off each side of the box
|
|
24
|
+
* the platform knows about. Selection, hit testing and frame fitting would all
|
|
25
|
+
* stop at the column — a user would see a named box and be unable to click it.
|
|
26
|
+
* {@link umlLifelineHeadRect} is the shared answer, read by the model's two
|
|
27
|
+
* overrides and by the renderer alike.
|
|
28
|
+
*/
|
|
29
|
+
export const UML_LIFELINE_HEAD = { w: 160, h: 48 };
|
|
30
|
+
/**
|
|
31
|
+
* How tall a fresh lifeline's COLUMN is — the head plus the dashed spine under
|
|
32
|
+
* it, in model units.
|
|
33
|
+
*
|
|
34
|
+
* 600 is a sheet's worth of conversation: at the 40-unit rhythm a sequence
|
|
35
|
+
* diagram's messages are drawn on, it holds a dozen or so exchanges before the
|
|
36
|
+
* author has to drag it longer. Which is the resize a lifeline ever WANTS — the
|
|
37
|
+
* column is only ever wanted taller. It is not the only resize it accepts:
|
|
38
|
+
* nothing constrains the handles, and a wider column simply widens the painted
|
|
39
|
+
* head, which {@link umlLifelineHeadRect} sizes at `max(160, w)`.
|
|
40
|
+
*/
|
|
41
|
+
export const UML_LIFELINE_SPINE = 600;
|
|
42
|
+
/**
|
|
43
|
+
* The head box, in ELEMENT-LOCAL model units — the named rectangle §17.3.4
|
|
44
|
+
* draws at the top of the lifeline, centred on the column and flush with its
|
|
45
|
+
* top.
|
|
46
|
+
*
|
|
47
|
+
* `null` when there is nothing to draw: a column dragged to nothing.
|
|
48
|
+
*
|
|
49
|
+
* Never NARROWER than the column: a lifeline dragged wider than 160 units is a
|
|
50
|
+
* lifeline whose head is the whole of it, which is the only reading that keeps
|
|
51
|
+
* the head a box round the spine rather than a stripe down the middle of one.
|
|
52
|
+
* Clamped in height for the same reason the frame's heading band is — a column
|
|
53
|
+
* shorter than its own head keeps a head, cut down to what there is.
|
|
54
|
+
*/
|
|
55
|
+
export function umlLifelineHeadRect(model) {
|
|
56
|
+
const [, , w, h] = model.deserializedXYWH;
|
|
57
|
+
if (!(w > 0) || !(h > 0))
|
|
58
|
+
return null;
|
|
59
|
+
const width = Math.max(UML_LIFELINE_HEAD.w, w);
|
|
60
|
+
const height = Math.min(UML_LIFELINE_HEAD.h, h);
|
|
61
|
+
if (!(width > 0) || !(height > 0))
|
|
62
|
+
return null;
|
|
63
|
+
return { x: (w - width) / 2, y: 0, w: width, h: height };
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Whether a CANVAS point lies in the lifeline's head.
|
|
67
|
+
*
|
|
68
|
+
* The rotation is undone about the element's centre before anything is
|
|
69
|
+
* measured, exactly as {@link umlInNameBand} does it: the head is axis-aligned
|
|
70
|
+
* INSIDE the lifeline, never on the canvas.
|
|
71
|
+
*/
|
|
72
|
+
export function umlInLifelineHead(model, x, y) {
|
|
73
|
+
const head = umlLifelineHeadRect(model);
|
|
74
|
+
if (!head)
|
|
75
|
+
return false;
|
|
76
|
+
const [ex, ey, w, h] = model.deserializedXYWH;
|
|
77
|
+
let lx = x - ex;
|
|
78
|
+
let ly = y - ey;
|
|
79
|
+
const rotate = model.rotate ?? 0;
|
|
80
|
+
if (rotate) {
|
|
81
|
+
const [ux, uy] = rotatePoint([x, y], [ex + w / 2, ey + h / 2], -rotate);
|
|
82
|
+
lx = ux - ex;
|
|
83
|
+
ly = uy - ey;
|
|
84
|
+
}
|
|
85
|
+
return (lx >= head.x &&
|
|
86
|
+
lx <= head.x + head.w &&
|
|
87
|
+
ly >= head.y &&
|
|
88
|
+
ly <= head.y + head.h);
|
|
89
|
+
}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { Bound } from '../../../global/gfx/index.js';
|
|
2
|
+
import type { PointTestOptions } from '../../../std/gfx/index.js';
|
|
3
|
+
import { ShapeElementModel } from '../shape/index.js';
|
|
4
|
+
/**
|
|
5
|
+
* The UML artefacts the pack draws. Each maps onto a native shape, decorated by
|
|
6
|
+
* a glyph where the notation asks for one:
|
|
7
|
+
*
|
|
8
|
+
* - classifiers — `class`, `interface` and `enumeration`, the compartmented
|
|
9
|
+
* rectangle of UML 2.5.1 §11.4, distinguished by the keyword above the name;
|
|
10
|
+
* - instances — `object`, the same rectangle with an underlined
|
|
11
|
+
* `name : Type` (§11.6);
|
|
12
|
+
* - containers — `package`, the tabbed folder (§12.2);
|
|
13
|
+
* - annotations — `note`, the folded-corner rectangle of Annex A;
|
|
14
|
+
* - use cases — `actor`, the stick figure, and `use-case`, the ellipse
|
|
15
|
+
* (§18.1);
|
|
16
|
+
* - components — `component`, the rectangle with the two-tabbed icon in its
|
|
17
|
+
* corner (§11.6.4), its `port` (§11.3.4), and the two interface glyphs that
|
|
18
|
+
* hang off it: `provided-interface`, the lollipop, and `required-interface`,
|
|
19
|
+
* the socket (§10.4.4);
|
|
20
|
+
* - deployments — `artifact`, the document icon (§19.3.4), and the three
|
|
21
|
+
* cubes: `node`, `device` and `execution-environment` (§19.4.4);
|
|
22
|
+
* - activities — `action`, the round-cornered rectangle of §15.3.4, the five
|
|
23
|
+
* control nodes that route its flow (`initial`, `activity-final`,
|
|
24
|
+
* `flow-final`, `decision`, `fork`), the `object-node` of §15.4.4 and the
|
|
25
|
+
* three signal and event shapes of §16.3.4 / §16.10.4 (`send-signal`,
|
|
26
|
+
* `accept-event`, `time-event`);
|
|
27
|
+
* - state machines — `state` and `final-state` (§14.2.4), and the seven
|
|
28
|
+
* pseudostates that route transitions: `choice`, `junction`,
|
|
29
|
+
* `shallow-history`, `deep-history`, `entry-point`, `exit-point` and
|
|
30
|
+
* `terminate`;
|
|
31
|
+
* - interactions — `lifeline`, the named head over a dashed spine (§17.3.4),
|
|
32
|
+
* the `execution` bar that sits on it (§17.2.4) and the `destruction` X that
|
|
33
|
+
* ends it.
|
|
34
|
+
*
|
|
35
|
+
* ## Compatibility
|
|
36
|
+
*
|
|
37
|
+
* This union is only ever WIDENED — appended to, never reordered — and it is
|
|
38
|
+
* widened with new VALUES of the existing `kind` string field: no new field, no
|
|
39
|
+
* schema change, no migration and no backfill. The same promise `C4NodeKind`
|
|
40
|
+
* and `BpmnNodeKind` make: a diagram drawn today carries one of the values
|
|
41
|
+
* below, loads unchanged on a build that ships more of them, and paints exactly
|
|
42
|
+
* as it always did.
|
|
43
|
+
*
|
|
44
|
+
* What an OLDER build does with a kind it has never heard of is the other half
|
|
45
|
+
* of that promise: the element is a native shape, so it still paints its own
|
|
46
|
+
* box, its own colours and its own words — it simply gets no glyph, because the
|
|
47
|
+
* renderer draws pictures for the kinds it knows and nothing for the rest.
|
|
48
|
+
*
|
|
49
|
+
* The phases that widen it are named in ADR 0017: phase 1 drew the first eight,
|
|
50
|
+
* phase 2 appended the eight structural ones below them and then the nineteen
|
|
51
|
+
* behaviour ones below those, and lifelines come in phase 3.
|
|
52
|
+
*/
|
|
53
|
+
export type UmlNodeKind = 'class' | 'interface' | 'enumeration' | 'object' | 'package' | 'note' | 'actor' | 'use-case' | 'component' | 'port' | 'provided-interface' | 'required-interface' | 'artifact' | 'node' | 'device' | 'execution-environment' | 'action' | 'initial' | 'activity-final' | 'flow-final' | 'decision' | 'fork' | 'object-node' | 'send-signal' | 'accept-event' | 'time-event' | 'state' | 'final-state' | 'choice' | 'junction' | 'shallow-history' | 'deep-history' | 'entry-point' | 'exit-point' | 'terminate' | 'lifeline' | 'execution' | 'destruction';
|
|
54
|
+
/**
|
|
55
|
+
* A UML node. Extends {@link ShapeElementModel} (a native shape) so it inherits
|
|
56
|
+
* ALL shape behaviour — editable stroke width / colours, inner text, native
|
|
57
|
+
* resize, the shape context toolbar — for free. `kind` discriminates the
|
|
58
|
+
* artefacts and drives the RENDERING alone; what a node MEANS is the `role`
|
|
59
|
+
* stamped on it at creation (`gfx/uml/src/roles.ts`).
|
|
60
|
+
*
|
|
61
|
+
* Mirrors {@link C4NodeElementModel}.
|
|
62
|
+
*/
|
|
63
|
+
export declare class UmlNodeElementModel extends ShapeElementModel {
|
|
64
|
+
get type(): string;
|
|
65
|
+
/**
|
|
66
|
+
* Connector anchors are restricted to the centre, as they are for a C4 node
|
|
67
|
+
* and for a BPMN flow object: a UML relationship attaches to the node centre
|
|
68
|
+
* and clips at the perimeter, so an association between two classifiers
|
|
69
|
+
* points at the classifiers rather than at whichever of their twelve anchors
|
|
70
|
+
* the hand was nearest.
|
|
71
|
+
*
|
|
72
|
+
* ONE kind says otherwise, and the notation is why. A message in a sequence
|
|
73
|
+
* diagram attaches at a HEIGHT on its lifeline's spine — that height is WHEN
|
|
74
|
+
* it happens, and it is the whole of what a sequence diagram says (§17.4.4).
|
|
75
|
+
* Snapping every message to a 600-unit column's centre would stack the entire
|
|
76
|
+
* conversation on one horizontal line. So a `lifeline` keeps its native
|
|
77
|
+
* perimeter anchors, which lie on the column's left and right edges, 8 units
|
|
78
|
+
* either side of the spine: exactly where every UML tool draws them.
|
|
79
|
+
*/
|
|
80
|
+
get centerAnchorOnly(): boolean;
|
|
81
|
+
/**
|
|
82
|
+
* A lifeline's bound includes its HEAD; every other kind's is its box.
|
|
83
|
+
*
|
|
84
|
+
* §17.3.4 draws a lifeline as a named rectangle with a dashed line falling
|
|
85
|
+
* out of its bottom, and the element is the COLUMN the line runs down — 16
|
|
86
|
+
* units wide, so that a connector's native anchors land on the spine rather
|
|
87
|
+
* than 80 units off it. The head is 160 wide, so it hangs 72 units off each
|
|
88
|
+
* side of the element the platform knows about.
|
|
89
|
+
*
|
|
90
|
+
* Everything that measures an element measures `elementBound`: the selection
|
|
91
|
+
* rectangle, the marquee, "fit to frame", the group's own box. Without this
|
|
92
|
+
* override all of them would stop at the column, and a user would see a named
|
|
93
|
+
* box with a selection outline drawn down the middle of it.
|
|
94
|
+
*
|
|
95
|
+
* Nothing here is stored — it is derived from the element's own geometry — so
|
|
96
|
+
* it applies to a lifeline drawn before the override existed as well as
|
|
97
|
+
* after.
|
|
98
|
+
*/
|
|
99
|
+
get elementBound(): Bound;
|
|
100
|
+
/**
|
|
101
|
+
* A UML node is SOLID whatever its `filled` flag says.
|
|
102
|
+
*
|
|
103
|
+
* `rect.includesPoint` (and `ellipse`'s) skips the interior test for an
|
|
104
|
+
* unfilled shape and falls back to the stroke plus the tight bounding box of
|
|
105
|
+
* the text run — the behaviour that makes a hollow group let clicks through
|
|
106
|
+
* to the work it encloses. Several UML kinds are created unfilled and
|
|
107
|
+
* unstroked on purpose: a `package` is a tabbed folder, a `note` a rectangle
|
|
108
|
+
* with a folded corner, an `actor` a stick figure, none of which a native
|
|
109
|
+
* rect can be, so the GLYPH paints the body and the native shape paints
|
|
110
|
+
* nothing at all.
|
|
111
|
+
*
|
|
112
|
+
* The consequence, the one the PO reported against C4 on 27/08/2026, is that
|
|
113
|
+
* such nodes cannot be double-clicked into their own text editor: the body a
|
|
114
|
+
* user can plainly see is not a hit target, and only the border and the
|
|
115
|
+
* handful of characters of the label are. Pointer events reach an element
|
|
116
|
+
* view through this method (`GfxViewEventHandler`), so selecting, hovering,
|
|
117
|
+
* dragging and `dblclick` are all affected — the last one visibly.
|
|
118
|
+
*
|
|
119
|
+
* Forcing `ignoreTransparent: false` says the one thing that is true of every
|
|
120
|
+
* UML artefact: it is a BOX, and its whole area belongs to it. Nothing here
|
|
121
|
+
* is stored — the override changes hit testing, never the document — so it
|
|
122
|
+
* applies to nodes drawn before it existed as well as after.
|
|
123
|
+
*/
|
|
124
|
+
includesPoint(x: number, y: number, options: PointTestOptions): boolean;
|
|
125
|
+
/**
|
|
126
|
+
* The one field a UML node carries, and the whole of its schema.
|
|
127
|
+
*
|
|
128
|
+
* The labels a classifier shows — its name, its attribute compartment, its
|
|
129
|
+
* operation compartment — are deliberately NOT fields here. They are canvas
|
|
130
|
+
* TEXT elements, grouped with the shape, and they are edited in place exactly
|
|
131
|
+
* like any other words on the canvas (R16, and the PO recette of 28/08/2026
|
|
132
|
+
* that settled it for C4's type line and description). A field would have
|
|
133
|
+
* been a second place to write the same sentence, reachable only through a
|
|
134
|
+
* form, and the form is the mechanism the recette rejected: an architect
|
|
135
|
+
* writes on the picture.
|
|
136
|
+
*
|
|
137
|
+
* What that buys the document format is that this model stays exactly what it
|
|
138
|
+
* is — `kind`, on a native shape — however many compartments the component
|
|
139
|
+
* grows.
|
|
140
|
+
*/
|
|
141
|
+
accessor kind: UmlNodeKind;
|
|
142
|
+
}
|