Standardise push buttons (#2544)

This commit is contained in:
Veronica Berglyd Olsen
2025-10-26 00:16:33 +02:00
committed by GitHub
48 changed files with 622 additions and 327 deletions
-17
View File
@@ -114,23 +114,6 @@ You can now test the translation in novelWriter. The Preferences dialog should l
language, so go ahead and select it. language, so go ahead and select it.
### Missing QtBase Translations
The default Qt dialogs also have translations, for instance for standard buttons like "Yes", "No",
"Ok", "Cancel", etc. Generally, these translation files are installed with the Qt libraries on your
system, and novelWriter will collect those translations from there. However, these translations are
missing for many languages.
As a starting point, there is no need to translate any entries in the `.ts` files that are under
elements starting with the letter "Q", like "QPlatformTheme", "QWizard", etc. If these turn up in
English in novelWriter after activating a translation, it means they are probably missing in the Qt
library, and you may also need to translate these.
These additional translation entries are generated from a file named `i18n/qtbase.py`, which is not
a file that novelWriter uses. It is there only to generate these additional entries for the `.ts`
files.
## Project Localisation ## Project Localisation
Projects can have a different language setting than the GUI itself. The files with format Projects can have a different language setting than the GUI itself. The files with format
-49
View File
@@ -1,49 +0,0 @@
"""
Qt Base Translation File
========================
This file causes Qt Linguist to generate translation entries for the Qt
elements that need translation in novelWriter for those languages who do
not yet have a qtbase_xx.qm file shipped with Qt.
If a qtbase_xx.qm file already exists, do not add a translation for the
entries generated from this file.
""" # noqa
from PyQt6.QtCore import QT_TRANSLATE_NOOP
# QDialogButtonBox
# ================
QT_TRANSLATE_NOOP("QDialogButtonBox", "OK")
# QGnomeTheme
# ===========
QT_TRANSLATE_NOOP("QGnomeTheme", "&OK")
QT_TRANSLATE_NOOP("QGnomeTheme", "&Save")
QT_TRANSLATE_NOOP("QGnomeTheme", "&Cancel")
QT_TRANSLATE_NOOP("QGnomeTheme", "&Close")
QT_TRANSLATE_NOOP("QGnomeTheme", "Close without Saving")
# QPlatformTheme
# ==============
QT_TRANSLATE_NOOP("QPlatformTheme", "OK")
QT_TRANSLATE_NOOP("QPlatformTheme", "Save")
QT_TRANSLATE_NOOP("QPlatformTheme", "Save All")
QT_TRANSLATE_NOOP("QPlatformTheme", "Open")
QT_TRANSLATE_NOOP("QPlatformTheme", "&Yes")
QT_TRANSLATE_NOOP("QPlatformTheme", "Yes to &All")
QT_TRANSLATE_NOOP("QPlatformTheme", "&No")
QT_TRANSLATE_NOOP("QPlatformTheme", "N&o to All")
QT_TRANSLATE_NOOP("QPlatformTheme", "Abort")
QT_TRANSLATE_NOOP("QPlatformTheme", "Retry")
QT_TRANSLATE_NOOP("QPlatformTheme", "Ignore")
QT_TRANSLATE_NOOP("QPlatformTheme", "Close")
QT_TRANSLATE_NOOP("QPlatformTheme", "Cancel")
QT_TRANSLATE_NOOP("QPlatformTheme", "Discard")
QT_TRANSLATE_NOOP("QPlatformTheme", "Help")
QT_TRANSLATE_NOOP("QPlatformTheme", "Apply")
QT_TRANSLATE_NOOP("QPlatformTheme", "Reset")
QT_TRANSLATE_NOOP("QPlatformTheme", "Restore Defaults")
@@ -59,6 +59,23 @@ icon:sb_stats = <svg xmlns="http://www.w3.org/2000/svg" height="128" view
icon:theme_light = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-280q-83 0-141.5-58.5T280-480q0-83 58.5-141.5T480-680q83 0 141.5 58.5T680-480q0 83-58.5 141.5T480-280ZM80-440q-17 0-28.5-11.5T40-480q0-17 11.5-28.5T80-520h80q17 0 28.5 11.5T200-480q0 17-11.5 28.5T160-440H80Zm720 0q-17 0-28.5-11.5T760-480q0-17 11.5-28.5T800-520h80q17 0 28.5 11.5T920-480q0 17-11.5 28.5T880-440h-80ZM480-760q-17 0-28.5-11.5T440-800v-80q0-17 11.5-28.5T480-920q17 0 28.5 11.5T520-880v80q0 17-11.5 28.5T480-760Zm0 720q-17 0-28.5-11.5T440-80v-80q0-17 11.5-28.5T480-200q17 0 28.5 11.5T520-160v80q0 17-11.5 28.5T480-40ZM226-678l-43-42q-12-11-11.5-28t11.5-29q12-12 29-12t28 12l42 43q11 12 11 28t-11 28q-11 12-27.5 11.5T226-678Zm494 495-42-43q-11-12-11-28.5t11-27.5q11-12 27.5-11.5T734-282l43 42q12 11 11.5 28T777-183q-12 12-29 12t-28-12Zm-42-495q-12-11-11.5-27.5T678-734l42-43q11-12 28-11.5t29 11.5q12 12 12 29t-12 28l-43 42q-12 11-28 11t-28-11ZM183-183q-12-12-12-29t12-28l43-42q12-11 28.5-11t27.5 11q12 11 11.5 27.5T282-226l-42 43q-11 12-28 11.5T183-183Z" /></svg> icon:theme_light = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-280q-83 0-141.5-58.5T280-480q0-83 58.5-141.5T480-680q83 0 141.5 58.5T680-480q0 83-58.5 141.5T480-280ZM80-440q-17 0-28.5-11.5T40-480q0-17 11.5-28.5T80-520h80q17 0 28.5 11.5T200-480q0 17-11.5 28.5T160-440H80Zm720 0q-17 0-28.5-11.5T760-480q0-17 11.5-28.5T800-520h80q17 0 28.5 11.5T920-480q0 17-11.5 28.5T880-440h-80ZM480-760q-17 0-28.5-11.5T440-800v-80q0-17 11.5-28.5T480-920q17 0 28.5 11.5T520-880v80q0 17-11.5 28.5T480-760Zm0 720q-17 0-28.5-11.5T440-80v-80q0-17 11.5-28.5T480-200q17 0 28.5 11.5T520-160v80q0 17-11.5 28.5T480-40ZM226-678l-43-42q-12-11-11.5-28t11.5-29q12-12 29-12t28 12l42 43q11 12 11 28t-11 28q-11 12-27.5 11.5T226-678Zm494 495-42-43q-11-12-11-28.5t11-27.5q11-12 27.5-11.5T734-282l43 42q12 11 11.5 28T777-183q-12 12-29 12t-28-12Zm-42-495q-12-11-11.5-27.5T678-734l42-43q11-12 28-11.5t29 11.5q12 12 12 29t-12 28l-43 42q-12 11-28 11t-28-11ZM183-183q-12-12-12-29t12-28l43-42q12-11 28.5-11t27.5 11q12 11 11.5 27.5T282-226l-42 43q-11 12-28 11.5T183-183Z" /></svg>
icon:theme_dark = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-120q-151 0-255.5-104.5T120-480q0-138 90-239.5T440-838q13-2 23 3.5t16 14.5q6 9 6.5 21t-7.5 23q-17 26-25.5 55t-8.5 61q0 90 63 153t153 63q31 0 61.5-9t54.5-25q11-7 22.5-6.5T819-479q10 5 15.5 15t3.5 24q-14 138-117.5 229T480-120Z" /></svg> icon:theme_dark = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-120q-151 0-255.5-104.5T120-480q0-138 90-239.5T440-838q13-2 23 3.5t16 14.5q6 9 6.5 21t-7.5 23q-17 26-25.5 55t-8.5 61q0 90 63 153t153 63q31 0 61.5-9t54.5-25q11-7 22.5-6.5T819-479q10 5 15.5 15t3.5 24q-14 138-117.5 229T480-120Z" /></svg>
icon:theme_auto = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm40-83q119-15 199.5-104.5T800-480q0-123-80.5-212.5T520-797v634Z" /></svg> icon:theme_auto = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm40-83q119-15 199.5-104.5T800-480q0-123-80.5-212.5T520-797v634Z" /></svg>
icon:btn_ok = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m424-408-86-86q-11-11-28-11t-28 11q-11 11-11 28t11 28l114 114q12 12 28 12t28-12l226-226q11-11 11-28t-11-28q-11-11-28-11t-28 11L424-408Zm56 328q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Z" /></svg>
icon:btn_cancel = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m480-424 116 116q11 11 28 11t28-11q11-11 11-28t-11-28L536-480l116-116q11-11 11-28t-11-28q-11-11-28-11t-28 11L480-536 364-652q-11-11-28-11t-28 11q-11 11-11 28t11 28l116 116-116 116q-11 11-11 28t11 28q11 11 28 11t28-11l116-116Zm0 344q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Z" /></svg>
icon:btn_yes = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m424-408-86-86q-11-11-28-11t-28 11q-11 11-11 28t11 28l114 114q12 12 28 12t28-12l226-226q11-11 11-28t-11-28q-11-11-28-11t-28 11L424-408Zm56 328q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Z" /></svg>
icon:btn_no = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M320-440h320q17 0 28.5-11.5T680-480q0-17-11.5-28.5T640-520H320q-17 0-28.5 11.5T280-480q0 17 11.5 28.5T320-440ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Z" /></svg>
icon:btn_open = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h240q17 0 28.5 11.5T480-800q0 17-11.5 28.5T440-760H200v560h560v-240q0-17 11.5-28.5T800-480q17 0 28.5 11.5T840-440v240q0 33-23.5 56.5T760-120H200Zm560-584L416-360q-11 11-28 11t-28-11q-11-11-11-28t11-28l344-344H600q-17 0-28.5-11.5T560-800q0-17 11.5-28.5T600-840h200q17 0 28.5 11.5T840-800v200q0 17-11.5 28.5T800-560q-17 0-28.5-11.5T760-600v-104Z" /></svg>
icon:btn_close = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m480-424 116 116q11 11 28 11t28-11q11-11 11-28t-11-28L536-480l116-116q11-11 11-28t-11-28q-11-11-28-11t-28 11L480-536 364-652q-11-11-28-11t-28 11q-11 11-11 28t11 28l116 116-116 116q-11 11-11 28t11 28q11 11 28 11t28-11l116-116Zm0 344q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Z" /></svg>
icon:btn_save = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M692-148 588-252q-11-11-11-28t11-28q11-11 28-11t28 11l36 36v-127q0-17 11.5-28.5T720-439q17 0 28.5 11.5T760-399v127l36-36q11-11 28-11t28 11q11 11 11 28t-11 28L748-148q-12 12-28 12t-28-12ZM600 0q-17 0-28.5-11.5T560-40q0-17 11.5-28.5T600-80h240q17 0 28.5 11.5T880-40q0 17-11.5 28.5T840 0H600ZM240-160q-33 0-56.5-23.5T160-240v-560q0-33 23.5-56.5T240-880h247q16 0 30.5 6t25.5 17l194 194q11 11 17 25.5t6 30.5v48q0 17-11.5 28.5T720-519H560q-33 0-56.5 23.5T480-439v239q0 17-11.5 28.5T440-160H240Zm300-440h140L480-800l200 200-200-200v140q0 25 17.5 42.5T540-600Z" /></svg>
icon:btn_browse = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M160-160q-33 0-56.5-23.5T80-240v-480q0-33 23.5-56.5T160-800h207q16 0 30.5 6t25.5 17l57 57h360q17 0 28.5 11.5T880-680q0 17-11.5 28.5T840-640H314q-62 0-108 39t-46 99v262l79-263q8-26 29.5-41.5T316-560h516q41 0 64.5 32.5T909-457l-72 240q-8 26-29.5 41.5T760-160H160Z" /></svg>
icon:btn_list = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M400-200q-17 0-28.5-11.5T360-240q0-17 11.5-28.5T400-280h400q17 0 28.5 11.5T840-240q0 17-11.5 28.5T800-200H400Zm0-240q-17 0-28.5-11.5T360-480q0-17 11.5-28.5T400-520h400q17 0 28.5 11.5T840-480q0 17-11.5 28.5T800-440H400Zm0-240q-17 0-28.5-11.5T360-720q0-17 11.5-28.5T400-760h400q17 0 28.5 11.5T840-720q0 17-11.5 28.5T800-680H400ZM200-160q-33 0-56.5-23.5T120-240q0-33 23.5-56.5T200-320q33 0 56.5 23.5T280-240q0 33-23.5 56.5T200-160Zm0-240q-33 0-56.5-23.5T120-480q0-33 23.5-56.5T200-560q33 0 56.5 23.5T280-480q0 33-23.5 56.5T200-400Zm0-240q-33 0-56.5-23.5T120-720q0-33 23.5-56.5T200-800q33 0 56.5 23.5T280-720q0 33-23.5 56.5T200-640Z" /></svg>
icon:btn_new = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h200q17 0 28.5 11.5T440-800q0 17-11.5 28.5T400-760H200v560h560v-200q0-17 11.5-28.5T800-440q17 0 28.5 11.5T840-400v200q0 33-23.5 56.5T760-120H200Zm440-520h-80q-17 0-28.5-11.5T520-680q0-17 11.5-28.5T560-720h80v-80q0-17 11.5-28.5T680-840q17 0 28.5 11.5T720-800v80h80q17 0 28.5 11.5T840-680q0 17-11.5 28.5T800-640h-80v80q0 17-11.5 28.5T680-520q-17 0-28.5-11.5T640-560v-80Z" /></svg>
icon:btn_create = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-269 314-169q-11 7-23 6t-21-8q-9-7-14-17.5t-2-23.5l44-189-147-127q-10-9-12.5-20.5T140-571q4-11 12-18t22-9l194-17 75-178q5-12 15.5-18t21.5-6q11 0 21.5 6t15.5 18l75 178 194 17q14 2 22 9t12 18q4 11 1.5 22.5T809-528L662-401l44 189q3 13-2 23.5T690-171q-9 7-21 8t-23-6L480-269Z" /></svg>
icon:btn_reset = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M320-200q-17 0-28.5-11.5T280-240q0-17 11.5-28.5T320-280h244q63 0 109.5-40T720-420q0-60-46.5-100T564-560H312l76 76q11 11 11 28t-11 28q-11 11-28 11t-28-11L188-572q-6-6-8.5-13t-2.5-15q0-8 2.5-15t8.5-13l144-144q11-11 28-11t28 11q11 11 11 28t-11 28l-76 76h252q97 0 166.5 63T800-420q0 94-69.5 157T564-200H320Z" /></svg>
icon:btn_insert = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M440-560h-80q-17 0-28.5-11.5T320-600q0-17 11.5-28.5T360-640h240q17 0 28.5 11.5T640-600q0 17-11.5 28.5T600-560h-80v200q0 17-11.5 28.5T480-320q-17 0-28.5-11.5T440-360v-200ZM40-80v-160q0-17 11.5-28.5T80-280h40v-400H80q-17 0-28.5-11.5T40-720v-160q0-17 11.5-28.5T80-920h160q17 0 28.5 11.5T280-880v40h400v-40q0-17 11.5-28.5T720-920h160q17 0 28.5 11.5T920-880v160q0 17-11.5 28.5T880-680h-40v400h40q17 0 28.5 11.5T920-240v160q0 17-11.5 28.5T880-40H720q-17 0-28.5-11.5T680-80v-40H280v40q0 17-11.5 28.5T240-40H80q-17 0-28.5-11.5T40-80Zm240-120h400v-40q0-17 11.5-28.5T720-280h40v-400h-40q-17 0-28.5-11.5T680-720v-40H280v40q0 17-11.5 28.5T240-680h-40v400h40q17 0 28.5 11.5T280-240v40Z" /></svg>
icon:btn_apply = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m424-424-86-86q-11-11-28-11t-28 11q-11 11-11 28t11 28l114 114q12 12 28 12t28-12l226-226q11-11 11-28t-11-28q-11-11-28-11t-28 11L424-424ZM200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Z" /></svg>
icon:btn_build = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M760-252v72q0 8 6 14t14 6q8 0 14-6t6-14v-120q0-8-6-14t-14-6H660q-8 0-14 6t-6 14q0 8 6 14t14 6h72l-98 98q-6 6-6 14t6 14q6 6 14 6t14-6l98-98ZM720-40q-83 0-141.5-58.5T520-240q0-83 58.5-141.5T720-440q83 0 141.5 58.5T920-240q0 83-58.5 141.5T720-40ZM320-600h320q17 0 28.5-11.5T680-640q0-17-11.5-28.5T640-680H320q-17 0-28.5 11.5T280-640q0 17 11.5 28.5T320-600ZM200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v218q0 18-15 28t-32 4q-17-5-35.5-7.5T720-520q-11 0-20.5.5T680-517q-9-2-20-2.5t-20-.5H320q-17 0-28.5 11.5T280-480q0 17 11.5 28.5T320-440h205q-18 17-32.5 37T467-360H320q-17 0-28.5 11.5T280-320q0 17 11.5 28.5T320-280h123q-2 10-2.5 19.5T440-240q0 20 2 38t7 35q5 17-5 32t-27 15H200Z" /></svg>
icon:btn_print = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M320-120q-33 0-56.5-23.5T240-200v-80h-80q-33 0-56.5-23.5T80-360v-160q0-51 35-85.5t85-34.5h560q51 0 85.5 34.5T880-520v160q0 33-23.5 56.5T800-280h-80v80q0 33-23.5 56.5T640-120H320Zm400-560H240v-80q0-33 23.5-56.5T320-840h320q33 0 56.5 23.5T720-760v80Zm0 220q17 0 28.5-11.5T760-500q0-17-11.5-28.5T720-540q-17 0-28.5 11.5T680-500q0 17 11.5 28.5T720-460ZM320-200h320v-160H320v160Z" /></svg>
icon:btn_preview = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-480H200v480Zm280-80q-82 0-146.5-44.5T240-440q29-71 93.5-115.5T480-600q82 0 146.5 44.5T720-440q-29 71-93.5 115.5T480-280Zm0-100q-25 0-42.5-17.5T420-440q0-25 17.5-42.5T480-500q25 0 42.5 17.5T540-440q0 25-17.5 42.5T480-380Zm0 40q42 0 71-29t29-71q0-42-29-71t-71-29q-42 0-71 29t-29 71q0 42 29 71t71 29Z" /></svg>
icon:add = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M440-440H240q-17 0-28.5-11.5T200-480q0-17 11.5-28.5T240-520h200v-200q0-17 11.5-28.5T480-760q17 0 28.5 11.5T520-720v200h200q17 0 28.5 11.5T760-480q0 17-11.5 28.5T720-440H520v200q0 17-11.5 28.5T480-200q-17 0-28.5-11.5T440-240v-200Z" /></svg> icon:add = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M440-440H240q-17 0-28.5-11.5T200-480q0-17 11.5-28.5T240-520h200v-200q0-17 11.5-28.5T480-760q17 0 28.5 11.5T520-720v200h200q17 0 28.5 11.5T760-480q0 17-11.5 28.5T720-440H520v200q0 17-11.5 28.5T480-200q-17 0-28.5-11.5T440-240v-200Z" /></svg>
icon:bookmarks = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M400-160 232-88q-40 17-76-6.5T120-161v-519q0-33 23.5-56.5T200-760h400q33 0 56.5 23.5T680-680v519q0 43-36 66.5T568-88l-168-72Zm400 0q-17 0-28.5-11.5T760-200v-640H280q-17 0-28.5-11.5T240-880q0-17 11.5-28.5T280-920h480q33 0 56.5 23.5T840-840v640q0 17-11.5 28.5T800-160Z" /></svg> icon:bookmarks = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M400-160 232-88q-40 17-76-6.5T120-161v-519q0-33 23.5-56.5T200-760h400q33 0 56.5 23.5T680-680v519q0 43-36 66.5T568-88l-168-72Zm400 0q-17 0-28.5-11.5T760-200v-640H280q-17 0-28.5-11.5T240-880q0-17 11.5-28.5T280-920h480q33 0 56.5 23.5T840-840v640q0 17-11.5 28.5T800-160Z" /></svg>
icon:browse = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M160-160q-33 0-56.5-23.5T80-240v-480q0-33 23.5-56.5T160-800h207q16 0 30.5 6t25.5 17l57 57h360q17 0 28.5 11.5T880-680q0 17-11.5 28.5T840-640H314q-62 0-108 39t-46 99v262l79-263q8-26 29.5-41.5T316-560h516q41 0 64.5 32.5T909-457l-72 240q-8 26-29.5 41.5T760-160H160Z" /></svg> icon:browse = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M160-160q-33 0-56.5-23.5T80-240v-480q0-33 23.5-56.5T160-800h207q16 0 30.5 6t25.5 17l57 57h360q17 0 28.5 11.5T880-680q0 17-11.5 28.5T840-640H314q-62 0-108 39t-46 99v262l79-263q8-26 29.5-41.5T316-560h516q41 0 64.5 32.5T909-457l-72 240q-8 26-29.5 41.5T760-160H160Z" /></svg>
@@ -94,7 +111,6 @@ icon:minimise = <svg xmlns="http://www.w3.org/2000/svg" height="128" view
icon:more_arrow = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M420-308q-8 0-14-5.5t-6-14.5v-304q0-9 6-14.5t14-5.5q2 0 14 6l145 145q5 5 7 10t2 11q0 6-2 11t-7 10L434-314q-3 3-6.5 4.5T420-308Z" /></svg> icon:more_arrow = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M420-308q-8 0-14-5.5t-6-14.5v-304q0-9 6-14.5t14-5.5q2 0 14 6l145 145q5 5 7 10t2 11q0 6-2 11t-7 10L434-314q-3 3-6.5 4.5T420-308Z" /></svg>
icon:more_vertical = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-160q-33 0-56.5-23.5T400-240q0-33 23.5-56.5T480-320q33 0 56.5 23.5T560-240q0 33-23.5 56.5T480-160Zm0-240q-33 0-56.5-23.5T400-480q0-33 23.5-56.5T480-560q33 0 56.5 23.5T560-480q0 33-23.5 56.5T480-400Zm0-240q-33 0-56.5-23.5T400-720q0-33 23.5-56.5T480-800q33 0 56.5 23.5T560-720q0 33-23.5 56.5T480-640Z" /></svg> icon:more_vertical = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-160q-33 0-56.5-23.5T400-240q0-33 23.5-56.5T480-320q33 0 56.5 23.5T560-240q0 33-23.5 56.5T480-160Zm0-240q-33 0-56.5-23.5T400-480q0-33 23.5-56.5T480-560q33 0 56.5 23.5T560-480q0 33-23.5 56.5T480-400Zm0-240q-33 0-56.5-23.5T400-720q0-33 23.5-56.5T480-800q33 0 56.5 23.5T560-720q0 33-23.5 56.5T480-640Z" /></svg>
icon:noncheckable = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M320-440h320q17 0 28.5-11.5T680-480q0-17-11.5-28.5T640-520H320q-17 0-28.5 11.5T280-480q0 17 11.5 28.5T320-440ZM200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Z" /></svg> icon:noncheckable = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M320-440h320q17 0 28.5-11.5T680-480q0-17-11.5-28.5T640-520H320q-17 0-28.5 11.5T280-480q0 17 11.5 28.5T320-440ZM200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Z" /></svg>
icon:open = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h240q17 0 28.5 11.5T480-800q0 17-11.5 28.5T440-760H200v560h560v-240q0-17 11.5-28.5T800-480q17 0 28.5 11.5T840-440v240q0 33-23.5 56.5T760-120H200Zm560-584L416-360q-11 11-28 11t-28-11q-11-11-11-28t11-28l344-344H600q-17 0-28.5-11.5T560-800q0-17 11.5-28.5T600-840h200q17 0 28.5 11.5T840-800v200q0 17-11.5 28.5T800-560q-17 0-28.5-11.5T760-600v-104Z" /></svg>
icon:panel = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-280h560v-360H200v360Z" /></svg> icon:panel = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-280h560v-360H200v360Z" /></svg>
icon:pin = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M640-760v280l68 68q6 6 9 13.5t3 15.5v23q0 17-11.5 28.5T680-320H520v223q0 8-3 15.5T508-68l-14 14q-6 6-14 6t-14-6l-14-14q-6-6-9-13.5T440-97v-223H280q-17 0-28.5-11.5T240-360v-23q0-8 3-15.5t9-13.5l68-68v-280q-17 0-28.5-11.5T280-800q0-17 11.5-28.5T320-840h320q17 0 28.5 11.5T680-800q0 17-11.5 28.5T640-760Z" /></svg> icon:pin = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M640-760v280l68 68q6 6 9 13.5t3 15.5v23q0 17-11.5 28.5T680-320H520v223q0 8-3 15.5T508-68l-14 14q-6 6-14 6t-14-6l-14-14q-6-6-9-13.5T440-97v-223H280q-17 0-28.5-11.5T240-360v-23q0-8 3-15.5t9-13.5l68-68v-280q-17 0-28.5-11.5T280-800q0-17 11.5-28.5T320-840h320q17 0 28.5 11.5T680-800q0 17-11.5 28.5T640-760Z" /></svg>
icon:project_copy = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M120-120q-33 0-56.5-23.5T40-200v-480q0-17 11.5-28.5T80-720q17 0 28.5 11.5T120-680v480h640q17 0 28.5 11.5T800-160q0 17-11.5 28.5T760-120H120Zm160-160q-33 0-56.5-23.5T200-360v-440q0-33 23.5-56.5T280-880h167q16 0 30.5 6t25.5 17l57 57h280q33 0 56.5 23.5T920-720v360q0 33-23.5 56.5T840-280H280Z" /></svg> icon:project_copy = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M120-120q-33 0-56.5-23.5T40-200v-480q0-17 11.5-28.5T80-720q17 0 28.5 11.5T120-680v480h640q17 0 28.5 11.5T800-160q0 17-11.5 28.5T760-120H120Zm160-160q-33 0-56.5-23.5T200-360v-440q0-33 23.5-56.5T280-880h167q16 0 30.5 6t25.5 17l57 57h280q33 0 56.5 23.5T920-720v360q0 33-23.5 56.5T840-280H280Z" /></svg>
@@ -103,7 +119,6 @@ icon:refresh = <svg xmlns="http://www.w3.org/2000/svg" height="128" view
icon:remove = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M240-440q-17 0-28.5-11.5T200-480q0-17 11.5-28.5T240-520h480q17 0 28.5 11.5T760-480q0 17-11.5 28.5T720-440H240Z" /></svg> icon:remove = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M240-440q-17 0-28.5-11.5T200-480q0-17 11.5-28.5T240-520h480q17 0 28.5 11.5T760-480q0 17-11.5 28.5T720-440H240Z" /></svg>
icon:revert = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-120q-126 0-223-76.5T131-392q-4-15 6-27.5t27-14.5q16-2 29 6t18 24q24 90 99 147t170 57q117 0 198.5-81.5T760-480q0-117-81.5-198.5T480-760q-69 0-129 32t-101 88h70q17 0 28.5 11.5T360-600q0 17-11.5 28.5T320-560H160q-17 0-28.5-11.5T120-600v-160q0-17 11.5-28.5T160-800q17 0 28.5 11.5T200-760v54q51-64 124.5-99T480-840q75 0 140.5 28.5t114 77q48.5 48.5 77 114T840-480q0 75-28.5 140.5t-77 114q-48.5 48.5-114 77T480-120Zm0-280q-33 0-56.5-23.5T400-480q0-33 23.5-56.5T480-560q33 0 56.5 23.5T560-480q0 33-23.5 56.5T480-400Z" /></svg> icon:revert = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-120q-126 0-223-76.5T131-392q-4-15 6-27.5t27-14.5q16-2 29 6t18 24q24 90 99 147t170 57q117 0 198.5-81.5T760-480q0-117-81.5-198.5T480-760q-69 0-129 32t-101 88h70q17 0 28.5 11.5T360-600q0 17-11.5 28.5T320-560H160q-17 0-28.5-11.5T120-600v-160q0-17 11.5-28.5T160-800q17 0 28.5 11.5T200-760v54q51-64 124.5-99T480-840q75 0 140.5 28.5t114 77q48.5 48.5 77 114T840-480q0 75-28.5 140.5t-77 114q-48.5 48.5-114 77T480-120Zm0-280q-33 0-56.5-23.5T400-480q0-33 23.5-56.5T480-560q33 0 56.5 23.5T560-480q0 33-23.5 56.5T480-400Z" /></svg>
icon:settings = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M433-80q-27 0-46.5-18T363-142l-9-66q-13-5-24.5-12T307-235l-62 26q-25 11-50 2t-39-32l-47-82q-14-23-8-49t27-43l53-40q-1-7-1-13.5v-27q0-6.5 1-13.5l-53-40q-21-17-27-43t8-49l47-82q14-23 39-32t50 2l62 26q11-8 23-15t24-12l9-66q4-26 23.5-44t46.5-18h94q27 0 46.5 18t23.5 44l9 66q13 5 24.5 12t22.5 15l62-26q25-11 50-2t39 32l47 82q14 23 8 49t-27 43l-53 40q1 7 1 13.5v27q0 6.5-2 13.5l53 40q21 17 27 43t-8 49l-48 82q-14 23-39 32t-50-2l-60-26q-11 8-23 15t-24 12l-9 66q-4 26-23.5 44T527-80h-94Zm49-260q58 0 99-41t41-99q0-58-41-99t-99-41q-59 0-99.5 41T342-480q0 58 40.5 99t99.5 41Z" /></svg> icon:settings = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M433-80q-27 0-46.5-18T363-142l-9-66q-13-5-24.5-12T307-235l-62 26q-25 11-50 2t-39-32l-47-82q-14-23-8-49t27-43l53-40q-1-7-1-13.5v-27q0-6.5 1-13.5l-53-40q-21-17-27-43t8-49l47-82q14-23 39-32t50 2l62 26q11-8 23-15t24-12l9-66q4-26 23.5-44t46.5-18h94q27 0 46.5 18t23.5 44l9 66q13 5 24.5 12t22.5 15l62-26q25-11 50-2t39 32l47 82q14 23 8 49t-27 43l-53 40q1 7 1 13.5v27q0 6.5-2 13.5l53 40q21 17 27 43t-8 49l-48 82q-14 23-39 32t-50-2l-60-26q-11 8-23 15t-24 12l-9 66q-4 26-23.5 44T527-80h-94Zm49-260q58 0 99-41t41-99q0-58-41-99t-99-41q-59 0-99.5 41T342-480q0 58 40.5 99t99.5 41Z" /></svg>
icon:star = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-269 314-169q-11 7-23 6t-21-8q-9-7-14-17.5t-2-23.5l44-189-147-127q-10-9-12.5-20.5T140-571q4-11 12-18t22-9l194-17 75-178q5-12 15.5-18t21.5-6q11 0 21.5 6t15.5 18l75 178 194 17q14 2 22 9t12 18q4 11 1.5 22.5T809-528L662-401l44 189q3 13-2 23.5T690-171q-9 7-21 8t-23-6L480-269Z" /></svg>
icon:stats = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m110-190 213-213q23-23 57-23t57 23l103 103 256-289q11-13 28.5-13t29.5 12q11 11 11.5 26.5T855-536L596-244q-23 26-57 27.5T480-240L380-340 170-130q-13 13-30 13t-30-13q-13-13-13-30t13-30Zm0-240 213-213q23-23 57-23t57 23l103 103 256-289q11-13 28.5-13t29.5 12q11 11 11.5 26.5T855-776L596-484q-23 26-57 27.5T480-480L380-580 170-370q-13 13-30 13t-30-13q-13-13-13-30t13-30Z" /></svg> icon:stats = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m110-190 213-213q23-23 57-23t57 23l103 103 256-289q11-13 28.5-13t29.5 12q11 11 11.5 26.5T855-536L596-244q-23 26-57 27.5T480-240L380-340 170-130q-13 13-30 13t-30-13q-13-13-13-30t13-30Zm0-240 213-213q23-23 57-23t57 23l103 103 256-289q11-13 28.5-13t29.5 12q11 11 11.5 26.5T855-776L596-484q-23 26-57 27.5T480-480L380-580 170-370q-13 13-30 13t-30-13q-13-13-13-30t13-30Z" /></svg>
icon:text = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M200-200q-17 0-28.5-11.5T160-240q0-17 11.5-28.5T200-280h320q17 0 28.5 11.5T560-240q0 17-11.5 28.5T520-200H200Zm0-160q-17 0-28.5-11.5T160-400q0-17 11.5-28.5T200-440h560q17 0 28.5 11.5T800-400q0 17-11.5 28.5T760-360H200Zm0-160q-17 0-28.5-11.5T160-560q0-17 11.5-28.5T200-600h560q17 0 28.5 11.5T800-560q0 17-11.5 28.5T760-520H200Zm0-160q-17 0-28.5-11.5T160-720q0-17 11.5-28.5T200-760h560q17 0 28.5 11.5T800-720q0 17-11.5 28.5T760-680H200Z" /></svg> icon:text = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M200-200q-17 0-28.5-11.5T160-240q0-17 11.5-28.5T200-280h320q17 0 28.5 11.5T560-240q0 17-11.5 28.5T520-200H200Zm0-160q-17 0-28.5-11.5T160-400q0-17 11.5-28.5T200-440h560q17 0 28.5 11.5T800-400q0 17-11.5 28.5T760-360H200Zm0-160q-17 0-28.5-11.5T160-560q0-17 11.5-28.5T200-600h560q17 0 28.5 11.5T800-560q0 17-11.5 28.5T760-520H200Zm0-160q-17 0-28.5-11.5T160-720q0-17 11.5-28.5T200-760h560q17 0 28.5 11.5T800-720q0 17-11.5 28.5T760-680H200Z" /></svg>
icon:timer_off = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-80q-74 0-139.5-28.5T226-186q-49-49-77.5-114.5T120-440q0-60 18.5-115.5T192-656L84-764q-11-11-11-28t11-28q11-11 28-11t28 11l680 680q11 11 11 28t-11 28q-11 11-28 11t-28-11l-68-68q-48 35-103.5 53.5T480-80Zm-80-760q-17 0-28.5-11.5T360-880q0-17 11.5-28.5T400-920h160q17 0 28.5 11.5T600-880q0 17-11.5 28.5T560-840H400Zm348 516L520-552v-48q0-17-11.5-28.5T480-640q-10 0-18.5 4T448-624l-85-85q-18-18-13-43t29-33q24-8 49.5-11.5T480-800q60 0 117.5 20T706-722l28-28q11-11 28-11t28 11q11 11 11 28t-11 28l-28 28q38 51 58 108.5T840-440q0 26-3.5 51T825-339q-8 24-33 29t-44-14Z" /></svg> icon:timer_off = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-80q-74 0-139.5-28.5T226-186q-49-49-77.5-114.5T120-440q0-60 18.5-115.5T192-656L84-764q-11-11-11-28t11-28q11-11 28-11t28 11l680 680q11 11 11 28t-11 28q-11 11-28 11t-28-11l-68-68q-48 35-103.5 53.5T480-80Zm-80-760q-17 0-28.5-11.5T360-880q0-17 11.5-28.5T400-920h160q17 0 28.5 11.5T600-880q0 17-11.5 28.5T560-840H400Zm348 516L520-552v-48q0-17-11.5-28.5T480-640q-10 0-18.5 4T448-624l-85-85q-18-18-13-43t29-33q24-8 49.5-11.5T480-800q60 0 117.5 20T706-722l28-28q11-11 28-11t28 11q11 11 11 28t-11 28l-28 28q38 51 58 108.5T840-440q0 26-3.5 51T825-339q-8 24-33 29t-44-14Z" /></svg>
@@ -59,6 +59,23 @@ icon:sb_stats = <svg xmlns="http://www.w3.org/2000/svg" height="128" view
icon:theme_light = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-320q-66.85 0-113.42-46.58Q320-413.15 320-480t46.58-113.42Q413.15-640 480-640t113.42 46.58Q640-546.85 640-480t-46.58 113.42Q546.85-320 480-320ZM80-460q-8.5 0-14.25-5.76T60-480.03q0-8.51 5.75-14.24T80-500h100q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T180-460H80Zm700 0q-8.5 0-14.25-5.76T760-480.03q0-8.51 5.75-14.24T780-500h100q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T880-460H780ZM479.97-760q-8.51 0-14.24-5.75T460-780v-100q0-8.5 5.76-14.25t14.27-5.75q8.51 0 14.24 5.75T500-880v100q0 8.5-5.76 14.25T479.97-760Zm0 700q-8.51 0-14.24-5.75T460-80v-100q0-8.5 5.76-14.25t14.27-5.75q8.51 0 14.24 5.75T500-180v100q0 8.5-5.76 14.25T479.97-60ZM254.46-678.77l-57.61-55.85q-5.85-5.61-5.73-13.76.11-8.16 5.96-14.77 6.38-6.62 14.15-6.62 7.77 0 14.15 6.62L282-706.31q6.38 6.62 6.38 14.16 0 7.53-6 14.15t-13.65 6.12q-7.65-.5-14.27-6.89Zm480.16 481.92L678-253.69q-6.38-6.62-6.38-14.27 0-7.66 6.38-14.04 5.23-6.62 13.08-6.12 7.84.5 14.46 6.89l57.61 55.85q5.85 5.61 5.73 13.76-.11 8.16-5.96 14.77-6.38 6.62-14.15 6.62-7.77 0-14.15-6.62ZM678-677.62q-6.62-6-6.12-13.65t6.89-14.27l55.85-57.61q5.61-5.85 13.76-5.73 8.16.11 14.77 5.96 6.62 6.38 6.62 14.15 0 7.77-6.62 14.15L706.31-678q-6.62 6.38-14.16 6.38-7.53 0-14.15-6ZM196.85-196.68q-6.62-6.78-6.62-14.55 0-7.77 6.62-14.15L253.69-282q6.62-6.38 14.27-6.38 7.66 0 14.04 6.38 5.85 5.23 5.35 13.08-.5 7.84-6.12 14.46l-55.85 57.61q-6.38 6.62-14.15 6.5-7.77-.11-14.38-6.33Z" /></svg> icon:theme_light = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-320q-66.85 0-113.42-46.58Q320-413.15 320-480t46.58-113.42Q413.15-640 480-640t113.42 46.58Q640-546.85 640-480t-46.58 113.42Q546.85-320 480-320ZM80-460q-8.5 0-14.25-5.76T60-480.03q0-8.51 5.75-14.24T80-500h100q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T180-460H80Zm700 0q-8.5 0-14.25-5.76T760-480.03q0-8.51 5.75-14.24T780-500h100q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T880-460H780ZM479.97-760q-8.51 0-14.24-5.75T460-780v-100q0-8.5 5.76-14.25t14.27-5.75q8.51 0 14.24 5.75T500-880v100q0 8.5-5.76 14.25T479.97-760Zm0 700q-8.51 0-14.24-5.75T460-80v-100q0-8.5 5.76-14.25t14.27-5.75q8.51 0 14.24 5.75T500-180v100q0 8.5-5.76 14.25T479.97-60ZM254.46-678.77l-57.61-55.85q-5.85-5.61-5.73-13.76.11-8.16 5.96-14.77 6.38-6.62 14.15-6.62 7.77 0 14.15 6.62L282-706.31q6.38 6.62 6.38 14.16 0 7.53-6 14.15t-13.65 6.12q-7.65-.5-14.27-6.89Zm480.16 481.92L678-253.69q-6.38-6.62-6.38-14.27 0-7.66 6.38-14.04 5.23-6.62 13.08-6.12 7.84.5 14.46 6.89l57.61 55.85q5.85 5.61 5.73 13.76-.11 8.16-5.96 14.77-6.38 6.62-14.15 6.62-7.77 0-14.15-6.62ZM678-677.62q-6.62-6-6.12-13.65t6.89-14.27l55.85-57.61q5.61-5.85 13.76-5.73 8.16.11 14.77 5.96 6.62 6.38 6.62 14.15 0 7.77-6.62 14.15L706.31-678q-6.62 6.38-14.16 6.38-7.53 0-14.15-6ZM196.85-196.68q-6.62-6.78-6.62-14.55 0-7.77 6.62-14.15L253.69-282q6.62-6.38 14.27-6.38 7.66 0 14.04 6.38 5.85 5.23 5.35 13.08-.5 7.84-6.12 14.46l-55.85 57.61q-6.38 6.62-14.15 6.5-7.77-.11-14.38-6.33Z" /></svg>
icon:theme_dark = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M482.31-160Q349-160 255.65-253.35 162.31-346.69 162.31-480q0-98.77 56.54-181.42 56.53-82.66 160.38-118.89 12.23-4.31 21.46-2.27 9.23 2.04 15.23 7.96 6 5.93 7.66 15.24 1.65 9.3-2.5 19.53-7.77 19.08-11.27 38.85-3.5 19.77-3.5 41 0 106.92 74.54 181.46Q555.38-404 662.31-404q27.92 0 51.11-5.92 23.2-5.93 39.5-9.62 8.7-1.61 15.96.42 7.27 2.04 11.66 7.04 4.61 5 6.27 12.31 1.65 7.31-1.89 16.69-28.61 98-112.11 160.54Q589.31-160 482.31-160Z" /></svg> icon:theme_dark = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M482.31-160Q349-160 255.65-253.35 162.31-346.69 162.31-480q0-98.77 56.54-181.42 56.53-82.66 160.38-118.89 12.23-4.31 21.46-2.27 9.23 2.04 15.23 7.96 6 5.93 7.66 15.24 1.65 9.3-2.5 19.53-7.77 19.08-11.27 38.85-3.5 19.77-3.5 41 0 106.92 74.54 181.46Q555.38-404 662.31-404q27.92 0 51.11-5.92 23.2-5.93 39.5-9.62 8.7-1.61 15.96.42 7.27 2.04 11.66 7.04 4.61 5 6.27 12.31 1.65 7.31-1.89 16.69-28.61 98-112.11 160.54Q589.31-160 482.31-160Z" /></svg>
icon:theme_auto = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480.13-120q-74.67 0-140.41-28.34-65.73-28.34-114.36-76.92-48.63-48.58-76.99-114.26Q120-405.19 120-479.87q0-74.67 28.34-140.41 28.34-65.73 76.92-114.36 48.58-48.63 114.26-76.99Q405.19-840 479.87-840q74.67 0 140.41 28.34 65.73 28.34 114.36 76.92 48.63 48.58 76.99 114.26Q840-554.81 840-480.13q0 74.67-28.34 140.41-28.34 65.73-76.92 114.36-48.58 48.63-114.26 76.99Q554.81-120 480.13-120ZM500-160.69q123.62-8.08 211.81-98.35T800-480q0-130.69-87.42-220.19-87.43-89.5-212.58-99.12v638.62Z" /></svg> icon:theme_auto = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480.13-120q-74.67 0-140.41-28.34-65.73-28.34-114.36-76.92-48.63-48.58-76.99-114.26Q120-405.19 120-479.87q0-74.67 28.34-140.41 28.34-65.73 76.92-114.36 48.58-48.63 114.26-76.99Q405.19-840 479.87-840q74.67 0 140.41 28.34 65.73 28.34 114.36 76.92 48.63 48.58 76.99 114.26Q840-554.81 840-480.13q0 74.67-28.34 140.41-28.34 65.73-76.92 114.36-48.58 48.63-114.26 76.99Q554.81-120 480.13-120ZM500-160.69q123.62-8.08 211.81-98.35T800-480q0-130.69-87.42-220.19-87.43-89.5-212.58-99.12v638.62Z" /></svg>
icon:btn_ok = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m422.46-380.31-99.84-99.84q-5.62-5.62-13.77-6-8.16-.39-14.54 6-6.39 6.38-6.39 14.15 0 7.77 6.39 14.15l105.54 105.54q9.69 9.69 22.61 9.69t22.62-9.69l219.07-219.07q5.62-5.62 6-13.77.39-8.16-6-14.54-6.38-6.39-14.15-6.39-7.77 0-14.15 6.39L422.46-380.31ZM480.13-120q-74.67 0-140.41-28.34-65.73-28.34-114.36-76.92-48.63-48.58-76.99-114.26Q120-405.19 120-479.87q0-74.67 28.34-140.41 28.34-65.73 76.92-114.36 48.58-48.63 114.26-76.99Q405.19-840 479.87-840q74.67 0 140.41 28.34 65.73 28.34 114.36 76.92 48.63 48.58 76.99 114.26Q840-554.81 840-480.13q0 74.67-28.34 140.41-28.34 65.73-76.92 114.36-48.58 48.63-114.26 76.99Q554.81-120 480.13-120Z" /></svg>
icon:btn_cancel = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m480-451.69 129.85 129.84q5.61 5.62 13.77 6 8.15.39 14.53-6 6.39-6.38 6.39-14.15 0-7.77-6.39-14.15L508.31-480l129.84-129.85q5.62-5.61 6-13.77.39-8.15-6-14.53-6.38-6.39-14.15-6.39-7.77 0-14.15 6.39L480-508.31 350.15-638.15q-5.61-5.62-13.77-6-8.15-.39-14.53 6-6.39 6.38-6.39 14.15 0 7.77 6.39 14.15L451.69-480 321.85-350.15q-5.62 5.61-6 13.77-.39 8.15 6 14.53 6.38 6.39 14.15 6.39 7.77 0 14.15-6.39L480-451.69Zm.13 331.69q-74.67 0-140.41-28.34-65.73-28.34-114.36-76.92-48.63-48.58-76.99-114.26Q120-405.19 120-479.87q0-74.67 28.34-140.41 28.34-65.73 76.92-114.36 48.58-48.63 114.26-76.99Q405.19-840 479.87-840q74.67 0 140.41 28.34 65.73 28.34 114.36 76.92 48.63 48.58 76.99 114.26Q840-554.81 840-480.13q0 74.67-28.34 140.41-28.34 65.73-76.92 114.36-48.58 48.63-114.26 76.99Q554.81-120 480.13-120Z" /></svg>
icon:btn_yes = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m422.46-380.31-99.84-99.84q-5.62-5.62-13.77-6-8.16-.39-14.54 6-6.39 6.38-6.39 14.15 0 7.77 6.39 14.15l105.54 105.54q9.69 9.69 22.61 9.69t22.62-9.69l219.07-219.07q5.62-5.62 6-13.77.39-8.16-6-14.54-6.38-6.39-14.15-6.39-7.77 0-14.15 6.39L422.46-380.31ZM480.13-120q-74.67 0-140.41-28.34-65.73-28.34-114.36-76.92-48.63-48.58-76.99-114.26Q120-405.19 120-479.87q0-74.67 28.34-140.41 28.34-65.73 76.92-114.36 48.58-48.63 114.26-76.99Q405.19-840 479.87-840q74.67 0 140.41 28.34 65.73 28.34 114.36 76.92 48.63 48.58 76.99 114.26Q840-554.81 840-480.13q0 74.67-28.34 140.41-28.34 65.73-76.92 114.36-48.58 48.63-114.26 76.99Q554.81-120 480.13-120Z" /></svg>
icon:btn_no = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M320-460h320q8.5 0 14.25-5.76t5.75-14.27q0-8.51-5.75-14.24T640-500H320q-8.5 0-14.25 5.76T300-479.97q0 8.51 5.75 14.24T320-460Zm160.13 340q-74.67 0-140.41-28.34-65.73-28.34-114.36-76.92-48.63-48.58-76.99-114.26Q120-405.19 120-479.87q0-74.67 28.34-140.41 28.34-65.73 76.92-114.36 48.58-48.63 114.26-76.99Q405.19-840 479.87-840q74.67 0 140.41 28.34 65.73 28.34 114.36 76.92 48.63 48.58 76.99 114.26Q840-554.81 840-480.13q0 74.67-28.34 140.41-28.34 65.73-76.92 114.36-48.58 48.63-114.26 76.99Q554.81-120 480.13-120Z" /></svg>
icon:btn_open = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M224.62-160q-27.62 0-46.12-18.5Q160-197 160-224.62v-510.76q0-27.62 18.5-46.12Q197-800 224.62-800h204.61q8.54 0 14.27 5.73t5.73 14.27q0 8.54-5.73 14.27T429.23-760H224.62q-9.24 0-16.93 7.69-7.69 7.69-7.69 16.93v510.76q0 9.24 7.69 16.93 7.69 7.69 16.93 7.69h510.76q9.24 0 16.93-7.69 7.69-7.69 7.69-16.93v-204.61q0-8.54 5.73-14.27t14.27-5.73q8.54 0 14.27 5.73t5.73 14.27v204.61q0 27.62-18.5 46.12Q763-160 735.38-160H224.62ZM760-731.69 403.69-375.38q-5.61 5.61-13.77 6-8.15.38-14.54-6-6.38-6.39-6.38-14.16 0-7.77 6.38-14.15L731.69-760H580q-8.54 0-14.27-5.73T560-780q0-8.54 5.73-14.27T580-800h187.69q13.93 0 23.12 9.19 9.19 9.19 9.19 23.12V-580q0 8.54-5.73 14.27T780-560q-8.54 0-14.27-5.73T760-580v-151.69Z" /></svg>
icon:btn_close = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m480-451.69 129.85 129.84q5.61 5.62 13.77 6 8.15.39 14.53-6 6.39-6.38 6.39-14.15 0-7.77-6.39-14.15L508.31-480l129.84-129.85q5.62-5.61 6-13.77.39-8.15-6-14.53-6.38-6.39-14.15-6.39-7.77 0-14.15 6.39L480-508.31 350.15-638.15q-5.61-5.62-13.77-6-8.15-.39-14.53 6-6.39 6.38-6.39 14.15 0 7.77 6.39 14.15L451.69-480 321.85-350.15q-5.62 5.61-6 13.77-.39 8.15 6 14.53 6.38 6.39 14.15 6.39 7.77 0 14.15-6.39L480-451.69Zm.13 331.69q-74.67 0-140.41-28.34-65.73-28.34-114.36-76.92-48.63-48.58-76.99-114.26Q120-405.19 120-479.87q0-74.67 28.34-140.41 28.34-65.73 76.92-114.36 48.58-48.63 114.26-76.99Q405.19-840 479.87-840q74.67 0 140.41 28.34 65.73 28.34 114.36 76.92 48.63 48.58 76.99 114.26Q840-554.81 840-480.13q0 74.67-28.34 140.41-28.34 65.73-76.92 114.36-48.58 48.63-114.26 76.99Q554.81-120 480.13-120Z" /></svg>
icon:btn_save = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m697.38-171.08-94.76-94.77q-5.62-5.36-5.62-13.64 0-8.28 5.62-13.89 5.61-5.62 13.38-6 7.77-.39 13.38 5.23L700-223.54V-399q0-8.5 5.76-14.25t14.27-5.75q8.51 0 14.24 5.75T740-399v175.46l70.62-70.61q5.35-5.62 13.64-5.62 8.28 0 13.89 5.62 5.62 5.61 5.62 13.89 0 8.29-5.62 13.64l-95.53 95.54q-9.7 9.7-22.62 9.7-12.92 0-22.62-9.7ZM600-20q-8.5 0-14.25-5.76T580-40.03q0-8.51 5.75-14.24T600-60h240q8.5 0 14.25 5.76T860-39.97q0 8.51-5.75 14.24T840-20H600ZM244.62-180q-26.08 0-45.35-19.27Q180-218.54 180-244.62v-550.76q0-26.08 19.27-45.35Q218.54-860 244.62-860h248.53q13.27 0 25.29 5.23t20.71 13.92l181.7 181.7q8.69 8.69 13.92 20.71 5.23 12.02 5.23 25.29v66.46q0 13.73-9.29 23.02t-23.02 9.29H549.23q-26.65 0-45.63 18.98-18.98 18.98-18.98 45.63v237.46q0 13.73-9.29 23.02T452.31-180H244.62Zm303.84-440H700L500-820l200 200-200-200v151.54q0 20.19 14.13 34.33Q528.27-620 548.46-620Z" /></svg>
icon:btn_browse = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M180-200q-25.31 0-42.65-17.35Q120-234.69 120-260v-435.38q0-25.31 19.65-44.97Q159.31-760 184.62-760H357q12.92 0 25.12 5.23 12.19 5.23 20.88 13.92L463.85-680h349.23q8.54 0 14.27 5.73t5.73 14.27q0 8.54-5.73 14.27T813.08-640H297.85Q242-640 201-604.08q-41 35.93-41 90.54v248.92q0 8.47 4.23 13.85 4.23 5.39 11.15 9.23l76.7-256.84q6.46-20.62 23.73-33.43 17.27-12.81 38.65-12.81h512.92q32.54 0 52.2 25.97 19.65 25.96 10.19 57.03l-65.85 219.24q-5.69 19.07-21.8 30.73Q786-200 766.15-200H180Z" /></svg>
icon:btn_list = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M404.62-220q-8.5 0-14.25-5.76t-5.75-14.27q0-8.51 5.75-14.24t14.25-5.73H780q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T780-220H404.62Zm0-240q-8.5 0-14.25-5.76t-5.75-14.27q0-8.51 5.75-14.24t14.25-5.73H780q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T780-460H404.62Zm0-240q-8.5 0-14.25-5.76t-5.75-14.27q0-8.51 5.75-14.24t14.25-5.73H780q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T780-700H404.62ZM213.08-186.92q-21.9 0-37.49-15.59Q160-218.11 160-240t15.59-37.49q15.59-15.59 37.49-15.59 21.89 0 37.48 15.59 15.59 15.6 15.59 37.49t-15.59 37.49q-15.59 15.59-37.48 15.59Zm0-240q-21.9 0-37.49-15.59Q160-458.11 160-480t15.59-37.49q15.59-15.59 37.49-15.59 21.89 0 37.48 15.59 15.59 15.6 15.59 37.49t-15.59 37.49q-15.59 15.59-37.48 15.59Zm0-240q-21.9 0-37.49-15.59Q160-698.11 160-720t15.59-37.49q15.59-15.59 37.49-15.59 21.89 0 37.48 15.59 15.59 15.6 15.59 37.49t-15.59 37.49q-15.59 15.59-37.48 15.59Z" /></svg>
icon:btn_new = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M224.62-160q-27.62 0-46.12-18.5Q160-197 160-224.62v-510.76q0-27.62 18.5-46.12Q197-800 224.62-800h180q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T404.62-760h-180q-9.24 0-16.93 7.69-7.69 7.69-7.69 16.93v510.76q0 9.24 7.69 16.93 7.69 7.69 16.93 7.69h510.76q9.24 0 16.93-7.69 7.69-7.69 7.69-16.93v-180q0-8.5 5.76-14.25t14.27-5.75q8.51 0 14.24 5.75t5.73 14.25v180q0 27.62-18.5 46.12Q763-160 735.38-160H224.62ZM640-640H540q-8.5 0-14.25-5.76T520-660.03q0-8.51 5.75-14.24T540-680h100v-100q0-8.5 5.76-14.25t14.27-5.75q8.51 0 14.24 5.75T680-780v100h100q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T780-640H680v100q0 8.5-5.76 14.25T659.97-520q-8.51 0-14.24-5.75T640-540v-100Z" /></svg>
icon:btn_create = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m480-315.92-145.23 87.69q-6.39 3.15-11.85 2.54-5.46-.62-10.61-3.77-5.16-3.16-7.85-9.04-2.69-5.88-.46-12.73l38.62-164.39-127.77-110.84q-5.39-4.39-7.12-10.5-1.73-6.12.73-11.73 2.46-5.62 6.62-9.16 4.15-3.53 11.23-4.77l168.61-14.69L460.69-733q2.69-6.62 7.81-9.54 5.12-2.92 11.5-2.92t11.5 2.92q5.12 2.92 7.81 9.54l65.77 155.69 168.61 14.69q7.08 1.24 11.23 4.77 4.16 3.54 6.62 9.16 2.46 5.61.73 11.73-1.73 6.11-7.12 10.5L617.38-415.62 656-251.23q2.23 6.85-.46 12.73-2.69 5.88-7.85 9.04-5.15 3.15-10.61 3.77-5.46.61-11.85-2.54L480-315.92Z" /></svg>
icon:btn_reset = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M316.15-240q-8.53 0-14.27-5.73-5.73-5.73-5.73-14.27t5.73-14.27q5.74-5.73 14.27-5.73h270.16q62.23 0 106.04-42.69 43.8-42.69 43.8-104.23 0-61.54-43.8-103.85-43.81-42.31-106.04-42.31H276.62l104.46 104.46q6.38 6.39 6.38 14.16 0 7.77-6.38 14.15-6.39 6.39-14.54 6-8.16-.38-13.77-6L222.62-570.46q-5.24-5.23-7.35-10.69-2.12-5.47-2.12-11.93t2.12-11.92q2.11-5.46 7.35-10.69l130.15-130.16q6.38-6.38 14.15-6.38 7.77 0 14.16 6.38 6.38 6.39 6 14.54-.39 8.16-6 13.77L276.62-613.08h309.69q78.54 0 134.19 54.16 55.65 54.15 55.65 132 0 77.84-55.65 132.38Q664.85-240 586.31-240H316.15Z" /></svg>
icon:btn_insert = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M460-600H360q-8.5 0-14.25-5.76T340-620.03q0-8.51 5.75-14.24T360-640h240q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T600-600H500v260q0 8.5-5.76 14.25T479.97-320q-8.51 0-14.24-5.75T460-340v-260ZM95.38-127.69v-104.62q0-13.73 9.29-23.02t23.02-9.29H160v-430.76h-32.44q-13.79 0-22.98-9.29-9.2-9.29-9.2-23.02v-104.62q0-13.73 9.29-23.02t23.02-9.29h104.62q13.73 0 23.02 9.29t9.29 23.02V-800h430.76v-32.44q0-13.79 9.29-22.98 9.29-9.2 23.02-9.2h104.62q13.73 0 23.02 9.29t9.29 23.02v104.62q0 13.73-9.29 23.02t-23.02 9.29H800v430.76h32.44q13.79 0 22.98 9.29 9.2 9.29 9.2 23.02v104.62q0 13.73-9.29 23.02t-23.02 9.29H727.69q-13.73 0-23.02-9.29t-9.29-23.02V-160H264.62v32.44q0 13.79-9.29 22.98-9.29 9.2-23.02 9.2H127.69q-13.73 0-23.02-9.29t-9.29-23.02ZM264.62-200h430.76v-32.44q0-13.79 9.29-22.98 9.29-9.2 23.02-9.2H760v-430.76h-32.44q-13.79 0-22.98-9.29-9.2-9.29-9.2-23.02V-760H264.62v32.44q0 13.79-9.29 22.98-9.29 9.2-23.02 9.2H200v430.76h32.44q13.79 0 22.98 9.29 9.2 9.29 9.2 23.02V-200Z" /></svg>
icon:btn_apply = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m424-396.31-99.85-99.84q-5.61-5.62-13.77-6-8.15-.39-14.53 6-6.39 6.38-6.39 14.15 0 7.77 6.39 14.15l105.53 105.54q9.7 9.69 22.62 9.69 12.92 0 22.62-9.69l219.07-219.07q5.62-5.62 6-13.77.39-8.16-6-14.54-6.38-6.39-14.15-6.39-7.77 0-14.16 6.39L424-396.31ZM224.62-160q-27.62 0-46.12-18.5Q160-197 160-224.62v-510.76q0-27.62 18.5-46.12Q197-800 224.62-800h510.76q27.62 0 46.12 18.5Q800-763 800-735.38v510.76q0 27.62-18.5 46.12Q763-160 735.38-160H224.62Z" /></svg>
icon:btn_build = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M763.85-257.38V-190q0 6.15 4.61 10.77 4.62 4.61 10.77 4.61 6.15 0 10.77-4.61 4.62-4.62 4.62-10.77v-103.85q0-6.46-4.85-11.3-4.85-4.85-11.31-4.85H674.62q-6.16 0-10.77 4.62-4.62 4.61-4.62 10.76 0 6.16 4.62 10.77 4.61 4.62 10.77 4.62H742l-90.31 90.31q-4.46 4.46-4.84 10.54-.39 6.07 4.84 11.3 4.74 4.46 11.07 4.46 6.32 0 10.78-4.46l90.31-90.3ZM720-75.38q-66.85 0-113.42-46.58Q560-168.54 560-235.38q0-66.85 46.58-113.43 46.57-46.57 113.42-46.57t113.42 46.57Q880-302.23 880-235.38q0 66.84-46.58 113.42Q786.85-75.38 720-75.38ZM320-610.77h320q8.5 0 14.25-5.76 5.75-5.75 5.75-14.27 0-8.51-5.75-14.24T640-650.77H320q-8.5 0-14.25 5.76T300-630.74q0 8.51 5.75 14.24t14.25 5.73ZM224.62-160q-26.66 0-45.64-18.98T160-224.62v-510.76q0-26.66 18.98-45.64T224.62-800h510.76q26.66 0 45.64 18.98T800-735.38v200.3q0 15.09-11.15 23.47-11.16 8.38-25.85 5.46-10.08-2.7-20.95-3.66-10.88-.96-22.05-.96-20.23 0-39.35 3.19-19.11 3.2-37.57 9.04-4.5-.97-10-1.22-5.5-.24-10-.24H320q-8.5 0-14.25 5.76T300-479.97q0 8.51 5.75 14.24T320-460h243.46q-30.31 20.85-53.27 48.92-22.96 28.08-37.81 61.85H320q-8.5 0-14.25 5.76-5.75 5.75-5.75 14.27 0 8.51 5.75 14.24t14.25 5.73h138.38q-4.3 16.92-6.73 34.11-2.42 17.2-2.42 35.12 0 10 .46 21.08.46 11.07 2.39 22.69 1.92 13.92-6.21 25.08Q437.74-160 423.92-160h-199.3Z" /></svg>
icon:btn_print = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M344.62-160q-26.66 0-45.64-18.98T280-224.62V-320h-72.31q-26.65 0-45.63-18.98-18.98-18.98-18.98-45.64v-150.76q0-34 23.07-57 23.08-23 56.93-23h513.84q34 0 57 23t23 57v150.76q0 26.66-18.98 45.64T752.31-320H680v95.38q0 26.66-18.98 45.64T615.38-160H344.62ZM680-646.15H280v-64.76q0-26.71 18.98-45.59 18.98-18.89 45.64-18.89h270.76q26.66 0 45.64 18.99Q680-737.42 680-710.77v64.62Zm24.62 170.77q17 0 28.5-11.5t11.5-28.5q0-17-11.5-28.5t-28.5-11.5q-17 0-28.5 11.5t-11.5 28.5q0 17 11.5 28.5t28.5 11.5ZM344.62-200h270.76q10.77 0 17.7-6.92 6.92-6.93 6.92-17.7v-132.3q0-10.77-6.92-17.7-6.93-6.92-17.7-6.92H344.62q-10.77 0-17.7 6.92-6.92 6.93-6.92 17.7v132.3q0 10.77 6.92 17.7 6.93 6.92 17.7 6.92Z" /></svg>
icon:btn_preview = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M224.62-160q-26.66 0-45.64-18.98T160-224.62v-510.76q0-26.66 18.98-45.64T224.62-800h510.76q26.66 0 45.64 18.98T800-735.38v510.76q0 26.66-18.98 45.64T735.38-160H224.62Zm0-40h510.76q10.77 0 17.7-6.92 6.92-6.93 6.92-17.7V-680H200v455.38q0 10.77 6.92 17.7 6.93 6.92 17.7 6.92ZM480-320q-65.08 0-117.27-33.35-52.19-33.34-78.88-86.65 26.69-53.31 78.88-86.65Q414.92-560 480-560t117.27 33.35q52.19 33.34 78.88 86.65-26.69 53.31-78.88 86.65Q545.08-320 480-320Zm-.18-75.38q-18.67 0-31.55-13.07-12.89-13.07-12.89-31.73 0-18.67 13.07-31.55 13.07-12.89 31.73-12.89 18.67 0 31.55 13.07 12.89 13.07 12.89 31.73 0 18.67-13.07 31.55-13.07 12.89-31.73 12.89Zm.18 30.76q31.23 0 53.31-22.07 22.07-22.08 22.07-53.31 0-31.23-22.07-53.31-22.08-22.07-53.31-22.07-31.23 0-53.31 22.07-22.07 22.08-22.07 53.31 0 31.23 22.07 53.31 22.08 22.07 53.31 22.07Z" /></svg>
icon:add = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M460-460H260q-8.5 0-14.25-5.76T240-480.03q0-8.51 5.75-14.24T260-500h200v-200q0-8.5 5.76-14.25t14.27-5.75q8.51 0 14.24 5.75T500-700v200h200q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T700-460H500v200q0 8.5-5.76 14.25T479.97-240q-8.51 0-14.24-5.75T460-260v-200Z" /></svg> icon:add = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M460-460H260q-8.5 0-14.25-5.76T240-480.03q0-8.51 5.75-14.24T260-500h200v-200q0-8.5 5.76-14.25t14.27-5.75q8.51 0 14.24 5.75T500-700v200h200q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T700-460H500v200q0 8.5-5.76 14.25T479.97-240q-8.51 0-14.24-5.75T460-260v-200Z" /></svg>
icon:bookmarks = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m420-203.08-149.54 64.31q-32.31 13.92-61.38-5.35Q180-163.38 180-197.92v-457.46q0-27.62 18.5-46.12Q217-720 244.62-720h350.76q27.62 0 46.12 18.5Q660-683 660-655.38v457.46q0 34.54-29.08 53.8-29.07 19.27-61.38 5.35L420-203.08ZM760-220q-8.54 0-14.27-5.73T740-240v-535.39q0-9.23-7.69-16.92-7.69-7.69-16.93-7.69H320q-8.54 0-14.27-5.73T300-820q0-8.54 5.73-14.27T320-840h395.38q27.62 0 46.12 18.5Q780-803 780-775.39V-240q0 8.54-5.73 14.27T760-220Z" /></svg> icon:bookmarks = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m420-203.08-149.54 64.31q-32.31 13.92-61.38-5.35Q180-163.38 180-197.92v-457.46q0-27.62 18.5-46.12Q217-720 244.62-720h350.76q27.62 0 46.12 18.5Q660-683 660-655.38v457.46q0 34.54-29.08 53.8-29.07 19.27-61.38 5.35L420-203.08ZM760-220q-8.54 0-14.27-5.73T740-240v-535.39q0-9.23-7.69-16.92-7.69-7.69-16.93-7.69H320q-8.54 0-14.27-5.73T300-820q0-8.54 5.73-14.27T320-840h395.38q27.62 0 46.12 18.5Q780-803 780-775.39V-240q0 8.54-5.73 14.27T760-220Z" /></svg>
icon:browse = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M180-200q-25.31 0-42.65-17.35Q120-234.69 120-260v-435.38q0-25.31 19.65-44.97Q159.31-760 184.62-760H357q12.92 0 25.12 5.23 12.19 5.23 20.88 13.92L463.85-680h349.23q8.54 0 14.27 5.73t5.73 14.27q0 8.54-5.73 14.27T813.08-640H297.85Q242-640 201-604.08q-41 35.93-41 90.54v248.92q0 8.47 4.23 13.85 4.23 5.39 11.15 9.23l76.7-256.84q6.46-20.62 23.73-33.43 17.27-12.81 38.65-12.81h512.92q32.54 0 52.2 25.97 19.65 25.96 10.19 57.03l-65.85 219.24q-5.69 19.07-21.8 30.73Q786-200 766.15-200H180Z" /></svg> icon:browse = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M180-200q-25.31 0-42.65-17.35Q120-234.69 120-260v-435.38q0-25.31 19.65-44.97Q159.31-760 184.62-760H357q12.92 0 25.12 5.23 12.19 5.23 20.88 13.92L463.85-680h349.23q8.54 0 14.27 5.73t5.73 14.27q0 8.54-5.73 14.27T813.08-640H297.85Q242-640 201-604.08q-41 35.93-41 90.54v248.92q0 8.47 4.23 13.85 4.23 5.39 11.15 9.23l76.7-256.84q6.46-20.62 23.73-33.43 17.27-12.81 38.65-12.81h512.92q32.54 0 52.2 25.97 19.65 25.96 10.19 57.03l-65.85 219.24q-5.69 19.07-21.8 30.73Q786-200 766.15-200H180Z" /></svg>
@@ -94,7 +111,6 @@ icon:minimise = <svg xmlns="http://www.w3.org/2000/svg" height="128" view
icon:more_arrow = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M436.4-350.31q-6.71 0-11.55-4.44-4.85-4.44-4.85-11.71v-227.08q0-7.27 4.95-11.71 4.95-4.44 11.55-4.44 1.65 0 11.35 5.23l107.07 107.08q3.7 3.69 5.7 7.97 2 4.28 2 9.41t-2 9.41q-2 4.28-5.7 7.98L447.83-355.52q-2.21 2.21-5.15 3.71-2.93 1.5-6.28 1.5Z" /></svg> icon:more_arrow = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M436.4-350.31q-6.71 0-11.55-4.44-4.85-4.44-4.85-11.71v-227.08q0-7.27 4.95-11.71 4.95-4.44 11.55-4.44 1.65 0 11.35 5.23l107.07 107.08q3.7 3.69 5.7 7.97 2 4.28 2 9.41t-2 9.41q-2 4.28-5.7 7.98L447.83-355.52q-2.21 2.21-5.15 3.71-2.93 1.5-6.28 1.5Z" /></svg>
icon:more_vertical = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-218.46q-16.5 0-28.25-11.75T440-258.46q0-16.5 11.75-28.25T480-298.46q16.5 0 28.25 11.75T520-258.46q0 16.5-11.75 28.25T480-218.46ZM480-440q-16.5 0-28.25-11.75T440-480q0-16.5 11.75-28.25T480-520q16.5 0 28.25 11.75T520-480q0 16.5-11.75 28.25T480-440Zm0-221.54q-16.5 0-28.25-11.75T440-701.54q0-16.5 11.75-28.25T480-741.54q16.5 0 28.25 11.75T520-701.54q0 16.5-11.75 28.25T480-661.54Z" /></svg> icon:more_vertical = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-218.46q-16.5 0-28.25-11.75T440-258.46q0-16.5 11.75-28.25T480-298.46q16.5 0 28.25 11.75T520-258.46q0 16.5-11.75 28.25T480-218.46ZM480-440q-16.5 0-28.25-11.75T440-480q0-16.5 11.75-28.25T480-520q16.5 0 28.25 11.75T520-480q0 16.5-11.75 28.25T480-440Zm0-221.54q-16.5 0-28.25-11.75T440-701.54q0-16.5 11.75-28.25T480-741.54q16.5 0 28.25 11.75T520-701.54q0 16.5-11.75 28.25T480-661.54Z" /></svg>
icon:noncheckable = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M320-460h320q8.54 0 14.27-5.73T660-480q0-8.54-5.73-14.27T640-500H320q-8.54 0-14.27 5.73T300-480q0 8.54 5.73 14.27T320-460Zm-95.38 300q-27.62 0-46.12-18.5Q160-197 160-224.62v-510.76q0-27.62 18.5-46.12Q197-800 224.62-800h510.76q27.62 0 46.12 18.5Q800-763 800-735.38v510.76q0 27.62-18.5 46.12Q763-160 735.38-160H224.62Z" /></svg> icon:noncheckable = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M320-460h320q8.54 0 14.27-5.73T660-480q0-8.54-5.73-14.27T640-500H320q-8.54 0-14.27 5.73T300-480q0 8.54 5.73 14.27T320-460Zm-95.38 300q-27.62 0-46.12-18.5Q160-197 160-224.62v-510.76q0-27.62 18.5-46.12Q197-800 224.62-800h510.76q27.62 0 46.12 18.5Q800-763 800-735.38v510.76q0 27.62-18.5 46.12Q763-160 735.38-160H224.62Z" /></svg>
icon:open = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M224.62-160q-27.62 0-46.12-18.5Q160-197 160-224.62v-510.76q0-27.62 18.5-46.12Q197-800 224.62-800h204.61q8.54 0 14.27 5.73t5.73 14.27q0 8.54-5.73 14.27T429.23-760H224.62q-9.24 0-16.93 7.69-7.69 7.69-7.69 16.93v510.76q0 9.24 7.69 16.93 7.69 7.69 16.93 7.69h510.76q9.24 0 16.93-7.69 7.69-7.69 7.69-16.93v-204.61q0-8.54 5.73-14.27t14.27-5.73q8.54 0 14.27 5.73t5.73 14.27v204.61q0 27.62-18.5 46.12Q763-160 735.38-160H224.62ZM760-731.69 403.69-375.38q-5.61 5.61-13.77 6-8.15.38-14.54-6-6.38-6.39-6.38-14.16 0-7.77 6.38-14.15L731.69-760H580q-8.54 0-14.27-5.73T560-780q0-8.54 5.73-14.27T580-800h187.69q13.93 0 23.12 9.19 9.19 9.19 9.19 23.12V-580q0 8.54-5.73 14.27T780-560q-8.54 0-14.27-5.73T760-580v-151.69Z" /></svg>
icon:panel = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M224.62-160q-26.85 0-45.74-18.88Q160-197.77 160-224.62v-510.76q0-26.85 18.88-45.74Q197.77-800 224.62-800h510.76q26.85 0 45.74 18.88Q800-762.23 800-735.38v510.76q0 26.85-18.88 45.74Q762.23-160 735.38-160H224.62ZM200-360h560v-375.38q0-9.24-7.69-16.93-7.69-7.69-16.93-7.69H224.62q-9.24 0-16.93 7.69-7.69 7.69-7.69 16.93V-360Z" /></svg> icon:panel = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M224.62-160q-26.85 0-45.74-18.88Q160-197.77 160-224.62v-510.76q0-26.85 18.88-45.74Q197.77-800 224.62-800h510.76q26.85 0 45.74 18.88Q800-762.23 800-735.38v510.76q0 26.85-18.88 45.74Q762.23-160 735.38-160H224.62ZM200-360h560v-375.38q0-9.24-7.69-16.93-7.69-7.69-16.93-7.69H224.62q-9.24 0-16.93 7.69-7.69 7.69-7.69 16.93V-360Z" /></svg>
icon:pin = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M600-760v296.92l57.23 57.23q2.92 2.93 4.39 6.58 1.46 3.65 1.46 7.55v11.21q0 8.28-5.97 14.39-5.98 6.12-14.8 6.12H500v186.61q0 6.7-2.23 12.28-2.23 5.57-7.46 10.8l-3.23 3.23q-3.07 2.93-7.15 2.93t-7.01-2.93l-3.23-3.23q-5.23-5.23-7.46-10.97-2.23-5.75-2.23-11.87V-360H317.69q-8.82 0-14.8-6.12-5.97-6.11-5.97-14.39v-11.21q0-3.9 1.46-7.55 1.47-3.65 4.39-6.58L360-463.08V-760h-20q-8.5 0-14.25-5.76T320-780.03q0-8.51 5.75-14.24T340-800h280q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T620-760h-20Z" /></svg> icon:pin = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M600-760v296.92l57.23 57.23q2.92 2.93 4.39 6.58 1.46 3.65 1.46 7.55v11.21q0 8.28-5.97 14.39-5.98 6.12-14.8 6.12H500v186.61q0 6.7-2.23 12.28-2.23 5.57-7.46 10.8l-3.23 3.23q-3.07 2.93-7.15 2.93t-7.01-2.93l-3.23-3.23q-5.23-5.23-7.46-10.97-2.23-5.75-2.23-11.87V-360H317.69q-8.82 0-14.8-6.12-5.97-6.11-5.97-14.39v-11.21q0-3.9 1.46-7.55 1.47-3.65 4.39-6.58L360-463.08V-760h-20q-8.5 0-14.25-5.76T320-780.03q0-8.51 5.75-14.24T340-800h280q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T620-760h-20Z" /></svg>
icon:project_copy = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M144.62-169.23q-26.66 0-45.64-18.98T80-233.85v-423.07q0-8.5 5.76-14.25t14.27-5.75q8.51 0 14.24 5.75t5.73 14.25v423.07q0 10.77 6.92 17.7 6.93 6.92 17.7 6.92H740q8.5 0 14.25 5.76 5.75 5.75 5.75 14.27 0 8.51-5.75 14.24T740-169.23H144.62Zm120-120q-26.66 0-45.64-18.98T200-353.85v-421.53q0-26.66 18.98-45.64T264.62-840h171.61q13.27 0 25.29 5.23t20.71 13.92L543.08-760h272.3q26.66 0 45.64 18.98T880-695.38v341.53q0 26.66-18.98 45.64t-45.64 18.98H264.62Z" /></svg> icon:project_copy = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M144.62-169.23q-26.66 0-45.64-18.98T80-233.85v-423.07q0-8.5 5.76-14.25t14.27-5.75q8.51 0 14.24 5.75t5.73 14.25v423.07q0 10.77 6.92 17.7 6.93 6.92 17.7 6.92H740q8.5 0 14.25 5.76 5.75 5.75 5.75 14.27 0 8.51-5.75 14.24T740-169.23H144.62Zm120-120q-26.66 0-45.64-18.98T200-353.85v-421.53q0-26.66 18.98-45.64T264.62-840h171.61q13.27 0 25.29 5.23t20.71 13.92L543.08-760h272.3q26.66 0 45.64 18.98T880-695.38v341.53q0 26.66-18.98 45.64t-45.64 18.98H264.62Z" /></svg>
@@ -103,7 +119,6 @@ icon:refresh = <svg xmlns="http://www.w3.org/2000/svg" height="128" view
icon:remove = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M260-460q-8.5 0-14.25-5.76T240-480.03q0-8.51 5.75-14.24T260-500h440q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T700-460H260Z" /></svg> icon:remove = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M260-460q-8.5 0-14.25-5.76T240-480.03q0-8.51 5.75-14.24T260-500h440q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T700-460H260Z" /></svg>
icon:revert = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M478.46-160q-115.23 0-202.61-71.12Q188.46-302.23 165.62-412q-2.47-8.85 2.6-16.37 5.06-7.53 13.68-8.73 8.1-1.21 14.56 3.72 6.46 4.92 9.16 14Q227.31-324 303.46-262q76.16 62 175 62 117 0 198.5-81.5t81.5-198.5q0-117-81.5-198.5T478.46-760q-62.08 0-116.69 26.23-54.62 26.23-96.39 72.23h79.24q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24t-14.25 5.73H230.77q-13.73 0-23.02-9.29t-9.29-23.02v-113.84q0-8.5 5.76-14.25t14.27-5.75q8.51 0 14.24 5.75t5.73 14.25v75.54q46.39-50.93 108.73-79.39Q409.54-800 478.46-800q66.6 0 124.76 25.04 58.16 25.04 101.66 68.54 43.5 43.5 68.54 101.65 25.04 58.14 25.04 124.73 0 66.58-25.04 124.77t-68.54 101.69q-43.5 43.5-101.66 68.54Q545.06-160 478.46-160Zm0-280q-16.08 0-28.04-11.96T438.46-480q0-16.08 11.96-28.04T478.46-520q16.08 0 28.04 11.96T518.46-480q0 16.08-11.96 28.04T478.46-440Z" /></svg> icon:revert = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M478.46-160q-115.23 0-202.61-71.12Q188.46-302.23 165.62-412q-2.47-8.85 2.6-16.37 5.06-7.53 13.68-8.73 8.1-1.21 14.56 3.72 6.46 4.92 9.16 14Q227.31-324 303.46-262q76.16 62 175 62 117 0 198.5-81.5t81.5-198.5q0-117-81.5-198.5T478.46-760q-62.08 0-116.69 26.23-54.62 26.23-96.39 72.23h79.24q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24t-14.25 5.73H230.77q-13.73 0-23.02-9.29t-9.29-23.02v-113.84q0-8.5 5.76-14.25t14.27-5.75q8.51 0 14.24 5.75t5.73 14.25v75.54q46.39-50.93 108.73-79.39Q409.54-800 478.46-800q66.6 0 124.76 25.04 58.16 25.04 101.66 68.54 43.5 43.5 68.54 101.65 25.04 58.14 25.04 124.73 0 66.58-25.04 124.77t-68.54 101.69q-43.5 43.5-101.66 68.54Q545.06-160 478.46-160Zm0-280q-16.08 0-28.04-11.96T438.46-480q0-16.08 11.96-28.04T478.46-520q16.08 0 28.04 11.96T518.46-480q0 16.08-11.96 28.04T478.46-440Z" /></svg>
icon:settings = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M438.38-120q-13.92 0-24.19-9.15-10.27-9.16-12.73-22.85l-10.54-83.69q-19.15-5.77-41.42-18.16-22.27-12.38-37.88-26.53L235-247.46q-12.69 5.61-25.77 1.23-13.08-4.39-20.15-16.62l-43.16-74.3q-7.07-12.23-4.15-25.54 2.92-13.31 13.92-21.85l66.85-50q-1.77-10.84-2.92-22.34-1.16-11.5-1.16-22.35 0-10.08 1.16-21.19 1.15-11.12 2.92-25.04l-66.85-50q-11-8.54-13.54-22.23-2.53-13.69 4.54-25.93l42.39-72q7.07-11.46 20.15-16.23 13.08-4.77 25.77.85l75.85 32.15q17.92-14.92 38.77-26.92 20.84-12 40.53-18.54L401.46-808q2.46-13.69 12.73-22.85 10.27-9.15 24.19-9.15h83.24q13.92 0 24.19 9.15 10.27 9.16 12.73 22.85l10.54 84.46q23 8.08 40.65 18.54 17.65 10.46 36.35 26.15L725.77-711q12.69-5.62 25.77-.85 13.08 4.77 20.15 16.23l42.39 72.77q7.07 12.23 4.15 25.54-2.92 13.31-13.92 21.85l-69.93 52.31q3.31 12.38 3.7 22.73.38 10.34.38 20.42 0 9.31-.77 19.65-.77 10.35-3.54 25.04l67.62 50.77q11 8.54 14.31 21.85 3.3 13.31-3.77 25.54l-42.62 73.53q-7.07 12.24-20.54 16.62-13.46 4.38-26.15-1.23l-76.92-32.92q-18.7 15.69-37.62 26.92-18.92 11.23-39.38 17.77L558.54-152q-2.46 13.69-12.73 22.85-10.27 9.15-24.19 9.15h-83.24Zm40.54-260q41.85 0 70.93-29.08 29.07-29.07 29.07-70.92t-29.07-70.92Q520.77-580 478.92-580q-42.07 0-71.04 29.08-28.96 29.07-28.96 70.92t28.96 70.92Q436.85-380 478.92-380Z" /></svg> icon:settings = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M438.38-120q-13.92 0-24.19-9.15-10.27-9.16-12.73-22.85l-10.54-83.69q-19.15-5.77-41.42-18.16-22.27-12.38-37.88-26.53L235-247.46q-12.69 5.61-25.77 1.23-13.08-4.39-20.15-16.62l-43.16-74.3q-7.07-12.23-4.15-25.54 2.92-13.31 13.92-21.85l66.85-50q-1.77-10.84-2.92-22.34-1.16-11.5-1.16-22.35 0-10.08 1.16-21.19 1.15-11.12 2.92-25.04l-66.85-50q-11-8.54-13.54-22.23-2.53-13.69 4.54-25.93l42.39-72q7.07-11.46 20.15-16.23 13.08-4.77 25.77.85l75.85 32.15q17.92-14.92 38.77-26.92 20.84-12 40.53-18.54L401.46-808q2.46-13.69 12.73-22.85 10.27-9.15 24.19-9.15h83.24q13.92 0 24.19 9.15 10.27 9.16 12.73 22.85l10.54 84.46q23 8.08 40.65 18.54 17.65 10.46 36.35 26.15L725.77-711q12.69-5.62 25.77-.85 13.08 4.77 20.15 16.23l42.39 72.77q7.07 12.23 4.15 25.54-2.92 13.31-13.92 21.85l-69.93 52.31q3.31 12.38 3.7 22.73.38 10.34.38 20.42 0 9.31-.77 19.65-.77 10.35-3.54 25.04l67.62 50.77q11 8.54 14.31 21.85 3.3 13.31-3.77 25.54l-42.62 73.53q-7.07 12.24-20.54 16.62-13.46 4.38-26.15-1.23l-76.92-32.92q-18.7 15.69-37.62 26.92-18.92 11.23-39.38 17.77L558.54-152q-2.46 13.69-12.73 22.85-10.27 9.15-24.19 9.15h-83.24Zm40.54-260q41.85 0 70.93-29.08 29.07-29.07 29.07-70.92t-29.07-70.92Q520.77-580 478.92-580q-42.07 0-71.04 29.08-28.96 29.07-28.96 70.92t28.96 70.92Q436.85-380 478.92-380Z" /></svg>
icon:star = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m480-315.92-145.23 87.69q-6.39 3.15-11.85 2.54-5.46-.62-10.61-3.77-5.16-3.16-7.85-9.04-2.69-5.88-.46-12.73l38.62-164.39-127.77-110.84q-5.39-4.39-7.12-10.5-1.73-6.12.73-11.73 2.46-5.62 6.62-9.16 4.15-3.53 11.23-4.77l168.61-14.69L460.69-733q2.69-6.62 7.81-9.54 5.12-2.92 11.5-2.92t11.5 2.92q5.12 2.92 7.81 9.54l65.77 155.69 168.61 14.69q7.08 1.24 11.23 4.77 4.16 3.54 6.62 9.16 2.46 5.61.73 11.73-1.73 6.11-7.12 10.5L617.38-415.62 656-251.23q2.23 6.85-.46 12.73-2.69 5.88-7.85 9.04-5.15 3.15-10.61 3.77-5.46.61-11.85-2.54L480-315.92Z" /></svg>
icon:stats = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m125.38-174.62 212.24-212.23q18.38-18.38 45.46-18.38 27.07 0 45.46 18.38l96.08 96.08q7.69 7.69 18.46 7.31 10.77-.39 17.69-8.85l248.31-285.15q5.61-6.85 13.5-6.85 7.88 0 14.5 5.85 5.61 5.61 6.11 13.04.5 7.42-5.11 14.04L589.85-264.77q-18.39 21.39-46.23 22.5-27.85 1.12-48.24-19.27l-94.61-94.61q-6.92-6.93-17.69-6.93-10.77 0-17.7 6.93L154.62-145.38q-6.08 6.07-14.24 6.46-8.15.38-15-6.46-6.84-6.85-6.84-14.62t6.84-14.62Zm0-240 212.24-212.23q18.38-18.38 45.46-18.38 27.07 0 45.46 18.38l96.08 96.08q7.69 7.69 18.46 7.31 10.77-.39 17.69-8.85l248.31-285.15q5.61-6.85 13.5-6.85 7.88 0 14.5 5.85 5.61 5.61 6.11 13.04.5 7.42-5.11 14.04L589.85-504.77q-18.39 21.39-46.23 22.5-27.85 1.12-48.24-19.27l-94.61-94.61q-6.92-6.93-17.69-6.93-10.77 0-17.7 6.93L154.62-385.38q-6.08 6.07-14.24 6.46-8.15.38-15-6.46-6.84-6.85-6.84-14.62t6.84-14.62Z" /></svg> icon:stats = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m125.38-174.62 212.24-212.23q18.38-18.38 45.46-18.38 27.07 0 45.46 18.38l96.08 96.08q7.69 7.69 18.46 7.31 10.77-.39 17.69-8.85l248.31-285.15q5.61-6.85 13.5-6.85 7.88 0 14.5 5.85 5.61 5.61 6.11 13.04.5 7.42-5.11 14.04L589.85-264.77q-18.39 21.39-46.23 22.5-27.85 1.12-48.24-19.27l-94.61-94.61q-6.92-6.93-17.69-6.93-10.77 0-17.7 6.93L154.62-145.38q-6.08 6.07-14.24 6.46-8.15.38-15-6.46-6.84-6.85-6.84-14.62t6.84-14.62Zm0-240 212.24-212.23q18.38-18.38 45.46-18.38 27.07 0 45.46 18.38l96.08 96.08q7.69 7.69 18.46 7.31 10.77-.39 17.69-8.85l248.31-285.15q5.61-6.85 13.5-6.85 7.88 0 14.5 5.85 5.61 5.61 6.11 13.04.5 7.42-5.11 14.04L589.85-504.77q-18.39 21.39-46.23 22.5-27.85 1.12-48.24-19.27l-94.61-94.61q-6.92-6.93-17.69-6.93-10.77 0-17.7 6.93L154.62-385.38q-6.08 6.07-14.24 6.46-8.15.38-15-6.46-6.84-6.85-6.84-14.62t6.84-14.62Z" /></svg>
icon:text = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M224.62-231.54q-10.47 0-17.54-6.84-7.08-6.85-7.08-16.96 0-10.12 7.08-17.39 7.07-7.27 17.54-7.27H500q8.5 0 14.25 5.97t5.75 14.8q0 8.5-5.73 14.25t-13.5 5.75l-276.15 7.69ZM220-386.92q-8.5 0-14.25-5.76T200-406.95q0-8.51 5.75-14.24t14.25-5.73h520q8.5 0 14.25 5.75 5.75 5.76 5.75 14.27 0 8.52-5.75 14.25T740-386.92H220Zm0-146.16q-8.5 0-14.25-5.75-5.75-5.76-5.75-14.27 0-8.52 5.75-14.25t14.25-5.73h520q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T740-533.08H220ZM224.62-680q-10.47 0-17.54-7.08-7.08-7.07-7.08-17.54 0-10.46 7.08-17.53 7.07-7.08 17.54-7.08h510.76q10.47 0 17.54 7.08 7.08 7.07 7.08 17.53 0 10.47-7.08 17.54-7.07 7.08-17.54 7.08H224.62Z" /></svg> icon:text = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M224.62-231.54q-10.47 0-17.54-6.84-7.08-6.85-7.08-16.96 0-10.12 7.08-17.39 7.07-7.27 17.54-7.27H500q8.5 0 14.25 5.97t5.75 14.8q0 8.5-5.73 14.25t-13.5 5.75l-276.15 7.69ZM220-386.92q-8.5 0-14.25-5.76T200-406.95q0-8.51 5.75-14.24t14.25-5.73h520q8.5 0 14.25 5.75 5.75 5.76 5.75 14.27 0 8.52-5.75 14.25T740-386.92H220Zm0-146.16q-8.5 0-14.25-5.75-5.75-5.76-5.75-14.27 0-8.52 5.75-14.25t14.25-5.73h520q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T740-533.08H220ZM224.62-680q-10.47 0-17.54-7.08-7.08-7.07-7.08-17.54 0-10.46 7.08-17.53 7.07-7.08 17.54-7.08h510.76q10.47 0 17.54 7.08 7.08 7.07 7.08 17.53 0 10.47-7.08 17.54-7.07 7.08-17.54 7.08H224.62Z" /></svg>
icon:timer_off = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-120q-66.31 0-124.5-25.04t-101.81-68.65q-43.61-43.62-68.65-101.81Q160-373.69 160-440q0-61.54 21.96-117.42 21.96-55.89 63.89-100.12L119.38-784q-5.61-5.62-6-13.77-.38-8.15 6-14.54 6.39-6.38 14.16-6.38 7.77 0 14.15 6.38l664.62 664.62q5.61 5.61 6 13.77.38 8.15-6 14.54-6.39 6.38-14.16 6.38-7.77 0-14.15-6.38l-86.46-86.47q-42.62 40.39-99.66 63.12Q540.85-120 480-120Zm-84.62-740q-8.53 0-14.26-5.73-5.74-5.73-5.74-14.27t5.74-14.27q5.73-5.73 14.26-5.73h169.24q8.53 0 14.26 5.73 5.74 5.73 5.74 14.27t-5.74 14.27q-5.73 5.73-14.26 5.73H395.38Zm331.85 514.46L500-572.77v-31.85q0-8.53-5.73-14.26-5.73-5.74-14.27-5.74-6.15 0-11.19 4-5.04 4-6.96 9.7l-76.54-76.54q-14.93-14.92-10.69-35.69 4.23-20.77 24.38-26.47 20.15-5.69 40.65-8.03Q460.15-760 480-760q56.92 0 110.96 20.38 54.04 20.39 100.42 59.16L720.92-710q5.62-5.62 13.77-6 8.16-.38 14.54 6 6.39 6.38 6.39 14.15 0 7.77-6.39 14.16l-29.54 29.54q38.77 46.38 59.54 100.8Q800-496.92 800-440q0 19.85-2.35 40.23-2.34 20.39-8.03 40.77-5.7 20.15-26.47 24.38-20.77 4.24-35.92-10.92Z" /></svg> icon:timer_off = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-120q-66.31 0-124.5-25.04t-101.81-68.65q-43.61-43.62-68.65-101.81Q160-373.69 160-440q0-61.54 21.96-117.42 21.96-55.89 63.89-100.12L119.38-784q-5.61-5.62-6-13.77-.38-8.15 6-14.54 6.39-6.38 14.16-6.38 7.77 0 14.15 6.38l664.62 664.62q5.61 5.61 6 13.77.38 8.15-6 14.54-6.39 6.38-14.16 6.38-7.77 0-14.15-6.38l-86.46-86.47q-42.62 40.39-99.66 63.12Q540.85-120 480-120Zm-84.62-740q-8.53 0-14.26-5.73-5.74-5.73-5.74-14.27t5.74-14.27q5.73-5.73 14.26-5.73h169.24q8.53 0 14.26 5.73 5.74 5.73 5.74 14.27t-5.74 14.27q-5.73 5.73-14.26 5.73H395.38Zm331.85 514.46L500-572.77v-31.85q0-8.53-5.73-14.26-5.73-5.74-14.27-5.74-6.15 0-11.19 4-5.04 4-6.96 9.7l-76.54-76.54q-14.93-14.92-10.69-35.69 4.23-20.77 24.38-26.47 20.15-5.69 40.65-8.03Q460.15-760 480-760q56.92 0 110.96 20.38 54.04 20.39 100.42 59.16L720.92-710q5.62-5.62 13.77-6 8.16-.38 14.54 6 6.39 6.38 6.39 14.15 0 7.77-6.39 14.16l-29.54 29.54q38.77 46.38 59.54 100.8Q800-496.92 800-440q0 19.85-2.35 40.23-2.34 20.39-8.03 40.77-5.7 20.15-26.47 24.38-20.77 4.24-35.92-10.92Z" /></svg>
@@ -59,6 +59,23 @@ icon:sb_stats = <svg xmlns="http://www.w3.org/2000/svg" height="128" view
icon:theme_light = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-360q50 0 85-35t35-85q0-50-35-85t-85-35q-50 0-85 35t-35 85q0 50 35 85t85 35Zm0 80q-83 0-141.5-58.5T280-480q0-83 58.5-141.5T480-680q83 0 141.5 58.5T680-480q0 83-58.5 141.5T480-280ZM80-440q-17 0-28.5-11.5T40-480q0-17 11.5-28.5T80-520h80q17 0 28.5 11.5T200-480q0 17-11.5 28.5T160-440H80Zm720 0q-17 0-28.5-11.5T760-480q0-17 11.5-28.5T800-520h80q17 0 28.5 11.5T920-480q0 17-11.5 28.5T880-440h-80ZM480-760q-17 0-28.5-11.5T440-800v-80q0-17 11.5-28.5T480-920q17 0 28.5 11.5T520-880v80q0 17-11.5 28.5T480-760Zm0 720q-17 0-28.5-11.5T440-80v-80q0-17 11.5-28.5T480-200q17 0 28.5 11.5T520-160v80q0 17-11.5 28.5T480-40ZM226-678l-43-42q-12-11-11.5-28t11.5-29q12-12 29-12t28 12l42 43q11 12 11 28t-11 28q-11 12-27.5 11.5T226-678Zm494 495-42-43q-11-12-11-28.5t11-27.5q11-12 27.5-11.5T734-282l43 42q12 11 11.5 28T777-183q-12 12-29 12t-28-12Zm-42-495q-12-11-11.5-27.5T678-734l42-43q11-12 28-11.5t29 11.5q12 12 12 29t-12 28l-43 42q-12 11-28 11t-28-11ZM183-183q-12-12-12-29t12-28l43-42q12-11 28.5-11t27.5 11q12 11 11.5 27.5T282-226l-42 43q-11 12-28 11.5T183-183Zm297-297Z" /></svg> icon:theme_light = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-360q50 0 85-35t35-85q0-50-35-85t-85-35q-50 0-85 35t-35 85q0 50 35 85t85 35Zm0 80q-83 0-141.5-58.5T280-480q0-83 58.5-141.5T480-680q83 0 141.5 58.5T680-480q0 83-58.5 141.5T480-280ZM80-440q-17 0-28.5-11.5T40-480q0-17 11.5-28.5T80-520h80q17 0 28.5 11.5T200-480q0 17-11.5 28.5T160-440H80Zm720 0q-17 0-28.5-11.5T760-480q0-17 11.5-28.5T800-520h80q17 0 28.5 11.5T920-480q0 17-11.5 28.5T880-440h-80ZM480-760q-17 0-28.5-11.5T440-800v-80q0-17 11.5-28.5T480-920q17 0 28.5 11.5T520-880v80q0 17-11.5 28.5T480-760Zm0 720q-17 0-28.5-11.5T440-80v-80q0-17 11.5-28.5T480-200q17 0 28.5 11.5T520-160v80q0 17-11.5 28.5T480-40ZM226-678l-43-42q-12-11-11.5-28t11.5-29q12-12 29-12t28 12l42 43q11 12 11 28t-11 28q-11 12-27.5 11.5T226-678Zm494 495-42-43q-11-12-11-28.5t11-27.5q11-12 27.5-11.5T734-282l43 42q12 11 11.5 28T777-183q-12 12-29 12t-28-12Zm-42-495q-12-11-11.5-27.5T678-734l42-43q11-12 28-11.5t29 11.5q12 12 12 29t-12 28l-43 42q-12 11-28 11t-28-11ZM183-183q-12-12-12-29t12-28l43-42q12-11 28.5-11t27.5 11q12 11 11.5 27.5T282-226l-42 43q-11 12-28 11.5T183-183Zm297-297Z" /></svg>
icon:theme_dark = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-120q-151 0-255.5-104.5T120-480q0-138 90-239.5T440-838q13-2 23 3.5t16 14.5q6 9 6.5 21t-7.5 23q-17 26-25.5 55t-8.5 61q0 90 63 153t153 63q31 0 61.5-9t54.5-25q11-7 22.5-6.5T819-479q10 5 15.5 15t3.5 24q-14 138-117.5 229T480-120Zm0-80q88 0 158-48.5T740-375q-20 5-40 8t-40 3q-123 0-209.5-86.5T364-660q0-20 3-40t8-40q-78 32-126.5 102T200-480q0 116 82 198t198 82Zm-10-270Z" /></svg> icon:theme_dark = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-120q-151 0-255.5-104.5T120-480q0-138 90-239.5T440-838q13-2 23 3.5t16 14.5q6 9 6.5 21t-7.5 23q-17 26-25.5 55t-8.5 61q0 90 63 153t153 63q31 0 61.5-9t54.5-25q11-7 22.5-6.5T819-479q10 5 15.5 15t3.5 24q-14 138-117.5 229T480-120Zm0-80q88 0 158-48.5T740-375q-20 5-40 8t-40 3q-123 0-209.5-86.5T364-660q0-20 3-40t8-40q-78 32-126.5 102T200-480q0 116 82 198t198 82Zm-10-270Z" /></svg>
icon:theme_auto = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm40-83q119-15 199.5-104.5T800-480q0-123-80.5-212.5T520-797v634Z" /></svg> icon:theme_auto = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm40-83q119-15 199.5-104.5T800-480q0-123-80.5-212.5T520-797v634Z" /></svg>
icon:btn_ok = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m424-408-86-86q-11-11-28-11t-28 11q-11 11-11 28t11 28l114 114q12 12 28 12t28-12l226-226q11-11 11-28t-11-28q-11-11-28-11t-28 11L424-408Zm56 328q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z" /></svg>
icon:btn_cancel = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m480-424 116 116q11 11 28 11t28-11q11-11 11-28t-11-28L536-480l116-116q11-11 11-28t-11-28q-11-11-28-11t-28 11L480-536 364-652q-11-11-28-11t-28 11q-11 11-11 28t11 28l116 116-116 116q-11 11-11 28t11 28q11 11 28 11t28-11l116-116Zm0 344q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z" /></svg>
icon:btn_yes = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m424-408-86-86q-11-11-28-11t-28 11q-11 11-11 28t11 28l114 114q12 12 28 12t28-12l226-226q11-11 11-28t-11-28q-11-11-28-11t-28 11L424-408Zm56 328q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z" /></svg>
icon:btn_no = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M320-440h320q17 0 28.5-11.5T680-480q0-17-11.5-28.5T640-520H320q-17 0-28.5 11.5T280-480q0 17 11.5 28.5T320-440ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z" /></svg>
icon:btn_open = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h240q17 0 28.5 11.5T480-800q0 17-11.5 28.5T440-760H200v560h560v-240q0-17 11.5-28.5T800-480q17 0 28.5 11.5T840-440v240q0 33-23.5 56.5T760-120H200Zm560-584L416-360q-11 11-28 11t-28-11q-11-11-11-28t11-28l344-344H600q-17 0-28.5-11.5T560-800q0-17 11.5-28.5T600-840h200q17 0 28.5 11.5T840-800v200q0 17-11.5 28.5T800-560q-17 0-28.5-11.5T760-600v-104Z" /></svg>
icon:btn_close = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m480-424 116 116q11 11 28 11t28-11q11-11 11-28t-11-28L536-480l116-116q11-11 11-28t-11-28q-11-11-28-11t-28 11L480-536 364-652q-11-11-28-11t-28 11q-11 11-11 28t11 28l116 116-116 116q-11 11-11 28t11 28q11 11 28 11t28-11l116-116Zm0 344q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z" /></svg>
icon:btn_save = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m680-272-36-36q-11-11-28-11t-28 11q-11 11-11 28t11 28l104 104q12 12 28 12t28-12l104-104q11-11 11-28t-11-28q-11-11-28-11t-28 11l-36 36v-127q0-17-11.5-28.5T720-439q-17 0-28.5 11.5T680-399v127ZM600-80h240q17 0 28.5 11.5T880-40q0 17-11.5 28.5T840 0H600q-17 0-28.5-11.5T560-40q0-17 11.5-28.5T600-80Zm-360-80q-33 0-56.5-23.5T160-240v-560q0-33 23.5-56.5T240-880h247q16 0 30.5 6t25.5 17l194 194q11 11 17 25.5t6 30.5v48q0 17-11.5 28.5T720-519q-17 0-28.5-11.5T680-559v-41H540q-25 0-42.5-17.5T480-660v-140H240v560h200q17 0 28.5 11.5T480-200q0 17-11.5 28.5T440-160H240Zm0-80v-560 560Z" /></svg>
icon:btn_browse = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M160-160q-33 0-56.5-23.5T80-240v-480q0-33 23.5-56.5T160-800h207q16 0 30.5 6t25.5 17l57 57h360q17 0 28.5 11.5T880-680q0 17-11.5 28.5T840-640H447l-80-80H160v480l79-263q8-26 29.5-41.5T316-560h516q41 0 64.5 32.5T909-457l-72 240q-8 26-29.5 41.5T760-160H160Zm84-80h516l72-240H316l-72 240Zm-84-262v-218 218Zm84 262 72-240-72 240Z" /></svg>
icon:btn_list = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M400-200q-17 0-28.5-11.5T360-240q0-17 11.5-28.5T400-280h400q17 0 28.5 11.5T840-240q0 17-11.5 28.5T800-200H400Zm0-240q-17 0-28.5-11.5T360-480q0-17 11.5-28.5T400-520h400q17 0 28.5 11.5T840-480q0 17-11.5 28.5T800-440H400Zm0-240q-17 0-28.5-11.5T360-720q0-17 11.5-28.5T400-760h400q17 0 28.5 11.5T840-720q0 17-11.5 28.5T800-680H400ZM200-160q-33 0-56.5-23.5T120-240q0-33 23.5-56.5T200-320q33 0 56.5 23.5T280-240q0 33-23.5 56.5T200-160Zm0-240q-33 0-56.5-23.5T120-480q0-33 23.5-56.5T200-560q33 0 56.5 23.5T280-480q0 33-23.5 56.5T200-400Zm0-240q-33 0-56.5-23.5T120-720q0-33 23.5-56.5T200-800q33 0 56.5 23.5T280-720q0 33-23.5 56.5T200-640Z" /></svg>
icon:btn_new = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h200q17 0 28.5 11.5T440-800q0 17-11.5 28.5T400-760H200v560h560v-200q0-17 11.5-28.5T800-440q17 0 28.5 11.5T840-400v200q0 33-23.5 56.5T760-120H200Zm440-520h-80q-17 0-28.5-11.5T520-680q0-17 11.5-28.5T560-720h80v-80q0-17 11.5-28.5T680-840q17 0 28.5 11.5T720-800v80h80q17 0 28.5 11.5T840-680q0 17-11.5 28.5T800-640h-80v80q0 17-11.5 28.5T680-520q-17 0-28.5-11.5T640-560v-80Z" /></svg>
icon:btn_create = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m354-287 126-76 126 77-33-144 111-96-146-13-58-136-58 135-146 13 111 97-33 143Zm126 18L314-169q-11 7-23 6t-21-8q-9-7-14-17.5t-2-23.5l44-189-147-127q-10-9-12.5-20.5T140-571q4-11 12-18t22-9l194-17 75-178q5-12 15.5-18t21.5-6q11 0 21.5 6t15.5 18l75 178 194 17q14 2 22 9t12 18q4 11 1.5 22.5T809-528L662-401l44 189q3 13-2 23.5T690-171q-9 7-21 8t-23-6L480-269Zm0-201Z" /></svg>
icon:btn_reset = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M320-200q-17 0-28.5-11.5T280-240q0-17 11.5-28.5T320-280h244q63 0 109.5-40T720-420q0-60-46.5-100T564-560H312l76 76q11 11 11 28t-11 28q-11 11-28 11t-28-11L188-572q-6-6-8.5-13t-2.5-15q0-8 2.5-15t8.5-13l144-144q11-11 28-11t28 11q11 11 11 28t-11 28l-76 76h252q97 0 166.5 63T800-420q0 94-69.5 157T564-200H320Z" /></svg>
icon:btn_insert = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M440-560h-80q-17 0-28.5-11.5T320-600q0-17 11.5-28.5T360-640h240q17 0 28.5 11.5T640-600q0 17-11.5 28.5T600-560h-80v200q0 17-11.5 28.5T480-320q-17 0-28.5-11.5T440-360v-200ZM40-80v-160q0-17 11.5-28.5T80-280h40v-400H80q-17 0-28.5-11.5T40-720v-160q0-17 11.5-28.5T80-920h160q17 0 28.5 11.5T280-880v40h400v-40q0-17 11.5-28.5T720-920h160q17 0 28.5 11.5T920-880v160q0 17-11.5 28.5T880-680h-40v400h40q17 0 28.5 11.5T920-240v160q0 17-11.5 28.5T880-40H720q-17 0-28.5-11.5T680-80v-40H280v40q0 17-11.5 28.5T240-40H80q-17 0-28.5-11.5T40-80Zm240-120h400v-40q0-17 11.5-28.5T720-280h40v-400h-40q-17 0-28.5-11.5T680-720v-40H280v40q0 17-11.5 28.5T240-680h-40v400h40q17 0 28.5 11.5T280-240v40ZM120-760h80v-80h-80v80Zm640 0h80v-80h-80v80Zm0 640h80v-80h-80v80Zm-640 0h80v-80h-80v80Zm80-640Zm560 0Zm0 560Zm-560 0Z" /></svg>
icon:btn_apply = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m424-424-86-86q-11-11-28-11t-28 11q-11 11-11 28t11 28l114 114q12 12 28 12t28-12l226-226q11-11 11-28t-11-28q-11-11-28-11t-28 11L424-424ZM200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm0-560v560-560Z" /></svg>
icon:btn_build = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M760-252v72q0 8 6 14t14 6q8 0 14-6t6-14v-120q0-8-6-14t-14-6H660q-8 0-14 6t-6 14q0 8 6 14t14 6h72l-98 98q-6 6-6 14t6 14q6 6 14 6t14-6l98-98ZM200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v200q0 17-11.5 28.5T800-520q-17 0-28.5-11.5T760-560v-200H200v560h200q17 0 28.5 11.5T440-160q0 17-11.5 28.5T400-120H200Zm0-120v40-560 243-3 280Zm80-80q0 17 11.5 28.5T320-280h83q17 0 28.5-11.5T443-320q0-17-11.5-28.5T403-360h-83q-17 0-28.5 11.5T280-320Zm0-160q0 17 11.5 28.5T320-440h200q17 0 28.5-11.5T560-480q0-17-11.5-28.5T520-520H320q-17 0-28.5 11.5T280-480Zm0-160q0 17 11.5 28.5T320-600h320q17 0 28.5-11.5T680-640q0-17-11.5-28.5T640-680H320q-17 0-28.5 11.5T280-640ZM720-40q-83 0-141.5-58.5T520-240q0-83 58.5-141.5T720-440q83 0 141.5 58.5T920-240q0 83-58.5 141.5T720-40Z" /></svg>
icon:btn_print = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M320-120q-33 0-56.5-23.5T240-200v-80h-80q-33 0-56.5-23.5T80-360v-160q0-51 35-85.5t85-34.5h560q51 0 85.5 34.5T880-520v160q0 33-23.5 56.5T800-280h-80v80q0 33-23.5 56.5T640-120H320ZM160-360h80q0-33 23.5-56.5T320-440h320q33 0 56.5 23.5T720-360h80v-160q0-17-11.5-28.5T760-560H200q-17 0-28.5 11.5T160-520v160Zm480-280v-120H320v120h-80v-120q0-33 23.5-56.5T320-840h320q33 0 56.5 23.5T720-760v120h-80Zm80 180q17 0 28.5-11.5T760-500q0-17-11.5-28.5T720-540q-17 0-28.5 11.5T680-500q0 17 11.5 28.5T720-460Zm-80 260v-160H320v160h320ZM160-560h640-640Z" /></svg>
icon:btn_preview = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-480H200v480Zm280-80q-82 0-146.5-44.5T240-440q29-71 93.5-115.5T480-600q82 0 146.5 44.5T720-440q-29 71-93.5 115.5T480-280Zm0-60q56 0 102-26.5t72-73.5q-26-47-72-73.5T480-540q-56 0-102 26.5T306-440q26 47 72 73.5T480-340Zm0-100Zm0 60q25 0 42.5-17.5T540-440q0-25-17.5-42.5T480-500q-25 0-42.5 17.5T420-440q0 25 17.5 42.5T480-380Z" /></svg>
icon:add = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M440-440H240q-17 0-28.5-11.5T200-480q0-17 11.5-28.5T240-520h200v-200q0-17 11.5-28.5T480-760q17 0 28.5 11.5T520-720v200h200q17 0 28.5 11.5T760-480q0 17-11.5 28.5T720-440H520v200q0 17-11.5 28.5T480-200q-17 0-28.5-11.5T440-240v-200Z" /></svg> icon:add = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M440-440H240q-17 0-28.5-11.5T200-480q0-17 11.5-28.5T240-520h200v-200q0-17 11.5-28.5T480-760q17 0 28.5 11.5T520-720v200h200q17 0 28.5 11.5T760-480q0 17-11.5 28.5T720-440H520v200q0 17-11.5 28.5T480-200q-17 0-28.5-11.5T440-240v-200Z" /></svg>
icon:bookmarks = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M400-160 232-88q-40 17-76-6.5T120-161v-519q0-33 23.5-56.5T200-760h400q33 0 56.5 23.5T680-680v519q0 43-36 66.5T568-88l-168-72Zm0-88 200 86v-518H200v518l200-86Zm400 88q-17 0-28.5-11.5T760-200v-640H280q-17 0-28.5-11.5T240-880q0-17 11.5-28.5T280-920h480q33 0 56.5 23.5T840-840v640q0 17-11.5 28.5T800-160ZM400-680H200h400-200Z" /></svg> icon:bookmarks = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M400-160 232-88q-40 17-76-6.5T120-161v-519q0-33 23.5-56.5T200-760h400q33 0 56.5 23.5T680-680v519q0 43-36 66.5T568-88l-168-72Zm0-88 200 86v-518H200v518l200-86Zm400 88q-17 0-28.5-11.5T760-200v-640H280q-17 0-28.5-11.5T240-880q0-17 11.5-28.5T280-920h480q33 0 56.5 23.5T840-840v640q0 17-11.5 28.5T800-160ZM400-680H200h400-200Z" /></svg>
icon:browse = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M160-160q-33 0-56.5-23.5T80-240v-480q0-33 23.5-56.5T160-800h207q16 0 30.5 6t25.5 17l57 57h360q17 0 28.5 11.5T880-680q0 17-11.5 28.5T840-640H447l-80-80H160v480l79-263q8-26 29.5-41.5T316-560h516q41 0 64.5 32.5T909-457l-72 240q-8 26-29.5 41.5T760-160H160Zm84-80h516l72-240H316l-72 240Zm-84-262v-218 218Zm84 262 72-240-72 240Z" /></svg> icon:browse = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M160-160q-33 0-56.5-23.5T80-240v-480q0-33 23.5-56.5T160-800h207q16 0 30.5 6t25.5 17l57 57h360q17 0 28.5 11.5T880-680q0 17-11.5 28.5T840-640H447l-80-80H160v480l79-263q8-26 29.5-41.5T316-560h516q41 0 64.5 32.5T909-457l-72 240q-8 26-29.5 41.5T760-160H160Zm84-80h516l72-240H316l-72 240Zm-84-262v-218 218Zm84 262 72-240-72 240Z" /></svg>
@@ -94,7 +111,6 @@ icon:minimise = <svg xmlns="http://www.w3.org/2000/svg" height="128" view
icon:more_arrow = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M420-308q-8 0-14-5.5t-6-14.5v-304q0-9 6-14.5t14-5.5q2 0 14 6l145 145q5 5 7 10t2 11q0 6-2 11t-7 10L434-314q-3 3-6.5 4.5T420-308Z" /></svg> icon:more_arrow = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M420-308q-8 0-14-5.5t-6-14.5v-304q0-9 6-14.5t14-5.5q2 0 14 6l145 145q5 5 7 10t2 11q0 6-2 11t-7 10L434-314q-3 3-6.5 4.5T420-308Z" /></svg>
icon:more_vertical = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-160q-33 0-56.5-23.5T400-240q0-33 23.5-56.5T480-320q33 0 56.5 23.5T560-240q0 33-23.5 56.5T480-160Zm0-240q-33 0-56.5-23.5T400-480q0-33 23.5-56.5T480-560q33 0 56.5 23.5T560-480q0 33-23.5 56.5T480-400Zm0-240q-33 0-56.5-23.5T400-720q0-33 23.5-56.5T480-800q33 0 56.5 23.5T560-720q0 33-23.5 56.5T480-640Z" /></svg> icon:more_vertical = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-160q-33 0-56.5-23.5T400-240q0-33 23.5-56.5T480-320q33 0 56.5 23.5T560-240q0 33-23.5 56.5T480-160Zm0-240q-33 0-56.5-23.5T400-480q0-33 23.5-56.5T480-560q33 0 56.5 23.5T560-480q0 33-23.5 56.5T480-400Zm0-240q-33 0-56.5-23.5T400-720q0-33 23.5-56.5T480-800q33 0 56.5 23.5T560-720q0 33-23.5 56.5T480-640Z" /></svg>
icon:noncheckable = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M320-440h320q17 0 28.5-11.5T680-480q0-17-11.5-28.5T640-520H320q-17 0-28.5 11.5T280-480q0 17 11.5 28.5T320-440ZM200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm0-560v560-560Z" /></svg> icon:noncheckable = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M320-440h320q17 0 28.5-11.5T680-480q0-17-11.5-28.5T640-520H320q-17 0-28.5 11.5T280-480q0 17 11.5 28.5T320-440ZM200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm0-560v560-560Z" /></svg>
icon:open = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h240q17 0 28.5 11.5T480-800q0 17-11.5 28.5T440-760H200v560h560v-240q0-17 11.5-28.5T800-480q17 0 28.5 11.5T840-440v240q0 33-23.5 56.5T760-120H200Zm560-584L416-360q-11 11-28 11t-28-11q-11-11-11-28t11-28l344-344H600q-17 0-28.5-11.5T560-800q0-17 11.5-28.5T600-840h200q17 0 28.5 11.5T840-800v200q0 17-11.5 28.5T800-560q-17 0-28.5-11.5T760-600v-104Z" /></svg>
icon:panel = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-200v120h560v-120H200Zm0-80h560v-360H200v360Zm0 80v120-120Z" /></svg> icon:panel = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-200v120h560v-120H200Zm0-80h560v-360H200v360Zm0 80v120-120Z" /></svg>
icon:pin = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M640-760v280l68 68q6 6 9 13.5t3 15.5v23q0 17-11.5 28.5T680-320H520v223q0 8-3 15.5T508-68l-14 14q-6 6-14 6t-14-6l-14-14q-6-6-9-13.5T440-97v-223H280q-17 0-28.5-11.5T240-360v-23q0-8 3-15.5t9-13.5l68-68v-280q-17 0-28.5-11.5T280-800q0-17 11.5-28.5T320-840h320q17 0 28.5 11.5T680-800q0 17-11.5 28.5T640-760ZM354-400h252l-46-46v-314H400v314l-46 46Zm126 0Z" /></svg> icon:pin = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M640-760v280l68 68q6 6 9 13.5t3 15.5v23q0 17-11.5 28.5T680-320H520v223q0 8-3 15.5T508-68l-14 14q-6 6-14 6t-14-6l-14-14q-6-6-9-13.5T440-97v-223H280q-17 0-28.5-11.5T240-360v-23q0-8 3-15.5t9-13.5l68-68v-280q-17 0-28.5-11.5T280-800q0-17 11.5-28.5T320-840h320q17 0 28.5 11.5T680-800q0 17-11.5 28.5T640-760ZM354-400h252l-46-46v-314H400v314l-46 46Zm126 0Z" /></svg>
icon:project_copy = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M120-120q-33 0-56.5-23.5T40-200v-480q0-17 11.5-28.5T80-720q17 0 28.5 11.5T120-680v480h640q17 0 28.5 11.5T800-160q0 17-11.5 28.5T760-120H120Zm160-160q-33 0-56.5-23.5T200-360v-440q0-33 23.5-56.5T280-880h167q16 0 30.5 6t25.5 17l57 57h280q33 0 56.5 23.5T920-720v360q0 33-23.5 56.5T840-280H280Zm0-80h560v-360H527l-80-80H280v440Zm0 0v-440 440Z" /></svg> icon:project_copy = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M120-120q-33 0-56.5-23.5T40-200v-480q0-17 11.5-28.5T80-720q17 0 28.5 11.5T120-680v480h640q17 0 28.5 11.5T800-160q0 17-11.5 28.5T760-120H120Zm160-160q-33 0-56.5-23.5T200-360v-440q0-33 23.5-56.5T280-880h167q16 0 30.5 6t25.5 17l57 57h280q33 0 56.5 23.5T920-720v360q0 33-23.5 56.5T840-280H280Zm0-80h560v-360H527l-80-80H280v440Zm0 0v-440 440Z" /></svg>
@@ -103,7 +119,6 @@ icon:refresh = <svg xmlns="http://www.w3.org/2000/svg" height="128" view
icon:remove = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M240-440q-17 0-28.5-11.5T200-480q0-17 11.5-28.5T240-520h480q17 0 28.5 11.5T760-480q0 17-11.5 28.5T720-440H240Z" /></svg> icon:remove = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M240-440q-17 0-28.5-11.5T200-480q0-17 11.5-28.5T240-520h480q17 0 28.5 11.5T760-480q0 17-11.5 28.5T720-440H240Z" /></svg>
icon:revert = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-120q-126 0-223-76.5T131-392q-4-15 6-27.5t27-14.5q16-2 29 6t18 24q24 90 99 147t170 57q117 0 198.5-81.5T760-480q0-117-81.5-198.5T480-760q-69 0-129 32t-101 88h70q17 0 28.5 11.5T360-600q0 17-11.5 28.5T320-560H160q-17 0-28.5-11.5T120-600v-160q0-17 11.5-28.5T160-800q17 0 28.5 11.5T200-760v54q51-64 124.5-99T480-840q75 0 140.5 28.5t114 77q48.5 48.5 77 114T840-480q0 75-28.5 140.5t-77 114q-48.5 48.5-114 77T480-120Zm0-280q-33 0-56.5-23.5T400-480q0-33 23.5-56.5T480-560q33 0 56.5 23.5T560-480q0 33-23.5 56.5T480-400Z" /></svg> icon:revert = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-120q-126 0-223-76.5T131-392q-4-15 6-27.5t27-14.5q16-2 29 6t18 24q24 90 99 147t170 57q117 0 198.5-81.5T760-480q0-117-81.5-198.5T480-760q-69 0-129 32t-101 88h70q17 0 28.5 11.5T360-600q0 17-11.5 28.5T320-560H160q-17 0-28.5-11.5T120-600v-160q0-17 11.5-28.5T160-800q17 0 28.5 11.5T200-760v54q51-64 124.5-99T480-840q75 0 140.5 28.5t114 77q48.5 48.5 77 114T840-480q0 75-28.5 140.5t-77 114q-48.5 48.5-114 77T480-120Zm0-280q-33 0-56.5-23.5T400-480q0-33 23.5-56.5T480-560q33 0 56.5 23.5T560-480q0 33-23.5 56.5T480-400Z" /></svg>
icon:settings = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M433-80q-27 0-46.5-18T363-142l-9-66q-13-5-24.5-12T307-235l-62 26q-25 11-50 2t-39-32l-47-82q-14-23-8-49t27-43l53-40q-1-7-1-13.5v-27q0-6.5 1-13.5l-53-40q-21-17-27-43t8-49l47-82q14-23 39-32t50 2l62 26q11-8 23-15t24-12l9-66q4-26 23.5-44t46.5-18h94q27 0 46.5 18t23.5 44l9 66q13 5 24.5 12t22.5 15l62-26q25-11 50-2t39 32l47 82q14 23 8 49t-27 43l-53 40q1 7 1 13.5v27q0 6.5-2 13.5l53 40q21 17 27 43t-8 49l-48 82q-14 23-39 32t-50-2l-60-26q-11 8-23 15t-24 12l-9 66q-4 26-23.5 44T527-80h-94Zm7-80h79l14-106q31-8 57.5-23.5T639-327l99 41 39-68-86-65q5-14 7-29.5t2-31.5q0-16-2-31.5t-7-29.5l86-65-39-68-99 42q-22-23-48.5-38.5T533-694l-13-106h-79l-14 106q-31 8-57.5 23.5T321-633l-99-41-39 68 86 64q-5 15-7 30t-2 32q0 16 2 31t7 30l-86 65 39 68 99-42q22 23 48.5 38.5T427-266l13 106Zm42-180q58 0 99-41t41-99q0-58-41-99t-99-41q-59 0-99.5 41T342-480q0 58 40.5 99t99.5 41Zm-2-140Z" /></svg> icon:settings = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M433-80q-27 0-46.5-18T363-142l-9-66q-13-5-24.5-12T307-235l-62 26q-25 11-50 2t-39-32l-47-82q-14-23-8-49t27-43l53-40q-1-7-1-13.5v-27q0-6.5 1-13.5l-53-40q-21-17-27-43t8-49l47-82q14-23 39-32t50 2l62 26q11-8 23-15t24-12l9-66q4-26 23.5-44t46.5-18h94q27 0 46.5 18t23.5 44l9 66q13 5 24.5 12t22.5 15l62-26q25-11 50-2t39 32l47 82q14 23 8 49t-27 43l-53 40q1 7 1 13.5v27q0 6.5-2 13.5l53 40q21 17 27 43t-8 49l-48 82q-14 23-39 32t-50-2l-60-26q-11 8-23 15t-24 12l-9 66q-4 26-23.5 44T527-80h-94Zm7-80h79l14-106q31-8 57.5-23.5T639-327l99 41 39-68-86-65q5-14 7-29.5t2-31.5q0-16-2-31.5t-7-29.5l86-65-39-68-99 42q-22-23-48.5-38.5T533-694l-13-106h-79l-14 106q-31 8-57.5 23.5T321-633l-99-41-39 68 86 64q-5 15-7 30t-2 32q0 16 2 31t7 30l-86 65 39 68 99-42q22 23 48.5 38.5T427-266l13 106Zm42-180q58 0 99-41t41-99q0-58-41-99t-99-41q-59 0-99.5 41T342-480q0 58 40.5 99t99.5 41Zm-2-140Z" /></svg>
icon:star = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m354-287 126-76 126 77-33-144 111-96-146-13-58-136-58 135-146 13 111 97-33 143Zm126 18L314-169q-11 7-23 6t-21-8q-9-7-14-17.5t-2-23.5l44-189-147-127q-10-9-12.5-20.5T140-571q4-11 12-18t22-9l194-17 75-178q5-12 15.5-18t21.5-6q11 0 21.5 6t15.5 18l75 178 194 17q14 2 22 9t12 18q4 11 1.5 22.5T809-528L662-401l44 189q3 13-2 23.5T690-171q-9 7-21 8t-23-6L480-269Zm0-201Z" /></svg>
icon:stats = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m110-190 213-213q23-23 57-23t57 23l103 103 256-289q11-13 28.5-13t29.5 12q11 11 11.5 26.5T855-536L596-244q-23 26-57 27.5T480-240L380-340 170-130q-13 13-30 13t-30-13q-13-13-13-30t13-30Zm0-240 213-213q23-23 57-23t57 23l103 103 256-289q11-13 28.5-13t29.5 12q11 11 11.5 26.5T855-776L596-484q-23 26-57 27.5T480-480L380-580 170-370q-13 13-30 13t-30-13q-13-13-13-30t13-30Z" /></svg> icon:stats = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m110-190 213-213q23-23 57-23t57 23l103 103 256-289q11-13 28.5-13t29.5 12q11 11 11.5 26.5T855-536L596-244q-23 26-57 27.5T480-240L380-340 170-130q-13 13-30 13t-30-13q-13-13-13-30t13-30Zm0-240 213-213q23-23 57-23t57 23l103 103 256-289q11-13 28.5-13t29.5 12q11 11 11.5 26.5T855-776L596-484q-23 26-57 27.5T480-480L380-580 170-370q-13 13-30 13t-30-13q-13-13-13-30t13-30Z" /></svg>
icon:text = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M200-200q-17 0-28.5-11.5T160-240q0-17 11.5-28.5T200-280h320q17 0 28.5 11.5T560-240q0 17-11.5 28.5T520-200H200Zm0-160q-17 0-28.5-11.5T160-400q0-17 11.5-28.5T200-440h560q17 0 28.5 11.5T800-400q0 17-11.5 28.5T760-360H200Zm0-160q-17 0-28.5-11.5T160-560q0-17 11.5-28.5T200-600h560q17 0 28.5 11.5T800-560q0 17-11.5 28.5T760-520H200Zm0-160q-17 0-28.5-11.5T160-720q0-17 11.5-28.5T200-760h560q17 0 28.5 11.5T800-720q0 17-11.5 28.5T760-680H200Z" /></svg> icon:text = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M200-200q-17 0-28.5-11.5T160-240q0-17 11.5-28.5T200-280h320q17 0 28.5 11.5T560-240q0 17-11.5 28.5T520-200H200Zm0-160q-17 0-28.5-11.5T160-400q0-17 11.5-28.5T200-440h560q17 0 28.5 11.5T800-400q0 17-11.5 28.5T760-360H200Zm0-160q-17 0-28.5-11.5T160-560q0-17 11.5-28.5T200-600h560q17 0 28.5 11.5T800-560q0 17-11.5 28.5T760-520H200Zm0-160q-17 0-28.5-11.5T160-720q0-17 11.5-28.5T200-760h560q17 0 28.5 11.5T800-720q0 17-11.5 28.5T760-680H200Z" /></svg>
icon:timer_off = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-800q60 0 117.5 20T706-722l28-28q11-11 28-11t28 11q11 11 11 28t-11 28l-28 28q38 51 58 108.5T840-440q0 26-4 51.5T824-337q-7 22-22.5 29t-29.5 2q-14-5-23.5-18t-3.5-30q8-22 11.5-43.5T760-440q0-116-82-198t-198-82q-20 0-43 3.5T391-705q-17 5-29-4t-17-23q-5-14 1.5-29.5T373-784q26-8 53-12t54-4Zm40 248v-48q0-17-11.5-28.5T480-640q-10 0-18.5 4T448-624l72 72ZM480-80q-74 0-139.5-28.5T226-186q-49-49-77.5-114.5T120-440q0-60 18.5-115.5T192-656L84-764q-11-11-11-28t11-28q11-11 28-11t28 11l680 680q11 11 11 28t-11 28q-11 11-28 11t-28-11l-68-68q-48 35-103.5 53.5T480-80Zm0-80q42 0 82-13t75-37L248-599q-24 35-36 75t-12 84q0 116 82 198t198 82Zm-80-680q-17 0-28.5-11.5T360-880q0-17 11.5-28.5T400-920h160q17 0 28.5 11.5T600-880q0 17-11.5 28.5T560-840H400Zm43 435Zm113-112Z" /></svg> icon:timer_off = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-800q60 0 117.5 20T706-722l28-28q11-11 28-11t28 11q11 11 11 28t-11 28l-28 28q38 51 58 108.5T840-440q0 26-4 51.5T824-337q-7 22-22.5 29t-29.5 2q-14-5-23.5-18t-3.5-30q8-22 11.5-43.5T760-440q0-116-82-198t-198-82q-20 0-43 3.5T391-705q-17 5-29-4t-17-23q-5-14 1.5-29.5T373-784q26-8 53-12t54-4Zm40 248v-48q0-17-11.5-28.5T480-640q-10 0-18.5 4T448-624l72 72ZM480-80q-74 0-139.5-28.5T226-186q-49-49-77.5-114.5T120-440q0-60 18.5-115.5T192-656L84-764q-11-11-11-28t11-28q11-11 28-11t28 11l680 680q11 11 11 28t-11 28q-11 11-28 11t-28-11l-68-68q-48 35-103.5 53.5T480-80Zm0-80q42 0 82-13t75-37L248-599q-24 35-36 75t-12 84q0 116 82 198t198 82Zm-80-680q-17 0-28.5-11.5T360-880q0-17 11.5-28.5T400-920h160q17 0 28.5 11.5T600-880q0 17-11.5 28.5T560-840H400Zm43 435Zm113-112Z" /></svg>
@@ -59,6 +59,23 @@ icon:sb_stats = <svg xmlns="http://www.w3.org/2000/svg" height="128" view
icon:theme_light = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-360q50 0 85-35t35-85q0-50-35-85t-85-35q-50 0-85 35t-35 85q0 50 35 85t85 35Zm0 40q-66.85 0-113.42-46.58Q320-413.15 320-480t46.58-113.42Q413.15-640 480-640t113.42 46.58Q640-546.85 640-480t-46.58 113.42Q546.85-320 480-320ZM80-460q-8.5 0-14.25-5.76T60-480.03q0-8.51 5.75-14.24T80-500h100q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T180-460H80Zm700 0q-8.5 0-14.25-5.76T760-480.03q0-8.51 5.75-14.24T780-500h100q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T880-460H780ZM479.97-760q-8.51 0-14.24-5.75T460-780v-100q0-8.5 5.76-14.25t14.27-5.75q8.51 0 14.24 5.75T500-880v100q0 8.5-5.76 14.25T479.97-760Zm0 700q-8.51 0-14.24-5.75T460-80v-100q0-8.5 5.76-14.25t14.27-5.75q8.51 0 14.24 5.75T500-180v100q0 8.5-5.76 14.25T479.97-60ZM254.46-678.77l-57.61-55.85q-5.85-5.61-5.73-13.76.11-8.16 5.96-14.77 6.38-6.62 14.15-6.62 7.77 0 14.15 6.62L282-706.31q6.38 6.62 6.38 14.16 0 7.53-6 14.15t-13.65 6.12q-7.65-.5-14.27-6.89Zm480.16 481.92L678-253.69q-6.38-6.62-6.38-14.27 0-7.66 6.38-14.04 5.23-6.62 13.08-6.12 7.84.5 14.46 6.89l57.61 55.85q5.85 5.61 5.73 13.76-.11 8.16-5.96 14.77-6.38 6.62-14.15 6.62-7.77 0-14.15-6.62ZM678-677.62q-6.62-6-6.12-13.65t6.89-14.27l55.85-57.61q5.61-5.85 13.76-5.73 8.16.11 14.77 5.96 6.62 6.38 6.62 14.15 0 7.77-6.62 14.15L706.31-678q-6.62 6.38-14.16 6.38-7.53 0-14.15-6ZM196.85-196.68q-6.62-6.78-6.62-14.55 0-7.77 6.62-14.15L253.69-282q6.62-6.38 14.27-6.38 7.66 0 14.04 6.38 5.85 5.23 5.35 13.08-.5 7.84-6.12 14.46l-55.85 57.61q-6.38 6.62-14.15 6.5-7.77-.11-14.38-6.33ZM480-480Z" /></svg> icon:theme_light = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-360q50 0 85-35t35-85q0-50-35-85t-85-35q-50 0-85 35t-35 85q0 50 35 85t85 35Zm0 40q-66.85 0-113.42-46.58Q320-413.15 320-480t46.58-113.42Q413.15-640 480-640t113.42 46.58Q640-546.85 640-480t-46.58 113.42Q546.85-320 480-320ZM80-460q-8.5 0-14.25-5.76T60-480.03q0-8.51 5.75-14.24T80-500h100q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T180-460H80Zm700 0q-8.5 0-14.25-5.76T760-480.03q0-8.51 5.75-14.24T780-500h100q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T880-460H780ZM479.97-760q-8.51 0-14.24-5.75T460-780v-100q0-8.5 5.76-14.25t14.27-5.75q8.51 0 14.24 5.75T500-880v100q0 8.5-5.76 14.25T479.97-760Zm0 700q-8.51 0-14.24-5.75T460-80v-100q0-8.5 5.76-14.25t14.27-5.75q8.51 0 14.24 5.75T500-180v100q0 8.5-5.76 14.25T479.97-60ZM254.46-678.77l-57.61-55.85q-5.85-5.61-5.73-13.76.11-8.16 5.96-14.77 6.38-6.62 14.15-6.62 7.77 0 14.15 6.62L282-706.31q6.38 6.62 6.38 14.16 0 7.53-6 14.15t-13.65 6.12q-7.65-.5-14.27-6.89Zm480.16 481.92L678-253.69q-6.38-6.62-6.38-14.27 0-7.66 6.38-14.04 5.23-6.62 13.08-6.12 7.84.5 14.46 6.89l57.61 55.85q5.85 5.61 5.73 13.76-.11 8.16-5.96 14.77-6.38 6.62-14.15 6.62-7.77 0-14.15-6.62ZM678-677.62q-6.62-6-6.12-13.65t6.89-14.27l55.85-57.61q5.61-5.85 13.76-5.73 8.16.11 14.77 5.96 6.62 6.38 6.62 14.15 0 7.77-6.62 14.15L706.31-678q-6.62 6.38-14.16 6.38-7.53 0-14.15-6ZM196.85-196.68q-6.62-6.78-6.62-14.55 0-7.77 6.62-14.15L253.69-282q6.62-6.38 14.27-6.38 7.66 0 14.04 6.38 5.85 5.23 5.35 13.08-.5 7.84-6.12 14.46l-55.85 57.61q-6.38 6.62-14.15 6.5-7.77-.11-14.38-6.33ZM480-480Z" /></svg>
icon:theme_dark = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M482.31-160Q349-160 255.65-253.35 162.31-346.69 162.31-480q0-98.77 56.54-181.42 56.53-82.66 160.38-118.89 12.23-4.31 21.46-2.27 9.23 2.04 15.23 7.96 6 5.93 7.66 15.24 1.65 9.3-2.5 19.53-7.77 19.08-11.27 38.66t-3.5 41.19q0 106.67 74.66 181.33Q555.64-404 662.31-404q27.92 0 51.11-5.92 23.2-5.93 39.5-9.62 8.7-1.61 15.96.42 7.27 2.04 11.54 7.04 4.73 5 6.39 12.31 1.65 7.31-1.89 16.69-28.61 98-112.11 160.54Q589.31-160 482.31-160Zm0-40q88 0 158-48.5t102-126.5q-20 5-40 8t-40 3q-123 0-209.5-86.5T366.31-660q0-20 3-40t8-40q-78 32-126.5 102t-48.5 158q0 116 82 198t198 82Zm-10-270Z" /></svg> icon:theme_dark = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M482.31-160Q349-160 255.65-253.35 162.31-346.69 162.31-480q0-98.77 56.54-181.42 56.53-82.66 160.38-118.89 12.23-4.31 21.46-2.27 9.23 2.04 15.23 7.96 6 5.93 7.66 15.24 1.65 9.3-2.5 19.53-7.77 19.08-11.27 38.66t-3.5 41.19q0 106.67 74.66 181.33Q555.64-404 662.31-404q27.92 0 51.11-5.92 23.2-5.93 39.5-9.62 8.7-1.61 15.96.42 7.27 2.04 11.54 7.04 4.73 5 6.39 12.31 1.65 7.31-1.89 16.69-28.61 98-112.11 160.54Q589.31-160 482.31-160Zm0-40q88 0 158-48.5t102-126.5q-20 5-40 8t-40 3q-123 0-209.5-86.5T366.31-660q0-20 3-40t8-40q-78 32-126.5 102t-48.5 158q0 116 82 198t198 82Zm-10-270Z" /></svg>
icon:theme_auto = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480.13-120q-74.67 0-140.41-28.34-65.73-28.34-114.36-76.92-48.63-48.58-76.99-114.26Q120-405.19 120-479.87q0-74.67 28.34-140.41 28.34-65.73 76.92-114.36 48.58-48.63 114.26-76.99Q405.19-840 479.87-840q74.67 0 140.41 28.34 65.73 28.34 114.36 76.92 48.63 48.58 76.99 114.26Q840-554.81 840-480.13q0 74.67-28.34 140.41-28.34 65.73-76.92 114.36-48.58 48.63-114.26 76.99Q554.81-120 480.13-120ZM500-160.69q123.62-8.08 211.81-98.35T800-480q0-130.69-87.42-220.19-87.43-89.5-212.58-99.12v638.62Z" /></svg> icon:theme_auto = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480.13-120q-74.67 0-140.41-28.34-65.73-28.34-114.36-76.92-48.63-48.58-76.99-114.26Q120-405.19 120-479.87q0-74.67 28.34-140.41 28.34-65.73 76.92-114.36 48.58-48.63 114.26-76.99Q405.19-840 479.87-840q74.67 0 140.41 28.34 65.73 28.34 114.36 76.92 48.63 48.58 76.99 114.26Q840-554.81 840-480.13q0 74.67-28.34 140.41-28.34 65.73-76.92 114.36-48.58 48.63-114.26 76.99Q554.81-120 480.13-120ZM500-160.69q123.62-8.08 211.81-98.35T800-480q0-130.69-87.42-220.19-87.43-89.5-212.58-99.12v638.62Z" /></svg>
icon:btn_ok = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m422.46-380.31-99.84-99.84q-5.62-5.62-13.77-6-8.16-.39-14.54 6-6.39 6.38-6.39 14.15 0 7.77 6.39 14.15l105.54 105.54q9.69 9.69 22.61 9.69t22.62-9.69l219.07-219.07q5.62-5.62 6-13.77.39-8.16-6-14.54-6.38-6.39-14.15-6.39-7.77 0-14.15 6.39L422.46-380.31ZM480.13-120q-74.67 0-140.41-28.34-65.73-28.34-114.36-76.92-48.63-48.58-76.99-114.26Q120-405.19 120-479.87q0-74.67 28.34-140.41 28.34-65.73 76.92-114.36 48.58-48.63 114.26-76.99Q405.19-840 479.87-840q74.67 0 140.41 28.34 65.73 28.34 114.36 76.92 48.63 48.58 76.99 114.26Q840-554.81 840-480.13q0 74.67-28.34 140.41-28.34 65.73-76.92 114.36-48.58 48.63-114.26 76.99Q554.81-120 480.13-120Zm-.13-40q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z" /></svg>
icon:btn_cancel = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m480-451.69 129.85 129.84q5.61 5.62 13.77 6 8.15.39 14.53-6 6.39-6.38 6.39-14.15 0-7.77-6.39-14.15L508.31-480l129.84-129.85q5.62-5.61 6-13.77.39-8.15-6-14.53-6.38-6.39-14.15-6.39-7.77 0-14.15 6.39L480-508.31 350.15-638.15q-5.61-5.62-13.77-6-8.15-.39-14.53 6-6.39 6.38-6.39 14.15 0 7.77 6.39 14.15L451.69-480 321.85-350.15q-5.62 5.61-6 13.77-.39 8.15 6 14.53 6.38 6.39 14.15 6.39 7.77 0 14.15-6.39L480-451.69Zm.13 331.69q-74.67 0-140.41-28.34-65.73-28.34-114.36-76.92-48.63-48.58-76.99-114.26Q120-405.19 120-479.87q0-74.67 28.34-140.41 28.34-65.73 76.92-114.36 48.58-48.63 114.26-76.99Q405.19-840 479.87-840q74.67 0 140.41 28.34 65.73 28.34 114.36 76.92 48.63 48.58 76.99 114.26Q840-554.81 840-480.13q0 74.67-28.34 140.41-28.34 65.73-76.92 114.36-48.58 48.63-114.26 76.99Q554.81-120 480.13-120Zm-.13-40q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z" /></svg>
icon:btn_yes = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m422.46-380.31-99.84-99.84q-5.62-5.62-13.77-6-8.16-.39-14.54 6-6.39 6.38-6.39 14.15 0 7.77 6.39 14.15l105.54 105.54q9.69 9.69 22.61 9.69t22.62-9.69l219.07-219.07q5.62-5.62 6-13.77.39-8.16-6-14.54-6.38-6.39-14.15-6.39-7.77 0-14.15 6.39L422.46-380.31ZM480.13-120q-74.67 0-140.41-28.34-65.73-28.34-114.36-76.92-48.63-48.58-76.99-114.26Q120-405.19 120-479.87q0-74.67 28.34-140.41 28.34-65.73 76.92-114.36 48.58-48.63 114.26-76.99Q405.19-840 479.87-840q74.67 0 140.41 28.34 65.73 28.34 114.36 76.92 48.63 48.58 76.99 114.26Q840-554.81 840-480.13q0 74.67-28.34 140.41-28.34 65.73-76.92 114.36-48.58 48.63-114.26 76.99Q554.81-120 480.13-120Zm-.13-40q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z" /></svg>
icon:btn_no = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M320-460h320q8.5 0 14.25-5.76t5.75-14.27q0-8.51-5.75-14.24T640-500H320q-8.5 0-14.25 5.76T300-479.97q0 8.51 5.75 14.24T320-460Zm160.13 340q-74.67 0-140.41-28.34-65.73-28.34-114.36-76.92-48.63-48.58-76.99-114.26Q120-405.19 120-479.87q0-74.67 28.34-140.41 28.34-65.73 76.92-114.36 48.58-48.63 114.26-76.99Q405.19-840 479.87-840q74.67 0 140.41 28.34 65.73 28.34 114.36 76.92 48.63 48.58 76.99 114.26Q840-554.81 840-480.13q0 74.67-28.34 140.41-28.34 65.73-76.92 114.36-48.58 48.63-114.26 76.99Q554.81-120 480.13-120Zm-.13-40q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z" /></svg>
icon:btn_open = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M224.62-160q-27.62 0-46.12-18.5Q160-197 160-224.62v-510.76q0-27.62 18.5-46.12Q197-800 224.62-800h204.61q8.54 0 14.27 5.73t5.73 14.27q0 8.54-5.73 14.27T429.23-760H224.62q-9.24 0-16.93 7.69-7.69 7.69-7.69 16.93v510.76q0 9.24 7.69 16.93 7.69 7.69 16.93 7.69h510.76q9.24 0 16.93-7.69 7.69-7.69 7.69-16.93v-204.61q0-8.54 5.73-14.27t14.27-5.73q8.54 0 14.27 5.73t5.73 14.27v204.61q0 27.62-18.5 46.12Q763-160 735.38-160H224.62ZM760-731.69 403.69-375.38q-5.61 5.61-13.77 6-8.15.38-14.54-6-6.38-6.39-6.38-14.16 0-7.77 6.38-14.15L731.69-760H580q-8.54 0-14.27-5.73T560-780q0-8.54 5.73-14.27T580-800h187.69q13.93 0 23.12 9.19 9.19 9.19 9.19 23.12V-580q0 8.54-5.73 14.27T780-560q-8.54 0-14.27-5.73T760-580v-151.69Z" /></svg>
icon:btn_close = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m480-451.69 129.85 129.84q5.61 5.62 13.77 6 8.15.39 14.53-6 6.39-6.38 6.39-14.15 0-7.77-6.39-14.15L508.31-480l129.84-129.85q5.62-5.61 6-13.77.39-8.15-6-14.53-6.38-6.39-14.15-6.39-7.77 0-14.15 6.39L480-508.31 350.15-638.15q-5.61-5.62-13.77-6-8.15-.39-14.53 6-6.39 6.38-6.39 14.15 0 7.77 6.39 14.15L451.69-480 321.85-350.15q-5.62 5.61-6 13.77-.39 8.15 6 14.53 6.38 6.39 14.15 6.39 7.77 0 14.15-6.39L480-451.69Zm.13 331.69q-74.67 0-140.41-28.34-65.73-28.34-114.36-76.92-48.63-48.58-76.99-114.26Q120-405.19 120-479.87q0-74.67 28.34-140.41 28.34-65.73 76.92-114.36 48.58-48.63 114.26-76.99Q405.19-840 479.87-840q74.67 0 140.41 28.34 65.73 28.34 114.36 76.92 48.63 48.58 76.99 114.26Q840-554.81 840-480.13q0 74.67-28.34 140.41-28.34 65.73-76.92 114.36-48.58 48.63-114.26 76.99Q554.81-120 480.13-120Zm-.13-40q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z" /></svg>
icon:btn_save = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m700-223.54-70.62-70.61q-5.61-5.62-13.38-5.62-7.77 0-13.38 5.62-5.62 5.61-5.62 13.89 0 8.29 5.62 13.64l94.76 95.54q9.7 9.7 22.62 9.7 12.92 0 22.62-9.7l95.53-95.54q5.62-5.35 5.62-13.64 0-8.28-5.62-13.89-5.61-5.62-13.89-5.62-8.29 0-13.64 5.62L740-223.54V-399q0-8.5-5.76-14.25T719.97-419q-8.51 0-14.24 5.75T700-399v175.46ZM600-60h240q8.5 0 14.25 5.76T860-39.97q0 8.51-5.75 14.24T840-20H600q-8.5 0-14.25-5.76T580-40.03q0-8.51 5.75-14.24T600-60ZM244.62-180q-26.08 0-45.35-19.27Q180-218.54 180-244.62v-550.76q0-26.08 19.27-45.35Q218.54-860 244.62-860h248.53q13.27 0 25.29 5.23t20.71 13.92l181.7 181.7q8.69 8.69 13.92 20.71 5.23 12.02 5.23 25.29v78.77q0 8.5-5.76 14.25t-14.27 5.75q-8.51 0-14.24-5.75T700-534.38V-620H548.46q-20.19 0-34.33-14.13Q500-648.27 500-668.46V-820H244.62q-9.24 0-16.93 7.69-7.69 7.69-7.69 16.93v550.76q0 9.24 7.69 16.93 7.69 7.69 16.93 7.69h220q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T464.62-180h-220ZM220-220v-600 600Z" /></svg>
icon:btn_browse = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M180-200q-25.31 0-42.65-17.35Q120-234.69 120-260v-435.38q0-25.31 19.65-44.97Q159.31-760 184.62-760H357q12.92 0 25.12 5.23 12.19 5.23 20.88 13.92L463.85-680h349.23q8.54 0 14.27 5.73t5.73 14.27q0 8.54-5.73 14.27T813.08-640H447.77l-80-80H184.62q-10.77 0-17.7 6.92-6.92 6.93-6.92 17.7V-240q0-10.77 4.23-8.08 4.23 2.7 11.15 6.54l76.7-256.84q6.46-20.62 23.73-33.43 17.27-12.81 38.65-12.81h512.92q32.54 0 52.2 25.97 19.65 25.96 10.19 57.03l-65.85 219.24q-5.69 19.07-21.8 30.73Q786-200 766.15-200H180Zm37.08-40h546q8.46 0 15-4.62 6.54-4.61 8.84-13.07l64.31-215.39q3.85-12.3-3.85-21.92-7.69-9.62-20-9.62H314.46q-8.46 0-15 4.62-6.54 4.62-8.84 13.08L217.08-240ZM160-498.15V-720v221.85ZM217.08-240l73.54-246.92q2.3-8.46 3.84-13.08l1.54-4.62-2.69 9.62q-2.69 9.62-6.54 21.92l-64.31 215.39q-2.31 8.46-3.84 13.07l-1.54 4.62Z" /></svg>
icon:btn_list = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M404.62-220q-8.5 0-14.25-5.76t-5.75-14.27q0-8.51 5.75-14.24t14.25-5.73H780q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T780-220H404.62Zm0-240q-8.5 0-14.25-5.76t-5.75-14.27q0-8.51 5.75-14.24t14.25-5.73H780q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T780-460H404.62Zm0-240q-8.5 0-14.25-5.76t-5.75-14.27q0-8.51 5.75-14.24t14.25-5.73H780q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T780-700H404.62ZM213.08-186.92q-21.9 0-37.49-15.59Q160-218.11 160-240t15.59-37.49q15.59-15.59 37.49-15.59 21.89 0 37.48 15.59 15.59 15.6 15.59 37.49t-15.59 37.49q-15.59 15.59-37.48 15.59Zm0-240q-21.9 0-37.49-15.59Q160-458.11 160-480t15.59-37.49q15.59-15.59 37.49-15.59 21.89 0 37.48 15.59 15.59 15.6 15.59 37.49t-15.59 37.49q-15.59 15.59-37.48 15.59Zm0-240q-21.9 0-37.49-15.59Q160-698.11 160-720t15.59-37.49q15.59-15.59 37.49-15.59 21.89 0 37.48 15.59 15.59 15.6 15.59 37.49t-15.59 37.49q-15.59 15.59-37.48 15.59Z" /></svg>
icon:btn_new = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M224.62-160q-27.62 0-46.12-18.5Q160-197 160-224.62v-510.76q0-27.62 18.5-46.12Q197-800 224.62-800h180q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T404.62-760h-180q-9.24 0-16.93 7.69-7.69 7.69-7.69 16.93v510.76q0 9.24 7.69 16.93 7.69 7.69 16.93 7.69h510.76q9.24 0 16.93-7.69 7.69-7.69 7.69-16.93v-180q0-8.5 5.76-14.25t14.27-5.75q8.51 0 14.24 5.75t5.73 14.25v180q0 27.62-18.5 46.12Q763-160 735.38-160H224.62ZM640-640H540q-8.5 0-14.25-5.76T520-660.03q0-8.51 5.75-14.24T540-680h100v-100q0-8.5 5.76-14.25t14.27-5.75q8.51 0 14.24 5.75T680-780v100h100q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T780-640H680v100q0 8.5-5.76 14.25T659.97-520q-8.51 0-14.24-5.75T640-540v-100Z" /></svg>
icon:btn_create = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m354-287 126-76 126 77-33-144 111-96-146-13-58-136-58 135-146 13 111 97-33 143Zm126-28.92-145.23 87.69q-6.39 3.15-11.85 2.54-5.46-.62-10.61-3.77-5.16-3.16-7.85-9.04-2.69-5.88-.46-12.73l38.62-164.39-127.77-110.84q-5.39-4.39-7.12-10.5-1.73-6.12.73-11.73 2.46-5.62 6.62-9.16 4.15-3.53 11.23-4.77l168.61-14.69L460.69-733q2.69-6.62 7.81-9.54 5.12-2.92 11.5-2.92t11.5 2.92q5.12 2.92 7.81 9.54l65.77 155.69 168.61 14.69q7.08 1.24 11.23 4.77 4.16 3.54 6.62 9.16 2.46 5.61.73 11.73-1.73 6.11-7.12 10.5L617.38-415.62 656-251.23q2.23 6.85-.46 12.73-2.69 5.88-7.85 9.04-5.15 3.15-10.61 3.77-5.46.61-11.85-2.54L480-315.92ZM480-470Z" /></svg>
icon:btn_reset = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M316.15-240q-8.53 0-14.27-5.73-5.73-5.73-5.73-14.27t5.73-14.27q5.74-5.73 14.27-5.73h270.16q62.23 0 106.04-42.69 43.8-42.69 43.8-104.23 0-61.54-43.8-103.85-43.81-42.31-106.04-42.31H276.62l104.46 104.46q6.38 6.39 6.38 14.16 0 7.77-6.38 14.15-6.39 6.39-14.54 6-8.16-.38-13.77-6L222.62-570.46q-5.24-5.23-7.35-10.69-2.12-5.47-2.12-11.93t2.12-11.92q2.11-5.46 7.35-10.69l130.15-130.16q6.38-6.38 14.15-6.38 7.77 0 14.16 6.38 6.38 6.39 6 14.54-.39 8.16-6 13.77L276.62-613.08h309.69q78.54 0 134.19 54.16 55.65 54.15 55.65 132 0 77.84-55.65 132.38Q664.85-240 586.31-240H316.15Z" /></svg>
icon:btn_insert = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M460-600H360q-8.5 0-14.25-5.76T340-620.03q0-8.51 5.75-14.24T360-640h240q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T600-600H500v260q0 8.5-5.76 14.25T479.97-320q-8.51 0-14.24-5.75T460-340v-260ZM95.38-127.69v-104.62q0-13.73 9.29-23.02t23.02-9.29H160v-430.76h-32.44q-13.79 0-22.98-9.29-9.2-9.29-9.2-23.02v-104.62q0-13.73 9.29-23.02t23.02-9.29h104.62q13.73 0 23.02 9.29t9.29 23.02V-800h430.76v-32.44q0-13.79 9.29-22.98 9.29-9.2 23.02-9.2h104.62q13.73 0 23.02 9.29t9.29 23.02v104.62q0 13.73-9.29 23.02t-23.02 9.29H800v430.76h32.44q13.79 0 22.98 9.29 9.2 9.29 9.2 23.02v104.62q0 13.73-9.29 23.02t-23.02 9.29H727.69q-13.73 0-23.02-9.29t-9.29-23.02V-160H264.62v32.44q0 13.79-9.29 22.98-9.29 9.2-23.02 9.2H127.69q-13.73 0-23.02-9.29t-9.29-23.02ZM264.62-200h430.76v-32.44q0-13.79 9.29-22.98 9.29-9.2 23.02-9.2H760v-430.76h-32.44q-13.79 0-22.98-9.29-9.2-9.29-9.2-23.02V-760H264.62v32.44q0 13.79-9.29 22.98-9.29 9.2-23.02 9.2H200v430.76h32.44q13.79 0 22.98 9.29 9.2 9.29 9.2 23.02V-200ZM135.38-735.38h89.24v-89.24h-89.24v89.24Zm600 0h89.24v-89.24h-89.24v89.24Zm0 600h89.24v-89.24h-89.24v89.24Zm-600 0h89.24v-89.24h-89.24v89.24Zm89.24-600Zm510.76 0Zm0 510.76Zm-510.76 0Z" /></svg>
icon:btn_apply = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m424-396.31-99.85-99.84q-5.61-5.62-13.77-6-8.15-.39-14.53 6-6.39 6.38-6.39 14.15 0 7.77 6.39 14.15l105.53 105.54q9.7 9.69 22.62 9.69 12.92 0 22.62-9.69l219.07-219.07q5.62-5.62 6-13.77.39-8.16-6-14.54-6.38-6.39-14.15-6.39-7.77 0-14.16 6.39L424-396.31ZM224.62-160q-27.62 0-46.12-18.5Q160-197 160-224.62v-510.76q0-27.62 18.5-46.12Q197-800 224.62-800h510.76q27.62 0 46.12 18.5Q800-763 800-735.38v510.76q0 27.62-18.5 46.12Q763-160 735.38-160H224.62Zm0-40h510.76q9.24 0 16.93-7.69 7.69-7.69 7.69-16.93v-510.76q0-9.24-7.69-16.93-7.69-7.69-16.93-7.69H224.62q-9.24 0-16.93 7.69-7.69 7.69-7.69 16.93v510.76q0 9.24 7.69 16.93 7.69 7.69 16.93 7.69ZM200-760v560-560Z" /></svg>
icon:btn_build = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M763.85-257.38V-190q0 6.15 4.61 10.77 4.62 4.61 10.77 4.61 6.15 0 10.77-4.61 4.62-4.62 4.62-10.77v-103.85q0-6.46-4.85-11.3-4.85-4.85-11.31-4.85H674.62q-6.16 0-10.77 4.62-4.62 4.61-4.62 10.76 0 6.16 4.62 10.77 4.61 4.62 10.77 4.62H742l-90.31 90.31q-4.46 4.46-4.84 10.54-.39 6.07 4.84 11.3 4.74 4.46 11.07 4.46 6.32 0 10.78-4.46l90.31-90.3ZM224.62-160q-26.66 0-45.64-18.98T160-224.62v-510.76q0-26.66 18.98-45.64T224.62-800h510.76q26.66 0 45.64 18.98T800-735.38v204.61q0 8.5-5.76 14.25t-14.27 5.75q-8.51 0-14.24-5.75T760-530.77v-204.61q0-9.24-7.69-16.93-7.69-7.69-16.93-7.69H224.62q-9.24 0-16.93 7.69-7.69 7.69-7.69 16.93v510.76q0 9.24 7.69 16.93 7.69 7.69 16.93 7.69h204.61q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T429.23-160H224.62ZM200-239.73V-200v-560V-507.77v-3 271.04Zm100-89.47q0 8.51 5.75 14.24t14.25 5.73h118.38q8.5 0 14.25-5.76t5.75-14.27q0-8.51-5.75-14.24t-14.25-5.73H320q-8.5 0-14.25 5.76-5.75 5.75-5.75 14.27Zm0-150.77q0 8.51 5.75 14.24T320-460h259.23q8.5 0 14.25-5.76t5.75-14.27q0-8.51-5.75-14.24T579.23-500H320q-8.5 0-14.25 5.76T300-479.97Zm0-150.77q0 8.51 5.75 14.24t14.25 5.73h320q8.5 0 14.25-5.76 5.75-5.75 5.75-14.27 0-8.51-5.75-14.24T640-650.77H320q-8.5 0-14.25 5.76T300-630.74ZM720-75.38q-66.85 0-113.42-46.58Q560-168.54 560-235.38q0-66.85 46.58-113.43 46.57-46.57 113.42-46.57t113.42 46.57Q880-302.23 880-235.38q0 66.84-46.58 113.42Q786.85-75.38 720-75.38Z" /></svg>
icon:btn_print = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M344.62-160q-26.66 0-45.64-18.98T280-224.62V-320h-72.31q-26.65 0-45.63-18.98-18.98-18.98-18.98-45.64v-150.76q0-34 23.07-57 23.08-23 56.93-23h513.84q34 0 57 23t23 57v150.76q0 26.66-18.98 45.64T752.31-320H680v95.38q0 26.66-18.98 45.64T615.38-160H344.62ZM207.69-360H280q1.54-25.31 20.07-43.42 18.53-18.12 44.55-18.12h270.76q26.02 0 44.55 18.12Q678.46-385.31 680-360h72.31q10.77 0 17.69-6.92 6.92-6.93 6.92-17.7v-150.76q0-17-11.5-28.5t-28.5-11.5H223.08q-17 0-28.5 11.5t-11.5 28.5v150.76q0 10.77 6.92 17.7 6.92 6.92 17.69 6.92ZM640-615.38v-95.39q0-10.77-6.92-17.69-6.93-6.92-17.7-6.92H344.62q-10.77 0-17.7 6.92-6.92 6.92-6.92 17.69v95.39h-40v-95.39q0-26.65 18.98-45.63 18.98-18.99 45.64-18.99h270.76q26.66 0 45.64 18.99Q680-737.42 680-710.77v95.39h-40Zm64.62 140q17 0 28.5-11.5t11.5-28.5q0-17-11.5-28.5t-28.5-11.5q-17 0-28.5 11.5t-11.5 28.5q0 17 11.5 28.5t28.5 11.5ZM640-224.62v-132.3q0-10.77-6.92-17.7-6.93-6.92-17.7-6.92H344.62q-10.77 0-17.7 6.92-6.92 6.93-6.92 17.7v132.3q0 10.77 6.92 17.7 6.93 6.92 17.7 6.92h270.76q10.77 0 17.7-6.92 6.92-6.93 6.92-17.7ZM207.69-575.38h-24.61 593.84-569.23Z" /></svg>
icon:btn_preview = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M224.62-160q-26.66 0-45.64-18.98T160-224.62v-510.76q0-26.66 18.98-45.64T224.62-800h510.76q26.66 0 45.64 18.98T800-735.38v510.76q0 26.66-18.98 45.64T735.38-160H224.62Zm0-40h510.76q10.77 0 17.7-6.92 6.92-6.93 6.92-17.7V-680H200v455.38q0 10.77 6.92 17.7 6.93 6.92 17.7 6.92ZM480-320q-65.08 0-117.27-33.35-52.19-33.34-78.88-86.65 26.69-53.31 78.88-86.65Q414.92-560 480-560t117.27 33.35q52.19 33.34 78.88 86.65-26.69 53.31-78.88 86.65Q545.08-320 480-320Zm0-35.38q47.54 0 88.54-22.27 41-22.27 69.31-62.35-28.31-40.08-69.31-62.35-41-22.27-88.54-22.27-47.54 0-88.54 22.27-41 22.27-69.31 62.35 28.31 40.08 69.31 62.35 41 22.27 88.54 22.27Zm0-84.62Zm.18 44.62q18.67 0 31.55-13.07 12.89-13.07 12.89-31.73 0-18.67-13.07-31.55-13.07-12.89-31.73-12.89-18.67 0-31.55 13.07-12.89 13.07-12.89 31.73 0 18.67 13.07 31.55 13.07 12.89 31.73 12.89Z" /></svg>
icon:add = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M460-460H260q-8.5 0-14.25-5.76T240-480.03q0-8.51 5.75-14.24T260-500h200v-200q0-8.5 5.76-14.25t14.27-5.75q8.51 0 14.24 5.75T500-700v200h200q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T700-460H500v200q0 8.5-5.76 14.25T479.97-240q-8.51 0-14.24-5.75T460-260v-200Z" /></svg> icon:add = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M460-460H260q-8.5 0-14.25-5.76T240-480.03q0-8.51 5.75-14.24T260-500h200v-200q0-8.5 5.76-14.25t14.27-5.75q8.51 0 14.24 5.75T500-700v200h200q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T700-460H500v200q0 8.5-5.76 14.25T479.97-240q-8.51 0-14.24-5.75T460-260v-200Z" /></svg>
icon:bookmarks = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m420-203.08-149.54 64.31q-32.31 13.92-61.38-5.35Q180-163.38 180-197.92v-457.46q0-27.62 18.5-46.12Q217-720 244.62-720h350.76q27.62 0 46.12 18.5Q660-683 660-655.38v457.46q0 34.54-29.08 53.8-29.07 19.27-61.38 5.35L420-203.08Zm0-44.92 165.38 71.38q12.31 5.39 23.47-2.3 11.15-7.7 11.15-20.77v-455.69q0-9.24-7.69-16.93-7.69-7.69-16.93-7.69H244.62q-9.24 0-16.93 7.69-7.69 7.69-7.69 16.93v455.69q0 13.07 11.15 20.77 11.16 7.69 23.47 2.3L420-248Zm340 28q-8.54 0-14.27-5.73T740-240v-535.39q0-9.23-7.69-16.92-7.69-7.69-16.93-7.69H320q-8.54 0-14.27-5.73T300-820q0-8.54 5.73-14.27T320-840h395.38q27.62 0 46.12 18.5Q780-803 780-775.39V-240q0 8.54-5.73 14.27T760-220ZM420-680H220h400-200Z" /></svg> icon:bookmarks = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m420-203.08-149.54 64.31q-32.31 13.92-61.38-5.35Q180-163.38 180-197.92v-457.46q0-27.62 18.5-46.12Q217-720 244.62-720h350.76q27.62 0 46.12 18.5Q660-683 660-655.38v457.46q0 34.54-29.08 53.8-29.07 19.27-61.38 5.35L420-203.08Zm0-44.92 165.38 71.38q12.31 5.39 23.47-2.3 11.15-7.7 11.15-20.77v-455.69q0-9.24-7.69-16.93-7.69-7.69-16.93-7.69H244.62q-9.24 0-16.93 7.69-7.69 7.69-7.69 16.93v455.69q0 13.07 11.15 20.77 11.16 7.69 23.47 2.3L420-248Zm340 28q-8.54 0-14.27-5.73T740-240v-535.39q0-9.23-7.69-16.92-7.69-7.69-16.93-7.69H320q-8.54 0-14.27-5.73T300-820q0-8.54 5.73-14.27T320-840h395.38q27.62 0 46.12 18.5Q780-803 780-775.39V-240q0 8.54-5.73 14.27T760-220ZM420-680H220h400-200Z" /></svg>
icon:browse = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M180-200q-25.31 0-42.65-17.35Q120-234.69 120-260v-435.38q0-25.31 19.65-44.97Q159.31-760 184.62-760H357q12.92 0 25.12 5.23 12.19 5.23 20.88 13.92L463.85-680h349.23q8.54 0 14.27 5.73t5.73 14.27q0 8.54-5.73 14.27T813.08-640H447.77l-80-80H184.62q-10.77 0-17.7 6.92-6.92 6.93-6.92 17.7V-240q0-10.77 4.23-8.08 4.23 2.7 11.15 6.54l76.7-256.84q6.46-20.62 23.73-33.43 17.27-12.81 38.65-12.81h512.92q32.54 0 52.2 25.97 19.65 25.96 10.19 57.03l-65.85 219.24q-5.69 19.07-21.8 30.73Q786-200 766.15-200H180Zm37.08-40h546q8.46 0 15-4.62 6.54-4.61 8.84-13.07l64.31-215.39q3.85-12.3-3.85-21.92-7.69-9.62-20-9.62H314.46q-8.46 0-15 4.62-6.54 4.62-8.84 13.08L217.08-240ZM160-498.15V-720v221.85ZM217.08-240l73.54-246.92q2.3-8.46 3.84-13.08l1.54-4.62-2.69 9.62q-2.69 9.62-6.54 21.92l-64.31 215.39q-2.31 8.46-3.84 13.07l-1.54 4.62Z" /></svg> icon:browse = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M180-200q-25.31 0-42.65-17.35Q120-234.69 120-260v-435.38q0-25.31 19.65-44.97Q159.31-760 184.62-760H357q12.92 0 25.12 5.23 12.19 5.23 20.88 13.92L463.85-680h349.23q8.54 0 14.27 5.73t5.73 14.27q0 8.54-5.73 14.27T813.08-640H447.77l-80-80H184.62q-10.77 0-17.7 6.92-6.92 6.93-6.92 17.7V-240q0-10.77 4.23-8.08 4.23 2.7 11.15 6.54l76.7-256.84q6.46-20.62 23.73-33.43 17.27-12.81 38.65-12.81h512.92q32.54 0 52.2 25.97 19.65 25.96 10.19 57.03l-65.85 219.24q-5.69 19.07-21.8 30.73Q786-200 766.15-200H180Zm37.08-40h546q8.46 0 15-4.62 6.54-4.61 8.84-13.07l64.31-215.39q3.85-12.3-3.85-21.92-7.69-9.62-20-9.62H314.46q-8.46 0-15 4.62-6.54 4.62-8.84 13.08L217.08-240ZM160-498.15V-720v221.85ZM217.08-240l73.54-246.92q2.3-8.46 3.84-13.08l1.54-4.62-2.69 9.62q-2.69 9.62-6.54 21.92l-64.31 215.39q-2.31 8.46-3.84 13.07l-1.54 4.62Z" /></svg>
@@ -94,7 +111,6 @@ icon:minimise = <svg xmlns="http://www.w3.org/2000/svg" height="128" view
icon:more_arrow = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M436.4-350.31q-6.71 0-11.55-4.44-4.85-4.44-4.85-11.71v-227.08q0-7.27 4.95-11.71 4.95-4.44 11.55-4.44 1.65 0 11.35 5.23l107.07 107.08q3.7 3.69 5.7 7.97 2 4.28 2 9.41t-2 9.41q-2 4.28-5.7 7.98L447.83-355.52q-2.21 2.21-5.15 3.71-2.93 1.5-6.28 1.5Z" /></svg> icon:more_arrow = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M436.4-350.31q-6.71 0-11.55-4.44-4.85-4.44-4.85-11.71v-227.08q0-7.27 4.95-11.71 4.95-4.44 11.55-4.44 1.65 0 11.35 5.23l107.07 107.08q3.7 3.69 5.7 7.97 2 4.28 2 9.41t-2 9.41q-2 4.28-5.7 7.98L447.83-355.52q-2.21 2.21-5.15 3.71-2.93 1.5-6.28 1.5Z" /></svg>
icon:more_vertical = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-218.46q-16.5 0-28.25-11.75T440-258.46q0-16.5 11.75-28.25T480-298.46q16.5 0 28.25 11.75T520-258.46q0 16.5-11.75 28.25T480-218.46ZM480-440q-16.5 0-28.25-11.75T440-480q0-16.5 11.75-28.25T480-520q16.5 0 28.25 11.75T520-480q0 16.5-11.75 28.25T480-440Zm0-221.54q-16.5 0-28.25-11.75T440-701.54q0-16.5 11.75-28.25T480-741.54q16.5 0 28.25 11.75T520-701.54q0 16.5-11.75 28.25T480-661.54Z" /></svg> icon:more_vertical = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-218.46q-16.5 0-28.25-11.75T440-258.46q0-16.5 11.75-28.25T480-298.46q16.5 0 28.25 11.75T520-258.46q0 16.5-11.75 28.25T480-218.46ZM480-440q-16.5 0-28.25-11.75T440-480q0-16.5 11.75-28.25T480-520q16.5 0 28.25 11.75T520-480q0 16.5-11.75 28.25T480-440Zm0-221.54q-16.5 0-28.25-11.75T440-701.54q0-16.5 11.75-28.25T480-741.54q16.5 0 28.25 11.75T520-701.54q0 16.5-11.75 28.25T480-661.54Z" /></svg>
icon:noncheckable = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M320-460h320q8.54 0 14.27-5.73T660-480q0-8.54-5.73-14.27T640-500H320q-8.54 0-14.27 5.73T300-480q0 8.54 5.73 14.27T320-460Zm-95.38 300q-27.62 0-46.12-18.5Q160-197 160-224.62v-510.76q0-27.62 18.5-46.12Q197-800 224.62-800h510.76q27.62 0 46.12 18.5Q800-763 800-735.38v510.76q0 27.62-18.5 46.12Q763-160 735.38-160H224.62Zm0-40h510.76q9.24 0 16.93-7.69 7.69-7.69 7.69-16.93v-510.76q0-9.24-7.69-16.93-7.69-7.69-16.93-7.69H224.62q-9.24 0-16.93 7.69-7.69 7.69-7.69 16.93v510.76q0 9.24 7.69 16.93 7.69 7.69 16.93 7.69ZM200-760v560-560Z" /></svg> icon:noncheckable = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M320-460h320q8.54 0 14.27-5.73T660-480q0-8.54-5.73-14.27T640-500H320q-8.54 0-14.27 5.73T300-480q0 8.54 5.73 14.27T320-460Zm-95.38 300q-27.62 0-46.12-18.5Q160-197 160-224.62v-510.76q0-27.62 18.5-46.12Q197-800 224.62-800h510.76q27.62 0 46.12 18.5Q800-763 800-735.38v510.76q0 27.62-18.5 46.12Q763-160 735.38-160H224.62Zm0-40h510.76q9.24 0 16.93-7.69 7.69-7.69 7.69-16.93v-510.76q0-9.24-7.69-16.93-7.69-7.69-16.93-7.69H224.62q-9.24 0-16.93 7.69-7.69 7.69-7.69 16.93v510.76q0 9.24 7.69 16.93 7.69 7.69 16.93 7.69ZM200-760v560-560Z" /></svg>
icon:open = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M224.62-160q-27.62 0-46.12-18.5Q160-197 160-224.62v-510.76q0-27.62 18.5-46.12Q197-800 224.62-800h204.61q8.54 0 14.27 5.73t5.73 14.27q0 8.54-5.73 14.27T429.23-760H224.62q-9.24 0-16.93 7.69-7.69 7.69-7.69 16.93v510.76q0 9.24 7.69 16.93 7.69 7.69 16.93 7.69h510.76q9.24 0 16.93-7.69 7.69-7.69 7.69-16.93v-204.61q0-8.54 5.73-14.27t14.27-5.73q8.54 0 14.27 5.73t5.73 14.27v204.61q0 27.62-18.5 46.12Q763-160 735.38-160H224.62ZM760-731.69 403.69-375.38q-5.61 5.61-13.77 6-8.15.38-14.54-6-6.38-6.39-6.38-14.16 0-7.77 6.38-14.15L731.69-760H580q-8.54 0-14.27-5.73T560-780q0-8.54 5.73-14.27T580-800h187.69q13.93 0 23.12 9.19 9.19 9.19 9.19 23.12V-580q0 8.54-5.73 14.27T780-560q-8.54 0-14.27-5.73T760-580v-151.69Z" /></svg>
icon:panel = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M224.62-160q-26.85 0-45.74-18.88Q160-197.77 160-224.62v-510.76q0-26.85 18.88-45.74Q197.77-800 224.62-800h510.76q26.85 0 45.74 18.88Q800-762.23 800-735.38v510.76q0 26.85-18.88 45.74Q762.23-160 735.38-160H224.62ZM200-320v95.38q0 9.24 7.69 16.93 7.69 7.69 16.93 7.69h510.76q9.24 0 16.93-7.69 7.69-7.69 7.69-16.93V-320H200Zm0-40h560v-375.38q0-9.24-7.69-16.93-7.69-7.69-16.93-7.69H224.62q-9.24 0-16.93 7.69-7.69 7.69-7.69 16.93V-360Zm0 40v120-120Z" /></svg> icon:panel = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M224.62-160q-26.85 0-45.74-18.88Q160-197.77 160-224.62v-510.76q0-26.85 18.88-45.74Q197.77-800 224.62-800h510.76q26.85 0 45.74 18.88Q800-762.23 800-735.38v510.76q0 26.85-18.88 45.74Q762.23-160 735.38-160H224.62ZM200-320v95.38q0 9.24 7.69 16.93 7.69 7.69 16.93 7.69h510.76q9.24 0 16.93-7.69 7.69-7.69 7.69-16.93V-320H200Zm0-40h560v-375.38q0-9.24-7.69-16.93-7.69-7.69-16.93-7.69H224.62q-9.24 0-16.93 7.69-7.69 7.69-7.69 16.93V-360Zm0 40v120-120Z" /></svg>
icon:pin = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M600-760v296.92l57.23 57.23q2.92 2.93 4.39 6.58 1.46 3.65 1.46 7.55v11.21q0 8.28-5.97 14.39-5.98 6.12-14.8 6.12H500v186.61q0 6.7-2.23 12.28-2.23 5.57-7.46 10.8l-3.23 3.23q-3.07 2.93-7.15 2.93t-7.01-2.93l-3.23-3.23q-5.23-5.23-7.46-10.97-2.23-5.75-2.23-11.87V-360H317.69q-8.82 0-14.8-6.12-5.97-6.11-5.97-14.39v-11.21q0-3.9 1.46-7.55 1.47-3.65 4.39-6.58L360-463.08V-760h-20q-8.5 0-14.25-5.76T320-780.03q0-8.51 5.75-14.24T340-800h280q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T620-760h-20ZM354-400h252l-46-46v-314H400v314l-46 46Zm126 0Z" /></svg> icon:pin = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M600-760v296.92l57.23 57.23q2.92 2.93 4.39 6.58 1.46 3.65 1.46 7.55v11.21q0 8.28-5.97 14.39-5.98 6.12-14.8 6.12H500v186.61q0 6.7-2.23 12.28-2.23 5.57-7.46 10.8l-3.23 3.23q-3.07 2.93-7.15 2.93t-7.01-2.93l-3.23-3.23q-5.23-5.23-7.46-10.97-2.23-5.75-2.23-11.87V-360H317.69q-8.82 0-14.8-6.12-5.97-6.11-5.97-14.39v-11.21q0-3.9 1.46-7.55 1.47-3.65 4.39-6.58L360-463.08V-760h-20q-8.5 0-14.25-5.76T320-780.03q0-8.51 5.75-14.24T340-800h280q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T620-760h-20ZM354-400h252l-46-46v-314H400v314l-46 46Zm126 0Z" /></svg>
icon:project_copy = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M144.62-169.23q-26.85 0-45.74-18.89Q80-207 80-233.85v-423.07q0-8.54 5.73-14.27t14.27-5.73q8.54 0 14.27 5.73t5.73 14.27v423.07q0 10.77 6.92 17.7 6.93 6.92 17.7 6.92H740q8.54 0 14.27 5.73t5.73 14.27q0 8.54-5.73 14.27T740-169.23H144.62Zm120-120q-26.85 0-45.74-18.89Q200-327 200-353.85v-421.53q0-26.85 18.88-45.74Q237.77-840 264.62-840h171.61q12.92 0 25.12 5.23 12.19 5.23 20.88 13.92L543.08-760h272.3q26.85 0 45.74 18.88Q880-722.23 880-695.38v341.53q0 26.85-18.88 45.73-18.89 18.89-45.74 18.89H264.62Zm0-40h550.76q10.77 0 17.7-6.92 6.92-6.93 6.92-17.7v-341.53q0-10.77-6.92-17.7-6.93-6.92-17.7-6.92H527l-80-80H264.62q-10.77 0-17.7 6.92-6.92 6.93-6.92 17.7v421.53q0 10.77 6.92 17.7 6.93 6.92 17.7 6.92Zm-24.62 0V-800v470.77Z" /></svg> icon:project_copy = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M144.62-169.23q-26.85 0-45.74-18.89Q80-207 80-233.85v-423.07q0-8.54 5.73-14.27t14.27-5.73q8.54 0 14.27 5.73t5.73 14.27v423.07q0 10.77 6.92 17.7 6.93 6.92 17.7 6.92H740q8.54 0 14.27 5.73t5.73 14.27q0 8.54-5.73 14.27T740-169.23H144.62Zm120-120q-26.85 0-45.74-18.89Q200-327 200-353.85v-421.53q0-26.85 18.88-45.74Q237.77-840 264.62-840h171.61q12.92 0 25.12 5.23 12.19 5.23 20.88 13.92L543.08-760h272.3q26.85 0 45.74 18.88Q880-722.23 880-695.38v341.53q0 26.85-18.88 45.73-18.89 18.89-45.74 18.89H264.62Zm0-40h550.76q10.77 0 17.7-6.92 6.92-6.93 6.92-17.7v-341.53q0-10.77-6.92-17.7-6.93-6.92-17.7-6.92H527l-80-80H264.62q-10.77 0-17.7 6.92-6.92 6.93-6.92 17.7v421.53q0 10.77 6.92 17.7 6.93 6.92 17.7 6.92Zm-24.62 0V-800v470.77Z" /></svg>
@@ -103,7 +119,6 @@ icon:refresh = <svg xmlns="http://www.w3.org/2000/svg" height="128" view
icon:remove = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M260-460q-8.5 0-14.25-5.76T240-480.03q0-8.51 5.75-14.24T260-500h440q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T700-460H260Z" /></svg> icon:remove = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M260-460q-8.5 0-14.25-5.76T240-480.03q0-8.51 5.75-14.24T260-500h440q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T700-460H260Z" /></svg>
icon:revert = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M478.46-160q-115.23 0-202.61-71.12Q188.46-302.23 165.62-412q-2.47-8.85 2.6-16.37 5.06-7.53 13.68-8.73 8.1-1.21 14.56 3.72 6.46 4.92 9.16 14Q227.31-324 303.46-262q76.16 62 175 62 117 0 198.5-81.5t81.5-198.5q0-117-81.5-198.5T478.46-760q-62.08 0-116.69 26.23-54.62 26.23-96.39 72.23h79.24q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24t-14.25 5.73H230.77q-13.73 0-23.02-9.29t-9.29-23.02v-113.84q0-8.5 5.76-14.25t14.27-5.75q8.51 0 14.24 5.75t5.73 14.25v75.54q46.39-50.93 108.73-79.39Q409.54-800 478.46-800q66.6 0 124.76 25.04 58.16 25.04 101.66 68.54 43.5 43.5 68.54 101.65 25.04 58.14 25.04 124.73 0 66.58-25.04 124.77t-68.54 101.69q-43.5 43.5-101.66 68.54Q545.06-160 478.46-160Zm0-280q-16.08 0-28.04-11.96T438.46-480q0-16.08 11.96-28.04T478.46-520q16.08 0 28.04 11.96T518.46-480q0 16.08-11.96 28.04T478.46-440Z" /></svg> icon:revert = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M478.46-160q-115.23 0-202.61-71.12Q188.46-302.23 165.62-412q-2.47-8.85 2.6-16.37 5.06-7.53 13.68-8.73 8.1-1.21 14.56 3.72 6.46 4.92 9.16 14Q227.31-324 303.46-262q76.16 62 175 62 117 0 198.5-81.5t81.5-198.5q0-117-81.5-198.5T478.46-760q-62.08 0-116.69 26.23-54.62 26.23-96.39 72.23h79.24q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24t-14.25 5.73H230.77q-13.73 0-23.02-9.29t-9.29-23.02v-113.84q0-8.5 5.76-14.25t14.27-5.75q8.51 0 14.24 5.75t5.73 14.25v75.54q46.39-50.93 108.73-79.39Q409.54-800 478.46-800q66.6 0 124.76 25.04 58.16 25.04 101.66 68.54 43.5 43.5 68.54 101.65 25.04 58.14 25.04 124.73 0 66.58-25.04 124.77t-68.54 101.69q-43.5 43.5-101.66 68.54Q545.06-160 478.46-160Zm0-280q-16.08 0-28.04-11.96T438.46-480q0-16.08 11.96-28.04T478.46-520q16.08 0 28.04 11.96T518.46-480q0 16.08-11.96 28.04T478.46-440Z" /></svg>
icon:settings = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M438.38-120q-13.92 0-24.19-9.15-10.27-9.16-12.73-22.85l-10.54-83.69q-19.15-5.77-41.42-18.16-22.27-12.38-37.88-26.53L235-247.46q-12.69 5.61-25.77 1.23-13.08-4.39-20.15-16.62l-43.16-74.3q-7.07-12.23-4.15-25.54 2.92-13.31 13.92-21.85l66.85-50q-1.77-10.84-2.92-22.34-1.16-11.5-1.16-22.35 0-10.08 1.16-21.19 1.15-11.12 2.92-25.04l-66.85-50q-11-8.54-13.54-22.23-2.53-13.69 4.54-25.93l42.39-72q7.07-11.46 20.15-16.23 13.08-4.77 25.77.85l75.85 32.15q17.92-14.92 38.77-26.92 20.84-12 40.53-18.54L401.46-808q2.46-13.69 12.73-22.85 10.27-9.15 24.19-9.15h83.24q13.92 0 24.19 9.15 10.27 9.16 12.73 22.85l10.54 84.46q23 8.08 40.65 18.54 17.65 10.46 36.35 26.15L725.77-711q12.69-5.62 25.77-.85 13.08 4.77 20.15 16.23l42.39 72.77q7.07 12.23 4.15 25.54-2.92 13.31-13.92 21.85l-69.93 52.31q3.31 12.38 3.7 22.73.38 10.34.38 20.42 0 9.31-.77 19.65-.77 10.35-3.54 25.04l67.62 50.77q11 8.54 14.31 21.85 3.3 13.31-3.77 25.54l-42.62 73.53q-7.07 12.24-20.54 16.62-13.46 4.38-26.15-1.23l-76.92-32.92q-18.7 15.69-37.62 26.92-18.92 11.23-39.38 17.77L558.54-152q-2.46 13.69-12.73 22.85-10.27 9.15-24.19 9.15h-83.24Zm1.62-40h78.23L533-268.31q30.23-8 54.42-21.96 24.2-13.96 49.27-38.27L736.46-286l39.77-68-87.54-65.77q5-17.08 6.62-31.42 1.61-14.35 1.61-28.81 0-15.23-1.61-28.81-1.62-13.57-6.62-29.88L777.77-606 738-674l-102.08 42.77q-18.15-19.92-47.73-37.35-29.57-17.42-55.96-23.11L520-800h-79.77l-12.46 107.54q-30.23 6.46-55.58 20.81-25.34 14.34-50.42 39.42L222-674l-39.77 68L269-541.23q-5 13.46-7 29.23t-2 32.77q0 15.23 2 30.23t6.23 29.23l-86 65.77L222-286l99-42q23.54 23.77 48.88 38.12 25.35 14.34 57.12 22.34L440-160Zm38.92-220q41.85 0 70.93-29.08 29.07-29.07 29.07-70.92t-29.07-70.92Q520.77-580 478.92-580q-42.07 0-71.04 29.08-28.96 29.07-28.96 70.92t28.96 70.92Q436.85-380 478.92-380ZM480-480Z" /></svg> icon:settings = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M438.38-120q-13.92 0-24.19-9.15-10.27-9.16-12.73-22.85l-10.54-83.69q-19.15-5.77-41.42-18.16-22.27-12.38-37.88-26.53L235-247.46q-12.69 5.61-25.77 1.23-13.08-4.39-20.15-16.62l-43.16-74.3q-7.07-12.23-4.15-25.54 2.92-13.31 13.92-21.85l66.85-50q-1.77-10.84-2.92-22.34-1.16-11.5-1.16-22.35 0-10.08 1.16-21.19 1.15-11.12 2.92-25.04l-66.85-50q-11-8.54-13.54-22.23-2.53-13.69 4.54-25.93l42.39-72q7.07-11.46 20.15-16.23 13.08-4.77 25.77.85l75.85 32.15q17.92-14.92 38.77-26.92 20.84-12 40.53-18.54L401.46-808q2.46-13.69 12.73-22.85 10.27-9.15 24.19-9.15h83.24q13.92 0 24.19 9.15 10.27 9.16 12.73 22.85l10.54 84.46q23 8.08 40.65 18.54 17.65 10.46 36.35 26.15L725.77-711q12.69-5.62 25.77-.85 13.08 4.77 20.15 16.23l42.39 72.77q7.07 12.23 4.15 25.54-2.92 13.31-13.92 21.85l-69.93 52.31q3.31 12.38 3.7 22.73.38 10.34.38 20.42 0 9.31-.77 19.65-.77 10.35-3.54 25.04l67.62 50.77q11 8.54 14.31 21.85 3.3 13.31-3.77 25.54l-42.62 73.53q-7.07 12.24-20.54 16.62-13.46 4.38-26.15-1.23l-76.92-32.92q-18.7 15.69-37.62 26.92-18.92 11.23-39.38 17.77L558.54-152q-2.46 13.69-12.73 22.85-10.27 9.15-24.19 9.15h-83.24Zm1.62-40h78.23L533-268.31q30.23-8 54.42-21.96 24.2-13.96 49.27-38.27L736.46-286l39.77-68-87.54-65.77q5-17.08 6.62-31.42 1.61-14.35 1.61-28.81 0-15.23-1.61-28.81-1.62-13.57-6.62-29.88L777.77-606 738-674l-102.08 42.77q-18.15-19.92-47.73-37.35-29.57-17.42-55.96-23.11L520-800h-79.77l-12.46 107.54q-30.23 6.46-55.58 20.81-25.34 14.34-50.42 39.42L222-674l-39.77 68L269-541.23q-5 13.46-7 29.23t-2 32.77q0 15.23 2 30.23t6.23 29.23l-86 65.77L222-286l99-42q23.54 23.77 48.88 38.12 25.35 14.34 57.12 22.34L440-160Zm38.92-220q41.85 0 70.93-29.08 29.07-29.07 29.07-70.92t-29.07-70.92Q520.77-580 478.92-580q-42.07 0-71.04 29.08-28.96 29.07-28.96 70.92t28.96 70.92Q436.85-380 478.92-380ZM480-480Z" /></svg>
icon:star = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m354-287 126-76 126 77-33-144 111-96-146-13-58-136-58 135-146 13 111 97-33 143Zm126-28.92-145.23 87.69q-6.39 3.15-11.85 2.54-5.46-.62-10.61-3.77-5.16-3.16-7.85-9.04-2.69-5.88-.46-12.73l38.62-164.39-127.77-110.84q-5.39-4.39-7.12-10.5-1.73-6.12.73-11.73 2.46-5.62 6.62-9.16 4.15-3.53 11.23-4.77l168.61-14.69L460.69-733q2.69-6.62 7.81-9.54 5.12-2.92 11.5-2.92t11.5 2.92q5.12 2.92 7.81 9.54l65.77 155.69 168.61 14.69q7.08 1.24 11.23 4.77 4.16 3.54 6.62 9.16 2.46 5.61.73 11.73-1.73 6.11-7.12 10.5L617.38-415.62 656-251.23q2.23 6.85-.46 12.73-2.69 5.88-7.85 9.04-5.15 3.15-10.61 3.77-5.46.61-11.85-2.54L480-315.92ZM480-470Z" /></svg>
icon:stats = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m125.38-174.62 212.24-212.23q18.38-18.38 45.46-18.38 27.07 0 45.46 18.38l96.08 96.08q7.69 7.69 18.46 7.31 10.77-.39 17.69-8.85l248.31-285.15q5.61-6.85 13.5-6.85 7.88 0 14.5 5.85 5.61 5.61 6.11 13.04.5 7.42-5.11 14.04L589.85-264.77q-18.39 21.39-46.23 22.5-27.85 1.12-48.24-19.27l-94.61-94.61q-6.92-6.93-17.69-6.93-10.77 0-17.7 6.93L154.62-145.38q-6.08 6.07-14.24 6.46-8.15.38-15-6.46-6.84-6.85-6.84-14.62t6.84-14.62Zm0-240 212.24-212.23q18.38-18.38 45.46-18.38 27.07 0 45.46 18.38l96.08 96.08q7.69 7.69 18.46 7.31 10.77-.39 17.69-8.85l248.31-285.15q5.61-6.85 13.5-6.85 7.88 0 14.5 5.85 5.61 5.61 6.11 13.04.5 7.42-5.11 14.04L589.85-504.77q-18.39 21.39-46.23 22.5-27.85 1.12-48.24-19.27l-94.61-94.61q-6.92-6.93-17.69-6.93-10.77 0-17.7 6.93L154.62-385.38q-6.08 6.07-14.24 6.46-8.15.38-15-6.46-6.84-6.85-6.84-14.62t6.84-14.62Z" /></svg> icon:stats = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m125.38-174.62 212.24-212.23q18.38-18.38 45.46-18.38 27.07 0 45.46 18.38l96.08 96.08q7.69 7.69 18.46 7.31 10.77-.39 17.69-8.85l248.31-285.15q5.61-6.85 13.5-6.85 7.88 0 14.5 5.85 5.61 5.61 6.11 13.04.5 7.42-5.11 14.04L589.85-264.77q-18.39 21.39-46.23 22.5-27.85 1.12-48.24-19.27l-94.61-94.61q-6.92-6.93-17.69-6.93-10.77 0-17.7 6.93L154.62-145.38q-6.08 6.07-14.24 6.46-8.15.38-15-6.46-6.84-6.85-6.84-14.62t6.84-14.62Zm0-240 212.24-212.23q18.38-18.38 45.46-18.38 27.07 0 45.46 18.38l96.08 96.08q7.69 7.69 18.46 7.31 10.77-.39 17.69-8.85l248.31-285.15q5.61-6.85 13.5-6.85 7.88 0 14.5 5.85 5.61 5.61 6.11 13.04.5 7.42-5.11 14.04L589.85-504.77q-18.39 21.39-46.23 22.5-27.85 1.12-48.24-19.27l-94.61-94.61q-6.92-6.93-17.69-6.93-10.77 0-17.7 6.93L154.62-385.38q-6.08 6.07-14.24 6.46-8.15.38-15-6.46-6.84-6.85-6.84-14.62t6.84-14.62Z" /></svg>
icon:text = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M224.62-231.54q-10.47 0-17.54-6.84-7.08-6.85-7.08-16.96 0-10.12 7.08-17.39 7.07-7.27 17.54-7.27H500q8.5 0 14.25 5.97t5.75 14.8q0 8.5-5.73 14.25t-13.5 5.75l-276.15 7.69ZM220-386.92q-8.5 0-14.25-5.76T200-406.95q0-8.51 5.75-14.24t14.25-5.73h520q8.5 0 14.25 5.75 5.75 5.76 5.75 14.27 0 8.52-5.75 14.25T740-386.92H220Zm0-146.16q-8.5 0-14.25-5.75-5.75-5.76-5.75-14.27 0-8.52 5.75-14.25t14.25-5.73h520q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T740-533.08H220ZM224.62-680q-10.47 0-17.54-7.08-7.08-7.07-7.08-17.54 0-10.46 7.08-17.53 7.07-7.08 17.54-7.08h510.76q10.47 0 17.54 7.08 7.08 7.07 7.08 17.53 0 10.47-7.08 17.54-7.07 7.08-17.54 7.08H224.62Z" /></svg> icon:text = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M224.62-231.54q-10.47 0-17.54-6.84-7.08-6.85-7.08-16.96 0-10.12 7.08-17.39 7.07-7.27 17.54-7.27H500q8.5 0 14.25 5.97t5.75 14.8q0 8.5-5.73 14.25t-13.5 5.75l-276.15 7.69ZM220-386.92q-8.5 0-14.25-5.76T200-406.95q0-8.51 5.75-14.24t14.25-5.73h520q8.5 0 14.25 5.75 5.75 5.76 5.75 14.27 0 8.52-5.75 14.25T740-386.92H220Zm0-146.16q-8.5 0-14.25-5.75-5.75-5.76-5.75-14.27 0-8.52 5.75-14.25t14.25-5.73h520q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T740-533.08H220ZM224.62-680q-10.47 0-17.54-7.08-7.08-7.07-7.08-17.54 0-10.46 7.08-17.53 7.07-7.08 17.54-7.08h510.76q10.47 0 17.54 7.08 7.08 7.07 7.08 17.53 0 10.47-7.08 17.54-7.07 7.08-17.54 7.08H224.62Z" /></svg>
icon:timer_off = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-760q56.57 0 110.79 20.38 54.21 20.39 100.59 59.16L720.92-710q5.62-5.62 13.77-6 8.16-.38 14.54 6 6.39 6.38 6.39 14.15 0 7.77-6.39 14.16l-29.54 29.54q38.77 46.38 59.54 100.85Q800-496.84 800-440q0 26-4.38 52.27-4.39 26.27-13.16 51.5-3.6 11.19-11.57 14.75-7.97 3.56-15.04.86-7.08-2.69-11.58-9.15-4.5-6.46-1.58-14.23 8.77-23.54 13.04-47.35Q760-415.15 760-440q0-116-82-198t-198-82q-22.56 0-48.51 4.27t-48.95 13.04q-7.77 2.69-14-1.31t-8.92-11.08q-2.7-7.07.34-14.88 3.04-7.81 13.81-11.73 26-9.16 53-13.73 27-4.58 53.23-4.58Zm20 187.23v-31.85q0-8.5-5.75-14.25T480-624.62q-6.01 0-11.12 4-5.11 4-7.03 9.7L500-572.77ZM480-120q-65.95 0-124.32-25.04-58.37-25.04-101.99-68.65-43.61-43.62-68.65-101.99Q160-374.05 160-440q0-61.54 21.96-117.42 21.96-55.89 63.89-100.12L119.38-784q-5.61-5.62-6-13.77-.38-8.15 6-14.54 6.39-6.38 14.16-6.38 7.77 0 14.15 6.38l664.62 664.62q5.61 5.61 6 13.77.38 8.15-6 14.54-6.39 6.38-14.16 6.38-7.77 0-14.15-6.38l-86.46-86.47q-42.62 40.39-99.66 63.12Q540.85-120 480-120Zm0-40q51.27 0 100.1-19.54 48.82-19.54 88.44-55.08L274.15-629q-35.53 38.08-54.84 86.54Q200-494 200-440q0 116 82 198t198 82Zm-84.62-700q-8.5 0-14.25-5.76t-5.75-14.27q0-8.51 5.75-14.24t14.25-5.73h169.24q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T564.62-860H395.38Zm76.08 428.08ZM556.77-517Z" /></svg> icon:timer_off = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-760q56.57 0 110.79 20.38 54.21 20.39 100.59 59.16L720.92-710q5.62-5.62 13.77-6 8.16-.38 14.54 6 6.39 6.38 6.39 14.15 0 7.77-6.39 14.16l-29.54 29.54q38.77 46.38 59.54 100.85Q800-496.84 800-440q0 26-4.38 52.27-4.39 26.27-13.16 51.5-3.6 11.19-11.57 14.75-7.97 3.56-15.04.86-7.08-2.69-11.58-9.15-4.5-6.46-1.58-14.23 8.77-23.54 13.04-47.35Q760-415.15 760-440q0-116-82-198t-198-82q-22.56 0-48.51 4.27t-48.95 13.04q-7.77 2.69-14-1.31t-8.92-11.08q-2.7-7.07.34-14.88 3.04-7.81 13.81-11.73 26-9.16 53-13.73 27-4.58 53.23-4.58Zm20 187.23v-31.85q0-8.5-5.75-14.25T480-624.62q-6.01 0-11.12 4-5.11 4-7.03 9.7L500-572.77ZM480-120q-65.95 0-124.32-25.04-58.37-25.04-101.99-68.65-43.61-43.62-68.65-101.99Q160-374.05 160-440q0-61.54 21.96-117.42 21.96-55.89 63.89-100.12L119.38-784q-5.61-5.62-6-13.77-.38-8.15 6-14.54 6.39-6.38 14.16-6.38 7.77 0 14.15 6.38l664.62 664.62q5.61 5.61 6 13.77.38 8.15-6 14.54-6.39 6.38-14.16 6.38-7.77 0-14.15-6.38l-86.46-86.47q-42.62 40.39-99.66 63.12Q540.85-120 480-120Zm0-40q51.27 0 100.1-19.54 48.82-19.54 88.44-55.08L274.15-629q-35.53 38.08-54.84 86.54Q200-494 200-440q0 116 82 198t198 82Zm-84.62-700q-8.5 0-14.25-5.76t-5.75-14.27q0-8.51 5.75-14.24t14.25-5.73h169.24q8.5 0 14.25 5.76t5.75 14.27q0 8.51-5.75 14.24T564.62-860H395.38Zm76.08 428.08ZM556.77-517Z" /></svg>
@@ -59,6 +59,23 @@ icon:sb_stats = <svg xmlns="http://www.w3.org/2000/svg" height="128" view
icon:theme_light = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-360q50 0 85-35t35-85q0-50-35-85t-85-35q-50 0-85 35t-35 85q0 50 35 85t85 35Zm0 80q-83 0-141.5-58.5T280-480q0-83 58.5-141.5T480-680q83 0 141.5 58.5T680-480q0 83-58.5 141.5T480-280ZM200-440H40v-80h160v80Zm720 0H760v-80h160v80ZM440-760v-160h80v160h-80Zm0 720v-160h80v160h-80ZM256-650l-101-97 57-59 96 100-52 56Zm492 496-97-101 53-55 101 97-57 59Zm-98-550 97-101 59 57-100 96-56-52ZM154-212l101-97 55 53-97 101-59-57Zm326-268Z" /></svg> icon:theme_light = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-360q50 0 85-35t35-85q0-50-35-85t-85-35q-50 0-85 35t-35 85q0 50 35 85t85 35Zm0 80q-83 0-141.5-58.5T280-480q0-83 58.5-141.5T480-680q83 0 141.5 58.5T680-480q0 83-58.5 141.5T480-280ZM200-440H40v-80h160v80Zm720 0H760v-80h160v80ZM440-760v-160h80v160h-80Zm0 720v-160h80v160h-80ZM256-650l-101-97 57-59 96 100-52 56Zm492 496-97-101 53-55 101 97-57 59Zm-98-550 97-101 59 57-100 96-56-52ZM154-212l101-97 55 53-97 101-59-57Zm326-268Z" /></svg>
icon:theme_dark = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-120q-150 0-255-105T120-480q0-150 105-255t255-105q14 0 27.5 1t26.5 3q-41 29-65.5 75.5T444-660q0 90 63 153t153 63q55 0 101-24.5t75-65.5q2 13 3 26.5t1 27.5q0 150-105 255T480-120Zm0-80q88 0 158-48.5T740-375q-20 5-40 8t-40 3q-123 0-209.5-86.5T364-660q0-20 3-40t8-40q-78 32-126.5 102T200-480q0 116 82 198t198 82Zm-10-270Z" /></svg> icon:theme_dark = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-120q-150 0-255-105T120-480q0-150 105-255t255-105q14 0 27.5 1t26.5 3q-41 29-65.5 75.5T444-660q0 90 63 153t153 63q55 0 101-24.5t75-65.5q2 13 3 26.5t1 27.5q0 150-105 255T480-120Zm0-80q88 0 158-48.5T740-375q-20 5-40 8t-40 3q-123 0-209.5-86.5T364-660q0-20 3-40t8-40q-78 32-126.5 102T200-480q0 116 82 198t198 82Zm-10-270Z" /></svg>
icon:theme_auto = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm40-83q119-15 199.5-104.5T800-480q0-123-80.5-212.5T520-797v634Z" /></svg> icon:theme_auto = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm40-83q119-15 199.5-104.5T800-480q0-123-80.5-212.5T520-797v634Z" /></svg>
icon:btn_ok = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m424-296 282-282-56-56-226 226-114-114-56 56 170 170Zm56 216q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z" /></svg>
icon:btn_cancel = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m336-280 144-144 144 144 56-56-144-144 144-144-56-56-144 144-144-144-56 56 144 144-144 144 56 56ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z" /></svg>
icon:btn_yes = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m424-296 282-282-56-56-226 226-114-114-56 56 170 170Zm56 216q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z" /></svg>
icon:btn_no = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M280-440h400v-80H280v80ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z" /></svg>
icon:btn_open = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M120-120v-720h360v80H200v560h560v-280h80v360H120Zm268-212-56-56 372-372H560v-80h280v280h-80v-144L388-332Z" /></svg>
icon:btn_close = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m336-280 144-144 144 144 56-56-144-144 144-144-56-56-144 144-144-144-56 56 144 144-144 144 56 56ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z" /></svg>
icon:btn_save = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m720-120 160-160-56-56-64 64v-167h-80v167l-64-64-56 56 160 160ZM560 0v-80h320V0H560ZM160-160v-720h360l240 240v121h-80v-81H480v-200H240v560h240v80H160Zm80-80v-560 560Z" /></svg>
icon:btn_browse = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M80-160v-640h320l80 80h400v80H447l-80-80H160v480l96-320h684L820-160H80Zm164-80h516l72-240H316l-72 240Zm0 0 72-240-72 240Zm-84-400v-80 80Z" /></svg>
icon:btn_list = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M360-200v-80h480v80H360Zm0-240v-80h480v80H360Zm0-240v-80h480v80H360ZM200-160q-33 0-56.5-23.5T120-240q0-33 23.5-56.5T200-320q33 0 56.5 23.5T280-240q0 33-23.5 56.5T200-160Zm0-240q-33 0-56.5-23.5T120-480q0-33 23.5-56.5T200-560q33 0 56.5 23.5T280-480q0 33-23.5 56.5T200-400Zm0-240q-33 0-56.5-23.5T120-720q0-33 23.5-56.5T200-800q33 0 56.5 23.5T280-720q0 33-23.5 56.5T200-640Z" /></svg>
icon:btn_new = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M120-120v-720h320v80H200v560h560v-240h80v320H120Zm520-400v-120H520v-80h120v-120h80v120h120v80H720v120h-80Z" /></svg>
icon:btn_create = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m354-287 126-76 126 77-33-144 111-96-146-13-58-136-58 135-146 13 111 97-33 143ZM233-120l65-281L80-590l288-25 112-265 112 265 288 25-218 189 65 281-247-149-247 149Zm247-350Z" /></svg>
icon:btn_reset = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M280-200v-80h284q63 0 109.5-40T720-420q0-60-46.5-100T564-560H312l104 104-56 56-200-200 200-200 56 56-104 104h252q97 0 166.5 63T800-420q0 94-69.5 157T564-200H280Z" /></svg>
icon:btn_insert = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M440-320v-240H320v-80h320v80H520v240h-80ZM40-40v-240h80v-400H40v-240h240v80h400v-80h240v240h-80v400h80v240H680v-80H280v80H40Zm240-160h400v-80h80v-400h-80v-80H280v80h-80v400h80v80ZM120-760h80v-80h-80v80Zm640 0h80v-80h-80v80Zm0 640h80v-80h-80v80Zm-640 0h80v-80h-80v80Zm80-640Zm560 0Zm0 560Zm-560 0Z" /></svg>
icon:btn_apply = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m424-312 282-282-56-56-226 226-114-114-56 56 170 170ZM120-120v-720h720v720H120Zm80-80h560v-560H200v560Zm0 0v-560 560Z" /></svg>
icon:btn_build = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m648-140 112-112v92h40v-160H640v40h92L620-168l28 28Zm-528 20v-720h720v348q-19-9-39-15.5t-41-9.5v-243H200v560h242q3 22 9.5 42t15.5 38H120Zm80-120v40-560 243-3 280Zm80-40h163q3-21 9.5-41t14.5-39H280v80Zm0-160h244q32-30 71.5-50t84.5-27v-3H280v80Zm0-160h400v-80H280v80ZM720-40q-83 0-141.5-58.5T520-240q0-83 58.5-141.5T720-440q83 0 141.5 58.5T920-240q0 83-58.5 141.5T720-40Z" /></svg>
icon:btn_print = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M640-640v-120H320v120h-80v-200h480v200h-80Zm-480 80h640-640Zm560 100q17 0 28.5-11.5T760-500q0-17-11.5-28.5T720-540q-17 0-28.5 11.5T680-500q0 17 11.5 28.5T720-460Zm-80 260v-160H320v160h320Zm80 80H240v-160H80v-360h800v360H720v160Zm80-240v-200H160v200h80v-80h480v80h80Z" /></svg>
icon:btn_preview = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M120-120v-720h720v720H120Zm80-80h560v-480H200v480Zm280-80q-82 0-146.5-44.5T240-440q29-71 93.5-115.5T480-600q82 0 146.5 44.5T720-440q-29 71-93.5 115.5T480-280Zm0-60q56 0 102-26.5t72-73.5q-26-47-72-73.5T480-540q-56 0-102 26.5T306-440q26 47 72 73.5T480-340Zm0-100Zm0 60q25 0 42.5-17.5T540-440q0-25-17.5-42.5T480-500q-25 0-42.5 17.5T420-440q0 25 17.5 42.5T480-380Z" /></svg>
icon:add = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M440-440H200v-80h240v-240h80v240h240v80H520v240h-80v-240Z" /></svg> icon:add = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M440-440H200v-80h240v-240h80v240h240v80H520v240h-80v-240Z" /></svg>
icon:bookmarks = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M120-40v-720h560v720L400-160 120-40Zm80-122 200-86 200 86v-518H200v518Zm560 2v-680H240v-80h600v760h-80ZM200-680h400-400Z" /></svg> icon:bookmarks = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M120-40v-720h560v720L400-160 120-40Zm80-122 200-86 200 86v-518H200v518Zm560 2v-680H240v-80h600v760h-80ZM200-680h400-400Z" /></svg>
icon:browse = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M80-160v-640h320l80 80h400v80H447l-80-80H160v480l96-320h684L820-160H80Zm164-80h516l72-240H316l-72 240Zm0 0 72-240-72 240Zm-84-400v-80 80Z" /></svg> icon:browse = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M80-160v-640h320l80 80h400v80H447l-80-80H160v480l96-320h684L820-160H80Zm164-80h516l72-240H316l-72 240Zm0 0 72-240-72 240Zm-84-400v-80 80Z" /></svg>
@@ -94,7 +111,6 @@ icon:minimise = <svg xmlns="http://www.w3.org/2000/svg" height="128" view
icon:more_arrow = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M400-280v-400l200 200-200 200Z" /></svg> icon:more_arrow = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M400-280v-400l200 200-200 200Z" /></svg>
icon:more_vertical = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-160q-33 0-56.5-23.5T400-240q0-33 23.5-56.5T480-320q33 0 56.5 23.5T560-240q0 33-23.5 56.5T480-160Zm0-240q-33 0-56.5-23.5T400-480q0-33 23.5-56.5T480-560q33 0 56.5 23.5T560-480q0 33-23.5 56.5T480-400Zm0-240q-33 0-56.5-23.5T400-720q0-33 23.5-56.5T480-800q33 0 56.5 23.5T560-720q0 33-23.5 56.5T480-640Z" /></svg> icon:more_vertical = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-160q-33 0-56.5-23.5T400-240q0-33 23.5-56.5T480-320q33 0 56.5 23.5T560-240q0 33-23.5 56.5T480-160Zm0-240q-33 0-56.5-23.5T400-480q0-33 23.5-56.5T480-560q33 0 56.5 23.5T560-480q0 33-23.5 56.5T480-400Zm0-240q-33 0-56.5-23.5T400-720q0-33 23.5-56.5T480-800q33 0 56.5 23.5T560-720q0 33-23.5 56.5T480-640Z" /></svg>
icon:noncheckable = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M280-440h400v-80H280v80ZM120-120v-720h720v720H120Zm80-80h560v-560H200v560Zm0 0v-560 560Z" /></svg> icon:noncheckable = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M280-440h400v-80H280v80ZM120-120v-720h720v720H120Zm80-80h560v-560H200v560Zm0 0v-560 560Z" /></svg>
icon:open = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M120-120v-720h360v80H200v560h560v-280h80v360H120Zm268-212-56-56 372-372H560v-80h280v280h-80v-144L388-332Z" /></svg>
icon:panel = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M200-200h560v-120H200v120Zm0-200h560v-360H200v360Zm0 80v120-120Zm-80 200v-720h720v720H120Z" /></svg> icon:panel = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M200-200h560v-120H200v120Zm0-200h560v-360H200v360Zm0 80v120-120Zm-80 200v-720h720v720H120Z" /></svg>
icon:pin = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m640-480 80 80v80H520v240l-40 40-40-40v-240H240v-80l80-80v-280h-40v-80h400v80h-40v280Zm-286 80h252l-46-46v-314H400v314l-46 46Zm126 0Z" /></svg> icon:pin = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m640-480 80 80v80H520v240l-40 40-40-40v-240H240v-80l80-80v-280h-40v-80h400v80h-40v280Zm-286 80h252l-46-46v-314H400v314l-46 46Zm126 0Z" /></svg>
icon:project_copy = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M40-120v-600h80v520h680v80H40Zm160-160v-600h280l80 80h360v520H200Zm80-80h560v-360H527l-80-80H280v440Zm0 0v-440 440Z" /></svg> icon:project_copy = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M40-120v-600h80v520h680v80H40Zm160-160v-600h280l80 80h360v520H200Zm80-80h560v-360H527l-80-80H280v440Zm0 0v-440 440Z" /></svg>
@@ -103,7 +119,6 @@ icon:refresh = <svg xmlns="http://www.w3.org/2000/svg" height="128" view
icon:remove = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M200-440v-80h560v80H200Z" /></svg> icon:remove = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M200-440v-80h560v80H200Z" /></svg>
icon:revert = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-400q-33 0-56.5-23.5T400-480q0-33 23.5-56.5T480-560q33 0 56.5 23.5T560-480q0 33-23.5 56.5T480-400Zm0 280q-139 0-241-91.5T122-440h82q14 104 92.5 172T480-200q117 0 198.5-81.5T760-480q0-117-81.5-198.5T480-760q-69 0-129 32t-101 88h110v80H120v-240h80v94q51-64 124.5-99T480-840q75 0 140.5 28.5t114 77q48.5 48.5 77 114T840-480q0 75-28.5 140.5t-77 114q-48.5 48.5-114 77T480-120Z" /></svg> icon:revert = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-400q-33 0-56.5-23.5T400-480q0-33 23.5-56.5T480-560q33 0 56.5 23.5T560-480q0 33-23.5 56.5T480-400Zm0 280q-139 0-241-91.5T122-440h82q14 104 92.5 172T480-200q117 0 198.5-81.5T760-480q0-117-81.5-198.5T480-760q-69 0-129 32t-101 88h110v80H120v-240h80v94q51-64 124.5-99T480-840q75 0 140.5 28.5t114 77q48.5 48.5 77 114T840-480q0 75-28.5 140.5t-77 114q-48.5 48.5-114 77T480-120Z" /></svg>
icon:settings = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m370-80-16-128q-13-5-24.5-12T307-235l-119 50L78-375l103-78q-1-7-1-13.5v-27q0-6.5 1-13.5L78-585l110-190 119 50q11-8 23-15t24-12l16-128h220l16 128q13 5 24.5 12t22.5 15l119-50 110 190-103 78q1 7 1 13.5v27q0 6.5-2 13.5l103 78-110 190-118-50q-11 8-23 15t-24 12L590-80H370Zm70-80h79l14-106q31-8 57.5-23.5T639-327l99 41 39-68-86-65q5-14 7-29.5t2-31.5q0-16-2-31.5t-7-29.5l86-65-39-68-99 42q-22-23-48.5-38.5T533-694l-13-106h-79l-14 106q-31 8-57.5 23.5T321-633l-99-41-39 68 86 64q-5 15-7 30t-2 32q0 16 2 31t7 30l-86 65 39 68 99-42q22 23 48.5 38.5T427-266l13 106Zm42-180q58 0 99-41t41-99q0-58-41-99t-99-41q-59 0-99.5 41T342-480q0 58 40.5 99t99.5 41Zm-2-140Z" /></svg> icon:settings = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m370-80-16-128q-13-5-24.5-12T307-235l-119 50L78-375l103-78q-1-7-1-13.5v-27q0-6.5 1-13.5L78-585l110-190 119 50q11-8 23-15t24-12l16-128h220l16 128q13 5 24.5 12t22.5 15l119-50 110 190-103 78q1 7 1 13.5v27q0 6.5-2 13.5l103 78-110 190-118-50q-11 8-23 15t-24 12L590-80H370Zm70-80h79l14-106q31-8 57.5-23.5T639-327l99 41 39-68-86-65q5-14 7-29.5t2-31.5q0-16-2-31.5t-7-29.5l86-65-39-68-99 42q-22-23-48.5-38.5T533-694l-13-106h-79l-14 106q-31 8-57.5 23.5T321-633l-99-41-39 68 86 64q-5 15-7 30t-2 32q0 16 2 31t7 30l-86 65 39 68 99-42q22 23 48.5 38.5T427-266l13 106Zm42-180q58 0 99-41t41-99q0-58-41-99t-99-41q-59 0-99.5 41T342-480q0 58 40.5 99t99.5 41Zm-2-140Z" /></svg>
icon:star = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m354-287 126-76 126 77-33-144 111-96-146-13-58-136-58 135-146 13 111 97-33 143ZM233-120l65-281L80-590l288-25 112-265 112 265 288 25-218 189 65 281-247-149-247 149Zm247-350Z" /></svg>
icon:stats = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m140-100-60-60 300-300 160 160 284-320 56 56-340 384-160-160-240 240Zm0-240-60-60 300-300 160 160 284-320 56 56-340 384-160-160-240 240Z" /></svg> icon:stats = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m140-100-60-60 300-300 160 160 284-320 56 56-340 384-160-160-240 240Zm0-240-60-60 300-300 160 160 284-320 56 56-340 384-160-160-240 240Z" /></svg>
icon:text = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M160-200v-80h400v80H160Zm0-160v-80h640v80H160Zm0-160v-80h640v80H160Zm0-160v-80h640v80H160Z" /></svg> icon:text = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M160-200v-80h400v80H160Zm0-160v-80h640v80H160Zm0-160v-80h640v80H160Zm0-160v-80h640v80H160Z" /></svg>
icon:timer_off = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m798-274-60-60q11-27 16.5-53.5T760-440q0-116-82-198t-198-82q-24 0-51 5t-56 16l-60-60q38-20 80.5-30.5T480-800q60 0 117.5 20T706-722l56-56 56 56-56 56q38 51 58 108.5T840-440q0 42-10.5 83.5T798-274ZM520-552v-88h-80v8l80 80ZM792-56l-96-96q-48 35-103.5 53.5T480-80q-74 0-139.5-28.5T226-186q-49-49-77.5-114.5T120-440q0-60 18.5-115.5T192-656L56-792l56-56 736 736-56 56ZM480-160q42 0 82-13t75-37L248-599q-24 35-36 75t-12 84q0 116 82 198t198 82ZM360-840v-80h240v80H360Zm83 435Zm113-112Z" /></svg> icon:timer_off = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m798-274-60-60q11-27 16.5-53.5T760-440q0-116-82-198t-198-82q-24 0-51 5t-56 16l-60-60q38-20 80.5-30.5T480-800q60 0 117.5 20T706-722l56-56 56 56-56 56q38 51 58 108.5T840-440q0 42-10.5 83.5T798-274ZM520-552v-88h-80v8l80 80ZM792-56l-96-96q-48 35-103.5 53.5T480-80q-74 0-139.5-28.5T226-186q-49-49-77.5-114.5T120-440q0-60 18.5-115.5T192-656L56-792l56-56 736 736-56 56ZM480-160q42 0 82-13t75-37L248-599q-24 35-36 75t-12 84q0 116 82 198t198 82ZM360-840v-80h240v80H360Zm83 435Zm113-112Z" /></svg>
@@ -59,6 +59,23 @@ icon:sb_stats = <svg xmlns="http://www.w3.org/2000/svg" height="128" view
icon:theme_light = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-360q50 0 85-35t35-85q0-50-35-85t-85-35q-50 0-85 35t-35 85q0 50 35 85t85 35Zm0 40q-66.85 0-113.42-46.58Q320-413.15 320-480t46.58-113.42Q413.15-640 480-640t113.42 46.58Q640-546.85 640-480t-46.58 113.42Q546.85-320 480-320ZM200-460H60v-40h140v40Zm700 0H760v-40h140v40ZM460-760v-140h40v140h-40Zm0 700v-140h40v140h-40ZM269.85-663.85l-86.39-83.92 27.77-29.77 84.46 85.39-25.84 28.3Zm478.92 481.39-84.69-85.62 26.07-28.07 86.39 83.92-27.77 29.77Zm-84.92-507.69 83.92-86.39 29.77 27.77-85.39 84.46-28.3-25.84ZM182.46-211.23l85.62-84.69 26.54 26.07-83.16 87.16-29-28.54ZM480-480Z" /></svg> icon:theme_light = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-360q50 0 85-35t35-85q0-50-35-85t-85-35q-50 0-85 35t-35 85q0 50 35 85t85 35Zm0 40q-66.85 0-113.42-46.58Q320-413.15 320-480t46.58-113.42Q413.15-640 480-640t113.42 46.58Q640-546.85 640-480t-46.58 113.42Q546.85-320 480-320ZM200-460H60v-40h140v40Zm700 0H760v-40h140v40ZM460-760v-140h40v140h-40Zm0 700v-140h40v140h-40ZM269.85-663.85l-86.39-83.92 27.77-29.77 84.46 85.39-25.84 28.3Zm478.92 481.39-84.69-85.62 26.07-28.07 86.39 83.92-27.77 29.77Zm-84.92-507.69 83.92-86.39 29.77 27.77-85.39 84.46-28.3-25.84ZM182.46-211.23l85.62-84.69 26.54 26.07-83.16 87.16-29-28.54ZM480-480Z" /></svg>
icon:theme_dark = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M482.31-160q-133.34 0-226.67-93.33-93.33-93.34-93.33-226.67 0-121.54 79.23-210.77t196.15-105.38q3.23 0 6.35.23 3.11.23 6.11.69-20.23 28.23-32.03 62.81-11.81 34.57-11.81 72.42 0 106.67 74.66 181.33Q555.64-404 662.31-404q38.07 0 72.54-11.81 34.46-11.81 61.92-32.04.46 3 .69 6.12.23 3.11.23 6.35-15.38 116.92-104.61 196.15T482.31-160Zm0-40q88 0 158-48.5t102-126.5q-20 5-40 8t-40 3q-123 0-209.5-86.5T366.31-660q0-20 3-40t8-40q-78 32-126.5 102t-48.5 158q0 116 82 198t198 82Zm-10-270Z" /></svg> icon:theme_dark = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M482.31-160q-133.34 0-226.67-93.33-93.33-93.34-93.33-226.67 0-121.54 79.23-210.77t196.15-105.38q3.23 0 6.35.23 3.11.23 6.11.69-20.23 28.23-32.03 62.81-11.81 34.57-11.81 72.42 0 106.67 74.66 181.33Q555.64-404 662.31-404q38.07 0 72.54-11.81 34.46-11.81 61.92-32.04.46 3 .69 6.12.23 3.11.23 6.35-15.38 116.92-104.61 196.15T482.31-160Zm0-40q88 0 158-48.5t102-126.5q-20 5-40 8t-40 3q-123 0-209.5-86.5T366.31-660q0-20 3-40t8-40q-78 32-126.5 102t-48.5 158q0 116 82 198t198 82Zm-10-270Z" /></svg>
icon:theme_auto = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480.13-120q-74.67 0-140.41-28.34-65.73-28.34-114.36-76.92-48.63-48.58-76.99-114.26Q120-405.19 120-479.87q0-74.67 28.34-140.41 28.34-65.73 76.92-114.36 48.58-48.63 114.26-76.99Q405.19-840 479.87-840q74.67 0 140.41 28.34 65.73 28.34 114.36 76.92 48.63 48.58 76.99 114.26Q840-554.81 840-480.13q0 74.67-28.34 140.41-28.34 65.73-76.92 114.36-48.58 48.63-114.26 76.99Q554.81-120 480.13-120ZM500-160.69q123.62-8.08 211.81-98.35T800-480q0-130.69-87.42-220.19-87.43-89.5-212.58-99.12v638.62Z" /></svg> icon:theme_auto = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480.13-120q-74.67 0-140.41-28.34-65.73-28.34-114.36-76.92-48.63-48.58-76.99-114.26Q120-405.19 120-479.87q0-74.67 28.34-140.41 28.34-65.73 76.92-114.36 48.58-48.63 114.26-76.99Q405.19-840 479.87-840q74.67 0 140.41 28.34 65.73 28.34 114.36 76.92 48.63 48.58 76.99 114.26Q840-554.81 840-480.13q0 74.67-28.34 140.41-28.34 65.73-76.92 114.36-48.58 48.63-114.26 76.99Q554.81-120 480.13-120ZM500-160.69q123.62-8.08 211.81-98.35T800-480q0-130.69-87.42-220.19-87.43-89.5-212.58-99.12v638.62Z" /></svg>
icon:btn_ok = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m422.46-323.69 255.85-255.85L650-607.85 422.46-380.31l-114-114L280.15-466l142.31 142.31ZM480.13-120q-74.67 0-140.41-28.34-65.73-28.34-114.36-76.92-48.63-48.58-76.99-114.26Q120-405.19 120-479.87q0-74.67 28.34-140.41 28.34-65.73 76.92-114.36 48.58-48.63 114.26-76.99Q405.19-840 479.87-840q74.67 0 140.41 28.34 65.73 28.34 114.36 76.92 48.63 48.58 76.99 114.26Q840-554.81 840-480.13q0 74.67-28.34 140.41-28.34 65.73-76.92 114.36-48.58 48.63-114.26 76.99Q554.81-120 480.13-120Zm-.13-40q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z" /></svg>
icon:btn_cancel = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m336-307.69 144-144 144 144L652.31-336l-144-144 144-144L624-652.31l-144 144-144-144L307.69-624l144 144-144 144L336-307.69ZM480.13-120q-74.67 0-140.41-28.34-65.73-28.34-114.36-76.92-48.63-48.58-76.99-114.26Q120-405.19 120-479.87q0-74.67 28.34-140.41 28.34-65.73 76.92-114.36 48.58-48.63 114.26-76.99Q405.19-840 479.87-840q74.67 0 140.41 28.34 65.73 28.34 114.36 76.92 48.63 48.58 76.99 114.26Q840-554.81 840-480.13q0 74.67-28.34 140.41-28.34 65.73-76.92 114.36-48.58 48.63-114.26 76.99Q554.81-120 480.13-120Zm-.13-40q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z" /></svg>
icon:btn_yes = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m422.46-323.69 255.85-255.85L650-607.85 422.46-380.31l-114-114L280.15-466l142.31 142.31ZM480.13-120q-74.67 0-140.41-28.34-65.73-28.34-114.36-76.92-48.63-48.58-76.99-114.26Q120-405.19 120-479.87q0-74.67 28.34-140.41 28.34-65.73 76.92-114.36 48.58-48.63 114.26-76.99Q405.19-840 479.87-840q74.67 0 140.41 28.34 65.73 28.34 114.36 76.92 48.63 48.58 76.99 114.26Q840-554.81 840-480.13q0 74.67-28.34 140.41-28.34 65.73-76.92 114.36-48.58 48.63-114.26 76.99Q554.81-120 480.13-120Zm-.13-40q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z" /></svg>
icon:btn_no = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M300-460h360v-40H300v40Zm180.13 340q-74.67 0-140.41-28.34-65.73-28.34-114.36-76.92-48.63-48.58-76.99-114.26Q120-405.19 120-479.87q0-74.67 28.34-140.41 28.34-65.73 76.92-114.36 48.58-48.63 114.26-76.99Q405.19-840 479.87-840q74.67 0 140.41 28.34 65.73 28.34 114.36 76.92 48.63 48.58 76.99 114.26Q840-554.81 840-480.13q0 74.67-28.34 140.41-28.34 65.73-76.92 114.36-48.58 48.63-114.26 76.99Q554.81-120 480.13-120Zm-.13-40q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z" /></svg>
icon:btn_open = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M160-160v-640h289.23v40H200v560h560v-249.23h40V-160H160Zm229.54-201.23-28.31-28.31L731.69-760H560v-40h240v240h-40v-171.69L389.54-361.23Z" /></svg>
icon:btn_close = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m336-307.69 144-144 144 144L652.31-336l-144-144 144-144L624-652.31l-144 144-144-144L307.69-624l144 144-144 144L336-307.69ZM480.13-120q-74.67 0-140.41-28.34-65.73-28.34-114.36-76.92-48.63-48.58-76.99-114.26Q120-405.19 120-479.87q0-74.67 28.34-140.41 28.34-65.73 76.92-114.36 48.58-48.63 114.26-76.99Q405.19-840 479.87-840q74.67 0 140.41 28.34 65.73 28.34 114.36 76.92 48.63 48.58 76.99 114.26Q840-554.81 840-480.13q0 74.67-28.34 140.41-28.34 65.73-76.92 114.36-48.58 48.63-114.26 76.99Q554.81-120 480.13-120Zm-.13-40q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z" /></svg>
icon:btn_save = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M720-148.46 851.54-280 824-307.54l-84 84V-419h-40v195.46l-84-84L588.46-280 720-148.46ZM580-20v-40h280v40H580ZM180-180v-680h340l220 220v125.62h-40V-620H500v-200H220v600h264.62v40H180Zm40-40v-600 600Z" /></svg>
icon:btn_browse = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M120-200v-560h263.85l80 80h369.23v40H447.77l-80-80H160v478.46l90.62-303.08h664L811.54-200H120Zm81.69-40h579.85l78.92-264.62H280.62L201.69-240Zm0 0 78.93-264.62L201.69-240ZM160-640v-80 80Z" /></svg>
icon:btn_list = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M384.62-220v-40H800v40H384.62Zm0-240v-40H800v40H384.62Zm0-240v-40H800v40H384.62ZM213.08-186.92q-21.9 0-37.49-15.59Q160-218.11 160-240t15.59-37.49q15.59-15.59 37.49-15.59 21.89 0 37.48 15.59 15.59 15.6 15.59 37.49t-15.59 37.49q-15.59 15.59-37.48 15.59Zm0-240q-21.9 0-37.49-15.59Q160-458.11 160-480t15.59-37.49q15.59-15.59 37.49-15.59 21.89 0 37.48 15.59 15.59 15.6 15.59 37.49t-15.59 37.49q-15.59 15.59-37.48 15.59Zm0-240q-21.9 0-37.49-15.59Q160-698.11 160-720t15.59-37.49q15.59-15.59 37.49-15.59 21.89 0 37.48 15.59 15.59 15.6 15.59 37.49t-15.59 37.49q-15.59 15.59-37.48 15.59Z" /></svg>
icon:btn_new = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M160-160v-640h264.62v40H200v560h560v-224.62h40V-160H160Zm480-360v-120H520v-40h120v-120h40v120h120v40H680v120h-40Z" /></svg>
icon:btn_create = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m354-287 126-76 126 77-33-144 111-96-146-13-58-136-58 135-146 13 111 97-33 143Zm-61 83.92 49.62-212.54-164.93-142.84 217.23-18.85L480-777.69l85.08 200.38 217.23 18.85-164.93 142.84L667-203.08 480-315.92 293-203.08ZM480-470Z" /></svg>
icon:btn_reset = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M296.15-240v-40h290.16q62.23 0 106.04-42.69 43.8-42.69 43.8-104.23 0-61.54-43.8-103.85-43.81-42.31-106.04-42.31H276.62l118.61 118.62-28.31 28.31L200-593.08 366.92-760l28.31 28.31-118.61 118.61h309.69q78.54 0 134.19 54.16 55.65 54.15 55.65 132 0 77.84-55.65 132.38Q664.85-240 586.31-240H296.15Z" /></svg>
icon:btn_insert = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M460-320v-280H340v-40h280v40H500v280h-40ZM95.38-95.38v-169.24H160v-430.76H95.38v-169.24h169.24V-800h430.76v-64.62h169.24v169.24H800v430.76h64.62v169.24H695.38V-160H264.62v64.62H95.38ZM264.62-200h430.76v-64.62H760v-430.76h-64.62V-760H264.62v64.62H200v430.76h64.62V-200ZM135.38-735.38h89.24v-89.24h-89.24v89.24Zm600 0h89.24v-89.24h-89.24v89.24Zm0 600h89.24v-89.24h-89.24v89.24Zm-600 0h89.24v-89.24h-89.24v89.24Zm89.24-600Zm510.76 0Zm0 510.76Zm-510.76 0Z" /></svg>
icon:btn_apply = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m424-339.69 255.85-255.85-28.31-28.31L424-396.31l-114-114L281.69-482 424-339.69ZM160-160v-640h640v640H160Zm40-40h560v-560H200v560Zm0 0v-560 560Z" /></svg>
icon:btn_build = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m662.62-156.15 101.23-101.23v82.76h30.77V-310H659.23v30.77H742L640.77-178l21.85 21.85ZM160-160v-640h640v302.62q-10.54-3.62-20.15-5.89-9.62-2.27-19.85-4.5V-760H200v560h251.23q1.46 11.23 3.73 20.85 2.27 9.61 5.89 19.15H160Zm40-80v40-560 252.23-3V-240Zm100-69.23h158.38q2.24-10.23 6.04-19.85 3.81-9.61 7.96-20.15H300v40ZM300-460h263.23q19.69-13.85 38.81-23.46 19.11-9.62 41.04-15.08V-500H300v40Zm0-150.77h360v-40H300v40ZM720-75.38q-66.85 0-113.42-46.58Q560-168.54 560-235.38q0-66.85 46.58-113.43 46.57-46.57 113.42-46.57t113.42 46.57Q880-302.23 880-235.38q0 66.84-46.58 113.42Q786.85-75.38 720-75.38Z" /></svg>
icon:btn_print = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M640-615.38v-120H320v120h-40v-160.01h400v160.01h-40Zm-456.92 40h593.84-593.84Zm521.54 100q17 0 28.5-11.5t11.5-28.5q0-17-11.5-28.5t-28.5-11.5q-17 0-28.5 11.5t-11.5 28.5q0 17 11.5 28.5t28.5 11.5ZM640-200v-181.54H320V-200h320Zm40 40H280v-160H143.08v-295.38h673.84V-320H680v160Zm96.92-200v-215.38H183.08V-360H280v-61.54h400V-360h96.92Z" /></svg>
icon:btn_preview = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M160-160v-640h640v640H160Zm40-40h560v-480H200v480Zm280-120q-65.08 0-117.27-33.35-52.19-33.34-78.88-86.65 26.69-53.31 78.88-86.65Q414.92-560 480-560t117.27 33.35q52.19 33.34 78.88 86.65-26.69 53.31-78.88 86.65Q545.08-320 480-320Zm0-35.38q47.54 0 88.54-22.27 41-22.27 69.31-62.35-28.31-40.08-69.31-62.35-41-22.27-88.54-22.27-47.54 0-88.54 22.27-41 22.27-69.31 62.35 28.31 40.08 69.31 62.35 41 22.27 88.54 22.27Zm0-84.62Zm.18 44.62q18.67 0 31.55-13.07 12.89-13.07 12.89-31.73 0-18.67-13.07-31.55-13.07-12.89-31.73-12.89-18.67 0-31.55 13.07-12.89 13.07-12.89 31.73 0 18.67 13.07 31.55 13.07 12.89 31.73 12.89Z" /></svg>
icon:add = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M460-460H240v-40h220v-220h40v220h220v40H500v220h-40v-220Z" /></svg> icon:add = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M460-460H240v-40h220v-220h40v220h220v40H500v220h-40v-220Z" /></svg>
icon:bookmarks = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M180-100v-620h480v620L420-203.33 180-100Zm40-62 200-86 200 86v-518H220v518Zm520-58v-580H300v-40h480v620h-40ZM220-680h400-400Z" /></svg> icon:bookmarks = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M180-100v-620h480v620L420-203.33 180-100Zm40-62 200-86 200 86v-518H220v518Zm520-58v-580H300v-40h480v620h-40ZM220-680h400-400Z" /></svg>
icon:browse = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M120-200v-560h263.85l80 80h369.23v40H447.77l-80-80H160v478.46l90.62-303.08h664L811.54-200H120Zm81.69-40h579.85l78.92-264.62H280.62L201.69-240Zm0 0 78.93-264.62L201.69-240ZM160-640v-80 80Z" /></svg> icon:browse = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M120-200v-560h263.85l80 80h369.23v40H447.77l-80-80H160v478.46l90.62-303.08h664L811.54-200H120Zm81.69-40h579.85l78.92-264.62H280.62L201.69-240Zm0 0 78.93-264.62L201.69-240ZM160-640v-80 80Z" /></svg>
@@ -94,7 +111,6 @@ icon:minimise = <svg xmlns="http://www.w3.org/2000/svg" height="128" view
icon:more_arrow = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M420-327.69v-304.62L572.31-480 420-327.69Z" /></svg> icon:more_arrow = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M420-327.69v-304.62L572.31-480 420-327.69Z" /></svg>
icon:more_vertical = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-218.46q-16.5 0-28.25-11.75T440-258.46q0-16.5 11.75-28.25T480-298.46q16.5 0 28.25 11.75T520-258.46q0 16.5-11.75 28.25T480-218.46ZM480-440q-16.5 0-28.25-11.75T440-480q0-16.5 11.75-28.25T480-520q16.5 0 28.25 11.75T520-480q0 16.5-11.75 28.25T480-440Zm0-221.54q-16.5 0-28.25-11.75T440-701.54q0-16.5 11.75-28.25T480-741.54q16.5 0 28.25 11.75T520-701.54q0 16.5-11.75 28.25T480-661.54Z" /></svg> icon:more_vertical = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M480-218.46q-16.5 0-28.25-11.75T440-258.46q0-16.5 11.75-28.25T480-298.46q16.5 0 28.25 11.75T520-258.46q0 16.5-11.75 28.25T480-218.46ZM480-440q-16.5 0-28.25-11.75T440-480q0-16.5 11.75-28.25T480-520q16.5 0 28.25 11.75T520-480q0 16.5-11.75 28.25T480-440Zm0-221.54q-16.5 0-28.25-11.75T440-701.54q0-16.5 11.75-28.25T480-741.54q16.5 0 28.25 11.75T520-701.54q0 16.5-11.75 28.25T480-661.54Z" /></svg>
icon:noncheckable = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M300-460h360v-40H300v40ZM160-160v-640h640v640H160Zm40-40h560v-560H200v560Zm0 0v-560 560Z" /></svg> icon:noncheckable = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M300-460h360v-40H300v40ZM160-160v-640h640v640H160Zm40-40h560v-560H200v560Zm0 0v-560 560Z" /></svg>
icon:open = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M160-160v-640h289.23v40H200v560h560v-249.23h40V-160H160Zm229.54-201.23-28.31-28.31L731.69-760H560v-40h240v240h-40v-171.69L389.54-361.23Z" /></svg>
icon:panel = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M200-200h560v-120H200v120Zm0-160h560v-400H200v400Zm0 40v120-120Zm-40 160v-640h640v640H160Z" /></svg> icon:panel = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M200-200h560v-120H200v120Zm0-160h560v-400H200v400Zm0 40v120-120Zm-40 160v-640h640v640H160Z" /></svg>
icon:pin = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M600-463.08 663.08-400v40H500v200l-20 20-20-20v-200H296.92v-40L360-463.08V-760h-40v-40h320v40h-40v296.92ZM354-400h252l-46-46v-314H400v314l-46 46Zm126 0Z" /></svg> icon:pin = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M600-463.08 663.08-400v40H500v200l-20 20-20-20v-200H296.92v-40L360-463.08V-760h-40v-40h320v40h-40v296.92ZM354-400h252l-46-46v-314H400v314l-46 46Zm126 0Z" /></svg>
icon:project_copy = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M80-169.23v-507.69h40v467.69h640v40H80Zm120-120V-840h263.08l80 80H880v470.77H200Zm40-40h600V-720H527l-80-80H240v470.77Zm0 0V-800v470.77Z" /></svg> icon:project_copy = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M80-169.23v-507.69h40v467.69h640v40H80Zm120-120V-840h263.08l80 80H880v470.77H200Zm40-40h600V-720H527l-80-80H240v470.77Zm0 0V-800v470.77Z" /></svg>
@@ -103,7 +119,6 @@ icon:refresh = <svg xmlns="http://www.w3.org/2000/svg" height="128" view
icon:remove = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M240-460v-40h480v40H240Z" /></svg> icon:remove = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M240-460v-40h480v40H240Z" /></svg>
icon:revert = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M478.46-440q-16.08 0-28.04-11.96T438.46-480q0-16.08 11.96-28.04T478.46-520q16.08 0 28.04 11.96T518.46-480q0 16.08-11.96 28.04T478.46-440Zm0 280q-122.08 0-212.54-79.96T161.23-440h40.46Q218-336.77 296.04-268.38 374.08-200 478.46-200q117 0 198.5-81.5t81.5-198.5q0-117-81.5-198.5T478.46-760q-62.08 0-116.69 26.23-54.62 26.23-96.39 72.23h99.24v40H198.46v-166.15h40v95.54q46.39-50.93 108.73-79.39Q409.54-800 478.46-800q66.6 0 124.76 25.04 58.16 25.04 101.66 68.54 43.5 43.5 68.54 101.65 25.04 58.14 25.04 124.73 0 66.58-25.04 124.77t-68.54 101.69q-43.5 43.5-101.66 68.54Q545.06-160 478.46-160Z" /></svg> icon:revert = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M478.46-440q-16.08 0-28.04-11.96T438.46-480q0-16.08 11.96-28.04T478.46-520q16.08 0 28.04 11.96T518.46-480q0 16.08-11.96 28.04T478.46-440Zm0 280q-122.08 0-212.54-79.96T161.23-440h40.46Q218-336.77 296.04-268.38 374.08-200 478.46-200q117 0 198.5-81.5t81.5-198.5q0-117-81.5-198.5T478.46-760q-62.08 0-116.69 26.23-54.62 26.23-96.39 72.23h99.24v40H198.46v-166.15h40v95.54q46.39-50.93 108.73-79.39Q409.54-800 478.46-800q66.6 0 124.76 25.04 58.16 25.04 101.66 68.54 43.5 43.5 68.54 101.65 25.04 58.14 25.04 124.73 0 66.58-25.04 124.77t-68.54 101.69q-43.5 43.5-101.66 68.54Q545.06-160 478.46-160Z" /></svg>
icon:settings = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m405.38-120-14.46-115.69q-19.15-5.77-41.42-18.16-22.27-12.38-37.88-26.53L204.92-235l-74.61-130 92.23-69.54q-1.77-10.84-2.92-22.34-1.16-11.5-1.16-22.35 0-10.08 1.16-21.19 1.15-11.12 2.92-25.04L130.31-595l74.61-128.46 105.93 44.61q17.92-14.92 38.77-26.92 20.84-12 40.53-18.54L405.38-840h149.24l14.46 116.46q23 8.08 40.65 18.54 17.65 10.46 36.35 26.15l109-44.61L829.69-595l-95.31 71.85q3.31 12.38 3.7 22.73.38 10.34.38 20.42 0 9.31-.77 19.65-.77 10.35-3.54 25.04L827.92-365l-74.61 130-107.23-46.15q-18.7 15.69-37.62 26.92-18.92 11.23-39.38 17.77L554.62-120H405.38ZM440-160h78.23L533-268.31q30.23-8 54.42-21.96 24.2-13.96 49.27-38.27L736.46-286l39.77-68-87.54-65.77q5-17.08 6.62-31.42 1.61-14.35 1.61-28.81 0-15.23-1.61-28.81-1.62-13.57-6.62-29.88L777.77-606 738-674l-102.08 42.77q-18.15-19.92-47.73-37.35-29.57-17.42-55.96-23.11L520-800h-79.77l-12.46 107.54q-30.23 6.46-55.58 20.81-25.34 14.34-50.42 39.42L222-674l-39.77 68L269-541.23q-5 13.46-7 29.23t-2 32.77q0 15.23 2 30.23t6.23 29.23l-86 65.77L222-286l99-42q23.54 23.77 48.88 38.12 25.35 14.34 57.12 22.34L440-160Zm38.92-220q41.85 0 70.93-29.08 29.07-29.07 29.07-70.92t-29.07-70.92Q520.77-580 478.92-580q-42.07 0-71.04 29.08-28.96 29.07-28.96 70.92t28.96 70.92Q436.85-380 478.92-380ZM480-480Z" /></svg> icon:settings = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m405.38-120-14.46-115.69q-19.15-5.77-41.42-18.16-22.27-12.38-37.88-26.53L204.92-235l-74.61-130 92.23-69.54q-1.77-10.84-2.92-22.34-1.16-11.5-1.16-22.35 0-10.08 1.16-21.19 1.15-11.12 2.92-25.04L130.31-595l74.61-128.46 105.93 44.61q17.92-14.92 38.77-26.92 20.84-12 40.53-18.54L405.38-840h149.24l14.46 116.46q23 8.08 40.65 18.54 17.65 10.46 36.35 26.15l109-44.61L829.69-595l-95.31 71.85q3.31 12.38 3.7 22.73.38 10.34.38 20.42 0 9.31-.77 19.65-.77 10.35-3.54 25.04L827.92-365l-74.61 130-107.23-46.15q-18.7 15.69-37.62 26.92-18.92 11.23-39.38 17.77L554.62-120H405.38ZM440-160h78.23L533-268.31q30.23-8 54.42-21.96 24.2-13.96 49.27-38.27L736.46-286l39.77-68-87.54-65.77q5-17.08 6.62-31.42 1.61-14.35 1.61-28.81 0-15.23-1.61-28.81-1.62-13.57-6.62-29.88L777.77-606 738-674l-102.08 42.77q-18.15-19.92-47.73-37.35-29.57-17.42-55.96-23.11L520-800h-79.77l-12.46 107.54q-30.23 6.46-55.58 20.81-25.34 14.34-50.42 39.42L222-674l-39.77 68L269-541.23q-5 13.46-7 29.23t-2 32.77q0 15.23 2 30.23t6.23 29.23l-86 65.77L222-286l99-42q23.54 23.77 48.88 38.12 25.35 14.34 57.12 22.34L440-160Zm38.92-220q41.85 0 70.93-29.08 29.07-29.07 29.07-70.92t-29.07-70.92Q520.77-580 478.92-580q-42.07 0-71.04 29.08-28.96 29.07-28.96 70.92t28.96 70.92Q436.85-380 478.92-380ZM480-480Z" /></svg>
icon:star = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m354-287 126-76 126 77-33-144 111-96-146-13-58-136-58 135-146 13 111 97-33 143Zm-61 83.92 49.62-212.54-164.93-142.84 217.23-18.85L480-777.69l85.08 200.38 217.23 18.85-164.93 142.84L667-203.08 480-315.92 293-203.08ZM480-470Z" /></svg>
icon:stats = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M140-130.77 110.77-160l272.31-272.31 160 160 279.38-320 28.31 26.77-306.15 353.23-161.54-161.54L140-130.77Zm0-240L110.77-400l272.31-272.31 160 160 279.38-320 28.31 26.77-306.15 353.23-161.54-161.54L140-370.77Z" /></svg> icon:stats = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M140-130.77 110.77-160l272.31-272.31 160 160 279.38-320 28.31 26.77-306.15 353.23-161.54-161.54L140-130.77Zm0-240L110.77-400l272.31-272.31 160 160 279.38-320 28.31 26.77-306.15 353.23-161.54-161.54L140-370.77Z" /></svg>
icon:text = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M200-230.77V-280h320v40l-320 9.23Zm0-151.54v-40h560v40H200Zm0-155.38v-40h560v40H200ZM200-680v-49.23h560V-680H200Z" /></svg> icon:text = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="M200-230.77V-280h320v40l-320 9.23Zm0-151.54v-40h560v40H200Zm0-155.38v-40h560v40H200ZM200-680v-49.23h560V-680H200Z" /></svg>
icon:timer_off = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m768.77-304-30-30q11-26.23 16.11-52.73Q760-413.23 760-440q0-116-82-198t-198-82q-24 0-52.54 5t-53.69 16l-30-30q31.08-15.38 66.27-23.19Q445.23-760 480-760q56.92 0 110.96 20.38 54.04 20.39 100.42 59.16l43.7-43.69 28.3 28.3-43.69 43.7q38.77 46.38 59.54 100.8Q800-496.92 800-440q0 34.31-7.81 69.27-7.81 34.96-23.42 66.73ZM500-572.77v-51.85h-40v11.85l40 40Zm298.15 467.54L697.54-205.85q-42.62 40.39-99.66 63.12Q540.85-120 480-120q-66.31 0-124.5-25.04t-101.81-68.65q-43.61-43.62-68.65-101.81Q160-373.69 160-440q0-61.54 21.96-117.42 21.96-55.89 63.89-100.12L105.23-798.15l28.31-28.31 692.92 692.92-28.31 28.31ZM480-160q51.23 0 100.08-19.54 48.84-19.54 88.46-55.08L274.15-629q-35.53 38.08-54.84 86.54Q200-494 200-440q0 116 82 198t198 82ZM375.38-860v-40h209.24v40H375.38Zm96.08 428.08ZM556.77-517Z" /></svg> icon:timer_off = <svg xmlns="http://www.w3.org/2000/svg" height="128" viewBox="0 -960 960 960" width="128" fill="#000000"><path d="m768.77-304-30-30q11-26.23 16.11-52.73Q760-413.23 760-440q0-116-82-198t-198-82q-24 0-52.54 5t-53.69 16l-30-30q31.08-15.38 66.27-23.19Q445.23-760 480-760q56.92 0 110.96 20.38 54.04 20.39 100.42 59.16l43.7-43.69 28.3 28.3-43.69 43.7q38.77 46.38 59.54 100.8Q800-496.92 800-440q0 34.31-7.81 69.27-7.81 34.96-23.42 66.73ZM500-572.77v-51.85h-40v11.85l40 40Zm298.15 467.54L697.54-205.85q-42.62 40.39-99.66 63.12Q540.85-120 480-120q-66.31 0-124.5-25.04t-101.81-68.65q-43.61-43.62-68.65-101.81Q160-373.69 160-440q0-61.54 21.96-117.42 21.96-55.89 63.89-100.12L105.23-798.15l28.31-28.31 692.92 692.92-28.31 28.31ZM480-160q51.23 0 100.08-19.54 48.84-19.54 88.46-55.08L274.15-629q-35.53 38.08-54.84 86.54Q200-494 200-440q0 116 82 198t198 82ZM375.38-860v-40h209.24v40H375.38Zm96.08 428.08ZM556.77-517Z" /></svg>
+7 -3
View File
@@ -33,10 +33,11 @@ from PyQt6.QtWidgets import (
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
from novelwriter.common import readTextFile from novelwriter.common import readTextFile
from novelwriter.enum import nwStandardButton
from novelwriter.extensions.configlayout import NColorLabel from novelwriter.extensions.configlayout import NColorLabel
from novelwriter.extensions.modified import NDialog from novelwriter.extensions.modified import NDialog
from novelwriter.extensions.versioninfo import VersionInfoWidget from novelwriter.extensions.versioninfo import VersionInfoWidget
from novelwriter.types import QtAlignRightTop, QtDialogClose, QtHexArgb from novelwriter.types import QtAlignRightTop, QtHexArgb, QtRoleReject
if TYPE_CHECKING: if TYPE_CHECKING:
from PyQt6.QtGui import QCloseEvent from PyQt6.QtGui import QCloseEvent
@@ -82,8 +83,11 @@ class GuiAbout(NDialog):
self.txtCredits.setViewportMargins(0, 8, 8, 0) self.txtCredits.setViewportMargins(0, 8, 8, 0)
# Buttons # Buttons
self.btnBox = QDialogButtonBox(QtDialogClose, self) self.btnClose = SHARED.theme.getStandardButton(nwStandardButton.CLOSE, self)
self.btnBox.rejected.connect(self.reject) self.btnClose.clicked.connect(self.reject)
self.btnBox = QDialogButtonBox(self)
self.btnBox.addButton(self.btnClose, QtRoleReject)
# Assemble # Assemble
self.innerBox = QVBoxLayout() self.innerBox = QVBoxLayout()
+15 -8
View File
@@ -33,10 +33,11 @@ from PyQt6.QtWidgets import (
) )
from novelwriter import SHARED from novelwriter import SHARED
from novelwriter.enum import nwStandardButton
from novelwriter.extensions.configlayout import NColorLabel from novelwriter.extensions.configlayout import NColorLabel
from novelwriter.extensions.modified import NDialog from novelwriter.extensions.modified import NDialog
from novelwriter.extensions.switch import NSwitch from novelwriter.extensions.switch import NSwitch
from novelwriter.types import QtAccepted, QtDialogCancel, QtDialogOk, QtDialogReset, QtUserRole from novelwriter.types import QtAccepted, QtRoleAccept, QtRoleReject, QtRoleReset, QtUserRole
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -85,13 +86,19 @@ class GuiDocMerge(NDialog):
self.optBox.setColumnStretch(2, 1) self.optBox.setColumnStretch(2, 1)
# Buttons # Buttons
self.buttonBox = QDialogButtonBox(QtDialogOk | QtDialogCancel, self) self.btnOk = SHARED.theme.getStandardButton(nwStandardButton.OK, self)
self.buttonBox.accepted.connect(self.accept) self.btnOk.clicked.connect(self.accept)
self.buttonBox.rejected.connect(self.reject)
self.resetButton = self.buttonBox.addButton(QtDialogReset) self.btnCancel = SHARED.theme.getStandardButton(nwStandardButton.CANCEL, self)
if self.resetButton: self.btnCancel.clicked.connect(self.reject)
self.resetButton.clicked.connect(self._resetList)
self.btnReset = SHARED.theme.getStandardButton(nwStandardButton.RESET, self)
self.btnReset.clicked.connect(self._resetList)
self.btnBox = QDialogButtonBox(self)
self.btnBox.addButton(self.btnOk, QtRoleAccept)
self.btnBox.addButton(self.btnCancel, QtRoleReject)
self.btnBox.addButton(self.btnReset, QtRoleReset)
# Assemble # Assemble
self.outerBox = QVBoxLayout() self.outerBox = QVBoxLayout()
@@ -103,7 +110,7 @@ class GuiDocMerge(NDialog):
self.outerBox.addSpacing(8) self.outerBox.addSpacing(8)
self.outerBox.addLayout(self.optBox) self.outerBox.addLayout(self.optBox)
self.outerBox.addSpacing(12) self.outerBox.addSpacing(12)
self.outerBox.addWidget(self.buttonBox) self.outerBox.addWidget(self.btnBox)
self.setLayout(self.outerBox) self.setLayout(self.outerBox)
# Load Content # Load Content
+12 -5
View File
@@ -33,10 +33,11 @@ from PyQt6.QtWidgets import (
) )
from novelwriter import SHARED from novelwriter import SHARED
from novelwriter.enum import nwStandardButton
from novelwriter.extensions.configlayout import NColorLabel from novelwriter.extensions.configlayout import NColorLabel
from novelwriter.extensions.modified import NComboBox, NDialog from novelwriter.extensions.modified import NComboBox, NDialog
from novelwriter.extensions.switch import NSwitch from novelwriter.extensions.switch import NSwitch
from novelwriter.types import QtAccepted, QtDialogCancel, QtDialogOk, QtUserRole from novelwriter.types import QtAccepted, QtRoleAccept, QtRoleReject, QtUserRole
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -117,9 +118,15 @@ class GuiDocSplit(NDialog):
self.optBox.setColumnStretch(3, 1) self.optBox.setColumnStretch(3, 1)
# Buttons # Buttons
self.buttonBox = QDialogButtonBox(QtDialogOk | QtDialogCancel, self) self.btnOk = SHARED.theme.getStandardButton(nwStandardButton.OK, self)
self.buttonBox.accepted.connect(self.accept) self.btnOk.clicked.connect(self.accept)
self.buttonBox.rejected.connect(self.reject)
self.btnCancel = SHARED.theme.getStandardButton(nwStandardButton.CANCEL, self)
self.btnCancel.clicked.connect(self.reject)
self.btnBox = QDialogButtonBox(self)
self.btnBox.addButton(self.btnOk, QtRoleAccept)
self.btnBox.addButton(self.btnCancel, QtRoleReject)
# Assemble # Assemble
self.outerBox = QVBoxLayout() self.outerBox = QVBoxLayout()
@@ -132,7 +139,7 @@ class GuiDocSplit(NDialog):
self.outerBox.addSpacing(8) self.outerBox.addSpacing(8)
self.outerBox.addLayout(self.optBox) self.outerBox.addLayout(self.optBox)
self.outerBox.addSpacing(12) self.outerBox.addSpacing(12)
self.outerBox.addWidget(self.buttonBox) self.outerBox.addWidget(self.btnBox)
self.setLayout(self.outerBox) self.setLayout(self.outerBox)
# Load Content # Load Content
+13 -5
View File
@@ -27,8 +27,10 @@ import logging
from PyQt6.QtWidgets import QDialogButtonBox, QHBoxLayout, QLabel, QLineEdit, QVBoxLayout, QWidget from PyQt6.QtWidgets import QDialogButtonBox, QHBoxLayout, QLabel, QLineEdit, QVBoxLayout, QWidget
from novelwriter import SHARED
from novelwriter.enum import nwStandardButton
from novelwriter.extensions.modified import NDialog from novelwriter.extensions.modified import NDialog
from novelwriter.types import QtAccepted, QtDialogCancel, QtDialogOk from novelwriter.types import QtAccepted, QtRoleAccept, QtRoleReject
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -54,9 +56,15 @@ class GuiEditLabel(NDialog):
self.lblValue.setBuddy(self.lblValue) self.lblValue.setBuddy(self.lblValue)
# Buttons # Buttons
self.buttonBox = QDialogButtonBox(QtDialogOk | QtDialogCancel, self) self.btnOk = SHARED.theme.getStandardButton(nwStandardButton.OK, self)
self.buttonBox.accepted.connect(self.accept) self.btnOk.clicked.connect(self.accept)
self.buttonBox.rejected.connect(self.reject)
self.btnCancel = SHARED.theme.getStandardButton(nwStandardButton.CANCEL, self)
self.btnCancel.clicked.connect(self.reject)
self.btnBox = QDialogButtonBox(self)
self.btnBox.addButton(self.btnOk, QtRoleAccept)
self.btnBox.addButton(self.btnCancel, QtRoleReject)
# Assemble # Assemble
self.innerBox = QHBoxLayout() self.innerBox = QHBoxLayout()
@@ -67,7 +75,7 @@ class GuiEditLabel(NDialog):
self.outerBox = QVBoxLayout() self.outerBox = QVBoxLayout()
self.outerBox.setSpacing(12) self.outerBox.setSpacing(12)
self.outerBox.addLayout(self.innerBox, 1) self.outerBox.addLayout(self.innerBox, 1)
self.outerBox.addWidget(self.buttonBox, 0) self.outerBox.addWidget(self.btnBox, 0)
self.setLayout(self.outerBox) self.setLayout(self.outerBox)
+12 -5
View File
@@ -38,13 +38,14 @@ from novelwriter.common import compact, describeFont, processDialogSymbols, uniq
from novelwriter.config import DEF_GUI_DARK, DEF_GUI_LIGHT, DEF_ICONS, DEF_TREECOL from novelwriter.config import DEF_GUI_DARK, DEF_GUI_LIGHT, DEF_ICONS, DEF_TREECOL
from novelwriter.constants import nwLabels, nwQuotes, nwUnicode, trConst from novelwriter.constants import nwLabels, nwQuotes, nwUnicode, trConst
from novelwriter.dialogs.quotes import GuiQuoteSelect from novelwriter.dialogs.quotes import GuiQuoteSelect
from novelwriter.enum import nwStandardButton
from novelwriter.extensions.configlayout import NColorLabel, NScrollableForm from novelwriter.extensions.configlayout import NColorLabel, NScrollableForm
from novelwriter.extensions.modified import ( from novelwriter.extensions.modified import (
NComboBox, NDialog, NDoubleSpinBox, NIconToolButton, NSpinBox NComboBox, NDialog, NDoubleSpinBox, NIconToolButton, NSpinBox
) )
from novelwriter.extensions.pagedsidebar import NPagedSideBar from novelwriter.extensions.pagedsidebar import NPagedSideBar
from novelwriter.extensions.switch import NSwitch from novelwriter.extensions.switch import NSwitch
from novelwriter.types import QtAlignCenter, QtDialogCancel, QtDialogSave from novelwriter.types import QtAlignCenter, QtRoleAccept, QtRoleReject
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -89,9 +90,15 @@ class GuiPreferences(NDialog):
self.mainForm.setHelpTextStyle(SHARED.theme.helpText) self.mainForm.setHelpTextStyle(SHARED.theme.helpText)
# Buttons # Buttons
self.buttonBox = QDialogButtonBox(QtDialogSave | QtDialogCancel, self) self.btnSave = SHARED.theme.getStandardButton(nwStandardButton.SAVE, self)
self.buttonBox.accepted.connect(self._doSave) self.btnSave.clicked.connect(self._doSave)
self.buttonBox.rejected.connect(self.reject)
self.btnCancel = SHARED.theme.getStandardButton(nwStandardButton.CANCEL, self)
self.btnCancel.clicked.connect(self.reject)
self.btnBox = QDialogButtonBox(self)
self.btnBox.addButton(self.btnSave, QtRoleAccept)
self.btnBox.addButton(self.btnCancel, QtRoleReject)
# Assemble # Assemble
self.searchBox = QHBoxLayout() self.searchBox = QHBoxLayout()
@@ -107,7 +114,7 @@ class GuiPreferences(NDialog):
self.outerBox = QVBoxLayout() self.outerBox = QVBoxLayout()
self.outerBox.addLayout(self.searchBox) self.outerBox.addLayout(self.searchBox)
self.outerBox.addLayout(self.mainBox) self.outerBox.addLayout(self.mainBox)
self.outerBox.addWidget(self.buttonBox) self.outerBox.addWidget(self.btnBox)
self.outerBox.setSpacing(8) self.outerBox.setSpacing(8)
self.setLayout(self.outerBox) self.setLayout(self.outerBox)
+12 -6
View File
@@ -41,13 +41,13 @@ from novelwriter import CONFIG, SHARED
from novelwriter.common import formatFileFilter, qtAddAction, qtLambda, simplified from novelwriter.common import formatFileFilter, qtAddAction, qtLambda, simplified
from novelwriter.constants import nwLabels, trConst from novelwriter.constants import nwLabels, trConst
from novelwriter.core.status import CUSTOM_COL, NWStatus, StatusEntry from novelwriter.core.status import CUSTOM_COL, NWStatus, StatusEntry
from novelwriter.enum import nwStatusShape from novelwriter.enum import nwStandardButton, nwStatusShape
from novelwriter.extensions.configlayout import NColorLabel, NFixedPage, NScrollableForm from novelwriter.extensions.configlayout import NColorLabel, NFixedPage, NScrollableForm
from novelwriter.extensions.modified import NComboBox, NDialog, NIconToolButton from novelwriter.extensions.modified import NComboBox, NDialog, NIconToolButton
from novelwriter.extensions.pagedsidebar import NPagedSideBar from novelwriter.extensions.pagedsidebar import NPagedSideBar
from novelwriter.extensions.switch import NSwitch from novelwriter.extensions.switch import NSwitch
from novelwriter.types import ( from novelwriter.types import (
QtDialogCancel, QtDialogSave, QtSizeMinimum, QtSizeMinimumExpanding, QtRoleAccept, QtRoleReject, QtSizeMinimum, QtSizeMinimumExpanding,
QtUserRole QtUserRole
) )
@@ -95,9 +95,15 @@ class GuiProjectSettings(NDialog):
self.sidebar.buttonClicked.connect(self._sidebarClicked) self.sidebar.buttonClicked.connect(self._sidebarClicked)
# Buttons # Buttons
self.buttonBox = QDialogButtonBox(QtDialogSave | QtDialogCancel, self) self.btnSave = SHARED.theme.getStandardButton(nwStandardButton.SAVE, self)
self.buttonBox.accepted.connect(self._doSave) self.btnSave.clicked.connect(self._doSave)
self.buttonBox.rejected.connect(self.reject)
self.btnCancel = SHARED.theme.getStandardButton(nwStandardButton.CANCEL, self)
self.btnCancel.clicked.connect(self.reject)
self.btnBox = QDialogButtonBox(self)
self.btnBox.addButton(self.btnSave, QtRoleAccept)
self.btnBox.addButton(self.btnCancel, QtRoleReject)
# Content # Content
SHARED.project.countStatus() SHARED.project.countStatus()
@@ -126,7 +132,7 @@ class GuiProjectSettings(NDialog):
self.outerBox = QVBoxLayout() self.outerBox = QVBoxLayout()
self.outerBox.addLayout(self.topBox) self.outerBox.addLayout(self.topBox)
self.outerBox.addLayout(self.mainBox) self.outerBox.addLayout(self.mainBox)
self.outerBox.addWidget(self.buttonBox) self.outerBox.addWidget(self.btnBox)
self.outerBox.setSpacing(8) self.outerBox.setSpacing(8)
self.setLayout(self.outerBox) self.setLayout(self.outerBox)
+13 -5
View File
@@ -32,10 +32,12 @@ from PyQt6.QtWidgets import (
QListWidgetItem, QVBoxLayout, QWidget QListWidgetItem, QVBoxLayout, QWidget
) )
from novelwriter import SHARED
from novelwriter.constants import nwQuotes, trConst from novelwriter.constants import nwQuotes, trConst
from novelwriter.enum import nwStandardButton
from novelwriter.extensions.modified import NDialog from novelwriter.extensions.modified import NDialog
from novelwriter.types import ( from novelwriter.types import (
QtAccepted, QtAlignCenter, QtAlignTop, QtDialogCancel, QtDialogOk, QtAccepted, QtAlignCenter, QtAlignTop, QtRoleAccept, QtRoleReject,
QtUserRole QtUserRole
) )
@@ -91,9 +93,15 @@ class GuiQuoteSelect(NDialog):
self.listBox.setMinimumHeight(150) self.listBox.setMinimumHeight(150)
# Buttons # Buttons
self.buttonBox = QDialogButtonBox(QtDialogOk | QtDialogCancel, self) self.btnOk = SHARED.theme.getStandardButton(nwStandardButton.OK, self)
self.buttonBox.accepted.connect(self.accept) self.btnOk.clicked.connect(self.accept)
self.buttonBox.rejected.connect(self.reject)
self.btnCancel = SHARED.theme.getStandardButton(nwStandardButton.CANCEL, self)
self.btnCancel.clicked.connect(self.reject)
self.btnBox = QDialogButtonBox(self)
self.btnBox.addButton(self.btnOk, QtRoleAccept)
self.btnBox.addButton(self.btnCancel, QtRoleReject)
# Assemble # Assemble
self.labelBox.addWidget(self.previewLabel, 0, QtAlignTop) self.labelBox.addWidget(self.previewLabel, 0, QtAlignTop)
@@ -103,7 +111,7 @@ class GuiQuoteSelect(NDialog):
self.innerBox.addWidget(self.listBox) self.innerBox.addWidget(self.listBox)
self.outerBox.addLayout(self.innerBox) self.outerBox.addLayout(self.innerBox)
self.outerBox.addWidget(self.buttonBox) self.outerBox.addWidget(self.btnBox)
self.setLayout(self.outerBox) self.setLayout(self.outerBox)
+12 -5
View File
@@ -37,9 +37,10 @@ from PyQt6.QtWidgets import (
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
from novelwriter.common import formatFileFilter from novelwriter.common import formatFileFilter
from novelwriter.core.spellcheck import UserDictionary from novelwriter.core.spellcheck import UserDictionary
from novelwriter.enum import nwStandardButton
from novelwriter.extensions.configlayout import NColorLabel from novelwriter.extensions.configlayout import NColorLabel
from novelwriter.extensions.modified import NDialog, NIconToolButton from novelwriter.extensions.modified import NDialog, NIconToolButton
from novelwriter.types import QtDialogClose, QtDialogSave from novelwriter.types import QtRoleAccept, QtRoleReject
if TYPE_CHECKING: if TYPE_CHECKING:
from PyQt6.QtGui import QCloseEvent from PyQt6.QtGui import QCloseEvent
@@ -110,9 +111,15 @@ class GuiWordList(NDialog):
self.editBox.addWidget(self.delButton, 0) self.editBox.addWidget(self.delButton, 0)
# Buttons # Buttons
self.buttonBox = QDialogButtonBox(QtDialogSave | QtDialogClose, self) self.btnSave = SHARED.theme.getStandardButton(nwStandardButton.SAVE, self)
self.buttonBox.accepted.connect(self._doSave) self.btnSave.clicked.connect(self._doSave)
self.buttonBox.rejected.connect(self.reject)
self.btnClose = SHARED.theme.getStandardButton(nwStandardButton.CLOSE, self)
self.btnClose.clicked.connect(self.reject)
self.btnBox = QDialogButtonBox(self)
self.btnBox.addButton(self.btnSave, QtRoleAccept)
self.btnBox.addButton(self.btnClose, QtRoleReject)
# Assemble # Assemble
self.outerBox = QVBoxLayout() self.outerBox = QVBoxLayout()
@@ -120,7 +127,7 @@ class GuiWordList(NDialog):
self.outerBox.addWidget(self.listBox, 1) self.outerBox.addWidget(self.listBox, 1)
self.outerBox.addLayout(self.editBox, 0) self.outerBox.addLayout(self.editBox, 0)
self.outerBox.addSpacing(12) self.outerBox.addSpacing(12)
self.outerBox.addWidget(self.buttonBox, 0) self.outerBox.addWidget(self.btnBox, 0)
self.outerBox.setSpacing(4) self.outerBox.setSpacing(4)
self.setLayout(self.outerBox) self.setLayout(self.outerBox)
+22
View File
@@ -247,3 +247,25 @@ class nwStatusShape(Enum):
BLOCK_2 = 17 BLOCK_2 = 17
BLOCK_3 = 18 BLOCK_3 = 18
BLOCK_4 = 19 BLOCK_4 = 19
class nwStandardButton(Enum):
"""Enum: Standard Dialog Buttons."""
OK = 0
CANCEL = 1
YES = 2
NO = 3
OPEN = 4
CLOSE = 5
SAVE = 6
BROWSE = 7
LIST = 8
NEW = 9
CREATE = 10
RESET = 11
INSERT = 12
APPLY = 13
BUILD = 14
PRINT = 15
PREVIEW = 16
+25 -2
View File
@@ -31,8 +31,8 @@ from typing import TYPE_CHECKING
from PyQt6.QtCore import QModelIndex, QSize, Qt, pyqtSignal, pyqtSlot from PyQt6.QtCore import QModelIndex, QSize, Qt, pyqtSignal, pyqtSlot
from PyQt6.QtWidgets import ( from PyQt6.QtWidgets import (
QApplication, QComboBox, QDialog, QDoubleSpinBox, QLabel, QSpinBox, QApplication, QComboBox, QDialog, QDoubleSpinBox, QLabel, QPushButton,
QToolButton, QTreeView, QWidget QSpinBox, QToolButton, QTreeView, QWidget
) )
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
@@ -199,6 +199,29 @@ class NDoubleSpinBox(QDoubleSpinBox):
event.ignore() event.ignore()
class NPushButton(QPushButton):
"""Custom: Modified QPushButton.
A quicker way to create a push button using the app theme.
"""
def __init__(
self, parent: QWidget, text: str, iconSize: QSize,
icon: str | None = None, color: str | None = None
) -> None:
super().__init__(parent=parent)
self._icon = icon
self._color = color
self.setText(text)
self.setIconSize(iconSize)
self.refreshIcon()
def refreshIcon(self) -> None:
"""Reload the theme icon."""
if self._icon:
self.setIcon(SHARED.theme.getIcon(self._icon, self._color))
class NIconToolButton(QToolButton): class NIconToolButton(QToolButton):
"""Custom: Modified QToolButton. """Custom: Modified QToolButton.
+36 -6
View File
@@ -31,19 +31,20 @@ from dataclasses import dataclass
from math import ceil from math import ceil
from typing import TYPE_CHECKING, Final from typing import TYPE_CHECKING, Final
from PyQt6.QtCore import QSize, Qt from PyQt6.QtCore import QT_TRANSLATE_NOOP, QCoreApplication, QSize, Qt
from PyQt6.QtGui import ( from PyQt6.QtGui import (
QColor, QFont, QFontDatabase, QFontMetrics, QGuiApplication, QIcon, QColor, QFont, QFontDatabase, QFontMetrics, QGuiApplication, QIcon,
QPainter, QPainterPath, QPalette, QPixmap QPainter, QPainterPath, QPalette, QPixmap
) )
from PyQt6.QtWidgets import QApplication from PyQt6.QtWidgets import QApplication, QWidget
from novelwriter import CONFIG from novelwriter import CONFIG
from novelwriter.common import checkInt, minmax from novelwriter.common import checkInt, minmax
from novelwriter.config import DEF_GUI_DARK, DEF_GUI_LIGHT, DEF_ICONS, DEF_TREECOL from novelwriter.config import DEF_GUI_DARK, DEF_GUI_LIGHT, DEF_ICONS, DEF_TREECOL
from novelwriter.constants import nwLabels from novelwriter.constants import nwLabels
from novelwriter.enum import nwItemClass, nwItemLayout, nwItemType, nwTheme from novelwriter.enum import nwItemClass, nwItemLayout, nwItemType, nwStandardButton, nwTheme
from novelwriter.error import logException from novelwriter.error import logException
from novelwriter.extensions.modified import NPushButton
from novelwriter.types import QtBlack, QtHexArgb, QtPaintAntiAlias, QtTransparent from novelwriter.types import QtBlack, QtHexArgb, QtPaintAntiAlias, QtTransparent
if TYPE_CHECKING: if TYPE_CHECKING:
@@ -55,6 +56,26 @@ STYLES_FLAT_TABS = "flatTabWidget"
STYLES_MIN_TOOLBUTTON = "minimalToolButton" STYLES_MIN_TOOLBUTTON = "minimalToolButton"
STYLES_BIG_TOOLBUTTON = "bigToolButton" STYLES_BIG_TOOLBUTTON = "bigToolButton"
STANDARD_BUTTONS = {
nwStandardButton.OK: (QT_TRANSLATE_NOOP("Button", "OK"), "btn_ok", "blue"),
nwStandardButton.CANCEL: (QT_TRANSLATE_NOOP("Button", "Cancel"), "btn_cancel", "red"),
nwStandardButton.YES: (QT_TRANSLATE_NOOP("Button", "&Yes"), "btn_yes", "green"),
nwStandardButton.NO: (QT_TRANSLATE_NOOP("Button", "&No"), "btn_no", "red"),
nwStandardButton.OPEN: (QT_TRANSLATE_NOOP("Button", "Open"), "btn_open", "blue"),
nwStandardButton.CLOSE: (QT_TRANSLATE_NOOP("Button", "Close"), "btn_close", "faded"),
nwStandardButton.SAVE: (QT_TRANSLATE_NOOP("Button", "Save"), "btn_save", "blue"),
nwStandardButton.BROWSE: (QT_TRANSLATE_NOOP("Button", "Browse"), "btn_browse", "yellow"),
nwStandardButton.LIST: (QT_TRANSLATE_NOOP("Button", "List"), "btn_list", "blue"),
nwStandardButton.NEW: (QT_TRANSLATE_NOOP("Button", "New"), "btn_new", "green"),
nwStandardButton.CREATE: (QT_TRANSLATE_NOOP("Button", "Create"), "btn_create", "yellow"),
nwStandardButton.RESET: (QT_TRANSLATE_NOOP("Button", "Reset"), "btn_reset", "green"),
nwStandardButton.INSERT: (QT_TRANSLATE_NOOP("Button", "Insert"), "btn_insert", "blue"),
nwStandardButton.APPLY: (QT_TRANSLATE_NOOP("Button", "Apply"), "btn_apply", "blue"),
nwStandardButton.BUILD: (QT_TRANSLATE_NOOP("Button", "Build"), "btn_build", "blue"),
nwStandardButton.PRINT: (QT_TRANSLATE_NOOP("Button", "Print"), "btn_print", "blue"),
nwStandardButton.PREVIEW: (QT_TRANSLATE_NOOP("Button", "Preview"), "btn_preview", "blue"),
}
@dataclass @dataclass
class ThemeEntry: class ThemeEntry:
@@ -120,9 +141,9 @@ class GuiTheme:
"_qColors", "_styleSheets", "_svgColors", "_syntaxList", "accentCol", "baseButtonHeight", "_qColors", "_styleSheets", "_svgColors", "_syntaxList", "accentCol", "baseButtonHeight",
"baseIconHeight", "baseIconSize", "buttonIconSize", "errorText", "fadedText", "baseIconHeight", "baseIconSize", "buttonIconSize", "errorText", "fadedText",
"fontPixelSize", "fontPointSize", "getDecoration", "getHeaderDecoration", "fontPixelSize", "fontPointSize", "getDecoration", "getHeaderDecoration",
"getHeaderDecorationNarrow", "getIcon", "getItemIcon", "getPixmap", "getToggleIcon", "getHeaderDecorationNarrow", "getIcon", "getItemIcon", "getPixmap", "getStandardButton",
"guiFont", "guiFontB", "guiFontBU", "guiFontFixed", "guiFontSmall", "helpText", "getToggleIcon", "guiFont", "guiFontB", "guiFontBU", "guiFontFixed", "guiFontSmall",
"iconCache", "isDarkTheme", "syntaxTheme", "textNHeight", "textNWidth", "helpText", "iconCache", "isDarkTheme", "syntaxTheme", "textNHeight", "textNWidth",
) )
def __init__(self) -> None: def __init__(self) -> None:
@@ -153,6 +174,7 @@ class GuiTheme:
self.getItemIcon = self.iconCache.getItemIcon self.getItemIcon = self.iconCache.getItemIcon
self.getToggleIcon = self.iconCache.getToggleIcon self.getToggleIcon = self.iconCache.getToggleIcon
self.getDecoration = self.iconCache.getDecoration self.getDecoration = self.iconCache.getDecoration
self.getStandardButton = self.iconCache.getStandardButton
self.getHeaderDecoration = self.iconCache.getHeaderDecoration self.getHeaderDecoration = self.iconCache.getHeaderDecoration
self.getHeaderDecorationNarrow = self.iconCache.getHeaderDecorationNarrow self.getHeaderDecorationNarrow = self.iconCache.getHeaderDecorationNarrow
@@ -808,6 +830,14 @@ class GuiIcons:
w, h = size w, h = size
return self.getIcon(name, color, w, h).pixmap(w, h, QIcon.Mode.Normal) return self.getIcon(name, color, w, h).pixmap(w, h, QIcon.Mode.Normal)
def getStandardButton(self, button: nwStandardButton, parent: QWidget) -> NPushButton:
"""Return a standard button with icon and text."""
text, icon, color = STANDARD_BUTTONS.get(button, ("", "", ""))
return NPushButton(
parent, QCoreApplication.translate("Button", text),
self._theme.buttonIconSize, icon, color
)
def getDecoration(self, name: str, w: int | None = None, h: int | None = None) -> QPixmap: def getDecoration(self, name: str, w: int | None = None, h: int | None = None) -> QPixmap:
"""Load graphical decoration element based on the decoration """Load graphical decoration element based on the decoration
map or the icon map. This function always returns a QPixmap. map or the icon map. This function always returns a QPixmap.
+29 -4
View File
@@ -39,7 +39,7 @@ from PyQt6.QtWidgets import QApplication, QFileDialog, QFontDialog, QMessageBox,
from novelwriter.common import formatFileFilter from novelwriter.common import formatFileFilter
from novelwriter.constants import nwFiles from novelwriter.constants import nwFiles
from novelwriter.core.spellcheck import NWSpellEnchant from novelwriter.core.spellcheck import NWSpellEnchant
from novelwriter.enum import nwChange, nwItemClass from novelwriter.enum import nwChange, nwItemClass, nwStandardButton
if TYPE_CHECKING: if TYPE_CHECKING:
from collections.abc import Callable from collections.abc import Callable
@@ -422,7 +422,7 @@ class SharedData(QObject):
alert.setAlertType(_GuiAlert.WARN if warn else _GuiAlert.ASK, True) alert.setAlertType(_GuiAlert.WARN if warn else _GuiAlert.ASK, True)
self._lastAlert = alert.logMessage self._lastAlert = alert.logMessage
alert.exec() alert.exec()
return alert.result() == QMessageBox.StandardButton.Yes return alert.finalState
## ##
# Internal Functions # Internal Functions
@@ -469,6 +469,7 @@ class _GuiAlert(QMessageBox):
super().__init__(parent=parent) super().__init__(parent=parent)
self._theme = theme self._theme = theme
self._message = "" self._message = ""
self._state = False
logger.debug("Ready: _GuiAlert") logger.debug("Ready: _GuiAlert")
def __del__(self) -> None: # pragma: no cover def __del__(self) -> None: # pragma: no cover
@@ -478,6 +479,10 @@ class _GuiAlert(QMessageBox):
def logMessage(self) -> str: def logMessage(self) -> str:
return self._message return self._message
@property
def finalState(self) -> bool:
return self._state
def setMessage(self, text: str, info: str, details: str) -> None: def setMessage(self, text: str, info: str, details: str) -> None:
"""Set the alert box message.""" """Set the alert box message."""
self._message = " ".join(filter(None, [text, info, details])) self._message = " ".join(filter(None, [text, info, details]))
@@ -496,9 +501,17 @@ class _GuiAlert(QMessageBox):
Yes/No buttons or just an Ok button. Yes/No buttons or just an Ok button.
""" """
if isYesNo: if isYesNo:
self.setStandardButtons(QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No) self._btnYes = self._theme.getStandardButton(nwStandardButton.YES, self)
self._btnYes.clicked.connect(self._onAccept)
self._btnNo = self._theme.getStandardButton(nwStandardButton.NO, self)
self._btnNo.clicked.connect(self._onReject)
self.addButton(self._btnYes, QMessageBox.ButtonRole.YesRole)
self.addButton(self._btnNo, QMessageBox.ButtonRole.NoRole)
else: else:
self.setStandardButtons(QMessageBox.StandardButton.Ok) self._btnOk = self._theme.getStandardButton(nwStandardButton.OK, self)
self._btnOk.clicked.connect(self._onAccept)
self.addButton(self._btnOk, QMessageBox.ButtonRole.AcceptRole)
pSz = 2*self._theme.baseIconHeight pSz = 2*self._theme.baseIconHeight
if level == self.INFO: if level == self.INFO:
self.setIconPixmap(self._theme.getPixmap("alert_info", (pSz, pSz), "blue")) self.setIconPixmap(self._theme.getPixmap("alert_info", (pSz, pSz), "blue"))
@@ -512,3 +525,15 @@ class _GuiAlert(QMessageBox):
elif level == self.ASK: elif level == self.ASK:
self.setIconPixmap(self._theme.getPixmap("alert_question", (pSz, pSz), "blue")) self.setIconPixmap(self._theme.getPixmap("alert_question", (pSz, pSz), "blue"))
self.setWindowTitle(self.tr("Question")) self.setWindowTitle(self.tr("Question"))
@pyqtSlot()
def _onAccept(self) -> None:
"""Process accepted state."""
self._state = True
self.close()
@pyqtSlot()
def _onReject(self) -> None:
"""Process rejected state."""
self._state = False
self.close()
+8 -4
View File
@@ -37,9 +37,10 @@ from PyQt6.QtWidgets import (
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
from novelwriter.common import formatFileFilter, formatInt, getFileSize, openExternalPath from novelwriter.common import formatFileFilter, formatInt, getFileSize, openExternalPath
from novelwriter.enum import nwStandardButton
from novelwriter.error import formatException from novelwriter.error import formatException
from novelwriter.extensions.modified import NIconToolButton, NNonBlockingDialog from novelwriter.extensions.modified import NIconToolButton, NNonBlockingDialog
from novelwriter.types import QtDialogClose, QtHexArgb from novelwriter.types import QtHexArgb, QtRoleReject
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -110,8 +111,11 @@ class GuiDictionaries(NNonBlockingDialog):
self.infoBox.setFrameStyle(QFrame.Shape.NoFrame) self.infoBox.setFrameStyle(QFrame.Shape.NoFrame)
# Buttons # Buttons
self.buttonBox = QDialogButtonBox(QtDialogClose, self) self.btnClose = SHARED.theme.getStandardButton(nwStandardButton.CLOSE, self)
self.buttonBox.rejected.connect(self.reject) self.btnClose.clicked.connect(self.reject)
self.btnBox = QDialogButtonBox(self)
self.btnBox.addButton(self.btnClose, QtRoleReject)
# Assemble # Assemble
self.outerBox = QVBoxLayout() self.outerBox = QVBoxLayout()
@@ -123,7 +127,7 @@ class GuiDictionaries(NNonBlockingDialog):
self.outerBox.addLayout(self.inBox, 0) self.outerBox.addLayout(self.inBox, 0)
self.outerBox.addWidget(self.infoBox, 1) self.outerBox.addWidget(self.infoBox, 1)
self.outerBox.addSpacing(8) self.outerBox.addSpacing(8)
self.outerBox.addWidget(self.buttonBox, 0) self.outerBox.addWidget(self.btnBox, 0)
self.setLayout(self.outerBox) self.setLayout(self.outerBox)
+12 -11
View File
@@ -34,9 +34,10 @@ from PyQt6.QtWidgets import (
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
from novelwriter.common import readTextFile from novelwriter.common import readTextFile
from novelwriter.enum import nwStandardButton
from novelwriter.extensions.modified import NDialog from novelwriter.extensions.modified import NDialog
from novelwriter.extensions.switch import NSwitch from novelwriter.extensions.switch import NSwitch
from novelwriter.types import QtAlignLeft, QtAlignRight, QtDialogClose, QtRoleAction from novelwriter.types import QtAlignLeft, QtAlignRight, QtRoleApply, QtRoleReject
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -91,22 +92,22 @@ class GuiLipsum(NDialog):
self.innerBox.addLayout(self.formBox) self.innerBox.addLayout(self.formBox)
# Buttons # Buttons
self.buttonBox = QDialogButtonBox(self) self.btnInsert = SHARED.theme.getStandardButton(nwStandardButton.INSERT, self)
self.buttonBox.rejected.connect(self.reject) self.btnInsert.clicked.connect(self._doInsert)
self.btnInsert.setAutoDefault(False)
self.btnClose = self.buttonBox.addButton(QtDialogClose) self.btnClose = SHARED.theme.getStandardButton(nwStandardButton.CLOSE, self)
if self.btnClose: self.btnClose.clicked.connect(self.reject)
self.btnClose.setAutoDefault(False) self.btnClose.setAutoDefault(False)
self.btnInsert = self.buttonBox.addButton(self.tr("Insert"), QtRoleAction) self.btnBox = QDialogButtonBox(self)
if self.btnInsert: self.btnBox.addButton(self.btnInsert, QtRoleApply)
self.btnInsert.clicked.connect(self._doInsert) self.btnBox.addButton(self.btnClose, QtRoleReject)
self.btnInsert.setAutoDefault(False)
# Assemble # Assemble
self.outerBox = QVBoxLayout() self.outerBox = QVBoxLayout()
self.outerBox.addLayout(self.innerBox) self.outerBox.addLayout(self.innerBox)
self.outerBox.addWidget(self.buttonBox) self.outerBox.addWidget(self.btnBox)
self.outerBox.setSpacing(16) self.outerBox.setSpacing(16)
self.setLayout(self.outerBox) self.setLayout(self.outerBox)
+16 -22
View File
@@ -32,7 +32,7 @@ from PyQt6.QtCore import QTimer, pyqtSlot
from PyQt6.QtWidgets import ( from PyQt6.QtWidgets import (
QAbstractButton, QAbstractItemView, QDialogButtonBox, QFileDialog, QAbstractButton, QAbstractItemView, QDialogButtonBox, QFileDialog,
QGridLayout, QHBoxLayout, QLabel, QLineEdit, QListWidget, QListWidgetItem, QGridLayout, QHBoxLayout, QLabel, QLineEdit, QListWidget, QListWidgetItem,
QPushButton, QSplitter, QVBoxLayout, QWidget QSplitter, QVBoxLayout, QWidget
) )
from novelwriter import SHARED from novelwriter import SHARED
@@ -40,10 +40,10 @@ from novelwriter.common import makeFileNameSafe, openExternalPath
from novelwriter.constants import nwLabels from novelwriter.constants import nwLabels
from novelwriter.core.docbuild import NWBuildDocument from novelwriter.core.docbuild import NWBuildDocument
from novelwriter.core.item import NWItem from novelwriter.core.item import NWItem
from novelwriter.enum import nwBuildFmt from novelwriter.enum import nwBuildFmt, nwStandardButton
from novelwriter.extensions.modified import NDialog, NIconToolButton from novelwriter.extensions.modified import NDialog, NIconToolButton, NPushButton
from novelwriter.extensions.progressbars import NProgressSimple from novelwriter.extensions.progressbars import NProgressSimple
from novelwriter.types import QtAlignCenter, QtDialogClose, QtRoleAction, QtRoleReject, QtUserRole from novelwriter.types import QtAlignCenter, QtRoleAction, QtRoleReject, QtUserRole
if TYPE_CHECKING: if TYPE_CHECKING:
from PyQt6.QtGui import QCloseEvent from PyQt6.QtGui import QCloseEvent
@@ -178,25 +178,19 @@ class GuiManuscriptBuild(NDialog):
self.buildBox.setVerticalSpacing(4) self.buildBox.setVerticalSpacing(4)
# Dialog Buttons # Dialog Buttons
self.buttonBox = QDialogButtonBox(self) self.btnOpen = NPushButton(self, self.tr("Open Folder"), bSz, "browse", "yellow")
self.btnOpen = QPushButton(
SHARED.theme.getIcon("browse", "yellow"), self.tr("Open Folder"), self
)
self.btnOpen.setIconSize(bSz)
self.btnOpen.setAutoDefault(False) self.btnOpen.setAutoDefault(False)
self.buttonBox.addButton(self.btnOpen, QtRoleAction)
self.btnBuild = QPushButton( self.btnBuild = SHARED.theme.getStandardButton(nwStandardButton.BUILD, self)
SHARED.theme.getIcon("sb_build", "blue"), self.tr("&Build"), self
)
self.btnBuild.setIconSize(bSz)
self.btnBuild.setAutoDefault(True) self.btnBuild.setAutoDefault(True)
self.buttonBox.addButton(self.btnBuild, QtRoleAction)
self.btnClose = self.buttonBox.addButton(QtDialogClose) self.btnClose = SHARED.theme.getStandardButton(nwStandardButton.CLOSE, self)
if self.btnClose: self.btnClose.setAutoDefault(False)
self.btnClose.setAutoDefault(False)
self.btnBox = QDialogButtonBox(self)
self.btnBox.addButton(self.btnOpen, QtRoleAction)
self.btnBox.addButton(self.btnBuild, QtRoleAction)
self.btnBox.addButton(self.btnClose, QtRoleReject)
# Assemble GUI # Assemble GUI
# ============ # ============
@@ -223,7 +217,7 @@ class GuiManuscriptBuild(NDialog):
self.outerBox.addSpacing(4) self.outerBox.addSpacing(4)
self.outerBox.addLayout(self.buildBox, 0) self.outerBox.addLayout(self.buildBox, 0)
self.outerBox.addSpacing(16) self.outerBox.addSpacing(16)
self.outerBox.addWidget(self.buttonBox, 0) self.outerBox.addWidget(self.btnBox, 0)
self.outerBox.setSpacing(0) self.outerBox.setSpacing(0)
self.setLayout(self.outerBox) self.setLayout(self.outerBox)
@@ -239,7 +233,7 @@ class GuiManuscriptBuild(NDialog):
# Signals # Signals
self.btnReset.clicked.connect(self._doResetBuildName) self.btnReset.clicked.connect(self._doResetBuildName)
self.btnBrowse.clicked.connect(self._doSelectPath) self.btnBrowse.clicked.connect(self._doSelectPath)
self.buttonBox.clicked.connect(self._dialogButtonClicked) self.btnBox.clicked.connect(self._dialogButtonClicked)
self.listFormats.itemSelectionChanged.connect(self._resetProgress) self.listFormats.itemSelectionChanged.connect(self._resetProgress)
logger.debug("Ready: GuiManuscriptBuild") logger.debug("Ready: GuiManuscriptBuild")
@@ -266,7 +260,7 @@ class GuiManuscriptBuild(NDialog):
@pyqtSlot("QAbstractButton*") @pyqtSlot("QAbstractButton*")
def _dialogButtonClicked(self, button: QAbstractButton) -> None: def _dialogButtonClicked(self, button: QAbstractButton) -> None:
"""Handle button clicks from the dialog button box.""" """Handle button clicks from the dialog button box."""
role = self.buttonBox.buttonRole(button) role = self.btnBox.buttonRole(button)
if role == QtRoleAction: if role == QtRoleAction:
if button == self.btnBuild: if button == self.btnBuild:
self._runBuild() self._runBuild()
+8 -7
View File
@@ -36,9 +36,9 @@ from PyQt6.QtGui import (
from PyQt6.QtPrintSupport import QPrinter, QPrintPreviewDialog from PyQt6.QtPrintSupport import QPrinter, QPrintPreviewDialog
from PyQt6.QtWidgets import ( from PyQt6.QtWidgets import (
QAbstractItemView, QApplication, QFormLayout, QGridLayout, QHBoxLayout, QAbstractItemView, QApplication, QFormLayout, QGridLayout, QHBoxLayout,
QLabel, QListWidget, QListWidgetItem, QPushButton, QSplitter, QLabel, QListWidget, QListWidgetItem, QSplitter, QStackedWidget,
QStackedWidget, QTabWidget, QTextBrowser, QTreeWidget, QTreeWidgetItem, QTabWidget, QTextBrowser, QTreeWidget, QTreeWidgetItem, QVBoxLayout,
QVBoxLayout, QWidget QWidget
) )
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
@@ -46,6 +46,7 @@ from novelwriter.common import fuzzyTime, qtLambda
from novelwriter.constants import nwHeadFmt, nwLabels, nwStats, nwUnicode, trStats from novelwriter.constants import nwHeadFmt, nwLabels, nwStats, nwUnicode, trStats
from novelwriter.core.buildsettings import BuildCollection, BuildSettings from novelwriter.core.buildsettings import BuildCollection, BuildSettings
from novelwriter.core.docbuild import NWBuildDocument from novelwriter.core.docbuild import NWBuildDocument
from novelwriter.enum import nwStandardButton
from novelwriter.extensions.modified import NIconToggleButton, NIconToolButton, NToolDialog from novelwriter.extensions.modified import NIconToggleButton, NIconToolButton, NToolDialog
from novelwriter.extensions.progressbars import NProgressCircle from novelwriter.extensions.progressbars import NProgressCircle
from novelwriter.extensions.switch import NSwitch from novelwriter.extensions.switch import NSwitch
@@ -171,16 +172,16 @@ class GuiManuscript(NToolDialog):
# Process Controls # Process Controls
# ================ # ================
self.btnPreview = QPushButton(self.tr("Preview"), self) self.btnPreview = SHARED.theme.getStandardButton(nwStandardButton.PREVIEW, self)
self.btnPreview.clicked.connect(self._generatePreview) self.btnPreview.clicked.connect(self._generatePreview)
self.btnPrint = QPushButton(self.tr("Print"), self) self.btnPrint = SHARED.theme.getStandardButton(nwStandardButton.PRINT, self)
self.btnPrint.clicked.connect(self._printDocument) self.btnPrint.clicked.connect(self._printDocument)
self.btnBuild = QPushButton(self.tr("Build"), self) self.btnBuild = SHARED.theme.getStandardButton(nwStandardButton.BUILD, self)
self.btnBuild.clicked.connect(self._buildManuscript) self.btnBuild.clicked.connect(self._buildManuscript)
self.btnClose = QPushButton(self.tr("Close"), self) self.btnClose = SHARED.theme.getStandardButton(nwStandardButton.CLOSE, self)
self.btnClose.clicked.connect(qtLambda(self.close)) self.btnClose.clicked.connect(qtLambda(self.close))
self.processBox = QGridLayout() self.processBox = QGridLayout()
+14 -7
View File
@@ -40,6 +40,7 @@ from novelwriter import CONFIG, SHARED
from novelwriter.common import describeFont, fontMatcher, qtAddAction, qtLambda from novelwriter.common import describeFont, fontMatcher, qtAddAction, qtLambda
from novelwriter.constants import nwHeadFmt, nwKeyWords, nwLabels, nwUnicode, trConst from novelwriter.constants import nwHeadFmt, nwKeyWords, nwLabels, nwUnicode, trConst
from novelwriter.core.buildsettings import BuildSettings, FilterMode from novelwriter.core.buildsettings import BuildSettings, FilterMode
from novelwriter.enum import nwStandardButton
from novelwriter.extensions.configlayout import ( from novelwriter.extensions.configlayout import (
NColorLabel, NFixedPage, NScrollableForm, NScrollablePage NColorLabel, NFixedPage, NScrollableForm, NScrollablePage
) )
@@ -50,9 +51,8 @@ from novelwriter.extensions.pagedsidebar import NPagedSideBar
from novelwriter.extensions.switch import NSwitch from novelwriter.extensions.switch import NSwitch
from novelwriter.extensions.switchbox import NSwitchBox from novelwriter.extensions.switchbox import NSwitchBox
from novelwriter.types import ( from novelwriter.types import (
QtAlignCenter, QtAlignLeft, QtDialogApply, QtDialogClose, QtDialogSave, QtAlignCenter, QtAlignLeft, QtHeaderFixed, QtHeaderStretch, QtRoleAccept,
QtHeaderFixed, QtHeaderStretch, QtRoleAccept, QtRoleApply, QtRoleReject, QtRoleApply, QtRoleReject, QtUserRole
QtUserRole
) )
if TYPE_CHECKING: if TYPE_CHECKING:
@@ -125,8 +125,15 @@ class GuiBuildSettings(NToolDialog):
self.toolStack.addWidget(self.optTabFormatting) self.toolStack.addWidget(self.optTabFormatting)
# Buttons # Buttons
self.buttonBox = QDialogButtonBox(QtDialogApply | QtDialogSave | QtDialogClose, self) self.btnApply = SHARED.theme.getStandardButton(nwStandardButton.APPLY, self)
self.buttonBox.clicked.connect(self._dialogButtonClicked) self.btnSave = SHARED.theme.getStandardButton(nwStandardButton.SAVE, self)
self.btnClose = SHARED.theme.getStandardButton(nwStandardButton.CLOSE, self)
self.btnBox = QDialogButtonBox(self)
self.btnBox.addButton(self.btnApply, QtRoleApply)
self.btnBox.addButton(self.btnSave, QtRoleAccept)
self.btnBox.addButton(self.btnClose, QtRoleReject)
self.btnBox.clicked.connect(self._dialogButtonClicked)
# Assemble # Assemble
self.topBox = QHBoxLayout() self.topBox = QHBoxLayout()
@@ -143,7 +150,7 @@ class GuiBuildSettings(NToolDialog):
self.outerBox = QVBoxLayout() self.outerBox = QVBoxLayout()
self.outerBox.addLayout(self.topBox) self.outerBox.addLayout(self.topBox)
self.outerBox.addLayout(self.mainBox) self.outerBox.addLayout(self.mainBox)
self.outerBox.addWidget(self.buttonBox) self.outerBox.addWidget(self.btnBox)
self.outerBox.setSpacing(12) self.outerBox.setSpacing(12)
self.setLayout(self.outerBox) self.setLayout(self.outerBox)
@@ -205,7 +212,7 @@ class GuiBuildSettings(NToolDialog):
@pyqtSlot("QAbstractButton*") @pyqtSlot("QAbstractButton*")
def _dialogButtonClicked(self, button: QAbstractButton) -> None: def _dialogButtonClicked(self, button: QAbstractButton) -> None:
"""Handle button clicks from the dialog button box.""" """Handle button clicks from the dialog button box."""
role = self.buttonBox.buttonRole(button) role = self.btnBox.buttonRole(button)
if role == QtRoleApply: if role == QtRoleApply:
self._applyChanges() self._applyChanges()
self._emitBuildData() self._emitBuildData()
+8 -4
View File
@@ -38,12 +38,13 @@ from PyQt6.QtWidgets import (
from novelwriter import SHARED from novelwriter import SHARED
from novelwriter.common import formatTime, numberToRoman from novelwriter.common import formatTime, numberToRoman
from novelwriter.constants import nwUnicode from novelwriter.constants import nwUnicode
from novelwriter.enum import nwStandardButton
from novelwriter.extensions.configlayout import NColorLabel, NFixedPage, NScrollablePage from novelwriter.extensions.configlayout import NColorLabel, NFixedPage, NScrollablePage
from novelwriter.extensions.modified import NNonBlockingDialog from novelwriter.extensions.modified import NNonBlockingDialog
from novelwriter.extensions.novelselector import NovelSelector from novelwriter.extensions.novelselector import NovelSelector
from novelwriter.extensions.pagedsidebar import NPagedSideBar from novelwriter.extensions.pagedsidebar import NPagedSideBar
from novelwriter.extensions.switch import NSwitch from novelwriter.extensions.switch import NSwitch
from novelwriter.types import QtAlignRight, QtDecoration, QtDialogClose from novelwriter.types import QtAlignRight, QtDecoration, QtRoleReject
if TYPE_CHECKING: if TYPE_CHECKING:
from PyQt6.QtGui import QCloseEvent from PyQt6.QtGui import QCloseEvent
@@ -102,8 +103,11 @@ class GuiNovelDetails(NNonBlockingDialog):
self.mainStack.addWidget(self.contentsPage) self.mainStack.addWidget(self.contentsPage)
# Buttons # Buttons
self.buttonBox = QDialogButtonBox(QtDialogClose, self) self.btnClose = SHARED.theme.getStandardButton(nwStandardButton.CLOSE, self)
self.buttonBox.rejected.connect(self.reject) self.btnClose.clicked.connect(self.reject)
self.btnBox = QDialogButtonBox(self)
self.btnBox.addButton(self.btnClose, QtRoleReject)
# Assemble # Assemble
self.topBox = QHBoxLayout() self.topBox = QHBoxLayout()
@@ -119,7 +123,7 @@ class GuiNovelDetails(NNonBlockingDialog):
self.outerBox = QVBoxLayout() self.outerBox = QVBoxLayout()
self.outerBox.addLayout(self.topBox) self.outerBox.addLayout(self.topBox)
self.outerBox.addLayout(self.mainBox) self.outerBox.addLayout(self.mainBox)
self.outerBox.addWidget(self.buttonBox) self.outerBox.addWidget(self.btnBox)
self.outerBox.setSpacing(8) self.outerBox.setSpacing(8)
self.setLayout(self.outerBox) self.setLayout(self.outerBox)
+9 -23
View File
@@ -35,15 +35,15 @@ from PyQt6.QtCore import (
from PyQt6.QtGui import QAction, QCloseEvent, QFont, QPainter, QPaintEvent, QPen, QShortcut from PyQt6.QtGui import QAction, QCloseEvent, QFont, QPainter, QPaintEvent, QPen, QShortcut
from PyQt6.QtWidgets import ( from PyQt6.QtWidgets import (
QApplication, QFileDialog, QFormLayout, QHBoxLayout, QLabel, QLineEdit, QApplication, QFileDialog, QFormLayout, QHBoxLayout, QLabel, QLineEdit,
QListView, QMenu, QPushButton, QScrollArea, QStackedWidget, QListView, QMenu, QScrollArea, QStackedWidget, QStyledItemDelegate,
QStyledItemDelegate, QStyleOptionViewItem, QVBoxLayout, QWidget QStyleOptionViewItem, QVBoxLayout, QWidget
) )
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
from novelwriter.common import formatInt, makeFileNameSafe, qtAddAction, qtLambda from novelwriter.common import formatInt, makeFileNameSafe, qtAddAction, qtLambda
from novelwriter.constants import nwFiles from novelwriter.constants import nwFiles
from novelwriter.core.coretools import ProjectBuilder from novelwriter.core.coretools import ProjectBuilder
from novelwriter.enum import nwItemClass from novelwriter.enum import nwItemClass, nwStandardButton
from novelwriter.extensions.configlayout import NWrappedWidgetBox from novelwriter.extensions.configlayout import NWrappedWidgetBox
from novelwriter.extensions.modified import NDialog, NIconToolButton, NSpinBox from novelwriter.extensions.modified import NDialog, NIconToolButton, NSpinBox
from novelwriter.extensions.switch import NSwitch from novelwriter.extensions.switch import NSwitch
@@ -75,8 +75,6 @@ class GuiWelcome(NDialog):
self.setMinimumHeight(450) self.setMinimumHeight(450)
self.resize(*CONFIG.welcomeWinSize) self.resize(*CONFIG.welcomeWinSize)
btnIconSize = SHARED.theme.buttonIconSize
# Elements # Elements
# ======== # ========
@@ -104,34 +102,22 @@ class GuiWelcome(NDialog):
# Buttons # Buttons
# ======= # =======
self.btnList = QPushButton(self.tr("List"), self) self.btnList = SHARED.theme.getStandardButton(nwStandardButton.LIST, self)
self.btnList.setIcon(SHARED.theme.getIcon("list", "blue"))
self.btnList.setIconSize(btnIconSize)
self.btnList.clicked.connect(self._showOpenProjectPage) self.btnList.clicked.connect(self._showOpenProjectPage)
self.btnNew = QPushButton(self.tr("New"), self) self.btnNew = SHARED.theme.getStandardButton(nwStandardButton.NEW, self)
self.btnNew.setIcon(SHARED.theme.getIcon("add", "green"))
self.btnNew.setIconSize(btnIconSize)
self.btnNew.clicked.connect(self._showNewProjectPage) self.btnNew.clicked.connect(self._showNewProjectPage)
self.btnBrowse = QPushButton(self.tr("Browse"), self) self.btnBrowse = SHARED.theme.getStandardButton(nwStandardButton.BROWSE, self)
self.btnBrowse.setIcon(SHARED.theme.getIcon("browse", "yellow"))
self.btnBrowse.setIconSize(btnIconSize)
self.btnBrowse.clicked.connect(self._browseForProject) self.btnBrowse.clicked.connect(self._browseForProject)
self.btnCancel = QPushButton(self.tr("Cancel"), self) self.btnCancel = SHARED.theme.getStandardButton(nwStandardButton.CANCEL, self)
self.btnCancel.setIcon(SHARED.theme.getIcon("cancel", "red"))
self.btnCancel.setIconSize(btnIconSize)
self.btnCancel.clicked.connect(qtLambda(self.close)) self.btnCancel.clicked.connect(qtLambda(self.close))
self.btnCreate = QPushButton(self.tr("Create"), self) self.btnCreate = SHARED.theme.getStandardButton(nwStandardButton.CREATE, self)
self.btnCreate.setIcon(SHARED.theme.getIcon("star", "yellow"))
self.btnCreate.setIconSize(btnIconSize)
self.btnCreate.clicked.connect(self.tabNew.createNewProject) self.btnCreate.clicked.connect(self.tabNew.createNewProject)
self.btnOpen = QPushButton(self.tr("Open"), self) self.btnOpen = SHARED.theme.getStandardButton(nwStandardButton.OPEN, self)
self.btnOpen.setIcon(SHARED.theme.getIcon("open", "blue"))
self.btnOpen.setIconSize(btnIconSize)
self.btnOpen.clicked.connect(self._openSelectedItem) self.btnOpen.clicked.connect(self._openSelectedItem)
self.btnBox = QHBoxLayout() self.btnBox = QHBoxLayout()
+15 -13
View File
@@ -39,12 +39,13 @@ from PyQt6.QtWidgets import (
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
from novelwriter.common import checkInt, checkIntTuple, formatTime, minmax, qtLambda from novelwriter.common import checkInt, checkIntTuple, formatTime, minmax, qtLambda
from novelwriter.constants import nwConst from novelwriter.constants import nwConst
from novelwriter.enum import nwStandardButton
from novelwriter.error import formatException from novelwriter.error import formatException
from novelwriter.extensions.modified import NToolDialog from novelwriter.extensions.modified import NPushButton, NToolDialog
from novelwriter.extensions.switch import NSwitch from novelwriter.extensions.switch import NSwitch
from novelwriter.types import ( from novelwriter.types import (
QtAlignLeftMiddle, QtAlignRight, QtAlignRightMiddle, QtDecoration, QtAlignLeftMiddle, QtAlignRight, QtAlignRightMiddle, QtDecoration,
QtDialogClose, QtRoleAction QtRoleAction, QtRoleReject
) )
if TYPE_CHECKING: if TYPE_CHECKING:
@@ -182,6 +183,7 @@ class GuiWritingStats(NToolDialog):
# Filter Options # Filter Options
iPx = SHARED.theme.baseIconHeight iPx = SHARED.theme.baseIconHeight
bSz = SHARED.theme.buttonIconSize
self.filterForm = QGridLayout(self) self.filterForm = QGridLayout(self)
self.filterForm.setRowStretch(6, 1) self.filterForm.setRowStretch(6, 1)
@@ -276,6 +278,10 @@ class GuiWritingStats(NToolDialog):
self.optsBox.addWidget(self.histMax, 0) self.optsBox.addWidget(self.histMax, 0)
# Buttons # Buttons
self.btnClose = SHARED.theme.getStandardButton(nwStandardButton.CLOSE, self)
self.btnClose.clicked.connect(self._doClose)
self.btnClose.setAutoDefault(False)
self.saveJSON = QAction(self.tr("JSON Data File (.json)"), self) self.saveJSON = QAction(self.tr("JSON Data File (.json)"), self)
self.saveJSON.triggered.connect(qtLambda(self._saveData, self.FMT_JSON)) self.saveJSON.triggered.connect(qtLambda(self._saveData, self.FMT_JSON))
@@ -286,17 +292,13 @@ class GuiWritingStats(NToolDialog):
self.saveMenu.addAction(self.saveJSON) self.saveMenu.addAction(self.saveJSON)
self.saveMenu.addAction(self.saveCSV) self.saveMenu.addAction(self.saveCSV)
self.buttonBox = QDialogButtonBox(self) self.btnSave = NPushButton(self, self.tr("Save As"), bSz, "btn_save", "blue")
self.buttonBox.rejected.connect(self._doClose) self.btnSave.setAutoDefault(False)
self.btnSave.setMenu(self.saveMenu)
self.btnClose = self.buttonBox.addButton(QtDialogClose) self.btnBox = QDialogButtonBox(self)
if self.btnClose: self.btnBox.addButton(self.btnSave, QtRoleAction)
self.btnClose.setAutoDefault(False) self.btnBox.addButton(self.btnClose, QtRoleReject)
self.btnSave = self.buttonBox.addButton(self.tr("Save As"), QtRoleAction)
if self.btnSave:
self.btnSave.setAutoDefault(False)
self.btnSave.setMenu(self.saveMenu)
# Assemble # Assemble
self.outerBox = QGridLayout() self.outerBox = QGridLayout()
@@ -304,7 +306,7 @@ class GuiWritingStats(NToolDialog):
self.outerBox.addLayout(self.optsBox, 1, 0, 1, 2) self.outerBox.addLayout(self.optsBox, 1, 0, 1, 2)
self.outerBox.addWidget(self.infoBox, 2, 0) self.outerBox.addWidget(self.infoBox, 2, 0)
self.outerBox.addWidget(self.filterBox, 2, 1) self.outerBox.addWidget(self.filterBox, 2, 1)
self.outerBox.addWidget(self.buttonBox, 3, 0, 1, 2) self.outerBox.addWidget(self.btnBox, 3, 0, 1, 2)
self.outerBox.setRowStretch(0, 1) self.outerBox.setRowStretch(0, 1)
self.setLayout(self.outerBox) self.setLayout(self.outerBox)
+1 -7
View File
@@ -93,17 +93,11 @@ QtMouseMiddle = Qt.MouseButton.MiddleButton
QtAccepted = QDialog.DialogCode.Accepted QtAccepted = QDialog.DialogCode.Accepted
QtRejected = QDialog.DialogCode.Rejected QtRejected = QDialog.DialogCode.Rejected
QtDialogApply = QDialogButtonBox.StandardButton.Apply
QtDialogCancel = QDialogButtonBox.StandardButton.Cancel
QtDialogClose = QDialogButtonBox.StandardButton.Close
QtDialogOk = QDialogButtonBox.StandardButton.Ok
QtDialogReset = QDialogButtonBox.StandardButton.Reset
QtDialogSave = QDialogButtonBox.StandardButton.Save
QtRoleAccept = QDialogButtonBox.ButtonRole.AcceptRole QtRoleAccept = QDialogButtonBox.ButtonRole.AcceptRole
QtRoleAction = QDialogButtonBox.ButtonRole.ActionRole QtRoleAction = QDialogButtonBox.ButtonRole.ActionRole
QtRoleApply = QDialogButtonBox.ButtonRole.ApplyRole QtRoleApply = QDialogButtonBox.ButtonRole.ApplyRole
QtRoleReject = QDialogButtonBox.ButtonRole.RejectRole QtRoleReject = QDialogButtonBox.ButtonRole.RejectRole
QtRoleReset = QDialogButtonBox.ButtonRole.ResetRole
# Cursor Types # Cursor Types
+4 -1
View File
@@ -25,7 +25,10 @@ if __name__ == "__main__":
env["QT_SCALE_FACTOR"] = "1.0" env["QT_SCALE_FACTOR"] = "1.0"
if args.r or args.t or args.u: if args.r or args.t or args.u:
cmd = ["coverage", "run", "-m"] cmd = ["coverage", "run"]
if args.lf or args.sw:
cmd += ["--append"]
cmd += ["-m"]
else: else:
cmd = [sys.executable, "-m"] cmd = [sys.executable, "-m"]
+6 -2
View File
@@ -157,9 +157,11 @@ def projPath(fncPath):
def mockGUI(qtbot, monkeypatch): def mockGUI(qtbot, monkeypatch):
"""Create a mock instance of novelWriter's main GUI class.""" """Create a mock instance of novelWriter's main GUI class."""
from novelwriter.gui.theme import GuiTheme from novelwriter.gui.theme import GuiTheme
from novelwriter.shared import _GuiAlert
monkeypatch.setattr(QMessageBox, "exec", lambda *a: None) monkeypatch.setattr(QMessageBox, "exec", lambda *a: None)
monkeypatch.setattr(QMessageBox, "result", lambda *a: QMessageBox.StandardButton.Yes) monkeypatch.setattr(_GuiAlert, "exec", lambda *a: None)
monkeypatch.setattr(_GuiAlert, "finalState", True)
gui = MockGuiMain() gui = MockGuiMain()
theme = GuiTheme() theme = GuiTheme()
monkeypatch.setattr(SHARED, "_gui", gui) monkeypatch.setattr(SHARED, "_gui", gui)
@@ -182,9 +184,11 @@ def nwGUI(qtbot, monkeypatch, functionFixture):
"""Create an instance of the novelWriter GUI.""" """Create an instance of the novelWriter GUI."""
from novelwriter.gui.theme import GuiTheme from novelwriter.gui.theme import GuiTheme
from novelwriter.guimain import GuiMain from novelwriter.guimain import GuiMain
from novelwriter.shared import _GuiAlert
monkeypatch.setattr(QMessageBox, "exec", lambda *a: None) monkeypatch.setattr(QMessageBox, "exec", lambda *a: None)
monkeypatch.setattr(QMessageBox, "result", lambda *a: QMessageBox.StandardButton.Yes) monkeypatch.setattr(_GuiAlert, "exec", lambda *a: None)
monkeypatch.setattr(_GuiAlert, "finalState", True)
CONFIG.loadConfig() CONFIG.loadConfig()
SHARED.initTheme(GuiTheme()) SHARED.initTheme(GuiTheme())
+18 -2
View File
@@ -60,6 +60,24 @@
"theme_dark", "theme_dark",
"theme_auto", "theme_auto",
"btn_ok",
"btn_cancel",
"btn_yes",
"btn_no",
"btn_open",
"btn_close",
"btn_save",
"btn_browse",
"btn_list",
"btn_new",
"btn_create",
"btn_reset",
"btn_insert",
"btn_apply",
"btn_build",
"btn_print",
"btn_preview",
"add", "add",
"bookmarks", "bookmarks",
"browse", "browse",
@@ -95,7 +113,6 @@
"more_arrow", "more_arrow",
"more_vertical", "more_vertical",
"noncheckable", "noncheckable",
"open",
"panel", "panel",
"pin", "pin",
"project_copy", "project_copy",
@@ -104,7 +121,6 @@
"remove", "remove",
"revert", "revert",
"settings", "settings",
"star",
"stats", "stats",
"text", "text",
"timer_off", "timer_off",
+6
View File
@@ -22,9 +22,12 @@ from __future__ import annotations
from unittest.mock import MagicMock from unittest.mock import MagicMock
from PyQt6.QtCore import QSize
from PyQt6.QtGui import QFont, QIcon, QPixmap from PyQt6.QtGui import QFont, QIcon, QPixmap
from PyQt6.QtWidgets import QWidget from PyQt6.QtWidgets import QWidget
from novelwriter.extensions.modified import NPushButton
class MockGuiMain(QWidget): class MockGuiMain(QWidget):
@@ -72,6 +75,9 @@ class MockTheme:
def getHeaderDecoration(self, *a) -> QPixmap: def getHeaderDecoration(self, *a) -> QPixmap:
return QPixmap() return QPixmap()
def getStandardButton(self, *a) -> NPushButton:
return NPushButton(None, "", QSize(1, 1)) # type: ignore
def getIcon(self, *a) -> QIcon: def getIcon(self, *a) -> QIcon:
return QIcon() return QIcon()
+71 -5
View File
@@ -20,16 +20,18 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
""" # noqa """ # noqa
from __future__ import annotations from __future__ import annotations
import sys
from unittest.mock import MagicMock from unittest.mock import MagicMock
import pytest import pytest
from PyQt6.QtCore import QUrl from PyQt6.QtCore import QUrl
from PyQt6.QtGui import QDesktopServices from PyQt6.QtGui import QDesktopServices
from PyQt6.QtWidgets import QFileDialog, QMessageBox, QWidget from PyQt6.QtWidgets import QFileDialog, QWidget
from novelwriter.core.project import NWProject from novelwriter.core.project import NWProject
from novelwriter.shared import SharedData from novelwriter.shared import SharedData, _GuiAlert
from tests.mocked import MockGuiMain, MockTheme from tests.mocked import MockGuiMain, MockTheme
from tests.tools import buildTestProject from tests.tools import buildTestProject
@@ -143,10 +145,10 @@ def testBaseSharedData_Projects(monkeypatch, caplog, fncPath):
@pytest.mark.base @pytest.mark.base
def testBaseSharedData_Alerts(qtbot, monkeypatch, caplog): def testBaseSharedData_Alerts(qtbot, monkeypatch, caplog, mockGUI):
"""Test SharedData class alert helper functions.""" """Test SharedData class alert helper functions."""
monkeypatch.setattr(QMessageBox, "exec", lambda *a: None) monkeypatch.setattr(_GuiAlert, "exec", lambda *a: None)
monkeypatch.setattr(QMessageBox, "result", lambda *a: QMessageBox.StandardButton.Yes) monkeypatch.setattr(_GuiAlert, "finalState", True)
shared = SharedData() shared = SharedData()
@@ -188,3 +190,67 @@ def testBaseSharedData_Alerts(qtbot, monkeypatch, caplog):
# Question box # Question box
assert shared.question("Why?") is True assert shared.question("Why?") is True
assert shared.lastAlert == "Why?" assert shared.lastAlert == "Why?"
@pytest.mark.base
def testBaseSharedData_GuiAlert():
"""Test the _GuiAlert class."""
alert = _GuiAlert(None, MockTheme()) # type: ignore
# Default states
assert alert.logMessage == ""
assert alert.finalState is False
# Populate message
text = "one"
info = "two"
details = "three"
alert.setMessage(text, info, details)
assert alert.logMessage == f"{text} {info} {details}"
assert alert.text() == text
assert alert.informativeText() == info
assert alert.detailedText() == details
# Populate exception
exc = Exception("oops")
alert.setException(exc)
assert alert.logMessage == f"{text} {info} {details}"
assert alert.informativeText() == f"{info}<br><b>Exception</b>: {exc!s}"
# Alert: Info
alert.setAlertType(_GuiAlert.INFO, False)
assert hasattr(alert, "_btnOk")
if sys.platform != "darwin": # Not set on MacOS
assert alert.windowTitle() == "Information"
alert._btnOk.click()
assert alert.finalState is True
alert._state = False
# Alert: Warning
alert.setAlertType(_GuiAlert.WARN, False)
assert hasattr(alert, "_btnOk")
if sys.platform != "darwin": # Not set on MacOS
assert alert.windowTitle() == "Warning"
alert._btnOk.click()
assert alert.finalState is True
alert._state = False
# Alert: Error
alert.setAlertType(_GuiAlert.ERROR, False)
assert hasattr(alert, "_btnOk")
if sys.platform != "darwin": # Not set on MacOS
assert alert.windowTitle() == "Error"
alert._btnOk.click()
assert alert.finalState is True
alert._state = False
# Alert: Question
alert.setAlertType(_GuiAlert.ASK, True)
assert hasattr(alert, "_btnYes")
assert hasattr(alert, "_btnNo")
if sys.platform != "darwin": # Not set on MacOS
assert alert.windowTitle() == "Question"
alert._btnYes.click()
assert alert.finalState is True
alert._btnNo.click()
assert alert.finalState is False
+3 -4
View File
@@ -25,13 +25,12 @@ from zipfile import ZipFile
import pytest import pytest
from PyQt6.QtWidgets import QMessageBox
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
from novelwriter.constants import nwFiles from novelwriter.constants import nwFiles
from novelwriter.core.project import NWProject, NWProjectState from novelwriter.core.project import NWProject, NWProjectState
from novelwriter.core.projectxml import ProjectXMLReader, ProjectXMLWriter, XMLReadState from novelwriter.core.projectxml import ProjectXMLReader, ProjectXMLWriter, XMLReadState
from novelwriter.enum import nwItemClass from novelwriter.enum import nwItemClass
from novelwriter.shared import _GuiAlert
from tests.mocked import causeOSError from tests.mocked import causeOSError
from tests.tools import XML_IGNORE, C, buildTestProject, cmpFiles from tests.tools import XML_IGNORE, C, buildTestProject, cmpFiles
@@ -274,14 +273,14 @@ def testCoreProject_Open(monkeypatch, caplog, mockGUI, fncPath, mockRnd):
# Won't convert legacy file # Won't convert legacy file
with monkeypatch.context() as mp: with monkeypatch.context() as mp:
mp.setattr(ProjectXMLReader, "state", property(lambda *a: XMLReadState.WAS_LEGACY)) mp.setattr(ProjectXMLReader, "state", property(lambda *a: XMLReadState.WAS_LEGACY))
mp.setattr(QMessageBox, "result", lambda *a: QMessageBox.StandardButton.No) mp.setattr(_GuiAlert, "finalState", False)
assert project.openProject(fncPath, clearLock=True) is False assert project.openProject(fncPath, clearLock=True) is False
assert "The file format of your project is about to be" in SHARED.lastAlert assert "The file format of your project is about to be" in SHARED.lastAlert
# Won't open project from newer version # Won't open project from newer version
with monkeypatch.context() as mp: with monkeypatch.context() as mp:
mp.setattr(ProjectXMLReader, "hexVersion", property(lambda *a: 0x99999999)) mp.setattr(ProjectXMLReader, "hexVersion", property(lambda *a: 0x99999999))
mp.setattr(QMessageBox, "result", lambda *a: QMessageBox.StandardButton.No) mp.setattr(_GuiAlert, "finalState", False)
assert project.openProject(fncPath, clearLock=True) is False assert project.openProject(fncPath, clearLock=True) is False
assert "This project was saved by a newer version" in SHARED.lastAlert assert "This project was saved by a newer version" in SHARED.lastAlert
+4 -10
View File
@@ -32,7 +32,7 @@ from novelwriter.constants import nwUnicode
from novelwriter.dialogs.preferences import GuiPreferences from novelwriter.dialogs.preferences import GuiPreferences
from novelwriter.dialogs.quotes import GuiQuoteSelect from novelwriter.dialogs.quotes import GuiQuoteSelect
from novelwriter.gui.theme import ThemeEntry from novelwriter.gui.theme import ThemeEntry
from novelwriter.types import QtDialogCancel, QtDialogSave, QtModNone from novelwriter.types import QtModNone
KEY_DELAY = 1 KEY_DELAY = 1
@@ -118,16 +118,12 @@ def testDlgPreferences_Actions(qtbot, monkeypatch, nwGUI):
# Check Save Button # Check Save Button
prefs.show() prefs.show()
with qtbot.waitSignal(prefs.newPreferencesReady) as signal: with qtbot.waitSignal(prefs.newPreferencesReady) as signal:
button = prefs.buttonBox.button(QtDialogSave) prefs.btnSave.click()
assert button is not None
button.click()
assert len(signal.args) == 4 assert len(signal.args) == 4
# Check Close Button # Check Close Button
prefs.show() prefs.show()
button = prefs.buttonBox.button(QtDialogCancel) prefs.btnCancel.click()
assert button is not None
button.click()
assert prefs.isHidden() is True assert prefs.isHidden() is True
# Close Using Escape Key # Close Using Escape Key
@@ -342,9 +338,7 @@ def testDlgPreferences_Settings(qtbot, monkeypatch, nwGUI, fncPath, tstPaths):
with monkeypatch.context() as mp: with monkeypatch.context() as mp:
mp.setattr(QFontDatabase, "families", lambda *a: ["TestFont"]) mp.setattr(QFontDatabase, "families", lambda *a: ["TestFont"])
with qtbot.waitSignal(prefs.newPreferencesReady) as signal: with qtbot.waitSignal(prefs.newPreferencesReady) as signal:
button = prefs.buttonBox.button(QtDialogSave) prefs.btnSave.click()
assert button is not None
button.click()
assert signal.args == [True, True, True, True] assert signal.args == [True, True, True, True]
# Check Settings # Check Settings
+5 -4
View File
@@ -30,7 +30,7 @@ import pytest
from PyQt6.QtCore import Qt from PyQt6.QtCore import Qt
from PyQt6.QtGui import QPalette from PyQt6.QtGui import QPalette
from PyQt6.QtWidgets import QInputDialog, QMessageBox from PyQt6.QtWidgets import QInputDialog
from novelwriter import CONFIG, SHARED, __hexversion__ from novelwriter import CONFIG, SHARED, __hexversion__
from novelwriter.common import jsonEncode from novelwriter.common import jsonEncode
@@ -42,6 +42,7 @@ from novelwriter.gui.doceditor import GuiDocEditor
from novelwriter.gui.noveltree import GuiNovelView from novelwriter.gui.noveltree import GuiNovelView
from novelwriter.gui.outline import GuiOutlineView from novelwriter.gui.outline import GuiOutlineView
from novelwriter.gui.projtree import GuiProjectTree from novelwriter.gui.projtree import GuiProjectTree
from novelwriter.shared import _GuiAlert
from novelwriter.tools.welcome import GuiWelcome from novelwriter.tools.welcome import GuiWelcome
from novelwriter.types import QtModCtrl, QtModShift from novelwriter.types import QtModCtrl, QtModShift
@@ -104,7 +105,7 @@ def testGuiMain_Launch(qtbot, monkeypatch, nwGUI, projPath):
# Check that closes can be blocked # Check that closes can be blocked
with monkeypatch.context() as mp: with monkeypatch.context() as mp:
mp.setattr(QMessageBox, "result", lambda *a: QMessageBox.StandardButton.No) mp.setattr(_GuiAlert, "finalState", False)
assert nwGUI.openProject(projPath) is True assert nwGUI.openProject(projPath) is True
assert nwGUI.closeMain() is False assert nwGUI.closeMain() is False
nwGUI.closeProject() nwGUI.closeProject()
@@ -841,7 +842,7 @@ def testGuiMain_OpenClose(qtbot, monkeypatch, nwGUI, projPath, fncPath, mockRnd)
# Block closing # Block closing
assert SHARED.hasProject is True assert SHARED.hasProject is True
with monkeypatch.context() as mp: with monkeypatch.context() as mp:
mp.setattr(QMessageBox, "result", lambda *a: QMessageBox.StandardButton.No) mp.setattr(_GuiAlert, "finalState", False)
assert nwGUI.openProject(projPath) is False assert nwGUI.openProject(projPath) is False
assert SHARED.hasProject is True assert SHARED.hasProject is True
@@ -854,7 +855,7 @@ def testGuiMain_OpenClose(qtbot, monkeypatch, nwGUI, projPath, fncPath, mockRnd)
shutil.copyfile(lockBack, lockPath) shutil.copyfile(lockBack, lockPath)
with monkeypatch.context() as mp: with monkeypatch.context() as mp:
mp.setattr(QMessageBox, "result", lambda *a: QMessageBox.StandardButton.No) mp.setattr(_GuiAlert, "finalState", False)
assert nwGUI.openProject(projPath) is False assert nwGUI.openProject(projPath) is False
assert nwGUI.openProject(projPath) is True assert nwGUI.openProject(projPath) is True
+1 -3
View File
@@ -24,7 +24,7 @@ import sys
import pytest import pytest
from PyQt6.QtWidgets import QApplication, QDialog, QMessageBox from PyQt6.QtWidgets import QApplication, QDialog
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
from novelwriter.dialogs.about import GuiAbout from novelwriter.dialogs.about import GuiAbout
@@ -49,8 +49,6 @@ LANG_DATA = CONFIG.listLanguages(CONFIG.LANG_NW)
def testGuiI18n_Localisation(qtbot, monkeypatch, language, nwGUI, projPath): def testGuiI18n_Localisation(qtbot, monkeypatch, language, nwGUI, projPath):
"""Test loading the gui with a specific language.""" """Test loading the gui with a specific language."""
monkeypatch.setattr(QDialog, "exec", lambda *a: None) monkeypatch.setattr(QDialog, "exec", lambda *a: None)
monkeypatch.setattr(QMessageBox, "exec", lambda *a: None)
monkeypatch.setattr(QMessageBox, "result", lambda *a: QMessageBox.StandardButton.Yes)
# Set the test language # Set the test language
CONFIG.guiLocale = language CONFIG.guiLocale = language
+3 -2
View File
@@ -25,12 +25,13 @@ from unittest.mock import MagicMock
import pytest import pytest
from PyQt6.QtGui import QAction, QDesktopServices, QTextBlock from PyQt6.QtGui import QAction, QDesktopServices, QTextBlock
from PyQt6.QtWidgets import QFileDialog, QMessageBox from PyQt6.QtWidgets import QFileDialog
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
from novelwriter.constants import nwKeyWords, nwShortcode, nwStats, nwUnicode from novelwriter.constants import nwKeyWords, nwShortcode, nwStats, nwUnicode
from novelwriter.enum import nwDocAction, nwDocInsert from novelwriter.enum import nwDocAction, nwDocInsert
from novelwriter.gui.doceditor import GuiDocEditor from novelwriter.gui.doceditor import GuiDocEditor
from novelwriter.shared import _GuiAlert
from novelwriter.types import QtKeepAnchor, QtMoveRight, QtSelectWord from novelwriter.types import QtKeepAnchor, QtMoveRight, QtSelectWord
from tests.tools import C, buildTestProject, writeFile from tests.tools import C, buildTestProject, writeFile
@@ -575,7 +576,7 @@ def testGuiMainMenu_Insert(qtbot, monkeypatch, nwGUI, fncPath, projPath, mockRnd
# The document isn't empty, so the message box should pop # The document isn't empty, so the message box should pop
with monkeypatch.context() as mp: with monkeypatch.context() as mp:
mp.setattr(QMessageBox, "result", lambda *a, **k: QMessageBox.StandardButton.No) mp.setattr(_GuiAlert, "finalState", False)
assert not nwGUI.importDocument() assert not nwGUI.importDocument()
assert docEditor.getText() == "Bar" assert docEditor.getText() == "Bar"
+7 -6
View File
@@ -26,7 +26,7 @@ import pytest
from PyQt6.QtCore import QEvent, QItemSelectionModel, QModelIndex, QPointF from PyQt6.QtCore import QEvent, QItemSelectionModel, QModelIndex, QPointF
from PyQt6.QtGui import QMouseEvent from PyQt6.QtGui import QMouseEvent
from PyQt6.QtWidgets import QMenu, QMessageBox from PyQt6.QtWidgets import QMenu
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
from novelwriter.dialogs.docmerge import GuiDocMerge from novelwriter.dialogs.docmerge import GuiDocMerge
@@ -34,6 +34,7 @@ from novelwriter.dialogs.docsplit import GuiDocSplit
from novelwriter.dialogs.editlabel import GuiEditLabel from novelwriter.dialogs.editlabel import GuiEditLabel
from novelwriter.enum import nwDocMode, nwItemClass, nwItemLayout, nwItemType from novelwriter.enum import nwDocMode, nwItemClass, nwItemLayout, nwItemType
from novelwriter.gui.projtree import _TreeContextMenu from novelwriter.gui.projtree import _TreeContextMenu
from novelwriter.shared import _GuiAlert
from novelwriter.types import ( from novelwriter.types import (
QtAccepted, QtModNone, QtMouseLeft, QtMouseMiddle, QtRejected, QtAccepted, QtModNone, QtMouseLeft, QtMouseMiddle, QtRejected,
QtScrollAlwaysOff, QtScrollAsNeeded QtScrollAlwaysOff, QtScrollAsNeeded
@@ -627,7 +628,7 @@ def testGuiProjTree_DeleteRequest(qtbot, caplog, monkeypatch, nwGUI, projPath, m
# User can cancel move to trash # User can cancel move to trash
with monkeypatch.context() as mp: with monkeypatch.context() as mp:
mp.setattr(QMessageBox, "result", lambda *a: QMessageBox.StandardButton.No) mp.setattr(_GuiAlert, "finalState", False)
projTree.processDeleteRequest(hScenes, askFirst=True) projTree.processDeleteRequest(hScenes, askFirst=True)
assert [n.item.itemName for n in tree.model.root.allChildren()] == [ assert [n.item.itemName for n in tree.model.root.allChildren()] == [
"Novel", "Title Page", "New Folder", "New Chapter", "New Scene", "Novel", "Title Page", "New Folder", "New Chapter", "New Scene",
@@ -645,7 +646,7 @@ def testGuiProjTree_DeleteRequest(qtbot, caplog, monkeypatch, nwGUI, projPath, m
# User can block permanent deletion # User can block permanent deletion
with monkeypatch.context() as mp: with monkeypatch.context() as mp:
mp.setattr(QMessageBox, "result", lambda *a: QMessageBox.StandardButton.No) mp.setattr(_GuiAlert, "finalState", False)
projTree.processDeleteRequest(hScenes[0:2], askFirst=True) projTree.processDeleteRequest(hScenes[0:2], askFirst=True)
assert [n.item.itemName for n in tree.model.root.allChildren()] == [ assert [n.item.itemName for n in tree.model.root.allChildren()] == [
"Novel", "Title Page", "New Folder", "New Chapter", "New Scene", "Novel", "Title Page", "New Folder", "New Chapter", "New Scene",
@@ -677,7 +678,7 @@ def testGuiProjTree_DeleteRequest(qtbot, caplog, monkeypatch, nwGUI, projPath, m
# Trash can be completely emptied, but user can block it # Trash can be completely emptied, but user can block it
with monkeypatch.context() as mp: with monkeypatch.context() as mp:
mp.setattr(QMessageBox, "result", lambda *a: QMessageBox.StandardButton.No) mp.setattr(_GuiAlert, "finalState", False)
projTree.emptyTrash() projTree.emptyTrash()
assert [n.item.itemName for n in tree.model.root.allChildren()] == [ assert [n.item.itemName for n in tree.model.root.allChildren()] == [
"Novel", "Title Page", "Chapter Folder", "Plot", "Characters", "Trash", "Novel", "Title Page", "Chapter Folder", "Plot", "Characters", "Trash",
@@ -995,7 +996,7 @@ def testGuiProjTree_Duplicate(qtbot, monkeypatch, nwGUI, projPath, mockRnd):
# Duplicate title page, but select no # Duplicate title page, but select no
with monkeypatch.context() as mp: with monkeypatch.context() as mp:
mp.setattr(QMessageBox, "result", lambda *a: QtRejected) mp.setattr(_GuiAlert, "finalState", False)
projTree.duplicateFromHandle(C.hTitlePage) projTree.duplicateFromHandle(C.hTitlePage)
assert [n.item.itemName for n in tree.model.root.allChildren()] == [ assert [n.item.itemName for n in tree.model.root.allChildren()] == [
"Novel", "Title Page", "New Folder", "New Chapter", "New Scene", "Novel", "Title Page", "New Folder", "New Chapter", "New Scene",
@@ -1302,7 +1303,7 @@ def testGuiProjTree_ContextMenu(qtbot, monkeypatch, nwGUI, projPath, mockRnd):
# Click no on the dialog # Click no on the dialog
with monkeypatch.context() as mp: with monkeypatch.context() as mp:
mp.setattr(QMessageBox, "result", lambda *a: QtRejected) mp.setattr(_GuiAlert, "finalState", False)
ctxMenu._convertFolderToFile(nwItemLayout.DOCUMENT) ctxMenu._convertFolderToFile(nwItemLayout.DOCUMENT)
assert nodeOne.item.isFolderType() assert nodeOne.item.isFolderType()
+5 -9
View File
@@ -26,15 +26,15 @@ import pytest
from PyQt6.QtCore import QUrl from PyQt6.QtCore import QUrl
from PyQt6.QtGui import QDesktopServices from PyQt6.QtGui import QDesktopServices
from PyQt6.QtWidgets import QFileDialog, QListWidgetItem, QMessageBox from PyQt6.QtWidgets import QFileDialog, QListWidgetItem
from pytestqt.qtbot import QtBot from pytestqt.qtbot import QtBot
from novelwriter.constants import nwLabels from novelwriter.constants import nwLabels
from novelwriter.core.buildsettings import BuildSettings from novelwriter.core.buildsettings import BuildSettings
from novelwriter.enum import nwBuildFmt from novelwriter.enum import nwBuildFmt
from novelwriter.guimain import GuiMain from novelwriter.guimain import GuiMain
from novelwriter.shared import _GuiAlert
from novelwriter.tools.manusbuild import GuiManuscriptBuild from novelwriter.tools.manusbuild import GuiManuscriptBuild
from novelwriter.types import QtDialogClose
from tests.tools import buildTestProject from tests.tools import buildTestProject
@@ -94,9 +94,7 @@ def testToolManuscriptBuild_Main(
assert (fncPath / "TestBuild").with_suffix(nwLabels.BUILD_EXT[fmt]).exists() assert (fncPath / "TestBuild").with_suffix(nwLabels.BUILD_EXT[fmt]).exists()
lastFmt = fmt lastFmt = fmt
button = manus.buttonBox.button(QtDialogClose) manus._dialogButtonClicked(manus.btnClose)
assert button is not None
manus._dialogButtonClicked(button)
manus.deleteLater() manus.deleteLater()
assert build.lastBuildName == "TestBuild" assert build.lastBuildName == "TestBuild"
@@ -134,7 +132,7 @@ def testToolManuscriptBuild_Main(
manus.buildPath.setText(str(fncPath)) manus.buildPath.setText(str(fncPath))
manus.buildName.setText("TestBuild") manus.buildName.setText("TestBuild")
with monkeypatch.context() as mp: with monkeypatch.context() as mp:
mp.setattr(QMessageBox, "result", lambda *a: QMessageBox.StandardButton.No) mp.setattr(_GuiAlert, "finalState", False)
assert manus._runBuild() is False assert manus._runBuild() is False
# Test that the open button works # Test that the open button works
@@ -150,7 +148,5 @@ def testToolManuscriptBuild_Main(
assert lastUrl.startswith("file://") assert lastUrl.startswith("file://")
# Finish # Finish
button = manus.buttonBox.button(QtDialogClose) manus._dialogButtonClicked(manus.btnClose)
assert button is not None
manus._dialogButtonClicked(button)
# qtbot.stop() # qtbot.stop()
+2 -7
View File
@@ -37,7 +37,6 @@ from novelwriter.core.buildsettings import BuildSettings
from novelwriter.tools.manusbuild import GuiManuscriptBuild from novelwriter.tools.manusbuild import GuiManuscriptBuild
from novelwriter.tools.manuscript import GuiManuscript from novelwriter.tools.manuscript import GuiManuscript
from novelwriter.tools.manussettings import GuiBuildSettings from novelwriter.tools.manussettings import GuiBuildSettings
from novelwriter.types import QtDialogApply, QtDialogSave
from tests.tools import C, buildTestProject from tests.tools import C, buildTestProject
@@ -115,9 +114,7 @@ def testToolManuscript_Builds(qtbot, nwGUI, projPath):
with qtbot.waitSignal(bSettings.newSettingsReady, timeout=5000): with qtbot.waitSignal(bSettings.newSettingsReady, timeout=5000):
bSettings.newSettingsReady.connect(_testNewSettingsReady) bSettings.newSettingsReady.connect(_testNewSettingsReady)
button = bSettings.buttonBox.button(QtDialogSave) bSettings.btnSave.click()
assert button is not None
button.click()
assert isinstance(build, BuildSettings) assert isinstance(build, BuildSettings)
assert build.name == "Test Build" assert build.name == "Test Build"
@@ -136,9 +133,7 @@ def testToolManuscript_Builds(qtbot, nwGUI, projPath):
with qtbot.waitSignal(bSettings.newSettingsReady, timeout=5000): with qtbot.waitSignal(bSettings.newSettingsReady, timeout=5000):
bSettings.newSettingsReady.connect(_testNewSettingsReady) bSettings.newSettingsReady.connect(_testNewSettingsReady)
button = bSettings.buttonBox.button(QtDialogApply) bSettings.btnApply.click() # Should leave the dialog open
assert button is not None
button.click() # Should leave the dialog open
assert isinstance(build, BuildSettings) assert isinstance(build, BuildSettings)
assert build.name == "Test Build" assert build.name == "Test Build"
+10 -31
View File
@@ -33,7 +33,6 @@ from novelwriter.core.buildsettings import BuildSettings, FilterMode
from novelwriter.tools.manussettings import ( from novelwriter.tools.manussettings import (
GuiBuildSettings, _FilterTab, _FormattingTab, _HeadingsTab GuiBuildSettings, _FilterTab, _FormattingTab, _HeadingsTab
) )
from novelwriter.types import QtDialogApply, QtDialogClose, QtDialogSave
from tests.tools import C, buildTestProject from tests.tools import C, buildTestProject
@@ -78,9 +77,7 @@ def testToolBuildSettings_Init(qtbot, nwGUI, projPath, mockRnd):
# Capture Apply button # Capture Apply button
with qtbot.waitSignal(bSettings.newSettingsReady, timeout=5000): with qtbot.waitSignal(bSettings.newSettingsReady, timeout=5000):
bSettings.newSettingsReady.connect(_testNewSettingsReady) bSettings.newSettingsReady.connect(_testNewSettingsReady)
button = bSettings.buttonBox.button(QtDialogApply) bSettings._dialogButtonClicked(bSettings.btnApply)
assert button is not None
bSettings._dialogButtonClicked(button)
assert triggered assert triggered
@@ -89,9 +86,7 @@ def testToolBuildSettings_Init(qtbot, nwGUI, projPath, mockRnd):
with qtbot.waitSignal(bSettings.newSettingsReady, timeout=5000): with qtbot.waitSignal(bSettings.newSettingsReady, timeout=5000):
bSettings.newSettingsReady.connect(_testNewSettingsReady) bSettings.newSettingsReady.connect(_testNewSettingsReady)
button = bSettings.buttonBox.button(QtDialogSave) bSettings._dialogButtonClicked(bSettings.btnSave)
assert button is not None
bSettings._dialogButtonClicked(button)
assert triggered assert triggered
@@ -109,9 +104,7 @@ def testToolBuildSettings_Init(qtbot, nwGUI, projPath, mockRnd):
assert triggered assert triggered
# Finish # Finish
button = bSettings.buttonBox.button(QtDialogClose) bSettings._dialogButtonClicked(bSettings.btnClose)
assert button is not None
bSettings._dialogButtonClicked(button)
# qtbot.stop() # qtbot.stop()
@@ -326,9 +319,7 @@ def testToolBuildSettings_Filter(qtbot, nwGUI, projPath, mockRnd):
] ]
# Finish # Finish
button = bSettings.buttonBox.button(QtDialogClose) bSettings._dialogButtonClicked(bSettings.btnClose)
assert button is not None
bSettings._dialogButtonClicked(button)
# qtbot.stop() # qtbot.stop()
@@ -505,9 +496,7 @@ def testToolBuildSettings_Headings(qtbot, nwGUI):
assert sBuild.getBool("headings.hideSection") is True assert sBuild.getBool("headings.hideSection") is True
# Finish # Finish
button = bSettings.buttonBox.button(QtDialogClose) bSettings._dialogButtonClicked(bSettings.btnClose)
assert button is not None
bSettings._dialogButtonClicked(button)
# qtbot.stop() # qtbot.stop()
@@ -579,9 +568,7 @@ def testToolBuildSettings_FormatTextContent(qtbot, nwGUI):
assert sBuild.getBool("text.addNoteHeadings") is True assert sBuild.getBool("text.addNoteHeadings") is True
# Finish # Finish
button = bSettings.buttonBox.button(QtDialogClose) bSettings._dialogButtonClicked(bSettings.btnClose)
assert button is not None
bSettings._dialogButtonClicked(button)
# qtbot.stop() # qtbot.stop()
@@ -657,9 +644,7 @@ def testToolBuildSettings_FormatTextFormat(monkeypatch, qtbot, nwGUI):
assert fmtTab._textFont == font assert fmtTab._textFont == font
# Finish # Finish
button = bSettings.buttonBox.button(QtDialogClose) bSettings._dialogButtonClicked(bSettings.btnClose)
assert button is not None
bSettings._dialogButtonClicked(button)
# qtbot.stop() # qtbot.stop()
@@ -703,9 +688,7 @@ def testToolBuildSettings_FormatFirstLineIndent(monkeypatch, qtbot, nwGUI):
assert sBuild.getBool("format.indentFirstPar") is True assert sBuild.getBool("format.indentFirstPar") is True
# Finish # Finish
button = bSettings.buttonBox.button(QtDialogClose) bSettings._dialogButtonClicked(bSettings.btnClose)
assert button is not None
bSettings._dialogButtonClicked(button)
# qtbot.stop() # qtbot.stop()
@@ -761,9 +744,7 @@ def testToolBuildSettings_FormatPageLayout(monkeypatch, qtbot, nwGUI):
assert fmtTab.rightMargin.value() == 1.5 assert fmtTab.rightMargin.value() == 1.5
# Finish # Finish
button = bSettings.buttonBox.button(QtDialogClose) bSettings._dialogButtonClicked(bSettings.btnClose)
assert button is not None
bSettings._dialogButtonClicked(button)
# qtbot.stop() # qtbot.stop()
@@ -832,7 +813,5 @@ def testToolBuildSettings_FormatOutput(qtbot, nwGUI):
assert fmtTab.odtPageHeader.text() == nwHeadFmt.DOC_AUTO assert fmtTab.odtPageHeader.text() == nwHeadFmt.DOC_AUTO
# Finish # Finish
button = bSettings.buttonBox.button(QtDialogClose) bSettings._dialogButtonClicked(bSettings.btnClose)
assert button is not None
bSettings._dialogButtonClicked(button)
# qtbot.stop() # qtbot.stop()
-1
View File
@@ -111,7 +111,6 @@ def updateTranslationSources(args: argparse.Namespace) -> None:
print("") print("")
sources = list((ROOT_DIR / "novelwriter").glob("**/*.py")) sources = list((ROOT_DIR / "novelwriter").glob("**/*.py"))
sources.insert(0, ROOT_DIR / "i18n" / "qtbase.py")
for source in sources: for source in sources:
print(source.relative_to(ROOT_DIR)) print(source.relative_to(ROOT_DIR))
+20 -2
View File
@@ -107,6 +107,24 @@ ICONS = [
"theme_dark", "theme_dark",
"theme_auto", "theme_auto",
"btn_ok",
"btn_cancel",
"btn_yes",
"btn_no",
"btn_open",
"btn_close",
"btn_save",
"btn_browse",
"btn_list",
"btn_new",
"btn_create",
"btn_reset",
"btn_insert",
"btn_apply",
"btn_build",
"btn_print",
"btn_preview",
"add", "add",
"bookmarks", "bookmarks",
"browse", "browse",
@@ -142,7 +160,6 @@ ICONS = [
"more_arrow", "more_arrow",
"more_vertical", "more_vertical",
"noncheckable", "noncheckable",
"open",
"panel", "panel",
"pin", "pin",
"project_copy", "project_copy",
@@ -151,7 +168,6 @@ ICONS = [
"remove", "remove",
"revert", "revert",
"settings", "settings",
"star",
"stats", "stats",
"text", "text",
"timer_off", "timer_off",
@@ -288,6 +304,8 @@ def processFontAwesome(workDir: Path, iconsDir: Path, jobs: dict) -> None:
viewbox = [int(x) for x in svg.get("viewBox", "").split()] viewbox = [int(x) for x in svg.get("viewBox", "").split()]
viewbox = [viewbox[2]//2 - 256, 0, 512, 512] viewbox = [viewbox[2]//2 - 256, 0, 512, 512]
svg.set("viewBox", " ".join(str(x) for x in viewbox)) svg.set("viewBox", " ".join(str(x) for x in viewbox))
for elem in svg.iter():
elem.attrib.pop("fill", None)
icons[key] = svg icons[key] = svg
else: else:
print(f"Not Found: {icon}.svg") print(f"Not Found: {icon}.svg")
+20 -4
View File
@@ -60,6 +60,24 @@
"theme_dark": "moon", "theme_dark": "moon",
"theme_auto": "circle-half-stroke", "theme_auto": "circle-half-stroke",
"btn_ok": "circle-check",
"btn_cancel": "ban",
"btn_yes": "circle-check",
"btn_no": "circle-xmark",
"btn_open": "file-arrow-up",
"btn_close": "circle-xmark",
"btn_save": "floppy-disk",
"btn_browse": "folder-open",
"btn_list": "list",
"btn_new": "plus",
"btn_create": "star",
"btn_reset": "rotate-left",
"btn_insert": "i-cursor",
"btn_apply": "square-check",
"btn_build": "up-right-from-square",
"btn_print": "print",
"btn_preview": "eye",
"add": "plus", "add": "plus",
"bookmarks": "bookmark", "bookmarks": "bookmark",
"browse": "folder-open", "browse": "folder-open",
@@ -95,16 +113,14 @@
"more_arrow": "caret-right", "more_arrow": "caret-right",
"more_vertical": "ellipsis-vertical", "more_vertical": "ellipsis-vertical",
"noncheckable": "square-minus", "noncheckable": "square-minus",
"open": "file-arrow-up",
"panel": "table-list", "panel": "table-list",
"pin": "thumbtack", "pin": "thumbtack",
"project_copy": "copy", "project_copy": "copy",
"quote": "quote-right", "quote": "quote-right",
"refresh": "arrow-rotate-right", "refresh": "rotate-right",
"remove": "minus", "remove": "minus",
"revert": "arrow-rotate-left", "revert": "rotate-left",
"settings": "gear", "settings": "gear",
"star": "star",
"stats": "chart-line", "stats": "chart-line",
"text": "file-lines", "text": "file-lines",
"timer_off": "pause", "timer_off": "pause",
+18 -2
View File
@@ -60,6 +60,24 @@
"theme_dark": "dark_mode", "theme_dark": "dark_mode",
"theme_auto": "contrast", "theme_auto": "contrast",
"btn_ok": "check_circle",
"btn_cancel": "cancel",
"btn_yes": "check_circle",
"btn_no": "do_not_disturb_on",
"btn_open": "open_in_new",
"btn_close": "cancel",
"btn_save": "file_save",
"btn_browse": "folder_open",
"btn_list": "format_list_bulleted",
"btn_new": "new_window",
"btn_create": "star",
"btn_reset": "undo",
"btn_insert": "insert_text",
"btn_apply": "check_box",
"btn_build": "export_notes",
"btn_print": "print",
"btn_preview": "preview",
"add": "add", "add": "add",
"bookmarks": "bookmarks", "bookmarks": "bookmarks",
"browse": "folder_open", "browse": "folder_open",
@@ -95,7 +113,6 @@
"more_arrow": "arrow_right", "more_arrow": "arrow_right",
"more_vertical": "more_vert", "more_vertical": "more_vert",
"noncheckable": "indeterminate_check_box", "noncheckable": "indeterminate_check_box",
"open": "open_in_new",
"panel": "dock_to_bottom", "panel": "dock_to_bottom",
"pin": "keep", "pin": "keep",
"project_copy": "folder_copy", "project_copy": "folder_copy",
@@ -104,7 +121,6 @@
"remove": "remove", "remove": "remove",
"revert": "settings_backup_restore", "revert": "settings_backup_restore",
"settings": "settings", "settings": "settings",
"star": "star",
"stats": "stacked_line_chart", "stats": "stacked_line_chart",
"text": "subject", "text": "subject",
"timer_off": "timer_off", "timer_off": "timer_off",
+18 -2
View File
@@ -60,6 +60,24 @@
"theme_dark": "moon", "theme_dark": "moon",
"theme_auto": "contrast", "theme_auto": "contrast",
"btn_ok": "checkbox-circle",
"btn_cancel": "indeterminate-circle",
"btn_yes": "checkbox-circle",
"btn_no": "close-circle",
"btn_open": "file-upload",
"btn_close": "close-circle",
"btn_save": "save-3",
"btn_browse": "folder-2",
"btn_list": "list-unordered",
"btn_new": "add",
"btn_create": "star-fill",
"btn_reset": "reset-left",
"btn_insert": "add-box",
"btn_apply": "checkbox",
"btn_build": "stack",
"btn_print": "printer",
"btn_preview": "eye",
"add": "add", "add": "add",
"bookmarks": "bookmark", "bookmarks": "bookmark",
"browse": "folder-2", "browse": "folder-2",
@@ -95,7 +113,6 @@
"more_arrow": "arrow-right-s-fill", "more_arrow": "arrow-right-s-fill",
"more_vertical": "more-2-fill", "more_vertical": "more-2-fill",
"noncheckable": "checkbox-indeterminate", "noncheckable": "checkbox-indeterminate",
"open": "file-upload",
"panel": "layout-bottom", "panel": "layout-bottom",
"pin": "pushpin", "pin": "pushpin",
"project_copy": "file-copy-2", "project_copy": "file-copy-2",
@@ -104,7 +121,6 @@
"remove": "subtract", "remove": "subtract",
"revert": "reset-left", "revert": "reset-left",
"settings": "settings-2", "settings": "settings-2",
"star": "star-fill",
"stats": "line-chart", "stats": "line-chart",
"text": "file-text", "text": "file-text",
"timer_off": "zzz", "timer_off": "zzz",