@eclipse-glsp/client 0.9.0-next.d0112315 → 0.9.0-next.f12e3d87
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/README.md +2 -1
- package/css/command-palette.css +6 -5
- package/css/glsp-sprotty.css +17 -8
- package/css/tool-palette.css +14 -14
- package/lib/base/action-dispatcher.d.ts.map +1 -1
- package/lib/base/action-dispatcher.js +39 -60
- package/lib/base/action-dispatcher.js.map +1 -1
- package/lib/base/actions/context-actions.d.ts +1 -1
- package/lib/base/actions/context-actions.d.ts.map +1 -1
- package/lib/base/actions/context-actions.js +11 -18
- package/lib/base/actions/context-actions.js.map +1 -1
- package/lib/base/actions/edit-mode-action.d.ts.map +1 -1
- package/lib/base/actions/edit-mode-action.js +12 -17
- package/lib/base/actions/edit-mode-action.js.map +1 -1
- package/lib/base/actions/edit-validation-actions.d.ts +1 -1
- package/lib/base/actions/edit-validation-actions.d.ts.map +1 -1
- package/lib/base/actions/edit-validation-actions.js +23 -26
- package/lib/base/actions/edit-validation-actions.js.map +1 -1
- package/lib/base/actions/focus-change-action.js +4 -5
- package/lib/base/actions/focus-change-action.js.map +1 -1
- package/lib/base/args.d.ts +1 -1
- package/lib/base/args.d.ts.map +1 -1
- package/lib/base/args.js.map +1 -1
- package/lib/base/auto-complete/auto-complete-widget.d.ts +1 -1
- package/lib/base/auto-complete/auto-complete-widget.d.ts.map +1 -1
- package/lib/base/auto-complete/auto-complete-widget.js +100 -150
- package/lib/base/auto-complete/auto-complete-widget.js.map +1 -1
- package/lib/base/auto-complete/validation-decorator.d.ts +1 -1
- package/lib/base/auto-complete/validation-decorator.js +38 -60
- 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 +19 -37
- package/lib/base/command-stack.js.map +1 -1
- package/lib/base/container-modules.d.ts +40 -0
- package/lib/base/container-modules.d.ts.map +1 -0
- package/lib/base/container-modules.js +84 -0
- package/lib/base/container-modules.js.map +1 -0
- package/lib/base/di.config.d.ts +11 -2
- package/lib/base/di.config.d.ts.map +1 -1
- package/lib/base/di.config.js +37 -37
- 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 +24 -48
- package/lib/base/drag-aware-mouse-listener.js.map +1 -1
- package/lib/base/editor-context.d.ts.map +1 -1
- package/lib/base/editor-context.js +64 -128
- package/lib/base/editor-context.js.map +1 -1
- package/lib/base/focus-tracker.d.ts.map +1 -1
- package/lib/base/focus-tracker.js +19 -24
- package/lib/base/focus-tracker.js.map +1 -1
- package/lib/base/model/model-registry.js +10 -28
- package/lib/base/model/model-registry.js.map +1 -1
- package/lib/base/model/update-model-command.d.ts +2 -2
- package/lib/base/model/update-model-command.d.ts.map +1 -1
- package/lib/base/model/update-model-command.js +67 -88
- package/lib/base/model/update-model-command.js.map +1 -1
- package/lib/base/model-initialization-constraint.js +31 -52
- package/lib/base/model-initialization-constraint.js.map +1 -1
- package/lib/base/operations/operation.d.ts +5 -5
- package/lib/base/operations/operation.d.ts.map +1 -1
- package/lib/base/operations/operation.js +75 -115
- package/lib/base/operations/operation.js.map +1 -1
- package/lib/base/selection-clearing-mouse-listener.js +10 -28
- package/lib/base/selection-clearing-mouse-listener.js.map +1 -1
- package/lib/base/source-uri-aware.js +2 -5
- package/lib/base/source-uri-aware.js.map +1 -1
- package/lib/base/tool-manager/glsp-tool-manager.js +56 -137
- package/lib/base/tool-manager/glsp-tool-manager.js.map +1 -1
- package/lib/base/types.d.ts +2 -1
- package/lib/base/types.d.ts.map +1 -1
- package/lib/base/types.js +3 -2
- package/lib/base/types.js.map +1 -1
- package/lib/base/view/view-registry.js +10 -28
- package/lib/base/view/view-registry.js.map +1 -1
- package/lib/features/change-bounds/model.d.ts +3 -1
- package/lib/features/change-bounds/model.d.ts.map +1 -1
- package/lib/features/change-bounds/model.js +20 -31
- package/lib/features/change-bounds/model.js.map +1 -1
- package/lib/features/change-bounds/movement-restrictor.d.ts.map +1 -1
- package/lib/features/change-bounds/movement-restrictor.js +29 -28
- package/lib/features/change-bounds/movement-restrictor.js.map +1 -1
- package/lib/features/change-bounds/snap.js +13 -24
- package/lib/features/change-bounds/snap.js.map +1 -1
- package/lib/features/command-palette/command-palette-tool.js +30 -38
- package/lib/features/command-palette/command-palette-tool.js.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.map +1 -1
- package/lib/features/command-palette/server-command-palette-provider.js +27 -32
- package/lib/features/command-palette/server-command-palette-provider.js.map +1 -1
- package/lib/features/context-menu/delete-element-context-menu.js +19 -67
- 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 -8
- 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.map +1 -1
- package/lib/features/context-menu/selection-service-aware-context-menu-mouse-listener.js +29 -67
- 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.map +1 -1
- package/lib/features/context-menu/server-context-menu-provider.js +29 -30
- package/lib/features/context-menu/server-context-menu-provider.js.map +1 -1
- package/lib/features/copy-paste/copy-paste-actions.d.ts +1 -1
- package/lib/features/copy-paste/copy-paste-actions.d.ts.map +1 -1
- package/lib/features/copy-paste/copy-paste-actions.js +20 -30
- package/lib/features/copy-paste/copy-paste-actions.js.map +1 -1
- package/lib/features/copy-paste/copy-paste-context-menu.d.ts +5 -1
- package/lib/features/copy-paste/copy-paste-context-menu.d.ts.map +1 -1
- package/lib/features/copy-paste/copy-paste-context-menu.js +99 -72
- package/lib/features/copy-paste/copy-paste-context-menu.js.map +1 -1
- package/lib/features/copy-paste/copy-paste-handler.d.ts +2 -0
- package/lib/features/copy-paste/copy-paste-handler.d.ts.map +1 -1
- package/lib/features/copy-paste/copy-paste-handler.js +67 -67
- package/lib/features/copy-paste/copy-paste-handler.js.map +1 -1
- package/lib/features/copy-paste/di.config.js +10 -10
- package/lib/features/copy-paste/di.config.js.map +1 -1
- package/lib/features/decoration/decoration-placer.d.ts.map +1 -1
- package/lib/features/decoration/decoration-placer.js +13 -32
- package/lib/features/decoration/decoration-placer.js.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.js +7 -7
- package/lib/features/edit-label/di.config.js.map +1 -1
- package/lib/features/edit-label/edit-label-tool.js +20 -43
- package/lib/features/edit-label/edit-label-tool.js.map +1 -1
- package/lib/features/edit-label/edit-label-validator.d.ts.map +1 -1
- package/lib/features/edit-label/edit-label-validator.js +37 -59
- package/lib/features/edit-label/edit-label-validator.js.map +1 -1
- package/lib/features/hints/di.config.js +8 -8
- package/lib/features/hints/di.config.js.map +1 -1
- package/lib/features/hints/model.d.ts +1 -1
- package/lib/features/hints/model.d.ts.map +1 -1
- package/lib/features/hints/request-type-hints-action.d.ts +1 -1
- package/lib/features/hints/request-type-hints-action.d.ts.map +1 -1
- package/lib/features/hints/request-type-hints-action.js +12 -14
- package/lib/features/hints/request-type-hints-action.js.map +1 -1
- package/lib/features/hints/type-hints.d.ts +4 -4
- package/lib/features/hints/type-hints.d.ts.map +1 -1
- package/lib/features/hints/type-hints.js +91 -133
- package/lib/features/hints/type-hints.js.map +1 -1
- package/lib/features/hover/di.config.js +7 -7
- package/lib/features/hover/di.config.js.map +1 -1
- package/lib/features/hover/hover.d.ts.map +1 -1
- package/lib/features/hover/hover.js +35 -76
- package/lib/features/hover/hover.js.map +1 -1
- package/lib/features/layout/di.config.d.ts +5 -1
- package/lib/features/layout/di.config.d.ts.map +1 -1
- package/lib/features/layout/di.config.js +47 -7
- package/lib/features/layout/di.config.js.map +1 -1
- package/lib/features/layout/freeform-layout.d.ts +16 -0
- package/lib/features/layout/freeform-layout.d.ts.map +1 -0
- package/lib/features/layout/freeform-layout.js +107 -0
- package/lib/features/layout/freeform-layout.js.map +1 -0
- package/lib/features/layout/layout-commands.d.ts +2 -2
- package/lib/features/layout/layout-commands.d.ts.map +1 -1
- package/lib/features/layout/layout-commands.js +187 -263
- package/lib/features/layout/layout-commands.js.map +1 -1
- package/lib/features/layout/layout-commands.spec.d.ts +1 -1
- package/lib/features/layout/layout-commands.spec.js +94 -88
- package/lib/features/layout/layout-commands.spec.js.map +1 -1
- package/lib/features/layout/vbox-layout.d.ts +25 -0
- package/lib/features/layout/vbox-layout.d.ts.map +1 -0
- package/lib/features/layout/vbox-layout.js +187 -0
- package/lib/features/layout/vbox-layout.js.map +1 -0
- package/lib/features/model-source-watcher/di.config.js +6 -6
- 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.map +1 -1
- package/lib/features/model-source-watcher/model-source-changed-action-handler.js +38 -45
- package/lib/features/model-source-watcher/model-source-changed-action-handler.js.map +1 -1
- package/lib/features/model-source-watcher/model-source-changed-action.d.ts +1 -1
- package/lib/features/model-source-watcher/model-source-changed-action.js +4 -5
- package/lib/features/model-source-watcher/model-source-changed-action.js.map +1 -1
- package/lib/features/mouse-tool/di.config.js +5 -5
- package/lib/features/mouse-tool/di.config.js.map +1 -1
- package/lib/features/mouse-tool/mouse-tool.d.ts +2 -1
- package/lib/features/mouse-tool/mouse-tool.d.ts.map +1 -1
- package/lib/features/mouse-tool/mouse-tool.js +69 -215
- package/lib/features/mouse-tool/mouse-tool.js.map +1 -1
- package/lib/features/navigation/di.config.js +9 -9
- package/lib/features/navigation/di.config.js.map +1 -1
- package/lib/features/navigation/navigation-action-handler.d.ts.map +1 -1
- package/lib/features/navigation/navigation-action-handler.js +136 -217
- package/lib/features/navigation/navigation-action-handler.js.map +1 -1
- package/lib/features/navigation/navigation-target-resolver.d.ts.map +1 -1
- package/lib/features/navigation/navigation-target-resolver.js +57 -122
- package/lib/features/navigation/navigation-target-resolver.js.map +1 -1
- package/lib/features/navigation/navigation-target-resolver.spec.d.ts +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/rank/model.d.ts +1 -1
- package/lib/features/rank/model.js +2 -2
- package/lib/features/rank/model.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 +9 -27
- 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 +5 -5
- package/lib/features/save/di.config.js.map +1 -1
- package/lib/features/save/save.d.ts +1 -1
- package/lib/features/save/save.js +11 -31
- package/lib/features/save/save.js.map +1 -1
- package/lib/features/select/di.config.js +11 -11
- package/lib/features/select/di.config.js.map +1 -1
- package/lib/features/select/select-feedback-action.d.ts.map +1 -1
- package/lib/features/select/select-feedback-action.js +45 -71
- package/lib/features/select/select-feedback-action.js.map +1 -1
- package/lib/features/select/select-mouse-listener.js +7 -23
- package/lib/features/select/select-mouse-listener.js.map +1 -1
- package/lib/features/select/selection-service.d.ts.map +1 -1
- package/lib/features/select/selection-service.js +132 -234
- package/lib/features/select/selection-service.js.map +1 -1
- package/lib/features/select/selection-service.spec.js +97 -124
- package/lib/features/select/selection-service.spec.js.map +1 -1
- package/lib/features/tool-feedback/change-bounds-tool-feedback.d.ts +2 -1
- package/lib/features/tool-feedback/change-bounds-tool-feedback.d.ts.map +1 -1
- package/lib/features/tool-feedback/change-bounds-tool-feedback.js +104 -127
- package/lib/features/tool-feedback/change-bounds-tool-feedback.js.map +1 -1
- package/lib/features/tool-feedback/creation-tool-feedback.d.ts.map +1 -1
- package/lib/features/tool-feedback/creation-tool-feedback.js +69 -103
- package/lib/features/tool-feedback/creation-tool-feedback.js.map +1 -1
- package/lib/features/tool-feedback/css-feedback.d.ts +3 -1
- package/lib/features/tool-feedback/css-feedback.d.ts.map +1 -1
- package/lib/features/tool-feedback/css-feedback.js +37 -81
- 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 +27 -27
- package/lib/features/tool-feedback/di.config.js.map +1 -1
- package/lib/features/tool-feedback/edge-edit-tool-feedback.d.ts +1 -1
- 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 -193
- 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 +36 -58
- package/lib/features/tool-feedback/feedback-action-dispatcher.js.map +1 -1
- package/lib/features/tool-feedback/marquee-tool-feedback.d.ts.map +1 -1
- package/lib/features/tool-feedback/marquee-tool-feedback.js +41 -69
- package/lib/features/tool-feedback/marquee-tool-feedback.js.map +1 -1
- package/lib/features/tool-feedback/model.d.ts +1 -1
- package/lib/features/tool-feedback/model.js +11 -27
- package/lib/features/tool-feedback/model.js.map +1 -1
- package/lib/features/tool-feedback/view.d.ts +4 -4
- package/lib/features/tool-feedback/view.d.ts.map +1 -1
- package/lib/features/tool-feedback/view.js +30 -37
- package/lib/features/tool-feedback/view.js.map +1 -1
- package/lib/features/tool-palette/di.config.js +6 -6
- package/lib/features/tool-palette/di.config.js.map +1 -1
- package/lib/features/tool-palette/palette-item.d.ts +1 -1
- package/lib/features/tool-palette/palette-item.d.ts.map +1 -1
- package/lib/features/tool-palette/palette-item.js +6 -5
- package/lib/features/tool-palette/palette-item.js.map +1 -1
- package/lib/features/tool-palette/tool-palette.d.ts.map +1 -1
- package/lib/features/tool-palette/tool-palette.js +182 -259
- package/lib/features/tool-palette/tool-palette.js.map +1 -1
- package/lib/features/tools/base-glsp-tool.js +37 -44
- package/lib/features/tools/base-glsp-tool.js.map +1 -1
- package/lib/features/tools/change-bounds-tool.d.ts +3 -2
- package/lib/features/tools/change-bounds-tool.d.ts.map +1 -1
- package/lib/features/tools/change-bounds-tool.js +187 -237
- package/lib/features/tools/change-bounds-tool.js.map +1 -1
- package/lib/features/tools/delete-tool.d.ts.map +1 -1
- package/lib/features/tools/delete-tool.js +69 -102
- package/lib/features/tools/delete-tool.js.map +1 -1
- package/lib/features/tools/di.config.js +18 -18
- package/lib/features/tools/di.config.js.map +1 -1
- package/lib/features/tools/edge-creation-tool.d.ts.map +1 -1
- package/lib/features/tools/edge-creation-tool.js +60 -85
- package/lib/features/tools/edge-creation-tool.js.map +1 -1
- package/lib/features/tools/edge-edit-tool.d.ts.map +1 -1
- package/lib/features/tools/edge-edit-tool.js +110 -181
- package/lib/features/tools/edge-edit-tool.js.map +1 -1
- package/lib/features/tools/marquee-mouse-tool.d.ts.map +1 -1
- package/lib/features/tools/marquee-mouse-tool.js +128 -149
- package/lib/features/tools/marquee-mouse-tool.js.map +1 -1
- package/lib/features/tools/marquee-tool.d.ts.map +1 -1
- package/lib/features/tools/marquee-tool.js +32 -58
- package/lib/features/tools/marquee-tool.js.map +1 -1
- package/lib/features/tools/model.js +4 -22
- package/lib/features/tools/model.js.map +1 -1
- package/lib/features/tools/node-creation-tool.d.ts.map +1 -1
- package/lib/features/tools/node-creation-tool.js +59 -89
- package/lib/features/tools/node-creation-tool.js.map +1 -1
- package/lib/features/tools/view.d.ts +1 -1
- package/lib/features/tools/view.d.ts.map +1 -1
- package/lib/features/tools/view.js +12 -31
- package/lib/features/tools/view.js.map +1 -1
- package/lib/features/undo-redo/model.d.ts +1 -1
- package/lib/features/undo-redo/model.js +8 -12
- package/lib/features/undo-redo/model.js.map +1 -1
- package/lib/features/validation/di.config.js +12 -12
- package/lib/features/validation/di.config.js.map +1 -1
- package/lib/features/validation/issue-marker.js +13 -51
- package/lib/features/validation/issue-marker.js.map +1 -1
- package/lib/features/validation/marker-navigator.d.ts.map +1 -1
- package/lib/features/validation/marker-navigator.js +129 -163
- package/lib/features/validation/marker-navigator.js.map +1 -1
- package/lib/features/validation/marker-navigator.spec.d.ts +1 -1
- package/lib/features/validation/marker-navigator.spec.js +79 -73
- package/lib/features/validation/marker-navigator.spec.js.map +1 -1
- package/lib/features/validation/validate.d.ts +2 -2
- package/lib/features/validation/validate.d.ts.map +1 -1
- package/lib/features/validation/validate.js +161 -276
- package/lib/features/validation/validate.js.map +1 -1
- package/lib/features/viewport/di.config.js +10 -10
- package/lib/features/viewport/di.config.js.map +1 -1
- package/lib/features/viewport/glsp-scroll-mouse-listener.d.ts.map +1 -1
- package/lib/features/viewport/glsp-scroll-mouse-listener.js +16 -32
- package/lib/features/viewport/glsp-scroll-mouse-listener.js.map +1 -1
- package/lib/index.d.ts +5 -4
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +25 -23
- package/lib/index.js.map +1 -1
- package/lib/lib/model.js +11 -27
- package/lib/lib/model.js.map +1 -1
- package/lib/model-source/glsp-diagram-server.d.ts +1 -1
- package/lib/model-source/glsp-diagram-server.d.ts.map +1 -1
- package/lib/model-source/glsp-diagram-server.js +43 -118
- package/lib/model-source/glsp-diagram-server.js.map +1 -1
- package/lib/model-source/glsp-server-status.js +10 -27
- package/lib/model-source/glsp-server-status.js.map +1 -1
- package/lib/utils/argument-utils.d.ts +3 -3
- package/lib/utils/argument-utils.d.ts.map +1 -1
- package/lib/utils/argument-utils.js +27 -92
- package/lib/utils/argument-utils.js.map +1 -1
- package/lib/utils/array-utils.d.ts +1 -1
- package/lib/utils/array-utils.d.ts.map +1 -1
- package/lib/utils/array-utils.js +10 -15
- package/lib/utils/array-utils.js.map +1 -1
- package/lib/utils/html-utils.js +2 -2
- package/lib/utils/html-utils.js.map +1 -1
- package/lib/utils/layout-utils.d.ts +1 -1
- package/lib/utils/layout-utils.d.ts.map +1 -1
- package/lib/utils/layout-utils.js +5 -5
- package/lib/utils/layout-utils.js.map +1 -1
- package/lib/utils/marker.js +11 -53
- package/lib/utils/marker.js.map +1 -1
- package/lib/utils/smodel-util.d.ts +3 -3
- package/lib/utils/smodel-util.d.ts.map +1 -1
- package/lib/utils/smodel-util.js +17 -51
- package/lib/utils/smodel-util.js.map +1 -1
- package/lib/utils/viewpoint-util.d.ts +1 -1
- package/lib/utils/viewpoint-util.d.ts.map +1 -1
- package/lib/utils/viewpoint-util.js +16 -16
- package/lib/utils/viewpoint-util.js.map +1 -1
- package/lib/views/base-view-module.js +9 -9
- package/lib/views/base-view-module.js.map +1 -1
- package/lib/views/compartments.d.ts +6 -0
- package/lib/views/compartments.d.ts.map +1 -0
- package/lib/views/compartments.js +43 -0
- package/lib/views/compartments.js.map +1 -0
- package/lib/views/default-types.js +1 -1
- package/lib/views/default-types.js.map +1 -1
- package/lib/views/glsp-edge-view.d.ts +1 -2
- package/lib/views/glsp-edge-view.d.ts.map +1 -1
- package/lib/views/glsp-edge-view.js +32 -62
- package/lib/views/glsp-edge-view.js.map +1 -1
- package/lib/views/index.d.ts +1 -0
- package/lib/views/index.d.ts.map +1 -1
- package/lib/views/index.js +1 -0
- package/lib/views/index.js.map +1 -1
- package/lib/views/issue-marker-view.d.ts +1 -1
- package/lib/views/issue-marker-view.d.ts.map +1 -1
- package/lib/views/issue-marker-view.js +19 -42
- package/lib/views/issue-marker-view.js.map +1 -1
- package/lib/views/rounded-corner-view.d.ts +2 -3
- package/lib/views/rounded-corner-view.d.ts.map +1 -1
- package/lib/views/rounded-corner-view.js +40 -70
- package/lib/views/rounded-corner-view.js.map +1 -1
- package/lib/views/rounded-corner.d.ts.map +1 -1
- package/lib/views/rounded-corner.js +44 -65
- package/lib/views/rounded-corner.js.map +1 -1
- package/package.json +6 -16
- package/src/base/action-dispatcher.ts +1 -2
- package/src/base/actions/context-actions.ts +6 -6
- package/src/base/actions/edit-mode-action.ts +3 -4
- package/src/base/actions/edit-validation-actions.ts +26 -14
- package/src/base/actions/focus-change-action.ts +1 -1
- package/src/base/args.ts +4 -2
- package/src/base/auto-complete/auto-complete-widget.ts +34 -21
- package/src/base/auto-complete/validation-decorator.ts +5 -5
- package/src/base/command-stack.ts +1 -3
- package/src/base/container-modules.ts +113 -0
- package/src/base/di.config.ts +31 -16
- package/src/base/drag-aware-mouse-listener.ts +1 -3
- package/src/base/editor-context.ts +2 -4
- package/src/base/focus-tracker.ts +0 -2
- package/src/base/model/update-model-command.ts +6 -8
- package/src/base/operations/operation.ts +57 -31
- package/src/base/types.ts +3 -2
- package/src/features/change-bounds/model.ts +16 -5
- package/src/features/change-bounds/movement-restrictor.ts +15 -7
- package/src/features/command-palette/server-command-palette-provider.ts +8 -5
- package/src/features/context-menu/di.config.ts +11 -9
- package/src/features/context-menu/selection-service-aware-context-menu-mouse-listener.ts +4 -3
- package/src/features/context-menu/server-context-menu-provider.ts +7 -3
- package/src/features/copy-paste/copy-paste-actions.ts +11 -8
- package/src/features/copy-paste/copy-paste-context-menu.ts +57 -17
- package/src/features/copy-paste/copy-paste-handler.ts +15 -6
- package/src/features/decoration/decoration-placer.ts +2 -13
- package/src/features/edit-label/edit-label-validator.ts +11 -12
- package/src/features/hints/model.ts +2 -2
- package/src/features/hints/request-type-hints-action.ts +10 -5
- package/src/features/hints/type-hints.ts +26 -30
- package/src/features/hover/hover.ts +1 -2
- package/src/features/layout/di.config.ts +30 -5
- package/src/features/layout/freeform-layout.ts +132 -0
- package/src/features/layout/layout-commands.spec.ts +79 -56
- package/src/features/layout/layout-commands.ts +42 -31
- package/src/features/layout/vbox-layout.ts +241 -0
- package/src/features/model-source-watcher/model-source-changed-action-handler.ts +3 -3
- package/src/features/model-source-watcher/model-source-changed-action.ts +2 -2
- package/src/features/mouse-tool/mouse-tool.ts +31 -22
- package/src/features/navigation/navigation-action-handler.ts +32 -22
- package/src/features/navigation/navigation-target-resolver.spec.ts +1 -3
- package/src/features/navigation/navigation-target-resolver.ts +14 -12
- package/src/features/rank/model.ts +2 -2
- package/src/features/reconnect/model.ts +2 -3
- package/src/features/save/di.config.ts +1 -2
- package/src/features/save/save.ts +2 -2
- package/src/features/select/select-feedback-action.ts +4 -6
- package/src/features/select/selection-service.spec.ts +9 -4
- package/src/features/select/selection-service.ts +13 -5
- package/src/features/tool-feedback/change-bounds-tool-feedback.ts +26 -17
- package/src/features/tool-feedback/creation-tool-feedback.ts +16 -7
- package/src/features/tool-feedback/css-feedback.ts +7 -4
- package/src/features/tool-feedback/di.config.ts +2 -5
- package/src/features/tool-feedback/edge-edit-tool-feedback.ts +18 -15
- package/src/features/tool-feedback/feedback-action-dispatcher.ts +6 -8
- package/src/features/tool-feedback/marquee-tool-feedback.ts +3 -2
- package/src/features/tool-feedback/model.ts +1 -2
- package/src/features/tool-feedback/view.tsx +16 -10
- package/src/features/tool-palette/di.config.ts +1 -1
- package/src/features/tool-palette/palette-item.ts +3 -3
- package/src/features/tool-palette/tool-palette.ts +12 -14
- package/src/features/tools/change-bounds-tool.ts +54 -25
- package/src/features/tools/delete-tool.ts +8 -3
- package/src/features/tools/edge-creation-tool.ts +5 -8
- package/src/features/tools/edge-edit-tool.ts +9 -18
- package/src/features/tools/marquee-mouse-tool.ts +57 -37
- package/src/features/tools/marquee-tool.ts +0 -1
- package/src/features/tools/node-creation-tool.ts +4 -9
- package/src/features/tools/view.tsx +17 -12
- package/src/features/undo-redo/model.ts +3 -3
- package/src/features/validation/marker-navigator.spec.ts +15 -9
- package/src/features/validation/marker-navigator.ts +23 -8
- package/src/features/validation/validate.ts +9 -13
- package/src/features/viewport/glsp-scroll-mouse-listener.ts +1 -10
- package/src/index.ts +26 -8
- package/src/model-source/glsp-diagram-server.ts +2 -14
- package/src/utils/argument-utils.ts +13 -9
- package/src/utils/array-utils.ts +4 -2
- package/src/utils/layout-utils.ts +11 -5
- package/src/utils/smodel-util.ts +14 -10
- package/src/utils/viewpoint-util.ts +3 -2
- package/src/views/compartments.tsx +37 -0
- package/src/views/glsp-edge-view.tsx +20 -13
- package/src/views/index.ts +1 -0
- package/src/views/issue-marker-view.tsx +11 -12
- package/src/views/rounded-corner-view.tsx +38 -25
- package/src/views/rounded-corner.ts +3 -4
- package/lib/base/actions/protocol-actions.d.ts +0 -41
- package/lib/base/actions/protocol-actions.d.ts.map +0 -1
- package/lib/base/actions/protocol-actions.js +0 -151
- package/lib/base/actions/protocol-actions.js.map +0 -1
- package/src/base/actions/protocol-actions.ts +0 -82
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/********************************************************************************
|
|
2
|
-
* Copyright (c) 2019 EclipseSource and others.
|
|
2
|
+
* Copyright (c) 2019-2021 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
|
|
@@ -58,7 +58,7 @@ import {
|
|
|
58
58
|
} from './layout-commands';
|
|
59
59
|
|
|
60
60
|
class MockActionDispatcher implements IActionDispatcher {
|
|
61
|
-
constructor(public dispatchedActions: Action[] = []) {
|
|
61
|
+
constructor(public dispatchedActions: Action[] = []) {}
|
|
62
62
|
dispatch(action: Action): Promise<void> {
|
|
63
63
|
this.dispatchedActions.push(action);
|
|
64
64
|
return Promise.resolve();
|
|
@@ -84,15 +84,18 @@ const selectionService = container.get<SelectionService>(GLSP_TYPES.SelectionSer
|
|
|
84
84
|
const actionDispatcher = new MockActionDispatcher();
|
|
85
85
|
|
|
86
86
|
const node1 = {
|
|
87
|
-
id: 'node1',
|
|
87
|
+
id: 'node1',
|
|
88
|
+
type: 'node:circle',
|
|
88
89
|
selected: true
|
|
89
90
|
};
|
|
90
91
|
const node2 = {
|
|
91
|
-
id: 'node2',
|
|
92
|
+
id: 'node2',
|
|
93
|
+
type: 'node:circle',
|
|
92
94
|
selected: true
|
|
93
95
|
};
|
|
94
96
|
const node3 = {
|
|
95
|
-
id: 'node3',
|
|
97
|
+
id: 'node3',
|
|
98
|
+
type: 'node:circle',
|
|
96
99
|
selected: true
|
|
97
100
|
};
|
|
98
101
|
const model = createModel();
|
|
@@ -123,7 +126,6 @@ const context: CommandExecutionContext = {
|
|
|
123
126
|
const defaultSize = { height: 10, width: 10 };
|
|
124
127
|
|
|
125
128
|
describe('AlignElementsCommand', () => {
|
|
126
|
-
|
|
127
129
|
it('should align all elements left', () => {
|
|
128
130
|
actionDispatcher.dispatchedActions = [];
|
|
129
131
|
const newModel = initModel([
|
|
@@ -135,11 +137,13 @@ describe('AlignElementsCommand', () => {
|
|
|
135
137
|
const command = new AlignElementsCommand(action, actionDispatcher, selectionService);
|
|
136
138
|
command.execute(newContext(newModel));
|
|
137
139
|
|
|
138
|
-
assertAllBounds(
|
|
139
|
-
[
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
140
|
+
assertAllBounds(
|
|
141
|
+
new Map([
|
|
142
|
+
['node1', { x: 111, y: 111, width: defaultSize.width, height: defaultSize.height }],
|
|
143
|
+
['node2', { x: 111, y: 222, width: defaultSize.width, height: defaultSize.height }],
|
|
144
|
+
['node3', { x: 111, y: 333, width: defaultSize.width, height: defaultSize.height }]
|
|
145
|
+
])
|
|
146
|
+
);
|
|
143
147
|
});
|
|
144
148
|
|
|
145
149
|
it('should align all elements right', () => {
|
|
@@ -153,11 +157,13 @@ describe('AlignElementsCommand', () => {
|
|
|
153
157
|
const command = new AlignElementsCommand(action, actionDispatcher, selectionService);
|
|
154
158
|
command.execute(newContext(newModel));
|
|
155
159
|
|
|
156
|
-
assertAllBounds(
|
|
157
|
-
[
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
160
|
+
assertAllBounds(
|
|
161
|
+
new Map([
|
|
162
|
+
['node1', { x: 333, y: 111, width: defaultSize.width, height: defaultSize.height }],
|
|
163
|
+
['node2', { x: 333, y: 222, width: defaultSize.width, height: defaultSize.height }],
|
|
164
|
+
['node3', { x: 333, y: 333, width: defaultSize.width, height: defaultSize.height }]
|
|
165
|
+
])
|
|
166
|
+
);
|
|
161
167
|
});
|
|
162
168
|
|
|
163
169
|
it('should align all elements center', () => {
|
|
@@ -171,11 +177,13 @@ describe('AlignElementsCommand', () => {
|
|
|
171
177
|
const command = new AlignElementsCommand(action, actionDispatcher, selectionService);
|
|
172
178
|
command.execute(newContext(newModel));
|
|
173
179
|
|
|
174
|
-
assertAllBounds(
|
|
175
|
-
[
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
180
|
+
assertAllBounds(
|
|
181
|
+
new Map([
|
|
182
|
+
['node1', { x: 222, y: 111, width: defaultSize.width, height: defaultSize.height }],
|
|
183
|
+
['node2', { x: 222, y: 222, width: defaultSize.width, height: defaultSize.height }],
|
|
184
|
+
['node3', { x: 222, y: 333, width: defaultSize.width, height: defaultSize.height }]
|
|
185
|
+
])
|
|
186
|
+
);
|
|
179
187
|
});
|
|
180
188
|
|
|
181
189
|
it('should align all elements top', () => {
|
|
@@ -189,11 +197,13 @@ describe('AlignElementsCommand', () => {
|
|
|
189
197
|
const command = new AlignElementsCommand(action, actionDispatcher, selectionService);
|
|
190
198
|
command.execute(newContext(newModel));
|
|
191
199
|
|
|
192
|
-
assertAllBounds(
|
|
193
|
-
[
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
200
|
+
assertAllBounds(
|
|
201
|
+
new Map([
|
|
202
|
+
['node1', { x: 111, y: 111, width: defaultSize.width, height: defaultSize.height }],
|
|
203
|
+
['node2', { x: 222, y: 111, width: defaultSize.width, height: defaultSize.height }],
|
|
204
|
+
['node3', { x: 333, y: 111, width: defaultSize.width, height: defaultSize.height }]
|
|
205
|
+
])
|
|
206
|
+
);
|
|
197
207
|
});
|
|
198
208
|
|
|
199
209
|
it('should align all elements bottom', () => {
|
|
@@ -207,11 +217,13 @@ describe('AlignElementsCommand', () => {
|
|
|
207
217
|
const command = new AlignElementsCommand(action, actionDispatcher, selectionService);
|
|
208
218
|
command.execute(newContext(newModel));
|
|
209
219
|
|
|
210
|
-
assertAllBounds(
|
|
211
|
-
[
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
220
|
+
assertAllBounds(
|
|
221
|
+
new Map([
|
|
222
|
+
['node1', { x: 111, y: 333, width: defaultSize.width, height: defaultSize.height }],
|
|
223
|
+
['node2', { x: 222, y: 333, width: defaultSize.width, height: defaultSize.height }],
|
|
224
|
+
['node3', { x: 333, y: 333, width: defaultSize.width, height: defaultSize.height }]
|
|
225
|
+
])
|
|
226
|
+
);
|
|
215
227
|
});
|
|
216
228
|
|
|
217
229
|
it('should align all elements middle', () => {
|
|
@@ -225,17 +237,17 @@ describe('AlignElementsCommand', () => {
|
|
|
225
237
|
const command = new AlignElementsCommand(action, actionDispatcher, selectionService);
|
|
226
238
|
command.execute(newContext(newModel));
|
|
227
239
|
|
|
228
|
-
assertAllBounds(
|
|
229
|
-
[
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
240
|
+
assertAllBounds(
|
|
241
|
+
new Map([
|
|
242
|
+
['node1', { x: 111, y: 222, width: defaultSize.width, height: defaultSize.height }],
|
|
243
|
+
['node2', { x: 222, y: 222, width: defaultSize.width, height: defaultSize.height }],
|
|
244
|
+
['node3', { x: 333, y: 222, width: defaultSize.width, height: defaultSize.height }]
|
|
245
|
+
])
|
|
246
|
+
);
|
|
233
247
|
});
|
|
234
|
-
|
|
235
248
|
});
|
|
236
249
|
|
|
237
250
|
describe('ResizeElementsCommand', () => {
|
|
238
|
-
|
|
239
251
|
it('should make same width as last', () => {
|
|
240
252
|
actionDispatcher.dispatchedActions = [];
|
|
241
253
|
const newModel = initModel([
|
|
@@ -248,11 +260,13 @@ describe('ResizeElementsCommand', () => {
|
|
|
248
260
|
command.execute(newContext(newModel));
|
|
249
261
|
|
|
250
262
|
// resize is keeping the center, so the X moves by diff / 2
|
|
251
|
-
assertAllBoundsInChangeBounds(
|
|
252
|
-
[
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
263
|
+
assertAllBoundsInChangeBounds(
|
|
264
|
+
new Map([
|
|
265
|
+
['node1', { x: 90, y: 100, height: 10, width: 30 }],
|
|
266
|
+
['node2', { x: 95, y: 200, height: 20, width: 30 }],
|
|
267
|
+
['node3', { x: 100, y: 300, height: 30, width: 30 }]
|
|
268
|
+
])
|
|
269
|
+
);
|
|
256
270
|
});
|
|
257
271
|
|
|
258
272
|
it('should make same height as last', () => {
|
|
@@ -267,11 +281,13 @@ describe('ResizeElementsCommand', () => {
|
|
|
267
281
|
command.execute(newContext(newModel));
|
|
268
282
|
|
|
269
283
|
// resize is keeping the center, so the Y moves by diff / 2
|
|
270
|
-
assertAllBoundsInChangeBounds(
|
|
271
|
-
[
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
284
|
+
assertAllBoundsInChangeBounds(
|
|
285
|
+
new Map([
|
|
286
|
+
['node1', { x: 100, y: 90, height: 30, width: 10 }],
|
|
287
|
+
['node2', { x: 100, y: 195, height: 30, width: 20 }],
|
|
288
|
+
['node3', { x: 100, y: 300, height: 30, width: 30 }]
|
|
289
|
+
])
|
|
290
|
+
);
|
|
275
291
|
});
|
|
276
292
|
|
|
277
293
|
it('should make same width and height as last', () => {
|
|
@@ -286,13 +302,14 @@ describe('ResizeElementsCommand', () => {
|
|
|
286
302
|
command.execute(newContext(newModel));
|
|
287
303
|
|
|
288
304
|
// resize is keeping the center, so the Y moves by diff / 2
|
|
289
|
-
assertAllBoundsInChangeBounds(
|
|
290
|
-
[
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
305
|
+
assertAllBoundsInChangeBounds(
|
|
306
|
+
new Map([
|
|
307
|
+
['node1', { x: 90, y: 90, height: 30, width: 30 }],
|
|
308
|
+
['node2', { x: 95, y: 195, height: 30, width: 30 }],
|
|
309
|
+
['node3', { x: 100, y: 300, height: 30, width: 30 }]
|
|
310
|
+
])
|
|
311
|
+
);
|
|
294
312
|
});
|
|
295
|
-
|
|
296
313
|
});
|
|
297
314
|
|
|
298
315
|
function initModel(elementAndBounds: ElementAndBounds[]): SModelRoot {
|
|
@@ -350,11 +367,17 @@ function getElementAndBoundsById(id: string, elementAndBounds: ElementAndBounds[
|
|
|
350
367
|
}
|
|
351
368
|
|
|
352
369
|
function dispatchedElementMoves(): ElementMove[] {
|
|
353
|
-
return actionDispatcher.dispatchedActions
|
|
370
|
+
return actionDispatcher.dispatchedActions
|
|
371
|
+
.filter(isMoveAction)
|
|
372
|
+
.map(a => a.moves)
|
|
373
|
+
.reduce((acc, val) => acc.concat(val), []);
|
|
354
374
|
}
|
|
355
375
|
|
|
356
376
|
function dispatchedChangeBounds(): ElementAndBounds[] {
|
|
357
|
-
return actionDispatcher.dispatchedActions
|
|
377
|
+
return actionDispatcher.dispatchedActions
|
|
378
|
+
.filter(isChangeBounds)
|
|
379
|
+
.map(a => a.newBounds)
|
|
380
|
+
.reduce((acc, val) => acc.concat(val), []);
|
|
358
381
|
}
|
|
359
382
|
|
|
360
383
|
function isMoveAction(action: Action): action is MoveAction {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/********************************************************************************
|
|
2
|
-
* Copyright (c) 2019 EclipseSource and others.
|
|
2
|
+
* Copyright (c) 2019-2021 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
|
|
@@ -27,24 +27,18 @@ import {
|
|
|
27
27
|
SModelElement,
|
|
28
28
|
TYPES
|
|
29
29
|
} from 'sprotty';
|
|
30
|
-
|
|
31
30
|
import { ChangeBoundsOperation } from '../../base/operations/operation';
|
|
32
31
|
import { GLSP_TYPES } from '../../base/types';
|
|
33
|
-
import {
|
|
34
|
-
toValidElementAndBounds,
|
|
35
|
-
toValidElementMove,
|
|
36
|
-
WriteableElementAndBounds,
|
|
37
|
-
WriteableElementMove
|
|
38
|
-
} from '../../utils/layout-utils';
|
|
32
|
+
import { toValidElementAndBounds, toValidElementMove, WriteableElementAndBounds, WriteableElementMove } from '../../utils/layout-utils';
|
|
39
33
|
import { BoundsAwareModelElement } from '../../utils/smodel-util';
|
|
40
34
|
import { isBoundsAwareMoveable, isResizable } from '../change-bounds/model';
|
|
41
35
|
import { IMovementRestrictor } from '../change-bounds/movement-restrictor';
|
|
42
36
|
import { SelectionService } from '../select/selection-service';
|
|
43
37
|
|
|
38
|
+
// eslint-disable-next-line no-shadow
|
|
44
39
|
export enum ResizeDimension {
|
|
45
40
|
Width,
|
|
46
41
|
Height,
|
|
47
|
-
// eslint-disable-next-line @typescript-eslint/camelcase
|
|
48
42
|
Width_And_Height
|
|
49
43
|
}
|
|
50
44
|
|
|
@@ -84,10 +78,11 @@ export class ResizeElementsAction implements Action {
|
|
|
84
78
|
* Function to reduce the dimension to a target dimension value, see Reduce.* for potential functions.
|
|
85
79
|
*/
|
|
86
80
|
public readonly reductionFunction: (...values: number[]) => number,
|
|
87
|
-
public readonly kind: string = ResizeElementsCommand.KIND
|
|
88
|
-
}
|
|
81
|
+
public readonly kind: string = ResizeElementsCommand.KIND
|
|
82
|
+
) {}
|
|
89
83
|
}
|
|
90
84
|
|
|
85
|
+
// eslint-disable-next-line no-shadow
|
|
91
86
|
export enum Alignment {
|
|
92
87
|
Left,
|
|
93
88
|
Center,
|
|
@@ -125,16 +120,18 @@ export class AlignElementsAction implements Action {
|
|
|
125
120
|
* Function to selected elements that are considered during alignment calculation, see Select.* for potential functions.
|
|
126
121
|
*/
|
|
127
122
|
public readonly selectionFunction: (elements: BoundsAwareModelElement[]) => BoundsAwareModelElement[] = Select.all,
|
|
128
|
-
public readonly kind = AlignElementsCommand.KIND
|
|
129
|
-
}
|
|
123
|
+
public readonly kind = AlignElementsCommand.KIND
|
|
124
|
+
) {}
|
|
130
125
|
}
|
|
131
126
|
|
|
132
127
|
@injectable()
|
|
133
128
|
abstract class LayoutElementsCommand extends Command {
|
|
134
|
-
constructor(
|
|
129
|
+
constructor(
|
|
130
|
+
@inject(TYPES.Action) protected action: ResizeElementsAction | AlignElementsAction,
|
|
135
131
|
@inject(TYPES.IActionDispatcher) protected actionDispatcher: IActionDispatcher,
|
|
136
132
|
@inject(GLSP_TYPES.SelectionService) protected selectionService: SelectionService,
|
|
137
|
-
@inject(GLSP_TYPES.IMovementRestrictor) @optional() readonly movementRestrictor?: IMovementRestrictor
|
|
133
|
+
@inject(GLSP_TYPES.IMovementRestrictor) @optional() readonly movementRestrictor?: IMovementRestrictor
|
|
134
|
+
) {
|
|
138
135
|
super();
|
|
139
136
|
}
|
|
140
137
|
|
|
@@ -170,10 +167,12 @@ abstract class LayoutElementsCommand extends Command {
|
|
|
170
167
|
export class ResizeElementsCommand extends LayoutElementsCommand {
|
|
171
168
|
static readonly KIND = 'layout:resize';
|
|
172
169
|
|
|
173
|
-
constructor(
|
|
170
|
+
constructor(
|
|
171
|
+
@inject(TYPES.Action) protected action: ResizeElementsAction,
|
|
174
172
|
@inject(TYPES.IActionDispatcher) protected actionDispatcher: IActionDispatcher,
|
|
175
173
|
@inject(GLSP_TYPES.SelectionService) protected selectionService: SelectionService,
|
|
176
|
-
@inject(GLSP_TYPES.IMovementRestrictor) @optional() readonly movementRestrictor?: IMovementRestrictor
|
|
174
|
+
@inject(GLSP_TYPES.IMovementRestrictor) @optional() readonly movementRestrictor?: IMovementRestrictor
|
|
175
|
+
) {
|
|
177
176
|
super(action, actionDispatcher, selectionService, movementRestrictor);
|
|
178
177
|
}
|
|
179
178
|
|
|
@@ -233,7 +232,10 @@ export class ResizeElementsCommand extends LayoutElementsCommand {
|
|
|
233
232
|
});
|
|
234
233
|
}
|
|
235
234
|
|
|
236
|
-
dispatchResizeActions(
|
|
235
|
+
dispatchResizeActions(
|
|
236
|
+
elements: BoundsAwareModelElement[],
|
|
237
|
+
change: (element: BoundsAwareModelElement, bounds: WriteableElementAndBounds) => void
|
|
238
|
+
): void {
|
|
237
239
|
const elementAndBounds: ElementAndBounds[] = []; // client- and server-side resize
|
|
238
240
|
elements.forEach(element => {
|
|
239
241
|
const elementChange = this.createElementAndBounds(element, change);
|
|
@@ -245,9 +247,10 @@ export class ResizeElementsCommand extends LayoutElementsCommand {
|
|
|
245
247
|
this.dispatchActions([new SetBoundsAction(elementAndBounds), new ChangeBoundsOperation(elementAndBounds)]);
|
|
246
248
|
}
|
|
247
249
|
|
|
248
|
-
createElementAndBounds(
|
|
249
|
-
|
|
250
|
-
|
|
250
|
+
createElementAndBounds(
|
|
251
|
+
element: BoundsAwareModelElement,
|
|
252
|
+
change: (_element: BoundsAwareModelElement, _bounds: WriteableElementAndBounds) => void
|
|
253
|
+
): WriteableElementAndBounds | undefined {
|
|
251
254
|
const bounds: WriteableElementAndBounds = {
|
|
252
255
|
elementId: element.id,
|
|
253
256
|
newPosition: {
|
|
@@ -278,10 +281,12 @@ export class ResizeElementsCommand extends LayoutElementsCommand {
|
|
|
278
281
|
export class AlignElementsCommand extends LayoutElementsCommand {
|
|
279
282
|
static readonly KIND = 'layout:align';
|
|
280
283
|
|
|
281
|
-
constructor(
|
|
284
|
+
constructor(
|
|
285
|
+
@inject(TYPES.Action) protected action: AlignElementsAction,
|
|
282
286
|
@inject(TYPES.IActionDispatcher) protected actionDispatcher: IActionDispatcher,
|
|
283
287
|
@inject(GLSP_TYPES.SelectionService) protected selectionService: SelectionService,
|
|
284
|
-
@inject(GLSP_TYPES.IMovementRestrictor) @optional() readonly movementRestrictor?: IMovementRestrictor
|
|
288
|
+
@inject(GLSP_TYPES.IMovementRestrictor) @optional() readonly movementRestrictor?: IMovementRestrictor
|
|
289
|
+
) {
|
|
285
290
|
super(action, actionDispatcher, selectionService, movementRestrictor);
|
|
286
291
|
}
|
|
287
292
|
|
|
@@ -319,7 +324,7 @@ export class AlignElementsCommand extends LayoutElementsCommand {
|
|
|
319
324
|
alignLeft(elements: BoundsAwareModelElement[]): void {
|
|
320
325
|
const calculationElements = this.action.selectionFunction(elements);
|
|
321
326
|
const minX = calculationElements.map(element => element.bounds.x).reduce((a, b) => Math.min(a, b));
|
|
322
|
-
this.dispatchAlignActions(elements, (_, move) => move.toPosition.x = minX);
|
|
327
|
+
this.dispatchAlignActions(elements, (_, move) => (move.toPosition.x = minX));
|
|
323
328
|
}
|
|
324
329
|
|
|
325
330
|
alignCenter(elements: BoundsAwareModelElement[]): void {
|
|
@@ -328,19 +333,19 @@ export class AlignElementsCommand extends LayoutElementsCommand {
|
|
|
328
333
|
const maxX = calculationElements.map(element => element.bounds.x + element.bounds.width).reduce((a, b) => Math.max(a, b));
|
|
329
334
|
const diffX = maxX - minX;
|
|
330
335
|
const centerX = minX + 0.5 * diffX;
|
|
331
|
-
this.dispatchAlignActions(elements, (element, move) => move.toPosition.x = centerX - 0.5 * element.bounds.width);
|
|
336
|
+
this.dispatchAlignActions(elements, (element, move) => (move.toPosition.x = centerX - 0.5 * element.bounds.width));
|
|
332
337
|
}
|
|
333
338
|
|
|
334
339
|
alignRight(elements: BoundsAwareModelElement[]): void {
|
|
335
340
|
const calculationElements = this.action.selectionFunction(elements);
|
|
336
341
|
const maxX = calculationElements.map(element => element.bounds.x + element.bounds.width).reduce((a, b) => Math.max(a, b));
|
|
337
|
-
this.dispatchAlignActions(elements, (element, move) => move.toPosition.x = maxX - element.bounds.width);
|
|
342
|
+
this.dispatchAlignActions(elements, (element, move) => (move.toPosition.x = maxX - element.bounds.width));
|
|
338
343
|
}
|
|
339
344
|
|
|
340
345
|
alignTop(elements: BoundsAwareModelElement[]): void {
|
|
341
346
|
const calculationElements = this.action.selectionFunction(elements);
|
|
342
347
|
const minY = calculationElements.map(element => element.bounds.y).reduce((a, b) => Math.min(a, b));
|
|
343
|
-
this.dispatchAlignActions(elements, (_, move) => move.toPosition.y = minY);
|
|
348
|
+
this.dispatchAlignActions(elements, (_, move) => (move.toPosition.y = minY));
|
|
344
349
|
}
|
|
345
350
|
|
|
346
351
|
alignMiddle(elements: BoundsAwareModelElement[]): void {
|
|
@@ -349,16 +354,19 @@ export class AlignElementsCommand extends LayoutElementsCommand {
|
|
|
349
354
|
const maxY = calculationElements.map(element => element.bounds.y + element.bounds.height).reduce((a, b) => Math.max(a, b));
|
|
350
355
|
const diffY = maxY - minY;
|
|
351
356
|
const middleY = minY + 0.5 * diffY;
|
|
352
|
-
this.dispatchAlignActions(elements, (element, move) => move.toPosition.y = middleY - 0.5 * element.bounds.height);
|
|
357
|
+
this.dispatchAlignActions(elements, (element, move) => (move.toPosition.y = middleY - 0.5 * element.bounds.height));
|
|
353
358
|
}
|
|
354
359
|
|
|
355
360
|
alignBottom(elements: BoundsAwareModelElement[]): void {
|
|
356
361
|
const calculationElements = this.action.selectionFunction(elements);
|
|
357
362
|
const maxY = calculationElements.map(element => element.bounds.y + element.bounds.height).reduce((a, b) => Math.max(a, b));
|
|
358
|
-
this.dispatchAlignActions(elements, (element, move) => move.toPosition.y = maxY - element.bounds.height);
|
|
363
|
+
this.dispatchAlignActions(elements, (element, move) => (move.toPosition.y = maxY - element.bounds.height));
|
|
359
364
|
}
|
|
360
365
|
|
|
361
|
-
dispatchAlignActions(
|
|
366
|
+
dispatchAlignActions(
|
|
367
|
+
elements: BoundsAwareModelElement[],
|
|
368
|
+
change: (element: BoundsAwareModelElement, move: WriteableElementMove) => void
|
|
369
|
+
): void {
|
|
362
370
|
const moves: ElementMove[] = []; // client-side move
|
|
363
371
|
const elementAndBounds: ElementAndBounds[] = []; // server-side move
|
|
364
372
|
elements.forEach(element => {
|
|
@@ -373,7 +381,10 @@ export class AlignElementsCommand extends LayoutElementsCommand {
|
|
|
373
381
|
this.dispatchActions([new MoveAction(moves), new ChangeBoundsOperation(elementAndBounds)]);
|
|
374
382
|
}
|
|
375
383
|
|
|
376
|
-
createElementMove(
|
|
384
|
+
createElementMove(
|
|
385
|
+
element: BoundsAwareModelElement,
|
|
386
|
+
change: (_element: BoundsAwareModelElement, _move: WriteableElementMove) => void
|
|
387
|
+
): WriteableElementMove | undefined {
|
|
377
388
|
const move: WriteableElementMove = {
|
|
378
389
|
elementId: element.id,
|
|
379
390
|
fromPosition: {
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/********************************************************************************
|
|
2
|
+
* Copyright (c) 2021 EclipseSource and others.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made available under the
|
|
5
|
+
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
* http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
*
|
|
8
|
+
* This Source Code may also be made available under the following Secondary
|
|
9
|
+
* Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
* Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
* with the GNU Classpath Exception which is available at
|
|
12
|
+
* https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
*
|
|
14
|
+
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
|
+
********************************************************************************/
|
|
16
|
+
import { injectable } from 'inversify';
|
|
17
|
+
import {
|
|
18
|
+
Bounds,
|
|
19
|
+
BoundsData,
|
|
20
|
+
Dimension,
|
|
21
|
+
EMPTY_BOUNDS,
|
|
22
|
+
isBoundsAware,
|
|
23
|
+
isLayoutableChild,
|
|
24
|
+
isValidDimension,
|
|
25
|
+
LayoutContainer,
|
|
26
|
+
Point,
|
|
27
|
+
SChildElement,
|
|
28
|
+
SModelElement,
|
|
29
|
+
SParentElement,
|
|
30
|
+
StatefulLayouter,
|
|
31
|
+
VBoxLayouter,
|
|
32
|
+
VBoxLayoutOptions
|
|
33
|
+
} from 'sprotty';
|
|
34
|
+
|
|
35
|
+
export interface VBoxLayoutOptionsExt extends VBoxLayoutOptions {
|
|
36
|
+
hGrab: boolean;
|
|
37
|
+
vGrab: boolean;
|
|
38
|
+
prefWidth: number | null;
|
|
39
|
+
prefHeight: number | null;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Extends VBoxLayouter to support additional layout options
|
|
44
|
+
*/
|
|
45
|
+
@injectable()
|
|
46
|
+
export class VBoxLayouterExt extends VBoxLayouter {
|
|
47
|
+
|
|
48
|
+
static KIND = VBoxLayouter.KIND;
|
|
49
|
+
|
|
50
|
+
layout(container: SParentElement & LayoutContainer,
|
|
51
|
+
layouter: StatefulLayouter): void {
|
|
52
|
+
|
|
53
|
+
const boundsData = layouter.getBoundsData(container);
|
|
54
|
+
const options = this.getLayoutOptions(container);
|
|
55
|
+
const childrenSize = this.getChildrenSize(container, options, layouter);
|
|
56
|
+
|
|
57
|
+
const fixedSize = this.getFixedContainerBounds(container, options, layouter);
|
|
58
|
+
|
|
59
|
+
const maxWidth = options.paddingFactor * (
|
|
60
|
+
options.resizeContainer
|
|
61
|
+
? Math.max(fixedSize.width - options.paddingLeft - options.paddingRight, childrenSize.width)
|
|
62
|
+
: Math.max(0, fixedSize.width - options.paddingLeft - options.paddingRight));
|
|
63
|
+
const maxHeight = options.paddingFactor * (
|
|
64
|
+
options.resizeContainer
|
|
65
|
+
? Math.max(fixedSize.height - options.paddingTop - options.paddingBottom, childrenSize.height)
|
|
66
|
+
: Math.max(0, fixedSize.height - options.paddingTop - options.paddingBottom));
|
|
67
|
+
|
|
68
|
+
// Remaining size that can be grabbed by children with the vGrab option
|
|
69
|
+
const grabHeight: number = maxHeight - childrenSize.height;
|
|
70
|
+
// Number of children that request vGrab
|
|
71
|
+
// FIXME: This approach works fine when only 1 child uses VGrab, but may cause rounding issues
|
|
72
|
+
// when the grabHeight can't be equally shared by all children.
|
|
73
|
+
const grabbingChildren = container.children
|
|
74
|
+
.map(child => this.getChildLayoutOptions(child, options))
|
|
75
|
+
.filter(opt => opt.vGrab)
|
|
76
|
+
.length;
|
|
77
|
+
|
|
78
|
+
if (maxWidth > 0 && maxHeight > 0) {
|
|
79
|
+
const offset = this.layoutChildren(container, layouter, options, maxWidth, maxHeight, grabHeight, grabbingChildren);
|
|
80
|
+
boundsData.bounds = this.getFinalContainerBounds(container, offset, options, childrenSize.width, childrenSize.height);
|
|
81
|
+
boundsData.boundsChanged = true;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
protected getChildrenSize(container: SParentElement & LayoutContainer,
|
|
86
|
+
containerOptions: VBoxLayoutOptionsExt,
|
|
87
|
+
layouter: StatefulLayouter): Dimension {
|
|
88
|
+
let maxWidth = -1;
|
|
89
|
+
let maxHeight = 0;
|
|
90
|
+
let isFirst = true;
|
|
91
|
+
container.children.forEach(
|
|
92
|
+
child => {
|
|
93
|
+
if (isLayoutableChild(child)) {
|
|
94
|
+
const bounds = layouter.getBoundsData(child).bounds;
|
|
95
|
+
if (bounds !== undefined && isValidDimension(bounds)) {
|
|
96
|
+
maxHeight += bounds.height;
|
|
97
|
+
if (isFirst) {
|
|
98
|
+
isFirst = false;
|
|
99
|
+
} else {
|
|
100
|
+
maxHeight += containerOptions.vGap;
|
|
101
|
+
}
|
|
102
|
+
maxWidth = Math.max(maxWidth, bounds.width);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
);
|
|
107
|
+
const result = {
|
|
108
|
+
width: maxWidth,
|
|
109
|
+
height: maxHeight
|
|
110
|
+
};
|
|
111
|
+
return result;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
protected layoutChildren(container: SParentElement & LayoutContainer,
|
|
115
|
+
layouter: StatefulLayouter,
|
|
116
|
+
containerOptions: VBoxLayoutOptionsExt,
|
|
117
|
+
maxWidth: number,
|
|
118
|
+
maxHeight: number, grabHeight?: number, grabbingChildren?: number): Point {
|
|
119
|
+
let currentOffset: Point = {
|
|
120
|
+
x: containerOptions.paddingLeft + 0.5 * (maxWidth - (maxWidth / containerOptions.paddingFactor)),
|
|
121
|
+
y: containerOptions.paddingTop + 0.5 * (maxHeight - (maxHeight / containerOptions.paddingFactor))
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
container.children.forEach(
|
|
125
|
+
child => {
|
|
126
|
+
if (isLayoutableChild(child)) {
|
|
127
|
+
const boundsData = layouter.getBoundsData(child);
|
|
128
|
+
const bounds = boundsData.bounds;
|
|
129
|
+
const childOptions = this.getChildLayoutOptions(child, containerOptions);
|
|
130
|
+
if (bounds !== undefined && isValidDimension(bounds)) {
|
|
131
|
+
currentOffset = this.layoutChild(child, boundsData, bounds,
|
|
132
|
+
childOptions, containerOptions, currentOffset,
|
|
133
|
+
maxWidth, maxHeight, grabHeight, grabbingChildren);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
);
|
|
138
|
+
return currentOffset;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
protected layoutChild(child: SChildElement,
|
|
142
|
+
boundsData: BoundsData,
|
|
143
|
+
bounds: Bounds,
|
|
144
|
+
childOptions: VBoxLayoutOptionsExt,
|
|
145
|
+
containerOptions: VBoxLayoutOptionsExt,
|
|
146
|
+
currentOffset: Point,
|
|
147
|
+
maxWidth: number,
|
|
148
|
+
maxHeight: number,
|
|
149
|
+
grabHeight?: number,
|
|
150
|
+
grabbingChildren?: number): Point {
|
|
151
|
+
let offset = super.layoutChild(child, boundsData, bounds, childOptions, containerOptions, currentOffset, maxWidth, maxHeight);
|
|
152
|
+
if (childOptions.hGrab) {
|
|
153
|
+
boundsData.bounds = {
|
|
154
|
+
x: boundsData.bounds!.x,
|
|
155
|
+
y: boundsData.bounds!.y,
|
|
156
|
+
width: maxWidth,
|
|
157
|
+
height: boundsData.bounds!.height
|
|
158
|
+
};
|
|
159
|
+
boundsData.boundsChanged = true;
|
|
160
|
+
}
|
|
161
|
+
if (childOptions.vGrab && grabHeight && grabbingChildren) {
|
|
162
|
+
const height = boundsData.bounds!.height + (grabHeight / grabbingChildren);
|
|
163
|
+
boundsData.bounds = {
|
|
164
|
+
x: boundsData.bounds!.x,
|
|
165
|
+
y: boundsData.bounds!.y,
|
|
166
|
+
width: boundsData.bounds!.width,
|
|
167
|
+
height: height
|
|
168
|
+
};
|
|
169
|
+
boundsData.boundsChanged = true;
|
|
170
|
+
offset = { x: currentOffset.x, y: currentOffset.y + height };
|
|
171
|
+
}
|
|
172
|
+
return offset;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
protected getFixedContainerBounds(container: SModelElement, layoutOptions: VBoxLayoutOptionsExt, layouter: StatefulLayouter): Bounds {
|
|
176
|
+
const currentContainer = container;
|
|
177
|
+
// eslint-disable-next-line no-constant-condition
|
|
178
|
+
if (isBoundsAware(currentContainer)) {
|
|
179
|
+
const bounds = currentContainer.bounds;
|
|
180
|
+
const elementOptions = this.getElementLayoutOptions(currentContainer);
|
|
181
|
+
const width = elementOptions?.prefWidth ?? 0;
|
|
182
|
+
const height = elementOptions?.prefHeight ?? 0;
|
|
183
|
+
return { ...bounds, width, height };
|
|
184
|
+
}
|
|
185
|
+
return EMPTY_BOUNDS;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
protected getChildLayoutOptions(child: SChildElement, containerOptions: VBoxLayoutOptionsExt): VBoxLayoutOptionsExt {
|
|
189
|
+
return super.getChildLayoutOptions(child, containerOptions) as VBoxLayoutOptionsExt;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
protected getLayoutOptions(element: SModelElement): VBoxLayoutOptionsExt {
|
|
193
|
+
return super.getLayoutOptions(element) as VBoxLayoutOptionsExt;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
protected getElementLayoutOptions(element: SModelElement): VBoxLayoutOptionsExt | undefined {
|
|
197
|
+
return (element as any).layoutOptions;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
protected getFinalContainerBounds(container: SParentElement & LayoutContainer,
|
|
201
|
+
lastOffset: Point, options: VBoxLayoutOptionsExt, maxWidth: number, maxHeight: number): Bounds {
|
|
202
|
+
|
|
203
|
+
const elementOptions = this.getElementLayoutOptions(container);
|
|
204
|
+
const width = elementOptions?.prefWidth ?? options.minWidth;
|
|
205
|
+
const height = elementOptions?.prefHeight ?? options.minHeight;
|
|
206
|
+
|
|
207
|
+
const result = {
|
|
208
|
+
x: container.bounds.x,
|
|
209
|
+
y: container.bounds.y,
|
|
210
|
+
width: Math.max(width, maxWidth + options.paddingLeft + options.paddingRight),
|
|
211
|
+
height: Math.max(height, maxHeight + options.paddingTop + options.paddingBottom)
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
return result;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
protected getDefaultLayoutOptions(): VBoxLayoutOptionsExt {
|
|
218
|
+
return {
|
|
219
|
+
resizeContainer: true,
|
|
220
|
+
paddingTop: 5,
|
|
221
|
+
paddingBottom: 5,
|
|
222
|
+
paddingLeft: 5,
|
|
223
|
+
paddingRight: 5,
|
|
224
|
+
paddingFactor: 1,
|
|
225
|
+
vGap: 1,
|
|
226
|
+
hAlign: 'center',
|
|
227
|
+
minWidth: 0,
|
|
228
|
+
minHeight: 0,
|
|
229
|
+
hGrab: false,
|
|
230
|
+
vGrab: false,
|
|
231
|
+
// eslint-disable-next-line no-null/no-null
|
|
232
|
+
prefHeight: null,
|
|
233
|
+
// eslint-disable-next-line no-null/no-null
|
|
234
|
+
prefWidth: null
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
protected spread(a: VBoxLayoutOptionsExt, b: VBoxLayoutOptionsExt): VBoxLayoutOptionsExt {
|
|
239
|
+
return { ...a, ...b };
|
|
240
|
+
}
|
|
241
|
+
}
|