import { bind, idle, Variable } from 'astal'; import { Astal, astalify, Gtk, type ConstructProps, Widget } from 'astal/gtk3'; import { register } from 'astal/gobject'; import Separator from '../misc/separator'; import Arc from './arcs'; import Key from './keys'; import { defaultOskLayout, oskLayouts } from './keyboard-layouts'; const keyboardLayout = defaultOskLayout; const keyboardJson = oskLayouts[keyboardLayout]; @register() class ToggleButton extends astalify(Gtk.ToggleButton) { constructor(props: ConstructProps< ToggleButton, Gtk.ToggleButton.ConstructorProps >) { // eslint-disable-next-line @typescript-eslint/no-explicit-any super(props as any); } } const L_KEY_PER_ROW = [8, 7, 6, 6, 6, 4]; const SPACING = 4; const COLOR = 'rgba(0, 0, 0, 0.5)'; export default () => { const ThirdWidth = Variable(0); return ( idle(() => { ThirdWidth.set(self.get_allocated_width() / 3); })} > {/* LEFT */} {...keyboardJson.keys.map((row, rowIndex) => { const keys = [] as Widget.Box[]; row.forEach((key, keyIndex) => { if (keyIndex < L_KEY_PER_ROW[rowIndex]) { keys.push(Key(key)); } }); return ( {...keys} ); })} {/* MIDDLE */} {bind(ThirdWidth).as((width) => ( ))} { self.toggleClassName( 'toggled', self.get_active(), ); if (self.get_toplevel() === self) { return; } (self.get_toplevel() as Widget.Window | undefined) ?.set_exclusivity( self.get_active() ? Astal.Exclusivity.EXCLUSIVE : Astal.Exclusivity.NORMAL, ); }} > Exclusive {/* RIGHT */} {...keyboardJson.keys.map((row, rowIndex) => { const keys = [] as Widget.Box[]; row.forEach((key, keyIndex) => { if (keyIndex >= L_KEY_PER_ROW[rowIndex]) { keys.push(Key(key)); } }); return ( {...keys} ); })} ) as Widget.Box; };