This article shall describe the granularity of Components aka Plugins aka Apps that build the entirety of the application.
Throughout the documentation different terms have been used so let's define them for the sake of having a common language to talk about the same things.
The very basic application environment as described in What is the Roundcube Shell?.
With Components we refer to Ember Components which are re-usable building blocks for the application UI.
Following the Ember terminology, Services are (singleton) utilities provided by the shell such as Session data storage, the JMAP adaptor or the pub/sub system.
Everything else is commonly referred to as an App. It's basically what others call Plugins but with a more fancy marketing-affine name :-)
The shell provides no business logic but only a basic framework and some storage facilities. Thus every functionality of the actual web application is built as an app. The concept of apps is that they can be loaded individually and are also exchangeable to a certain extent. How they can be integrated into the application pages is described here.
Apps can access with the shell and services directly but primarily interact with the core system and other apps through the pub/sub system.
Apps can be "headless" modules adding/modifying/augmenting data or UI regions or they can add entirely new features to the application with their own routes, controllers and views. Like a calendar application or a collaborative document editor.
In order to keep the Roundcube Next Shell as thin as possible, we suggest to implement almost everything as an app. This also includes fundamental functions like displaying notifications and alerts to the user or handling file uploads. We therefore distinguish core apps and custom apps.
This is a non-exhaustive list of UI components, the Roundcube shell should provide:
- Button (with a command/action assigned)
- Menu with Items
- Simple list
- Data table
- Forms (fields, groups, tabs)
- Person/Contact (sender, recipient, organizer, event attendee, assignee, file owner, etc)
- Popup dialog
To be refined...