Automatically styles preact-material-components (needs to be used with something like webpack)
module.exports = {
// [...]
rules: [
{
test: {
test: /\.scss$/,
and: /^node_modules\/precat-mwc-styled/
},
use: [
{loader: "style-loader"},
{loader: "css-loader"},
{
loader: "postcss-loader", options: {
plugins: [
require("postcss-custom-properties")({strict: false, preserve: true}),
require("autoprefixer")
]
}
},
{loader: "sass-loader", options: {includePaths: ["./node_modules"]}},
{loader: "sass-resources-loader", options: {resources: "<path to your theme>"}}
]
}
// [...]
]
// [...]
}
module.exports = {
// [...]
rules: [
{
test: {
test: /\.scss$/,
and: [/node_modules\/precat-mwc-styled\//]
},
use: [
{loader: "style-loader"},
{loader: "css-loader"},
{
loader: "postcss-loader", options: {
plugins: [
require("postcss-custom-properties")({strict: false, preserve: true}),
require("autoprefixer")
]
}
},
{loader: "sass-loader", options: {includePaths: ["./node_modules"]}},
{loader: "sass-resources-loader", options: {resources: "<path to your theme (see Theming)>"}}
]
},
{
test: {
test: /\.scss$/,
exclude: /node_modules\//
},
use: [
// Your scss processing
]
}
// [...]
]
// [...]
}
You need to install style-loader
, css-loader
, postcss-loader
, postcss-custom-properties
, autoprefixer
,
sass-loader
and sass-resources-loader
for this config to work are automatically installed by this package.
You can add more postcss
plugins or remove autoprefixer
, removing postcss-custom-properties
is possible,
but not recommended.
You can remove style-loader
but it is recommended to use it.
Insert on use (/usable
) is optional, try what works for you.
You should prerender the site in production
(If this library is good enough for your use case, it's currently not well tested)
style-loader
: Inserts the css for the components into DOM. Can be replaced withextract-loader
in production.css-loader
: Seesass-loader
documentationpostcss
:postcss-custom-properties
: To "compile" your theme into the css (Especially for browsers that do not support CSS custom properties)autoprefixer
: cross-browser support
sass-loader
: This project uses sass, absolutely neededsass-resources-loader
: To insert your theme mixins into the component stylesheets
Just use them like:
import {Component, h} from "preact";
import Button from "preact-mwc-styled/Button";
export default class App extends Component {
render() {
return <Button primary ripple>I am a Button</Button>
}
}
This project is fully TypeScript compatible! (Because it's written in TypeScript)
For documentation of the components refer to preact-material-components and their docs.
To use your custom theme, just create a custom theme sass file like this:
$mdc-theme-primary: #6200ee; // primary color
$mdc-theme-on-primary: #000000; // text color on primary component
$mdc-theme-secondary: #018786; // secondary color
$mdc-theme-on-secondary: #000000; // text color on secondary component
// Uncommon that you need this ones
$mdc-theme-background: #ffffff;
$mdc-theme-surface: #ffffff;
$mdc-theme-on-surface: #000000;
And reference it from sass-resources-loader
. Just insert the variables you need into your theme file.
For assistance on choosing colors there is the material color tool.
You can also override material classes in there.