import { storiesOf, html } from '@open-wc/demoing-storybook'; import { css } from '@lion/core'; import { GlobalOverlayController, LocalOverlayController, DynamicOverlayController, } from '../index.js'; import { overlays } from '../src/overlays.js'; const dynamicOverlayDemoStyle = css` .demo-overlay { display: block; position: absolute; background-color: white; padding: 8px; } .demo-overlay__global--small { bottom: 0; left: 0; width: 100vw; height: 90%; background: #ccc; } .demo-overlay__global--big { left: 50px; top: 30px; width: 200px; max-width: 250px; border-radius: 2px; box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.12), 0 6px 6px 0 rgba(0, 0, 0, 0.24); } .demo-overlay__local { display: block; position: absolute; max-width: 250px; border-radius: 2px; box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.12), 0 6px 6px 0 rgba(0, 0, 0, 0.24); } `; storiesOf('Dynamic Overlay System|Switching Overlays', module) .add('Switch global overlays', () => { const invokerNode = document.createElement('button'); invokerNode.innerHTML = 'Invoker Button'; const ctrl = new DynamicOverlayController(); const global1 = overlays.add( new GlobalOverlayController({ contentTemplate: () => html`
`, invokerNode, }), ); ctrl.add(global1); const global2 = overlays.add( new GlobalOverlayController({ contentTemplate: () => html` `, invokerNode, }), ); ctrl.add(global2); invokerNode.addEventListener('click', event => { ctrl.show(event.target); }); function switchOnMediaChange(x) { if (x.matches) { // <= 600px ctrl.nextOpen = global1; } else { ctrl.nextOpen = global2; } } const matchSmall = window.matchMedia('(max-width: 600px)'); switchOnMediaChange(matchSmall); // call once manually to init matchSmall.addListener(switchOnMediaChange); return html`Shows "Bottom Sheet" for small (< 600px) screens and "Dialog" for big (> 600px) screens
${ctrl.invokerNode}You can also while overlay is hidden.
`; }) .add('Switch local overlays', () => { const invokerNode = document.createElement('button'); invokerNode.innerHTML = 'Invoker Button'; const ctrl = new DynamicOverlayController(); const local1 = new LocalOverlayController({ contentTemplate: () => html` `, invokerNode, }); ctrl.add(local1); const local2 = new LocalOverlayController({ contentTemplate: () => html` `, invokerNode, }); ctrl.add(local2); invokerNode.addEventListener('click', () => { ctrl.toggle(); }); function switchOnMediaChange(x) { if (x.matches) { // <= 600px ctrl.nextOpen = local1; } else { ctrl.nextOpen = local2; } } const matchSmall = window.matchMedia('(max-width: 600px)'); switchOnMediaChange(matchSmall); // call once manually to init matchSmall.addListener(switchOnMediaChange); return html`Shows "read me..." for small (< 600px) screens and all for big (> 600px) screens
${ctrl.invokerNode}${ctrl.content}You can also while overlay is hidden.
`; }) .add('Global & Local', () => { const invokerNode = document.createElement('button'); invokerNode.innerHTML = 'Invoker Button'; const ctrl = new DynamicOverlayController(); const local = new LocalOverlayController({ contentTemplate: () => html` `, invokerNode, }); ctrl.add(local); const global = overlays.add( new GlobalOverlayController({ contentTemplate: () => html` `, invokerNode, }), ); ctrl.add(global); invokerNode.addEventListener('click', () => { ctrl.toggle(); }); function switchOnMediaChange(x) { if (x.matches) { // <= 600px console.log('settig', global); ctrl.nextOpen = global; } else { ctrl.nextOpen = local; } } const matchSmall = window.matchMedia('(max-width: 600px)'); switchOnMediaChange(matchSmall); // call once manually to init matchSmall.addListener(switchOnMediaChange); return html`Shows "Buttom Sheet" for small (< 600px) screens and "Dropdown" for big (> 600px) screens
This button is indented to show the local positioning ${ctrl.invokerNode}${ctrl.content}
You can also while overlay is hidden.
`; });