diff --git a/docs/src/App.vue b/docs/src/App.vue
index ecc83c9..f81d4c6 100644
--- a/docs/src/App.vue
+++ b/docs/src/App.vue
@@ -47,6 +47,10 @@
Checkbox
+
+ Dialog
+
+
Icon
diff --git a/docs/src/pages/components/Dialog.vue b/docs/src/pages/components/Dialog.vue
new file mode 100644
index 0000000..0ecf682
--- /dev/null
+++ b/docs/src/pages/components/Dialog.vue
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+ Close
+
+
+ Open
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/src/routes.js b/docs/src/routes.js
index edf8fbe..11150a0 100644
--- a/docs/src/routes.js
+++ b/docs/src/routes.js
@@ -12,6 +12,7 @@ import Buttons from './pages/components/Buttons';
import ButtonToggle from './pages/components/ButtonToggle';
import Card from './pages/components/Card';
import Checkbox from './pages/components/Checkbox';
+import Dialog from './pages/components/Dialog';
import Icon from './pages/components/Icon';
import Input from './pages/components/Input';
import List from './pages/components/List';
@@ -95,6 +96,11 @@ const components = [
name: 'components:checkbox',
component: Checkbox
},
+ {
+ path: '/components/dialog',
+ name: 'components:dialog',
+ component: Dialog
+ },
{
path: '/components/icon',
name: 'components:icon',
diff --git a/src/components/mdBackdrop/index.js b/src/components/mdBackdrop/index.js
new file mode 100644
index 0000000..f16326e
--- /dev/null
+++ b/src/components/mdBackdrop/index.js
@@ -0,0 +1,5 @@
+import mdBackdrop from './mdBackdrop.vue';
+
+export default function install(Vue) {
+ Vue.component('md-backdrop', Vue.extend(mdBackdrop));
+}
diff --git a/src/components/mdBackdrop/mdBackdrop.scss b/src/components/mdBackdrop/mdBackdrop.scss
new file mode 100644
index 0000000..bfafe5d
--- /dev/null
+++ b/src/components/mdBackdrop/mdBackdrop.scss
@@ -0,0 +1,20 @@
+@import '../../core/stylesheets/variables.scss';
+
+.md-backdrop {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 99;
+ pointer-events: none;
+ background-color: rgba(#000, .54);
+ transform: translate3d(0, 0, 0);
+ opacity: 0;
+ transition: $swift-ease-in-out;
+
+ &.md-active {
+ opacity: 1;
+ pointer-events: auto;
+ }
+}
diff --git a/src/components/mdBackdrop/mdBackdrop.vue b/src/components/mdBackdrop/mdBackdrop.vue
new file mode 100644
index 0000000..d72dcac
--- /dev/null
+++ b/src/components/mdBackdrop/mdBackdrop.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/src/components/mdDialog/index.js b/src/components/mdDialog/index.js
new file mode 100644
index 0000000..a38c107
--- /dev/null
+++ b/src/components/mdDialog/index.js
@@ -0,0 +1,8 @@
+import mdDialog from './mdDialog.vue';
+import mdDialogTheme from './mdDialog.theme';
+
+export default function install(Vue) {
+ Vue.component('md-dialog', Vue.extend(mdDialog));
+
+ Vue.material.styles.push(mdDialogTheme);
+}
diff --git a/src/components/mdDialog/mdDialog.scss b/src/components/mdDialog/mdDialog.scss
new file mode 100644
index 0000000..af73f0f
--- /dev/null
+++ b/src/components/mdDialog/mdDialog.scss
@@ -0,0 +1,44 @@
+@import '../../core/stylesheets/variables.scss';
+
+.md-dialog {
+ min-width: 240px;
+ max-width: 80%;
+ max-height: 80%;
+ overflow: hidden;
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ z-index: 110;
+ outline: none;
+ border-radius: 2px;
+ opacity: 0;
+ filter: drop-shadow(0 7px 8px rgba(#000, $shadow-key-umbra-opacity))
+ drop-shadow(0 12px 17px rgba(#000, $shadow-key-penumbra-opacity))
+ drop-shadow(0 5px 22px rgba(#000, $shadow-ambient-shadow-opacity));
+ clip-path: inset(0 7% 12% 7%);
+ transform: translate3D(-50%, -60%, 0) scale(.85);
+ transition: transform $swift-ease-out-duration $swift-ease-out-timing-function,
+ opacity .3s $swift-ease-out-timing-function,
+ clip-path .3s .1s $swift-ease-out-timing-function;
+ transition-delay: 0;
+
+ &.md-active {
+ pointer-events: auto;
+ opacity: 1;
+ clip-path: inset(-22px -22px -22px -22px);
+ transition: transform $swift-ease-out-duration $swift-ease-out-timing-function,
+ opacity .5s $swift-ease-out-timing-function,
+ clip-path .4s .1s $swift-ease-out-timing-function;
+ transition-delay: 0;
+ transform: translate3D(-50%, -50%, 0) scale(1);
+ }
+}
+
+.md-dialog-content {
+ padding: 24px;
+}
+
+.md-dialog-backdrop {
+ position: fixed;
+ z-index: 109;
+}
diff --git a/src/components/mdDialog/mdDialog.theme b/src/components/mdDialog/mdDialog.theme
new file mode 100644
index 0000000..a6f0547
--- /dev/null
+++ b/src/components/mdDialog/mdDialog.theme
@@ -0,0 +1,7 @@
+.THEME_NAME {
+ .md-dialog,
+ &.md-dialog {
+ background-color: #{'BACKGROUND-COLOR-A100'};
+ color: #{'BACKGROUND-CONTRAST'};
+ }
+}
diff --git a/src/components/mdDialog/mdDialog.vue b/src/components/mdDialog/mdDialog.vue
new file mode 100644
index 0000000..53b2923
--- /dev/null
+++ b/src/components/mdDialog/mdDialog.vue
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/mdMenu/mdMenu.scss b/src/components/mdMenu/mdMenu.scss
index a0a70c7..8cb98ab 100644
--- a/src/components/mdMenu/mdMenu.scss
+++ b/src/components/mdMenu/mdMenu.scss
@@ -18,7 +18,9 @@ $menu-base-width: 56px;
z-index: 120;
background-color: #fff;
border-radius: 2px;
- filter: drop-shadow(0 1px 1px rgba(#000, $shadow-key-umbra-opacity)) drop-shadow(0 2px 2px rgba(#000, $shadow-key-penumbra-opacity)) drop-shadow(0 1px 1px rgba(#000, $shadow-ambient-shadow-opacity));
+ filter: drop-shadow(0 1px 1px rgba(#000, $shadow-key-umbra-opacity))
+ drop-shadow(0 2px 2px rgba(#000, $shadow-key-penumbra-opacity))
+ drop-shadow(0 1px 1px rgba(#000, $shadow-ambient-shadow-opacity));
opacity: 0;
transition: width $swift-ease-out-duration $swift-ease-out-timing-function,
opacity .25s $swift-ease-in-timing-function,
diff --git a/src/components/mdSidenav/mdSidenav.scss b/src/components/mdSidenav/mdSidenav.scss
index cee3c3d..393b4d2 100644
--- a/src/components/mdSidenav/mdSidenav.scss
+++ b/src/components/mdSidenav/mdSidenav.scss
@@ -13,7 +13,7 @@
&.md-fixed {
.md-sidenav-content,
- .md-backdrop {
+ .md-sidenav-backdrop {
position: fixed;
}
}
@@ -28,20 +28,6 @@
overflow: auto;
transition: $swift-ease-out;
}
-
- .md-backdrop {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 99;
- pointer-events: none;
- background-color: rgba(#000, .54);
- transform: translate3d(0, 0, 0);
- opacity: 0;
- transition: $swift-ease-in-out;
- }
}
.md-sidenav.md-active {
@@ -51,7 +37,7 @@
transform: translate3d(0, 0, 0);
}
- .md-backdrop {
+ .md-sidenav-backdrop {
opacity: 1;
pointer-events: auto;
}
diff --git a/src/components/mdSidenav/mdSidenav.vue b/src/components/mdSidenav/mdSidenav.vue
index 9784e9b..ab54b08 100644
--- a/src/components/mdSidenav/mdSidenav.vue
+++ b/src/components/mdSidenav/mdSidenav.vue
@@ -4,7 +4,7 @@
-
+
diff --git a/src/index.js b/src/index.js
index 1a2bbb6..106149a 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,10 +1,12 @@
import mdCore from './core';
import mdAvatar from './components/mdAvatar';
+import mdBackdrop from './components/mdBackdrop';
import mdBottomBar from './components/mdBottomBar';
import mdButton from './components/mdButton';
import mdButtonToggle from './components/mdButtonToggle';
-import mdCheckbox from './components/mdCheckbox';
import mdCard from './components/mdCard';
+import mdCheckbox from './components/mdCheckbox';
+import mdDialog from './components/mdDialog';
import mdDivider from './components/mdDivider';
import mdIcon from './components/mdIcon';
import mdInputContainer from './components/mdInputContainer';
@@ -24,11 +26,13 @@ import mdWhiteframe from './components/mdWhiteframe';
let options = {
mdCore,
mdAvatar,
+ mdBackdrop,
mdBottomBar,
mdButton,
mdButtonToggle,
- mdCheckbox,
mdCard,
+ mdCheckbox,
+ mdDialog,
mdDivider,
mdIcon,
mdInputContainer,