summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/js/applauncher/widget/Applauncher.scss14
-rw-r--r--examples/js/applauncher/widget/Applauncher.tsx24
2 files changed, 28 insertions, 10 deletions
diff --git a/examples/js/applauncher/widget/Applauncher.scss b/examples/js/applauncher/widget/Applauncher.scss
index 86c5e87..ae2453d 100644
--- a/examples/js/applauncher/widget/Applauncher.scss
+++ b/examples/js/applauncher/widget/Applauncher.scss
@@ -41,5 +41,19 @@ window#launcher {
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/js/applauncher/widget/Applauncher.tsx b/examples/js/applauncher/widget/Applauncher.tsx
index d92b5e3..f52780b 100644
--- a/examples/js/applauncher/widget/Applauncher.tsx
+++ b/examples/js/applauncher/widget/Applauncher.tsx
@@ -27,13 +27,12 @@ function AppButton({ app }: { app: Apps.Application }) {
}
export default function Applauncher() {
+ const { CENTER } = Gtk.Align
const apps = new Apps.Apps()
- const list = Variable(apps.get_list().slice(0, MAX_ITEMS))
- const hide = () => App.get_window("launcher")!.hide()
- function search(text: string) {
- list.set(apps.fuzzy_query(text).slice(0, MAX_ITEMS))
- }
+ const text = Variable("")
+ const list = text(text => apps.fuzzy_query(text).slice(0, MAX_ITEMS))
+ const hide = () => App.get_window("launcher")!.hide()
return <window
name="launcher"
@@ -41,7 +40,7 @@ export default function Applauncher() {
exclusivity={Astal.Exclusivity.IGNORE}
keymode={Astal.Keymode.ON_DEMAND}
application={App}
- onShow={() => list.set(apps.get_list().slice(0, MAX_ITEMS))}
+ onShow={() => text.set("")}
onKeyPressEvent={function (self, event: Gdk.Event) {
if (event.get_keyval()[1] === Gdk.KEY_Escape)
self.hide()
@@ -53,16 +52,21 @@ export default function Applauncher() {
<box widthRequest={500} className="Applauncher" vertical>
<entry
placeholderText="Search"
- onChanged={({ text }) => search(text)}
+ text={text()}
+ onChanged={self => text.set(self.text)}
/>
<box spacing={6} vertical>
- {list(list => list.map(app => (
+ {list.as(list => list.map(app => (
<AppButton app={app} />
)))}
</box>
- <box visible={list(l => l.length === 0)}>
+ <box
+ halign={CENTER}
+ className="not-found"
+ vertical
+ visible={list.as(l => l.length === 0)}>
<icon icon="system-search-symbolic" />
- No match found
+ <label label="No match found" />
</box>
</box>
<eventbox expand onClick={hide} />