If you are a previous user of react-md
, I would like to first apologize for
not making this backwards compatible or a bit easier to migrate. react-md@v2
ended up being a giant rewrite to be built using Typescript and React hooks
along with additional accessibility fixes so I couldn't think of a good way to
release this along with a nice migration.
That being said, this guide should help you slowly migrate over to react-md@v2
since the new styles have been prefixed with rmd-
while react-md@v1
will
still be md-
.
Until you've fully migrated over to react-md@v2
, you'll need to use the
scoped packages instead of installing the convenience react-md
package. Your
setup will use the react-md@v1
while all the new components and styles will be
@react-md/*
.
To get started, I'd recommend these following packages as they are the "base"
for react-md
:
npm install --save @react-md/utils \
@react-md/theme \
@react-md/icon \
@react-md/states \
@react-md/typography \
@react-md/layout
Or with yarn
:
yarn add @react-md/utils \
@react-md/theme \
@react-md/icon \
@react-md/states \
@react-md/typography \
@react-md/layout
From here, you'll want to do the normal configuring your layout setup to use
the Configuration
component and optionally switch the NavigationDrawer
component from react-md@v1
to the Layout
component.
Unfortunately, I wrote react-md@v1
early in my development career and applied
some global typography styles to general <h1>
- <h6>
elements as well as
some other elements. This "feature" can be removed by setting the
$md-typography-extended
variable to false
, but you might see some oddities
throughout your app where you didn't realize you relied on this "feature".
That being said, you will need to disable that "feature" to be able to work
with react-md@v2
as well as including the styles slightly differently. This is
untested, but should be close to how you can use react-md@v1
and react-md@v2
together.
First, do not use the react-md-everything
mixin and instead manually include
the styles from react-md@v1
:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128$md-typography-extended: false;
@import "~react-md/src/scss/react-md";
// instead of calling `@include react-md-everything`, make sure
// to include everything you need except for the
// `react-md-typography` mixin.
@include react-md-accessibility;
@include react-md-grid;
@include react-md-transitions;
@include react-md-autocompletes;
@include react-md-avatars;
@include react-md-badges;
@include react-md-bottom-navigations;
@include react-md-buttons;
@include react-md-cards;
@include react-md-chips;
@include react-md-collapsers;
@include react-md-data-tables;
@include react-md-dialogs;
@include react-md-dividers;
@include react-md-drawers;
@include react-md-expansion-panels;
@include react-md-file-inputs;
@include react-md-inks;
@include react-md-icons;
@include react-md-layovers;
@include react-md-lists;
@include react-md-media;
@include react-md-menus;
@include react-md-navigation-drawers;
@include react-md-overlays;
@include react-md-papers;
@include react-md-pickers;
@include react-md-progress;
@include react-md-select-fields;
@include react-md-selection-controls;
@include react-md-sliders;
@include react-md-subheaders;
@include react-md-snackbars;
@include react-md-tabs;
@include react-md-text-fields;
@include react-md-toolbars;
@include react-md-tooltips;
@include react-md-helpers-everything;
@include react-md-colors;
// Create a temporary mixin to create the old typography styles without
// the global namespace updates
@mixin migration-typography-react-md {
$md-text-color: get-color("text", $md-light-theme);
$md-secondary-text-color: get-color("secondary", $md-light-theme);
$md-hint-text-color: get-color("hint", $md-light-theme);
$md-disabled-text-color: get-color("disabled", $md-light-theme);
%md-headline,
%md-title,
%md-subheading-2,
%md-subheading-1,
%md-body-2,
%md-body-1 {
color: $md-text-color;
}
%md-display-4,
%md-display-3,
%md-display-2,
%md-display-1,
%md-caption {
color: $md-secondary-text-color;
}
.md-display-1 {
@extend %md-display-1;
}
.md-display-2 {
@extend %md-display-2;
}
.md-display-3 {
@extend %md-display-3;
}
.md-display-4 {
@extend %md-display-4;
}
.md-headline {
@extend %md-headline;
}
.md-title {
@extend %md-title;
}
.md-subheading-1 {
@extend %md-subheading-1;
}
.md-subheading-2 {
@extend %md-subheading-2;
}
.md-body-1 {
@extend %md-body-1;
}
.md-body-2 {
@extend %md-body-2;
}
.md-caption {
@extend %md-caption;
}
@if $md-typography-include-utilities {
@include react-md-typography-utilities;
}
@if $md-typography-include-text-container {
@include react-md-typography-text-container;
}
}
@include migration-typography-react-md;
Next, you'll want to import all the mixins
from the react-md@v2
scoped
packages and re-define your theme colors:
1234567891011121314151617181920// this can be in the same file as above or just manually re-define these `$md-` prefixed
// variables
$rmd-theme-primary: $md-primary-color;
$rmd-theme-secondary: $md-secondary-color;
$rmd-theme-light: $md-light-theme;
// only include these if you don't like the new defaults
$rmd-theme-light-background: $md-light-theme-background-color;
$rmd-theme-dark-background: $md-dark-theme-background-color;
// import all the installed @react-md/* packages in your app:
@import "~@react-md/icon/dist/mixins";
@import "~@react-md/states/dist/mixins";
@import "~@react-md/theme/dist/mixins";
@import "~@react-md/typography/dist/mixins";
@import "~@react-md/utils/dist/mixins";
// this is kind of the new `react-md-everything`. it conditionally does `@include react-md-PACKAGE`
// for all the mixins that have been imported
@include react-md-utils;
Once I get closer to the official release of v2, I will also do a minor update for v1 that might be able to automate some of this for you bye either enabling a new SCSS variable flag, or checking if any of the new
rmd-
prefixed mixins/variables exist. I would love if this is something someone else would pick up though and open a PR for so I can continue focusing on documentation forreact-md@v2
This should mostly solve it, but there still might be some weird looking components from v1 that relied on my bad typography application before.