/* eslint-disable no-underscore-dangle, class-methods-use-this */ import { storiesOf, html } from '@open-wc/storybook'; import { css } from '@lion/core'; import { LionLitElement } from '@lion/core/src/LionLitElement.js'; import { overlays } from '../src/overlays.js'; import { GlobalOverlayController } from '../src/GlobalOverlayController'; const globalOverlayDemoStyle = css` .demo-overlay { background-color: white; position: fixed; top: 20px; left: 20px; width: 200px; border: 1px solid blue; } .demo-overlay--2 { left: 240px; } .demo-overlay--toast { left: initial; right: 20px; } `; storiesOf('Overlay System|Global/Global Overlay', module) .add('Default', () => { const overlayCtrl = overlays.add( new GlobalOverlayController({ contentTemplate: () => html`
`, }), ); return html` Anchor 1 Anchor 2 ${Array(50).fill( html`Lorem ipsum
`, )} `; }) .add('Option "preventsScroll"', () => { const overlayCtrl = overlays.add( new GlobalOverlayController({ preventsScroll: true, contentTemplate: () => html` `, }), ); return html` ${Array(50).fill( html`Lorem ipsum
`, )} `; }) .add('Option "hasBackdrop"', () => { const overlayCtrl = overlays.add( new GlobalOverlayController({ hasBackdrop: true, contentTemplate: () => html` `, }), ); return html` `; }) .add('Option "trapsKeyboardFocus"', () => { const overlayCtrl = overlays.add( new GlobalOverlayController({ trapsKeyboardFocus: true, contentTemplate: () => html` `, }), ); return html` Anchor 1 Anchor 2 `; }) .add('Option "trapsKeyboardFocus" (multiple)', () => { const overlayCtrl2 = overlays.add( new GlobalOverlayController({ trapsKeyboardFocus: true, contentTemplate: () => html` `, }), ); const overlayCtrl1 = overlays.add( new GlobalOverlayController({ trapsKeyboardFocus: true, contentTemplate: () => html` `, }), ); return html` `; }) .add('Option "isBlocking"', () => { const blockingOverlayCtrl = overlays.add( new GlobalOverlayController({ isBlocking: true, contentTemplate: () => html` `, }), ); const normalOverlayCtrl = overlays.add( new GlobalOverlayController({ contentTemplate: () => html` `, }), ); return html` `; }) .add('Sync', () => { const overlayCtrl = overlays.add( new GlobalOverlayController({ contentTemplate: data => html` `, }), ); return html` `; }) .add('Toast', () => { let counter = 0; function openInfo() { const toastCtrl = overlays.add( new GlobalOverlayController({ contentTemplate: data => html` `, }), ); toastCtrl.sync({ isShown: true, data: { counter }, }); counter += 1; setTimeout(() => { toastCtrl.hide(); counter -= 1; }, 2000); } return html`Very naive toast implementation
It does not handle adding new while toasts are getting hidden
`; }) .add('In web components', () => { class EditUsernameOverlay extends LionLitElement { static get properties() { return { username: { type: String }, }; } static get styles() { return css` :host { position: fixed; left: 20px; top: 20px; display: block; width: 300px; padding: 24px; background-color: white; border: 1px solid blue; } .close-button { position: absolute; top: 8px; right: 8px; } `; } render() { return html`Your username is: ${this.username}
`; } firstUpdated() { this._editOverlay = overlays.add( new GlobalOverlayController({ focusElementAfterHide: this.shadowRoot.querySelector('button'), contentTemplate: data => html`