Dark Mode
Easily change the theme of your application to light or dark programmatically.
Dark mode is natively supported in Inkline by changing the default component variant property value. The variant can be configured through the $inkline global prototype available in every component:
this.$inkline.config.variant = 'dark';
How to Toggle Dark Mode
Dark mode can be toggled easily by changing the default component configuration variant value as follows:
The inkline Class
When the page loads, Inkline adds an .inkline class to the page's <body>, along with a dynamically switched .-light or .-dark class based on the configured variant.
<body class="inkline -light"> ... </body>
The .inkline class gives you theme awareness and control over general page design elements, such as background and color.
.inkline {
&.-light { /* ... */ }
&.-dark { /* ... */ }
}
The variant Property
Changing the default variant of Inkline components will cause every component to transition to the new color theme.
Notice how the <i-button variant="light"> doesn't change? If the variant property is set explicitly, components will not be affected.
The VariantPropertyMixin Mixin
You can write your own components with a variant property using a mixin called VariantPropertyMixin. The variant mixin relies on the ClassesProviderMixin, which provides a reactive classes array.
During the created() lifecycle, the variant property mixin adds a rule to the classes provider that dynamically computes the -light or -dark variant class for the element based on this.$inkline.config.variant.
<template>
<div class="my-component" :class="classes">
<slot>I support dark mode.</slot>
</div>
</i-tab>
<style lang="scss">
.my-component {
&.-light {
background: #fafafa;
}
&.-dark {
background: #3a3a3a;
}
}
</style>
<script>
import {
ClassesProviderMixin,
VariantPropertyMixin
} from '@inkline/inkline/src/mixins';
export default {
name: 'MyComponent',
mixins: [
ClassesProviderMixin,
VariantPropertyMixin
]
}
</script>
Use the component as follows:
<my-component></my-component>
<my-component variant="light"></my-component>
<my-component variant="dark"></my-component>