borderColor and fill, but most importantly, assert that any nested operation that changed the current graphics context would not affect other operations outside the group. All those features are in place since the first iterations of the code, but as I kept extending shapes with other features I realized groups could do more, like handling mouse events or even having a filter applied, but one thing prevented that: groups do not have a finite boundary.One approach to create said boundary would create an Area of the additions of all the nested shapes, but it may be costly, specially if you factor in nested groups and proper caching. So to get the ball rolling I have introduced a new child node in group:
viewBox, shamelessly borrowed from SVG. It is by default a rectangular based shaped (with properties x,y,width,height, fully bindable/animatable) and I'm looking forward enabling a custom shape in the future (and even perhaps an option to calculate the Area with a config flag).ViewBox may be transformed on its own (local transformation) without affecting the group itself. If by any chance a transformation is applied to the group it will also be applied to the viewBox unless it has a property
pinned=true set, which I'm sure will come in handy when doing animations.So with viewBox in place you can now apply any filter combination in a group, affecting all nested children at the same time, and you can also register all event handlers available in shapes too. Outlines and images have received the same treatment for filters and events too, which means that all drawing nodes accept the same set of features

Keep on Groovying!