import { storiesOf, html } from '@open-wc/demoing-storybook'; import { css } from '@lion/core'; import { LionLitElement } from '@lion/core/src/LionLitElement.js'; import { overlays, GlobalOverlayController } from '../index.js'; const globalOverlayDemoStyle = css` .demo-overlay { background-color: white; width: 200px; border: 1px solid lightgrey; } `; let placement = 'center'; const togglePlacement = overlayCtrl => { const placements = [ 'top-left', 'top', 'top-right', 'right', 'bottom-left', 'bottom', 'bottom-right', 'left', 'center', ]; placement = placements[(placements.indexOf(placement) + 1) % placements.length]; // eslint-disable-next-line no-param-reassign overlayCtrl.overlayContainerClass = `global-overlays__overlay-container--${placement}`; }; storiesOf('Global Overlay System|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, viewportConfig: { placement: 'left', }, contentTemplate: () => html` `, }), ); const overlayCtrl1 = overlays.add( new GlobalOverlayController({ trapsKeyboardFocus: true, contentTemplate: () => html` `, }), ); return html` Anchor 1 Anchor 2 `; }) .add('Option "isBlocking"', () => { const blockingOverlayCtrl = overlays.add( new GlobalOverlayController({ isBlocking: true, viewportConfig: { placement: 'left', }, contentTemplate: () => html` `, }), ); const normalOverlayCtrl = overlays.add( new GlobalOverlayController({ contentTemplate: () => html` `, }), ); return html` `; }) .add('Option "viewportConfig:placement"', () => { const overlayCtrl = overlays.add( new GlobalOverlayController({ viewportConfig: { placement: 'center', }, hasBackdrop: true, trapsKeyboardFocus: true, contentTemplate: () => html` `, }), ); return html` `; }) .add('Sync', () => { const overlayCtrl = overlays.add( new GlobalOverlayController({ contentTemplate: ({ title = 'default' } = {}) => html` `, }), ); return html` `; }) .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: ({ username = 'standard' } = {}) => html`