@inkline/inkline
Version:
Inkline is the Vue.js UI/UX Library built for creating your next design system
50 lines • 1.58 kB
JavaScript
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