UNPKG

@inkline/inkline

Version:

Inkline is the Vue.js UI/UX Library built for creating your next design system

50 lines 1.58 kB
import { isKey } from '../helpers/index.mjs'; export const OverlayController = { instances: {}, stack: [], zIndex: 1050, register(instance) { if (instance && instance.name) { OverlayController.instances[instance.name] = instance; } }, unregister(instance) { if (instance && instance.name) { OverlayController.instances[instance.name] = null; delete OverlayController.instances[instance.name]; } }, open(name) { if (typeof window === 'undefined') { return; } OverlayController.stack.push(name); OverlayController.instances[name].$el.style.zIndex = OverlayController.zIndex++; }, close(name) { if (typeof window === 'undefined') { return; } OverlayController.stack.splice(OverlayController.stack.indexOf(name), 1); }, getTopOverlay() { const topOverlayName = OverlayController.stack.slice(-1)[0] || ''; return OverlayController.instances[topOverlayName]; }, onPressEscape() { const topOverlay = OverlayController.getTopOverlay(); if (topOverlay && topOverlay.closeOnPressEscape) { topOverlay.hide(); } } }; if (typeof window !== 'undefined') { // Handle `esc` key when the popup is shown window.addEventListener('keydown', (e) => { if (isKey('esc', e)) { OverlayController.onPressEscape(); } }); } export default OverlayController; //# sourceMappingURL=OverlayController.mjs.map