@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,190 @@
|
|
|
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 { Bound, rotatePoint } from '../../../global/gfx/index.js';
|
|
36
|
+
import { field } from '../../../std/gfx/index.js';
|
|
37
|
+
import { ShapeElementModel } from '../shape/index.js';
|
|
38
|
+
import { umlInLifelineHead, umlLifelineHeadRect } from './lifeline.js';
|
|
39
|
+
/**
|
|
40
|
+
* A UML node. Extends {@link ShapeElementModel} (a native shape) so it inherits
|
|
41
|
+
* ALL shape behaviour — editable stroke width / colours, inner text, native
|
|
42
|
+
* resize, the shape context toolbar — for free. `kind` discriminates the
|
|
43
|
+
* artefacts and drives the RENDERING alone; what a node MEANS is the `role`
|
|
44
|
+
* stamped on it at creation (`gfx/uml/src/roles.ts`).
|
|
45
|
+
*
|
|
46
|
+
* Mirrors {@link C4NodeElementModel}.
|
|
47
|
+
*/
|
|
48
|
+
let UmlNodeElementModel = (() => {
|
|
49
|
+
let _classSuper = ShapeElementModel;
|
|
50
|
+
let _kind_decorators;
|
|
51
|
+
let _kind_initializers = [];
|
|
52
|
+
let _kind_extraInitializers = [];
|
|
53
|
+
return class UmlNodeElementModel extends _classSuper {
|
|
54
|
+
static {
|
|
55
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
56
|
+
_kind_decorators = [field('class')];
|
|
57
|
+
__esDecorate(this, null, _kind_decorators, { kind: "accessor", name: "kind", static: false, private: false, access: { has: obj => "kind" in obj, get: obj => obj.kind, set: (obj, value) => { obj.kind = value; } }, metadata: _metadata }, _kind_initializers, _kind_extraInitializers);
|
|
58
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
59
|
+
}
|
|
60
|
+
get type() {
|
|
61
|
+
return 'umlNode';
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Connector anchors are restricted to the centre, as they are for a C4 node
|
|
65
|
+
* and for a BPMN flow object: a UML relationship attaches to the node centre
|
|
66
|
+
* and clips at the perimeter, so an association between two classifiers
|
|
67
|
+
* points at the classifiers rather than at whichever of their twelve anchors
|
|
68
|
+
* the hand was nearest.
|
|
69
|
+
*
|
|
70
|
+
* ONE kind says otherwise, and the notation is why. A message in a sequence
|
|
71
|
+
* diagram attaches at a HEIGHT on its lifeline's spine — that height is WHEN
|
|
72
|
+
* it happens, and it is the whole of what a sequence diagram says (§17.4.4).
|
|
73
|
+
* Snapping every message to a 600-unit column's centre would stack the entire
|
|
74
|
+
* conversation on one horizontal line. So a `lifeline` keeps its native
|
|
75
|
+
* perimeter anchors, which lie on the column's left and right edges, 8 units
|
|
76
|
+
* either side of the spine: exactly where every UML tool draws them.
|
|
77
|
+
*/
|
|
78
|
+
get centerAnchorOnly() {
|
|
79
|
+
return this.kind !== 'lifeline';
|
|
80
|
+
}
|
|
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() {
|
|
100
|
+
if (this.kind !== 'lifeline')
|
|
101
|
+
return super.elementBound;
|
|
102
|
+
const head = umlLifelineHeadRect(this);
|
|
103
|
+
if (!head)
|
|
104
|
+
return super.elementBound;
|
|
105
|
+
const [x, y, w, h] = this.deserializedXYWH;
|
|
106
|
+
// The union, in the element's own frame: the column plus the head that
|
|
107
|
+
// overflows it. The head is flush with the top and centred, so only the two
|
|
108
|
+
// horizontal edges can move.
|
|
109
|
+
const left = Math.min(0, head.x);
|
|
110
|
+
const right = Math.max(w, head.x + head.w);
|
|
111
|
+
const local = [
|
|
112
|
+
[x + left, y],
|
|
113
|
+
[x + right, y],
|
|
114
|
+
[x + right, y + h],
|
|
115
|
+
[x + left, y + h],
|
|
116
|
+
];
|
|
117
|
+
const rotate = this.rotate ?? 0;
|
|
118
|
+
const points = rotate
|
|
119
|
+
? local.map(point => rotatePoint(point, [x + w / 2, y + h / 2], rotate))
|
|
120
|
+
: local;
|
|
121
|
+
const xs = points.map(point => point[0]);
|
|
122
|
+
const ys = points.map(point => point[1]);
|
|
123
|
+
const minX = Math.min(...xs);
|
|
124
|
+
const minY = Math.min(...ys);
|
|
125
|
+
return new Bound(minX, minY, Math.max(...xs) - minX, Math.max(...ys) - minY);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* A UML node is SOLID whatever its `filled` flag says.
|
|
129
|
+
*
|
|
130
|
+
* `rect.includesPoint` (and `ellipse`'s) skips the interior test for an
|
|
131
|
+
* unfilled shape and falls back to the stroke plus the tight bounding box of
|
|
132
|
+
* the text run — the behaviour that makes a hollow group let clicks through
|
|
133
|
+
* to the work it encloses. Several UML kinds are created unfilled and
|
|
134
|
+
* unstroked on purpose: a `package` is a tabbed folder, a `note` a rectangle
|
|
135
|
+
* with a folded corner, an `actor` a stick figure, none of which a native
|
|
136
|
+
* rect can be, so the GLYPH paints the body and the native shape paints
|
|
137
|
+
* nothing at all.
|
|
138
|
+
*
|
|
139
|
+
* The consequence, the one the PO reported against C4 on 27/08/2026, is that
|
|
140
|
+
* such nodes cannot be double-clicked into their own text editor: the body a
|
|
141
|
+
* user can plainly see is not a hit target, and only the border and the
|
|
142
|
+
* handful of characters of the label are. Pointer events reach an element
|
|
143
|
+
* view through this method (`GfxViewEventHandler`), so selecting, hovering,
|
|
144
|
+
* dragging and `dblclick` are all affected — the last one visibly.
|
|
145
|
+
*
|
|
146
|
+
* Forcing `ignoreTransparent: false` says the one thing that is true of every
|
|
147
|
+
* UML artefact: it is a BOX, and its whole area belongs to it. Nothing here
|
|
148
|
+
* is stored — the override changes hit testing, never the document — so it
|
|
149
|
+
* applies to nodes drawn before it existed as well as after.
|
|
150
|
+
*/
|
|
151
|
+
includesPoint(x, y, options) {
|
|
152
|
+
if (super.includesPoint(x, y, {
|
|
153
|
+
...options,
|
|
154
|
+
ignoreTransparent: false,
|
|
155
|
+
})) {
|
|
156
|
+
return true;
|
|
157
|
+
}
|
|
158
|
+
// …plus the one carve-out the pack keeps: a lifeline's HEAD, which is the
|
|
159
|
+
// part of it a user actually aims at (§17.3.4). The column the element is
|
|
160
|
+
// is 16 units wide — a hair at any realistic zoom — and the named box over
|
|
161
|
+
// its top is 160. Without this the head would be unclickable, which is the
|
|
162
|
+
// same failure the diagram frame's heading band would have had.
|
|
163
|
+
return this.kind === 'lifeline' && umlInLifelineHead(this, x, y);
|
|
164
|
+
}
|
|
165
|
+
#kind_accessor_storage = __runInitializers(this, _kind_initializers, 'class');
|
|
166
|
+
/**
|
|
167
|
+
* The one field a UML node carries, and the whole of its schema.
|
|
168
|
+
*
|
|
169
|
+
* The labels a classifier shows — its name, its attribute compartment, its
|
|
170
|
+
* operation compartment — are deliberately NOT fields here. They are canvas
|
|
171
|
+
* TEXT elements, grouped with the shape, and they are edited in place exactly
|
|
172
|
+
* like any other words on the canvas (R16, and the PO recette of 28/08/2026
|
|
173
|
+
* that settled it for C4's type line and description). A field would have
|
|
174
|
+
* been a second place to write the same sentence, reachable only through a
|
|
175
|
+
* form, and the form is the mechanism the recette rejected: an architect
|
|
176
|
+
* writes on the picture.
|
|
177
|
+
*
|
|
178
|
+
* What that buys the document format is that this model stays exactly what it
|
|
179
|
+
* is — `kind`, on a native shape — however many compartments the component
|
|
180
|
+
* grows.
|
|
181
|
+
*/
|
|
182
|
+
get kind() { return this.#kind_accessor_storage; }
|
|
183
|
+
set kind(value) { this.#kind_accessor_storage = value; }
|
|
184
|
+
constructor() {
|
|
185
|
+
super(...arguments);
|
|
186
|
+
__runInitializers(this, _kind_extraInitializers);
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
})();
|
|
190
|
+
export { UmlNodeElementModel };
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import type { SerializedXYWH } from '../../../global/gfx/index.js';
|
|
2
|
+
import type { PointTestOptions } from '../../../std/gfx/index.js';
|
|
3
|
+
import type { FrameworkBackgroundProps } from '../framework-background/index.js';
|
|
4
|
+
import { FrameworkBackgroundElementModel } from '../framework-background/index.js';
|
|
5
|
+
/**
|
|
6
|
+
* Height of a partition's NAME BAND — the strip its name is written in, in
|
|
7
|
+
* model units.
|
|
8
|
+
*
|
|
9
|
+
* Declared HERE, in the model, and re-exported by `@labre/affine-gfx-uml`, for
|
|
10
|
+
* the reason {@link UML_FRAME_BAND_HEIGHT} is: the partition's own hit test
|
|
11
|
+
* reads it (a swimlane is clickable by its header as well as by its border),
|
|
12
|
+
* and `affine-model` cannot reach into `affine-block-surface` where the
|
|
13
|
+
* declaration is resolved. One number, owned by the layer that both the
|
|
14
|
+
* declaration and the hit test can read.
|
|
15
|
+
*
|
|
16
|
+
* It is the band's THICKNESS whichever edge the band is on — the top for a
|
|
17
|
+
* vertical lane, the left for a horizontal one — because §15.6.4 draws one
|
|
18
|
+
* header strip and turns it with the lane rather than resizing it.
|
|
19
|
+
*
|
|
20
|
+
* 36 against the diagram frame's 44: a partition header is a name and not a
|
|
21
|
+
* `<kind> <name>` heading, and it is written inside a lane that already sits on
|
|
22
|
+
* a sheet, so it reads as a subdivision rather than as a second sheet.
|
|
23
|
+
*/
|
|
24
|
+
export declare const UML_PARTITION_BAND = 36;
|
|
25
|
+
/**
|
|
26
|
+
* Which way a partition is sliced — the one thing §15.6.4 lets an author choose
|
|
27
|
+
* about a swimlane, and the thing that decides which edge the header is on.
|
|
28
|
+
*
|
|
29
|
+
* `vertical` is a COLUMN: a tall lane with its name across the top, which is how
|
|
30
|
+
* nearly every activity diagram anybody draws is laid out (the flow runs down,
|
|
31
|
+
* the responsibilities run across). `horizontal` is a ROW, name up the left
|
|
32
|
+
* edge, for the diagrams whose flow runs left to right.
|
|
33
|
+
*
|
|
34
|
+
* Two values and no more: §15.6.4 also draws a two-dimensional partition GRID,
|
|
35
|
+
* and that is a phase-3 refinement — a grid is not a third orientation of one
|
|
36
|
+
* lane, it is lanes crossed with lanes.
|
|
37
|
+
*/
|
|
38
|
+
export type UmlPartitionOrientation = 'vertical' | 'horizontal';
|
|
39
|
+
export type UmlPartitionProps = FrameworkBackgroundProps & {
|
|
40
|
+
/** The partition name, written in its band — edited inline on dblclick. */
|
|
41
|
+
name?: string;
|
|
42
|
+
/** Which edge the band is on, and therefore which way the lane runs. */
|
|
43
|
+
orientation?: UmlPartitionOrientation;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* An activity PARTITION — the swimlane of UML 2.5.1 §15.6.4: the strip drawn
|
|
47
|
+
* across an activity diagram saying who (or what) is responsible for the
|
|
48
|
+
* actions inside it.
|
|
49
|
+
*
|
|
50
|
+
* A framework background, so actions are dropped on it and connectors never
|
|
51
|
+
* snap to it — but a TRANSPARENT one, like {@link UmlSubjectElementModel} and
|
|
52
|
+
* for the same reason: a lane is drawn over an activity diagram that is already
|
|
53
|
+
* there, and an opaque card would hide the very flow it is attributing.
|
|
54
|
+
* Membership, as for every board in the library, is computed from geometry at
|
|
55
|
+
* read time (R11) — an action belongs to the lane its CENTRE is in, and nothing
|
|
56
|
+
* is stored on either element.
|
|
57
|
+
*
|
|
58
|
+
* ## Why a partition is an element and not a field on the frame
|
|
59
|
+
*
|
|
60
|
+
* Because a frame cannot grow a field without an ADR (the document format is a
|
|
61
|
+
* red zone), and because the notation does not put it there either: §15.6.4
|
|
62
|
+
* draws partitions as rectangles ON the diagram, freely positioned, freely
|
|
63
|
+
* resized, and an activity diagram may carry none, one, or a dozen. A `lanes`
|
|
64
|
+
* array on `umlDiagram` would have been a second geometry to keep in step with
|
|
65
|
+
* the one the user drags.
|
|
66
|
+
*
|
|
67
|
+
* What it LOOKS like is declared, not coded: see `UML_PARTITION_FRAME_V` and
|
|
68
|
+
* `UML_PARTITION_FRAME_H` in `@labre/affine-gfx-uml`.
|
|
69
|
+
*/
|
|
70
|
+
export declare class UmlPartitionElementModel extends FrameworkBackgroundElementModel<UmlPartitionProps> {
|
|
71
|
+
get type(): string;
|
|
72
|
+
accessor name: string;
|
|
73
|
+
/**
|
|
74
|
+
* Which edge the name band is on — REQUIRED, with `vertical` as the default.
|
|
75
|
+
*
|
|
76
|
+
* Required for the reason `UmlDiagramElementModel.kind` is: it is part of the
|
|
77
|
+
* NOTATION rather than a claim an author may decline to make. A partition with
|
|
78
|
+
* no orientation has no header edge, so there would be nowhere to write its
|
|
79
|
+
* name and nowhere to double-click to change it.
|
|
80
|
+
*/
|
|
81
|
+
accessor orientation: UmlPartitionOrientation;
|
|
82
|
+
accessor resizeEnabled: boolean;
|
|
83
|
+
accessor rotate: number;
|
|
84
|
+
/**
|
|
85
|
+
* Tall and narrow: the default is a COLUMN, because the default orientation
|
|
86
|
+
* is vertical and a vertical lane is a strip an activity flows DOWN. Wide
|
|
87
|
+
* enough for an action box (160) with room either side of it, and as tall as
|
|
88
|
+
* the diagram frame it is dropped on.
|
|
89
|
+
*/
|
|
90
|
+
accessor xywh: SerializedXYWH;
|
|
91
|
+
/**
|
|
92
|
+
* A partition is picked by its BORDER — and by its NAME BAND, the one
|
|
93
|
+
* carve-out it keeps, on whichever edge its orientation puts it.
|
|
94
|
+
*
|
|
95
|
+
* The same carve-out the diagram frame makes and for the same reason: the band
|
|
96
|
+
* is the only part of the lane that is the LANE rather than the flow drawn in
|
|
97
|
+
* it. Without it the header would be unreachable, a background being picked by
|
|
98
|
+
* its border alone — and a transparent lane's border is a thin line round a
|
|
99
|
+
* region the user thinks of as a column.
|
|
100
|
+
*
|
|
101
|
+
* Nothing below the band is claimed, which matters more here than on the sheet:
|
|
102
|
+
* a partition is drawn OVER actions, so every point that is not its own
|
|
103
|
+
* furniture has to fall through to whatever is under the pointer.
|
|
104
|
+
*/
|
|
105
|
+
includesPoint(x: number, y: number, options?: PointTestOptions): boolean;
|
|
106
|
+
}
|
|
@@ -0,0 +1,172 @@
|
|
|
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 partition's NAME BAND — the strip its name is written in, in
|
|
40
|
+
* model units.
|
|
41
|
+
*
|
|
42
|
+
* Declared HERE, in the model, and re-exported by `@labre/affine-gfx-uml`, for
|
|
43
|
+
* the reason {@link UML_FRAME_BAND_HEIGHT} is: the partition's own hit test
|
|
44
|
+
* reads it (a swimlane is clickable by its header as well as by its border),
|
|
45
|
+
* and `affine-model` cannot reach into `affine-block-surface` where the
|
|
46
|
+
* declaration is resolved. One number, owned by the layer that both the
|
|
47
|
+
* declaration and the hit test can read.
|
|
48
|
+
*
|
|
49
|
+
* It is the band's THICKNESS whichever edge the band is on — the top for a
|
|
50
|
+
* vertical lane, the left for a horizontal one — because §15.6.4 draws one
|
|
51
|
+
* header strip and turns it with the lane rather than resizing it.
|
|
52
|
+
*
|
|
53
|
+
* 36 against the diagram frame's 44: a partition header is a name and not a
|
|
54
|
+
* `<kind> <name>` heading, and it is written inside a lane that already sits on
|
|
55
|
+
* a sheet, so it reads as a subdivision rather than as a second sheet.
|
|
56
|
+
*/
|
|
57
|
+
export const UML_PARTITION_BAND = 36;
|
|
58
|
+
/**
|
|
59
|
+
* An activity PARTITION — the swimlane of UML 2.5.1 §15.6.4: the strip drawn
|
|
60
|
+
* across an activity diagram saying who (or what) is responsible for the
|
|
61
|
+
* actions inside it.
|
|
62
|
+
*
|
|
63
|
+
* A framework background, so actions are dropped on it and connectors never
|
|
64
|
+
* snap to it — but a TRANSPARENT one, like {@link UmlSubjectElementModel} and
|
|
65
|
+
* for the same reason: a lane is drawn over an activity diagram that is already
|
|
66
|
+
* there, and an opaque card would hide the very flow it is attributing.
|
|
67
|
+
* Membership, as for every board in the library, is computed from geometry at
|
|
68
|
+
* read time (R11) — an action belongs to the lane its CENTRE is in, and nothing
|
|
69
|
+
* is stored on either element.
|
|
70
|
+
*
|
|
71
|
+
* ## Why a partition is an element and not a field on the frame
|
|
72
|
+
*
|
|
73
|
+
* Because a frame cannot grow a field without an ADR (the document format is a
|
|
74
|
+
* red zone), and because the notation does not put it there either: §15.6.4
|
|
75
|
+
* draws partitions as rectangles ON the diagram, freely positioned, freely
|
|
76
|
+
* resized, and an activity diagram may carry none, one, or a dozen. A `lanes`
|
|
77
|
+
* array on `umlDiagram` would have been a second geometry to keep in step with
|
|
78
|
+
* the one the user drags.
|
|
79
|
+
*
|
|
80
|
+
* What it LOOKS like is declared, not coded: see `UML_PARTITION_FRAME_V` and
|
|
81
|
+
* `UML_PARTITION_FRAME_H` in `@labre/affine-gfx-uml`.
|
|
82
|
+
*/
|
|
83
|
+
let UmlPartitionElementModel = (() => {
|
|
84
|
+
let _classSuper = FrameworkBackgroundElementModel;
|
|
85
|
+
let _name_decorators;
|
|
86
|
+
let _name_initializers = [];
|
|
87
|
+
let _name_extraInitializers = [];
|
|
88
|
+
let _orientation_decorators;
|
|
89
|
+
let _orientation_initializers = [];
|
|
90
|
+
let _orientation_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
|
+
return class UmlPartitionElementModel extends _classSuper {
|
|
101
|
+
static {
|
|
102
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
103
|
+
_name_decorators = [field('Partition')];
|
|
104
|
+
_orientation_decorators = [field('vertical')];
|
|
105
|
+
_resizeEnabled_decorators = [field(true)];
|
|
106
|
+
_rotate_decorators = [field(0)];
|
|
107
|
+
_xywh_decorators = [field()];
|
|
108
|
+
__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);
|
|
109
|
+
__esDecorate(this, null, _orientation_decorators, { kind: "accessor", name: "orientation", static: false, private: false, access: { has: obj => "orientation" in obj, get: obj => obj.orientation, set: (obj, value) => { obj.orientation = value; } }, metadata: _metadata }, _orientation_initializers, _orientation_extraInitializers);
|
|
110
|
+
__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);
|
|
111
|
+
__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);
|
|
112
|
+
__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);
|
|
113
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
114
|
+
}
|
|
115
|
+
get type() {
|
|
116
|
+
return 'umlPartition';
|
|
117
|
+
}
|
|
118
|
+
#name_accessor_storage = __runInitializers(this, _name_initializers, 'Partition');
|
|
119
|
+
get name() { return this.#name_accessor_storage; }
|
|
120
|
+
set name(value) { this.#name_accessor_storage = value; }
|
|
121
|
+
#orientation_accessor_storage = (__runInitializers(this, _name_extraInitializers), __runInitializers(this, _orientation_initializers, 'vertical'));
|
|
122
|
+
/**
|
|
123
|
+
* Which edge the name band is on — REQUIRED, with `vertical` as the default.
|
|
124
|
+
*
|
|
125
|
+
* Required for the reason `UmlDiagramElementModel.kind` is: it is part of the
|
|
126
|
+
* NOTATION rather than a claim an author may decline to make. A partition with
|
|
127
|
+
* no orientation has no header edge, so there would be nowhere to write its
|
|
128
|
+
* name and nowhere to double-click to change it.
|
|
129
|
+
*/
|
|
130
|
+
get orientation() { return this.#orientation_accessor_storage; }
|
|
131
|
+
set orientation(value) { this.#orientation_accessor_storage = value; }
|
|
132
|
+
#resizeEnabled_accessor_storage = (__runInitializers(this, _orientation_extraInitializers), __runInitializers(this, _resizeEnabled_initializers, true));
|
|
133
|
+
get resizeEnabled() { return this.#resizeEnabled_accessor_storage; }
|
|
134
|
+
set resizeEnabled(value) { this.#resizeEnabled_accessor_storage = value; }
|
|
135
|
+
#rotate_accessor_storage = (__runInitializers(this, _resizeEnabled_extraInitializers), __runInitializers(this, _rotate_initializers, 0));
|
|
136
|
+
get rotate() { return this.#rotate_accessor_storage; }
|
|
137
|
+
set rotate(value) { this.#rotate_accessor_storage = value; }
|
|
138
|
+
#xywh_accessor_storage = (__runInitializers(this, _rotate_extraInitializers), __runInitializers(this, _xywh_initializers, '[0,0,360,900]'));
|
|
139
|
+
/**
|
|
140
|
+
* Tall and narrow: the default is a COLUMN, because the default orientation
|
|
141
|
+
* is vertical and a vertical lane is a strip an activity flows DOWN. Wide
|
|
142
|
+
* enough for an action box (160) with room either side of it, and as tall as
|
|
143
|
+
* the diagram frame it is dropped on.
|
|
144
|
+
*/
|
|
145
|
+
get xywh() { return this.#xywh_accessor_storage; }
|
|
146
|
+
set xywh(value) { this.#xywh_accessor_storage = value; }
|
|
147
|
+
/**
|
|
148
|
+
* A partition is picked by its BORDER — and by its NAME BAND, the one
|
|
149
|
+
* carve-out it keeps, on whichever edge its orientation puts it.
|
|
150
|
+
*
|
|
151
|
+
* The same carve-out the diagram frame makes and for the same reason: the band
|
|
152
|
+
* is the only part of the lane that is the LANE rather than the flow drawn in
|
|
153
|
+
* it. Without it the header would be unreachable, a background being picked by
|
|
154
|
+
* its border alone — and a transparent lane's border is a thin line round a
|
|
155
|
+
* region the user thinks of as a column.
|
|
156
|
+
*
|
|
157
|
+
* Nothing below the band is claimed, which matters more here than on the sheet:
|
|
158
|
+
* a partition is drawn OVER actions, so every point that is not its own
|
|
159
|
+
* furniture has to fall through to whatever is under the pointer.
|
|
160
|
+
*/
|
|
161
|
+
includesPoint(x, y, options) {
|
|
162
|
+
if (super.includesPoint(x, y, options))
|
|
163
|
+
return true;
|
|
164
|
+
return umlInNameBand(this, this.orientation === 'horizontal' ? 'left' : 'top', UML_PARTITION_BAND, x, y);
|
|
165
|
+
}
|
|
166
|
+
constructor() {
|
|
167
|
+
super(...arguments);
|
|
168
|
+
__runInitializers(this, _xywh_extraInitializers);
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
})();
|
|
172
|
+
export { UmlPartitionElementModel };
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { SerializedXYWH } from '../../../global/gfx/index.js';
|
|
2
|
+
import type { PointTestOptions } from '../../../std/gfx/index.js';
|
|
3
|
+
import type { FrameworkBackgroundProps } from '../framework-background/index.js';
|
|
4
|
+
import { FrameworkBackgroundElementModel } from '../framework-background/index.js';
|
|
5
|
+
/**
|
|
6
|
+
* Height of a region's NAME BAND — the strip its name is written in, in model
|
|
7
|
+
* units.
|
|
8
|
+
*
|
|
9
|
+
* Owned by the model for the reason {@link UML_PARTITION_BAND} is: the region's
|
|
10
|
+
* own hit test reads it, and `affine-model` cannot reach into the package where
|
|
11
|
+
* the declaration is resolved. The same 36 the partition uses, and deliberately
|
|
12
|
+
* so — the two are the same piece of furniture, a name written in a strip along
|
|
13
|
+
* the top of a transparent frame, and two numbers would drift.
|
|
14
|
+
*/
|
|
15
|
+
export declare const UML_REGION_BAND = 36;
|
|
16
|
+
export type UmlRegionProps = FrameworkBackgroundProps & {
|
|
17
|
+
/** The state name, written in the band — edited inline on dblclick. */
|
|
18
|
+
name?: string;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* A COMPOSITE STATE — the region of UML 2.5.1 §14.2.4: the rounded rectangle
|
|
22
|
+
* drawn round the sub-states of a state that has its own state machine inside
|
|
23
|
+
* it.
|
|
24
|
+
*
|
|
25
|
+
* A framework background, transparent like {@link UmlPartitionElementModel}: it
|
|
26
|
+
* is drawn OVER states that are already there, and membership is geometry at
|
|
27
|
+
* read time (R11).
|
|
28
|
+
*
|
|
29
|
+
* ## Why a composite state IS the region, rather than a state with regions in it
|
|
30
|
+
*
|
|
31
|
+
* The metamodel has two objects — a State that `isComposite`, and the Regions it
|
|
32
|
+
* owns — and the notation draws ONE: a rounded rectangle with the state's name
|
|
33
|
+
* at the top and the sub-machine inside (§14.2.4, Figure 14.6). A drawing tool
|
|
34
|
+
* that made the author place a `state` node and then a `umlRegion` inside it
|
|
35
|
+
* would be asking them to draw two things to get one picture, and would leave
|
|
36
|
+
* every rule with two elements to decide which of them the composite state is.
|
|
37
|
+
*
|
|
38
|
+
* So this element IS the composite state: it carries the name, it draws the
|
|
39
|
+
* rounded rectangle, and its sub-states sit inside it by geometry.
|
|
40
|
+
*
|
|
41
|
+
* ## The ceiling, stated out loud
|
|
42
|
+
*
|
|
43
|
+
* ORTHOGONAL regions — a composite state cut into concurrent regions by dashed
|
|
44
|
+
* separators (§14.2.4, Figure 14.8) — are NOT drawn. One region per composite
|
|
45
|
+
* state is what this element is; a second one is a phase-3 refinement, and it
|
|
46
|
+
* will arrive the way the BPMN pool's lanes did (an instance partition on the
|
|
47
|
+
* declaration) rather than as a field added here in a hurry.
|
|
48
|
+
*
|
|
49
|
+
* What it LOOKS like is declared, not coded: see `UML_REGION_FRAME` in
|
|
50
|
+
* `@labre/affine-gfx-uml`.
|
|
51
|
+
*/
|
|
52
|
+
export declare class UmlRegionElementModel extends FrameworkBackgroundElementModel<UmlRegionProps> {
|
|
53
|
+
get type(): string;
|
|
54
|
+
/**
|
|
55
|
+
* `State`, not `Region`: this element IS the composite state on the page, and
|
|
56
|
+
* a fresh one that called itself a Region would be naming the metamodel
|
|
57
|
+
* object rather than the thing the author drew (see the header).
|
|
58
|
+
*/
|
|
59
|
+
accessor name: string;
|
|
60
|
+
accessor resizeEnabled: boolean;
|
|
61
|
+
accessor rotate: number;
|
|
62
|
+
/** Room for a small sub-machine — an initial, two states and a final. */
|
|
63
|
+
accessor xywh: SerializedXYWH;
|
|
64
|
+
/**
|
|
65
|
+
* Picked by its BORDER and by its NAME BAND — the carve-out the diagram frame
|
|
66
|
+
* and the partition both make, and for the same reason: the band is the only
|
|
67
|
+
* part of the composite state that is the STATE rather than the sub-machine
|
|
68
|
+
* drawn inside it.
|
|
69
|
+
*
|
|
70
|
+
* Always the TOP edge: unlike a partition, a composite state has no
|
|
71
|
+
* orientation to turn — §14.2.4 writes its name across the top and nowhere
|
|
72
|
+
* else.
|
|
73
|
+
*/
|
|
74
|
+
includesPoint(x: number, y: number, options?: PointTestOptions): boolean;
|
|
75
|
+
}
|