feat(qt): Settings sub-nav regrouped under an Advanced fold, with new glyphs

Audio, Playback, Appearance, Navigation, Local Library, Offline,
Integrations and Updates stay in the column; Blacklist, Storage,
Import / Export, Developer (and Orbit while enabled) move under an ADVANCED
disclosure row with a chevron. The fold is not persisted: it opens itself
whenever the current section lives inside it, and reads as active while
closed over the selected page. Appearance takes lucide's
paintbrush-vertical, Integrations unplug and Storage database — baked into
every tint and registered as masters. The kiosk selector follows the same
order, flattened. "Share logs" stays pinned at the bottom.

cc
This commit is contained in:
vicrodh committed 2026-09-13 10:26:34 -06:00
1 parent 198fbfc6fe
commit e8351e57ba
28 files changed
+438 -48

No files matched your search

@@ -0,0 +1,15 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="#4285f4"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<ellipse cx="12" cy="5" rx="9" ry="3" />
<path d="M3 5V19A9 3 0 0 0 21 19V5" />
<path d="M3 12A9 3 0 0 0 21 12" />
</svg>

After

Width:  |  Height:  |  Size: 324 B

@@ -0,0 +1,16 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="#4285f4"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M10 2v2" />
<path d="M14 2v4" />
<path d="M17 2a1 1 0 0 1 1 1v9H6V3a1 1 0 0 1 1-1z" />
<path d="M6 12a1 1 0 0 0-1 1v1a2 2 0 0 0 2 2h2a1 1 0 0 1 1 1v2.9a2 2 0 1 0 4 0V17a1 1 0 0 1 1-1h2a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1" />
</svg>

After

Width:  |  Height:  |  Size: 440 B

@@ -0,0 +1,18 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="#4285f4"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="m19 5 3-3" />
<path d="m2 22 3-3" />
<path d="M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z" />
<path d="M7.5 13.5 10 11" />
<path d="M10.5 16.5 13 14" />
<path d="m12 6 6 6 2.3-2.3a2.4 2.4 0 0 0 0-3.4l-2.6-2.6a2.4 2.4 0 0 0-3.4 0Z" />
</svg>

After

Width:  |  Height:  |  Size: 484 B

@@ -0,0 +1,15 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="#000000"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<ellipse cx="12" cy="5" rx="9" ry="3" />
<path d="M3 5V19A9 3 0 0 0 21 19V5" />
<path d="M3 12A9 3 0 0 0 21 12" />
</svg>

After

Width:  |  Height:  |  Size: 324 B

@@ -0,0 +1,16 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="#000000"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M10 2v2" />
<path d="M14 2v4" />
<path d="M17 2a1 1 0 0 1 1 1v9H6V3a1 1 0 0 1 1-1z" />
<path d="M6 12a1 1 0 0 0-1 1v1a2 2 0 0 0 2 2h2a1 1 0 0 1 1 1v2.9a2 2 0 1 0 4 0V17a1 1 0 0 1 1-1h2a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1" />
</svg>

After

Width:  |  Height:  |  Size: 440 B

@@ -0,0 +1,18 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="#000000"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="m19 5 3-3" />
<path d="m2 22 3-3" />
<path d="M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z" />
<path d="M7.5 13.5 10 11" />
<path d="M10.5 16.5 13 14" />
<path d="m12 6 6 6 2.3-2.3a2.4 2.4 0 0 0 0-3.4l-2.6-2.6a2.4 2.4 0 0 0-3.4 0Z" />
</svg>

After

Width:  |  Height:  |  Size: 484 B

@@ -0,0 +1,15 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="#888888"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<ellipse cx="12" cy="5" rx="9" ry="3" />
<path d="M3 5V19A9 3 0 0 0 21 19V5" />
<path d="M3 12A9 3 0 0 0 21 12" />
</svg>

After

Width:  |  Height:  |  Size: 324 B

@@ -0,0 +1,16 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="#888888"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M10 2v2" />
<path d="M14 2v4" />
<path d="M17 2a1 1 0 0 1 1 1v9H6V3a1 1 0 0 1 1-1z" />
<path d="M6 12a1 1 0 0 0-1 1v1a2 2 0 0 0 2 2h2a1 1 0 0 1 1 1v2.9a2 2 0 1 0 4 0V17a1 1 0 0 1 1-1h2a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1" />
</svg>

After

Width:  |  Height:  |  Size: 440 B

@@ -0,0 +1,18 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="#888888"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="m19 5 3-3" />
<path d="m2 22 3-3" />
<path d="M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z" />
<path d="M7.5 13.5 10 11" />
<path d="M10.5 16.5 13 14" />
<path d="m12 6 6 6 2.3-2.3a2.4 2.4 0 0 0 0-3.4l-2.6-2.6a2.4 2.4 0 0 0-3.4 0Z" />
</svg>

After

Width:  |  Height:  |  Size: 484 B

@@ -0,0 +1,15 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="#ffffff"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<ellipse cx="12" cy="5" rx="9" ry="3" />
<path d="M3 5V19A9 3 0 0 0 21 19V5" />
<path d="M3 12A9 3 0 0 0 21 12" />
</svg>

After

Width:  |  Height:  |  Size: 324 B

@@ -0,0 +1,16 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="#ffffff"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M10 2v2" />
<path d="M14 2v4" />
<path d="M17 2a1 1 0 0 1 1 1v9H6V3a1 1 0 0 1 1-1z" />
<path d="M6 12a1 1 0 0 0-1 1v1a2 2 0 0 0 2 2h2a1 1 0 0 1 1 1v2.9a2 2 0 1 0 4 0V17a1 1 0 0 1 1-1h2a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1" />
</svg>

After

Width:  |  Height:  |  Size: 440 B

@@ -0,0 +1,18 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="#ffffff"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="m19 5 3-3" />
<path d="m2 22 3-3" />
<path d="M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z" />
<path d="M7.5 13.5 10 11" />
<path d="M10.5 16.5 13 14" />
<path d="m12 6 6 6 2.3-2.3a2.4 2.4 0 0 0 0-3.4l-2.6-2.6a2.4 2.4 0 0 0-3.4 0Z" />
</svg>

After

Width:  |  Height:  |  Size: 484 B

@@ -0,0 +1,15 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="#cccccc"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<ellipse cx="12" cy="5" rx="9" ry="3" />
<path d="M3 5V19A9 3 0 0 0 21 19V5" />
<path d="M3 12A9 3 0 0 0 21 12" />
</svg>

After

Width:  |  Height:  |  Size: 324 B

@@ -0,0 +1,16 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="#cccccc"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M10 2v2" />
<path d="M14 2v4" />
<path d="M17 2a1 1 0 0 1 1 1v9H6V3a1 1 0 0 1 1-1z" />
<path d="M6 12a1 1 0 0 0-1 1v1a2 2 0 0 0 2 2h2a1 1 0 0 1 1 1v2.9a2 2 0 1 0 4 0V17a1 1 0 0 1 1-1h2a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1" />
</svg>

After

Width:  |  Height:  |  Size: 440 B

@@ -0,0 +1,18 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="#cccccc"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="m19 5 3-3" />
<path d="m2 22 3-3" />
<path d="M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z" />
<path d="M7.5 13.5 10 11" />
<path d="M10.5 16.5 13 14" />
<path d="m12 6 6 6 2.3-2.3a2.4 2.4 0 0 0 0-3.4l-2.6-2.6a2.4 2.4 0 0 0-3.4 0Z" />
</svg>

After

Width:  |  Height:  |  Size: 484 B

@@ -0,0 +1,15 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="#fbbf24"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<ellipse cx="12" cy="5" rx="9" ry="3" />
<path d="M3 5V19A9 3 0 0 0 21 19V5" />
<path d="M3 12A9 3 0 0 0 21 12" />
</svg>

After

Width:  |  Height:  |  Size: 324 B

@@ -0,0 +1,16 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="#fbbf24"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M10 2v2" />
<path d="M14 2v4" />
<path d="M17 2a1 1 0 0 1 1 1v9H6V3a1 1 0 0 1 1-1z" />
<path d="M6 12a1 1 0 0 0-1 1v1a2 2 0 0 0 2 2h2a1 1 0 0 1 1 1v2.9a2 2 0 1 0 4 0V17a1 1 0 0 1 1-1h2a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1" />
</svg>

After

Width:  |  Height:  |  Size: 440 B

@@ -0,0 +1,18 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="#fbbf24"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="m19 5 3-3" />
<path d="m2 22 3-3" />
<path d="M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z" />
<path d="M7.5 13.5 10 11" />
<path d="M10.5 16.5 13 14" />
<path d="m12 6 6 6 2.3-2.3a2.4 2.4 0 0 0 0-3.4l-2.6-2.6a2.4 2.4 0 0 0-3.4 0Z" />
</svg>

After

Width:  |  Height:  |  Size: 484 B

+109 -48
View File
@@ -9,17 +9,22 @@
// 1 Playback -> PlaybackSettings.qml
// 2 Appearance -> AppearanceSettings.qml
// 3 Offline -> OfflineSettings.qml
// 13 Storage -> StorageSettings.qml (artwork, lyrics and Plex
// caches; shown right after Offline)
// 13 Storage -> StorageSettings.qml (artwork, lyrics and Plex caches)
// 4 Local Library -> LocalLibrarySettings.qml (+ PlexSettings.qml)
// 5 Blacklist -> BlacklistSettings.qml
// 6 Integrations -> IntegrationsSettings.qml
// 7 Developer -> DeveloperSettings.qml
// 8 Flatpak/Snap -> SandboxSettings.qml (only on a sandboxed install)
// 9 Import/Export -> ImportExportSettings.qml (shown between
// Integrations and Developer; index 9 keeps the
// 9 Import/Export -> ImportExportSettings.qml (index 9 keeps the
// persisted section numbers of 0-8 stable)
//
// The sub-nav ORDER (2026-09-13) is not the index order: Audio, Playback,
// Appearance, Navigation, Local Library, Offline, Integrations, Updates,
// [Flatpak/Snap], then an ADVANCED fold (`advancedOpen`) holding Blacklist,
// Storage, Import / Export, Developer and Orbit. The fold opens itself when
// the current section lives inside it; "Share logs" stays pinned at the
// bottom of the column.
//
// All state is ONE JSON document (QbzBridge.settingsJson, settings_qt.rs
// SettingsDoc). Controls never keep local truth: they call the
// settingsBool/Select/Slider/String invokables, Rust persists + applies +
@@ -68,22 +73,36 @@ Item {
// assignment destroys the binding it lands on, so a single surviving
// `root.section = n` would work once and then re-introduce the bug one
// navigation later, in a way that looks fixed under casual testing.
// Same order as the desktop column; the fold is flattened here because
// the kiosk selector is one list.
readonly property var kioskSections: [
{ label: QbzSession.tr("Audio", QbzSession.trRev), section: 0 },
{ label: QbzSession.tr("Playback", QbzSession.trRev), section: 1 },
{ label: QbzSession.tr("Appearance", QbzSession.trRev), section: 2 },
{ label: QbzSession.tr("Navigation", QbzSession.trRev), section: 10 },
{ label: QbzSession.tr("Offline", QbzSession.trRev), section: 3 },
{ label: QbzSession.tr("Storage", QbzSession.trRev), section: 13 },
{ label: QbzSession.tr("Local Library", QbzSession.trRev), section: 4 },
{ label: QbzSession.tr("Blacklist", QbzSession.trRev), section: 5 },
{ label: QbzSession.tr("Offline", QbzSession.trRev), section: 3 },
{ label: QbzSession.tr("Integrations", QbzSession.trRev), section: 6 },
{ label: QbzSession.tr("Import / Export", QbzSession.trRev), section: 9 },
{ label: QbzSession.tr("Updates", QbzSession.trRev), section: 12 },
{ label: QbzSession.tr("Blacklist", QbzSession.trRev), section: 5 },
{ label: QbzSession.tr("Storage", QbzSession.trRev), section: 13 },
{ label: QbzSession.tr("Import / Export", QbzSession.trRev), section: 9 },
{ label: QbzSession.tr("Developer", QbzSession.trRev), section: 7 }
].concat(QbzOrbit.enabled ? [{ label: "Orbit", section: 11 }] : []).concat(root.sandboxed ? [{ label: (doc.dev || ({})).installMethod === "snap"
? QbzSession.tr("Snap", QbzSession.trRev) : QbzSession.tr("Flatpak", QbzSession.trRev), section: 8 }] : [])
readonly property int section: QbzBridge.settingsSection === 11 && !QbzOrbit.enabled ? 0 : QbzBridge.settingsSection
/// The ADVANCED fold of the desktop sub-nav (Blacklist, Storage,
/// Import / Export, Developer, Orbit). Not persisted on purpose: it opens
/// itself whenever the current section lives inside it, so a restored or
/// programmatic selection is never hidden behind a closed fold, and it
/// stays open once opened until the next launch.
readonly property var advancedSections: [5, 13, 9, 7, 11]
property bool advancedOpen: false
function revealAdvanced() {
if (root.advancedSections.indexOf(root.section) >= 0)
root.advancedOpen = true
}
onSectionChanged: revealAdvanced()
readonly property bool migrationRunning:
(doc.importExport || ({})).migrationRunning === true
@@ -99,7 +118,10 @@ Item {
root.doc = ({})
}
}
Component.onCompleted: reload()
Component.onCompleted: {
reload()
revealAdvanced()
}
Connections {
target: QbzBridge
function onSettingsJsonChanged() { root.reload() }
@@ -164,6 +186,10 @@ Item {
property string name: ""
property string label: ""
property bool active: false
/// Extra left inset for the rows inside the ADVANCED fold.
property int indent: 0
/// Optional right-aligned glyph — the fold's chevron.
property string trailing: ""
signal clicked()
width: parent ? parent.width : 0
@@ -189,8 +215,8 @@ Item {
}
Row {
anchors.fill: parent
anchors.leftMargin: 12
anchors.rightMargin: 12
anchors.leftMargin: 12 + parent.indent
anchors.rightMargin: parent.trailing !== "" ? 36 : 12
spacing: 10
QbzIcon {
name: parent.parent.name
@@ -212,6 +238,21 @@ Item {
verticalAlignment: Text.AlignVCenter
}
}
Loader {
active: parent.trailing !== ""
anchors.right: parent.right
anchors.rightMargin: 12
anchors.verticalCenter: parent.verticalCenter
width: 16
height: 16
sourceComponent: QbzIcon {
name: snTrailingHost.trailing
width: 16
height: 16
tintName: "secondary"
}
readonly property Item snTrailingHost: parent
}
MouseArea {
id: snArea
anchors.fill: parent
@@ -244,7 +285,7 @@ Item {
onClicked: QbzBridge.settingsSetSection(1)
}
SubNavItem {
name: "layers"
name: "paintbrush-vertical"
label: QbzSession.tr("Appearance", QbzSession.trRev)
active: root.section === 2
onClicked: QbzBridge.settingsSetSection(2)
@@ -255,18 +296,6 @@ Item {
active: root.section === 10
onClicked: QbzBridge.settingsSetSection(10)
}
SubNavItem {
name: "cloud-download"
label: QbzSession.tr("Offline", QbzSession.trRev)
active: root.section === 3
onClicked: QbzBridge.settingsSetSection(3)
}
SubNavItem {
name: "folder"
label: QbzSession.tr("Storage", QbzSession.trRev)
active: root.section === 13
onClicked: QbzBridge.settingsSetSection(13)
}
SubNavItem {
name: "hard-drive"
label: QbzSession.tr("Local Library", QbzSession.trRev)
@@ -274,42 +303,23 @@ Item {
onClicked: QbzBridge.settingsSetSection(4)
}
SubNavItem {
name: "blind-eye"
label: QbzSession.tr("Blacklist", QbzSession.trRev)
active: root.section === 5
onClicked: QbzBridge.settingsSetSection(5)
name: "cloud-download"
label: QbzSession.tr("Offline", QbzSession.trRev)
active: root.section === 3
onClicked: QbzBridge.settingsSetSection(3)
}
SubNavItem {
name: "refresh-cw"
name: "unplug"
label: QbzSession.tr("Integrations", QbzSession.trRev)
active: root.section === 6
onClicked: QbzBridge.settingsSetSection(6)
}
SubNavItem {
name: "import"
label: QbzSession.tr("Import / Export", QbzSession.trRev)
active: root.section === 9
onClicked: QbzBridge.settingsSetSection(9)
}
SubNavItem {
name: "refresh-cw"
label: QbzSession.tr("Updates", QbzSession.trRev)
active: root.section === 12
onClicked: QbzBridge.settingsSetSection(12)
}
SubNavItem {
name: "bug"
label: QbzSession.tr("Developer", QbzSession.trRev)
active: root.section === 7
onClicked: QbzBridge.settingsSetSection(7)
}
SubNavItem {
visible: QbzOrbit.enabled
name: "compass"
label: "Orbit"
active: root.section === 11
onClicked: QbzBridge.settingsSetSection(11)
}
// Sandboxed installs only (Flatpak / Snap permissions).
SubNavItem {
visible: root.sandboxed
@@ -320,6 +330,57 @@ Item {
active: root.section === 8
onClicked: QbzBridge.settingsSetSection(8)
}
// The ADVANCED fold: a disclosure row, not a section. It
// reads as active while it is closed over the selected
// page, so the column never shows nothing selected.
SubNavItem {
name: "sliders-horizontal"
trailing: root.advancedOpen ? "chevron-down" : "chevron-right"
label: QbzSession.tr("Advanced", QbzSession.trRev)
active: !root.advancedOpen && root.advancedSections.indexOf(root.section) >= 0
onClicked: root.advancedOpen = !root.advancedOpen
}
SubNavItem {
visible: root.advancedOpen
indent: 16
name: "blind-eye"
label: QbzSession.tr("Blacklist", QbzSession.trRev)
active: root.section === 5
onClicked: QbzBridge.settingsSetSection(5)
}
SubNavItem {
visible: root.advancedOpen
indent: 16
name: "database"
label: QbzSession.tr("Storage", QbzSession.trRev)
active: root.section === 13
onClicked: QbzBridge.settingsSetSection(13)
}
SubNavItem {
visible: root.advancedOpen
indent: 16
name: "import"
label: QbzSession.tr("Import / Export", QbzSession.trRev)
active: root.section === 9
onClicked: QbzBridge.settingsSetSection(9)
}
SubNavItem {
visible: root.advancedOpen
indent: 16
name: "bug"
label: QbzSession.tr("Developer", QbzSession.trRev)
active: root.section === 7
onClicked: QbzBridge.settingsSetSection(7)
}
SubNavItem {
visible: root.advancedOpen && QbzOrbit.enabled
indent: 16
name: "compass"
label: "Orbit"
active: root.section === 11
onClicked: QbzBridge.settingsSetSection(11)
}
}
// Always-visible log affordance, pinned to the bottom of the
+3
View File
@@ -183,6 +183,7 @@ const MASTERS: &[(&str, &str)] = &[
("cloud-upload", include_str!("../qml/assets/icons/primary/cloud-upload.svg")),
("compass", include_str!("../qml/assets/icons/primary/compass.svg")),
("copy", include_str!("../qml/assets/icons/primary/copy.svg")),
("database", include_str!("../qml/assets/icons/primary/database.svg")),
("disc-3", include_str!("../qml/assets/icons/primary/disc-3.svg")),
("disc", include_str!("../qml/assets/icons/primary/disc.svg")),
("disc-folder", include_str!("../qml/assets/icons/primary/disc-folder.svg")),
@@ -252,6 +253,7 @@ const MASTERS: &[(&str, &str)] = &[
("music-note-slider", include_str!("../qml/assets/icons/primary/music-note-slider.svg")),
("music", include_str!("../qml/assets/icons/primary/music.svg")),
("network", include_str!("../qml/assets/icons/primary/network.svg")),
("paintbrush-vertical", include_str!("../qml/assets/icons/primary/paintbrush-vertical.svg")),
("panel-left", include_str!("../qml/assets/icons/primary/panel-left.svg")),
("panel-right-close", include_str!("../qml/assets/icons/primary/panel-right-close.svg")),
("panel-right-open", include_str!("../qml/assets/icons/primary/panel-right-open.svg")),
@@ -308,6 +310,7 @@ const MASTERS: &[(&str, &str)] = &[
("trash-list", include_str!("../qml/assets/icons/primary/trash-list.svg")),
("triangle-alert", include_str!("../qml/assets/icons/primary/triangle-alert.svg")),
("turntable", include_str!("../qml/assets/icons/primary/turntable.svg")),
("unplug", include_str!("../qml/assets/icons/primary/unplug.svg")),
("user-plus", include_str!("../qml/assets/icons/primary/user-plus.svg")),
("user", include_str!("../qml/assets/icons/primary/user.svg")),
("volume-2", include_str!("../qml/assets/icons/primary/volume-2.svg")),