Skip to content

Commit b24cce3

Browse files
committed
Updated modal
1 parent 4e8a56d commit b24cce3

File tree

5 files changed

+119
-0
lines changed

5 files changed

+119
-0
lines changed

example/index.html

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,18 @@ <h1>Icons</h1>
135135

136136
<!-- toast which persists on the screen for 10 seconds -->
137137
<js-toast id="toast" duration="10"></js-toast>
138+
139+
<!-- Modal Dialog -->
140+
<js-modal id="modal" visible toggle="js-button">
141+
<js-nav vertical>
142+
<js-navitem texttransform="uppercase">Home</js-navitem>
143+
<js-navspacer></js-navspacer>
144+
<js-navitem disabled>
145+
<js-close></js-close>
146+
</js-navitem>
147+
</js-nav>
148+
</js-modal>
149+
138150
</body>
139151

140152
</html>

src/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import './core/core';
33
import './element/element';
44
import './canvas/canvas';
5+
import './modal/modal';
56
import './mapbox/mapbox';
67

78
// Styles

src/modal/ModalElement.js

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
import {
2+
LitElement, html, css, nothing,
3+
} from 'lit';
4+
5+
/**
6+
* @class ModalElement
7+
*
8+
* This class provides a modal content container which is initially hidden
9+
*
10+
* @example
11+
* <js-modal select="#button">OK</js-modal>
12+
*/
13+
export class ModalElement extends LitElement {
14+
static get localName() {
15+
return 'js-modal';
16+
}
17+
18+
static get properties() {
19+
return {
20+
visible: { type: Boolean, reflect: true },
21+
select: { type: String, reflect: true },
22+
};
23+
}
24+
25+
static get styles() {
26+
return css`
27+
div {
28+
position: fixed;
29+
left: 0;
30+
top: 0;
31+
right: 0;
32+
bottom: 0;
33+
overflow-x: hidden;
34+
overflow-y: auto;
35+
transition: visibility var(--modal-fade-delay), opacity var(--modal-fade-delay);
36+
}
37+
.visible {
38+
display: block;
39+
visibility: visible;
40+
}
41+
.canvas {
42+
background-color: var(--modal-background-color-canvas);
43+
opacity: 0;
44+
&.visible {
45+
opacity: var(--modal-opacity-canvas);
46+
}
47+
}
48+
.content {
49+
background-color: var(--modal-background-color);
50+
margin: var(--modal-margin);
51+
border: var(--modal-border);
52+
border-radius: var(--modal-border-radius);
53+
}
54+
.wrapper {
55+
display: flex;
56+
position: relative;
57+
justify-content: center;
58+
align-items: center;
59+
flex-direction: row;
60+
}
61+
`;
62+
}
63+
64+
render() {
65+
return html`
66+
<div class=${this.canvasClasses.join(' ') || nothing}></div>
67+
<div class=${this.contentClasses.join(' ') || nothing}">
68+
<div class="wrapper"><slot></slot></div>
69+
</div>
70+
`;
71+
}
72+
73+
get canvasClasses() {
74+
const classes = [];
75+
classes.push('canvas');
76+
if (this.visible) {
77+
classes.push('visible');
78+
}
79+
return classes;
80+
}
81+
82+
get contentClasses() {
83+
const classes = [];
84+
classes.push('content');
85+
if (this.visible) {
86+
classes.push('visible');
87+
}
88+
return classes;
89+
}
90+
}

src/modal/modal.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// Elements
2+
import { ModalElement } from './ModalElement';
3+
4+
// Define Web Components
5+
customElements.define(ModalElement.localName, ModalElement); // js-modal

src/tokens.css

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,3 +241,14 @@
241241
--nav-item-border: 0.2rem solid transparent;
242242
--nav-item-border-hover: 0.2rem solid white;
243243
}
244+
245+
/* modals */
246+
:root {
247+
--modal-background-color-canvas: var(--black-color);
248+
--modal-background-color: var(--white-color);
249+
--modal-opacity-canvas: 0.3;
250+
--modal-fadein-delay: 0.5s;
251+
--modal-margin: 20vh 20vh;
252+
--modal-border-radius: 0.2rem;
253+
--modal-border: 0.05rem solid var(--black-color);
254+
}

0 commit comments

Comments
 (0)