From 636b3e8a066401e3a6daa12f41556580faa63038 Mon Sep 17 00:00:00 2001
From: vicrodh <103399283+vicrodh@users.noreply.github.com>
Date: Mon, 18 May 2026 14:58:58 -0600
Subject: [PATCH] feat(qbz-slint): add the Lucide icon set
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Adds 28 Lucide icons (the same set the QBZ Svelte app uses) as SVGs
under ui/assets/icons/, plus a QbzIcon primitive — an Image wrapper that
applies `colorize` so a monochrome SVG renders in any theme color.
cc
---
crates/qbz-slint/ui/assets/icons/arrow-left.svg | 4 ++++
crates/qbz-slint/ui/assets/icons/book-open.svg | 4 ++++
crates/qbz-slint/ui/assets/icons/bug.svg | 13 +++++++++++++
crates/qbz-slint/ui/assets/icons/cast.svg | 6 ++++++
crates/qbz-slint/ui/assets/icons/check.svg | 3 +++
crates/qbz-slint/ui/assets/icons/chevron-left.svg | 3 +++
crates/qbz-slint/ui/assets/icons/chevron-right.svg | 3 +++
crates/qbz-slint/ui/assets/icons/ellipsis.svg | 5 +++++
crates/qbz-slint/ui/assets/icons/heart.svg | 3 +++
crates/qbz-slint/ui/assets/icons/info.svg | 5 +++++
crates/qbz-slint/ui/assets/icons/keyboard.svg | 11 +++++++++++
crates/qbz-slint/ui/assets/icons/list-filter.svg | 5 +++++
crates/qbz-slint/ui/assets/icons/log-out.svg | 5 +++++
crates/qbz-slint/ui/assets/icons/maximize-2.svg | 6 ++++++
crates/qbz-slint/ui/assets/icons/menu.svg | 5 +++++
crates/qbz-slint/ui/assets/icons/minimize-2.svg | 6 ++++++
crates/qbz-slint/ui/assets/icons/pause.svg | 4 ++++
crates/qbz-slint/ui/assets/icons/play.svg | 3 +++
crates/qbz-slint/ui/assets/icons/plus.svg | 4 ++++
crates/qbz-slint/ui/assets/icons/repeat-1.svg | 7 +++++++
crates/qbz-slint/ui/assets/icons/repeat.svg | 6 ++++++
crates/qbz-slint/ui/assets/icons/search.svg | 4 ++++
crates/qbz-slint/ui/assets/icons/settings.svg | 4 ++++
crates/qbz-slint/ui/assets/icons/shuffle.svg | 7 +++++++
crates/qbz-slint/ui/assets/icons/skip-back.svg | 4 ++++
crates/qbz-slint/ui/assets/icons/skip-forward.svg | 4 ++++
crates/qbz-slint/ui/assets/icons/volume-2.svg | 5 +++++
crates/qbz-slint/ui/assets/icons/x.svg | 4 ++++
crates/qbz-slint/ui/primitives/QbzIcon.slint | 14 ++++++++++++++
29 files changed, 157 insertions(+)
create mode 100644 crates/qbz-slint/ui/assets/icons/arrow-left.svg
create mode 100644 crates/qbz-slint/ui/assets/icons/book-open.svg
create mode 100644 crates/qbz-slint/ui/assets/icons/bug.svg
create mode 100644 crates/qbz-slint/ui/assets/icons/cast.svg
create mode 100644 crates/qbz-slint/ui/assets/icons/check.svg
create mode 100644 crates/qbz-slint/ui/assets/icons/chevron-left.svg
create mode 100644 crates/qbz-slint/ui/assets/icons/chevron-right.svg
create mode 100644 crates/qbz-slint/ui/assets/icons/ellipsis.svg
create mode 100644 crates/qbz-slint/ui/assets/icons/heart.svg
create mode 100644 crates/qbz-slint/ui/assets/icons/info.svg
create mode 100644 crates/qbz-slint/ui/assets/icons/keyboard.svg
create mode 100644 crates/qbz-slint/ui/assets/icons/list-filter.svg
create mode 100644 crates/qbz-slint/ui/assets/icons/log-out.svg
create mode 100644 crates/qbz-slint/ui/assets/icons/maximize-2.svg
create mode 100644 crates/qbz-slint/ui/assets/icons/menu.svg
create mode 100644 crates/qbz-slint/ui/assets/icons/minimize-2.svg
create mode 100644 crates/qbz-slint/ui/assets/icons/pause.svg
create mode 100644 crates/qbz-slint/ui/assets/icons/play.svg
create mode 100644 crates/qbz-slint/ui/assets/icons/plus.svg
create mode 100644 crates/qbz-slint/ui/assets/icons/repeat-1.svg
create mode 100644 crates/qbz-slint/ui/assets/icons/repeat.svg
create mode 100644 crates/qbz-slint/ui/assets/icons/search.svg
create mode 100644 crates/qbz-slint/ui/assets/icons/settings.svg
create mode 100644 crates/qbz-slint/ui/assets/icons/shuffle.svg
create mode 100644 crates/qbz-slint/ui/assets/icons/skip-back.svg
create mode 100644 crates/qbz-slint/ui/assets/icons/skip-forward.svg
create mode 100644 crates/qbz-slint/ui/assets/icons/volume-2.svg
create mode 100644 crates/qbz-slint/ui/assets/icons/x.svg
create mode 100644 crates/qbz-slint/ui/primitives/QbzIcon.slint
diff --git a/crates/qbz-slint/ui/assets/icons/arrow-left.svg b/crates/qbz-slint/ui/assets/icons/arrow-left.svg
new file mode 100644
index 000000000..9f150d689
--- /dev/null
+++ b/crates/qbz-slint/ui/assets/icons/arrow-left.svg
@@ -0,0 +1,4 @@
+
diff --git a/crates/qbz-slint/ui/assets/icons/book-open.svg b/crates/qbz-slint/ui/assets/icons/book-open.svg
new file mode 100644
index 000000000..74a2b9a84
--- /dev/null
+++ b/crates/qbz-slint/ui/assets/icons/book-open.svg
@@ -0,0 +1,4 @@
+
diff --git a/crates/qbz-slint/ui/assets/icons/bug.svg b/crates/qbz-slint/ui/assets/icons/bug.svg
new file mode 100644
index 000000000..db2b46047
--- /dev/null
+++ b/crates/qbz-slint/ui/assets/icons/bug.svg
@@ -0,0 +1,13 @@
+
diff --git a/crates/qbz-slint/ui/assets/icons/cast.svg b/crates/qbz-slint/ui/assets/icons/cast.svg
new file mode 100644
index 000000000..1f364e5e5
--- /dev/null
+++ b/crates/qbz-slint/ui/assets/icons/cast.svg
@@ -0,0 +1,6 @@
+
diff --git a/crates/qbz-slint/ui/assets/icons/check.svg b/crates/qbz-slint/ui/assets/icons/check.svg
new file mode 100644
index 000000000..a5f899b7e
--- /dev/null
+++ b/crates/qbz-slint/ui/assets/icons/check.svg
@@ -0,0 +1,3 @@
+
diff --git a/crates/qbz-slint/ui/assets/icons/chevron-left.svg b/crates/qbz-slint/ui/assets/icons/chevron-left.svg
new file mode 100644
index 000000000..cebe22eb2
--- /dev/null
+++ b/crates/qbz-slint/ui/assets/icons/chevron-left.svg
@@ -0,0 +1,3 @@
+
diff --git a/crates/qbz-slint/ui/assets/icons/chevron-right.svg b/crates/qbz-slint/ui/assets/icons/chevron-right.svg
new file mode 100644
index 000000000..241d11d55
--- /dev/null
+++ b/crates/qbz-slint/ui/assets/icons/chevron-right.svg
@@ -0,0 +1,3 @@
+
diff --git a/crates/qbz-slint/ui/assets/icons/ellipsis.svg b/crates/qbz-slint/ui/assets/icons/ellipsis.svg
new file mode 100644
index 000000000..441d6cc0a
--- /dev/null
+++ b/crates/qbz-slint/ui/assets/icons/ellipsis.svg
@@ -0,0 +1,5 @@
+
diff --git a/crates/qbz-slint/ui/assets/icons/heart.svg b/crates/qbz-slint/ui/assets/icons/heart.svg
new file mode 100644
index 000000000..ae810a263
--- /dev/null
+++ b/crates/qbz-slint/ui/assets/icons/heart.svg
@@ -0,0 +1,3 @@
+
diff --git a/crates/qbz-slint/ui/assets/icons/info.svg b/crates/qbz-slint/ui/assets/icons/info.svg
new file mode 100644
index 000000000..461364582
--- /dev/null
+++ b/crates/qbz-slint/ui/assets/icons/info.svg
@@ -0,0 +1,5 @@
+
diff --git a/crates/qbz-slint/ui/assets/icons/keyboard.svg b/crates/qbz-slint/ui/assets/icons/keyboard.svg
new file mode 100644
index 000000000..aa1e2edd5
--- /dev/null
+++ b/crates/qbz-slint/ui/assets/icons/keyboard.svg
@@ -0,0 +1,11 @@
+
diff --git a/crates/qbz-slint/ui/assets/icons/list-filter.svg b/crates/qbz-slint/ui/assets/icons/list-filter.svg
new file mode 100644
index 000000000..71c7b0f4e
--- /dev/null
+++ b/crates/qbz-slint/ui/assets/icons/list-filter.svg
@@ -0,0 +1,5 @@
+
diff --git a/crates/qbz-slint/ui/assets/icons/log-out.svg b/crates/qbz-slint/ui/assets/icons/log-out.svg
new file mode 100644
index 000000000..24dd708a1
--- /dev/null
+++ b/crates/qbz-slint/ui/assets/icons/log-out.svg
@@ -0,0 +1,5 @@
+
diff --git a/crates/qbz-slint/ui/assets/icons/maximize-2.svg b/crates/qbz-slint/ui/assets/icons/maximize-2.svg
new file mode 100644
index 000000000..9c37cabf9
--- /dev/null
+++ b/crates/qbz-slint/ui/assets/icons/maximize-2.svg
@@ -0,0 +1,6 @@
+
diff --git a/crates/qbz-slint/ui/assets/icons/menu.svg b/crates/qbz-slint/ui/assets/icons/menu.svg
new file mode 100644
index 000000000..c343236cc
--- /dev/null
+++ b/crates/qbz-slint/ui/assets/icons/menu.svg
@@ -0,0 +1,5 @@
+
diff --git a/crates/qbz-slint/ui/assets/icons/minimize-2.svg b/crates/qbz-slint/ui/assets/icons/minimize-2.svg
new file mode 100644
index 000000000..fd47bb399
--- /dev/null
+++ b/crates/qbz-slint/ui/assets/icons/minimize-2.svg
@@ -0,0 +1,6 @@
+
diff --git a/crates/qbz-slint/ui/assets/icons/pause.svg b/crates/qbz-slint/ui/assets/icons/pause.svg
new file mode 100644
index 000000000..d7474dd2c
--- /dev/null
+++ b/crates/qbz-slint/ui/assets/icons/pause.svg
@@ -0,0 +1,4 @@
+
diff --git a/crates/qbz-slint/ui/assets/icons/play.svg b/crates/qbz-slint/ui/assets/icons/play.svg
new file mode 100644
index 000000000..403df1dda
--- /dev/null
+++ b/crates/qbz-slint/ui/assets/icons/play.svg
@@ -0,0 +1,3 @@
+
diff --git a/crates/qbz-slint/ui/assets/icons/plus.svg b/crates/qbz-slint/ui/assets/icons/plus.svg
new file mode 100644
index 000000000..8d7806007
--- /dev/null
+++ b/crates/qbz-slint/ui/assets/icons/plus.svg
@@ -0,0 +1,4 @@
+
diff --git a/crates/qbz-slint/ui/assets/icons/repeat-1.svg b/crates/qbz-slint/ui/assets/icons/repeat-1.svg
new file mode 100644
index 000000000..92ab7d019
--- /dev/null
+++ b/crates/qbz-slint/ui/assets/icons/repeat-1.svg
@@ -0,0 +1,7 @@
+
diff --git a/crates/qbz-slint/ui/assets/icons/repeat.svg b/crates/qbz-slint/ui/assets/icons/repeat.svg
new file mode 100644
index 000000000..93ed4dc7a
--- /dev/null
+++ b/crates/qbz-slint/ui/assets/icons/repeat.svg
@@ -0,0 +1,6 @@
+
diff --git a/crates/qbz-slint/ui/assets/icons/search.svg b/crates/qbz-slint/ui/assets/icons/search.svg
new file mode 100644
index 000000000..73d54d42a
--- /dev/null
+++ b/crates/qbz-slint/ui/assets/icons/search.svg
@@ -0,0 +1,4 @@
+
diff --git a/crates/qbz-slint/ui/assets/icons/settings.svg b/crates/qbz-slint/ui/assets/icons/settings.svg
new file mode 100644
index 000000000..5f2931c4a
--- /dev/null
+++ b/crates/qbz-slint/ui/assets/icons/settings.svg
@@ -0,0 +1,4 @@
+
diff --git a/crates/qbz-slint/ui/assets/icons/shuffle.svg b/crates/qbz-slint/ui/assets/icons/shuffle.svg
new file mode 100644
index 000000000..7186daa23
--- /dev/null
+++ b/crates/qbz-slint/ui/assets/icons/shuffle.svg
@@ -0,0 +1,7 @@
+
diff --git a/crates/qbz-slint/ui/assets/icons/skip-back.svg b/crates/qbz-slint/ui/assets/icons/skip-back.svg
new file mode 100644
index 000000000..ce7489434
--- /dev/null
+++ b/crates/qbz-slint/ui/assets/icons/skip-back.svg
@@ -0,0 +1,4 @@
+
diff --git a/crates/qbz-slint/ui/assets/icons/skip-forward.svg b/crates/qbz-slint/ui/assets/icons/skip-forward.svg
new file mode 100644
index 000000000..490b9b89f
--- /dev/null
+++ b/crates/qbz-slint/ui/assets/icons/skip-forward.svg
@@ -0,0 +1,4 @@
+
diff --git a/crates/qbz-slint/ui/assets/icons/volume-2.svg b/crates/qbz-slint/ui/assets/icons/volume-2.svg
new file mode 100644
index 000000000..50a973b8a
--- /dev/null
+++ b/crates/qbz-slint/ui/assets/icons/volume-2.svg
@@ -0,0 +1,5 @@
+
diff --git a/crates/qbz-slint/ui/assets/icons/x.svg b/crates/qbz-slint/ui/assets/icons/x.svg
new file mode 100644
index 000000000..52576d2ce
--- /dev/null
+++ b/crates/qbz-slint/ui/assets/icons/x.svg
@@ -0,0 +1,4 @@
+
diff --git a/crates/qbz-slint/ui/primitives/QbzIcon.slint b/crates/qbz-slint/ui/primitives/QbzIcon.slint
new file mode 100644
index 000000000..6a84ea062
--- /dev/null
+++ b/crates/qbz-slint/ui/primitives/QbzIcon.slint
@@ -0,0 +1,14 @@
+// Monochrome Lucide icon.
+//
+// Slint's `@image-url` needs a literal path, so the caller supplies the
+// `source` (an `@image-url` of an SVG in ui/assets/icons/) and a `tint`
+// theme color; QbzIcon applies `colorize` and a contain fit.
+
+import { Theme } from "../foundation/semantic-colors.slint";
+
+export component QbzIcon inherits Image {
+ in property tint: Theme.text-secondary;
+
+ colorize: root.tint;
+ image-fit: contain;
+}