A theme is the static configuration of a theme-able system. This requires a way to express the configuration and a theme-able system that is responsible for using the configuration to apply the expected styling.
I would argue that a good theme system has two key properties:
The interface consists of high level semantic variables that can be reused. This is where you assign values to variables such as primary
, accent
, etc. This is a convenient abstraction over specific assignments of values to style properties. It makes it easy to quickly customize a system with a different set of tokens.