feat(nosignal): finish Nerd Font icon remap — core surfaces

Convert remaining reachable surfaces to NsIcon (launcher, utilities, windowinfo,
sidebar, dashboard, notification toast, shared controls IconTextButton/Menu/
SplitButton/ToggleButton/CollapsibleSection/CustomSpinBox, CoverArt). Handles
the `sourceComponent: MaterialIcon {` form and icon-via-alias controls.

- IconTextButton: alias -> plain `icon` property + bound NsIcon (cross-file alias
  to a custom property was rejected).
- Reverted IconButton `font:` (the controls-wide font->fontStyle sweep wrongly
  hit ButtonBase, which uses font not fontStyle).
- Glyphs map: +31 names (dashboard/utilities/launcher leftovers) — no "?" glyphs.

Old collapsed bar + old lock sub-components left as-is (unused, never render).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
28allday 2026-06-14 12:59:28 +01:00
parent c4738ae974
commit 83c6b62c13
42 changed files with 159 additions and 126 deletions

View file

@ -12,10 +12,10 @@ ColumnLayout {
spacing: Tokens.spacing.medium
Layout.alignment: Qt.AlignHCenter
MaterialIcon {
NsIcon {
Layout.alignment: Qt.AlignHCenter
animate: true
text: root.icon
icon: root.icon
fontStyle: Tokens.font.icon.builders.extraLarge.scale(3).weight(Font.Bold).build()
}

View file

@ -45,8 +45,8 @@ ColumnLayout {
Layout.fillWidth: true
}
MaterialIcon {
text: "expand_more"
NsIcon {
icon: "expand_more"
rotation: root.expanded ? 180 : 0
color: Colours.palette.m3onSurfaceVariant
fontStyle: Tokens.font.icon.medium

View file

@ -110,11 +110,11 @@ RowLayout {
}
}
MaterialIcon {
NsIcon {
id: upIcon
anchors.centerIn: parent
text: "keyboard_arrow_up"
icon: "keyboard_arrow_up"
color: Colours.palette.m3onPrimary
}
}
@ -145,11 +145,11 @@ RowLayout {
onReleased: timer.stop()
}
MaterialIcon {
NsIcon {
id: downIcon
anchors.centerIn: parent
text: "keyboard_arrow_down"
icon: "keyboard_arrow_down"
color: Colours.palette.m3onPrimary
}
}

View file

@ -7,7 +7,7 @@ import qs.services
ButtonBase {
id: root
property alias icon: iconLabel.text
property string icon
property alias text: label.text
readonly property alias iconLabel: iconLabel
@ -44,9 +44,10 @@ ButtonBase {
anchors.centerIn: parent
spacing: Tokens.spacing.small
MaterialIcon {
NsIcon {
id: iconLabel
icon: root.icon
Layout.alignment: Qt.AlignVCenter
Layout.topMargin: Math.round(fontInfo.pointSize * 0.0575)
color: root.onColour

View file

@ -157,9 +157,9 @@ MouseArea {
anchors.margins: Tokens.padding.medium
spacing: Tokens.spacing.small
MaterialIcon {
NsIcon {
Layout.alignment: Qt.AlignVCenter
text: item.modelData?.icon ?? ""
icon: item.modelData?.icon ?? ""
color: item.active ? Colours.palette.m3onTertiaryContainer : Colours.palette.m3onSurfaceVariant
}
@ -176,8 +176,8 @@ MouseArea {
active: item.modelData?.trailingIcon.length > 0
visible: active
sourceComponent: MaterialIcon {
text: item.modelData.trailingIcon
sourceComponent: NsIcon {
icon: item.modelData.trailingIcon
color: item.active ? Colours.palette.m3onTertiaryContainer : Colours.palette.m3onSurfaceVariant
}
}

View file

@ -64,12 +64,12 @@ Row {
anchors.horizontalCenterOffset: Math.floor(root.verticalPadding / 4)
spacing: Tokens.spacing.small
MaterialIcon {
NsIcon {
id: iconLabel
Layout.alignment: Qt.AlignVCenter
animate: true
text: root.active?.activeIcon ?? root.fallbackIcon
icon: root.active?.activeIcon ?? root.fallbackIcon
color: root.disabled ? root.disabledTextColour : root.textColour
fill: 1
}
@ -116,13 +116,13 @@ Row {
onClicked: root.expanded = !root.expanded
}
MaterialIcon {
NsIcon {
id: expandIcon
anchors.centerIn: parent
anchors.horizontalCenterOffset: root.expanded ? 0 : -Math.floor(root.verticalPadding / 4)
text: "expand_more"
icon: "expand_more"
color: root.disabled ? root.disabledTextColour : root.textColour
rotation: root.expanded ? 180 : 0

View file

@ -54,12 +54,12 @@ StyledRect {
anchors.centerIn: parent
spacing: Tokens.spacing.medium
MaterialIcon {
NsIcon {
id: toggleBtnIcon
visible: !!text
fill: root.toggled ? 1 : 0
text: root.icon
icon: root.icon
color: root.toggled ? Colours.palette[`m3on${root.accent}`] : Colours.palette[`m3on${root.accent}Container`]
fontStyle: Tokens.font.icon.size(root.iconSize).build()

View file

@ -57,11 +57,11 @@ Item {
}
}
MaterialIcon {
NsIcon {
anchors.centerIn: parent
grade: 200
text: image.status === Image.Error ? "broken_image" : "art_track"
icon: image.status === Image.Error ? "broken_image" : "art_track"
color: Colours.palette.m3onSurfaceVariant
fontStyle: Tokens.font.icon.size((parent.width * 0.35) || 1).build()
opacity: image.status === Image.Null || image.status === Image.Error ? 1 : 0

View file

@ -102,11 +102,11 @@ Item {
CAnim {}
}
MaterialIcon {
NsIcon {
id: icon
anchors.centerIn: parent
text: "queue_music"
icon: "queue_music"
fontStyle: Tokens.font.icon.builders.large.scale(2).build()
color: Colours.palette.m3onPrimaryContainer
}

View file

@ -23,9 +23,9 @@ Item {
sourceComponent: ColumnLayout {
spacing: Tokens.spacing.medium
MaterialIcon {
NsIcon {
Layout.alignment: Qt.AlignHCenter
text: "tune"
icon: "tune"
fontStyle: Tokens.font.icon.builders.extraLarge.scale(2).build()
color: Colours.palette.m3onSurfaceVariant
}

View file

@ -153,13 +153,13 @@ Item {
onClicked: root.dashState.currentTab = tab.TabBar.index
}
MaterialIcon {
NsIcon {
id: icon
anchors.horizontalCenter: parent.horizontalCenter
anchors.bottom: label.top
text: tab.iconName
icon: tab.iconName
color: tab.current ? Colours.palette.m3primary : Colours.palette.m3onSurfaceVariant
fill: tab.current ? 1 : 0
fontStyle: Tokens.font.icon.medium

View file

@ -76,9 +76,9 @@ Item {
anchors.centerIn: parent
spacing: Tokens.spacing.largeIncreased
MaterialIcon {
NsIcon {
Layout.alignment: Qt.AlignVCenter
text: Weather.icon
icon: Weather.icon
fontStyle: Tokens.font.icon.builders.extraLarge.scale(3).build()
color: Colours.palette.m3secondary
animate: true
@ -180,9 +180,9 @@ Item {
color: Colours.palette.m3onSurfaceVariant
}
MaterialIcon {
NsIcon {
Layout.alignment: Qt.AlignHCenter
text: forecastItem.modelData.icon
icon: forecastItem.modelData.icon
fontStyle: Tokens.font.icon.extraLarge
color: Colours.palette.m3secondary
}
@ -216,8 +216,8 @@ Item {
anchors.centerIn: parent
spacing: Tokens.spacing.medium
MaterialIcon {
text: detailRoot.icon
NsIcon {
icon: detailRoot.icon
color: detailRoot.colour
fontStyle: Tokens.font.icon.large
anchors.verticalCenter: parent.verticalCenter
@ -252,8 +252,8 @@ Item {
spacing: Tokens.spacing.small
MaterialIcon {
text: weatherStat.icon
NsIcon {
icon: weatherStat.icon
fontStyle: Tokens.font.icon.extraLarge
color: weatherStat.colour
}

View file

@ -65,10 +65,10 @@ Item {
Anim {}
}
MaterialIcon {
NsIcon {
anchors.centerIn: parent
text: res.icon
font: Tokens.font.icon.large
icon: res.icon
fontStyle: Tokens.font.icon.large
color: res.fgColour
}
}

View file

@ -13,14 +13,14 @@ Item {
Component.onCompleted: Weather.reload()
MaterialIcon {
NsIcon {
id: icon
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
animate: true
text: Weather.icon
icon: Weather.icon
color: Colours.palette.m3secondary
fontStyle: Tokens.font.icon.builders.extraLarge.scale(1.6).build()
}

View file

@ -75,8 +75,8 @@ Item {
asynchronous: true
active: pfp.status !== Image.Ready
sourceComponent: MaterialIcon {
text: "person_add"
sourceComponent: NsIcon {
icon: "person_add"
color: Colours.palette.m3onSurfaceVariant
fontStyle: Tokens.font.icon.extraLarge
fill: 1
@ -120,9 +120,9 @@ Item {
}
}
MaterialIcon {
NsIcon {
anchors.centerIn: parent
text: "person_edit"
icon: "person_edit"
color: Colours.palette.m3onPrimary
fontStyle: Tokens.font.icon.large
}
@ -187,9 +187,9 @@ Item {
CAnim {}
}
MaterialIcon {
NsIcon {
anchors.centerIn: parent
text: "clock_arrow_up"
icon: "clock_arrow_up"
color: Colours.palette.m3onTertiaryContainer
fontStyle: Tokens.font.icon.medium
}
@ -251,11 +251,11 @@ Item {
anchors.centerIn: parent
spacing: Tokens.spacing.extraSmall
MaterialIcon {
NsIcon {
id: wmIcon
anchors.verticalCenter: parent.verticalCenter
text: "select_window"
icon: "select_window"
color: Colours.palette.m3onSecondaryContainer
fontStyle: wmText.font
}

View file

@ -212,9 +212,9 @@ Item {
sourceComponent: ColumnLayout {
spacing: Tokens.spacing.small
MaterialIcon {
NsIcon {
Layout.alignment: Qt.AlignHCenter
text: "sentiment_sad"
icon: "sentiment_sad"
fontStyle: Tokens.font.icon.builders.large.scale(2).build()
color: Colours.palette.m3outline
}

View file

@ -20,9 +20,9 @@ Item {
spacing: Tokens.spacing.medium
z: 1
MaterialIcon {
NsIcon {
Layout.topMargin: Math.round(fontInfo.pointSize * 0.12)
text: "lyrics"
icon: "lyrics"
fontStyle: Tokens.font.icon.medium
}

View file

@ -197,11 +197,11 @@ Item {
hoverEnabled: true
onClicked: root.open = !root.open
MaterialIcon {
NsIcon {
id: icon
anchors.centerIn: parent
text: "more_vert"
icon: "more_vert"
fontStyle: Tokens.font.icon.medium
}
}

View file

@ -65,9 +65,9 @@ StyledClippingRect {
spacing: 0
MaterialIcon {
NsIcon {
Layout.leftMargin: -Tokens.padding.extraSmall
text: "battery_full"
icon: "battery_full"
color: contents.accentColour
fontStyle: Tokens.font.icon.large
}
@ -115,8 +115,8 @@ StyledClippingRect {
Layout.alignment: Qt.AlignRight
spacing: Tokens.spacing.extraSmall
MaterialIcon {
text: "bolt"
NsIcon {
icon: "bolt"
color: contents.accentColour
fontStyle: Tokens.font.icon.large
fill: 1

View file

@ -40,11 +40,11 @@ StyledRect {
Anim {}
}
MaterialIcon {
NsIcon {
id: icon
anchors.centerIn: parent
text: root.icon
icon: root.icon
color: root.accent
fontStyle: Tokens.font.icon.medium
}
@ -84,9 +84,9 @@ StyledRect {
Layout.leftMargin: -Tokens.padding.extraSmall
spacing: Tokens.spacing.extraSmall
MaterialIcon {
NsIcon {
Layout.topMargin: Math.round(fontInfo.pointSize * 0.08)
text: root.temperature > 90 ? "thermometer_alert" : "thermometer"
icon: root.temperature > 90 ? "thermometer_alert" : "thermometer"
color: root.temperature > 90 ? Colours.palette.m3error : root.accent
fontStyle: Tokens.font.icon.medium
fill: 1

View file

@ -31,8 +31,8 @@ StyledRect {
Layout.leftMargin: -Tokens.padding.extraSmall
spacing: Tokens.spacing.small
MaterialIcon {
text: "memory_alt"
NsIcon {
icon: "memory_alt"
fill: 1
color: root.accent
fontStyle: Tokens.font.icon.builders.medium.weight(Font.DemiBold).build() // DemiBold to fix fill issues

View file

@ -30,8 +30,8 @@ StyledRect {
RowLayout {
spacing: Tokens.spacing.small
MaterialIcon {
text: "swap_vert"
NsIcon {
icon: "swap_vert"
color: Colours.palette.m3primary
fontStyle: Tokens.font.icon.medium
}
@ -105,8 +105,8 @@ StyledRect {
Layout.fillWidth: true
spacing: Tokens.spacing.small
MaterialIcon {
text: "download"
NsIcon {
icon: "download"
color: Colours.palette.m3tertiary
fontStyle: Tokens.font.icon.medium
}
@ -136,8 +136,8 @@ StyledRect {
Layout.fillWidth: true
spacing: Tokens.spacing.small
MaterialIcon {
text: "upload"
NsIcon {
icon: "upload"
color: Colours.palette.m3secondary
fontStyle: Tokens.font.icon.medium
}
@ -167,8 +167,8 @@ StyledRect {
Layout.fillWidth: true
spacing: Tokens.spacing.small
MaterialIcon {
text: "history"
NsIcon {
icon: "history"
color: Colours.palette.m3onSurfaceVariant
fontStyle: Tokens.font.icon.medium
}

View file

@ -55,9 +55,9 @@ StyledRect {
anchors.centerIn: parent
spacing: 0
MaterialIcon {
NsIcon {
Layout.alignment: Qt.AlignHCenter
text: "hard_drive"
icon: "hard_drive"
color: root.accent
fontStyle: Tokens.font.icon.medium
}

View file

@ -58,14 +58,14 @@ Item {
implicitHeight: Math.max(searchIcon.implicitHeight, search.implicitHeight, clearIcon.implicitHeight)
MaterialIcon {
NsIcon {
id: searchIcon
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
anchors.leftMargin: root.padding
text: "search"
icon: "search"
color: Colours.palette.m3onSurfaceVariant
}
@ -145,7 +145,7 @@ Item {
}
}
MaterialIcon {
NsIcon {
id: clearIcon
anchors.verticalCenter: parent.verticalCenter
@ -163,7 +163,7 @@ Item {
return 1;
}
text: "close"
icon: "close"
color: Colours.palette.m3onSurfaceVariant
MouseArea {

View file

@ -116,8 +116,8 @@ Item {
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
MaterialIcon {
text: root.state === "wallpapers" ? "wallpaper_slideshow" : "manage_search"
NsIcon {
icon: root.state === "wallpapers" ? "wallpaper_slideshow" : "manage_search"
color: Colours.palette.m3onSurfaceVariant
fontStyle: Tokens.font.icon.extraLarge

View file

@ -25,11 +25,11 @@ Item {
anchors.rightMargin: Tokens.padding.medium
anchors.margins: Tokens.padding.small
MaterialIcon {
NsIcon {
id: icon
anchors.verticalCenter: parent.verticalCenter
text: root.modelData?.icon ?? ""
icon: root.modelData?.icon ?? ""
color: Colours.palette.m3onSurfaceVariant
fontStyle: Tokens.font.icon.builders.large.scale(1.3).build()
}

View file

@ -79,8 +79,8 @@ Item {
anchors.right: parent.right
active: root.modelData && Strings.testRegexList(GlobalConfig.launcher.favouriteApps, root.modelData.id)
sourceComponent: MaterialIcon {
text: "favorite"
sourceComponent: NsIcon {
icon: "favorite"
fill: 1
color: Colours.palette.m3primary
}

View file

@ -40,8 +40,8 @@ Item {
spacing: Tokens.spacing.medium
MaterialIcon {
text: "function"
NsIcon {
icon: "function"
fontStyle: Tokens.font.icon.extraLarge
Layout.alignment: Qt.AlignVCenter
}
@ -105,14 +105,14 @@ Item {
}
}
MaterialIcon {
NsIcon {
id: icon
anchors.verticalCenter: parent.verticalCenter
anchors.right: parent.right
anchors.rightMargin: Tokens.padding.medium
text: "open_in_new"
icon: "open_in_new"
color: Colours.palette.m3onTertiary
fontStyle: Tokens.font.icon.large
}

View file

@ -92,8 +92,8 @@ Item {
active: `${root.modelData?.name} ${root.modelData?.flavour}` === Schemes.currentScheme
sourceComponent: MaterialIcon {
text: "check"
sourceComponent: NsIcon {
icon: "check"
color: Colours.palette.m3onSurfaceVariant
fontStyle: Tokens.font.icon.large
}

View file

@ -26,10 +26,10 @@ Item {
anchors.rightMargin: Tokens.padding.medium
anchors.margins: Tokens.padding.small
MaterialIcon {
NsIcon {
id: icon
text: root.modelData?.icon ?? ""
icon: root.modelData?.icon ?? ""
fontStyle: Tokens.font.icon.extraLarge
anchors.verticalCenter: parent.verticalCenter
@ -68,8 +68,8 @@ Item {
active: root.modelData?.variant === Schemes.currentVariant
sourceComponent: MaterialIcon {
text: "check"
sourceComponent: NsIcon {
icon: "check"
color: Colours.palette.m3onSurfaceVariant
fontStyle: Tokens.font.icon.large
}

View file

@ -57,9 +57,9 @@ Item {
implicitWidth: Tokens.sizes.launcher.wallpaperWidth
implicitHeight: implicitWidth / 16 * 9
MaterialIcon {
NsIcon {
anchors.centerIn: parent
text: "image"
icon: "image"
color: Colours.tPalette.m3outline
fontStyle: Tokens.font.icon.builders.extraLarge.scale(2).weight(Font.DemiBold).build()
}

View file

@ -177,8 +177,8 @@ StyledRect {
anchors.centerIn: parent
anchors.verticalCenterOffset: 1
sourceComponent: MaterialIcon {
text: Icons.getNotifIcon(root.modelData.summary, root.modelData.urgency)
sourceComponent: NsIcon {
icon: Icons.getNotifIcon(root.modelData.summary, root.modelData.urgency)
color: root.modelData.urgency === NotificationUrgency.Critical ? Colours.palette.m3onError : root.modelData.urgency === NotificationUrgency.Low ? Colours.palette.m3onSurface : Colours.palette.m3onSecondaryContainer
fontStyle: Tokens.font.icon.medium
}
@ -363,12 +363,12 @@ StyledRect {
onClicked: root.expanded = !root.expanded
}
MaterialIcon {
NsIcon {
id: expandIcon
anchors.centerIn: parent
anchors.verticalCenterOffset: root.expanded ? -1 : 1
text: "expand_more"
icon: "expand_more"
fontStyle: Tokens.font.icon.medium
rotation: root.expanded ? 180 : 0

View file

@ -160,9 +160,9 @@ Item {
Component {
id: iconBtn
MaterialIcon {
NsIcon {
animate: action.modelData.isCopy ?? false
text: action.modelData.isCopy ? "content_copy" : "close"
icon: action.modelData.isCopy ? "content_copy" : "close"
color: Colours.palette.m3onSurfaceVariant
}
}

View file

@ -110,8 +110,8 @@ StyledRect {
Component {
id: materialIconComp
MaterialIcon {
text: Icons.getNotifIcon(root.activeNotifs[0]?.summary, root.urgency)
NsIcon {
icon: Icons.getNotifIcon(root.activeNotifs[0]?.summary, root.urgency)
color: root.urgency === NotificationUrgency.Critical ? Colours.palette.m3onError : root.urgency === NotificationUrgency.Low ? Colours.palette.m3onSurface : Colours.palette.m3onSecondaryContainer
fontStyle: Tokens.font.icon.medium
}
@ -214,9 +214,9 @@ StyledRect {
font: Tokens.font.body.small
}
MaterialIcon {
NsIcon {
Layout.rightMargin: -Tokens.padding.extraSmall / 2
text: "expand_more"
icon: "expand_more"
color: root.urgency === NotificationUrgency.Critical ? Colours.palette.m3onError : Colours.palette.m3onSurfaceVariant
rotation: root.expanded ? 180 : 0
Layout.topMargin: root.expanded ? -Math.floor(Tokens.padding.extraSmall) : 0

View file

@ -33,11 +33,11 @@ StyledRect {
radius: Tokens.rounding.full
color: IdleInhibitor.enabled ? Colours.palette.m3secondary : Colours.palette.m3secondaryContainer
MaterialIcon {
NsIcon {
id: icon
anchors.centerIn: parent
text: "coffee"
icon: "coffee"
color: IdleInhibitor.enabled ? Colours.palette.m3onSecondary : Colours.palette.m3onSecondaryContainer
fontStyle: Tokens.font.icon.large
}

View file

@ -43,12 +43,12 @@ StyledRect {
radius: Tokens.rounding.full
color: Recorder.running ? Colours.palette.m3secondary : Colours.palette.m3secondaryContainer
MaterialIcon {
NsIcon {
id: icon
anchors.centerIn: parent
anchors.verticalCenterOffset: 1
text: "screen_record"
icon: "screen_record"
color: Recorder.running ? Colours.palette.m3onSecondary : Colours.palette.m3onSecondaryContainer
fontStyle: Tokens.font.icon.large
}

View file

@ -29,9 +29,9 @@ ColumnLayout {
RowLayout {
spacing: Tokens.spacing.medium
MaterialIcon {
NsIcon {
Layout.alignment: Qt.AlignVCenter
text: "list"
icon: "list"
fontStyle: Tokens.font.icon.large
}
@ -165,9 +165,9 @@ ColumnLayout {
sourceComponent: ColumnLayout {
spacing: Tokens.spacing.small
MaterialIcon {
NsIcon {
Layout.alignment: Qt.AlignHCenter
text: "scan_delete"
icon: "scan_delete"
color: Colours.palette.m3outline
fontStyle: Tokens.font.icon.extraLarge
@ -193,9 +193,9 @@ ColumnLayout {
RowLayout {
spacing: Tokens.spacing.medium
MaterialIcon {
NsIcon {
Layout.alignment: Qt.AlignHCenter
text: "scan_delete"
icon: "scan_delete"
color: Colours.palette.m3outline
opacity: !root.props.recordingListExpanded ? 1 : 0

View file

@ -70,11 +70,11 @@ StyledRect {
implicitWidth: implicitHeight
implicitHeight: icon.implicitHeight + Tokens.padding.large
MaterialIcon {
NsIcon {
id: icon
anchors.centerIn: parent
text: root.modelData.icon
icon: root.modelData.icon
color: {
if (root.modelData.type === Toast.Success)
return Colours.palette.m3onSuccess;

View file

@ -41,13 +41,13 @@ ColumnLayout {
onClicked: root.moveToWsExpanded = !root.moveToWsExpanded
}
MaterialIcon {
NsIcon {
id: moveToWsIcon
anchors.centerIn: parent
animate: true
text: root.moveToWsExpanded ? "expand_more" : "keyboard_arrow_right"
icon: root.moveToWsExpanded ? "expand_more" : "keyboard_arrow_right"
color: Colours.palette.m3onPrimary
fontStyle: Tokens.font.icon.large
}

View file

@ -135,11 +135,11 @@ ColumnLayout {
spacing: Tokens.spacing.medium
MaterialIcon {
NsIcon {
id: icon
Layout.alignment: Qt.AlignVCenter
text: detail.icon
icon: detail.icon
}
StyledText {

View file

@ -40,9 +40,9 @@ Item {
sourceComponent: ColumnLayout {
spacing: 0
MaterialIcon {
NsIcon {
Layout.alignment: Qt.AlignHCenter
text: "web_asset_off"
icon: "web_asset_off"
color: Colours.palette.m3outline
fontStyle: Tokens.font.icon.builders.extraLarge.scale(3).build()
}

View file

@ -200,7 +200,39 @@ Singleton {
"dock": root.cp(0xf2d1),
// lock screen
"login": root.cp(0xf090),
"key": root.cp(0xf084)
"key": root.cp(0xf084),
// dashboard / utilities / launcher leftovers
"account_tree": root.cp(0xf0e8),
"android": root.cp(0xf17b),
"category": root.cp(0xf02c),
"clear_all": root.cp(0xf2ed),
"compare": root.cp(0xf362),
"compare_arrows": root.cp(0xf362),
"contrast": root.cp(0xf042),
"delete_forever": root.cp(0xf1f8),
"filter_b_and_w": root.cp(0xf0b0),
"fullscreen": root.cp(0xf065),
"gamepad": root.cp(0xf11b),
"gradient": root.cp(0xf043),
"hard_disk": root.cp(0xf0a0),
"keep": root.cp(0xf08d),
"location_on": root.cp(0xf041),
"location_searching": root.cp(0xf05b),
"looks": root.cp(0xf53f),
"memory": root.cp(0xf2db),
"notifications_off": root.cp(0xf1f6),
"nutrition": root.cp(0xf787),
"page_header": root.cp(0xf036),
"picture_in_picture_center": root.cp(0xf2d0),
"resize": root.cp(0xf065),
"screenshot_region": root.cp(0xf247),
"select_to_speak": root.cp(0xf028),
"sentiment_calm": root.cp(0xf118),
"sentiment_very_dissatisfied": root.cp(0xf119),
"stop": root.cp(0xf04d),
"thermostat": root.cp(0xf2c9),
"water_drop": root.cp(0xf043),
"wb_twilight": root.cp(0xf185)
}
function get(name: string): string {