@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
|
@@ -164,7 +164,7 @@ let ShapeElementModel = (() => {
|
|
|
164
164
|
_isClosed_decorators = [field()];
|
|
165
165
|
_smoothFlags_decorators = [field(null)];
|
|
166
166
|
_controlPoints_decorators = [field()];
|
|
167
|
-
_xywh_decorators = [field()];
|
|
167
|
+
_xywh_decorators = [field('[0,0,0,0]')];
|
|
168
168
|
__esDecorate(this, null, _color_decorators, { kind: "accessor", name: "color", static: false, private: false, access: { has: obj => "color" in obj, get: obj => obj.color, set: (obj, value) => { obj.color = value; } }, metadata: _metadata }, _color_initializers, _color_extraInitializers);
|
|
169
169
|
__esDecorate(this, null, _fillColor_decorators, { kind: "accessor", name: "fillColor", static: false, private: false, access: { has: obj => "fillColor" in obj, get: obj => obj.fillColor, set: (obj, value) => { obj.fillColor = value; } }, metadata: _metadata }, _fillColor_initializers, _fillColor_extraInitializers);
|
|
170
170
|
__esDecorate(this, null, _filled_decorators, { kind: "accessor", name: "filled", static: false, private: false, access: { has: obj => "filled" in obj, get: obj => obj.filled, set: (obj, value) => { obj.filled = value; } }, metadata: _metadata }, _filled_initializers, _filled_extraInitializers);
|
|
@@ -81,7 +81,7 @@ let TextElementModel = (() => {
|
|
|
81
81
|
_rotate_decorators = [field(0)];
|
|
82
82
|
_text_decorators = [field()];
|
|
83
83
|
_textAlign_decorators = [field()];
|
|
84
|
-
_xywh_decorators = [field()];
|
|
84
|
+
_xywh_decorators = [field('[0,0,0,0]')];
|
|
85
85
|
__esDecorate(this, null, _color_decorators, { kind: "accessor", name: "color", static: false, private: false, access: { has: obj => "color" in obj, get: obj => obj.color, set: (obj, value) => { obj.color = value; } }, metadata: _metadata }, _color_initializers, _color_extraInitializers);
|
|
86
86
|
__esDecorate(this, null, _fontFamily_decorators, { kind: "accessor", name: "fontFamily", static: false, private: false, access: { has: obj => "fontFamily" in obj, get: obj => obj.fontFamily, set: (obj, value) => { obj.fontFamily = value; } }, metadata: _metadata }, _fontFamily_initializers, _fontFamily_extraInitializers);
|
|
87
87
|
__esDecorate(this, null, _fontSize_decorators, { kind: "accessor", name: "fontSize", static: false, private: false, access: { has: obj => "fontSize" in obj, get: obj => obj.fontSize, set: (obj, value) => { obj.fontSize = value; } }, metadata: _metadata }, _fontSize_initializers, _fontSize_extraInitializers);
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The NAME BAND carve-out, shared by the UML backgrounds that wear one.
|
|
3
|
+
*
|
|
4
|
+
* A framework background is picked by its BORDER and nothing else (issue #194),
|
|
5
|
+
* which is what keeps a transparent frame from stealing the clicks meant for
|
|
6
|
+
* what it is drawn round. Every frame that writes its name in a STRIP of its
|
|
7
|
+
* own then has to carve that strip back in, or the words are unreachable: a
|
|
8
|
+
* single click on them would select nothing at all.
|
|
9
|
+
*
|
|
10
|
+
* `UmlDiagramElementModel.includesPoint` was the first to do it and states the
|
|
11
|
+
* argument in full. This module is the same arithmetic, lifted out when the
|
|
12
|
+
* activity PARTITION (§15.6.4) and the state-machine REGION (§14.2.4) each
|
|
13
|
+
* arrived wanting it — and wanting it on two different edges, the partition's
|
|
14
|
+
* band following its own `orientation`. Three inline copies of a rotation
|
|
15
|
+
* unwind is three places for one of them to be fixed.
|
|
16
|
+
*
|
|
17
|
+
* The diagram frame keeps its own copy: it is a RED ZONE file whose hit test is
|
|
18
|
+
* pinned by a spec written against it, and rewriting a shipped carve-out to
|
|
19
|
+
* share code with a new one buys nothing a reader can see.
|
|
20
|
+
*/
|
|
21
|
+
/** What a band test needs of an element: its box and its rotation. */
|
|
22
|
+
export interface UmlBandGeometry {
|
|
23
|
+
deserializedXYWH: readonly number[];
|
|
24
|
+
rotate?: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Whether a CANVAS point lies in the leading band of an element — the strip
|
|
28
|
+
* along its top edge (`'top'`) or along its left edge (`'left'`).
|
|
29
|
+
*
|
|
30
|
+
* The band is axis-aligned INSIDE the element, never on the canvas, so the
|
|
31
|
+
* element rotation is undone about the centre before anything is measured:
|
|
32
|
+
* without that the strip would stay pinned to the top of the screen while the
|
|
33
|
+
* name it is meant to pick turned away with the frame.
|
|
34
|
+
*
|
|
35
|
+
* Clamped to an element smaller than its own band, which is the degenerate case
|
|
36
|
+
* a renderer clamps too: an unclamped strip would hang off a squashed frame and
|
|
37
|
+
* pick it from empty canvas.
|
|
38
|
+
*/
|
|
39
|
+
export declare function umlInNameBand(model: UmlBandGeometry, side: 'top' | 'left', band: number, x: number, y: number): boolean;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { rotatePoint } from '../../../global/gfx/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Whether a CANVAS point lies in the leading band of an element — the strip
|
|
4
|
+
* along its top edge (`'top'`) or along its left edge (`'left'`).
|
|
5
|
+
*
|
|
6
|
+
* The band is axis-aligned INSIDE the element, never on the canvas, so the
|
|
7
|
+
* element rotation is undone about the centre before anything is measured:
|
|
8
|
+
* without that the strip would stay pinned to the top of the screen while the
|
|
9
|
+
* name it is meant to pick turned away with the frame.
|
|
10
|
+
*
|
|
11
|
+
* Clamped to an element smaller than its own band, which is the degenerate case
|
|
12
|
+
* a renderer clamps too: an unclamped strip would hang off a squashed frame and
|
|
13
|
+
* pick it from empty canvas.
|
|
14
|
+
*/
|
|
15
|
+
export function umlInNameBand(model, side, band, x, y) {
|
|
16
|
+
const [ex, ey, w, h] = model.deserializedXYWH;
|
|
17
|
+
if (!(w > 0) || !(h > 0) || !(band > 0))
|
|
18
|
+
return false;
|
|
19
|
+
// Element-local coordinates, undoing the element rotation about its centre.
|
|
20
|
+
let lx = x - ex;
|
|
21
|
+
let ly = y - ey;
|
|
22
|
+
const rotate = model.rotate ?? 0;
|
|
23
|
+
if (rotate) {
|
|
24
|
+
const [ux, uy] = rotatePoint([x, y], [ex + w / 2, ey + h / 2], -rotate);
|
|
25
|
+
lx = ux - ex;
|
|
26
|
+
ly = uy - ey;
|
|
27
|
+
}
|
|
28
|
+
if (lx < 0 || lx > w || ly < 0 || ly > h)
|
|
29
|
+
return false;
|
|
30
|
+
return side === 'top' ? ly <= Math.min(band, h) : lx <= Math.min(band, w);
|
|
31
|
+
}
|
|
@@ -0,0 +1,158 @@
|
|
|
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 the diagram frame's heading band — the strip across the top of the
|
|
7
|
+
* frame the `<kind> <name>` tag is written in, in model units.
|
|
8
|
+
*
|
|
9
|
+
* Declared HERE, in the model, and re-exported by `@labre/affine-gfx-uml`
|
|
10
|
+
* rather than the other way round, for the reason `C4_BOARD_TITLE_BAND_HEIGHT`
|
|
11
|
+
* is: the frame's own hit test needs it (a diagram is clickable by its heading
|
|
12
|
+
* band as well as by its border), and `affine-model` cannot reach into
|
|
13
|
+
* `affine-block-surface` where the declaration is resolved. One number, owned
|
|
14
|
+
* by the layer that both the declaration and the hit test can read.
|
|
15
|
+
*
|
|
16
|
+
* It is the frame's TOP MARGIN — the inset the drawing gives up so the heading
|
|
17
|
+
* has somewhere to be written — so the strip that is painted, the strip that is
|
|
18
|
+
* picked and the strip that opens the rename are one number rather than three.
|
|
19
|
+
*
|
|
20
|
+
* 44 is the height of the cut-corner tag UML 2.5.1 Annex A draws the heading
|
|
21
|
+
* in: a 20-unit label with the rest as breathing room above and below.
|
|
22
|
+
* Changing it moves the heading, so it is a visual decision and not a hit-test
|
|
23
|
+
* one.
|
|
24
|
+
*/
|
|
25
|
+
export declare const UML_FRAME_BAND_HEIGHT = 44;
|
|
26
|
+
/**
|
|
27
|
+
* Which kind of UML diagram this frame draws — the DECLARED fact, as opposed to
|
|
28
|
+
* the name, which is free text and says whatever its author wants it to.
|
|
29
|
+
*
|
|
30
|
+
* ## Where the values come from
|
|
31
|
+
*
|
|
32
|
+
* UML 2.5.1 Annex A gives the normative frame kind names, each with the
|
|
33
|
+
* abbreviation that may be written in its place:
|
|
34
|
+
*
|
|
35
|
+
* - `activity` / `act`;
|
|
36
|
+
* - `class` — the one kind Annex A gives NO abbreviation for, so the word
|
|
37
|
+
* itself is the tag;
|
|
38
|
+
* - `component` / `cmp`;
|
|
39
|
+
* - `deployment` / `dep`;
|
|
40
|
+
* - `interaction` / `sd`;
|
|
41
|
+
* - `package` / `pkg`;
|
|
42
|
+
* - `state machine` / `stm`;
|
|
43
|
+
* - `use case` / `uc`.
|
|
44
|
+
*
|
|
45
|
+
* `obj` is NOT in that list. Annex A has no frame kind for the object diagram —
|
|
46
|
+
* the standard treats it as a class diagram showing instances — but every tool
|
|
47
|
+
* that draws one tags it `obj`, and an architect reading the sheet expects to
|
|
48
|
+
* see it. So `obj` is kept as a TOOL CONVENTION, recorded as such here so that
|
|
49
|
+
* nobody later "fixes" it against the spec without knowing it was a choice.
|
|
50
|
+
*
|
|
51
|
+
* ## Widening this union is additive
|
|
52
|
+
*
|
|
53
|
+
* Phase 1 shipped the first four kinds below; phase 2 APPENDED `cmp` and `dep`,
|
|
54
|
+
* the two structural frames of §11.6.4 and §19.2.4, then `act` and `stm`, the
|
|
55
|
+
* two behaviour frames of §15.2.4 and §14.2.4; phase 3 appends `sd`. Each
|
|
56
|
+
* arrives as a new VALUE of the existing `kind`
|
|
57
|
+
* string field — no new field, no schema change, no migration and no backfill.
|
|
58
|
+
* The same promise `C4NodeKind` and `BpmnNodeKind` already make.
|
|
59
|
+
*
|
|
60
|
+
* Appended, never reordered: the union is read as a set of strings by every
|
|
61
|
+
* consumer, and a document only ever stores one of them, so the ORDER below is a
|
|
62
|
+
* reading aid. Keeping it chronological is what lets a reviewer see at a glance
|
|
63
|
+
* which build a value arrived in.
|
|
64
|
+
*
|
|
65
|
+
* A value a client has never seen reads back as the string it is, and
|
|
66
|
+
* {@link UmlDiagramElementModel.heading} writes it verbatim, so a document
|
|
67
|
+
* created by a newer build still shows its own heading on an older one.
|
|
68
|
+
*/
|
|
69
|
+
export type UmlDiagramKind = 'class' | 'pkg' | 'obj' | 'uc' | 'cmp' | 'dep' | 'act' | 'stm' | 'sd';
|
|
70
|
+
/**
|
|
71
|
+
* The word written in the heading tag, per kind.
|
|
72
|
+
*
|
|
73
|
+
* A table rather than the raw value so that a kind whose stored discriminant
|
|
74
|
+
* and whose printed tag ever diverge has one place to say so. Today they are
|
|
75
|
+
* the same four strings, and that is worth stating rather than assuming.
|
|
76
|
+
*
|
|
77
|
+
* `Partial` on purpose: a frame read off a document carries whatever string was
|
|
78
|
+
* written there, including a kind from a later phase this build has never heard
|
|
79
|
+
* of. Typing the lookup as total would make {@link
|
|
80
|
+
* UmlDiagramElementModel.heading}'s `?? this.kind` fallback look like dead
|
|
81
|
+
* defensive code, when it is the whole of the append-only promise.
|
|
82
|
+
*/
|
|
83
|
+
export declare const UML_DIAGRAM_KIND_TAG: Partial<Record<UmlDiagramKind, string>>;
|
|
84
|
+
export type UmlDiagramProps = FrameworkBackgroundProps & {
|
|
85
|
+
/** The diagram name, written in the heading tag — edited inline on dblclick. */
|
|
86
|
+
name?: string;
|
|
87
|
+
/** Which kind of UML diagram this frame draws. */
|
|
88
|
+
kind?: UmlDiagramKind;
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* The UML diagram frame: the sheet one diagram is drawn on — a class diagram, a
|
|
92
|
+
* package diagram, an object diagram, a use case diagram, a component diagram, a
|
|
93
|
+
* deployment diagram. A framework
|
|
94
|
+
* background like every other one in the library: the user drops nodes on top
|
|
95
|
+
* of it, and a connector never snaps to it.
|
|
96
|
+
*
|
|
97
|
+
* It carries a NAME and a KIND, and the two are written together in the
|
|
98
|
+
* cut-corner tag at its top left, exactly as UML 2.5.1 Annex A draws it. That
|
|
99
|
+
* shared frame notation is the whole reason UML ships as ONE framework with a
|
|
100
|
+
* kind on the board rather than one framework per diagram family (ADR 0017):
|
|
101
|
+
* the kinds share a sheet and a heading, and they mix on it.
|
|
102
|
+
*
|
|
103
|
+
* What it LOOKS like is declared, not coded: see `UML_DIAGRAM_BACKGROUND` in
|
|
104
|
+
* `@labre/affine-gfx-uml`.
|
|
105
|
+
*/
|
|
106
|
+
export declare class UmlDiagramElementModel extends FrameworkBackgroundElementModel<UmlDiagramProps> {
|
|
107
|
+
get type(): string;
|
|
108
|
+
accessor name: string;
|
|
109
|
+
/**
|
|
110
|
+
* Which kind of diagram this frame draws — REQUIRED, unlike the C4 board's
|
|
111
|
+
* `level`, which is optional.
|
|
112
|
+
*
|
|
113
|
+
* The difference is what the field is for. A C4 board's level is a claim
|
|
114
|
+
* about the model an author may decline to make, so an absent one means "a
|
|
115
|
+
* free sketch". A UML frame's kind is part of its NOTATION: Annex A's heading
|
|
116
|
+
* is `<kind> <name>`, and a frame with no kind has no heading to draw. So it
|
|
117
|
+
* has a default, and `class` is the one — the diagram an architect reaches
|
|
118
|
+
* for first, and the only kind Annex A gives no abbreviation for.
|
|
119
|
+
*/
|
|
120
|
+
accessor kind: UmlDiagramKind;
|
|
121
|
+
accessor resizeEnabled: boolean;
|
|
122
|
+
accessor rotate: number;
|
|
123
|
+
accessor xywh: SerializedXYWH;
|
|
124
|
+
/**
|
|
125
|
+
* The heading written in the cut-corner tag: `<kind> <name>`.
|
|
126
|
+
*
|
|
127
|
+
* DERIVED, not stored. Nothing here reaches the document: the two halves are
|
|
128
|
+
* `kind` and `name`, and a rename edits `name` alone — so there is one place
|
|
129
|
+
* a heading can be changed from, and nothing to keep in step with it.
|
|
130
|
+
*
|
|
131
|
+
* A kind this client does not know — a phase-2 value on a phase-1 build — is
|
|
132
|
+
* written VERBATIM rather than dropped or replaced by the default. The tag
|
|
133
|
+
* table is a spelling aid, not a gate: a newer document still shows its own
|
|
134
|
+
* heading here, which is the visible half of the append-only promise
|
|
135
|
+
* {@link UmlDiagramKind} makes.
|
|
136
|
+
*/
|
|
137
|
+
get heading(): string;
|
|
138
|
+
/**
|
|
139
|
+
* A frame is picked by its BORDER — and by its HEADING BAND, the one carve-out
|
|
140
|
+
* it keeps.
|
|
141
|
+
*
|
|
142
|
+
* The same carve-out a C4 board makes, for the same reason and by the same
|
|
143
|
+
* arithmetic: the band is the only part of the sheet that is the SHEET rather
|
|
144
|
+
* than the diagram drawn on it. The heading is written there, nothing is ever
|
|
145
|
+
* dropped there by convention, and the drawing below is where the work goes —
|
|
146
|
+
* so a click there belongs to whatever node is under the pointer.
|
|
147
|
+
*
|
|
148
|
+
* Without this the heading would be unreachable, backgrounds being picked by
|
|
149
|
+
* their border band alone: the only thing left answering would be the view's
|
|
150
|
+
* double-click zone, which is the tight box of the DRAWN glyphs, and a single
|
|
151
|
+
* click on the heading would select nothing at all.
|
|
152
|
+
*
|
|
153
|
+
* The band is the top margin, full width — one number
|
|
154
|
+
* ({@link UML_FRAME_BAND_HEIGHT}), read from here by the framework
|
|
155
|
+
* declaration, so what is painted is what is selectable.
|
|
156
|
+
*/
|
|
157
|
+
includesPoint(x: number, y: number, options?: PointTestOptions): boolean;
|
|
158
|
+
}
|
|
@@ -0,0 +1,229 @@
|
|
|
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 { rotatePoint } from '../../../global/gfx/index.js';
|
|
36
|
+
import { field } from '../../../std/gfx/index.js';
|
|
37
|
+
import { FrameworkBackgroundElementModel } from '../framework-background/index.js';
|
|
38
|
+
/**
|
|
39
|
+
* Height of the diagram frame's heading band — the strip across the top of the
|
|
40
|
+
* frame the `<kind> <name>` tag is written in, in model units.
|
|
41
|
+
*
|
|
42
|
+
* Declared HERE, in the model, and re-exported by `@labre/affine-gfx-uml`
|
|
43
|
+
* rather than the other way round, for the reason `C4_BOARD_TITLE_BAND_HEIGHT`
|
|
44
|
+
* is: the frame's own hit test needs it (a diagram is clickable by its heading
|
|
45
|
+
* band as well as by its border), and `affine-model` cannot reach into
|
|
46
|
+
* `affine-block-surface` where the declaration is resolved. One number, owned
|
|
47
|
+
* by the layer that both the declaration and the hit test can read.
|
|
48
|
+
*
|
|
49
|
+
* It is the frame's TOP MARGIN — the inset the drawing gives up so the heading
|
|
50
|
+
* has somewhere to be written — so the strip that is painted, the strip that is
|
|
51
|
+
* picked and the strip that opens the rename are one number rather than three.
|
|
52
|
+
*
|
|
53
|
+
* 44 is the height of the cut-corner tag UML 2.5.1 Annex A draws the heading
|
|
54
|
+
* in: a 20-unit label with the rest as breathing room above and below.
|
|
55
|
+
* Changing it moves the heading, so it is a visual decision and not a hit-test
|
|
56
|
+
* one.
|
|
57
|
+
*/
|
|
58
|
+
export const UML_FRAME_BAND_HEIGHT = 44;
|
|
59
|
+
/**
|
|
60
|
+
* The word written in the heading tag, per kind.
|
|
61
|
+
*
|
|
62
|
+
* A table rather than the raw value so that a kind whose stored discriminant
|
|
63
|
+
* and whose printed tag ever diverge has one place to say so. Today they are
|
|
64
|
+
* the same four strings, and that is worth stating rather than assuming.
|
|
65
|
+
*
|
|
66
|
+
* `Partial` on purpose: a frame read off a document carries whatever string was
|
|
67
|
+
* written there, including a kind from a later phase this build has never heard
|
|
68
|
+
* of. Typing the lookup as total would make {@link
|
|
69
|
+
* UmlDiagramElementModel.heading}'s `?? this.kind` fallback look like dead
|
|
70
|
+
* defensive code, when it is the whole of the append-only promise.
|
|
71
|
+
*/
|
|
72
|
+
export const UML_DIAGRAM_KIND_TAG = {
|
|
73
|
+
class: 'class',
|
|
74
|
+
pkg: 'pkg',
|
|
75
|
+
obj: 'obj',
|
|
76
|
+
uc: 'uc',
|
|
77
|
+
// Both are Annex A's own abbreviations, written exactly as the Annex writes
|
|
78
|
+
// them — `cmp` for the component diagram, `dep` for the deployment diagram.
|
|
79
|
+
cmp: 'cmp',
|
|
80
|
+
dep: 'dep',
|
|
81
|
+
// Annex A's own abbreviations again — `act` for the activity diagram, `stm`
|
|
82
|
+
// for the state machine diagram. `stm` is the one tag in the table that is
|
|
83
|
+
// NOT the kind spelled out: Annex A's frame kind is the two words `state
|
|
84
|
+
// machine`, and `stm` is the abbreviation it gives in their place.
|
|
85
|
+
act: 'act',
|
|
86
|
+
stm: 'stm',
|
|
87
|
+
// Annex A's abbreviation for the interaction frame, and the third tag in the
|
|
88
|
+
// table that is not the kind spelled out: the frame kind is `interaction`.
|
|
89
|
+
sd: 'sd',
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* The UML diagram frame: the sheet one diagram is drawn on — a class diagram, a
|
|
93
|
+
* package diagram, an object diagram, a use case diagram, a component diagram, a
|
|
94
|
+
* deployment diagram. A framework
|
|
95
|
+
* background like every other one in the library: the user drops nodes on top
|
|
96
|
+
* of it, and a connector never snaps to it.
|
|
97
|
+
*
|
|
98
|
+
* It carries a NAME and a KIND, and the two are written together in the
|
|
99
|
+
* cut-corner tag at its top left, exactly as UML 2.5.1 Annex A draws it. That
|
|
100
|
+
* shared frame notation is the whole reason UML ships as ONE framework with a
|
|
101
|
+
* kind on the board rather than one framework per diagram family (ADR 0017):
|
|
102
|
+
* the kinds share a sheet and a heading, and they mix on it.
|
|
103
|
+
*
|
|
104
|
+
* What it LOOKS like is declared, not coded: see `UML_DIAGRAM_BACKGROUND` in
|
|
105
|
+
* `@labre/affine-gfx-uml`.
|
|
106
|
+
*/
|
|
107
|
+
let UmlDiagramElementModel = (() => {
|
|
108
|
+
let _classSuper = FrameworkBackgroundElementModel;
|
|
109
|
+
let _name_decorators;
|
|
110
|
+
let _name_initializers = [];
|
|
111
|
+
let _name_extraInitializers = [];
|
|
112
|
+
let _kind_decorators;
|
|
113
|
+
let _kind_initializers = [];
|
|
114
|
+
let _kind_extraInitializers = [];
|
|
115
|
+
let _resizeEnabled_decorators;
|
|
116
|
+
let _resizeEnabled_initializers = [];
|
|
117
|
+
let _resizeEnabled_extraInitializers = [];
|
|
118
|
+
let _rotate_decorators;
|
|
119
|
+
let _rotate_initializers = [];
|
|
120
|
+
let _rotate_extraInitializers = [];
|
|
121
|
+
let _xywh_decorators;
|
|
122
|
+
let _xywh_initializers = [];
|
|
123
|
+
let _xywh_extraInitializers = [];
|
|
124
|
+
return class UmlDiagramElementModel extends _classSuper {
|
|
125
|
+
static {
|
|
126
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
127
|
+
_name_decorators = [field('Diagram')];
|
|
128
|
+
_kind_decorators = [field('class')];
|
|
129
|
+
_resizeEnabled_decorators = [field(true)];
|
|
130
|
+
_rotate_decorators = [field(0)];
|
|
131
|
+
_xywh_decorators = [field()];
|
|
132
|
+
__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);
|
|
133
|
+
__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);
|
|
134
|
+
__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);
|
|
135
|
+
__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);
|
|
136
|
+
__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);
|
|
137
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
138
|
+
}
|
|
139
|
+
get type() {
|
|
140
|
+
return 'umlDiagram';
|
|
141
|
+
}
|
|
142
|
+
#name_accessor_storage = __runInitializers(this, _name_initializers, 'Diagram');
|
|
143
|
+
get name() { return this.#name_accessor_storage; }
|
|
144
|
+
set name(value) { this.#name_accessor_storage = value; }
|
|
145
|
+
#kind_accessor_storage = (__runInitializers(this, _name_extraInitializers), __runInitializers(this, _kind_initializers, 'class'));
|
|
146
|
+
/**
|
|
147
|
+
* Which kind of diagram this frame draws — REQUIRED, unlike the C4 board's
|
|
148
|
+
* `level`, which is optional.
|
|
149
|
+
*
|
|
150
|
+
* The difference is what the field is for. A C4 board's level is a claim
|
|
151
|
+
* about the model an author may decline to make, so an absent one means "a
|
|
152
|
+
* free sketch". A UML frame's kind is part of its NOTATION: Annex A's heading
|
|
153
|
+
* is `<kind> <name>`, and a frame with no kind has no heading to draw. So it
|
|
154
|
+
* has a default, and `class` is the one — the diagram an architect reaches
|
|
155
|
+
* for first, and the only kind Annex A gives no abbreviation for.
|
|
156
|
+
*/
|
|
157
|
+
get kind() { return this.#kind_accessor_storage; }
|
|
158
|
+
set kind(value) { this.#kind_accessor_storage = value; }
|
|
159
|
+
#resizeEnabled_accessor_storage = (__runInitializers(this, _kind_extraInitializers), __runInitializers(this, _resizeEnabled_initializers, true));
|
|
160
|
+
get resizeEnabled() { return this.#resizeEnabled_accessor_storage; }
|
|
161
|
+
set resizeEnabled(value) { this.#resizeEnabled_accessor_storage = value; }
|
|
162
|
+
#rotate_accessor_storage = (__runInitializers(this, _resizeEnabled_extraInitializers), __runInitializers(this, _rotate_initializers, 0));
|
|
163
|
+
get rotate() { return this.#rotate_accessor_storage; }
|
|
164
|
+
set rotate(value) { this.#rotate_accessor_storage = value; }
|
|
165
|
+
#xywh_accessor_storage = (__runInitializers(this, _rotate_extraInitializers), __runInitializers(this, _xywh_initializers, '[0,0,1400,900]'));
|
|
166
|
+
get xywh() { return this.#xywh_accessor_storage; }
|
|
167
|
+
set xywh(value) { this.#xywh_accessor_storage = value; }
|
|
168
|
+
/**
|
|
169
|
+
* The heading written in the cut-corner tag: `<kind> <name>`.
|
|
170
|
+
*
|
|
171
|
+
* DERIVED, not stored. Nothing here reaches the document: the two halves are
|
|
172
|
+
* `kind` and `name`, and a rename edits `name` alone — so there is one place
|
|
173
|
+
* a heading can be changed from, and nothing to keep in step with it.
|
|
174
|
+
*
|
|
175
|
+
* A kind this client does not know — a phase-2 value on a phase-1 build — is
|
|
176
|
+
* written VERBATIM rather than dropped or replaced by the default. The tag
|
|
177
|
+
* table is a spelling aid, not a gate: a newer document still shows its own
|
|
178
|
+
* heading here, which is the visible half of the append-only promise
|
|
179
|
+
* {@link UmlDiagramKind} makes.
|
|
180
|
+
*/
|
|
181
|
+
get heading() {
|
|
182
|
+
return `${UML_DIAGRAM_KIND_TAG[this.kind] ?? this.kind} ${this.name}`.trim();
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* A frame is picked by its BORDER — and by its HEADING BAND, the one carve-out
|
|
186
|
+
* it keeps.
|
|
187
|
+
*
|
|
188
|
+
* The same carve-out a C4 board makes, for the same reason and by the same
|
|
189
|
+
* arithmetic: the band is the only part of the sheet that is the SHEET rather
|
|
190
|
+
* than the diagram drawn on it. The heading is written there, nothing is ever
|
|
191
|
+
* dropped there by convention, and the drawing below is where the work goes —
|
|
192
|
+
* so a click there belongs to whatever node is under the pointer.
|
|
193
|
+
*
|
|
194
|
+
* Without this the heading would be unreachable, backgrounds being picked by
|
|
195
|
+
* their border band alone: the only thing left answering would be the view's
|
|
196
|
+
* double-click zone, which is the tight box of the DRAWN glyphs, and a single
|
|
197
|
+
* click on the heading would select nothing at all.
|
|
198
|
+
*
|
|
199
|
+
* The band is the top margin, full width — one number
|
|
200
|
+
* ({@link UML_FRAME_BAND_HEIGHT}), read from here by the framework
|
|
201
|
+
* declaration, so what is painted is what is selectable.
|
|
202
|
+
*/
|
|
203
|
+
includesPoint(x, y, options) {
|
|
204
|
+
if (super.includesPoint(x, y, options))
|
|
205
|
+
return true;
|
|
206
|
+
const [ex, ey, w, h] = this.deserializedXYWH;
|
|
207
|
+
// Element-local coordinates, undoing the element rotation about its centre
|
|
208
|
+
// — the band is axis-aligned inside the frame, not on the canvas.
|
|
209
|
+
let lx = x - ex;
|
|
210
|
+
let ly = y - ey;
|
|
211
|
+
const rotate = this.rotate ?? 0;
|
|
212
|
+
if (rotate) {
|
|
213
|
+
const [ux, uy] = rotatePoint([x, y], [ex + w / 2, ey + h / 2], -rotate);
|
|
214
|
+
lx = ux - ex;
|
|
215
|
+
ly = uy - ey;
|
|
216
|
+
}
|
|
217
|
+
if (lx < 0 || lx > w || ly < 0)
|
|
218
|
+
return false;
|
|
219
|
+
// Clamped to a frame shorter than its own heading — the degenerate case the
|
|
220
|
+
// renderer clamps too.
|
|
221
|
+
return ly <= Math.min(UML_FRAME_BAND_HEIGHT, h);
|
|
222
|
+
}
|
|
223
|
+
constructor() {
|
|
224
|
+
super(...arguments);
|
|
225
|
+
__runInitializers(this, _xywh_extraInitializers);
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
})();
|
|
229
|
+
export { UmlDiagramElementModel };
|
|
@@ -0,0 +1,161 @@
|
|
|
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 combined fragment's OPERATOR BAND — the strip across its top the
|
|
7
|
+
* pentagon tag is drawn in, in model units.
|
|
8
|
+
*
|
|
9
|
+
* Owned by the model for the reason {@link UML_FRAME_BAND_HEIGHT} is: the
|
|
10
|
+
* fragment's own hit test reads it (a fragment is clickable by its tag strip as
|
|
11
|
+
* well as by its border), and `affine-model` cannot reach into
|
|
12
|
+
* `affine-block-surface` where the declaration is resolved.
|
|
13
|
+
*
|
|
14
|
+
* The diagram frame's own 44, and deliberately: §17.6.4 draws the operator in
|
|
15
|
+
* the very same cut-corner pentagon Annex A draws a frame heading in — it IS a
|
|
16
|
+
* frame, nested in another one — and two numbers for one piece of furniture
|
|
17
|
+
* would drift.
|
|
18
|
+
*/
|
|
19
|
+
export declare const UML_FRAGMENT_BAND = 44;
|
|
20
|
+
/**
|
|
21
|
+
* The INTERACTION OPERATOR of a combined fragment — the word written in its
|
|
22
|
+
* pentagon, and the whole of what the fragment says (UML 2.5.1 §17.6.4).
|
|
23
|
+
*
|
|
24
|
+
* The twelve operators of §17.6.4 plus `ref`, and the thirteenth is the one
|
|
25
|
+
* that is not an operator at all: §17.7.4's InteractionUse is a different
|
|
26
|
+
* metaclass drawn as the same rectangle with the same pentagon, and every tool
|
|
27
|
+
* offers it from the same menu. Keeping it here is what lets one element, one
|
|
28
|
+
* renderer and one toolbar cover both — the alternative being a second
|
|
29
|
+
* background that differs from this one by a string.
|
|
30
|
+
*
|
|
31
|
+
* Widened the way every other UML union is: appended, never reordered, and read
|
|
32
|
+
* back as whatever string the document carries. A fragment whose operator this
|
|
33
|
+
* build has never heard of still paints its rectangle and still writes its own
|
|
34
|
+
* word in the tag.
|
|
35
|
+
*/
|
|
36
|
+
export type UmlFragmentOperator = 'alt' | 'opt' | 'loop' | 'par' | 'break' | 'critical' | 'seq' | 'strict' | 'neg' | 'assert' | 'ignore' | 'consider' | 'ref';
|
|
37
|
+
/**
|
|
38
|
+
* One OPERAND of a combined fragment — a horizontal band of it, separated from
|
|
39
|
+
* the next by a dashed line (§17.6.4).
|
|
40
|
+
*
|
|
41
|
+
* The shape of a `BackgroundInstanceZoneItem` in `@labre/affine-block-surface`,
|
|
42
|
+
* and deliberately the same three fields as {@link BpmnLane}: the primitive
|
|
43
|
+
* paints an instance partition from that structure, the audit reports it from
|
|
44
|
+
* that structure, and an operand with a shape of its own would be a fourth
|
|
45
|
+
* place the two have to agree.
|
|
46
|
+
*
|
|
47
|
+
* `name` is the operand's GUARD — `[x > 0]`, `[else]` — because that is the
|
|
48
|
+
* only thing §17.6.4 writes in an operand's own corner. `size` is a relative
|
|
49
|
+
* WEIGHT and not a height in model units: a fragment dragged taller
|
|
50
|
+
* redistributes the space between its operands instead of leaving a gap under
|
|
51
|
+
* the last one.
|
|
52
|
+
*/
|
|
53
|
+
export interface UmlFragmentOperand {
|
|
54
|
+
/** Stable id, generated at creation. Never the guard: a guard is rewritten. */
|
|
55
|
+
id: string;
|
|
56
|
+
/** The operand's guard, written in its top-left corner. */
|
|
57
|
+
name?: string;
|
|
58
|
+
/** Relative weight — see above. Must be a finite number greater than zero. */
|
|
59
|
+
size: number;
|
|
60
|
+
}
|
|
61
|
+
export type UmlFragmentProps = FrameworkBackgroundProps & {
|
|
62
|
+
/** Which operator the pentagon writes. */
|
|
63
|
+
operator?: UmlFragmentOperator;
|
|
64
|
+
/** The first operand's guard, or a `ref`'s interaction name. */
|
|
65
|
+
name?: string;
|
|
66
|
+
/** The fragment's partition into operands. Absent until a second is added. */
|
|
67
|
+
operands?: UmlFragmentOperand[];
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* A COMBINED FRAGMENT — the rectangle drawn round part of a sequence diagram
|
|
71
|
+
* with an operator in its corner (UML 2.5.1 §17.6.4), and, under the `ref`
|
|
72
|
+
* operator, the InteractionUse of §17.7.4.
|
|
73
|
+
*
|
|
74
|
+
* A framework background, and a TRANSPARENT one, like
|
|
75
|
+
* {@link UmlSubjectElementModel} and {@link UmlPartitionElementModel}: it is
|
|
76
|
+
* drawn OVER lifelines and messages that are already there, and an opaque card
|
|
77
|
+
* would hide the very conversation it is qualifying. Membership — which
|
|
78
|
+
* messages are inside the `alt`, which lifelines it covers — is geometry at
|
|
79
|
+
* read time (R11), never a stored list.
|
|
80
|
+
*
|
|
81
|
+
* ## Why the operator is a field and the operands are not elements
|
|
82
|
+
*
|
|
83
|
+
* The operator IS the fragment: `alt` and `loop` are the same rectangle saying
|
|
84
|
+
* two entirely different things, and nothing in the picture distinguishes them
|
|
85
|
+
* but the word. So it is stored, with `alt` as the default — the fragment an
|
|
86
|
+
* architect reaches for first, and the one §17.6.4 opens with.
|
|
87
|
+
*
|
|
88
|
+
* The operands are bands of that one rectangle, and they follow the BPMN pool's
|
|
89
|
+
* lanes exactly: an optional flat array, `undefined` rather than `[]` until the
|
|
90
|
+
* first one is added, so a fragment with a single operand stays byte-identical
|
|
91
|
+
* to one written before the field existed. The trade the pool's own note
|
|
92
|
+
* states applies here unchanged — two peers reordering the operands at the same
|
|
93
|
+
* moment resolve last-write-wins, one whole list winning over the other — and
|
|
94
|
+
* it is stated so it is reviewed rather than discovered.
|
|
95
|
+
*
|
|
96
|
+
* What it LOOKS like is declared, not coded: see `UML_FRAGMENT_FRAME` in
|
|
97
|
+
* `@labre/affine-gfx-uml`.
|
|
98
|
+
*/
|
|
99
|
+
export declare class UmlFragmentElementModel extends FrameworkBackgroundElementModel<UmlFragmentProps> {
|
|
100
|
+
get type(): string;
|
|
101
|
+
/**
|
|
102
|
+
* The operator — REQUIRED, with `alt` as the default, for the reason
|
|
103
|
+
* `UmlDiagramElementModel.kind` is required: it is part of the NOTATION
|
|
104
|
+
* rather than a claim an author may decline to make. A fragment with no
|
|
105
|
+
* operator has no word to write in its pentagon, and a pentagon with nothing
|
|
106
|
+
* in it is a rectangle with a bitten corner.
|
|
107
|
+
*/
|
|
108
|
+
accessor operator: UmlFragmentOperator;
|
|
109
|
+
/**
|
|
110
|
+
* The first operand's guard, or — under `ref` — the name of the interaction
|
|
111
|
+
* being referred to.
|
|
112
|
+
*
|
|
113
|
+
* Seeded EMPTY, unlike every other UML frame's name: §17.6.4 draws a guard
|
|
114
|
+
* only where there is one to draw, and `[alt]` with an empty bracket under it
|
|
115
|
+
* would be the notation inventing a condition the author has not written. An
|
|
116
|
+
* empty string keeps the field in the document (the `@field` default is
|
|
117
|
+
* written) without putting words on the page.
|
|
118
|
+
*/
|
|
119
|
+
accessor name: string;
|
|
120
|
+
accessor resizeEnabled: boolean;
|
|
121
|
+
accessor rotate: number;
|
|
122
|
+
/**
|
|
123
|
+
* Wide enough to cover three lifelines at the 200-unit spacing a sequence
|
|
124
|
+
* diagram is laid out on, and tall enough for three or four exchanges — the
|
|
125
|
+
* size an `alt` is actually drawn round.
|
|
126
|
+
*/
|
|
127
|
+
accessor xywh: SerializedXYWH;
|
|
128
|
+
/**
|
|
129
|
+
* The fragment's partition into operands, top to bottom.
|
|
130
|
+
*
|
|
131
|
+
* `undefined`, not `[]`, and for the three reasons `BpmnPoolElementModel
|
|
132
|
+
* .lanes` states in full: `@field()` writes nothing for an undefined default,
|
|
133
|
+
* so a fragment with a single operand — which is every `opt`, every `loop`
|
|
134
|
+
* and every `ref` — is byte-identical to one created before this field
|
|
135
|
+
* existed; the value is flat JSON because a list of operands is one atomic
|
|
136
|
+
* choice about how one fragment is cut; and it is declared here rather than
|
|
137
|
+
* on the base class because an operand is a subdivision of a combined
|
|
138
|
+
* fragment and of nothing else.
|
|
139
|
+
*
|
|
140
|
+
* What it MEANS is declared, not coded: `UML_FRAGMENT_FRAME.instanceZones`
|
|
141
|
+
* in `@labre/affine-gfx-uml` names this prop, and the framework-background
|
|
142
|
+
* primitive paints the separators and the guards from it.
|
|
143
|
+
*/
|
|
144
|
+
accessor operands: UmlFragmentOperand[] | undefined;
|
|
145
|
+
/**
|
|
146
|
+
* Picked by its BORDER — and by its OPERATOR BAND, the one carve-out it
|
|
147
|
+
* keeps.
|
|
148
|
+
*
|
|
149
|
+
* The same carve-out the diagram frame, the partition and the composite state
|
|
150
|
+
* all make, and for the same reason: the band is the only part of the
|
|
151
|
+
* fragment that is the FRAGMENT rather than the conversation drawn inside it.
|
|
152
|
+
* Without it the pentagon would be unreachable, a background being picked by
|
|
153
|
+
* its border alone — and a transparent fragment's border is a thin line round
|
|
154
|
+
* a region full of other people's messages.
|
|
155
|
+
*
|
|
156
|
+
* Nothing below the band is claimed, which matters here as much as on a
|
|
157
|
+
* partition: a fragment is drawn OVER lifelines, so every point that is not
|
|
158
|
+
* its own furniture has to fall through to whatever is under the pointer.
|
|
159
|
+
*/
|
|
160
|
+
includesPoint(x: number, y: number, options?: PointTestOptions): boolean;
|
|
161
|
+
}
|