nixos-configs/devices/wim/config/ags/js/misc/popup.js

66 lines
1.7 KiB
JavaScript
Raw Normal View History

import App from 'resource:///com/github/Aylur/ags/app.js';
import { Revealer, Box, Window } from 'resource:///com/github/Aylur/ags/widget.js';
export default ({
2023-10-30 19:53:50 -04:00
// Revealer props
transition = 'slide_down',
transitionDuration = 500,
// Optional: execute a function whenever the window pops up
onOpen = () => {},
// Window props
name,
child,
closeOnUnfocus = 'released',
2023-10-30 19:53:50 -04:00
visible = false,
layer = 'overlay',
...props
}) => {
const window = Window({
name,
2023-10-30 19:53:50 -04:00
layer,
popup: true,
visible: false,
...props,
2023-10-30 19:53:50 -04:00
// Add way to make window open on startup
setup: () => {
const id = App.connect('config-parsed', () => {
if (visible)
App.openWindow(name);
App.disconnect(id);
});
},
// Wrapping the revealer inside a box is needed
// to allocate some space for it even when not revealed
child: Box({
2023-10-21 14:39:37 -04:00
style: `min-height:1px;
min-width:1px;
padding: 1px;`,
child: Revealer({
transition,
2023-10-30 19:53:50 -04:00
transitionDuration,
connections: [[App, (rev, currentName, visible) => {
if (currentName === name) {
2023-10-30 19:53:50 -04:00
rev.revealChild = visible;
onOpen(child);
}
}]],
child: child,
}),
}),
});
2023-10-30 19:53:50 -04:00
// Make getting the original child passed in
// this function easier when making more code
// for the widget
window.getChild = () => child;
2023-10-30 19:53:50 -04:00
// This is for my custom pointers.js
window.closeOnUnfocus = closeOnUnfocus;
2023-10-30 19:53:50 -04:00
return window;
};