From 9e8634d892c559c5b44565a68bf35b13cbcb5572 Mon Sep 17 00:00:00 2001 From: Aylur Date: Thu, 16 Jan 2025 17:37:00 +0100 Subject: add: gtk3 ts popover example closes #224 closes #157 --- .../gtk3/js/applauncher/widget/Applauncher.scss | 59 +++++++++++++++ .../gtk3/js/applauncher/widget/Applauncher.tsx | 87 ++++++++++++++++++++++ 2 files changed, 146 insertions(+) create mode 100644 examples/gtk3/js/applauncher/widget/Applauncher.scss create mode 100644 examples/gtk3/js/applauncher/widget/Applauncher.tsx (limited to 'examples/gtk3/js/applauncher/widget') diff --git a/examples/gtk3/js/applauncher/widget/Applauncher.scss b/examples/gtk3/js/applauncher/widget/Applauncher.scss new file mode 100644 index 0000000..ae2453d --- /dev/null +++ b/examples/gtk3/js/applauncher/widget/Applauncher.scss @@ -0,0 +1,59 @@ +@use "sass:string"; + +@function gtkalpha($c, $a) { + @return string.unquote("alpha(#{$c},#{$a})"); +} + +// https://gitlab.gnome.org/GNOME/gtk/-/blob/gtk-3-24/gtk/theme/Adwaita/_colors-public.scss +$fg-color: #{"@theme_fg_color"}; +$bg-color: #{"@theme_bg_color"}; + +window#launcher { + all: unset; + + box.Applauncher { + background-color: $bg-color; + border-radius: 11px; + margin: 1rem; + padding: .8rem; + box-shadow: 2px 3px 8px 0 gtkalpha(black, .4); + + entry { + margin-bottom: .8rem; + } + + button { + min-width: 0; + min-height: 0; + padding: .5rem; + + icon { + font-size: 3em; + margin-right: .3rem; + } + + label.name { + font-weight: bold; + font-size: 1.1em + } + + label.description { + color: gtkalpha($fg-color, .8); + } + } + + box.not-found { + padding: 1rem; + + icon { + font-size: 6em; + color: gtkalpha($fg-color, .7); + } + + label { + color: gtkalpha($fg-color, .9); + font-size: 1.2em; + } + } + } +} diff --git a/examples/gtk3/js/applauncher/widget/Applauncher.tsx b/examples/gtk3/js/applauncher/widget/Applauncher.tsx new file mode 100644 index 0000000..c7bac68 --- /dev/null +++ b/examples/gtk3/js/applauncher/widget/Applauncher.tsx @@ -0,0 +1,87 @@ +import Apps from "gi://AstalApps" +import { App, Astal, Gdk, Gtk } from "astal/gtk3" +import { Variable } from "astal" + +const MAX_ITEMS = 8 + +function hide() { + App.get_window("launcher")!.hide() +} + +function AppButton({ app }: { app: Apps.Application }) { + return +} + +export default function Applauncher() { + const { CENTER } = Gtk.Align + const apps = new Apps.Apps() + + const text = Variable("") + const list = text(text => apps.fuzzy_query(text).slice(0, MAX_ITEMS)) + const onEnter = () => { + apps.fuzzy_query(text.get())?.[0].launch() + hide() + } + + return text.set("")} + onKeyPressEvent={function (self, event: Gdk.Event) { + if (event.get_keyval()[1] === Gdk.KEY_Escape) + self.hide() + }}> + + + + + + text.set(self.text)} + onActivate={onEnter} + /> + + {list.as(list => list.map(app => ( + + )))} + + l.length === 0)}> + + + + + + + + +} -- cgit v1.2.3