- [diagram] Fix text selection issues in chrome #425
- [example] Fix render error for new categories #426
- [api] Introduce & use ProposalString utility type #427
- [i18n] Add missing localization message for marker popups #428
- [diagram] Add missing visibility check to
RoundedCornerNodeView#430 - [layout] Fix a bug in the hGrab/vGrab calculation #435
- [protocol] Enrich
LayoutOperationwith additional optional client-side information (viewport) #433 #434- To trigger a manual layout the new
TriggerLayoutActionshould be dispatched instead of a directLayoutOperation - Dispatching of direct
LayoutOperations will still work, but the optional information will not be present
- To trigger a manual layout the new
- [layout] Introduce order-agnostic layouts #436
- Introduce a flag for
ILayoutsto specify whether the layouting of children is independent of their semantic order in the model. TheBringToFrontCommandrespects this flag and only changes the ordering of order-agnostic layouts zordermodule now requires bounds module as we need the layout registry
- Introduce a flag for
- [diagram] Introduce viewport change event for
EditorContextService#438- This change extracts the handling of model related changes into an dedicated
IModelChangeServicewhich is reused by theEditorContextService - The following changes to internal API might affect customizations of adopters:
GLSPCommandStack: 'notifyListener' method has been removedEditorContextService:- Remove
_modelRootandonModelRootChangedEmitterproperties. Corresponding getters now forward to theIModelChangeService - Remove
notifyModelRootChangedmethod (Probably no side effect for adopters. Method was only callable from commandstack anyways)
- Remove
- This change extracts the handling of model related changes into an dedicated
- [node] Update minimum requirements for Node to >=20 #439
- [diagram] Remove !important rules from default CSS #412 #413 #414
- [diagram] Update default styling for label texts to avoid unintended user selection #415
- [diagram] Fix behavior of
ContainerManagerto allow proper usage of type hints on root/graph level #417 - [diagram] Prevent unintended rendering of not-supported sprotty reconnect handles #418
- [diagram] Allow listening to selection changes in the
AutoCompleteWidget#420 - [api] Introduce a lightweight adaptable message system (i18n) #421
- [diagram] Refactor a11y feature module and extract move,zoom,shortcut and resize features #396
- The move, zoom, shortcut and resize features have been moved to their own modules. They are now enabled by default
- For now the a11y module remains in experimental state and api breakages might occur in the future
- [protocol] Ensure that the
@eclipse-glsp/protocolpackage has no default dependency to inversify #384#387 - [diagram] Ensure that
GLSPMousePositionTrackercorrectly calculates the current position in diagram local coordinates #391 - [api] Align
ActionDispatcherinterface withGLSPActionDispatcherimplementation. #394- Directly injecting the
GLSPActionDispatcheris no longer necessary useTYPES.IActionDispatcher/ActionDispatcherinstead
- Directly injecting the
- [standalone] Adapt
copyPasteStandalonemodule to ensure that copy/cut/paste listeners are scoped to the active diagram and don't trigger globally #395 - [diagram] Introduce
IMovementOptionsfor theChangeBoundsToolto allow configuration of movement behavior #397 - Contributed on behalf of Axon Ivy AG - [diagram] Fix a bug that prevented the
ChangeBoundsToolfrom working correctly if the user moved outside of the diagram during an operation #399 - Contributed on behalf of AxonIvy AG - [api] Improve default
GLSPClientimplementation to be more robust when certain methods are invoked multiple times #402 - [diagram] Fix a bug in the uri handling of the
NavigationTargetResolver#403 - [di] Use inversify ^6.1.3 as new baseline and update to sprotty 1.4.0 #407#408
- [di] Align Interface usage across *Manager classes #388
- Change DI bindings for:
GridMangertoTYPES.IGridManager,ChangeBoundsManagertoTYPES.IChangeBoundsManagerandDebugManagertoTYPES.IDebugManager.
- Change DI bindings for:
- [api] Improved performance of diagram loading routine #398 - Contributed on behalf of Axon Ivy AG
- Fix behavior of
postRequestModelhook to actually work as descried in the documentation. Dispatching of long running actions in this hook can delay the initial model loading. - Directly calling model-aware functions in the
preInitializehook is discouraged. If needed dispatch an action instead. This ensures that the code will only be called once the model is available.
- Fix behavior of
- [diagram] Fix a bug that prevented proper rendering of templates/ghost elements during node creation in Firefox #324 - Contributed on behalf of Axon Ivy AG
- [routing] Improve anchor point calculation for edge routing #325
- [validation] Fix a bug that could cause duplicate validation markers after a model update #329
- [di] Introduce a reusable
LazyInjectorthat can be used for deferred retrial of services from the container. #330- Introduce
preLoadDiagramhook forIDiagramStartups. This hook is invoked right before theDiagramLoaderstarts the model loading process
- Introduce
- [launch] Introduce
GLSPWebWorkerProviderto simply setting up a worker connection to a in-browser GLSP-server #322 - [diagram] Improve base abstract
UIExtensionto allow more fine-grained definition of container and parent #333 - Contributed on behalf of Axon Ivy AG - [protocol] Improve Geometry API. Add utility functions to
Bound,DimensionandPoint. IntroduceVectorandMovementtypes #341 - Contributed on behalf of Axon Ivy AG - [features] Introduce optional
gridModulefor managing and rendering grids anddebugModulethat allows do display additional graphical debug information during development #343 #359 - [diagram] Improve error handling of startup hooks #346
- [feature] Improve style handling in svg exporter #354
- [di] Improve
ContainerConfigurationAPI and add additional checks to ensure that all ids ofFeatureModulesare unique #355 - [diagram] Update to sprotty 1.2.0. Non-breaking as all potential API breaks have been mitigated via the glsp-sprotty rexport layer #357
- [diagram] Fix a bug with the
AutocompleteWidgetthat prevented proper application of valid suggestions #362 - [api] Improved behavior of default
ToolManagerto avoid unnecessary deactivation and reactivation of default tools #367 - [diagram] Add
onFocusChangedevent toFocusTrackerandEditorContextService#380
- [API] Centralize most marquee selection behavior in the
MarqueeUtilclass which is now a singleton, injectable and needs theDOMHelper. This will cause a break if you manually created the class without injecting it. To construct it manually, you need to provide theDomHelperas a second argument #373. - [protocol] Avoid indirect dependency to
chaiintroduce by accidentally exporting testing modules #321@eclipse-glsp/protocolno longer exportstest-util.tsvia main index. If needed the module can still be imported via the full path@eclipse-glsp/protocol/lib/utils/test-util.ts
- [API] Apply feedback commands already on
SetModelCommandand unifyrankandpriorityproperty #323.- Method
FeedbackAwareUpdateModelCommand.getFeedbackCommandsmoved toIFeedbackEmitterfor re-use, resulting in two new methods:getFeedbackCommandsandapplyFeedbackCommands. - Method
FeedbackAwareUpdateModelCommand.getPriorityis replaced by a genericrankproperty and theRankednamespace. - The
priorityproperty (higher priority equals earlier execution) inFeedbackCommandis superseeded by arankproperty (lower rank equals earlier execution).
- Method
- [DI] Introduce deferred injection for multi-injected services (listeners, action handlers etc.). Highly reduces the likelihood of circular dependency issues during container creation #330.
No API breaks in the core API, but it introduces some minor breaks in protected methods/fields of default implementations:GLSPCommandStack- Handling of
IGModelRootListenershas moved to theEditorContextService. onModelRootChangedis no deprecated. UseEditorContextService.onModelRootChangedinstead
- Handling of
EditorContextService: ThepostRequestModelmethod has been removed. It was previously unused and effectively a no-op.SelectionService: InjectedcommandStackproperty has been removed.
- [diagram] Introduce a reusable
FeedbackEmitterbase implementation that is stable across model updates and allows composing feedback before dispatching it #342
Refactored tool implementations and related services to make use of the newFeedbackEmitterAPI. This can cause potential breaks for adopters that have customized the default tool implementations. Affected tools and services:MouseTrackingElementPositionListener,HelperLineManager,FeedbackMoveMouseListener,NodeCreationToolMouseListener,EdgeEditListener, - [diagram] Refactor and improve
ChangeBoundsAPI by introducing a centralizedChangeBoundsManageandChangeBoundsTracker#344 #348 #352 - Contributed on behalf of Axon Ivy AG This can cause potential breaks for adopters that have customized the default tool implementations
Affected tools and services:MouseTrackingElementPositionListener,FeedbackMoveMouseListener,ChangeBoundsTool,ChangeBoundsListener,FeedbackEdgeRouteMovingMouseListener,NodeCreationTool,
- [diagram] Fix a bug that prevented correct rendering of projection bars when using
GLSPProjectionView#298 - [a11y] Improved responsibility and feedback when resizing or moving diagram elements with keyboard-only commands #295
- [diagram] Extends
configureDiagramOptionsfunction to also allow partial configuration ofViewerOptions#296 - [diagram] Remove unused handleSetContextActions from ToolPalette #301
- [diagram] Deprecate
ISModelRootListenerAPI in favor ofIGModelRootListener#303 - [diagram] Ensure that the suggestion container position of the
AutoCompleteWidgetis rendered correctly #304 - [feature] Extend
ToolPalette/CreateOperationAPI to support rendering of preview/ghost elements when creating new nodes #301 - [protocol] Fix a bug in
BaseJsonRpcClientto ensure that it can handle multiple open diagram sessions #307 - [diagram] Restructure some tools to have a more common infrastructure and support helper lines #306
- [diagram] Fix a bug in
SelectionServicethat caused issues with inversify when injecting certain services (e.g.ActionDispatcher) inSelectionChangeListenerimplementations #305 - [diagram] Ensure that the
SelectionServicedoes not trigger a change event if the selection did not change on model update #313
- [layout] Improve Layouter to support more dynamic layouts and complex parent/children node structures #187 - Contributed on behalf of STMicroelectronics
- [diagram] Fix SVG export for nested root elements e.g.
GLSPProjectionView#196 - [diagram] Scope the styles to not break existing application layout #209
- [routing] Ensure that routes are properly re-calculated when moving a routing point #198
- [diagram] Fix a bug in the
EditLabelUIExtensionwhere the diagram becomes dirty without an actual change. #766 - [diagram] Extend
ComputedBoundsActiondefinition with routing information. This enables proper forwarding of client-side computed routes to the server #201 - [DI] The
createClientContainerfunction is now deprecated. Please useinitializeDiagramContainerinstead. This new function can also be used withModuleConfigurationswhich allow a more fine granular configuration by adding new modules and/or removing default modules. #218 #231 #236 - [diagram] Fix incorrect calculation of decorator popup positions for edges. #221
- [protocol] Introduce a reusable
Disposabletype #222 - [protocol] Introduce reusable utility functions for DI configuration #236#237
- [diagram] Augment diagram SVG with additional model metadata to enable easier integration tests and accessibility #239
- [validation] Add and track reason for validation markers (e.g. batch and live validation) #243
- [protocol] Introduce optional
deselectAllflag forSelectActions #257 - [protocol] Provide the common interfaces and type definitions for TS-based GLSP servers #245 - Contributed on behalf of STMicroelectronics
- [diagram] Introduce a new set of accessability features for disability-aware conceptual modeling and keyboard-only diagram interactions. (experimental) #240 #241 #242 #254 #276 #279
- [API] Re-work tool and feedback structure #264 #274
- Introduce
registerListenermethod on GLSP mouse and key tool to return a disposable for de-registration - Adapt
registerFeedbackmethod from feedback dispatcher to return a disposable for de-registration - Introduce dedicated
BaseGLSPCreationToolfor tools based on trigger actions - Introduce
toDisposeOnDisablecollection inBaseGLSPToolto register disable handling during enablement
- Introduce
- [DI] Introduce and consistently use
FeatureModules instead of plain inversifyContainerModules #267 - [diagram] Introduce
statusModulethat binds UI extension to handle & renderGLSPStatusMessages. #272 - [diagram] Provide generic dirty state handling in
EditorContextService#272 - [diagram] Fix bug that broke edge edit (routing) in certain cases #273
- [API] Introduce
DiagramLoadercomponent + life cycle management #274 #282- Integration projects no longer need to manually implement the initial diagram loading. Instead a set of configurations
IDiagramOptionsand then the diagram loader is invoked and initializes the diagram. - Add a
onServerInitializedevent to theGLSPClientAPI. - Introduce
IDiagramStartupservice. Adopters can multi bind this service to hook into the diagram loading lifecycle and provide additional logic. i.e. dispatching of initial actions.
- Integration projects no longer need to manually implement the initial diagram loading. Instead a set of configurations
- [diagram] Fix a bug that broke edge intersection detection when using the
GLSPProjectionView#275 - [diagram] Fix a bug regarding focus handling when integrated in an application frame like Theia #278
- [DI] Injecting an
IButtonHandlerconstructor is now deprecated. Please useconfigureButtonHandler()instead. #195 - Contributed on behalf of STMicroelectronics - [node] Update minimum requirements for Node to >=16.11.0 #210
- [protocol] Renamed
UndoOperationandRedoOperationtoUndoActionandRedoActionto match operation specification #216 - [protocol] Remove dependency to
vscode-ws-jsonrpc. The protocol package now directly offers functions to create a websocket rpc connections #215 - [protocol] The
elementIdsproperty ofLayoutOperationis now optional. Ifundefinedthe entire model will be layouted #232 - [API] Refactored base API #259
- Removed the
TYPES.SelectionServiceservice identifier. Please directly use theSelectionServiceclass as service identifier instead - The
SelectionServicebinding is now part of thedefaultGLSPModule. This means theSelectionServiceremains available even if theselectModuleis not configured RootModelChangeListeners are no longer tied to theFeedbackawareUpdateModelCommandinstead they are managed by theGLSPCommandStackIMouseToolandTYPES.IMouseToolare no longer available. Directly inject and useMouseToolinstead- Refactored rank utility functions
isRanked()->Ranked.is()getRank()->Ranked.getRank()DEFAULT_RANK->Ranked.DEFAULT_RANK
- Removed the
- [API] Introduce Event API to replace the old listener/notifier pattern #261
- Reworked
SelectionService,GlspCommandStack&EditorContextServiceto make use of this new API - Removed explicit (de)registration methods for listeners. Use the corresponding event property (e.g.
SelectionService.onSelectionChanged) instead - Aligned naming of injectable interfaces & service identifiers to consistently use the
Iprefix
- Reworked
- [API] Re-work tool and feedback structure #264
- Remove generic
toolsModuleandtoolFeedbackModulein favor of individual tool modules - Rename
dispatchFeedbackinBaseGLSPTooltoregisterFeedbackto align with feedback dispatcher - Switch arguments in
deregisterFeedbackinBaseGLSPToolfor easier de-registration and clean up actions
- Remove generic
- [protocol] Add messages for server-side progress reporting and remove timeout in
ServerMessageAction#265 - [DI] Renamed and aligned prefixes of DI modules. #266
- Removed
glspprefix from all modules (e.g.glspSelectModule->selectModule) - In addition, the following modules have been renamed
defaultGLSPModule->baseModulemodelHintsModule->typeHintsModuleenableDefaultToolsOnFocusLossModule->toolFocusLossModuleglspEditLabelModule->labelEditModule
- Removed
- [websocket] Introduce a reusable
GLSPWebSocketProviderclass that supports reconnect on connection loss #269 - [API] Introduce
GLSPModelSourceas default implementation for sprotty'sModelSourceAPI #272 #287GLSPDiagramServerhas been deprecated and is no longer availableSelectionServiceAwareContextMenuMouseListenerrenamed toGLSPContextMenuMouseListenerSourceURIAwareinterface has been removed. No longe required since we only have oneGLSPModelSourcebinding now.
- [protocol] Revise TypeHints API and introduce possibility to dynamically query the server for complex connection conditions #285
EdgeTypeHintsourceElementTypeIdsandtargetElementTypeIdsare now optional. If not provided all connection targets are allowed- Introduce
dynamicflag. If a hint has this flag enabled connection tools know that the have to query there server in addition to checking the defaultConnectable.canConnectmethod.
- Introduce
RequestCheckEdgeAction&CheckEdgeResultActionused to query the server wether the provide edge information is valid. Used in combination with dynamic type hints.
- [protocol] Refactor base protocol & actions #287
- Rename
ServerStatusAction->StatusAction - Rename
ServerMessageAction->MessageAction - Extend
InitializeClientSessionParamswith aclientActionsproperty. This is used by the server to now which action kinds are (also) handled by the client.
- Rename
- [API] Update to sprotty 1.0.0 and consistently use
GModelnaming scheme on client side [#291(eclipse-glsp#291)] - Move augmented GLSP reexport of sprotty into dedicated package
@eclipse-glsp/sprotty - With sprotty 1.0.0 the
SModelclasses haven been renamed by adding an Impl suffix (SModelElement->SModelElementImpl). We took this opportunity and aliased all sprotty model elements to consistently useGModelSModelElement->GModelElementSNode->GNodeSShapeElement->GShapeElementetc.
- [diagram] Fix a bug where the edge creation tool would select the wrong child when used inside of a nested node #158
- [example] Improved and modernized styling of the GLSP workflow example #160
- [contextMenu] Ensured that closing the context menu correctly restores the diagram focus. #469
- [build] Updated Typescript to version 4.5.5 and enforced
noImplicitOverride#167 - [diagram] Added support for snapping edges (routing points) similar to how its done for moving/resizing elements. #170
- [layout] Implemented a custom layouter for HBox that supports nested compartments. #174
- [diagram] Disable tool execution on focus loss and reactive the default tools. #175
- [routing] Routing handles are now properly snapped if an
ISnapperimplementation is bound. #177 - [routing] Fix a bug that caused short animation flickering whenever a routing point was moved. #182
- [context] Properly integrated the browser context menu listeners -> Context menus now also work on Mac OS #183
- [protocol] Updated to sprotty >=0.11.0. With the new sprotty version the action declaration approach has been reworked from ES6 classes to plain interfaces + namespaces. To keep action declaration and creation consistent all action definitions of the protocol and client package have been updated as well. The old class based definitions are no longer available. This mainly affects construction calls
which have to be changed from
new SomeAction()to using the create function of the corresponding namespaceSomeAction.create(). In addition, typeguard functions have been included in the action namespaces as well and can now be used withSomeAction.is()instead of using a dedicatedisSomeAction()function.
#472 - Contributed on behalf of STMicroelectronics - [DI] Unified the sprotty
TYPEandGLSP_TYPEservice identifier constants. They are reexported from the client main index asTYPE. The oldGLSP_TYPEconstant definition has been deprecated will potentially be removed in the future. #472 - [protocol] Rename
ModelSourceChangedActiontoSourceModelChangedActionincluding handlers etc #655 - [diagram] Cleanup/refactor various commands and action handlers. #176
- Rename
layoutCommandsModuletolayoutModule - Change handling of
ResizeElementandAlignElementactions to pure action handlers instead of commands. - Change handling of
NavigateToMarkersActionto a pure action handler instead of commands - Refactor handler for
SetMarkersActionto a standalone action handler instead of an command
- Rename
- [feature] Improve external navigation support through dedicated action. #95
- [build] Added a download script to download the latest workflow-glsp-server JAR from maven artifactory #99
- [diagram] Fix a bug that kept the hover feedback visible after the diagram widget becomes inactive #102
- [diagram] Extended the
ModifyCssFeedbackActionto support bothstring[]andSModelElement[]as input #103 - [diagram] Improved extensibility of
AutoCompleteWidgetby enabling changing of settings without having to re-instantiate the entire widget #104 - [model] Added
SArgumentableinterface for denotingSModelElements that contain an arbitrary arguments map #106 - [diagram] Implemented a marquee selection tool to select multiple elements at once by drawing a rectangle. #108 #120
- [protocol] Added
fileUriproperty toSaveModelAction. This can be used to implement save-as functionality #109 - [protocol] Implemented missing typeguard functions for all protocol operations #110
- [diagram] Implemented a reusable utility function (
configureDefaultModelElements) that handles configuration of default model elements and views. Introduce reusable view for rounded corner nodes and and improved edge view that supports custom padding for easer mouse handling. Adapted the workflow example to make use of these new views #113 - [example] Cleaned up and reworked the workflow example. Additional css classes are now applied directly to the
SModelElementinstead of using custom views. Removed now obsolete classesTaskNodeViewandWeightedEdgeView#116 - [diagram] Fix a bug in the connection tool regarding the feedback edge snapping computation for nested elements. #123
- [diagram] Fix a bug in the copy& paste behavior. #124
- [protocol] Fix the definition of
ChangeContainerOperation. #115 - [protocol] Remove the
nameproperty fromGLSPClient. #130 - [diagram] Fix a bug in Firefox that required elements to be selected before they can be moved. #134
- [build] Upgrade to Snabbdom3 and ES2017 #137
- [protocol] Extract action message protocol and action definitions from
@eclipse-glsp/clientand move to@eclipse-glsp/protocol#141 - Contributed on behalf of STMicroelectronics - [diagram] Fix a bug that occurred when moving nested elements. #135
- [example] Added support for structured nodes (categories) in workflow-example. #136
- [diagram] Fix a bug related to the mouse cursor position on resize. #144
- [model] Add a convenience method to create a container with default modules. #145
- [diagram] Introduce
glspViewportModule. This module contains a customScrollMouseListenerthat gets disabled if theMarqueeToolis active. This module should be used instead of theviewportModuleprovided by sprotty #108 - [protocol] Fix the definition of
ChangeContainerOperation. The type of thelocationproperty has been changed fromstringtoPoint. #115 - [protocol] Remove the
nameproperty fromGLSPClient. #130 - [build] Upgrade to Snabbdom3 and ES2017. Depended packages should upgrade to ES2017 as well. #137
This is the first release of Eclipse GLSP since it is hosted at the Eclipse Foundation. The 0.8.0 release includes new protocol message types and respective framework support for several new features, such as copy-paste, diagram navigation, etc. It also contains several clean-ups of the protocol and refactorings to simplify and streamline the API. The Eclipse Theia integration of GLSP features many improvements, such as problem marker integration, native context menu items and keybindings. Finally, several bug fixes and minor are part of this release as well.