From d06784958d73159b5e4abafe5114804662114ed7 Mon Sep 17 00:00:00 2001 From: Ryan Schanzenbacher Date: Thu, 9 Jul 2026 22:15:53 -0400 Subject: move ubersicht modules in tree --- .../lib/components/yabai/window.jsx | 119 +++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100755 users/ryan/modules/simple-bar/simple-bar-source/lib/components/yabai/window.jsx (limited to 'users/ryan/modules/simple-bar/simple-bar-source/lib/components/yabai/window.jsx') diff --git a/users/ryan/modules/simple-bar/simple-bar-source/lib/components/yabai/window.jsx b/users/ryan/modules/simple-bar/simple-bar-source/lib/components/yabai/window.jsx new file mode 100755 index 0000000..2b47878 --- /dev/null +++ b/users/ryan/modules/simple-bar/simple-bar-source/lib/components/yabai/window.jsx @@ -0,0 +1,119 @@ +import * as Uebersicht from "uebersicht"; +import * as AppIcons from "../../app-icons"; +import { SuspenseIcon } from "../icons/icon.jsx"; +import { useSimpleBarContext } from "../simple-bar-context.jsx"; +import * as Utils from "../../utils"; +import * as Yabai from "../../yabai"; + +const { React } = Uebersicht; + +/** + * Window component to display a window in simple-bar. + * @param {Object} props - The component props. + * @param {Object} props.window - The window object containing window details. + * @returns {JSX.Element|null} The rendered window component or null if the window is minimized or not focused. + */ +export default function Window({ window }) { + const { settings } = useSimpleBarContext(); + const ref = React.useRef(); + + // Destructure settings for process display options + const { + displayOnlyCurrent, + hideWindowTitle, + displayOnlyIcon, + expandAllProcesses, + displayStackIndex, + displayOnlyCurrentStack, + } = settings.process; + + // Destructure window properties + const { + "stack-index": stackIndex, + "is-minimized": isMinimized, + minimized: __legacyIsMinimized, + "has-focus": hasFocus, + focused: __legacyHasFocus, + app: appName, + title, + id, + } = window; + + // Determine if the window is focused + const isFocused = hasFocus ?? __legacyHasFocus; + + // Return null if the window is minimized or not focused when displayOnlyCurrent is true + if ( + (isMinimized ?? __legacyIsMinimized) || + (displayOnlyCurrent && !isFocused) + ) { + return null; + } + + // Get the icon for the application or use the default icon + const Icon = AppIcons.apps[appName] || AppIcons.apps.Default; + + /** + * Handle click event on the window button. + * @param {Event} e - The click event. + */ + const onClick = (e) => { + !displayOnlyCurrent && Utils.clickEffect(e); + Yabai.focusWindow(id); + }; + + /** + * Handle mouse enter event to start sliding animation. + */ + const onMouseEnter = () => { + Utils.startSliding(ref.current, ".process__inner", ".process__name"); + }; + + /** + * Handle mouse leave event to stop sliding animation. + */ + const onMouseLeave = () => { + Utils.stopSliding(ref.current, ".process__name"); + }; + + // Generate class names for the window button + const classes = Utils.classNames("process__window", { + "process__window--expanded": expandAllProcesses, + "process__window--focused": !displayOnlyCurrent && isFocused, + "process__window--only-current": displayOnlyCurrent, + "process__window--only-icon": displayOnlyIcon, + }); + + // Clean up the window name for display + const cleanedUpName = + appName !== title && title.length ? `${appName} / ${title}` : appName; + const processName = hideWindowTitle ? appName : cleanedUpName; + + // Determine if the stack index should be displayed + const showStackIndex = + displayStackIndex && + (!displayOnlyCurrentStack || isFocused) && + stackIndex > 0; + + return ( + + ); +} -- cgit v1.3