mirror of
https://github.com/Theaninova/TheaninovOS.git
synced 2026-01-07 08:12:49 +00:00
refactor: make the whole thing more generic
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
/**
|
||||
* @typedef {Object} PanelButtonProps
|
||||
* @property {import('types/widgets/button').ButtonProps['child']} content
|
||||
* @property {string=} window
|
||||
*/
|
||||
|
||||
/**
|
||||
* @param {import('types/widgets/button').ButtonProps & PanelButtonProps} o
|
||||
*/
|
||||
export default ({ class_name, content, window = "", setup, ...rest }) =>
|
||||
Widget.Button({
|
||||
class_name: `panel-button ${class_name}`,
|
||||
child: Widget.Box({ children: [content] }),
|
||||
setup: (self) => {
|
||||
let open = false;
|
||||
|
||||
self.hook(App, (_, win, visible) => {
|
||||
if (win !== window) return;
|
||||
|
||||
if (open && !visible) {
|
||||
open = false;
|
||||
self.toggleClassName("active", false);
|
||||
}
|
||||
|
||||
if (visible) {
|
||||
open = true;
|
||||
self.toggleClassName("active");
|
||||
}
|
||||
});
|
||||
|
||||
if (setup) setup(self);
|
||||
},
|
||||
...rest,
|
||||
});
|
||||
Reference in New Issue
Block a user