import { Astal, Gtk } from "ags/gtk4"; import { Windows } from "../windows"; import { PopupWindow } from "./PopupWindow"; import { Separator } from "./Separator"; import { tr } from "../i18n/intl"; import { Accessor, For, With } from "ags"; import { transformWidget, variableToBoolean, WidgetNodeType } from "../scripts/utils"; export type CustomDialogProps = { namespace?: string | Accessor; className?: string | Accessor; cssBackground?: string; title?: string | Accessor; text?: string | Accessor; heightRequest?: number | Accessor; widthRequest?: number | Accessor; childOrientation?: Gtk.Orientation | Accessor; children?: WidgetNodeType; onFinish?: () => void; options?: Array | Accessor>; optionsOrientation?: Gtk.Orientation | Accessor; }; export interface CustomDialogOption { onClick?: () => void; text: string | Accessor; closeOnClick?: boolean | Accessor; } function CustomDialogOption({closeOnClick = true, ...props}: CustomDialogOption & { dialog: Astal.Window }) { function onClicked() { props.onClick?.(); closeOnClick && props.dialog?.close(); } return } export function CustomDialog({ options = [{ text: tr("accept") }], ...props}: CustomDialogProps) { return Windows.getDefault().createWindowForFocusedMonitor((mon) => self.set_child( { (props.children instanceof Accessor) ? (Array.isArray(props.children) ? >}> {(widget) => widget && widget} : }> {(widget) => widget && widget} ) : (Array.isArray(props.children) ? props.children.map(widget => widget && widget).filter(w => w) : props.children) } 0} spacing={8} orientation={Gtk.Orientation.VERTICAL} /> {transformWidget(options, (props) => )} as Gtk.Box )} /> as Astal.Window )(); }