Sets namespaced CSS styles for a given Appkit Component
Provides ability to apply themes to the DOM for a specific text CSS string. This is also instance specific based on the provided prefix attribute.
The CSS file that you wish to be themed will look almost exactly like a regular CSS file. Instead of values for the variables, you will use this format:
var(--varName)
. The varName
string is the name of the attribute in the theme object that will be used to replace this string.
A full example of a rule is:
.testSelector {
background: var(--testBackground);
color: var(--testColor);
}
When calling applyTheme
, the theme object passed in will then have:
{
testBackground: '#f00',
testColor: '#00f'
}
Those replacements will be made and the resulting style will be:
.testSelector {
background: #f00;
color: #00f;
}
If one of the attributes is left off, the entire line will be removed:
{
testBackground: '#f00'
}
.testSelector {
background: #f00;
}
If there are no remaining items within a rule, the entire rule is removed.
Example implementation:
var ts = new ThemeStyler({
css: themableCssString,
prefix: '[lf-app-prefix="someuidstring"] '
});
ts.applyTheme({});
In the above example, the themableCssString
variable is a text CSS file. Often created like require('text!path/to/file.css')
. This is the file that this
instance of ThemeStyler will each time applyTheme
is called.
The prefix
attribute is an instance-specific selector which will be added at
the beginning of each line of CSS in the themableCssString
file. A simple
example is:
themableCssString = '.testSelector {}'
prefix = '[lf-app-prefix="someuidstring"] '
// Run through applyTheme
'[lf-app-prefix="someuidstring"] .testSelector {}'
If you wish to have the prefix be the root selector for your themable CSS, then
you would make :host
be the selector for your CSS rules, like this:
themableCssString = ':host {}'
Once the theme is applied, you would end up with this:
'[lf-app-prefix="someuidstring"] {}'
Also, if you want to use multiple selectors at the top level, you could do this:
themableCssString = ':host.testSelector {}'
prefix = '[lf-app-prefix="someuidstring"]'
// Run through applyTheme
'[lf-app-prefix="someuidstring"].testSelector {}'
Notice that the prefix does not have a trailing space. The :host replacement removes a single space in front of it, so any selectors that are attached to the :host selectors will be automatically attached to the prefix.
A simple generator for colors. This takes a config object along with the prefix you'd like to add to the styles and the root color.
Here is a good example:
generateColors('linkAttachment', backgroundColor, {
light: {
backgroundColor: {fn: 'darken', amt: 5},
borderColor: {color: 'rgba(0,0,0,0.3)'},
textColor: {color: '#000', fn: 'lighten', amt: 40}
},
dark: {
backgroundColor: {fn: 'lighten', amt: 5},
borderColor: {color: 'rgba(0,0,0,0.5)'},
textColor: {color: '#fff', fn: 'darken', amt: 40}
}
})
The generator will determine whether the backgroundColor
argument is light or
dark and use the appropriate config object (if provided). If light/dark is not
provided, the object must contain attribute: color object config pairs.
Color object config attributes:
color
: The color to use for the root. By itself, this will be the final color. when used in conjunction withfn
, this value will be modified.fn
: The color function to apply to the color. If no color is specified, thebackgroundColor
value is used.amt
: The amount to adjust the color. This must be used in conjunction with thefn
attribute.
Function config options:
blacken
: Blacken the color byamt
.darken
: Darken the color byamt
.lighten
: Lighten the color byamt
.