@eclipse-glsp/client 0.9.0 → 0.10.0-next.17bfb07.173
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/css/glsp-sprotty.css +110 -8
- package/lib/base/action-dispatcher.d.ts +4 -3
- package/lib/base/action-dispatcher.d.ts.map +1 -1
- package/lib/base/action-dispatcher.js +22 -12
- package/lib/base/action-dispatcher.js.map +1 -1
- package/lib/base/actions/focus-change-action.d.ts +16 -7
- package/lib/base/actions/focus-change-action.d.ts.map +1 -1
- package/lib/base/actions/focus-change-action.js +31 -12
- package/lib/base/actions/focus-change-action.js.map +1 -1
- package/lib/base/actions/sprotty-actions.d.ts +7 -0
- package/lib/base/actions/sprotty-actions.d.ts.map +1 -0
- package/lib/{features/tool-palette/palette-item.js → base/actions/sprotty-actions.js} +4 -20
- package/lib/base/actions/sprotty-actions.js.map +1 -0
- package/lib/base/auto-complete/auto-complete-actions.d.ts +5 -3
- package/lib/base/auto-complete/auto-complete-actions.d.ts.map +1 -1
- package/lib/base/auto-complete/auto-complete-actions.js +24 -5
- package/lib/base/auto-complete/auto-complete-actions.js.map +1 -1
- package/lib/base/auto-complete/auto-complete-widget.d.ts +9 -2
- package/lib/base/auto-complete/auto-complete-widget.d.ts.map +1 -1
- package/lib/base/auto-complete/auto-complete-widget.js +16 -9
- package/lib/base/auto-complete/auto-complete-widget.js.map +1 -1
- package/lib/base/auto-complete/validation-decorator.js +2 -2
- package/lib/base/auto-complete/validation-decorator.js.map +1 -1
- package/lib/base/command-stack.d.ts.map +1 -1
- package/lib/base/command-stack.js +6 -5
- package/lib/base/command-stack.js.map +1 -1
- package/lib/base/container-modules.d.ts.map +1 -1
- package/lib/base/container-modules.js +2 -1
- package/lib/base/container-modules.js.map +1 -1
- package/lib/base/di.config.d.ts +1 -1
- package/lib/base/di.config.d.ts.map +1 -1
- package/lib/base/di.config.js +13 -14
- package/lib/base/di.config.js.map +1 -1
- package/lib/base/drag-aware-mouse-listener.d.ts +1 -1
- package/lib/base/drag-aware-mouse-listener.d.ts.map +1 -1
- package/lib/base/drag-aware-mouse-listener.js.map +1 -1
- package/lib/base/editor-context-service.d.ts +18 -5
- package/lib/base/editor-context-service.d.ts.map +1 -1
- package/lib/base/editor-context-service.js +39 -22
- package/lib/base/editor-context-service.js.map +1 -1
- package/lib/base/focus-tracker.d.ts +1 -1
- package/lib/base/focus-tracker.d.ts.map +1 -1
- package/lib/base/focus-tracker.js +4 -4
- package/lib/base/focus-tracker.js.map +1 -1
- package/lib/base/model/model-registry.d.ts.map +1 -1
- package/lib/base/model/model-registry.js +2 -2
- package/lib/base/model/model-registry.js.map +1 -1
- package/lib/base/model/update-model-command.d.ts +1 -1
- package/lib/base/model/update-model-command.d.ts.map +1 -1
- package/lib/base/model/update-model-command.js +15 -15
- package/lib/base/model/update-model-command.js.map +1 -1
- package/lib/base/model-initialization-constraint.d.ts +4 -5
- package/lib/base/model-initialization-constraint.d.ts.map +1 -1
- package/lib/base/model-initialization-constraint.js +11 -13
- package/lib/base/model-initialization-constraint.js.map +1 -1
- package/lib/base/selection-clearing-mouse-listener.d.ts.map +1 -1
- package/lib/base/selection-clearing-mouse-listener.js +1 -1
- package/lib/base/selection-clearing-mouse-listener.js.map +1 -1
- package/lib/base/source-uri-aware.d.ts +2 -17
- package/lib/base/source-uri-aware.d.ts.map +1 -1
- package/lib/base/source-uri-aware.js +4 -6
- package/lib/base/source-uri-aware.js.map +1 -1
- package/lib/base/tool-manager/glsp-tool-manager.d.ts +1 -1
- package/lib/base/tool-manager/glsp-tool-manager.d.ts.map +1 -1
- package/lib/base/tool-manager/glsp-tool-manager.js +10 -10
- package/lib/base/tool-manager/glsp-tool-manager.js.map +1 -1
- package/lib/base/tool-manager/tool-actions.d.ts +14 -0
- package/lib/base/tool-manager/tool-actions.d.ts.map +1 -0
- package/lib/base/tool-manager/tool-actions.js +25 -0
- package/lib/base/tool-manager/tool-actions.js.map +1 -0
- package/lib/base/types.d.ts +144 -20
- package/lib/base/types.d.ts.map +1 -1
- package/lib/base/types.js +14 -26
- package/lib/base/types.js.map +1 -1
- package/lib/base/view/view-registry.d.ts.map +1 -1
- package/lib/base/view/view-registry.js +2 -2
- package/lib/base/view/view-registry.js.map +1 -1
- package/lib/features/change-bounds/model.d.ts +1 -1
- package/lib/features/change-bounds/model.d.ts.map +1 -1
- package/lib/features/change-bounds/model.js +3 -3
- package/lib/features/change-bounds/model.js.map +1 -1
- package/lib/features/change-bounds/movement-restrictor.d.ts +37 -7
- package/lib/features/change-bounds/movement-restrictor.d.ts.map +1 -1
- package/lib/features/change-bounds/movement-restrictor.js +55 -40
- package/lib/features/change-bounds/movement-restrictor.js.map +1 -1
- package/lib/features/change-bounds/snap.d.ts +42 -2
- package/lib/features/change-bounds/snap.d.ts.map +1 -1
- package/lib/features/change-bounds/snap.js +78 -2
- package/lib/features/change-bounds/snap.js.map +1 -1
- package/lib/features/change-bounds/snap.spec.d.ts +17 -0
- package/lib/features/change-bounds/snap.spec.d.ts.map +1 -0
- package/lib/features/change-bounds/snap.spec.js +82 -0
- package/lib/features/change-bounds/snap.spec.js.map +1 -0
- package/lib/features/command-palette/command-palette-tool.js +3 -3
- package/lib/features/command-palette/command-palette-tool.js.map +1 -1
- package/lib/features/command-palette/di.config.d.ts +2 -2
- package/lib/features/command-palette/di.config.d.ts.map +1 -1
- package/lib/features/command-palette/di.config.js +6 -6
- package/lib/features/command-palette/di.config.js.map +1 -1
- package/lib/features/command-palette/server-command-palette-provider.d.ts +1 -1
- package/lib/features/command-palette/server-command-palette-provider.d.ts.map +1 -1
- package/lib/features/command-palette/server-command-palette-provider.js +13 -10
- package/lib/features/command-palette/server-command-palette-provider.js.map +1 -1
- package/lib/features/context-menu/delete-element-context-menu.d.ts +17 -1
- package/lib/features/context-menu/delete-element-context-menu.d.ts.map +1 -1
- package/lib/features/context-menu/delete-element-context-menu.js +4 -4
- package/lib/features/context-menu/delete-element-context-menu.js.map +1 -1
- package/lib/features/context-menu/di.config.d.ts +1 -1
- package/lib/features/context-menu/di.config.d.ts.map +1 -1
- package/lib/features/context-menu/di.config.js +8 -7
- package/lib/features/context-menu/di.config.js.map +1 -1
- package/lib/features/context-menu/selection-service-aware-context-menu-mouse-listener.d.ts +33 -1
- package/lib/features/context-menu/selection-service-aware-context-menu-mouse-listener.d.ts.map +1 -1
- package/lib/features/context-menu/selection-service-aware-context-menu-mouse-listener.js +41 -28
- package/lib/features/context-menu/selection-service-aware-context-menu-mouse-listener.js.map +1 -1
- package/lib/features/context-menu/server-context-menu-provider.d.ts +1 -1
- package/lib/features/context-menu/server-context-menu-provider.d.ts.map +1 -1
- package/lib/features/context-menu/server-context-menu-provider.js +8 -7
- package/lib/features/context-menu/server-context-menu-provider.js.map +1 -1
- package/lib/features/copy-paste/copy-paste-context-menu.d.ts +12 -15
- package/lib/features/copy-paste/copy-paste-context-menu.d.ts.map +1 -1
- package/lib/features/copy-paste/copy-paste-context-menu.js +26 -33
- package/lib/features/copy-paste/copy-paste-context-menu.js.map +1 -1
- package/lib/features/copy-paste/copy-paste-handler.d.ts +1 -1
- package/lib/features/copy-paste/copy-paste-handler.d.ts.map +1 -1
- package/lib/features/copy-paste/copy-paste-handler.js +10 -11
- package/lib/features/copy-paste/copy-paste-handler.js.map +1 -1
- package/lib/features/copy-paste/di.config.d.ts +1 -1
- package/lib/features/copy-paste/di.config.d.ts.map +1 -1
- package/lib/features/copy-paste/di.config.js +5 -7
- package/lib/features/copy-paste/di.config.js.map +1 -1
- package/lib/features/decoration/decoration-placer.d.ts +1 -1
- package/lib/features/decoration/decoration-placer.d.ts.map +1 -1
- package/lib/features/decoration/decoration-placer.js +19 -3
- package/lib/features/decoration/decoration-placer.js.map +1 -1
- package/lib/features/decoration/di.config.d.ts +2 -2
- package/lib/features/decoration/di.config.d.ts.map +1 -1
- package/lib/features/decoration/di.config.js +4 -4
- package/lib/features/decoration/di.config.js.map +1 -1
- package/lib/features/edit-label/di.config.d.ts +1 -1
- package/lib/features/edit-label/di.config.d.ts.map +1 -1
- package/lib/features/edit-label/di.config.js +5 -5
- package/lib/features/edit-label/di.config.js.map +1 -1
- package/lib/features/edit-label/edit-label-tool.d.ts.map +1 -1
- package/lib/features/edit-label/edit-label-tool.js +2 -2
- package/lib/features/edit-label/edit-label-tool.js.map +1 -1
- package/lib/features/edit-label/edit-label-validator.d.ts +4 -6
- package/lib/features/edit-label/edit-label-validator.d.ts.map +1 -1
- package/lib/features/edit-label/edit-label-validator.js +11 -13
- package/lib/features/edit-label/edit-label-validator.js.map +1 -1
- package/lib/features/hints/di.config.js +4 -4
- package/lib/features/hints/di.config.js.map +1 -1
- package/lib/features/hints/type-hints.d.ts +15 -5
- package/lib/features/hints/type-hints.d.ts.map +1 -1
- package/lib/features/hints/type-hints.js +29 -26
- package/lib/features/hints/type-hints.js.map +1 -1
- package/lib/features/hover/di.config.d.ts +1 -1
- package/lib/features/hover/di.config.d.ts.map +1 -1
- package/lib/features/hover/di.config.js +14 -10
- package/lib/features/hover/di.config.js.map +1 -1
- package/lib/features/hover/hover.d.ts +16 -4
- package/lib/features/hover/hover.d.ts.map +1 -1
- package/lib/features/hover/hover.js +42 -4
- package/lib/features/hover/hover.js.map +1 -1
- package/lib/features/layout/di.config.d.ts +3 -3
- package/lib/features/layout/di.config.d.ts.map +1 -1
- package/lib/features/layout/di.config.js +11 -7
- package/lib/features/layout/di.config.js.map +1 -1
- package/lib/features/layout/freeform-layout.d.ts +17 -1
- package/lib/features/layout/freeform-layout.d.ts.map +1 -1
- package/lib/features/layout/freeform-layout.js +4 -4
- package/lib/features/layout/freeform-layout.js.map +1 -1
- package/lib/features/layout/hbox-layout.d.ts +41 -0
- package/lib/features/layout/hbox-layout.d.ts.map +1 -0
- package/lib/features/layout/hbox-layout.js +189 -0
- package/lib/features/layout/hbox-layout.js.map +1 -0
- package/lib/features/layout/layout-elements-action.d.ts +198 -0
- package/lib/features/layout/layout-elements-action.d.ts.map +1 -0
- package/lib/features/layout/layout-elements-action.js +391 -0
- package/lib/features/layout/layout-elements-action.js.map +1 -0
- package/lib/features/layout/layout-elements-action.spec.d.ts +3 -0
- package/lib/features/layout/layout-elements-action.spec.d.ts.map +1 -0
- package/lib/features/layout/{layout-commands.spec.js → layout-elements-action.spec.js} +81 -62
- package/lib/features/layout/layout-elements-action.spec.js.map +1 -0
- package/lib/features/layout/vbox-layout.d.ts +17 -1
- package/lib/features/layout/vbox-layout.d.ts.map +1 -1
- package/lib/features/layout/vbox-layout.js +9 -8
- package/lib/features/layout/vbox-layout.js.map +1 -1
- package/lib/features/model-source-watcher/di.config.js +1 -1
- package/lib/features/model-source-watcher/di.config.js.map +1 -1
- package/lib/features/model-source-watcher/model-source-changed-action-handler.d.ts +1 -1
- package/lib/features/model-source-watcher/model-source-changed-action-handler.d.ts.map +1 -1
- package/lib/features/model-source-watcher/model-source-changed-action-handler.js +11 -11
- package/lib/features/model-source-watcher/model-source-changed-action-handler.js.map +1 -1
- package/lib/features/mouse-tool/di.config.d.ts +1 -1
- package/lib/features/mouse-tool/di.config.d.ts.map +1 -1
- package/lib/features/mouse-tool/di.config.js +2 -2
- package/lib/features/mouse-tool/di.config.js.map +1 -1
- package/lib/features/mouse-tool/mouse-tool.d.ts +9 -5
- package/lib/features/mouse-tool/mouse-tool.d.ts.map +1 -1
- package/lib/features/mouse-tool/mouse-tool.js +11 -53
- package/lib/features/mouse-tool/mouse-tool.js.map +1 -1
- package/lib/features/navigation/di.config.js +4 -4
- package/lib/features/navigation/di.config.js.map +1 -1
- package/lib/features/navigation/navigation-action-handler.d.ts +31 -16
- package/lib/features/navigation/navigation-action-handler.d.ts.map +1 -1
- package/lib/features/navigation/navigation-action-handler.js +52 -68
- package/lib/features/navigation/navigation-action-handler.js.map +1 -1
- package/lib/features/navigation/navigation-target-resolver.d.ts +3 -3
- package/lib/features/navigation/navigation-target-resolver.d.ts.map +1 -1
- package/lib/features/navigation/navigation-target-resolver.js +9 -10
- package/lib/features/navigation/navigation-target-resolver.js.map +1 -1
- package/lib/features/navigation/navigation-target-resolver.spec.js +12 -12
- package/lib/features/navigation/navigation-target-resolver.spec.js.map +1 -1
- package/lib/features/reconnect/model.d.ts +1 -1
- package/lib/features/reconnect/model.d.ts.map +1 -1
- package/lib/features/reconnect/model.js +1 -1
- package/lib/features/reconnect/model.js.map +1 -1
- package/lib/features/save/di.config.d.ts +1 -1
- package/lib/features/save/di.config.d.ts.map +1 -1
- package/lib/features/save/di.config.js +3 -3
- package/lib/features/save/di.config.js.map +1 -1
- package/lib/features/save/save-keylistener.d.ts +1 -1
- package/lib/features/save/save-keylistener.d.ts.map +1 -1
- package/lib/features/save/save-keylistener.js +3 -3
- package/lib/features/save/save-keylistener.js.map +1 -1
- package/lib/features/select/di.config.d.ts +1 -1
- package/lib/features/select/di.config.d.ts.map +1 -1
- package/lib/features/select/di.config.js +7 -8
- package/lib/features/select/di.config.js.map +1 -1
- package/lib/features/select/select-feedback-action.d.ts +26 -22
- package/lib/features/select/select-feedback-action.d.ts.map +1 -1
- package/lib/features/select/select-feedback-action.js +19 -46
- package/lib/features/select/select-feedback-action.js.map +1 -1
- package/lib/features/select/select-mouse-listener.d.ts +1 -1
- package/lib/features/select/select-mouse-listener.d.ts.map +1 -1
- package/lib/features/select/select-mouse-listener.js +1 -1
- package/lib/features/select/select-mouse-listener.js.map +1 -1
- package/lib/features/select/selection-service.d.ts +14 -5
- package/lib/features/select/selection-service.d.ts.map +1 -1
- package/lib/features/select/selection-service.js +55 -64
- package/lib/features/select/selection-service.js.map +1 -1
- package/lib/features/select/selection-service.spec.js +28 -25
- package/lib/features/select/selection-service.spec.js.map +1 -1
- package/lib/features/tool-feedback/change-bounds-tool-feedback.d.ts +17 -9
- package/lib/features/tool-feedback/change-bounds-tool-feedback.d.ts.map +1 -1
- package/lib/features/tool-feedback/change-bounds-tool-feedback.js +68 -38
- package/lib/features/tool-feedback/change-bounds-tool-feedback.js.map +1 -1
- package/lib/features/tool-feedback/creation-tool-feedback.d.ts +24 -12
- package/lib/features/tool-feedback/creation-tool-feedback.d.ts.map +1 -1
- package/lib/features/tool-feedback/creation-tool-feedback.js +88 -35
- package/lib/features/tool-feedback/creation-tool-feedback.js.map +1 -1
- package/lib/features/tool-feedback/css-feedback.d.ts +17 -10
- package/lib/features/tool-feedback/css-feedback.d.ts.map +1 -1
- package/lib/features/tool-feedback/css-feedback.js +42 -38
- package/lib/features/tool-feedback/css-feedback.js.map +1 -1
- package/lib/features/tool-feedback/di.config.d.ts +1 -1
- package/lib/features/tool-feedback/di.config.d.ts.map +1 -1
- package/lib/features/tool-feedback/di.config.js +18 -18
- package/lib/features/tool-feedback/di.config.js.map +1 -1
- package/lib/features/tool-feedback/edge-edit-tool-feedback.d.ts +45 -22
- package/lib/features/tool-feedback/edge-edit-tool-feedback.d.ts.map +1 -1
- package/lib/features/tool-feedback/edge-edit-tool-feedback.js +147 -114
- package/lib/features/tool-feedback/edge-edit-tool-feedback.js.map +1 -1
- package/lib/features/tool-feedback/feedback-action-dispatcher.d.ts +2 -2
- package/lib/features/tool-feedback/feedback-action-dispatcher.d.ts.map +1 -1
- package/lib/features/tool-feedback/feedback-action-dispatcher.js +4 -4
- package/lib/features/tool-feedback/feedback-action-dispatcher.js.map +1 -1
- package/lib/features/tool-feedback/marquee-tool-feedback.d.ts +21 -10
- package/lib/features/tool-feedback/marquee-tool-feedback.d.ts.map +1 -1
- package/lib/features/tool-feedback/marquee-tool-feedback.js +44 -18
- package/lib/features/tool-feedback/marquee-tool-feedback.js.map +1 -1
- package/lib/features/tool-feedback/model.d.ts +1 -2
- package/lib/features/tool-feedback/model.d.ts.map +1 -1
- package/lib/features/tool-feedback/model.js +1 -1
- package/lib/features/tool-feedback/model.js.map +1 -1
- package/lib/features/tool-feedback/view.d.ts +1 -1
- package/lib/features/tool-feedback/view.d.ts.map +1 -1
- package/lib/features/tool-feedback/view.js +22 -5
- package/lib/features/tool-feedback/view.js.map +1 -1
- package/lib/features/tool-palette/di.config.d.ts +1 -1
- package/lib/features/tool-palette/di.config.d.ts.map +1 -1
- package/lib/features/tool-palette/di.config.js +5 -4
- package/lib/features/tool-palette/di.config.js.map +1 -1
- package/lib/features/tool-palette/tool-palette.d.ts +10 -7
- package/lib/features/tool-palette/tool-palette.d.ts.map +1 -1
- package/lib/features/tool-palette/tool-palette.js +39 -32
- package/lib/features/tool-palette/tool-palette.js.map +1 -1
- package/lib/features/tools/base-glsp-tool.d.ts +3 -3
- package/lib/features/tools/base-glsp-tool.d.ts.map +1 -1
- package/lib/features/tools/base-glsp-tool.js +11 -11
- package/lib/features/tools/base-glsp-tool.js.map +1 -1
- package/lib/features/tools/change-bounds-tool.d.ts +7 -9
- package/lib/features/tools/change-bounds-tool.d.ts.map +1 -1
- package/lib/features/tools/change-bounds-tool.js +48 -71
- package/lib/features/tools/change-bounds-tool.js.map +1 -1
- package/lib/features/tools/delete-tool.d.ts +1 -1
- package/lib/features/tools/delete-tool.d.ts.map +1 -1
- package/lib/features/tools/delete-tool.js +17 -17
- package/lib/features/tools/delete-tool.js.map +1 -1
- package/lib/features/tools/di.config.d.ts +9 -2
- package/lib/features/tools/di.config.d.ts.map +1 -1
- package/lib/features/tools/di.config.js +26 -15
- package/lib/features/tools/di.config.js.map +1 -1
- package/lib/features/tools/edge-creation-tool.d.ts +1 -1
- package/lib/features/tools/edge-creation-tool.d.ts.map +1 -1
- package/lib/features/tools/edge-creation-tool.js +28 -21
- package/lib/features/tools/edge-creation-tool.js.map +1 -1
- package/lib/features/tools/edge-edit-tool.d.ts +3 -2
- package/lib/features/tools/edge-edit-tool.d.ts.map +1 -1
- package/lib/features/tools/edge-edit-tool.js +41 -36
- package/lib/features/tools/edge-edit-tool.js.map +1 -1
- package/lib/features/{tool-palette/palette-item.d.ts → tools/enable-default-tools-on-focus-loss.d.ts} +11 -11
- package/lib/features/tools/enable-default-tools-on-focus-loss.d.ts.map +1 -0
- package/lib/features/tools/enable-default-tools-on-focus-loss.js +29 -0
- package/lib/features/tools/enable-default-tools-on-focus-loss.js.map +1 -0
- package/lib/features/tools/marquee-behavior.d.ts +1 -1
- package/lib/features/tools/marquee-behavior.js +2 -2
- package/lib/features/tools/marquee-behavior.js.map +1 -1
- package/lib/features/tools/marquee-behavior.spec.js +63 -63
- package/lib/features/tools/marquee-behavior.spec.js.map +1 -1
- package/lib/features/tools/marquee-mouse-tool.d.ts +1 -1
- package/lib/features/tools/marquee-mouse-tool.d.ts.map +1 -1
- package/lib/features/tools/marquee-mouse-tool.js +20 -20
- package/lib/features/tools/marquee-mouse-tool.js.map +1 -1
- package/lib/features/tools/marquee-tool.d.ts +1 -1
- package/lib/features/tools/marquee-tool.d.ts.map +1 -1
- package/lib/features/tools/marquee-tool.js +4 -4
- package/lib/features/tools/marquee-tool.js.map +1 -1
- package/lib/features/tools/model.d.ts +3 -2
- package/lib/features/tools/model.d.ts.map +1 -1
- package/lib/features/tools/model.js +0 -15
- package/lib/features/tools/model.js.map +1 -1
- package/lib/features/tools/node-creation-tool.d.ts +1 -1
- package/lib/features/tools/node-creation-tool.d.ts.map +1 -1
- package/lib/features/tools/node-creation-tool.js +17 -17
- package/lib/features/tools/node-creation-tool.js.map +1 -1
- package/lib/features/tools/view.d.ts.map +1 -1
- package/lib/features/tools/view.js +2 -2
- package/lib/features/tools/view.js.map +1 -1
- package/lib/features/validation/di.config.d.ts +0 -15
- package/lib/features/validation/di.config.d.ts.map +1 -1
- package/lib/features/validation/di.config.js +9 -7
- package/lib/features/validation/di.config.js.map +1 -1
- package/lib/features/validation/marker-navigator.d.ts +27 -25
- package/lib/features/validation/marker-navigator.d.ts.map +1 -1
- package/lib/features/validation/marker-navigator.js +64 -91
- package/lib/features/validation/marker-navigator.js.map +1 -1
- package/lib/features/validation/marker-navigator.spec.d.ts.map +1 -1
- package/lib/features/validation/marker-navigator.spec.js +23 -37
- package/lib/features/validation/marker-navigator.spec.js.map +1 -1
- package/lib/features/validation/validate.d.ts +16 -30
- package/lib/features/validation/validate.d.ts.map +1 -1
- package/lib/features/validation/validate.js +61 -92
- package/lib/features/validation/validate.js.map +1 -1
- package/lib/features/viewport/di.config.d.ts +1 -1
- package/lib/features/viewport/di.config.d.ts.map +1 -1
- package/lib/features/viewport/di.config.js +7 -7
- package/lib/features/viewport/di.config.js.map +1 -1
- package/lib/features/viewport/glsp-scroll-mouse-listener.d.ts +1 -1
- package/lib/features/viewport/glsp-scroll-mouse-listener.d.ts.map +1 -1
- package/lib/features/viewport/glsp-scroll-mouse-listener.js +3 -3
- package/lib/features/viewport/glsp-scroll-mouse-listener.js.map +1 -1
- package/lib/index.d.ts +8 -9
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +15 -11
- package/lib/index.js.map +1 -1
- package/lib/lib/model.d.ts +3 -2
- package/lib/lib/model.d.ts.map +1 -1
- package/lib/lib/model.js +3 -18
- package/lib/lib/model.js.map +1 -1
- package/lib/model-source/glsp-diagram-server.d.ts +6 -6
- package/lib/model-source/glsp-diagram-server.d.ts.map +1 -1
- package/lib/model-source/glsp-diagram-server.js +8 -7
- package/lib/model-source/glsp-diagram-server.js.map +1 -1
- package/lib/sprotty-reexport.d.ts +174 -0
- package/lib/sprotty-reexport.d.ts.map +1 -0
- package/lib/sprotty-reexport.js +299 -0
- package/lib/sprotty-reexport.js.map +1 -0
- package/lib/utils/argument-utils.js +5 -5
- package/lib/utils/argument-utils.js.map +1 -1
- package/lib/utils/layout-utils.d.ts +6 -22
- package/lib/utils/layout-utils.d.ts.map +1 -1
- package/lib/utils/layout-utils.js +1 -1
- package/lib/utils/layout-utils.js.map +1 -1
- package/lib/utils/smodel-util.d.ts +117 -11
- package/lib/utils/smodel-util.d.ts.map +1 -1
- package/lib/utils/smodel-util.js +142 -37
- package/lib/utils/smodel-util.js.map +1 -1
- package/lib/utils/viewpoint-util.d.ts +3 -3
- package/lib/utils/viewpoint-util.d.ts.map +1 -1
- package/lib/utils/viewpoint-util.js +19 -3
- package/lib/utils/viewpoint-util.js.map +1 -1
- package/lib/views/base-view-module.d.ts.map +1 -1
- package/lib/views/base-view-module.js +21 -19
- package/lib/views/base-view-module.js.map +1 -1
- package/lib/views/compartments.js +2 -2
- package/lib/views/compartments.js.map +1 -1
- package/lib/views/glsp-edge-view.d.ts +1 -1
- package/lib/views/glsp-edge-view.d.ts.map +1 -1
- package/lib/views/glsp-edge-view.js +1 -1
- package/lib/views/glsp-edge-view.js.map +1 -1
- package/lib/views/index.js +6 -2
- package/lib/views/index.js.map +1 -1
- package/lib/views/issue-marker-view.d.ts.map +1 -1
- package/lib/views/issue-marker-view.js +3 -3
- package/lib/views/issue-marker-view.js.map +1 -1
- package/lib/views/rounded-corner-view.d.ts.map +1 -1
- package/lib/views/rounded-corner-view.js +2 -2
- package/lib/views/rounded-corner-view.js.map +1 -1
- package/package.json +8 -18
- package/src/base/action-dispatcher.ts +26 -16
- package/src/base/actions/focus-change-action.ts +25 -8
- package/src/base/actions/sprotty-actions.ts +26 -0
- package/src/base/auto-complete/auto-complete-actions.ts +7 -5
- package/src/base/auto-complete/auto-complete-widget.ts +15 -13
- package/src/base/command-stack.ts +7 -6
- package/src/base/container-modules.ts +4 -3
- package/src/base/di.config.ts +4 -5
- package/src/base/drag-aware-mouse-listener.ts +4 -4
- package/src/base/editor-context-service.ts +38 -16
- package/src/base/focus-tracker.ts +5 -4
- package/src/base/model/model-registry.ts +2 -2
- package/src/base/model/update-model-command.ts +9 -10
- package/src/base/model-initialization-constraint.ts +9 -11
- package/src/base/selection-clearing-mouse-listener.ts +1 -1
- package/src/base/source-uri-aware.ts +5 -4
- package/src/base/tool-manager/glsp-tool-manager.ts +9 -9
- package/src/base/tool-manager/tool-actions.ts +37 -0
- package/src/base/types.ts +31 -24
- package/src/base/view/view-registry.ts +2 -2
- package/src/features/change-bounds/model.ts +5 -5
- package/src/features/change-bounds/movement-restrictor.ts +74 -44
- package/src/features/change-bounds/snap.spec.ts +89 -0
- package/src/features/change-bounds/snap.ts +86 -3
- package/src/features/command-palette/di.config.ts +5 -7
- package/src/features/command-palette/server-command-palette-provider.ts +9 -8
- package/src/features/context-menu/delete-element-context-menu.ts +6 -6
- package/src/features/context-menu/di.config.ts +3 -2
- package/src/features/context-menu/selection-service-aware-context-menu-mouse-listener.ts +45 -17
- package/src/features/context-menu/server-context-menu-provider.ts +7 -6
- package/src/features/copy-paste/copy-paste-context-menu.ts +30 -23
- package/src/features/copy-paste/copy-paste-handler.ts +6 -6
- package/src/features/copy-paste/di.config.ts +7 -15
- package/src/features/decoration/decoration-placer.ts +4 -4
- package/src/features/decoration/di.config.ts +3 -5
- package/src/features/edit-label/di.config.ts +4 -5
- package/src/features/edit-label/edit-label-tool.ts +1 -2
- package/src/features/edit-label/edit-label-validator.ts +6 -10
- package/src/features/hints/di.config.ts +3 -3
- package/src/features/hints/type-hints.ts +33 -18
- package/src/features/hover/di.config.ts +8 -2
- package/src/features/hover/hover.ts +53 -11
- package/src/features/layout/di.config.ts +11 -7
- package/src/features/layout/freeform-layout.ts +6 -15
- package/src/features/layout/hbox-layout.ts +256 -0
- package/src/features/layout/{layout-commands.spec.ts → layout-elements-action.spec.ts} +89 -65
- package/src/features/layout/layout-elements-action.ts +486 -0
- package/src/features/layout/vbox-layout.ts +20 -20
- package/src/features/model-source-watcher/model-source-changed-action-handler.ts +7 -12
- package/src/features/mouse-tool/di.config.ts +3 -4
- package/src/features/mouse-tool/mouse-tool.ts +18 -59
- package/src/features/navigation/navigation-action-handler.ts +76 -42
- package/src/features/navigation/navigation-target-resolver.spec.ts +3 -3
- package/src/features/navigation/navigation-target-resolver.ts +9 -14
- package/src/features/reconnect/model.ts +2 -2
- package/src/features/save/di.config.ts +2 -3
- package/src/features/save/save-keylistener.ts +3 -3
- package/src/features/select/di.config.ts +6 -8
- package/src/features/select/select-feedback-action.ts +18 -46
- package/src/features/select/select-mouse-listener.ts +1 -2
- package/src/features/select/selection-service.spec.ts +12 -9
- package/src/features/select/selection-service.ts +52 -60
- package/src/features/tool-feedback/change-bounds-tool-feedback.ts +52 -22
- package/src/features/tool-feedback/creation-tool-feedback.ts +79 -30
- package/src/features/tool-feedback/css-feedback.ts +40 -37
- package/src/features/tool-feedback/di.config.ts +4 -5
- package/src/features/tool-feedback/edge-edit-tool-feedback.ts +140 -88
- package/src/features/tool-feedback/feedback-action-dispatcher.ts +4 -3
- package/src/features/tool-feedback/marquee-tool-feedback.ts +38 -13
- package/src/features/tool-feedback/model.ts +1 -3
- package/src/features/tool-feedback/view.tsx +3 -3
- package/src/features/tool-palette/di.config.ts +3 -2
- package/src/features/tool-palette/tool-palette.ts +35 -19
- package/src/features/tools/base-glsp-tool.ts +11 -11
- package/src/features/tools/change-bounds-tool.ts +37 -67
- package/src/features/tools/delete-tool.ts +9 -9
- package/src/features/tools/di.config.ts +23 -12
- package/src/features/tools/edge-creation-tool.ts +21 -12
- package/src/features/tools/edge-edit-tool.ts +25 -21
- package/src/features/tools/enable-default-tools-on-focus-loss.ts +33 -0
- package/src/features/tools/marquee-behavior.ts +2 -2
- package/src/features/tools/marquee-mouse-tool.ts +13 -14
- package/src/features/tools/marquee-tool.ts +3 -3
- package/src/features/tools/model.ts +4 -3
- package/src/features/tools/node-creation-tool.ts +8 -8
- package/src/features/tools/view.tsx +2 -3
- package/src/features/validation/di.config.ts +13 -11
- package/src/features/validation/marker-navigator.spec.ts +4 -2
- package/src/features/validation/marker-navigator.ts +67 -82
- package/src/features/validation/validate.ts +57 -91
- package/src/features/viewport/di.config.ts +1 -2
- package/src/features/viewport/glsp-scroll-mouse-listener.ts +5 -5
- package/src/index.ts +9 -9
- package/src/lib/model.ts +4 -4
- package/src/model-source/glsp-diagram-server.ts +15 -15
- package/src/sprotty-reexport.ts +283 -0
- package/src/utils/layout-utils.ts +9 -29
- package/src/utils/smodel-util.ts +139 -43
- package/src/utils/viewpoint-util.ts +5 -14
- package/src/views/base-view-module.ts +5 -1
- package/src/views/compartments.tsx +1 -1
- package/src/views/glsp-edge-view.tsx +4 -4
- package/src/views/issue-marker-view.tsx +2 -2
- package/src/views/rounded-corner-view.tsx +2 -3
- package/lib/features/layout/layout-commands.d.ts +0 -153
- package/lib/features/layout/layout-commands.d.ts.map +0 -1
- package/lib/features/layout/layout-commands.js +0 -412
- package/lib/features/layout/layout-commands.js.map +0 -1
- package/lib/features/layout/layout-commands.spec.d.ts +0 -3
- package/lib/features/layout/layout-commands.spec.d.ts.map +0 -1
- package/lib/features/layout/layout-commands.spec.js.map +0 -1
- package/lib/features/tool-palette/palette-item.d.ts.map +0 -1
- package/lib/features/tool-palette/palette-item.js.map +0 -1
- package/lib/protocol-reexport.d.ts +0 -45
- package/lib/protocol-reexport.d.ts.map +0 -1
- package/lib/protocol-reexport.js +0 -75
- package/lib/protocol-reexport.js.map +0 -1
- package/src/features/layout/layout-commands.ts +0 -424
- package/src/features/tool-palette/palette-item.ts +0 -38
- package/src/protocol-reexport.ts +0 -64
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/********************************************************************************
|
|
2
|
-
* Copyright (c) 2020-
|
|
2
|
+
* Copyright (c) 2020-2022 EclipseSource and others.
|
|
3
3
|
*
|
|
4
4
|
* This program and the accompanying materials are made available under the
|
|
5
5
|
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
@@ -14,11 +14,11 @@
|
|
|
14
14
|
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
15
|
********************************************************************************/
|
|
16
16
|
/* eslint-disable import/no-deprecated,no-unused-expressions */
|
|
17
|
-
import { Action } from '@eclipse-glsp/protocol';
|
|
17
|
+
import { Action, SModelElementSchema } from '@eclipse-glsp/protocol';
|
|
18
18
|
import { AssertionError, expect } from 'chai';
|
|
19
19
|
import { Container, injectable } from 'inversify';
|
|
20
|
-
import { defaultModule, SGraphFactory,
|
|
21
|
-
import {
|
|
20
|
+
import { defaultModule, SGraphFactory, SModelRoot } from 'sprotty';
|
|
21
|
+
import { TYPES } from '../../base/types';
|
|
22
22
|
import { IFeedbackActionDispatcher, IFeedbackEmitter } from '../tool-feedback/feedback-action-dispatcher';
|
|
23
23
|
import { SelectFeedbackAction } from './select-feedback-action';
|
|
24
24
|
import { SelectionListener, SelectionService } from './selection-service';
|
|
@@ -74,14 +74,16 @@ class MockSelectionListener implements SelectionListener {
|
|
|
74
74
|
function createContainer(): Container {
|
|
75
75
|
const container = new Container();
|
|
76
76
|
container.load(defaultModule);
|
|
77
|
+
// eslint-disable-next-line deprecation/deprecation
|
|
77
78
|
container.rebind(TYPES.IModelFactory).to(SGraphFactory).inSingletonScope();
|
|
78
|
-
container.bind(
|
|
79
|
+
container.bind(TYPES.IFeedbackActionDispatcher).to(MockFeedbackActionDispatcher).inSingletonScope();
|
|
79
80
|
container.bind(SelectionService).toSelf().inSingletonScope();
|
|
80
|
-
container.bind(
|
|
81
|
+
container.bind(TYPES.SelectionService).toService(SelectionService);
|
|
81
82
|
return container;
|
|
82
83
|
}
|
|
83
84
|
|
|
84
85
|
describe('SelectionService', () => {
|
|
86
|
+
// eslint-disable-next-line deprecation/deprecation
|
|
85
87
|
let graphFactory: SGraphFactory;
|
|
86
88
|
let root: SModelRoot;
|
|
87
89
|
let selectionService: SelectionService;
|
|
@@ -89,10 +91,11 @@ describe('SelectionService', () => {
|
|
|
89
91
|
|
|
90
92
|
beforeEach(() => {
|
|
91
93
|
const container = createContainer();
|
|
94
|
+
// eslint-disable-next-line deprecation/deprecation
|
|
92
95
|
graphFactory = container.get<SGraphFactory>(TYPES.IModelFactory);
|
|
93
96
|
root = createRoot('node1', 'node2', 'node3', 'node4', 'node5');
|
|
94
|
-
selectionService = container.get<SelectionService>(
|
|
95
|
-
feedbackDispatcher = container.get<MockFeedbackActionDispatcher>(
|
|
97
|
+
selectionService = container.get<SelectionService>(TYPES.SelectionService);
|
|
98
|
+
feedbackDispatcher = container.get<MockFeedbackActionDispatcher>(TYPES.IFeedbackActionDispatcher);
|
|
96
99
|
});
|
|
97
100
|
|
|
98
101
|
describe('Initial State', () => {
|
|
@@ -344,7 +347,7 @@ describe('SelectionService', () => {
|
|
|
344
347
|
expect(selectionService.hasSelectedElements()).to.equal(expectedSelection.length > 0);
|
|
345
348
|
expect(selectionService.getSelectedElementIDs()).to.have.lengthOf(expectedSelection.length);
|
|
346
349
|
if (expectedSelection.length > 0) {
|
|
347
|
-
expect(selectionService.getSelectedElementIDs()).to.have.
|
|
350
|
+
expect(selectionService.getSelectedElementIDs()).to.have.ordered.members(expectedSelection);
|
|
348
351
|
}
|
|
349
352
|
}
|
|
350
353
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/********************************************************************************
|
|
2
|
-
* Copyright (c) 2019-
|
|
2
|
+
* Copyright (c) 2019-2022 EclipseSource and others.
|
|
3
3
|
*
|
|
4
4
|
* This program and the accompanying materials are made available under the
|
|
5
5
|
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
@@ -13,24 +13,23 @@
|
|
|
13
13
|
*
|
|
14
14
|
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
15
|
********************************************************************************/
|
|
16
|
-
import { Action, distinctAdd, remove, SelectAction, SelectAllAction } from '@eclipse-glsp/protocol';
|
|
16
|
+
import { Action, distinctAdd, pluck, remove, SelectAction, SelectAllAction } from '@eclipse-glsp/protocol';
|
|
17
17
|
import { inject, injectable, multiInject, optional } from 'inversify';
|
|
18
18
|
import {
|
|
19
19
|
Command,
|
|
20
20
|
CommandExecutionContext,
|
|
21
21
|
ILogger,
|
|
22
22
|
isSelectable,
|
|
23
|
-
isSelected,
|
|
24
23
|
SChildElement,
|
|
24
|
+
Selectable,
|
|
25
25
|
SelectAllCommand as SprottySelectAllCommand,
|
|
26
26
|
SelectCommand as SprottySelectCommand,
|
|
27
27
|
SModelElement,
|
|
28
|
-
SModelRoot
|
|
29
|
-
SParentElement,
|
|
30
|
-
TYPES
|
|
28
|
+
SModelRoot
|
|
31
29
|
} from 'sprotty';
|
|
32
30
|
import { SModelRootListener } from '../../base/model/update-model-command';
|
|
33
|
-
import {
|
|
31
|
+
import { TYPES } from '../../base/types';
|
|
32
|
+
import { getElements, getMatchingElements } from '../../utils/smodel-util';
|
|
34
33
|
import { IFeedbackActionDispatcher } from '../tool-feedback/feedback-action-dispatcher';
|
|
35
34
|
import { SelectFeedbackAction } from './select-feedback-action';
|
|
36
35
|
|
|
@@ -43,10 +42,10 @@ export class SelectionService implements SModelRootListener {
|
|
|
43
42
|
private root: Readonly<SModelRoot>;
|
|
44
43
|
private selectedElementIDs: Set<string> = new Set();
|
|
45
44
|
|
|
46
|
-
@inject(
|
|
45
|
+
@inject(TYPES.IFeedbackActionDispatcher) protected feedbackDispatcher: IFeedbackActionDispatcher;
|
|
47
46
|
@inject(TYPES.ILogger) protected logger: ILogger;
|
|
48
47
|
|
|
49
|
-
constructor(@multiInject(
|
|
48
|
+
constructor(@multiInject(TYPES.SelectionListener) @optional() protected selectionListeners: SelectionListener[] = []) {}
|
|
50
49
|
|
|
51
50
|
register(selectionListener: SelectionListener): void {
|
|
52
51
|
distinctAdd(this.selectionListeners, selectionListener);
|
|
@@ -100,7 +99,12 @@ export class SelectionService implements SModelRootListener {
|
|
|
100
99
|
![...prevSelectedElementIDs].every(value => this.selectedElementIDs.has(value));
|
|
101
100
|
if (selectionChanged) {
|
|
102
101
|
// aggregate to feedback action handling all elements as only the last feedback is restored
|
|
103
|
-
this.dispatchFeedback([
|
|
102
|
+
this.dispatchFeedback([
|
|
103
|
+
SelectFeedbackAction.create({
|
|
104
|
+
selectedElementsIDs: [...this.selectedElementIDs],
|
|
105
|
+
deselectedElementsIDs: [...deselectedElementIDs]
|
|
106
|
+
})
|
|
107
|
+
]);
|
|
104
108
|
}
|
|
105
109
|
|
|
106
110
|
const rootChanged = prevRoot !== root;
|
|
@@ -122,16 +126,16 @@ export class SelectionService implements SModelRootListener {
|
|
|
122
126
|
return this.root;
|
|
123
127
|
}
|
|
124
128
|
|
|
125
|
-
getSelectedElements(): Readonly<SModelElement>[] {
|
|
126
|
-
return
|
|
129
|
+
getSelectedElements(): Readonly<SModelElement & Selectable>[] {
|
|
130
|
+
return getElements(this.root.index, Array.from(this.selectedElementIDs), isSelectable);
|
|
127
131
|
}
|
|
128
132
|
|
|
129
133
|
/**
|
|
130
134
|
* QUERY METHODS
|
|
131
135
|
*/
|
|
132
136
|
|
|
133
|
-
getSelectedElementIDs():
|
|
134
|
-
return this.selectedElementIDs;
|
|
137
|
+
getSelectedElementIDs(): string[] {
|
|
138
|
+
return [...this.selectedElementIDs];
|
|
135
139
|
}
|
|
136
140
|
|
|
137
141
|
hasSelectedElements(): boolean {
|
|
@@ -147,6 +151,11 @@ export class SelectionService implements SModelRootListener {
|
|
|
147
151
|
}
|
|
148
152
|
}
|
|
149
153
|
|
|
154
|
+
/**
|
|
155
|
+
* Handles a {@link SelectAction} and propagates the new selection to the {@link SelectionService}.
|
|
156
|
+
* Other tools might be selection-sensitive which means {@link SelectAction}s must be processed as fast as possible.
|
|
157
|
+
* Handling the action with a command ensures that the action is processed before the next render tick.
|
|
158
|
+
*/
|
|
150
159
|
@injectable()
|
|
151
160
|
export class SelectCommand extends Command {
|
|
152
161
|
static readonly KIND = SprottySelectCommand.KIND;
|
|
@@ -156,43 +165,37 @@ export class SelectCommand extends Command {
|
|
|
156
165
|
|
|
157
166
|
constructor(
|
|
158
167
|
@inject(TYPES.Action) public action: SelectAction,
|
|
159
|
-
@inject(
|
|
168
|
+
@inject(TYPES.SelectionService) public selectionService: SelectionService
|
|
160
169
|
) {
|
|
161
170
|
super();
|
|
162
171
|
}
|
|
163
172
|
|
|
164
173
|
execute(context: CommandExecutionContext): SModelRoot {
|
|
165
174
|
const model = context.root;
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
this.action.deselectedElementsIDs.forEach(id => {
|
|
173
|
-
const element = model.index.getById(id);
|
|
174
|
-
if (element instanceof SChildElement && isSelectable(element)) {
|
|
175
|
-
this.deselected.push(element);
|
|
176
|
-
}
|
|
177
|
-
});
|
|
178
|
-
return this.redo(context);
|
|
175
|
+
const selectionGuard = (element: any): element is SModelElement => element instanceof SChildElement && isSelectable(element);
|
|
176
|
+
const selectedElements = getElements(model.index, this.action.selectedElementsIDs, selectionGuard);
|
|
177
|
+
const deselectedElements = getElements(model.index, this.action.deselectedElementsIDs, selectionGuard);
|
|
178
|
+
|
|
179
|
+
this.selectionService.updateSelection(model, pluck(selectedElements, 'id'), pluck(deselectedElements, 'id'));
|
|
180
|
+
return model;
|
|
179
181
|
}
|
|
180
182
|
|
|
183
|
+
// Basically no-op since client-side undo is not supported in GLSP.
|
|
181
184
|
undo(context: CommandExecutionContext): SModelRoot {
|
|
182
|
-
const select = this.deselected.map(element => element.id);
|
|
183
|
-
const deselect = this.selected.map(element => element.id);
|
|
184
|
-
this.selectionService.updateSelection(context.root, select, deselect);
|
|
185
185
|
return context.root;
|
|
186
186
|
}
|
|
187
187
|
|
|
188
|
+
// Basically no-op since client-side redo is not supported in GLSP.
|
|
188
189
|
redo(context: CommandExecutionContext): SModelRoot {
|
|
189
|
-
const select = this.selected.map(element => element.id);
|
|
190
|
-
const deselect = this.deselected.map(element => element.id);
|
|
191
|
-
this.selectionService.updateSelection(context.root, select, deselect);
|
|
192
190
|
return context.root;
|
|
193
191
|
}
|
|
194
192
|
}
|
|
195
193
|
|
|
194
|
+
/**
|
|
195
|
+
* Handles a {@link SelectAllAction} and propagates the new selection to the {@link SelectionService}.
|
|
196
|
+
* Other tools might be selection-sensitive which means {@link SelectionAllAction}s must be processed as fast as possible.
|
|
197
|
+
* Handling the action with a command ensures that the action is processed before the next render tick.
|
|
198
|
+
*/
|
|
196
199
|
@injectable()
|
|
197
200
|
export class SelectAllCommand extends Command {
|
|
198
201
|
static readonly KIND = SprottySelectAllCommand.KIND;
|
|
@@ -200,44 +203,33 @@ export class SelectAllCommand extends Command {
|
|
|
200
203
|
|
|
201
204
|
constructor(
|
|
202
205
|
@inject(TYPES.Action) public action: SelectAllAction,
|
|
203
|
-
@inject(
|
|
206
|
+
@inject(TYPES.SelectionService) public selectionService: SelectionService
|
|
204
207
|
) {
|
|
205
208
|
super();
|
|
206
209
|
}
|
|
207
210
|
|
|
208
211
|
execute(context: CommandExecutionContext): SModelRoot {
|
|
209
|
-
|
|
212
|
+
const model = context.root;
|
|
213
|
+
const selectionGuard = (element: any): element is SModelElement => element instanceof SChildElement && isSelectable(element);
|
|
214
|
+
|
|
215
|
+
const selectables = getMatchingElements(model.index, selectionGuard);
|
|
216
|
+
const selectableIds = pluck(selectables, 'id');
|
|
217
|
+
if (this.action.select) {
|
|
218
|
+
this.selectionService.updateSelection(model, selectableIds, []);
|
|
219
|
+
} else {
|
|
220
|
+
this.selectionService.updateSelection(model, [], selectableIds);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
return model;
|
|
210
224
|
}
|
|
211
225
|
|
|
226
|
+
// Basically no-op since client-side undo is not supported in GLSP.
|
|
212
227
|
undo(context: CommandExecutionContext): SModelRoot {
|
|
213
|
-
const index = context.root.index;
|
|
214
|
-
for (const previousState of this.previousSelection) {
|
|
215
|
-
const element = index.getById(previousState[0]);
|
|
216
|
-
if (element !== undefined && isSelectable(element)) {
|
|
217
|
-
element.selected = previousState[1];
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
228
|
return context.root;
|
|
221
229
|
}
|
|
222
230
|
|
|
231
|
+
// Basically no-op since client-side redo is not supported in GLSP.
|
|
223
232
|
redo(context: CommandExecutionContext): SModelRoot {
|
|
224
|
-
const selectables: string[] = [];
|
|
225
|
-
this.selectAll(context.root, this.action.select, selectables);
|
|
226
|
-
if (this.action.select) {
|
|
227
|
-
this.selectionService.updateSelection(context.root, selectables, []);
|
|
228
|
-
} else {
|
|
229
|
-
this.selectionService.updateSelection(context.root, [], selectables);
|
|
230
|
-
}
|
|
231
233
|
return context.root;
|
|
232
234
|
}
|
|
233
|
-
|
|
234
|
-
protected selectAll(element: SParentElement, newState: boolean, selected: string[]): void {
|
|
235
|
-
if (isSelectable(element)) {
|
|
236
|
-
this.previousSelection.set(element.id, element.selected);
|
|
237
|
-
selected.push(element.id);
|
|
238
|
-
}
|
|
239
|
-
for (const child of element.children) {
|
|
240
|
-
this.selectAll(child, newState, selected);
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
235
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/********************************************************************************
|
|
2
|
-
* Copyright (c) 2019-
|
|
2
|
+
* Copyright (c) 2019-2022 EclipseSource and others.
|
|
3
3
|
*
|
|
4
4
|
* This program and the accompanying materials are made available under the
|
|
5
5
|
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
*
|
|
14
14
|
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
15
|
********************************************************************************/
|
|
16
|
-
import { Action, Point } from '@eclipse-glsp/protocol';
|
|
16
|
+
import { Action, hasStringProp, Point } from '@eclipse-glsp/protocol';
|
|
17
17
|
import { inject, injectable } from 'inversify';
|
|
18
18
|
import { VNode } from 'snabbdom';
|
|
19
19
|
import {
|
|
@@ -31,34 +31,64 @@ import {
|
|
|
31
31
|
SModelRoot,
|
|
32
32
|
TYPES
|
|
33
33
|
} from 'sprotty';
|
|
34
|
-
import {
|
|
34
|
+
import { forEachElement } from '../../utils/smodel-util';
|
|
35
35
|
import { addResizeHandles, isResizable, removeResizeHandles, SResizeHandle } from '../change-bounds/model';
|
|
36
36
|
import { createMovementRestrictionFeedback, removeMovementRestrictionFeedback } from '../change-bounds/movement-restrictor';
|
|
37
37
|
import { CursorCSS, cursorFeedbackAction } from '../tool-feedback/css-feedback';
|
|
38
38
|
import { ChangeBoundsTool } from '../tools/change-bounds-tool';
|
|
39
39
|
import { FeedbackCommand } from './model';
|
|
40
40
|
|
|
41
|
-
export
|
|
42
|
-
|
|
41
|
+
export interface ShowChangeBoundsToolResizeFeedbackAction extends Action {
|
|
42
|
+
kind: typeof ShowChangeBoundsToolResizeFeedbackAction.KIND;
|
|
43
|
+
|
|
44
|
+
elementId: string;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export namespace ShowChangeBoundsToolResizeFeedbackAction {
|
|
48
|
+
export const KIND = 'showChangeBoundsToolResizeFeedback';
|
|
49
|
+
|
|
50
|
+
export function is(object: any): object is ShowChangeBoundsToolResizeFeedbackAction {
|
|
51
|
+
return Action.hasKind(object, KIND) && hasStringProp(object, 'elementId');
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export function create(elementId: string): ShowChangeBoundsToolResizeFeedbackAction {
|
|
55
|
+
return {
|
|
56
|
+
kind: KIND,
|
|
57
|
+
elementId
|
|
58
|
+
};
|
|
59
|
+
}
|
|
43
60
|
}
|
|
44
61
|
|
|
45
|
-
export
|
|
46
|
-
|
|
62
|
+
export interface HideChangeBoundsToolResizeFeedbackAction extends Action {
|
|
63
|
+
kind: typeof HideChangeBoundsToolResizeFeedbackAction.KIND;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export namespace HideChangeBoundsToolResizeFeedbackAction {
|
|
67
|
+
export const KIND = 'hideChangeBoundsToolResizeFeedback';
|
|
68
|
+
|
|
69
|
+
export function is(object: any): object is HideChangeBoundsToolResizeFeedbackAction {
|
|
70
|
+
return Action.hasKind(object, KIND);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export function create(): HideChangeBoundsToolResizeFeedbackAction {
|
|
74
|
+
return { kind: KIND };
|
|
75
|
+
}
|
|
47
76
|
}
|
|
48
77
|
|
|
49
78
|
@injectable()
|
|
50
79
|
export class ShowChangeBoundsToolResizeFeedbackCommand extends FeedbackCommand {
|
|
51
|
-
static readonly KIND =
|
|
80
|
+
static readonly KIND = ShowChangeBoundsToolResizeFeedbackAction.KIND;
|
|
52
81
|
|
|
53
82
|
@inject(TYPES.Action) protected action: ShowChangeBoundsToolResizeFeedbackAction;
|
|
54
83
|
|
|
55
84
|
execute(context: CommandExecutionContext): CommandReturn {
|
|
56
85
|
const index = context.root.index;
|
|
57
|
-
index.all().filter(isResizable).forEach(removeResizeHandles);
|
|
58
86
|
|
|
59
|
-
|
|
87
|
+
forEachElement(index, isResizable, removeResizeHandles);
|
|
88
|
+
|
|
89
|
+
if (this.action.elementId) {
|
|
60
90
|
const resizeElement = index.getById(this.action.elementId);
|
|
61
|
-
if (
|
|
91
|
+
if (resizeElement && isResizable(resizeElement)) {
|
|
62
92
|
addResizeHandles(resizeElement);
|
|
63
93
|
}
|
|
64
94
|
}
|
|
@@ -68,13 +98,13 @@ export class ShowChangeBoundsToolResizeFeedbackCommand extends FeedbackCommand {
|
|
|
68
98
|
|
|
69
99
|
@injectable()
|
|
70
100
|
export class HideChangeBoundsToolResizeFeedbackCommand extends FeedbackCommand {
|
|
71
|
-
static readonly KIND =
|
|
101
|
+
static readonly KIND = HideChangeBoundsToolResizeFeedbackAction.KIND;
|
|
72
102
|
|
|
73
103
|
@inject(TYPES.Action) protected action: HideChangeBoundsToolResizeFeedbackAction;
|
|
74
104
|
|
|
75
105
|
execute(context: CommandExecutionContext): CommandReturn {
|
|
76
106
|
const index = context.root.index;
|
|
77
|
-
index
|
|
107
|
+
forEachElement(index, isResizable, removeResizeHandles);
|
|
78
108
|
return context.root;
|
|
79
109
|
}
|
|
80
110
|
}
|
|
@@ -95,7 +125,7 @@ export class FeedbackMoveMouseListener extends MouseListener {
|
|
|
95
125
|
super();
|
|
96
126
|
}
|
|
97
127
|
|
|
98
|
-
mouseDown(target: SModelElement, event: MouseEvent): Action[] {
|
|
128
|
+
override mouseDown(target: SModelElement, event: MouseEvent): Action[] {
|
|
99
129
|
if (event.button === 0 && !(target instanceof SResizeHandle)) {
|
|
100
130
|
const moveable = findParentByFeature(target, isMoveable);
|
|
101
131
|
if (moveable !== undefined) {
|
|
@@ -108,7 +138,7 @@ export class FeedbackMoveMouseListener extends MouseListener {
|
|
|
108
138
|
return [];
|
|
109
139
|
}
|
|
110
140
|
|
|
111
|
-
mouseMove(target: SModelElement, event: MouseEvent): Action[] {
|
|
141
|
+
override mouseMove(target: SModelElement, event: MouseEvent): Action[] {
|
|
112
142
|
const result: Action[] = [];
|
|
113
143
|
if (event.buttons === 0) {
|
|
114
144
|
this.mouseUp(target, event);
|
|
@@ -148,7 +178,7 @@ export class FeedbackMoveMouseListener extends MouseListener {
|
|
|
148
178
|
return false;
|
|
149
179
|
}
|
|
150
180
|
|
|
151
|
-
protected getElementMoves(target: SModelElement, event: MouseEvent,
|
|
181
|
+
protected getElementMoves(target: SModelElement, event: MouseEvent, finished: boolean): MoveAction | undefined {
|
|
152
182
|
if (!this.startDragPosition) {
|
|
153
183
|
return undefined;
|
|
154
184
|
}
|
|
@@ -172,7 +202,7 @@ export class FeedbackMoveMouseListener extends MouseListener {
|
|
|
172
202
|
);
|
|
173
203
|
|
|
174
204
|
if (isMoveable(element)) {
|
|
175
|
-
toPosition = this.validateMove(startPosition, toPosition, element,
|
|
205
|
+
toPosition = this.validateMove(startPosition, toPosition, element, finished);
|
|
176
206
|
elementMoves.push({
|
|
177
207
|
elementId: element.id,
|
|
178
208
|
fromPosition: {
|
|
@@ -185,7 +215,7 @@ export class FeedbackMoveMouseListener extends MouseListener {
|
|
|
185
215
|
}
|
|
186
216
|
});
|
|
187
217
|
if (elementMoves.length > 0) {
|
|
188
|
-
return
|
|
218
|
+
return MoveAction.create(elementMoves, { animate: false, finished });
|
|
189
219
|
} else {
|
|
190
220
|
return undefined;
|
|
191
221
|
}
|
|
@@ -194,7 +224,7 @@ export class FeedbackMoveMouseListener extends MouseListener {
|
|
|
194
224
|
protected validateMove(startPostion: Point, toPosition: Point, element: SModelElement, isFinished: boolean): Point {
|
|
195
225
|
let newPosition = toPosition;
|
|
196
226
|
if (this.tool.movementRestrictor) {
|
|
197
|
-
const valid = this.tool.movementRestrictor.validate(
|
|
227
|
+
const valid = this.tool.movementRestrictor.validate(element, toPosition);
|
|
198
228
|
let action;
|
|
199
229
|
if (!valid) {
|
|
200
230
|
action = createMovementRestrictionFeedback(element, this.tool.movementRestrictor);
|
|
@@ -219,14 +249,14 @@ export class FeedbackMoveMouseListener extends MouseListener {
|
|
|
219
249
|
}
|
|
220
250
|
}
|
|
221
251
|
|
|
222
|
-
mouseEnter(target: SModelElement, event: MouseEvent): Action[] {
|
|
252
|
+
override mouseEnter(target: SModelElement, event: MouseEvent): Action[] {
|
|
223
253
|
if (target instanceof SModelRoot && event.buttons === 0 && !this.startDragPosition) {
|
|
224
254
|
this.mouseUp(target, event);
|
|
225
255
|
}
|
|
226
256
|
return [];
|
|
227
257
|
}
|
|
228
258
|
|
|
229
|
-
mouseUp(target: SModelElement, event: MouseEvent): Action[] {
|
|
259
|
+
override mouseUp(target: SModelElement, event: MouseEvent): Action[] {
|
|
230
260
|
const result: Action[] = [];
|
|
231
261
|
if (this.startDragPosition) {
|
|
232
262
|
const moveAction = this.getElementMoves(target, event, true);
|
|
@@ -244,7 +274,7 @@ export class FeedbackMoveMouseListener extends MouseListener {
|
|
|
244
274
|
return result;
|
|
245
275
|
}
|
|
246
276
|
|
|
247
|
-
decorate(vnode: VNode, _element: SModelElement): VNode {
|
|
277
|
+
override decorate(vnode: VNode, _element: SModelElement): VNode {
|
|
248
278
|
return vnode;
|
|
249
279
|
}
|
|
250
280
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/********************************************************************************
|
|
2
|
-
* Copyright (c) 2019-
|
|
2
|
+
* Copyright (c) 2019-2022 EclipseSource and others.
|
|
3
3
|
*
|
|
4
4
|
* This program and the accompanying materials are made available under the
|
|
5
5
|
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
@@ -13,15 +13,12 @@
|
|
|
13
13
|
*
|
|
14
14
|
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
15
|
********************************************************************************/
|
|
16
|
-
import { Action, Point } from '@eclipse-glsp/protocol';
|
|
16
|
+
import { Action, Bounds, Point } from '@eclipse-glsp/protocol';
|
|
17
17
|
import { inject, injectable } from 'inversify';
|
|
18
18
|
import {
|
|
19
|
-
add,
|
|
20
19
|
AnchorComputerRegistry,
|
|
21
|
-
center,
|
|
22
20
|
CommandExecutionContext,
|
|
23
21
|
CommandReturn,
|
|
24
|
-
euclideanDistance,
|
|
25
22
|
findChildrenAtPosition,
|
|
26
23
|
findParentByFeature,
|
|
27
24
|
isBoundsAware,
|
|
@@ -32,28 +29,40 @@ import {
|
|
|
32
29
|
SChildElement,
|
|
33
30
|
SConnectableElement,
|
|
34
31
|
SDanglingAnchor,
|
|
35
|
-
SEdgeSchema,
|
|
32
|
+
SEdge as SEdgeSchema,
|
|
36
33
|
SModelElement,
|
|
37
34
|
SModelRoot,
|
|
38
35
|
SRoutableElement,
|
|
39
36
|
TYPES
|
|
40
37
|
} from 'sprotty';
|
|
41
|
-
import { isRoutable } from '../../utils/smodel-util';
|
|
38
|
+
import { BoundsAwareModelElement, isRoutable } from '../../utils/smodel-util';
|
|
42
39
|
import { getAbsolutePosition, toAbsoluteBounds, toAbsolutePosition } from '../../utils/viewpoint-util';
|
|
43
40
|
import { FeedbackCommand } from './model';
|
|
41
|
+
export interface DrawFeedbackEdgeAction extends Action {
|
|
42
|
+
kind: typeof DrawFeedbackEdgeAction.KIND;
|
|
43
|
+
elementTypeId: string;
|
|
44
|
+
sourceId: string;
|
|
45
|
+
edgeSchema?: SEdgeSchema;
|
|
46
|
+
}
|
|
44
47
|
|
|
45
|
-
export
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
48
|
+
export namespace DrawFeedbackEdgeAction {
|
|
49
|
+
export const KIND = 'drawFeedbackEdge';
|
|
50
|
+
|
|
51
|
+
export function is(object: any): object is DrawFeedbackEdgeAction {
|
|
52
|
+
return Action.hasKind(object, KIND);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function create(options: { elementTypeId: string; sourceId: string; edgeSchema?: SEdgeSchema }): DrawFeedbackEdgeAction {
|
|
56
|
+
return {
|
|
57
|
+
kind: KIND,
|
|
58
|
+
...options
|
|
59
|
+
};
|
|
60
|
+
}
|
|
52
61
|
}
|
|
53
62
|
|
|
54
63
|
@injectable()
|
|
55
64
|
export class DrawFeedbackEdgeCommand extends FeedbackCommand {
|
|
56
|
-
static readonly KIND =
|
|
65
|
+
static readonly KIND = DrawFeedbackEdgeAction.KIND;
|
|
57
66
|
|
|
58
67
|
constructor(@inject(TYPES.Action) protected action: DrawFeedbackEdgeAction) {
|
|
59
68
|
super();
|
|
@@ -66,13 +75,25 @@ export class DrawFeedbackEdgeCommand extends FeedbackCommand {
|
|
|
66
75
|
}
|
|
67
76
|
}
|
|
68
77
|
|
|
69
|
-
export
|
|
70
|
-
|
|
78
|
+
export interface RemoveFeedbackEdgeAction extends Action {
|
|
79
|
+
kind: typeof RemoveFeedbackEdgeAction.KIND;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export namespace RemoveFeedbackEdgeAction {
|
|
83
|
+
export const KIND = 'removeFeedbackEdgeCommand';
|
|
84
|
+
|
|
85
|
+
export function is(object: any): object is RemoveFeedbackEdgeAction {
|
|
86
|
+
return Action.hasKind(object, KIND);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export function create(): RemoveFeedbackEdgeAction {
|
|
90
|
+
return { kind: KIND };
|
|
91
|
+
}
|
|
71
92
|
}
|
|
72
93
|
|
|
73
94
|
@injectable()
|
|
74
95
|
export class RemoveFeedbackEdgeCommand extends FeedbackCommand {
|
|
75
|
-
static readonly KIND =
|
|
96
|
+
static readonly KIND = RemoveFeedbackEdgeAction.KIND;
|
|
76
97
|
|
|
77
98
|
execute(context: CommandExecutionContext): CommandReturn {
|
|
78
99
|
removeFeedbackEdge(context.root);
|
|
@@ -86,7 +107,7 @@ export class FeedbackEdgeEnd extends SDanglingAnchor {
|
|
|
86
107
|
readonly sourceId: string,
|
|
87
108
|
readonly elementTypeId: string,
|
|
88
109
|
public feedbackEdge: SRoutableElement | undefined = undefined,
|
|
89
|
-
|
|
110
|
+
override readonly type: string = FeedbackEdgeEnd.TYPE
|
|
90
111
|
) {
|
|
91
112
|
super();
|
|
92
113
|
}
|
|
@@ -97,7 +118,7 @@ export class FeedbackEdgeEndMovingMouseListener extends MouseListener {
|
|
|
97
118
|
super();
|
|
98
119
|
}
|
|
99
120
|
|
|
100
|
-
mouseMove(target: SModelElement, event: MouseEvent): Action[] {
|
|
121
|
+
override mouseMove(target: SModelElement, event: MouseEvent): Action[] {
|
|
101
122
|
const root = target.root;
|
|
102
123
|
const edgeEnd = root.index.getById(feedbackEdgeEndId(root));
|
|
103
124
|
if (!(edgeEnd instanceof FeedbackEdgeEnd) || !edgeEnd.feedbackEdge) {
|
|
@@ -106,38 +127,66 @@ export class FeedbackEdgeEndMovingMouseListener extends MouseListener {
|
|
|
106
127
|
|
|
107
128
|
const edge = edgeEnd.feedbackEdge;
|
|
108
129
|
const position = getAbsolutePosition(edgeEnd, event);
|
|
109
|
-
const endAtMousePosition = findChildrenAtPosition(target.root, position)
|
|
110
|
-
|
|
111
|
-
|
|
130
|
+
const endAtMousePosition = findChildrenAtPosition(target.root, position)
|
|
131
|
+
.reverse()
|
|
132
|
+
.find(element => isConnectable(element) && element.canConnect(edge, 'target'));
|
|
112
133
|
|
|
113
134
|
if (endAtMousePosition instanceof SConnectableElement && edge.source && isBoundsAware(edge.source)) {
|
|
114
|
-
const anchor = this.computeAbsoluteAnchor(endAtMousePosition, center(edge.source
|
|
115
|
-
if (euclideanDistance(anchor, edgeEnd.position) > 1) {
|
|
116
|
-
return [
|
|
135
|
+
const anchor = this.computeAbsoluteAnchor(endAtMousePosition, Bounds.center(toAbsoluteBounds(edge.source)));
|
|
136
|
+
if (Point.euclideanDistance(anchor, edgeEnd.position) > 1) {
|
|
137
|
+
return [MoveAction.create([{ elementId: edgeEnd.id, toPosition: anchor }], { animate: false })];
|
|
117
138
|
}
|
|
118
139
|
} else {
|
|
119
|
-
return [
|
|
140
|
+
return [MoveAction.create([{ elementId: edgeEnd.id, toPosition: position }], { animate: false })];
|
|
120
141
|
}
|
|
121
142
|
|
|
122
143
|
return [];
|
|
123
144
|
}
|
|
124
145
|
|
|
125
|
-
protected computeAbsoluteAnchor(element: SConnectableElement,
|
|
146
|
+
protected computeAbsoluteAnchor(element: SConnectableElement, absoluteReferencePoint: Point, offset?: number): Point {
|
|
147
|
+
const referencePointInParent = absoluteToParent(element, absoluteReferencePoint);
|
|
126
148
|
const anchorComputer = this.anchorRegistry.get(PolylineEdgeRouter.KIND, element.anchorKind);
|
|
127
|
-
let anchor = anchorComputer.getAnchor(element,
|
|
149
|
+
let anchor = anchorComputer.getAnchor(element, referencePointInParent, offset);
|
|
128
150
|
// The anchor is computed in the local coordinate system of the element.
|
|
129
151
|
// If the element is a nested child element we have to add the absolute position of its parent to the anchor.
|
|
130
152
|
if (element.parent !== element.root) {
|
|
131
153
|
const parent = findParentByFeature(element.parent, isBoundsAware);
|
|
132
154
|
if (parent) {
|
|
133
155
|
const absoluteParentPosition = toAbsoluteBounds(parent);
|
|
134
|
-
anchor = add(absoluteParentPosition, anchor);
|
|
156
|
+
anchor = Point.add(absoluteParentPosition, anchor);
|
|
135
157
|
}
|
|
136
158
|
}
|
|
137
159
|
return anchor;
|
|
138
160
|
}
|
|
139
161
|
}
|
|
140
162
|
|
|
163
|
+
/**
|
|
164
|
+
* Convert a point, specified in absolute coordinates, to a point relative
|
|
165
|
+
* to the parent of the specified child element.
|
|
166
|
+
* @param element the child element
|
|
167
|
+
* @param absolutePoint a point in absolute coordinates
|
|
168
|
+
* @returns the equivalent point, relative to the element's parent coordinates
|
|
169
|
+
*/
|
|
170
|
+
function absoluteToParent(element: BoundsAwareModelElement & SChildElement, absolutePoint: Point): Point {
|
|
171
|
+
if (isBoundsAware(element.parent)) {
|
|
172
|
+
return absoluteToLocal(element.parent, absolutePoint);
|
|
173
|
+
}
|
|
174
|
+
// If the parent is not bounds-aware, assume it's at 0; 0 and proceed
|
|
175
|
+
return absoluteToLocal(element, absolutePoint);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Convert a point, specified in absolute coordinates, to a point relative
|
|
180
|
+
* to the specified element.
|
|
181
|
+
* @param element the element
|
|
182
|
+
* @param absolutePoint a point in absolute coordinates
|
|
183
|
+
* @returns the equivalent point, relative to the element's coordinates
|
|
184
|
+
*/
|
|
185
|
+
function absoluteToLocal(element: BoundsAwareModelElement, absolutePoint: Point): Point {
|
|
186
|
+
const absoluteElementBounds = toAbsoluteBounds(element);
|
|
187
|
+
return { x: absolutePoint.x - absoluteElementBounds.x, y: absolutePoint.y - absoluteElementBounds.y };
|
|
188
|
+
}
|
|
189
|
+
|
|
141
190
|
export function feedbackEdgeId(root: SModelRoot): string {
|
|
142
191
|
return root.id + '_feedback_edge';
|
|
143
192
|
}
|