There are some aspects that we have not covered in this post, as a decision and action needs to be made and carried out sooner rather than later. Please feel free to get involved in this discussion if you have any ideas to the approach in making the Adapt Framework standalone and removing the dependencies in core, extensions, themes and components with each other.
Aim/Problem
The relationship between the framework and the vanilla theme is wrong. For people who want a custom theme it is not maintainable, we need to constantly update the custom themes with changes that go into vanilla (we rely on another theme just to work).
If you create a new theme from scratch, some core variables have to be defined in order for the components to build, such as @item-body-text-color-hover which is required by certain components. These variables may not be wanted or required by the theme used, but must be set nonetheless.
Proposed Solution
As a priority there should be a core/minimal theme added to the framework. The point is that the framework (and all components/extensions/menus/themes) should function without any dependencies on any of the others.
All the major or common “global” variables, such as @primary-color, should be moved to the core of the framework. These values can then be used directly by the core of the framework and any components, extensions, menus or themes require them.
Future: Structural vs. Presentational Variables
This is only an immediate step in the right direction. The approach in which the components are structured is something that needs to be looked into to make sure they are consistent with each other, contain their own variables and don’t rely on a theme for anything.
Going forward, everything to do with the layout of any components, menus or extensions should be contained within their respective /less folders. For example, the CSS that creates the layout of the Matching or Slider components should be contained within those components’ LESS files.
Any structural variables to do with layout (e.g. display, float, position, visibility, transform etc.) should already be defined in the core of the framework and can used by the components.
Any presentational variables that do not affect the layout (margins, padding, colour, font, borders, backgrounds, wrapper widths, buttons etc.) should be defined in the theme and more importantly only used within the theme files to avoid unnecessary dependencies.