diff --git a/Config.qml b/Config.qml index c297a50..2c67598 100644 --- a/Config.qml +++ b/Config.qml @@ -7,25 +7,54 @@ import Quickshell.Services.Pipewire Singleton { id: root + property string username: "xnzf" + property string distro: "Arch Linux (btw)" property QtObject colors: QtObject { - property string neutral: "#151515" - property string fontcolor: "#f9f9fa" - property string mainBG: "#404b7c" - property string mainFG: "#95d3af" - property string modularBG: "404b7c" - property string modularFG: "95d3af" - property string modularFG2: "f9f9fa" - property string secondaryFG: "#404b7c" + // surface colors + property string neutral: "#010C1D" + property string fontcolor: "#E2ECFE" + + // main colors + property string mainColor0: "#111160" property string mainColor1: "#0F0679" property string mainColor2: "#1911A6" property string mainColor3: "#8D1B82" property string mainColor4: "#C80E65" property string mainColor5: "#FF0044" property string mainColor6: "#DB0037" + + // ui colors + // -- danger + property string red900: "#DD0039" + property string red800: "#FF0042" + property string red700: "#FF225B" + property string red600: "#FF4575" + property string red500: "#FF668D" + + // -- warning + property string yellow900: "#FFA500" + property string yellow800: "#EBC600" + property string yellow700: "#FFD700" + property string yellow600: "#FFEB3B" + property string yellow500: "#FFEC88" + + // -- info + property string navy900: "#0C00DD" + property string navy800: "#2E22FF" + property string navy700: "#4E44FF" + property string navy600: "#6E66FF" + property string navy500: "#8E88FF" + + // --success + property string green900: "#007742" + property string green800: "#00BB67" + property string green700: "#00FF8D" + property string green600: "#44FFAB" + property string green500: "#88FFCA" } - property real opacityOffset: 0.75 + property real opacityOffset: 0.84 // default font property font font: Qt.font({ diff --git a/HoverableShowcase.qml b/HoverableShowcase.qml new file mode 100644 index 0000000..452d188 --- /dev/null +++ b/HoverableShowcase.qml @@ -0,0 +1,259 @@ +import QtQuick +import Quickshell +import Quickshell.Hyprland + +Scope { + id: root + required property var bar + + property TooltipItem activeTooltip: null + property TooltipItem activeMenu: null + + readonly property TooltipItem activeItem: activeMenu ?? activeTooltip + property TooltipItem lastActiveItem: null + readonly property TooltipItem shownItem: activeItem ?? lastActiveItem + property real hangTime: lastActiveItem?.hangTime ?? 0 + + property Item tooltipItem: null + + onActiveItemChanged: { + if (activeItem != null) { + hangTimer.stop(); + activeItem.targetVisible = true; + + if (tooltipItem) { + activeItem.parent = tooltipItem; + } + } + + if (lastActiveItem != null && lastActiveItem != activeItem) { + if (activeItem != null) + lastActiveItem.targetVisible = false; + else if (root.hangTime == 0) + doLastHide(); + else + hangTimer.start(); + } + + if (activeItem != null) + lastActiveItem = activeItem; + } + + function setItem(item: TooltipItem) { + if (item.isMenu) { + activeMenu = item; + } else { + activeTooltip = item; + } + } + + function removeItem(item: TooltipItem) { + if (item.isMenu && activeMenu == item) { + activeMenu = null; + } else if (!item.isMenu && activeTooltip == item) { + activeTooltip = null; + } + } + + function doLastHide() { + lastActiveItem.targetVisible = false; + } + + function onHidden(item: TooltipItem) { + if (item == lastActiveItem) { + lastActiveItem = null; + } + } + + Timer { + id: hangTimer + interval: root.hangTime + onTriggered: doLastHide() + } + + property real scaleMul: lastActiveItem && lastActiveItem.targetVisible ? 1000 : 0 + Behavior on scaleMul { + SmoothedAnimation { + velocity: 5000 + } + } + + LazyLoader { + id: popupLoader + activeAsync: shownItem != null + + PopupWindow { + id: popup + + anchor { + window: bar + rect.x: bar.tooltipXOffset + rect.y: tooltipItem.highestAnimY + adjustment: PopupAdjustment.None + } + + //height: bar.height + //width: Math.max(1, widthAnim.running ? Math.max(tooltipItem.targetWidth, tooltipItem.lastTargetWidth) : tooltipItem.targetWidth) + //width: Math.max(1, widthAnim.running ? Math.max(tooltipItem.targetWidth, tooltipItem.lastTargetWidth) : tooltipItem.targetWidth) + width: Math.max(700, tooltipItem.largestAnimWidth) // max due to qtwayland glitches + height: { + const h = tooltipItem.lowestAnimY - tooltipItem.highestAnimY; + //console.log(`seth ${h} ${tooltipItem.highestAnimY} ${tooltipItem.lowestAnimY}; ${tooltipItem.y1} ${tooltipItem.y2}`) + return h; + } + //width: tooltipItem.targetWidth + visible: true + //color: "transparent" + color: "#20000000" + + mask: Region { + item: (shownItem?.hoverable ?? false) ? tooltipItem : null + } + + HyprlandFocusGrab { + active: activeItem?.isMenu ?? false + windows: [popup, bar, ...(activeItem?.grabWindows ?? [])] + onActiveChanged: { + if (!active && activeItem?.isMenu) { + activeMenu.close(); + } + } + } + + /*Rectangle { + color: "#10ff0000" + //y: tooltipItem.highestAnimY + height: tooltipItem.lowestAnimY - tooltipItem.highestAnimY + width: parent.width + } + + Rectangle { + color: "#1000ff00" + //y: tooltipItem.highestAnimY + height: popup.height + width: parent.width + }*/ + + Item { + id: tooltipItem + Component.onCompleted: { + root.tooltipItem = this; + if (root.shownItem) { + root.shownItem.parent = this; + } + + //highestAnimY = targetY - targetHeight / 2; + //lowestAnimY = targetY + targetHeight / 2; + } + + transform: Scale { + origin.x: 0 + origin.y: tooltipItem.height / 2 + xScale: 0.9 + (scaleMul / 10000) + yScale: xScale + } + + clip: width != targetWidth || height != targetHeight + + readonly property var targetWidth: shownItem?.implicitWidth ?? 0 + readonly property var targetHeight: shownItem?.implicitHeight ?? 0 + + property var largestAnimWidth: 0 + property var highestAnimY: 0 // unused due to reposition timing issues + property var lowestAnimY: bar.height + + onTargetWidthChanged: { + if (targetWidth > largestAnimWidth) { + largestAnimWidth = targetWidth; + } + } + + onTargetYChanged: updateYBounds() + onTargetHeightChanged: updateYBounds() + function updateYBounds() { + if (targetY - targetHeight / 2 < highestAnimY) + //highestAnimY = targetY - targetHeight / 2 + {} + + if (targetY + targetHeight / 2 > lowestAnimY) + //lowestAnimY = targetY + targetHeight / 2 + {} + } + + readonly property real targetY: { + if (shownItem == null) + return 0; + const target = bar.contentItem.mapFromItem(shownItem.owner, 0, shownItem.targetRelativeY).y; + return bar.boundedY(target, shownItem.implicitHeight / 2); + } + + property var w: -1 + width: Math.max(1, w) + + property var y1: -1 + property var y2: -1 + + y: y1 - popup.anchor.rect.y + height: y2 - y1 + + readonly property bool anyAnimsRunning: y1Anim.running || y2Anim.running || widthAnim.running + + onAnyAnimsRunningChanged: { + if (!anyAnimsRunning) { + largestAnimWidth = targetWidth; + //highestAnimY = y1; + //lowestAnimY = y2; + } + } + + SmoothedAnimation { + id: y1Anim + target: tooltipItem + property: "y1" + to: tooltipItem.targetY - tooltipItem.targetHeight / 2 + onToChanged: { + if (tooltipItem.y1 == -1 || !(shownItem?.animateSize ?? true)) { + stop(); + tooltipItem.y1 = to; + } else { + velocity = (Math.max(tooltipItem.y1, to) - Math.min(tooltipItem.y1, to)) * 5; + restart(); + } + } + } + + SmoothedAnimation { + id: y2Anim + target: tooltipItem + property: "y2" + to: tooltipItem.targetY + tooltipItem.targetHeight / 2 + onToChanged: { + if (tooltipItem.y2 == -1 || !(shownItem?.animateSize ?? true)) { + stop(); + tooltipItem.y2 = to; + } else { + velocity = (Math.max(tooltipItem.y2, to) - Math.min(tooltipItem.y2, to)) * 5; + restart(); + } + } + } + + SmoothedAnimation { + id: widthAnim + target: tooltipItem + property: "w" + to: tooltipItem.targetWidth + onToChanged: { + if (tooltipItem.w == -1) { + stop(); + tooltipItem.w = to; + } else { + velocity = (Math.max(tooltipItem.width, to) - Math.min(tooltipItem.width, to)) * 5; + restart(); + } + } + } + } + } + } +} diff --git a/backgrounds/BackgroundItem.qml b/backgrounds/BackgroundItem.qml index 5c28ae6..ad587a0 100644 --- a/backgrounds/BackgroundItem.qml +++ b/backgrounds/BackgroundItem.qml @@ -9,6 +9,7 @@ Item { anchors.fill: parent width: parent.width height: parent.height + layer { enabled: true effect: OpacityMask { diff --git a/backgrounds/MainGradient.qml b/backgrounds/MainGradient.qml index f138032..ad9ba46 100644 --- a/backgrounds/MainGradient.qml +++ b/backgrounds/MainGradient.qml @@ -19,7 +19,6 @@ Rectangle { blurMax: 32 blurMultiplier: 1.0 saturation: 1 - brightness: -0.5 } } opacity: 1 - Config.opacityOffset @@ -28,14 +27,7 @@ Rectangle { id: gradient1 orientation: Gradient.Horizontal property real positionOffset - GradientStop { - position: -0.4 + gradient1.positionOffset - color: Config.colors.mainColor2 - } - GradientStop { - position: -0.2 + gradient1.positionOffset - color: Config.colors.mainColor3 - } + GradientStop { position: 0.0 + gradient1.positionOffset color: Config.colors.mainColor1 @@ -54,11 +46,11 @@ Rectangle { } GradientStop { position: 0.8 + gradient1.positionOffset - color: Config.colors.mainColor5 + color: Config.colors.mainColor6 } GradientStop { position: 1.0 + gradient1.positionOffset - color: Config.colors.mainColor6 + color: Config.colors.mainColor4 } GradientStop { position: 1.2 + gradient1.positionOffset @@ -68,17 +60,16 @@ Rectangle { position: 1.4 + gradient1.positionOffset color: Config.colors.mainColor2 } + GradientStop { + position: 1.6 + gradient1.positionOffset + color: Config.colors.mainColor1 + } NumberAnimation on positionOffset { id: numanim loops: Animation.Infinite - property bool reverse - duration: 60000 + duration: 30000 from: -2.0 to: 1.0 - onFinished: { - numanim.reverse = !numanim.reverse; - numanim.start(); - } } } } diff --git a/bars/Top.qml b/bars/Top.qml index 4d80356..5440a58 100644 --- a/bars/Top.qml +++ b/bars/Top.qml @@ -10,6 +10,9 @@ import "root:/components/datetime" import "root:/components/hyprland" import "root:/components/media" import "root:/components/systemctx" +import "root:/components/menu" +import "root:/components/updatecheck" +import "root:/components/clipboard" // Screen Factory Scope { @@ -37,45 +40,84 @@ Scope { left: 6 } height: Config.sizes.barHeight + width: screen.width // Styling color: "transparent" BackgroundItem {} + // Popups + ClipboardPopup { + window: root + parentRect: clipboardItem + show: clipboardRoot.showPopup + items: clipboardRoot.cliphistdata + } + + AppMenuPopup { + window: root + parentRect: appmenuItem + show: appmenuRoot.showPopup + } // Left Side RowLayout { + id: leftLayoutRoot // Anchor to the left side anchors { left: parent.left } + spacing: 9 + // Items + BarItem { + DotDecoration { + transparent: true + } + } // -- Menu + BarItem { + id: appmenuItem + AppMenu { + id: appmenuRoot + } + } + BarItem { + DotDecoration {} + } + // -- Update + BarItem { + UpdateComponent {} + } + BarItem { + DotDecoration {} + } // -- Window BarItem { - radius: 30 - HyprlandWindow {} + MprisComponent {} } } // Center RowLayout { + id: centerLayoutRoot // Anchor to the center anchors { centerIn: parent } - // Items - // -- Mpris + // Workspaces BarItem { - id: mpris - MprisComponent {} + HyprlandWorkspaces { + window: root + } } } // Right Side RowLayout { + id: rightLayoutRoot // Anchor to the right side anchors { right: parent.right @@ -85,83 +127,46 @@ Scope { // Items // -- Clipboard BarItem { - Clipboard {} - } - // -- Language - BarItem { - id: lang - KbLayout { - MouseArea { - anchors.fill: parent - hoverEnabled: true - propagateComposedEvents: true - onEntered: { - root.hoveredItem = lang; - root.isHovered = true; - //console.log(root.hoveredItem) - } - onExited: { - root.isHovered = false; - //root.hoveredItem = null; - //console.log(root.hoveredItem) - } - } + id: clipboardItem + Clipboard { + id: clipboardRoot } } // -- System Tray BarItem { - id: sysTray - radius: 30 - SysTray { - window: root - } + DotDecoration {} } // -- Audio BarItem { id: audio - Audio { - MouseArea { - anchors.fill: parent - hoverEnabled: true - propagateComposedEvents: true - onEntered: { - root.hoveredItem = audio; - root.isHovered = true; - //console.log(root.hoveredItem.x) - } - onExited: { - root.isHovered = false; - //root.hoveredItem = null; - //console.log(root.hoveredItem) - } - } - } + Audio {} } - // -- Memory - BarItem { - id: memory - MemStat { - MouseArea { - anchors.fill: parent - hoverEnabled: true - propagateComposedEvents: true - onEntered: { - root.hoveredItem = memory; - root.isHovered = true; - //console.log(root.hoveredItem) - } - onExited: { - root.isHovered = false; - //root.hoveredItem = null; - //console.log(root.hoveredItem) - } - } - } + BarItem { + DotDecoration {} + } + // -- Keyboard + BarItem { + KbLayout {} + } + BarItem { + DotDecoration {} } // -- Clock BarItem { Clock {} } + BarItem { + DotDecoration {} + } + // -- System Menu + BarItem { + SysMenu {} + } + BarItem { + DotDecoration { + transparent: true + } + } } } } diff --git a/components/Audio.qml b/components/Audio.qml deleted file mode 100644 index 8420f19..0000000 --- a/components/Audio.qml +++ /dev/null @@ -1,88 +0,0 @@ -import QtQuick -import Quickshell -import QtQuick.Layouts - -import "root:/" -import "root:/io" - -Rectangle { - id: root - anchors.centerIn: parent - color: "transparent" - implicitWidth: 75 + 38 - height: 28 - RowLayout { - anchors { - centerIn: parent - } - implicitWidth: parent.width - implicitHeight: parent.height - spacing: 1 - - Rectangle { - color: Config.colors.mainColor4 - Layout.preferredWidth: textfield.width * 1.8 - height: parent.height - topLeftRadius: 30 - bottomLeftRadius: 30 - topRightRadius: 6 - bottomRightRadius: 6 - Text { - id: textfield - color: Config.colors.fontcolor - anchors.centerIn: parent - property string volumeLow: "󰕿 " - property string volumeMid: "󰖀 " - property string volumeHigh: "󰕾 " - - property int intVolume: PipewireIO.volume * 100 - width: intVolume < 100 ? 32 : 39 - property string volumeIcon: intVolume < 30 ? volumeLow : intVolume < 70 ? volumeMid : volumeHigh - - text: volumeIcon + intVolume - } - MouseArea { - anchors.fill: parent - anchors.centerIn: parent - acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MiddleButton - onWheel: event => { - event.accepted = true; - let volumeChange = event.angleDelta.y === -240 ? -0.03 : 0.03; - let newVolume = PipewireIO.volume + volumeChange; - let nullishVolume = Math.max(newVolume, 0); - PipewireIO.activeSink.audio.volume = nullishVolume; - } - } - } - Rectangle { - color: Config.colors.mainColor3 - implicitWidth: textfield2.width - Layout.preferredWidth: textfield2.width * 1.8 - height: parent.height - topLeftRadius: 6 - bottomLeftRadius: 6 - topRightRadius: 30 - bottomRightRadius: 30 - Text { - id: textfield2 - width: 35 - color: Config.colors.fontcolor - anchors.centerIn: parent - property int intMicVolume: PipewireIO.micVolume * 100 - text: " " + intMicVolume - } - MouseArea { - anchors.fill: parent - anchors.centerIn: parent - acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MiddleButton - onWheel: event => { - event.accepted = true; - let volumeChange = event.angleDelta.y === -240 ? -0.03 : 0.03; - let newVolume = PipewireIO.micVolume + volumeChange; - let nullishVolume = Math.max(newVolume, 0); - PipewireIO.activeSource.audio.volume = nullishVolume; - } - } - } - } -} diff --git a/components/Clipboard.qml b/components/Clipboard.qml deleted file mode 100644 index 7e452ba..0000000 --- a/components/Clipboard.qml +++ /dev/null @@ -1,69 +0,0 @@ -import QtQuick -import QtQuick.Controls -import Quickshell - -import "root:/" -import "root:/io" - -Rectangle { - id: root - anchors.centerIn: parent - color: Config.colors.mainColor2 - implicitHeight: 28 - implicitWidth: 42 - radius: 30 - MouseArea { - id: mouseArea - anchors.fill: parent - acceptedButtons: Qt.LeftButton | Qt.RightButton - cursorShape: Qt.PointingHandCursor - hoverEnabled: true - property bool isHovered: false - property string tooltipText: "0" - Text { - id: text - color: Config.colors.fontcolor - anchors.fill: parent - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - font { - pixelSize: 24 - family: "Hack Nerd Font Mono" - } - text: "󰨸" - } - onClicked: mouse => { - if (mouse.button === Qt.LeftButton) { - ClipboardIO.runninglist = true; - } else if (mouse.button === Qt.RightButton) { - ClipboardIO.runningwipe = true; - } - } - onEntered: { - ClipboardIO.runningcount = true; - isHovered = true; - } - onExited: { - isHovered = false; - } - ToolTip { - id: tooltip - delay: 300 - width: 200 - height: 30 - visible: false //mouseArea.isHovered; - //topMargin: 30 - y: 100 - x: -60 - text: mouseArea.tooltipText - } - } - - Connections { - target: ClipboardIO - function cliphistcount(count) { - console.log(count); - mouseArea.tooltipText = count; - } - } -} diff --git a/components/KbLayout.qml b/components/KbLayout.qml index 978ca7b..780a645 100644 --- a/components/KbLayout.qml +++ b/components/KbLayout.qml @@ -11,14 +11,13 @@ Rectangle { width: 28 radius: 15 Text { - color: Config.colors.fontcolor + color: Qt.lighter(Config.colors.navy700, 1.05) anchors.centerIn: parent font { bold: true weight: 600 letterSpacing: 0 - pixelSize: 12 - family: "Hack Nerd Font" + pixelSize: 15 } text: HyprlandIO.currKeyboardLayout } diff --git a/components/Wallpaper.qml b/components/Wallpaper.qml new file mode 100644 index 0000000..3db9c3a --- /dev/null +++ b/components/Wallpaper.qml @@ -0,0 +1,23 @@ +import QtMultimedia +import Quickshell +import Quickshell.Wayland + +PanelWindow { + // When PanelWindow is backed with WlrLayershell this will work + WlrLayershell.layer: WlrLayer.Background + anchors { + top: true + left: true + right: true + bottom: true + } + exclusionMode: ExclusionMode.Ignore + Video { + id: name + autoPlay: true + loops: MediaPlayer.Infinite + anchors.fill: parent + fillMode: VideoOutput.Stretch + source: "root:/wallpapers/pinksunwave.mp4" + } +} diff --git a/components/clipboard/Clipboard.qml b/components/clipboard/Clipboard.qml new file mode 100644 index 0000000..70d4245 --- /dev/null +++ b/components/clipboard/Clipboard.qml @@ -0,0 +1,74 @@ +import QtQuick +import QtQuick.Controls +import Quickshell + +import "root:/" +import "root:/io" +import "root:/svg/qml" + +Rectangle { + id: root + property int tooltipText: ClipboardIO.cliphistcount + property list cliphistdata: ClipboardIO.cliphistlist + property bool showPopup: false + anchors.centerIn: parent + color: "transparent" + border.width: 2 + property color mainColor: mouseArea.isHovered ? Qt.lighter(Config.colors.mainColor2, 1.6) : Qt.lighter(Config.colors.mainColor2, 1.3) + border.color: mainColor + implicitHeight: Config.sizes.barHeight / 1.32 + implicitWidth: 42 + radius: 30 + ClipboardTextOutline { + id: clipboardTextIcon + visible: root.tooltipText !== 0 + anchors.centerIn: parent + currentColor: root.mainColor + Behavior on currentColor { + ColorAnimation { + duration: 300 + } + } + } + ClipboardOutline { + id: clipboardEmptyIcon + visible: root.tooltipText === 0 + anchors.centerIn: parent + currentColor: root.mainColor + Behavior on currentColor { + ColorAnimation { + duration: 300 + } + } + } + MouseArea { + id: mouseArea + anchors.fill: parent + acceptedButtons: Qt.LeftButton | Qt.RightButton + cursorShape: Qt.PointingHandCursor + hoverEnabled: true + property bool isHovered: false + onClicked: mouse => { + if (mouse.button === Qt.LeftButton) { + if (root.cliphistdata.length === 0 || (!ClipboardIO.runninglist && ClipboardIO.cliphistcount !== root.tooltipText)) { + ClipboardIO.runninglist = true; + } + root.showPopup = !root.showPopup; + } else if (mouse.button === Qt.RightButton) { + ClipboardIO.runningwipe = true; + } + } + onEntered: { + ClipboardIO.runningcount = true; + isHovered = true; + } + onExited: { + isHovered = false; + } + } + Behavior on border.color { + ColorAnimation { + duration: 300 + } + } +} diff --git a/components/clipboard/ClipboardPopup.qml b/components/clipboard/ClipboardPopup.qml new file mode 100644 index 0000000..92cd494 --- /dev/null +++ b/components/clipboard/ClipboardPopup.qml @@ -0,0 +1,126 @@ +import Quickshell +import QtQuick +import Qt.labs.qmlmodels +import QtQml + +import "root:/" +import "root:/io" +import "../shared" + +Popup { + id: root + required property QsWindow window + required property Item parentRect + required property bool show + setWindow: window + setParentRect: parentRect + setShow: show + setWidth: 500 + setHeight: 500 + property list items + Rectangle { + id: rootrect + opacity: root.show ? 1 : 0 + clip: true + anchors.fill: parent + color: Qt.alpha("#000000", 0.3) + radius: Config.sizes.mainRadius + scale: root.show ? 1 : 0.8 + BorderSubtle { + gradientColor1: Config.colors.mainColor4 + gradientColor2: Config.colors.yellow700 + } + BorderSubtle { + orientRight: true + gradientColor1: Config.colors.mainColor4 + gradientColor2: Config.colors.yellow700 + } + Behavior on opacity { + NumberAnimation { + duration: 200 + easing.type: Easing.InOutQuad + } + } + Behavior on scale { + NumberAnimation { + duration: 200 + easing.type: Easing.InOutQuad + } + } + TableView { + id: table + clip: true + anchors.centerIn: parent + width: parent.width - 15 + height: parent.height - 15 + columnSpacing: 0 + resizableColumns: true + columnWidthProvider: column => { + if (column === 0) { + return 60; + } + return width - 60; + } + rowSpacing: 1 + property list clipboardEntries: { + let map = root.items.map(item => item.split(" ")); + let obj = map.map(item => { + //console.log(item[0]); + //console.log(item[1]); + return { + entryId: item[0], + entryData: item[1] + }; + }); + return obj; + } + model: TableModel { + TableModelColumn { + display: "entryId" + } + TableModelColumn { + display: "entryData" + } + rows: [...table.clipboardEntries] + } + delegate: Rectangle { + clip: true + required property string display + required property bool current + required property bool selected + border.width: current ? 1 : 0 + implicitHeight: 30 + implicitWidth: table.width + color: "transparent" + Text { + color: Config.colors.fontcolor + text: parent.display + } + MouseArea { + id: dataEntryMouseArea + anchors.fill: parent + hoverEnabled: true + property var hoveredItem + onEntered: { + if (!isNaN(parent.display)) { + console.log(parent.display); + ClipboardIO.decodeId = parent.display; + ClipboardIO.runningdecode = true; + } + } + onExited: { + ClipboardIO.decodeId = ""; + ClipboardIO.runningdecode = false; + } + Connections { + enabled: true + target: ClipboardIO + function onDecoded(decoded) { + dataEntryMouseArea.hoveredItem = decoded; + } + } + } + } + } + } +} diff --git a/components/datetime/Clock.qml b/components/datetime/Clock.qml index 1c7ff0b..d4ff2c9 100644 --- a/components/datetime/Clock.qml +++ b/components/datetime/Clock.qml @@ -1,19 +1,59 @@ import QtQuick import Quickshell -import "./" import "root:/" Rectangle { + id: root color: "transparent" - radius: 30 - width: 129 + 30 + width: 80 height: Config.sizes.barHeight - anchors.centerIn: parent + anchors.fill: parent Text { - anchors.centerIn: parent + id: timetext + anchors.horizontalCenter: root.horizontalCenter + y: parent.height / 4 + font.bold: true horizontalAlignment: Text.AlignHCenter + color: Qt.lighter(Config.colors.navy500, 1.1) + text: `${Time.syshours}:${Time.sysminutes}` + Behavior on y { + SmoothedAnimation { + velocity: 100 + } + } + } + Text { + id: datetext + width: contentWidth > 80 ? contentWidth : 80 + anchors.horizontalCenter: root.horizontalCenter + y: root.height / 1.3 font.bold: true - color: Config.colors.fontcolor - text: Time.time + color: Qt.alpha(Config.colors.navy500, 0.3) + text: `${Time.date}` + Behavior on y { + SmoothedAnimation { + velocity: 100 + } + } + Behavior on color { + ColorAnimation { + duration: 100 + } + } + } + MouseArea { + id: hoverArea + anchors.fill: parent + hoverEnabled: true + onEntered: { + datetext.y = root.height / 2; + datetext.color = Qt.alpha(Config.colors.navy500, 0.9); + timetext.y = parent.y + 3; + } + onExited: { + datetext.y = root.height / 1.3; + datetext.color = Qt.alpha(Config.colors.navy500, 0.3); + timetext.y = parent.height / 4; + } } } diff --git a/components/datetime/Time.qml b/components/datetime/Time.qml index 72b59e8..bd4ed79 100644 --- a/components/datetime/Time.qml +++ b/components/datetime/Time.qml @@ -1,16 +1,33 @@ pragma Singleton import Quickshell -import Quickshell.Io import QtQuick Singleton { + id: root property var locale: Qt.locale() - property var date: new Date() - property string time: date.toLocaleString(locale, "ddd, dd MMM | hh:mm") + property var datevar: new Date() + property string date: datevar.toLocaleString(locale, "ddd, dd MMM") + property string dateNum: datevar.toLocaleString(locale, "d/M/yy") + property string syshours: clock.hours + property string sysminutes: clock.minutes + property string sysseconds: clock.seconds + SystemClock { + id: clock + precision: SystemClock.Minutes + onHoursChanged: { + root.syshours = hours.toString().padStart(2, "0"); + } + onMinutesChanged: { + root.sysminutes = minutes.toString().padStart(2, "0"); + } + onSecondsChanged: { + root.sysseconds = seconds.toString().padStart(2, "0"); + } + } Timer { - interval: 1000 + interval: 5 * 60 * 60 * 1000 // hours * minutes * seconds * ms running: true repeat: true onTriggered: date = new Date() diff --git a/components/hyprland/HyprlandWorkspaces.qml b/components/hyprland/HyprlandWorkspaces.qml index c6d6542..2669196 100644 --- a/components/hyprland/HyprlandWorkspaces.qml +++ b/components/hyprland/HyprlandWorkspaces.qml @@ -6,58 +6,66 @@ import Quickshell.Hyprland import "root:/" import "root:/io" -import "./" +import "../shared" Item { id: root required property QsWindow window - implicitWidth: layout.implicitWidth + 30 - implicitHeight: layout.implicitHeight + 2 - property int iHeight: 13 - property int iWidth: 13 + width: layout.implicitWidth + height: Config.sizes.barHeight RowLayout { id: layout anchors.centerIn: parent - spacing: 15 - implicitHeight: root.iHeight - implicitWidth: repeater.count * root.iWidth + 15 + spacing: 21 + implicitHeight: root.height + implicitWidth: repeater.totalCount * 15 Repeater { id: repeater - model: HyprlandIO.sortedWorkspaces - property int count: HyprlandIO.sortedWorkspaces.length - InnerCircle { - id: toprect - implicitWidth: root.iWidth - implicitHeight: root.iHeight + model: 5 + property list workspaces: HyprlandIO.sortedWorkspaces + property int totalCount: 5 + property QtObject activeWorkspace: HyprlandIO.activeWorkspace + property color activeColor: Config.colors.red600 + property color existingColor: Config.colors.red700 + property color nonExistingColor: Config.colors.navy700 + DotFunctional { + id: workdot + required property int index + property HyprlandWorkspace currWorkspace: repeater.workspaces[index] || null + property bool nonExisting: currWorkspace === null + ccolor: { + if (nonExisting) { + return Qt.alpha(repeater.nonExistingColor, 0.6); + } + if (currWorkspace.id === repeater.activeWorkspace.id) { + return repeater.activeColor; + } + if (currWorkspace.name === "special:scratchpad" && HyprlandIO.activeSpecial.active) { + return Qt.lighter(Config.colors.mainColor3, 1.8); + } + return repeater.existingColor; + } + dotSize: 7 + MouseArea { + id: workdotMouseArea + acceptedButtons: Qt.LeftButton | Qt.RightButton + cursorShape: Qt.PointingHandCursor + anchors.fill: parent + hoverEnabled: true + onEntered: { + workdot.dotSize = 9; + workdot.hovered = true; + } + onExited: { + workdot.dotSize = 7; + workdot.hovered = false; + } + onClicked: mouse => { + console.log(HyprlandIO.sortedWorkspaces[workdot.index]); + } + } } } } - - MouseArea { - acceptedButtons: Qt.LeftButton | Qt.RightButton - anchors.fill: parent - hoverEnabled: true - onEntered: { - root.iHeight = 28; - root.iWidth = 28; - } - onExited: { - root.iHeight = 13; - root.iWidth = 13; - } - onClicked: mouse => { - console.log(Hyprland.workspaces); - } - } - Behavior on iWidth { - SmoothedAnimation { - velocity: 300 - } - } - Behavior on iHeight { - SmoothedAnimation { - velocity: 300 - } - } } diff --git a/components/media/Audio.qml b/components/media/Audio.qml new file mode 100644 index 0000000..410b941 --- /dev/null +++ b/components/media/Audio.qml @@ -0,0 +1,205 @@ +import QtQuick +import Quickshell +import QtQuick.Layouts +import Qt5Compat.GraphicalEffects + +import "root:/" +import "root:/io" +import "root:/svg/qml" + +Rectangle { + id: root + anchors.centerIn: parent + color: "transparent" + implicitWidth: 75 + 38 + height: parent.height / 1.32 + property int elementWidth: 33 + RowLayout { + clip: false + anchors { + centerIn: parent + } + implicitWidth: parent.width + implicitHeight: parent.height + spacing: 1 + + Rectangle { + id: soundRoot + //clip: true + property color soundHighlight: Config.colors.mainColor4 + color: "transparent" + Layout.preferredWidth: soundText.width * 1.8 + Layout.preferredHeight: parent.height + // border.color: soundHighlight + // border.width: 2 + // topLeftRadius: 30 + // bottomLeftRadius: 30 + // topRightRadius: 6 + // bottomRightRadius: 6 + + // sound props + property int intVolume: PipewireIO.volume * 100 + property string volumeIcon: intVolume < 30 ? "volumeLow" : intVolume < 70 ? "volumeMid" : "volumeHigh" + + Text { + id: soundText + anchors.centerIn: soundRoot + color: soundRoot.soundHighlight + width: root.elementWidth + font.strikeout: PipewireIO.muted + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + + text: soundRoot.intVolume + } + MouseArea { + id: soundMouseArea + anchors.fill: parent + acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MiddleButton + cursorShape: Qt.PointingHandCursor + onWheel: event => { + event.accepted = true; + let volumeChange = event.angleDelta.y === -240 ? -0.03 : 0.03; + let newVolume = PipewireIO.volume + volumeChange; + let nullishVolume = Math.max(newVolume, 0); + PipewireIO.activeSink.audio.volume = nullishVolume; + } + } + VolumeHigh { + id: soundIcon3 + clip: true + visible: soundRoot.volumeIcon === "volumeHigh" + currentColor: PipewireIO.muted ? Qt.alpha(Config.colors.red900, 0.6) : Qt.alpha(soundRoot.soundHighlight, 0.6) + width: 24 * 1.5 + height: 24 * 1.5 + x: parent.width / 4 + y: -parent.height / 3 + rotation: 180 + } + VolumeMedium { + id: soundIcon2 + clip: true + visible: soundRoot.volumeIcon === "volumeMid" + currentColor: PipewireIO.muted ? Qt.alpha(Config.colors.red900, 0.6) : Qt.alpha(soundRoot.soundHighlight, 0.6) + width: 24 * 1.5 + height: 24 * 1.5 + x: parent.width / 4 + y: -parent.height / 3 + rotation: 180 + } + VolumeLow { + id: soundIcon1 + clip: true + visible: soundRoot.volumeIcon === "volumeLow" + currentColor: PipewireIO.muted ? Qt.alpha(Config.colors.red900, 0.6) : Qt.alpha(soundRoot.soundHighlight, 0.6) + width: 24 * 1.5 + height: 24 * 1.5 + x: parent.width / 4 + y: -parent.height / 3 + rotation: 180 + } + layer { + enabled: true + effect: OpacityMask { + maskSource: Background { + orient: "right" + border.color: "transparent" + color: "white" + width: soundBG.width + height: soundBG.height + } + } + } + Background { + id: soundBG + orient: "right" + border.color: soundRoot.soundHighlight + color: "transparent" + implicitWidth: soundRoot.width + implicitHeight: soundRoot.height + } + } + Rectangle { + id: micRoot + //clip: true + color: "transparent" + Layout.preferredWidth: micText.width * 1.8 + Layout.preferredHeight: parent.height + // border.color: micHighlight + // border.width: 2 + // topRightRadius: 30 + // bottomRightRadius: 30 + // topLeftRadius: 6 + // bottomLeftRadius: 6 + + // mic props + property int intMicVolume: PipewireIO.micVolume * 100 + property color micHighlight: Qt.lighter(Config.colors.mainColor3, 1.2) + + Text { + id: micText + anchors.centerIn: micRoot + width: root.elementWidth + color: micRoot.micHighlight + font.strikeout: PipewireIO.micMuted + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + + text: micRoot.intMicVolume + } + MouseArea { + id: micMouseArea + anchors.fill: parent + acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MiddleButton + cursorShape: Qt.PointingHandCursor + onWheel: event => { + event.accepted = true; + let volumeChange = event.angleDelta.y === -240 ? -0.03 : 0.03; + let newVolume = PipewireIO.micVolume + volumeChange; + let nullishVolume = Math.max(newVolume, 0); + PipewireIO.activeSource.audio.volume = nullishVolume; + } + onClicked: { + PipewireIO.micMuted = !PipewireIO.micMuted; + } + } + MicrophoneOutline { + id: micIcon1 + clip: true + currentColor: PipewireIO.micMuted ? Qt.alpha(Config.colors.red600, 0.6) : Qt.alpha(micRoot.micHighlight, 0.6) + width: 24 * 1.5 + height: 24 * 1.5 + x: -12 + y: -11 + } + layer { + enabled: true + effect: OpacityMask { + maskSource: Background { + border.color: "transparent" + color: "white" + width: micBG.width + height: micBG.height + } + } + } + Background { + id: micBG + orient: "left" + border.color: micRoot.micHighlight + color: "transparent" + implicitWidth: micRoot.width + implicitHeight: micRoot.height + } + } + } + component Background: Rectangle { + // set border width, size, radius + property string orient + border.width: 2 + topRightRadius: orient === "right" ? 6 : 30 + bottomRightRadius: orient === "right" ? 6 : 30 + topLeftRadius: orient === "right" ? 30 : 6 + bottomLeftRadius: orient === "right" ? 30 : 6 + } +} diff --git a/components/media/MprisComponent.qml b/components/media/MprisComponent.qml index 3253643..c02ae7c 100644 --- a/components/media/MprisComponent.qml +++ b/components/media/MprisComponent.qml @@ -1,13 +1,19 @@ import QtQuick +import QtQuick.Layouts +import QtQuick.VectorImage +import QtQuick.Controls import Quickshell import Quickshell.Services.Mpris import "root:/io" import "root:/" +import "../shared" Rectangle { id: root - anchors.centerIn: parent + + // actual player + property MprisPlayer player: MprisIO.trackedPlayer ?? fallbackPlayer // fallback for missing MprisPlayer on startup property QtObject fallbackPlayer: QtObject { @@ -16,42 +22,219 @@ Rectangle { property string trackTitle: "" property int playbackState: MprisPlaybackState.Stopped } - property QtObject player: MprisIO.trackedPlayer ?? fallbackPlayer // destructuring of the Player object + // -- compliance to MPRIS + property bool canRaise: player.canRaise + property bool canQuit: player.canQuit + property bool canPause: player.canPause + property bool canSeek: player.canSeek + property bool canPlay: player.canPlay + property bool canTogglePlaying: player.canTogglePlaying + property bool canGoNext: player.canGoNext + property bool canGoPrevious: player.canGoPrevious + property bool canSetFullscreen: player.canSetFullscreen + property bool canLength: player.lengthSupported + property bool canShuffle: player.shuffleSupported + property bool canPosition: player.positionSupported + property bool canVolume: player.volumeSupported + property bool canLoop: player.loopSupported + property list supportedUri: player.supportedUriSchemes + property list supportedMime: player.supportedMimeTypes + + // -- props + property int uniqueId: player.uniqueId + property string playerIdentity: player.identity + property string trackArt: player.trackArtUrl + property string trackAlbum: player.trackAlbum + property string trackLink: player.metadata["xesam:url"] + property list playerArr: trackLink.split("\/") + property string playerName: playerArr[2].startsWith("www.") ? playerArr[2].slice(4, playerArr[2].lastIndexOf(".")) : playerArr[2].slice(0, playerArr[2].lastIndexOf(".")) + property string playerAttribute: playerArr[3] property string artist: player.trackAlbumArtist || player.trackArtists property string title: player.trackTitle + property real position: player.position + property real length: player.length + + // -- states property bool playing: player.playbackState === MprisPlaybackState.Playing - property string playbackBG: playing ? Config.colors.mainColor4 : "#9a273453" - property string playbackFG: playing ? Config.colors.neutral : Config.colors.fontcolor + property bool loopedTrack: player.loopState === MprisLoopState.Track + property bool loopedPlaylist: player.loopState === MprisLoopState.Playlist + property bool fullscreen: canSetFullscreen ? player.fullscreen : false + + // base colors + property string playbackBG: playing ? Qt.alpha(Config.colors.mainColor4, 0.3) : Qt.alpha(Config.colors.mainColor1, 0.3) + property string playbackFG: playing ? Config.colors.mainColor4 : Qt.alpha(Config.colors.fontcolor, 0.3) + + // settings + implicitHeight: Config.sizes.barHeight + implicitWidth: artistData.width color: playbackBG - height: 28 - implicitWidth: text.width + 30 - radius: 15 - MouseArea { - anchors.fill: parent - anchors.centerIn: parent - acceptedButtons: Qt.LeftButton | Qt.RightButton - Text { - id: text - color: root.playbackFG - elide: Text.ElideRight - maximumLineCount: 20 - anchors.centerIn: parent - width: 250 - horizontalAlignment: Text.AlignHCenter - font { - bold: true - letterSpacing: 0 - } - text: root.artist + " | " + root.title + Behavior on width { + NumberAnimation { + duration: 200 + easing.type: Easing.InOutQuad } - onClicked: mouse => { - if (root.playing) { - root.player.pause(); - } else { - root.player.play(); + } + + // elements + Rectangle { + id: artistData + width: artistDataLayout.width + height: parent.height + color: "transparent" + RowLayout { + id: artistDataLayout + spacing: 6 + height: Config.sizes.barHeight + implicitWidth: albumArtRect.calculatedWidth + controlsRect.calculatedWidth + artistTrackRect.calculatedWidth + 6 * 3 + + Rectangle { + id: albumArtRect + Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter + Layout.preferredHeight: Config.sizes.barHeight + Layout.maximumWidth: Config.sizes.barHeight * 2 + Layout.minimumWidth: Config.sizes.barHeight + Layout.preferredWidth: albumArt.paintedWidth + property int calculatedWidth: albumArt.paintedWidth + color: "transparent" + + Image { + id: albumArt + visible: root.trackArt.length > 0 + fillMode: Image.PreserveAspectFit + height: Config.sizes.barHeight + width: { + let width = Config.sizes.barHeight; + if (root.playerName === "youtube") { + width *= 2; + } + return width; + } + mipmap: true + horizontalAlignment: Image.AlignLeft + verticalAlignment: Image.AlignTop + cache: root.playerName === "music.youtube" + source: root.trackArt + } + Behavior on Layout.preferredWidth { + NumberAnimation { + duration: 200 + easing.type: Easing.InOutQuad + } + } + } + Rectangle { + id: artistTrackRect + Layout.alignment: Qt.AlignLeft | Qt.AlignTop + Layout.preferredHeight: Config.sizes.barHeight + property int calculatedWidth + Layout.preferredWidth: { + if (artistText.implicitWidth > trackText.implicitWidth) { + calculatedWidth = artistText.implicitWidth + 42; + return artistText.implicitWidth + 42; + } + calculatedWidth = trackText.width + 42; + return trackText.width + 42; + } + color: "transparent" + Text { + id: artistText + color: Qt.lighter(Config.colors.mainColor2, 1.8) + anchors.top: parent.top + anchors.topMargin: 4 + font { + bold: true + letterSpacing: 1 + pixelSize: 12 + } + text: root.artist + } + Text { + id: trackText + color: root.playbackFG + elide: Text.ElideRight + width: 200 + maximumLineCount: 10 + anchors.top: artistText.bottom + font { + bold: true + letterSpacing: 0 + } + text: root.title + } + MouseArea { + id: artistDataMouseArea + anchors.fill: parent + acceptedButtons: Qt.LeftButton | Qt.RightButton + cursorShape: Qt.PointingHandCursor + onClicked: mouse => { + root.player.togglePlaying(); + } + } + } + Rectangle { + id: controlsRect + Layout.alignment: Qt.AlignRight | Qt.AlignVCenter + Layout.preferredHeight: Config.sizes.barHeight + Layout.preferredWidth: controlsLayout.width + color: "transparent" + property color controlColor: Config.colors.mainColor4 + property color noControlColor: Config.colors.neutral + property int calculatedWidth: controlsLayout.width + RowLayout { + id: controlsLayout + width: Config.sizes.barHeight * children.length + height: parent.height + ButtonComponent { + id: prevButton + size: 30 + setInactiveColor: Qt.alpha(controlsRect.noControlColor, 0.3) + setActiveColor: Qt.alpha(controlsRect.controlColor, 0.8) + canInteract: root.canGoPrevious + radius: Config.sizes.mainRadius + VectorImage { + preferredRendererType: VectorImage.GeometryRenderer + anchors.centerIn: parent + source: "root:/svg/media/skip-previous-outline.svg" + } + onPressEvent: root.player.previous() + } + ButtonComponent { + id: playPauseButton + size: 30 + setInactiveColor: Qt.alpha(controlsRect.noControlColor, 0.3) + setActiveColor: Qt.alpha(controlsRect.controlColor, 0.8) + canInteract: root.canTogglePlaying || (root.canPlay && root.canPause) + radius: Config.sizes.mainRadius + VectorImage { + preferredRendererType: VectorImage.GeometryRenderer + anchors.centerIn: parent + source: !root.playing ? "root:/svg/media/play-outline.svg" : "root:/svg/media/pause.svg" + } + onPressEvent: { + if (root.canTogglePlaying) { + return root.player.togglePlaying(); + } + return root.playing ? root.player.pause() : root.player.play(); + } + } + ButtonComponent { + id: nextButton + size: 30 + setInactiveColor: Qt.alpha(controlsRect.noControlColor, 0.3) + setActiveColor: Qt.alpha(controlsRect.controlColor, 0.8) + canInteract: root.canTogglePlaying || (root.canPlay && root.canPause) + radius: Config.sizes.mainRadius + VectorImage { + preferredRendererType: VectorImage.GeometryRenderer + anchors.centerIn: parent + source: "root:/svg/media/skip-next-outline.svg" + } + onPressEvent: root.player.next() + } + } } } } diff --git a/components/menu/AppMenu.qml b/components/menu/AppMenu.qml new file mode 100644 index 0000000..4cc9d93 --- /dev/null +++ b/components/menu/AppMenu.qml @@ -0,0 +1,42 @@ +import QtQuick +import Quickshell + +import "root:/" +import "root:/io" +import "root:/svg/qml" + +Rectangle { + id: root + width: 24 + implicitHeight: 30 + anchors.centerIn: parent + color: "transparent" + property bool showPopup: false + + MouseArea { + id: mouseArea1 + anchors.fill: parent + hoverEnabled: true + cursorShape: Qt.PointingHandCursor + onEntered: { + rootIcon.currentColor = Config.colors.red700; + } + onExited: { + rootIcon.currentColor = Config.colors.mainColor4; + } + onClicked: { + root.showPopup = !root.showPopup; + } + } + + ArchIcon { + id: rootIcon + anchors.centerIn: parent + currentColor: Config.colors.mainColor4 + Behavior on currentColor { + ColorAnimation { + duration: 300 + } + } + } +} diff --git a/components/menu/AppMenuPopup.qml b/components/menu/AppMenuPopup.qml new file mode 100644 index 0000000..4bced15 --- /dev/null +++ b/components/menu/AppMenuPopup.qml @@ -0,0 +1,60 @@ +import Quickshell +import Quickshell.Widgets +import QtQuick + +import "root:/" +import "root:/io" +import "../shared" +import "./appmenugrid" + +Popup { + id: root + required property QsWindow window + required property Item parentRect + required property bool show + setWindow: window + setParentRect: parentRect + setShow: show + setWidth: appmenugrid.implicitWidth + 24 + setHeight: appmenugrid.implicitHeight + 24 + BorderSubtle { + gradientColor1: Config.colors.mainColor4 + gradientColor2: Config.colors.mainColor3 + } + BorderSubtle { + orientRight: true + gradientColor1: Config.colors.mainColor4 + gradientColor2: Config.colors.mainColor3 + } + WrapperRectangle { + id: rootrect + // props + + // sizing + anchors.fill: parent + + // styling + clip: true + opacity: root.show ? 1 : 0 + color: Qt.alpha(Config.colors.mainColor2, 0.1) + //border.width: 1 + //border.color: Config.colors.mainColor3 + radius: Config.sizes.mainRadius + scale: root.show ? 1 : 0.8 + Behavior on opacity { + NumberAnimation { + duration: 200 + easing.type: Easing.InOutQuad + } + } + Behavior on scale { + NumberAnimation { + duration: 200 + easing.type: Easing.InOutQuad + } + } + child: AppMenuGrid { + id: appmenugrid + } + } +} diff --git a/components/menu/SysMenu.qml b/components/menu/SysMenu.qml new file mode 100644 index 0000000..1f9b0ab --- /dev/null +++ b/components/menu/SysMenu.qml @@ -0,0 +1,48 @@ +import QtQuick +import QtQuick.Controls +import Quickshell.Io +import Quickshell.Widgets + +import "root:/" +import "root:/io" +import "root:/svg/qml" + +Rectangle { + id: root + width: 24 + height: 30 + anchors.centerIn: parent + + color: "transparent" + MouseArea { + id: mouseArea1 + anchors.fill: parent + hoverEnabled: true + cursorShape: Qt.PointingHandCursor + onClicked: { + wlogout.running = true; + } + onEntered: { + rootIcon.currentColor = Config.colors.red700; + } + onExited: { + rootIcon.currentColor = Config.colors.mainColor4; + } + } + PowerIcon { + id: rootIcon + anchors.centerIn: parent + currentColor: Config.colors.mainColor4 + Behavior on currentColor { + ColorAnimation { + duration: 300 + } + } + } + Process { + id: wlogout + command: ["wlogout"] + running: false + onExited: running = false + } +} diff --git a/components/menu/appmenugrid/AppMenuGrid.qml b/components/menu/appmenugrid/AppMenuGrid.qml new file mode 100644 index 0000000..6f30f3c --- /dev/null +++ b/components/menu/appmenugrid/AppMenuGrid.qml @@ -0,0 +1,70 @@ +import QtQuick +import Quickshell +import QtQuick.Layouts + +import "root:/" + +GridLayout { + id: root + anchors.centerIn: parent + columns: 5 + rows: 4 + columnSpacing: 12 + rowSpacing: 12 + implicitHeight: ((children.length - 1) * 150) + (children.length * 12) + 50 + implicitWidth: 100 * children.length + children.length * 12 + + UserArtItem { + Layout.horizontalStretchFactor: 0 + Layout.fillWidth: true + Layout.preferredHeight: 150 + Layout.maximumWidth: root.implicitWidth / 4 + Layout.columnSpan: 1 + Layout.column: 1 + Layout.row: 1 + } + UserSessionItem { + Layout.horizontalStretchFactor: 2 + Layout.fillWidth: true + Layout.preferredHeight: 150 + Layout.preferredWidth: 200 + Layout.maximumWidth: root.implicitWidth - root.implicitWidth / 4 + Layout.columnSpan: 3 + Layout.column: 2 + Layout.row: 1 + } + DesktopAppsItem { + Layout.preferredHeight: 150 + Layout.preferredWidth: root.implicitWidth + Layout.columnSpan: 4 + Layout.column: 1 + Layout.row: 2 + } + WeatherItem { + Layout.horizontalStretchFactor: 2 + Layout.fillWidth: true + Layout.preferredHeight: 150 + Layout.preferredWidth: 200 + Layout.maximumWidth: root.implicitWidth - root.implicitWidth / 4 + Layout.columnSpan: 3 + Layout.column: 1 + Layout.row: 3 + } + CommonWidgets { + Layout.horizontalStretchFactor: 0 + Layout.fillWidth: true + Layout.preferredWidth: root.implicitWidth / 4 + Layout.preferredHeight: 150 + Layout.columnSpan: 1 + Layout.column: 4 + Layout.row: 3 + } + SystemTrayItem { + Layout.alignment: Qt.AlignHCenter + Layout.preferredHeight: 50 + Layout.preferredWidth: root.implicitWidth - root.implicitWidth / 4 + Layout.columnSpan: 4 + Layout.column: 1 + Layout.row: 4 + } +} diff --git a/components/menu/appmenugrid/CommonWidgets.qml b/components/menu/appmenugrid/CommonWidgets.qml new file mode 100644 index 0000000..71d391e --- /dev/null +++ b/components/menu/appmenugrid/CommonWidgets.qml @@ -0,0 +1,81 @@ +import QtQuick +import QtQuick.VectorImage +import Quickshell.Widgets + +import "root:/" + +Rectangle { + id: root + color: Qt.alpha(Config.colors.mainColor5, 0.1) + radius: Config.sizes.mainRadius + Grid { + id: widgetGrid + anchors.centerIn: parent + columns: 2 + rows: 2 + columnSpacing: 25 + rowSpacing: 25 + padding: 15 + + ClippingRectangle { + width: 54 + height: 54 + color: Qt.alpha(Config.colors.fontcolor, 0.1) + radius: Config.sizes.mainRadius + border.width: 1 + border.color: Qt.alpha(Config.colors.fontcolor, 0.2) + VectorImage { + anchors.centerIn: parent + width: 36 + height: 36 + preferredRendererType: VectorImage.CurveRenderer + source: "root:/svg/radioactive-circle-outline.svg" + } + } + ClippingRectangle { + width: 54 + height: 54 + color: Qt.alpha(Config.colors.fontcolor, 0.1) + radius: Config.sizes.mainRadius + border.width: 1 + border.color: Qt.alpha(Config.colors.fontcolor, 0.2) + VectorImage { + anchors.centerIn: parent + width: 36 + height: 36 + preferredRendererType: VectorImage.CurveRenderer + source: "root:/svg/ui/lock-outline.svg" + } + } + ClippingRectangle { + width: 54 + height: 54 + color: Qt.alpha(Config.colors.fontcolor, 0.1) + radius: Config.sizes.mainRadius + border.width: 1 + border.color: Qt.alpha(Config.colors.fontcolor, 0.2) + VectorImage { + anchors.centerIn: parent + width: 36 + height: 36 + preferredRendererType: VectorImage.CurveRenderer + source: "root:/svg/ui/wrench-outline.svg" + } + } + ClippingRectangle { + width: 54 + height: 54 + color: Qt.alpha(Config.colors.fontcolor, 0.1) + radius: Config.sizes.mainRadius + border.width: 1 + border.color: Qt.alpha(Config.colors.fontcolor, 0.2) + VectorImage { + anchors.centerIn: parent + width: 36 + height: 36 + preferredRendererType: VectorImage.CurveRenderer + source: "root:/svg/media/theater.svg" + } + } + } +} diff --git a/components/menu/appmenugrid/DesktopAppsItem.qml b/components/menu/appmenugrid/DesktopAppsItem.qml new file mode 100644 index 0000000..7f7119d --- /dev/null +++ b/components/menu/appmenugrid/DesktopAppsItem.qml @@ -0,0 +1,112 @@ +import QtQuick +import Quickshell +import Quickshell.Widgets + +import "root:/" +import "../../shared" +import "root:/io" + +ClippingWrapperRectangle { + id: root + color: Qt.alpha(Config.colors.mainColor3, 0.1) + radius: Config.sizes.mainRadius + property ObjectModel appItems: DesktopIO.apps + resizeChild: true + margin: 10 + BorderSubtle { + numOfBorders: 1 + orientVertical: true + gradientColor1: Config.colors.mainColor2 + gradientColor2: Config.colors.mainColor2 + } + child: GridView { + id: desktopEntriesGrid + width: parent.width + height: parent.height + model: root.appItems + cellHeight: height / 3 + 3.33 + cellWidth: width / 4 + populate: Transition { + NumberAnimation { + properties: "x,y" + duration: 300 + } + NumberAnimation { + property: "opacity" + from: 0 + to: 1 + duration: 300 + } + } + displaced: Transition { + NumberAnimation { + properties: "x,y" + duration: 300 + } + NumberAnimation { + property: "opacity" + from: 1 + to: 0 + duration: 300 + } + } + move: Transition { + NumberAnimation { + properties: "x,y" + duration: 1000 + } + } + delegate: Rectangle { + id: modelRect + required property QtObject modelData + height: 40 + width: root.width / 4 - 10 + radius: Config.sizes.mainRadius + color: Qt.alpha("white", 0.1) + ClippingRectangle { + id: icon + anchors.left: parent.left + anchors.verticalCenter: parent.verticalCenter + height: 40 + width: 40 + color: "transparent" + IconImage { + width: 30 + height: 30 + anchors.centerIn: parent + + source: Quickshell.iconPath(modelRect.modelData.icon, true) || "root:/svg/skull-outline.svg" + } + } + Text { + anchors.left: icon.right + height: parent.height + width: modelRect.width - 40 + elide: Text.ElideRight + color: Config.colors.fontcolor + verticalAlignment: Text.AlignVCenter + text: modelRect.modelData.name + } + MouseArea { + id: itemMouseArea + hoverEnabled: true + anchors.fill: parent + cursorShape: Qt.PointingHandCursor + onEntered: { + modelRect.color = Qt.alpha("white", 0.2); + } + onExited: { + modelRect.color = Qt.alpha("white", 0.1); + } + onClicked: { + console.log(modelRect.modelData.actions); + } + } + Behavior on color { + ColorAnimation { + duration: 200 + } + } + } + } +} diff --git a/components/menu/appmenugrid/SystemTrayItem.qml b/components/menu/appmenugrid/SystemTrayItem.qml new file mode 100644 index 0000000..5440443 --- /dev/null +++ b/components/menu/appmenugrid/SystemTrayItem.qml @@ -0,0 +1,15 @@ +import QtQuick +import Quickshell +import Quickshell.Widgets + +import "root:/" +import "../../systemctx/" + +WrapperRectangle { + id: root + color: Qt.alpha(Config.colors.mainColor3, 0.1) + radius: { + return Config.sizes.mainRadius; + } + SysTray {} +} diff --git a/components/menu/appmenugrid/UserArtItem.qml b/components/menu/appmenugrid/UserArtItem.qml new file mode 100644 index 0000000..7f3ec3a --- /dev/null +++ b/components/menu/appmenugrid/UserArtItem.qml @@ -0,0 +1,23 @@ +import QtQuick +import Quickshell.Widgets + +import "root:/" + +ClippingRectangle { + id: root + color: Qt.alpha("black", 1) + radius: Config.sizes.mainRadius + Image { + id: userAvatar + cache: true + sourceSize.width: 210 + sourceSize.height: 210 + width: parent.width + height: parent.height + anchors.centerIn: parent + horizontalAlignment: Image.AlignHCenter + verticalAlignment: Image.AlignVCenter + fillMode: Image.PreserveAspectCrop + source: "/home/xnzf/picture.png" + } +} diff --git a/components/menu/appmenugrid/UserSessionItem.qml b/components/menu/appmenugrid/UserSessionItem.qml new file mode 100644 index 0000000..7be1177 --- /dev/null +++ b/components/menu/appmenugrid/UserSessionItem.qml @@ -0,0 +1,50 @@ +import QtQuick + +import "root:/" +import "root:/io" +import "../../shared" + +Rectangle { + id: root + color: Qt.alpha(Config.colors.mainColor5, 0.1) + radius: Config.sizes.mainRadius + property string uptime: SystemSessionIO.uptime + BorderSubtle { + gradientColor1: Config.colors.mainColor6 + gradientColor2: Config.colors.yellow600 + numOfBorders: 1 + } + + Column { + anchors.verticalCenter: parent.verticalCenter + spacing: 15 + Text { + id: username + antialiasing: true + font.bold: true + font.pixelSize: 21 + font.letterSpacing: 1 + color: Config.colors.mainColor4 + leftPadding: 10 + text: Config.username + } + Text { + id: uptime + antialiasing: true + font.pixelSize: 18 + font.letterSpacing: 1 + color: Config.colors.yellow600 + leftPadding: 15 + text: root.uptime + } + Text { + id: distroText + antialiasing: true + font.pixelSize: 18 + font.letterSpacing: 1 + color: "darkturquoise" + leftPadding: 10 + text: Config.distro + } + } +} diff --git a/components/menu/appmenugrid/WeatherItem.qml b/components/menu/appmenugrid/WeatherItem.qml new file mode 100644 index 0000000..46e3942 --- /dev/null +++ b/components/menu/appmenugrid/WeatherItem.qml @@ -0,0 +1,226 @@ +import QtQuick +import QtQuick.VectorImage + +import "root:/" +import "root:/io" + +Rectangle { + id: root + color: Qt.alpha("hotpink", 0.1) + radius: Config.sizes.mainRadius + property var weather: WeatherIO.weather + property var currentWeather: WeatherIO.weather.current_weather + property string wmo_0: "Clear" + property string wmo_1_2_3: "Mainly Clear" + property string wmo_45_48: "Fog" + property string wmo_51_53_55: "Drizzle" + property string wmo_56_57: "Freezing Drizzle" + property string wmo_61_63_65: "Rain" + property string wmo_66_67: "Freezing Rain" + property string wmo_71_73_75: "Snowing" + property string wmo_77: "Snow Grains" + property string wmo_80_81_82: "Rain Shower" + property string wmo_85_86: "Snow Shower" + property string wmo_95: "Thunderstorm" + property string wmo_96_99: "Superthunderstorm" + VectorImage { + id: weatherIcon + height: parent.height - 15 + width: parent.height - 15 + anchors.verticalCenter: parent.verticalCenter + preferredRendererType: VectorImage.CurveRenderer + + source: { + let link; + switch (currentWeather.weathercode) { + case 0: + { + link = "root:/svg/weather/weather-sunny.svg"; + break; + } + case 1: + { + link = "root:/svg/weather/weather-partly-cloudy.svg"; + break; + } + case 2: + { + link = "root:/svg/weather/weather-partly-cloudy.svg"; + break; + } + case 3: + { + link = "root:/svg/weather/weather-partly-cloudy.svg"; + break; + } + case 45: + { + link = "root:/svg/weather/weather-fog.svg"; + break; + } + case (51 || 53 || 55): + { + link = "root:/svg/weather/weather-hazy.svg"; + break; + } + case (56 || 57): + { + link = "root:/svg/weather/weather-hazy.svg"; + break; + } + case 61: + { + link = "root:/svg/weather/weather-rain.svg"; + break; + } + case (66 || 67): + { + link = "root:/svg/weather/weather-rain.svg"; + break; + } + case 71: + { + link = "root:/svg/weather/weather-snowy.svg"; + break; + } + case 73: + { + link = "root:/svg/weather/weather-snowy-rainy.svg"; + break; + } + case 75: + { + link = "root:/svg/weather/weather-snowy-heavy.svg"; + break; + } + case (77): + { + link = "root:/svg/weather/weather-rain.svg"; + break; + } + case (80 || 81 || 82): + { + link = "root:/svg/weather/weather-rain.svg"; + break; + } + case (85 || 86): + { + link = "root:/svg/weather/weather-rain.svg"; + break; + } + case (95): + { + link = "root:/svg/weather/weather-rain.svg"; + break; + } + case (96 || 99): + { + link = "root:/svg/weather/weather-rain.svg"; + break; + } + } + return link; + } + } + Rectangle { + id: weatherData + width: root.width - weatherIcon.width - 15 + height: root.height - 15 + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + color: "transparent" + Text { + antialiasing: true + font.pixelSize: weatherData.height / 3 + topPadding: 5 + font.letterSpacing: 3 + property string temperature: root.weather.current_weather.temperature + color: Number(temperature) > 15 ? Config.colors.yellow900 : "darkturquoise" + text: `${Number(temperature) > 0 ? "+" : ""}${temperature}°C` + } + Text { + id: cityText + antialiasing: true + font.pixelSize: weatherData.height / 5 + topPadding: weatherData.height / 3 + 10 + font.letterSpacing: 1 + color: Qt.lighter("dodgerblue", 1.2) + text: "Kyiv" + } + Text { + antialiasing: true + font.pixelSize: 18 + anchors.top: cityText.bottom + font.letterSpacing: 1 + color: Qt.alpha(Config.colors.fontcolor, 0.6) + text: { + let link; + switch (root.currentWeather.weathercode) { + case 0: + link = root.wmo_0; + break; + case 1: + link = root.wmo_1_2_3; + break; + case 2: + link = root.wmo_1_2_3; + break; + case 3: + link = root.wmo_1_2_3; + break; + case (45 || 48): + link = root.wmo_45_48; + break; + case (51 || 53 || 55): + link = root.wmo_51_53_55; + break; + case (56 || 57): + link = root.wmo_56_57; + break; + case (61 || 63 || 65): + link = root.wmo_61_63_65; + break; + case (66 || 67): + link = root.wmo_66_67; + break; + case (71 || 73 || 75): + link = root.wmo_71_73_75; + break; + case (77): + link = root.wmo_77; + break; + case (80 || 81 || 82): + link = root.wmo_80_81_82; + break; + case (85 || 86): + link = root.wmo_85_86; + break; + case (95): + link = root.wmo_95; + break; + case (96 || 99): + link = root.wmo_96_99; + break; + default: + link = "it's raining men"; + break; + } + return link; + } + } + Row { + Text { + visible: false + antialiasing: true + color: Config.colors.fontcolor + text: root.weather.current_weather.winddirection + } + Text { + visible: false + antialiasing: true + color: Config.colors.fontcolor + text: root.weather.current_weather.windspeed + } + } + } +} diff --git a/components/shared/BarItem.qml b/components/shared/BarItem.qml index 40964dd..f131db8 100644 --- a/components/shared/BarItem.qml +++ b/components/shared/BarItem.qml @@ -9,6 +9,6 @@ Rectangle { color: "transparent" implicitWidth: item.width - implicitHeight: item.implicitHeight + implicitHeight: 39 children: [item] } diff --git a/components/shared/BorderSubtle.qml b/components/shared/BorderSubtle.qml new file mode 100644 index 0000000..b1df7a0 --- /dev/null +++ b/components/shared/BorderSubtle.qml @@ -0,0 +1,41 @@ +import QtQuick + +Rectangle { + id: root + property color gradientColor1 + property color gradientColor2 + property bool orientVertical: false + property bool orientRight: orientVertical === true || false + property int numOfBorders: 2 + anchors.left: orientRight ? undefined : parent.left + anchors.right: orientRight ? parent.right : undefined + anchors.verticalCenter: orientRight ? undefined : parent.verticalCenter + anchors.horizontalCenter: orientVertical ? parent.horizontalCenter : undefined + anchors.bottom: orientRight ? parent.bottom : undefined + height: orientVertical ? 1 : parent.height - (parent.height / 4) + width: orientVertical ? parent.width - (parent.width / 4) : 1 + radius: parent.radius ? parent.radius : 0 + gradient: Gradient { + orientation: root.orientVertical ? Gradient.Horizontal : Gradient.Vertical + GradientStop { + position: 0.0 + color: "transparent" + } + GradientStop { + position: 0.25 + color: root.gradientColor1 + } + GradientStop { + position: 0.5 + color: root.numOfBorders > 1 ? "transparent" : root.gradientColor2 + } + GradientStop { + position: 0.75 + color: root.numOfBorders > 1 ? root.gradientColor2 : root.gradientColor1 + } + GradientStop { + position: 1.0 + color: "transparent" + } + } +} diff --git a/components/shared/ButtonComponent.qml b/components/shared/ButtonComponent.qml new file mode 100644 index 0000000..941875a --- /dev/null +++ b/components/shared/ButtonComponent.qml @@ -0,0 +1,64 @@ +import QtQuick + +Rectangle { + id: root + + default required property Item item + + property int size: 24 + + required property color setActiveColor + required property color setInactiveColor + + property bool coloredIcon + + property bool canInteract + signal pressEvent + property bool releaseEventNeeded + signal releaseEvent + + property color currentColor: canInteract ? setActiveColor : setInactiveColor + + implicitWidth: size + implicitHeight: size + color: { + if (coloredIcon) { + return "transparent"; + } + return currentColor; + } + + MouseArea { + id: buttonMouseArea + hoverEnabled: true + anchors.fill: parent + acceptedButtons: Qt.LeftButton | Qt.RightButton + cursorShape: root.canInteract ? Qt.PointingHandCursor : Qt.ForbiddenCursor + onPressed: mouse => { + if (root.canInteract) { + root.pressEvent(); + } + } + onReleased: mouse => { + if (root.releaseEventNeeded) { + root.releaseEvent(); + } + } + onEntered: { + if (root.canInteract) { + root.currentColor = Qt.alpha(root.setActiveColor, 1); + } + } + onExited: { + if (root.canInteract) { + root.currentColor = Qt.alpha(root.setActiveColor, 0.8); + } + } + } + children: [buttonMouseArea, item] + Behavior on currentColor { + ColorAnimation { + duration: 200 + } + } +} diff --git a/components/shared/DotDecoration.qml b/components/shared/DotDecoration.qml index 5bc676b..a19cac3 100644 --- a/components/shared/DotDecoration.qml +++ b/components/shared/DotDecoration.qml @@ -1,35 +1,20 @@ import QtQuick -import QtQuick.Controls -import QtQuick.Layouts -import Quickshell -import Quickshell.Hyprland import "root:/" -import "root:/io" Rectangle { id: root - required property HyprlandWorkspace modelData - property string workspaceColor: HyprlandIO.activeWorkspace.id == modelData.id ? "#82aaff" : "#273463" - implicitWidth: 13 - implicitHeight: 13 - color: workspaceColor - radius: 30 - MouseArea { - acceptedButtons: Qt.LeftButton | Qt.RightButton - width: parent.width - height: parent.height - anchors.bottom: parent.bottom - onClicked: mouse => { - console.log(Hyprland.workspaces); - } - Text { - color: "#95d3af" - anchors.centerIn: parent - font.pixelSize: 12 - font.family: "Hack Nerd Font Mono" - width: text.width - text: root.height <= 15 ? "" : modelData.id - } + default property bool transparent + property int spacing + implicitWidth: spacing ? spacing : 12 + anchors.fill: parent + color: "transparent" + Rectangle { + id: dot + implicitWidth: 6 + implicitHeight: 6 + anchors.centerIn: parent + radius: 30 + color: root.transparent ? "transparent" : Qt.alpha(Config.colors.navy500, 0.5) } } diff --git a/components/shared/DotFunctional.qml b/components/shared/DotFunctional.qml new file mode 100644 index 0000000..2d313c2 --- /dev/null +++ b/components/shared/DotFunctional.qml @@ -0,0 +1,47 @@ +import QtQuick +import QtQuick.Layouts + +import "root:/" + +Rectangle { + id: root + property int spacing + property color ccolor + required property int dotSize + property bool hovered: false + implicitWidth: hovered ? dotSize * 1.8 : dotSize + implicitHeight: hovered ? dotSize * 1.8 : dotSize + Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter + color: hovered ? Qt.alpha(Config.colors.fontcolor, 0.2) : "transparent" + border.width: 1 + border.color: hovered ? Qt.alpha(Config.colors.fontcolor, 0.6) : "transparent" + radius: 30 + Rectangle { + id: dot + implicitWidth: root.dotSize + implicitHeight: root.dotSize + anchors.centerIn: parent + radius: 30 + color: root.ccolor ? root.ccolor : Qt.alpha(Config.colors.red500, 0.5) + Behavior on implicitWidth { + NumberAnimation { + duration: 200 + } + } + Behavior on implicitHeight { + NumberAnimation { + duration: 200 + } + } + } + Behavior on implicitWidth { + NumberAnimation { + duration: 200 + } + } + Behavior on implicitHeight { + NumberAnimation { + duration: 200 + } + } +} diff --git a/components/shared/Popup.qml b/components/shared/Popup.qml new file mode 100644 index 0000000..e54c2a1 --- /dev/null +++ b/components/shared/Popup.qml @@ -0,0 +1,32 @@ +import Quickshell +import QtQuick + +PopupWindow { + id: root + required property QsWindow setWindow + required property Item setParentRect + required property bool setShow + property var coordinates: setShow && setWindow.contentItem.mapFromItem(setParentRect, 0, 0) + property int setWidth: 500 + property int setHeight: 500 + anchor { + window: root.setWindow + rect { + x: { + //let coord = setWindow.contentItem.mapFromItem(setParentRect, 0, 0); + //let coordX = setWindow.width + coord.x; + if (root.coordinates) { + let coordXstr = root.coordinates.x.toString(); + let coordX = coordXstr.startsWith("-") ? setWindow.width - Number(coordXstr.slice(1)) : Number(coordXstr); + return coordX < setWidth ? coordX - 18 : coordX - width / 2; + } + return 0; + } + y: setWindow.height + 8 + } + } + width: setWidth + height: setHeight + color: "transparent" + visible: setShow +} diff --git a/components/shared/Tint.qml b/components/shared/Tint.qml index 7013fd4..0d5c70f 100644 --- a/components/shared/Tint.qml +++ b/components/shared/Tint.qml @@ -1,30 +1,26 @@ import QtQuick import QtQuick.Shapes -Item { - id: root +Shape { + id: tint anchors.fill: parent - - Shape { - id: tint - anchors.fill: parent - width: parent.width - height: parent.height - ShapePath { - fillGradient: RadialGradient { - centerY: tint.y / 2 - centerX: tint.x / 2 - centerRadius: 100 - focalY: centerY - focalX: centerX - GradientStop { - position: 0 - color: "transparent" - } - GradientStop { - position: 1 - color: "#000000" - } + width: parent.width + height: parent.height + ShapePath { + fillGradient: RadialGradient { + centerY: tint.height / 2 + centerX: tint.width / 2 + centerRadius: 100 + focalY: centerY + focalX: centerX + focalRadius: 0 + GradientStop { + position: 0 + color: "#0000ff" + } + GradientStop { + position: 1 + color: "#ff0000" } } } diff --git a/components/systemctx/MemStat.qml b/components/systemctx/MemStat.qml index d1e32f6..6186579 100644 --- a/components/systemctx/MemStat.qml +++ b/components/systemctx/MemStat.qml @@ -6,7 +6,6 @@ import "root:/" Rectangle { id: root - anchors.centerIn: parent implicitWidth: (memtext.memory < 20 ? 66 : 72) + 30 implicitHeight: Config.sizes.barHeight diff --git a/components/systemctx/SysTray.qml b/components/systemctx/SysTray.qml index 5ec9c47..b72f863 100644 --- a/components/systemctx/SysTray.qml +++ b/components/systemctx/SysTray.qml @@ -1,55 +1,80 @@ import QtQuick import QtQuick.Layouts -import QtQuick.Controls import Quickshell import Quickshell.Services.SystemTray +import Quickshell.Widgets import "root:/" RowLayout { id: root - spacing: 3 - required property QsWindow window - width: 28 * repeater.count + 30 - implicitHeight: Config.sizes.barHeight + spacing: 6 + implicitWidth: 28 * repeater.count + implicitHeight: Config.sizes.barHeight - 10 anchors.centerIn: parent Repeater { id: repeater model: SystemTray.items property int count: SystemTray.items.values.length - height: parent.implicitHeight - width: parent.width + Layout.preferredHeight: root.implicitHeight + Layout.preferredWidth: root.implicitWidth Rectangle { id: toprect - radius: 30 + //radius: 30 required property SystemTrayItem modelData - implicitHeight: Config.sizes.barHeight color: "transparent" - Layout.fillWidth: true + Layout.preferredWidth: 36 + Layout.maximumWidth: 36 + Layout.preferredHeight: 36 + Layout.maximumHeight: 36 Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter - Layout.fillHeight: true MouseArea { + cursorShape: Qt.PointingHandCursor propagateComposedEvents: true acceptedButtons: Qt.LeftButton | Qt.RightButton - width: 21 - height: 21 - anchors.centerIn: parent - Image { - source: modelData.icon - height: 21 - width: 21 + anchors.fill: parent + IconImage { + id: trayIcon + source: toprect.modelData.icon + height: 28 + width: 28 anchors.centerIn: parent } onClicked: mouse => { if (mouse.button == Qt.LeftButton) { - modelData.activate(); + toprect.modelData.activate(); } else if (mouse.button == Qt.RightButton) { - let relX = window.width - toprect.x + root.width; - let coord = window.contentItem.mapFromItem(toprect, 0, 0); - modelData.display(window, coord.x, window.height + 3); + if (!menuOpener.anchor.window) { + menuOpener.anchor.window = toprect.QsWindow.window; + } + if (menuOpener.visible) { + menuOpener.close(); + } else { + menuOpener.open(); + } } } } + QsMenuAnchor { + id: menuOpener + menu: toprect.modelData.menu + anchor { + rect.x: 0 + rect.y: 0 + onAnchoring: { + if (anchor.window) { + let coords = anchor.window.contentItem.mapFromItem(toprect, 0, 0); + anchor.rect.x = coords.x; + anchor.rect.y = coords.y + 6; + } + } + rect.width: trayIcon.width + rect.height: trayIcon.height + gravity: Edges.Bottom + edges: Edges.Bottom + adjustment: PopupAdjustment.SlideY + } + } } } } diff --git a/components/updatecheck/UpdateComponent.qml b/components/updatecheck/UpdateComponent.qml new file mode 100644 index 0000000..0c8ab49 --- /dev/null +++ b/components/updatecheck/UpdateComponent.qml @@ -0,0 +1,72 @@ +import QtQuick +import Quickshell + +import "root:/" +import "root:/io" +import "root:/svg/qml" + +Rectangle { + id: root + property bool canRead: CheckUpdate.finished && CheckUpdate.readAllowed + property list updates: canRead ? CheckUpdate.updates : [] + property int numOfUpdates: canRead ? updates.length : 0 + property bool canUpdate: numOfUpdates > 0 + width: 24 + implicitHeight: 30 + anchors.centerIn: parent + color: "transparent" + + MouseArea { + id: mouseArea1 + anchors.fill: parent + hoverEnabled: true + cursorShape: Qt.PointingHandCursor + onPressed: { + CheckUpdate.runningcheck = true; + } + onEntered: { + if (root.hasUpdate) { + rootIcon.currentColor = Config.colors.yellow800; + } else { + rootIcon.currentColor = Config.colors.red700; + } + } + onExited: { + if (root.hasUpdate) { + rootIcon.currentColor = Config.colors.yellow600; + } else { + rootIcon.currentColor = Qt.alpha(Config.colors.red600, 0.3); + } + } + } + + DownloadOutline { + id: rootIcon + anchors.centerIn: parent + currentColor: root.canUpdate ? Config.colors.yellow600 : Qt.alpha(Config.colors.red600, 0.3) + Behavior on currentColor { + ColorAnimation { + duration: 300 + } + } + Rectangle { + id: updateCallout + x: 15 + y: 15 + width: numUpdates.width + 3 + height: 13 + radius: 30 + color: root.canUpdate ? Config.colors.yellow600 : "transparent" + Text { + id: numUpdates + anchors.centerIn: parent + font.pixelSize: 9 + color: root.canUpdate ? Config.colors.neutral : "transparent" + text: `${root.numOfUpdates}` + } + } + } + Component.onCompleted: { + CheckUpdate.runningcheck = true; + } +} diff --git a/io/CheckUpdate.qml b/io/CheckUpdate.qml new file mode 100644 index 0000000..3e5ee31 --- /dev/null +++ b/io/CheckUpdate.qml @@ -0,0 +1,53 @@ +pragma Singleton + +import QtQml +import QtQuick +import Quickshell +import Quickshell.Io + +Singleton { + id: root + property bool runningcheck: false + property bool finished + signal success(bool status) + property bool readAllowed: false + property string errorMsg + property list updates: [] + onSuccess: { + root.readAllowed = true; + } + + Process { + id: checkupdate + running: root.runningcheck + command: ["sh", "-c", "checkupdates & pacman -Qm | aur vercmp & wait"] + stdout: SplitParser { + onRead: data => { + const datasplit = data.split(" "); + const name = datasplit.shift(); + const versions = datasplit.join("").split("->"); + const oldVer = versions[0]; + const newVer = versions[1]; + const pacstr = `${name}|${oldVer}|${newVer}`; + root.updates.push(pacstr); + } + } + onStarted: { + root.updates = []; + root.finished = false; + } + onExited: (code, status) => { + if (code === 0) { + root.success(true); + } + root.runningcheck = false; + root.finished = true; + } + } + Timer { + interval: 6 * 60 * 60 * 1000 // hours * minutes * seconds * ms + running: true + repeat: true + onTriggered: root.runningcheck = true + } +} diff --git a/io/ClipboardIO.qml b/io/ClipboardIO.qml index e235169..c9d8732 100644 --- a/io/ClipboardIO.qml +++ b/io/ClipboardIO.qml @@ -5,31 +5,70 @@ import Quickshell import Quickshell.Io Singleton { - id: root; - property bool runninglist: false; - property bool runningwipe: false; - property bool runningcount: false; - signal cliphistcount(count: int); + id: root + property string decodeId + property bool runningdecode: false + + property var copyItem + property bool runningcopy + + property bool runninglist: false + property bool runningwipe: false + property bool runningcount: true + property int cliphistcount: 0 + property list cliphistlist: [] + + signal decoded(var data) + signal copy Process { - id: cliphistlist; - running: root.runninglist; - command: ["sh", "-c", "cliphist list | wofi --dmenu | cliphist decode | wl-copy"]; - onExited: root.runninglist = false; + id: cliphist + running: root.runninglist + command: ["sh", "-c", "cliphist list"] + stdout: SplitParser { + onRead: data => { + root.cliphistlist.push(data); + } + } + onExited: root.runninglist = false } Process { - id: cliphistwipe; - running: root.runningwipe; - command: ["cliphist", "wipe"]; - onExited: root.runningwipe = false; + id: cliphistwipe + running: root.runningwipe + command: ["sh", "-c", "cliphist wipe"] + onExited: root.runningwipe = false } Process { - id: cliphistcount; - running: root.runningcount; + id: cliphistcount + running: root.runningcount command: ["sh", "-c", "cliphist list | wc -l"] stdout: SplitParser { - onRead: data => root.cliphistcount(data); + onRead: data => { + root.cliphistcount = data; + if (Number(data) >= 500) { + root.runningwipe = true; + } + } + } + onExited: (code, status) => { + root.runningcount = false; + } + } + Process { + id: cliphistdecode + running: root.runningdecode + command: ["sh", "-c", `cliphist decode ${root.decodeId}`] + stdout: SplitParser { + onRead: data => { + root.decoded(data); + } } - onExited: root.runningcount = false; + onExited: root.runningdecode = false + } + Process { + id: cliphistcopy + running: root.runningcopy + command: ["sh", "-c", `wl-copy ${root.copyItem}`] + onExited: root.runningdecode = false } } diff --git a/io/DesktopIO.qml b/io/DesktopIO.qml new file mode 100644 index 0000000..8b3572a --- /dev/null +++ b/io/DesktopIO.qml @@ -0,0 +1,7 @@ +pragma Singleton +import Quickshell + +Singleton { + id: root + property ObjectModel apps: DesktopEntries.applications +} diff --git a/io/HyprlandIO.qml b/io/HyprlandIO.qml index 1d6b4ae..151cdc5 100644 --- a/io/HyprlandIO.qml +++ b/io/HyprlandIO.qml @@ -5,8 +5,8 @@ import Quickshell.Hyprland import QtQuick Singleton { - property string currKeyboardLayout: "US"; - property list sortedWorkspaces: sortWorkspaces(Hyprland.workspaces.values); + property string currKeyboardLayout: "US" + property list sortedWorkspaces: sortWorkspaces(Hyprland.workspaces.values) property QtObject activeWorkspace: QtObject { property int id: 1 property string name: "1" @@ -15,97 +15,122 @@ Singleton { property string hclass: " " property string title: " " } + property QtObject activeSpecial: QtObject { + property string id: "-1" + property string name: "special" + property bool active: false + } - function textTransform(layout){ + function textTransform(layout) { let transform; - switch (layout){ - case "English (US)": { + switch (layout) { + case "English (US)": + { transform = "US"; break; } - case "English (Dvorak)": { - transform = "DV" + case "English (Dvorak)": + { + transform = "DV"; break; } - case "Ukrainian": { - transform = "UA" + case "Ukrainian": + { + transform = "UA"; break; } - default: { - transform = "US" - break + default: + { + transform = "US"; + break; } } return transform; } - function titleTransform(hclass, title){ + function titleTransform(hclass, title) { let newTitle; switch (hclass) { - case "kitty": { - let VimIndex = title.lastIndexOf("vim") - let orVim = VimIndex !== -1 - newTitle = orVim ? "󰄛 " + title.slice(VimIndex + 3) + "  " :"󰄛 " + title + case "kitty": + { + let VimIndex = title.lastIndexOf("vim"); + let orVim = VimIndex !== -1; + newTitle = orVim ? "󰄛 " + title.slice(VimIndex + 3) + "  " : "󰄛 " + title; break; } - case "discord": { - newTitle = "󰙯 " + title.split("- Discord")[0] + case "discord": + { + newTitle = "󰙯 " + title.split("- Discord")[0]; break; } - case "google-chrome": { - let YTindex = title.lastIndexOf("YouTube") - let GoogleIndex = title.lastIndexOf("Google Chrome") - let orYT = YTindex !== -1 - let icon = orYT ? " " : " " - let processedTitle = title.slice(0, orYT ? YTindex -2 : GoogleIndex -2) - newTitle = icon + processedTitle - break + case "google-chrome": + { + let YTindex = title.lastIndexOf("YouTube"); + let GoogleIndex = title.lastIndexOf("Google Chrome"); + let orYT = YTindex !== -1; + let icon = orYT ? " " : " "; + let processedTitle = title.slice(0, orYT ? YTindex - 2 : GoogleIndex - 2); + newTitle = icon + processedTitle; + break; } - case "firefox": { - let YTindex = title.lastIndexOf("YouTube") - let GoogleIndex = title.lastIndexOf("Firefox") - let orYT = YTindex !== -1 - let icon = orYT ? " " : " " - let processedTitle = title.slice(0, orYT ? YTindex -2 : GoogleIndex -2) - newTitle = icon + processedTitle - break + case "firefox": + { + let YTindex = title.lastIndexOf("YouTube"); + let GoogleIndex = title.lastIndexOf("Firefox"); + let orYT = YTindex !== -1; + let icon = orYT ? " " : " "; + let processedTitle = title.slice(0, orYT ? YTindex - 2 : GoogleIndex - 2); + newTitle = icon + processedTitle; + break; } - default: { - newTitle = title + default: + { + newTitle = title; break; } } return newTitle; } - function sortWorkspaces(arr){ - return [...arr].sort((a, b) => a.id - b.id) + function sortWorkspaces(arr) { + return [...arr].sort((a, b) => a.id - b.id); } Connections { - target: Hyprland; + target: Hyprland function onRawEvent(event) { //console.log("EVENT NAME", event.name); //console.log("EVENT DATA", event.data); let eventName = event.name; switch (eventName) { - case "activelayout": { - let layout = event.parse(2)[1] - currKeyboardLayout = textTransform(layout) + case "activelayout": + { + let layout = event.parse(2)[1]; + currKeyboardLayout = textTransform(layout); break; } - case "workspacev2": { - let workspace = event.parse(2) + case "workspacev2": + { + let workspace = event.parse(2); activeWorkspace.id = workspace[0]; activeWorkspace.name = workspace[1]; break; } - case "activewindow": { - let window = event.parse(2) + case "activewindow": + { + let window = event.parse(2); activeWindow.hclass = window[0]; activeWindow.title = titleTransform(window[0], window[1]) ?? ""; break; } + case "activespecial": + { + let special = event.parse(2); + activeSpecial.id = special[0]; + activeSpecial.name = special[1]; + activeSpecial.active = special[1] !== null; + break; + } } } } diff --git a/io/Memory.qml b/io/Memory.qml index 5ebcac3..4710d89 100644 --- a/io/Memory.qml +++ b/io/Memory.qml @@ -1,5 +1,6 @@ pragma Singleton +import QtQml import QtQuick import Quickshell import Quickshell.Io @@ -11,25 +12,28 @@ Singleton { property real used: total - free Timer { - interval: 1000 + interval: 10000 running: true repeat: true triggeredOnStart: true - onTriggered: meminfo.running = true + onTriggered: { + meminfo.path = "/proc/meminfo"; + meminfo.reload(); + } } - Process { + FileView { id: meminfo - running: true - command: ["cat", "/proc/meminfo"] - stdout: SplitParser { - splitMarker: "" - onRead: data => { - //print(data); - let totalgb = Number(data.match(/MemTotal:\s+(\d+)/)[1]) / 1000000; - let freegb = Number(data.match(/MemAvailable:\s+(\d+)/)[1]) / 1000000; + path: "/proc/meminfo" + onTextChanged: { + const text = meminfo.text(); + if (meminfo.loaded && text) { + const totalgb = Number(text.match(/MemTotal:\s+(\d+)/)[1]) / 1000000; + const freegb = Number(text.match(/MemAvailable:\s+(\d+)/)[1]) / 1000000; root.total = totalgb.toFixed(1); root.free = freegb.toFixed(1); - meminfo.running = false; + meminfo.path = ""; + } else { + meminfo.reload(); } } } diff --git a/io/PipewireIO.qml b/io/PipewireIO.qml index 1dfe63a..e4ade4a 100644 --- a/io/PipewireIO.qml +++ b/io/PipewireIO.qml @@ -3,21 +3,20 @@ pragma Singleton import QtQuick import Quickshell import Quickshell.Services.Pipewire -import Quickshell.Io Singleton { - id: root; + id: root PwObjectTracker { - objects: [ Pipewire.defaultAudioSink, Pipewire.defaultAudioSource ] + objects: [Pipewire.defaultAudioSink, Pipewire.defaultAudioSource] } - property PwNode activeSink: Pipewire.defaultAudioSink; - property PwNode activeSource: Pipewire.defaultAudioSource; + property PwNode activeSink: Pipewire.defaultAudioSink + property PwNode activeSource: Pipewire.defaultAudioSource - property real volume: activeSink?.audio?.volume ?? 0; - property real micVolume: activeSource?.audio?.volume ?? 0; + property real volume: activeSink?.audio?.volume ?? 0 + property real micVolume: activeSource?.audio?.volume ?? 0 - property bool muted: activeSink?.audio?.muted ?? false; - property bool micMuted: activeSource?.audio?.muted ?? false; + property bool muted: activeSink?.audio?.muted ?? false + property bool micMuted: activeSource?.audio?.muted ?? false } diff --git a/io/SystemSessionIO.qml b/io/SystemSessionIO.qml new file mode 100644 index 0000000..b1b4d6b --- /dev/null +++ b/io/SystemSessionIO.qml @@ -0,0 +1,30 @@ +pragma Singleton + +import QtQuick +import Quickshell +import Quickshell.Io + +// fastfetch -c /home/xnzf/.config/fastfetch/rawdata.jsonc + +Singleton { + id: root + property string uptime + onUptime: update => uptime = update + Process { + id: getUptime + command: ["sh", "-c", "uptime -p"] + running: true + stdout: SplitParser { + onRead: data => { + root.uptime = data; + } + } + onExited: running = false + } + Timer { + interval: 60 * 1000 + running: true + repeat: true + onTriggered: getUptime.running = true + } +} diff --git a/io/WeatherIO.qml b/io/WeatherIO.qml new file mode 100644 index 0000000..d8ca80c --- /dev/null +++ b/io/WeatherIO.qml @@ -0,0 +1,32 @@ +pragma Singleton + +import QtQuick +import Quickshell +import Quickshell.Io + +// fastfetch -c /home/xnzf/.config/fastfetch/rawdata.jsonc + +Singleton { + id: root + property var weather + Process { + id: getWeather + command: ["sh", "-c", "weather-Cli get Kyiv --raw"] + running: true + stdout: SplitParser { + onRead: data => { + let jsonData = JSON.parse(data); + if (jsonData.current_weather) { + root.weather = jsonData; + } + } + } + onExited: running = false + } + Timer { + interval: 60 * 1000 + running: true + repeat: true + onTriggered: getWeather.running = true + } +} diff --git a/io/WeatherObject.json b/io/WeatherObject.json new file mode 100644 index 0000000..5e952ec --- /dev/null +++ b/io/WeatherObject.json @@ -0,0 +1,58 @@ +[ + { + "current_weather": { + "interval": 900, + "is_day": 0, + "temperature": 2.6, + "time": "2024-11-19T07:00", + "weathercode": 2, + "winddirection": 272, + "windspeed": 9 + }, + "current_weather_units": { + "interval": "seconds", + "is_day": "", + "temperature": "°C", + "time": "iso8601", + "weathercode": "wmo code", + "winddirection": "°", + "windspeed": "km/h" + }, + "elevation": 188, + "generationtime_ms": 0.14400482177734375, + "hourly": { + "apparent_temperature": -0.8, + "pressure_msl": 1012.1, + "relativehumidity_2m": 86, + "surface_pressure": 988.9 + }, + "hourly_units": { + "apparent_temperature": "°C", + "pressure_msl": "hPa", + "relativehumidity_2m": "%", + "surface_pressure": "hPa", + "time": "iso8601" + }, + "latitude": 50.4375, + "longitude": 30.5, + "timezone": "Europe/Kiev", + "timezone_abbreviation": "EET", + "utc_offset_seconds": 7200 + }, + { + "elevation": 188, + "generationtime_ms": 0.08094310760498047, + "hourly": { + "uv_index": 0.65 + }, + "hourly_units": { + "time": "iso8601", + "uv_index": "" + }, + "latitude": 50.5, + "longitude": 30.5, + "timezone": "Europe/Kiev", + "timezone_abbreviation": "EET", + "utc_offset_seconds": 7200 + } +] diff --git a/io/functions.js b/io/functions.js new file mode 100644 index 0000000..49b7308 --- /dev/null +++ b/io/functions.js @@ -0,0 +1,4 @@ + +function delay(delayTime, callback) { + setTimeout(callback, delayTime); +} diff --git a/shell.qml b/shell.qml index b72d03f..5293e3a 100644 --- a/shell.qml +++ b/shell.qml @@ -5,6 +5,7 @@ import Quickshell import "root:/" import "root:/bars" import "root:/components/shared" +import "root:/components" ShellRoot { id: root @@ -15,4 +16,6 @@ ShellRoot { Top {} // Popup on Quickshell reload ReloadPopup {} + // -- + Wallpaper {} } diff --git a/svg/apps/apps.svg b/svg/apps/apps.svg new file mode 100644 index 0000000..f3b8074 --- /dev/null +++ b/svg/apps/apps.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/artstation.svg b/svg/apps/artstation.svg new file mode 100644 index 0000000..6041557 --- /dev/null +++ b/svg/apps/artstation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/atlassian.svg b/svg/apps/atlassian.svg new file mode 100644 index 0000000..064326c --- /dev/null +++ b/svg/apps/atlassian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/bitbucket.svg b/svg/apps/bitbucket.svg new file mode 100644 index 0000000..c861d9e --- /dev/null +++ b/svg/apps/bitbucket.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/codepen.svg b/svg/apps/codepen.svg new file mode 100644 index 0000000..5e8f583 --- /dev/null +++ b/svg/apps/codepen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/console.svg b/svg/apps/console.svg new file mode 100644 index 0000000..450d93c --- /dev/null +++ b/svg/apps/console.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/digital-ocean.svg b/svg/apps/digital-ocean.svg new file mode 100644 index 0000000..27fa734 --- /dev/null +++ b/svg/apps/digital-ocean.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/dropbox.svg b/svg/apps/dropbox.svg new file mode 100644 index 0000000..6025485 --- /dev/null +++ b/svg/apps/dropbox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/electron-framework.svg b/svg/apps/electron-framework.svg new file mode 100644 index 0000000..2cdcc8e --- /dev/null +++ b/svg/apps/electron-framework.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/facebook.svg b/svg/apps/facebook.svg new file mode 100644 index 0000000..b78449f --- /dev/null +++ b/svg/apps/facebook.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/fire.svg b/svg/apps/fire.svg new file mode 100644 index 0000000..1f1ad86 --- /dev/null +++ b/svg/apps/fire.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/firebase.svg b/svg/apps/firebase.svg new file mode 100644 index 0000000..60d9fa5 --- /dev/null +++ b/svg/apps/firebase.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/firefox.svg b/svg/apps/firefox.svg new file mode 100644 index 0000000..c27877a --- /dev/null +++ b/svg/apps/firefox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/git.svg b/svg/apps/git.svg new file mode 100644 index 0000000..e4d5f6a --- /dev/null +++ b/svg/apps/git.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/github.svg b/svg/apps/github.svg new file mode 100644 index 0000000..d0dae77 --- /dev/null +++ b/svg/apps/github.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/gitlab.svg b/svg/apps/gitlab.svg new file mode 100644 index 0000000..6782387 --- /dev/null +++ b/svg/apps/gitlab.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/gmail.svg b/svg/apps/gmail.svg new file mode 100644 index 0000000..6e5c5ce --- /dev/null +++ b/svg/apps/gmail.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/google-ads.svg b/svg/apps/google-ads.svg new file mode 100644 index 0000000..74a303f --- /dev/null +++ b/svg/apps/google-ads.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/google-analytics.svg b/svg/apps/google-analytics.svg new file mode 100644 index 0000000..a9f309e --- /dev/null +++ b/svg/apps/google-analytics.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/google-chrome.svg b/svg/apps/google-chrome.svg new file mode 100644 index 0000000..712075d --- /dev/null +++ b/svg/apps/google-chrome.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/google-cloud.svg b/svg/apps/google-cloud.svg new file mode 100644 index 0000000..8290e54 --- /dev/null +++ b/svg/apps/google-cloud.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/google-drive.svg b/svg/apps/google-drive.svg new file mode 100644 index 0000000..9ad9048 --- /dev/null +++ b/svg/apps/google-drive.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/google-maps.svg b/svg/apps/google-maps.svg new file mode 100644 index 0000000..1a5680f --- /dev/null +++ b/svg/apps/google-maps.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/google-translate.svg b/svg/apps/google-translate.svg new file mode 100644 index 0000000..bad2e7d --- /dev/null +++ b/svg/apps/google-translate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/google.svg b/svg/apps/google.svg new file mode 100644 index 0000000..ac5f6d3 --- /dev/null +++ b/svg/apps/google.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/instagram.svg b/svg/apps/instagram.svg new file mode 100644 index 0000000..06be2bb --- /dev/null +++ b/svg/apps/instagram.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/kubernetes.svg b/svg/apps/kubernetes.svg new file mode 100644 index 0000000..6e4a4da --- /dev/null +++ b/svg/apps/kubernetes.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/language-c.svg b/svg/apps/language-c.svg new file mode 100644 index 0000000..4a94a96 --- /dev/null +++ b/svg/apps/language-c.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/language-cpp.svg b/svg/apps/language-cpp.svg new file mode 100644 index 0000000..38f8599 --- /dev/null +++ b/svg/apps/language-cpp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/language-html5.svg b/svg/apps/language-html5.svg new file mode 100644 index 0000000..1d6e6f5 --- /dev/null +++ b/svg/apps/language-html5.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/language-javascript.svg b/svg/apps/language-javascript.svg new file mode 100644 index 0000000..5f3a500 --- /dev/null +++ b/svg/apps/language-javascript.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/language-lua.svg b/svg/apps/language-lua.svg new file mode 100644 index 0000000..3a9fc59 --- /dev/null +++ b/svg/apps/language-lua.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/language-markdown.svg b/svg/apps/language-markdown.svg new file mode 100644 index 0000000..b5369ca --- /dev/null +++ b/svg/apps/language-markdown.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/language-typescript.svg b/svg/apps/language-typescript.svg new file mode 100644 index 0000000..758247b --- /dev/null +++ b/svg/apps/language-typescript.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/library-outline.svg b/svg/apps/library-outline.svg new file mode 100644 index 0000000..7c10e25 --- /dev/null +++ b/svg/apps/library-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/linkedin.svg b/svg/apps/linkedin.svg new file mode 100644 index 0000000..bd26f42 --- /dev/null +++ b/svg/apps/linkedin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/pickaxe.svg b/svg/apps/pickaxe.svg new file mode 100644 index 0000000..aa476eb --- /dev/null +++ b/svg/apps/pickaxe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/react.svg b/svg/apps/react.svg new file mode 100644 index 0000000..d0a5d8f --- /dev/null +++ b/svg/apps/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/reddit.svg b/svg/apps/reddit.svg new file mode 100644 index 0000000..f175199 --- /dev/null +++ b/svg/apps/reddit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/rss-off.svg b/svg/apps/rss-off.svg new file mode 100644 index 0000000..bfd5fa6 --- /dev/null +++ b/svg/apps/rss-off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/rss.svg b/svg/apps/rss.svg new file mode 100644 index 0000000..08a1881 --- /dev/null +++ b/svg/apps/rss.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/search-web.svg b/svg/apps/search-web.svg new file mode 100644 index 0000000..120a567 --- /dev/null +++ b/svg/apps/search-web.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/source-repository.svg b/svg/apps/source-repository.svg new file mode 100644 index 0000000..7182292 --- /dev/null +++ b/svg/apps/source-repository.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/steam.svg b/svg/apps/steam.svg new file mode 100644 index 0000000..316f63e --- /dev/null +++ b/svg/apps/steam.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/terraform.svg b/svg/apps/terraform.svg new file mode 100644 index 0000000..85fe759 --- /dev/null +++ b/svg/apps/terraform.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/twitch.svg b/svg/apps/twitch.svg new file mode 100644 index 0000000..c6f8c78 --- /dev/null +++ b/svg/apps/twitch.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/twitter.svg b/svg/apps/twitter.svg new file mode 100644 index 0000000..0993d58 --- /dev/null +++ b/svg/apps/twitter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/vlc.svg b/svg/apps/vlc.svg new file mode 100644 index 0000000..4c3d92e --- /dev/null +++ b/svg/apps/vlc.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/apps/youtube.svg b/svg/apps/youtube.svg new file mode 100644 index 0000000..35c9e34 --- /dev/null +++ b/svg/apps/youtube.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/arch.svg b/svg/arch.svg new file mode 100644 index 0000000..3ebd0f8 --- /dev/null +++ b/svg/arch.svg @@ -0,0 +1 @@ + diff --git a/svg/at.svg b/svg/at.svg new file mode 100644 index 0000000..3a3da81 --- /dev/null +++ b/svg/at.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/atom-variant.svg b/svg/atom-variant.svg new file mode 100644 index 0000000..dda67be --- /dev/null +++ b/svg/atom-variant.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/atom.svg b/svg/atom.svg new file mode 100644 index 0000000..b208431 --- /dev/null +++ b/svg/atom.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/bg/3300872.svg b/svg/bg/3300872.svg new file mode 100644 index 0000000..5e472b7 --- /dev/null +++ b/svg/bg/3300872.svg @@ -0,0 +1,111 @@ + + + + +Created by potrace 1.15, written by Peter Selinger 2001-2017 + + + + + + + + + + + + + + + + + diff --git a/svg/bg/37436.svg b/svg/bg/37436.svg new file mode 100644 index 0000000..c25b284 --- /dev/null +++ b/svg/bg/37436.svg @@ -0,0 +1,200 @@ + + + + +Created by potrace 1.15, written by Peter Selinger 2001-2017 + + + + + diff --git a/svg/compass-rose.svg b/svg/compass-rose.svg new file mode 100644 index 0000000..20e24ad --- /dev/null +++ b/svg/compass-rose.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/dharmachakra.svg b/svg/dharmachakra.svg new file mode 100644 index 0000000..960a686 --- /dev/null +++ b/svg/dharmachakra.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/hexagon.svg b/svg/hexagon.svg new file mode 100644 index 0000000..eae7f25 --- /dev/null +++ b/svg/hexagon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/microphone-off.svg b/svg/media/microphone-off.svg new file mode 100644 index 0000000..1a98314 --- /dev/null +++ b/svg/media/microphone-off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/microphone-outline.svg b/svg/media/microphone-outline.svg new file mode 100644 index 0000000..aec11fd --- /dev/null +++ b/svg/media/microphone-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/microphone-question-outline.svg b/svg/media/microphone-question-outline.svg new file mode 100644 index 0000000..96ada7e --- /dev/null +++ b/svg/media/microphone-question-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/pause.svg b/svg/media/pause.svg new file mode 100644 index 0000000..bf79b98 --- /dev/null +++ b/svg/media/pause.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/play-outline.svg b/svg/media/play-outline.svg new file mode 100644 index 0000000..d461696 --- /dev/null +++ b/svg/media/play-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/playlist-music.svg b/svg/media/playlist-music.svg new file mode 100644 index 0000000..904303a --- /dev/null +++ b/svg/media/playlist-music.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/record.svg b/svg/media/record.svg new file mode 100644 index 0000000..8b7d89b --- /dev/null +++ b/svg/media/record.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/repeat-off.svg b/svg/media/repeat-off.svg new file mode 100644 index 0000000..00fc535 --- /dev/null +++ b/svg/media/repeat-off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/repeat-once.svg b/svg/media/repeat-once.svg new file mode 100644 index 0000000..6f833c7 --- /dev/null +++ b/svg/media/repeat-once.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/repeat.svg b/svg/media/repeat.svg new file mode 100644 index 0000000..7feeb30 --- /dev/null +++ b/svg/media/repeat.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/replay.svg b/svg/media/replay.svg new file mode 100644 index 0000000..662ef7e --- /dev/null +++ b/svg/media/replay.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/skip-next-outline.svg b/svg/media/skip-next-outline.svg new file mode 100644 index 0000000..27ea1e9 --- /dev/null +++ b/svg/media/skip-next-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/skip-previous-outline.svg b/svg/media/skip-previous-outline.svg new file mode 100644 index 0000000..1aa1d5d --- /dev/null +++ b/svg/media/skip-previous-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/text-box-check-outline.svg b/svg/media/text-box-check-outline.svg new file mode 100644 index 0000000..f871ccd --- /dev/null +++ b/svg/media/text-box-check-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/text-box-edit-outline.svg b/svg/media/text-box-edit-outline.svg new file mode 100644 index 0000000..efc246a --- /dev/null +++ b/svg/media/text-box-edit-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/text-box-minus-outline.svg b/svg/media/text-box-minus-outline.svg new file mode 100644 index 0000000..f1a4b44 --- /dev/null +++ b/svg/media/text-box-minus-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/text-box-multiple-outline.svg b/svg/media/text-box-multiple-outline.svg new file mode 100644 index 0000000..07759c1 --- /dev/null +++ b/svg/media/text-box-multiple-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/text-box-outline.svg b/svg/media/text-box-outline.svg new file mode 100644 index 0000000..cd59d6b --- /dev/null +++ b/svg/media/text-box-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/text-box-plus-outline.svg b/svg/media/text-box-plus-outline.svg new file mode 100644 index 0000000..3989e93 --- /dev/null +++ b/svg/media/text-box-plus-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/text-box-remove-outline.svg b/svg/media/text-box-remove-outline.svg new file mode 100644 index 0000000..bf939d4 --- /dev/null +++ b/svg/media/text-box-remove-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/text-box-search-outline.svg b/svg/media/text-box-search-outline.svg new file mode 100644 index 0000000..e29f703 --- /dev/null +++ b/svg/media/text-box-search-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/theater.svg b/svg/media/theater.svg new file mode 100644 index 0000000..242b4c2 --- /dev/null +++ b/svg/media/theater.svg @@ -0,0 +1 @@ + diff --git a/svg/media/tune-vertical.svg b/svg/media/tune-vertical.svg new file mode 100644 index 0000000..80dd44d --- /dev/null +++ b/svg/media/tune-vertical.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/tune.svg b/svg/media/tune.svg new file mode 100644 index 0000000..db254ac --- /dev/null +++ b/svg/media/tune.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/volume-equal.svg b/svg/media/volume-equal.svg new file mode 100644 index 0000000..087ab9b --- /dev/null +++ b/svg/media/volume-equal.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/volume-high.svg b/svg/media/volume-high.svg new file mode 100644 index 0000000..e57a011 --- /dev/null +++ b/svg/media/volume-high.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/volume-low.svg b/svg/media/volume-low.svg new file mode 100644 index 0000000..5e87f04 --- /dev/null +++ b/svg/media/volume-low.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/volume-medium.svg b/svg/media/volume-medium.svg new file mode 100644 index 0000000..2401390 --- /dev/null +++ b/svg/media/volume-medium.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/volume-minus.svg b/svg/media/volume-minus.svg new file mode 100644 index 0000000..00f048b --- /dev/null +++ b/svg/media/volume-minus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/volume-mute.svg b/svg/media/volume-mute.svg new file mode 100644 index 0000000..6c91895 --- /dev/null +++ b/svg/media/volume-mute.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/volume-off.svg b/svg/media/volume-off.svg new file mode 100644 index 0000000..97a8b8c --- /dev/null +++ b/svg/media/volume-off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/volume-plus.svg b/svg/media/volume-plus.svg new file mode 100644 index 0000000..7bcc449 --- /dev/null +++ b/svg/media/volume-plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/volume-source.svg b/svg/media/volume-source.svg new file mode 100644 index 0000000..6fce2ef --- /dev/null +++ b/svg/media/volume-source.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/volume-variant-off.svg b/svg/media/volume-variant-off.svg new file mode 100644 index 0000000..21fd136 --- /dev/null +++ b/svg/media/volume-variant-off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/media/volume-vibrate.svg b/svg/media/volume-vibrate.svg new file mode 100644 index 0000000..0df07ba --- /dev/null +++ b/svg/media/volume-vibrate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/network/ethernet.svg b/svg/network/ethernet.svg new file mode 100644 index 0000000..00f4c8c --- /dev/null +++ b/svg/network/ethernet.svg @@ -0,0 +1 @@ + diff --git a/svg/network/web-check.svg b/svg/network/web-check.svg new file mode 100644 index 0000000..54fc67c --- /dev/null +++ b/svg/network/web-check.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/network/web-clock.svg b/svg/network/web-clock.svg new file mode 100644 index 0000000..78768b1 --- /dev/null +++ b/svg/network/web-clock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/network/web-minus.svg b/svg/network/web-minus.svg new file mode 100644 index 0000000..bdcb191 --- /dev/null +++ b/svg/network/web-minus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/network/web-plus.svg b/svg/network/web-plus.svg new file mode 100644 index 0000000..9c7d47b --- /dev/null +++ b/svg/network/web-plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/network/web-refresh.svg b/svg/network/web-refresh.svg new file mode 100644 index 0000000..8f8c760 --- /dev/null +++ b/svg/network/web-refresh.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/network/web-remove.svg b/svg/network/web-remove.svg new file mode 100644 index 0000000..b6855d1 --- /dev/null +++ b/svg/network/web-remove.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/network/web-sync.svg b/svg/network/web-sync.svg new file mode 100644 index 0000000..31d9e0b --- /dev/null +++ b/svg/network/web-sync.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/network/web.svg b/svg/network/web.svg new file mode 100644 index 0000000..9eb763f --- /dev/null +++ b/svg/network/web.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/network/wifi-strength-1-alert.svg b/svg/network/wifi-strength-1-alert.svg new file mode 100644 index 0000000..2bbdb94 --- /dev/null +++ b/svg/network/wifi-strength-1-alert.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/network/wifi-strength-1-lock-open.svg b/svg/network/wifi-strength-1-lock-open.svg new file mode 100644 index 0000000..f53c521 --- /dev/null +++ b/svg/network/wifi-strength-1-lock-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/network/wifi-strength-1-lock.svg b/svg/network/wifi-strength-1-lock.svg new file mode 100644 index 0000000..6dbcbbd --- /dev/null +++ b/svg/network/wifi-strength-1-lock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/network/wifi-strength-1.svg b/svg/network/wifi-strength-1.svg new file mode 100644 index 0000000..eccbf20 --- /dev/null +++ b/svg/network/wifi-strength-1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/network/wifi-strength-2-alert.svg b/svg/network/wifi-strength-2-alert.svg new file mode 100644 index 0000000..f613972 --- /dev/null +++ b/svg/network/wifi-strength-2-alert.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/network/wifi-strength-2-lock-open.svg b/svg/network/wifi-strength-2-lock-open.svg new file mode 100644 index 0000000..33113fe --- /dev/null +++ b/svg/network/wifi-strength-2-lock-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/network/wifi-strength-2-lock.svg b/svg/network/wifi-strength-2-lock.svg new file mode 100644 index 0000000..b190bb7 --- /dev/null +++ b/svg/network/wifi-strength-2-lock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/network/wifi-strength-2.svg b/svg/network/wifi-strength-2.svg new file mode 100644 index 0000000..f022683 --- /dev/null +++ b/svg/network/wifi-strength-2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/network/wifi-strength-3-alert.svg b/svg/network/wifi-strength-3-alert.svg new file mode 100644 index 0000000..c919cbd --- /dev/null +++ b/svg/network/wifi-strength-3-alert.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/network/wifi-strength-3-lock-open.svg b/svg/network/wifi-strength-3-lock-open.svg new file mode 100644 index 0000000..fad9568 --- /dev/null +++ b/svg/network/wifi-strength-3-lock-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/network/wifi-strength-3-lock.svg b/svg/network/wifi-strength-3-lock.svg new file mode 100644 index 0000000..46ec3f6 --- /dev/null +++ b/svg/network/wifi-strength-3-lock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/network/wifi-strength-3.svg b/svg/network/wifi-strength-3.svg new file mode 100644 index 0000000..6d622de --- /dev/null +++ b/svg/network/wifi-strength-3.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/network/wifi-strength-4-alert.svg b/svg/network/wifi-strength-4-alert.svg new file mode 100644 index 0000000..a87d458 --- /dev/null +++ b/svg/network/wifi-strength-4-alert.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/network/wifi-strength-4-lock-open.svg b/svg/network/wifi-strength-4-lock-open.svg new file mode 100644 index 0000000..d7a13b0 --- /dev/null +++ b/svg/network/wifi-strength-4-lock-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/network/wifi-strength-4-lock.svg b/svg/network/wifi-strength-4-lock.svg new file mode 100644 index 0000000..62ffc94 --- /dev/null +++ b/svg/network/wifi-strength-4-lock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/network/wifi-strength-4.svg b/svg/network/wifi-strength-4.svg new file mode 100644 index 0000000..14285ab --- /dev/null +++ b/svg/network/wifi-strength-4.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/network/wifi-strength-alert-outline.svg b/svg/network/wifi-strength-alert-outline.svg new file mode 100644 index 0000000..de9e6e0 --- /dev/null +++ b/svg/network/wifi-strength-alert-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/network/wifi-strength-lock-open-outline.svg b/svg/network/wifi-strength-lock-open-outline.svg new file mode 100644 index 0000000..9100059 --- /dev/null +++ b/svg/network/wifi-strength-lock-open-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/network/wifi-strength-lock-outline.svg b/svg/network/wifi-strength-lock-outline.svg new file mode 100644 index 0000000..0cff32f --- /dev/null +++ b/svg/network/wifi-strength-lock-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/network/wifi-strength-off-outline.svg b/svg/network/wifi-strength-off-outline.svg new file mode 100644 index 0000000..9c20b16 --- /dev/null +++ b/svg/network/wifi-strength-off-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/network/wifi-strength-off.svg b/svg/network/wifi-strength-off.svg new file mode 100644 index 0000000..4d6761f --- /dev/null +++ b/svg/network/wifi-strength-off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/network/wifi-strength-outline.svg b/svg/network/wifi-strength-outline.svg new file mode 100644 index 0000000..dbd853d --- /dev/null +++ b/svg/network/wifi-strength-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/qml/ArchIcon.qml b/svg/qml/ArchIcon.qml new file mode 100644 index 0000000..4929cab --- /dev/null +++ b/svg/qml/ArchIcon.qml @@ -0,0 +1,27 @@ +// Generated from SVG file svg/arch.svg +import QtQuick +import QtQuick.Shapes + +Item { + id: root + required property string currentColor + implicitWidth: 24 + implicitHeight: 24 + transform: [ + Scale { + xScale: width / 24 + yScale: height / 24 + } + ] + Shape { + preferredRendererType: Shape.CurveRenderer + ShapePath { + strokeColor: "transparent" + fillColor: root.currentColor + fillRule: ShapePath.PathSolid + PathSvg { + path: "M 12 2 C 11.11 4.18 10.57 5.61 9.58 7.73 C 10.19 8.37 10.93 9.12 12.14 9.97 C 10.84 9.43 9.95 8.9 9.29 8.34 C 8 11 6.03 14.75 2 22 C 5.17 20.17 7.63 19.04 9.92 18.61 C 9.82 18.19 9.76 17.73 9.77 17.25 L 9.77 17.15 C 9.82 15.12 10.88 13.56 12.13 13.67 C 13.38 13.77 14.35 15.5 14.3 17.54 C 14.29 17.92 14.25 18.29 14.18 18.63 C 16.44 19.07 18.87 20.19 22 22 C 21.38 20.86 20.83 19.84 20.31 18.87 C 19.5 18.23 18.61 17.39 16.85 16.5 C 18.06 16.8 18.93 17.16 19.61 17.57 C 14.26 7.62 13.83 6.3 12 2 " + } + } + } +} diff --git a/svg/qml/Check.qml b/svg/qml/Check.qml new file mode 100644 index 0000000..2db1223 --- /dev/null +++ b/svg/qml/Check.qml @@ -0,0 +1,27 @@ +// Generated from SVG file svg/ui/check.svg +import QtQuick +import QtQuick.Shapes + +Item { + id: root + required property string currentColor + implicitWidth: 24 + implicitHeight: 24 + transform: [ + Scale { + xScale: width / 24 + yScale: height / 24 + } + ] + Shape { + preferredRendererType: Shape.CurveRenderer + ShapePath { + strokeColor: "transparent" + fillColor: root.currentColor + fillRule: ShapePath.WindingFill + PathSvg { + path: "M 21 7 L 9 19 L 3.5 13.5 L 4.91 12.09 L 9 16.17 L 19.59 5.59 L 21 7 " + } + } + } +} diff --git a/svg/qml/ClipboardOutline.qml b/svg/qml/ClipboardOutline.qml new file mode 100644 index 0000000..5d9356f --- /dev/null +++ b/svg/qml/ClipboardOutline.qml @@ -0,0 +1,27 @@ +// Generated from SVG file svg/ui/clipboard-outline.svg +import QtQuick +import QtQuick.Shapes + +Item { + id: root + required property color currentColor + implicitWidth: 24 + implicitHeight: 24 + transform: [ + Scale { + xScale: width / 24 + yScale: height / 24 + } + ] + Shape { + preferredRendererType: Shape.GeometryRenderer + ShapePath { + strokeColor: "transparent" + fillColor: root.currentColor + fillRule: ShapePath.WindingFill + PathSvg { + path: "M 19 3 L 14.82 3 C 14.4 1.84 13.3 1 12 1 C 10.7 1 9.6 1.84 9.18 3 L 5 3 C 3.89543 3 3 3.89543 3 5 L 3 19 C 3 20.1046 3.89543 21 5 21 L 19 21 C 20.1046 21 21 20.1046 21 19 L 21 5 C 21 3.89543 20.1046 3 19 3 M 12 3 C 12.5523 3 13 3.44772 13 4 C 13 4.55228 12.5523 5 12 5 C 11.4477 5 11 4.55228 11 4 C 11 3.44772 11.4477 3 12 3 M 7 7 L 17 7 L 17 5 L 19 5 L 19 19 L 5 19 L 5 5 L 7 5 L 7 7 " + } + } + } +} diff --git a/svg/qml/ClipboardTextOutline.qml b/svg/qml/ClipboardTextOutline.qml new file mode 100644 index 0000000..ef1538a --- /dev/null +++ b/svg/qml/ClipboardTextOutline.qml @@ -0,0 +1,27 @@ +// Generated from SVG file svg/ui/clipboard-text-outline.svg +import QtQuick +import QtQuick.Shapes + +Item { + id: root + required property color currentColor + implicitWidth: 24 + implicitHeight: 24 + transform: [ + Scale { + xScale: width / 24 + yScale: height / 24 + } + ] + Shape { + preferredRendererType: Shape.GeometryRenderer + ShapePath { + strokeColor: "transparent" + fillColor: root.currentColor + fillRule: ShapePath.WindingFill + PathSvg { + path: "M 19 3 L 14.82 3 C 14.25 1.44 12.53 0.64 11 1.2 C 10.14 1.5 9.5 2.16 9.18 3 L 5 3 C 3.89543 3 3 3.89543 3 5 L 3 19 C 3 20.1046 3.89543 21 5 21 L 19 21 C 20.1046 21 21 20.1046 21 19 L 21 5 C 21 3.89543 20.1046 3 19 3 M 12 3 C 12.5523 3 13 3.44772 13 4 C 13 4.55228 12.5523 5 12 5 C 11.4477 5 11 4.55228 11 4 C 11 3.44772 11.4477 3 12 3 M 7 7 L 17 7 L 17 5 L 19 5 L 19 19 L 5 19 L 5 5 L 7 5 L 7 7 M 17 11 L 7 11 L 7 9 L 17 9 L 17 11 M 15 15 L 7 15 L 7 13 L 15 13 L 15 15 " + } + } + } +} diff --git a/svg/qml/DownloadOutline.qml b/svg/qml/DownloadOutline.qml new file mode 100644 index 0000000..9f1c2ca --- /dev/null +++ b/svg/qml/DownloadOutline.qml @@ -0,0 +1,27 @@ +// Generated from SVG file svg/ui/download-outline.svg +import QtQuick +import QtQuick.Shapes + +Item { + id: root + required property string currentColor + implicitWidth: 24 + implicitHeight: 24 + transform: [ + Scale { + xScale: width / 24 + yScale: height / 24 + } + ] + Shape { + preferredRendererType: Shape.CurveRenderer + ShapePath { + strokeColor: "transparent" + fillColor: root.currentColor + fillRule: ShapePath.WindingFill + PathSvg { + path: "M 13 5 L 13 11 L 14.17 11 L 12 13.17 L 9.83 11 L 11 11 L 11 5 L 13 5 M 15 3 L 9 3 L 9 9 L 5 9 L 12 16 L 19 9 L 15 9 L 15 3 M 19 18 L 5 18 L 5 20 L 19 20 L 19 18 " + } + } + } +} diff --git a/svg/qml/MicrophoneOutline.qml b/svg/qml/MicrophoneOutline.qml new file mode 100644 index 0000000..8d02171 --- /dev/null +++ b/svg/qml/MicrophoneOutline.qml @@ -0,0 +1,27 @@ +// Generated from SVG file svg/media/microphone-outline.svg +import QtQuick +import QtQuick.Shapes + +Item { + id: root + required property string currentColor + implicitWidth: 24 + implicitHeight: 24 + transform: [ + Scale { + xScale: width / 24 + yScale: height / 24 + } + ] + Shape { + preferredRendererType: Shape.CurveRenderer + ShapePath { + strokeColor: "transparent" + fillColor: root.currentColor + fillRule: ShapePath.WindingFill + PathSvg { + path: "M 17.3 11 C 17.3 14 14.76 16.1 12 16.1 C 9.24 16.1 6.7 14 6.7 11 L 5 11 C 5 14.41 7.72 17.23 11 17.72 L 11 21 L 13 21 L 13 17.72 C 16.28 17.23 19 14.41 19 11 M 10.8 4.9 C 10.8 4.24 11.34 3.7 12 3.7 C 12.66 3.7 13.2 4.24 13.2 4.9 L 13.19 11.1 C 13.19 11.76 12.66 12.3 12 12.3 C 11.34 12.3 10.8 11.76 10.8 11.1 M 12 14 C 13.6569 14 15 12.6569 15 11 L 15 5 C 15 3.34315 13.6569 2 12 2 C 10.3431 2 9 3.34315 9 5 L 9 11 C 9 12.6569 10.3431 14 12 14 " + } + } + } +} diff --git a/svg/qml/PowerIcon.qml b/svg/qml/PowerIcon.qml new file mode 100644 index 0000000..34460dc --- /dev/null +++ b/svg/qml/PowerIcon.qml @@ -0,0 +1,27 @@ +// Generated from SVG file svg/ui/power.svg +import QtQuick +import QtQuick.Shapes + +Item { + id: root + required property string currentColor + implicitWidth: 24 + implicitHeight: 24 + transform: [ + Scale { + xScale: width / 24 + yScale: height / 24 + } + ] + Shape { + preferredRendererType: Shape.CurveRenderer + ShapePath { + strokeColor: "transparent" + fillColor: root.currentColor + fillRule: ShapePath.WindingFill + PathSvg { + path: "M 16.56 5.44 L 15.11 6.89 C 16.84 7.94 18 9.83 18 12 C 18 15.3137 15.3137 18 12 18 C 8.68629 18 6 15.3137 6 12 C 6 9.83 7.16 7.94 8.88 6.88 L 7.44 5.44 C 5.36 6.88 4 9.28 4 12 C 4 16.4183 7.58172 20 12 20 C 16.4183 20 20 16.4183 20 12 C 20 9.28 18.64 6.88 16.56 5.44 M 13 3 L 11 3 L 11 13 L 13 13 " + } + } + } +} diff --git a/svg/qml/VolumeHigh.qml b/svg/qml/VolumeHigh.qml new file mode 100644 index 0000000..e841eca --- /dev/null +++ b/svg/qml/VolumeHigh.qml @@ -0,0 +1,27 @@ +// Generated from SVG file svg/media/volume-high.svg +import QtQuick +import QtQuick.Shapes + +Item { + id: root + required property string currentColor + implicitWidth: 24 + implicitHeight: 24 + transform: [ + Scale { + xScale: width / 24 + yScale: height / 24 + } + ] + Shape { + preferredRendererType: Shape.CurveRenderer + ShapePath { + strokeColor: "transparent" + fillColor: root.currentColor + fillRule: ShapePath.WindingFill + PathSvg { + path: "M 14 3.23 L 14 5.29 C 16.89 6.15 19 8.83 19 12 C 19 15.17 16.89 17.84 14 18.7 L 14 20.77 C 18 19.86 21 16.28 21 12 C 21 7.72 18 4.14 14 3.23 M 16.5 12 C 16.5 10.23 15.5 8.71 14 7.97 L 14 16 C 15.5 15.29 16.5 13.76 16.5 12 M 3 9 L 3 15 L 7 15 L 12 20 L 12 4 L 7 9 L 3 9 " + } + } + } +} diff --git a/svg/qml/VolumeLow.qml b/svg/qml/VolumeLow.qml new file mode 100644 index 0000000..6e272df --- /dev/null +++ b/svg/qml/VolumeLow.qml @@ -0,0 +1,27 @@ +// Generated from SVG file svg/media/volume-low.svg +import QtQuick +import QtQuick.Shapes + +Item { + id: root + required property string currentColor + implicitWidth: 24 + implicitHeight: 24 + transform: [ + Scale { + xScale: width / 24 + yScale: height / 24 + } + ] + Shape { + preferredRendererType: Shape.CurveRenderer + ShapePath { + strokeColor: "transparent" + fillColor: root.currentColor + fillRule: ShapePath.WindingFill + PathSvg { + path: "M 7 9 L 7 15 L 11 15 L 16 20 L 16 4 L 11 9 L 7 9 " + } + } + } +} diff --git a/svg/qml/VolumeMedium.qml b/svg/qml/VolumeMedium.qml new file mode 100644 index 0000000..498cfb9 --- /dev/null +++ b/svg/qml/VolumeMedium.qml @@ -0,0 +1,27 @@ +// Generated from SVG file svg/media/volume-medium.svg +import QtQuick +import QtQuick.Shapes + +Item { + id: root + required property string currentColor + implicitWidth: 24 + implicitHeight: 24 + transform: [ + Scale { + xScale: width / 24 + yScale: height / 24 + } + ] + Shape { + preferredRendererType: Shape.CurveRenderer + ShapePath { + strokeColor: "transparent" + fillColor: root.currentColor + fillRule: ShapePath.WindingFill + PathSvg { + path: "M 5 9 L 5 15 L 9 15 L 14 20 L 14 4 L 9 9 M 18.5 12 C 18.5 10.23 17.5 8.71 16 7.97 L 16 16 C 17.5 15.29 18.5 13.76 18.5 12 " + } + } + } +} diff --git a/svg/radioactive-circle-outline.svg b/svg/radioactive-circle-outline.svg new file mode 100644 index 0000000..5442860 --- /dev/null +++ b/svg/radioactive-circle-outline.svg @@ -0,0 +1 @@ + diff --git a/svg/skull-outline.svg b/svg/skull-outline.svg new file mode 100644 index 0000000..fb0ffa2 --- /dev/null +++ b/svg/skull-outline.svg @@ -0,0 +1 @@ + diff --git a/svg/ui/account.svg b/svg/ui/account.svg new file mode 100644 index 0000000..f10dede --- /dev/null +++ b/svg/ui/account.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/alert-rhombus-outline.svg b/svg/ui/alert-rhombus-outline.svg new file mode 100644 index 0000000..75f7d16 --- /dev/null +++ b/svg/ui/alert-rhombus-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/bluetooth-audio.svg b/svg/ui/bluetooth-audio.svg new file mode 100644 index 0000000..f40cae4 --- /dev/null +++ b/svg/ui/bluetooth-audio.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/bluetooth-connect.svg b/svg/ui/bluetooth-connect.svg new file mode 100644 index 0000000..adcf1e3 --- /dev/null +++ b/svg/ui/bluetooth-connect.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/bluetooth-off.svg b/svg/ui/bluetooth-off.svg new file mode 100644 index 0000000..f4f248d --- /dev/null +++ b/svg/ui/bluetooth-off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/bluetooth-settings.svg b/svg/ui/bluetooth-settings.svg new file mode 100644 index 0000000..b847c53 --- /dev/null +++ b/svg/ui/bluetooth-settings.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/bluetooth-transfer.svg b/svg/ui/bluetooth-transfer.svg new file mode 100644 index 0000000..32be2d9 --- /dev/null +++ b/svg/ui/bluetooth-transfer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/bluetooth.svg b/svg/ui/bluetooth.svg new file mode 100644 index 0000000..0f33ead --- /dev/null +++ b/svg/ui/bluetooth.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/brightness-1.svg b/svg/ui/brightness-1.svg new file mode 100644 index 0000000..2d32483 --- /dev/null +++ b/svg/ui/brightness-1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/brightness-2.svg b/svg/ui/brightness-2.svg new file mode 100644 index 0000000..f947edb --- /dev/null +++ b/svg/ui/brightness-2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/brightness-3.svg b/svg/ui/brightness-3.svg new file mode 100644 index 0000000..0a57f2c --- /dev/null +++ b/svg/ui/brightness-3.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/brightness-4.svg b/svg/ui/brightness-4.svg new file mode 100644 index 0000000..85f69e7 --- /dev/null +++ b/svg/ui/brightness-4.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/brightness-5.svg b/svg/ui/brightness-5.svg new file mode 100644 index 0000000..1809475 --- /dev/null +++ b/svg/ui/brightness-5.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/brightness-6.svg b/svg/ui/brightness-6.svg new file mode 100644 index 0000000..e9c1288 --- /dev/null +++ b/svg/ui/brightness-6.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/brightness-7.svg b/svg/ui/brightness-7.svg new file mode 100644 index 0000000..feed5ac --- /dev/null +++ b/svg/ui/brightness-7.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/calendar-month.svg b/svg/ui/calendar-month.svg new file mode 100644 index 0000000..ba554b0 --- /dev/null +++ b/svg/ui/calendar-month.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/check-outline.svg b/svg/ui/check-outline.svg new file mode 100644 index 0000000..7be9805 --- /dev/null +++ b/svg/ui/check-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/check.svg b/svg/ui/check.svg new file mode 100644 index 0000000..066aed3 --- /dev/null +++ b/svg/ui/check.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/chevron-down-circle-outline.svg b/svg/ui/chevron-down-circle-outline.svg new file mode 100644 index 0000000..2ade968 --- /dev/null +++ b/svg/ui/chevron-down-circle-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/chevron-left-circle-outline.svg b/svg/ui/chevron-left-circle-outline.svg new file mode 100644 index 0000000..ba62d8a --- /dev/null +++ b/svg/ui/chevron-left-circle-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/chevron-right-circle-outline.svg b/svg/ui/chevron-right-circle-outline.svg new file mode 100644 index 0000000..3e37149 --- /dev/null +++ b/svg/ui/chevron-right-circle-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/chevron-up-circle-outline.svg b/svg/ui/chevron-up-circle-outline.svg new file mode 100644 index 0000000..0e38c8d --- /dev/null +++ b/svg/ui/chevron-up-circle-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/clipboard-outline.svg b/svg/ui/clipboard-outline.svg new file mode 100644 index 0000000..06c15c8 --- /dev/null +++ b/svg/ui/clipboard-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/clipboard-text-multiple-outline.svg b/svg/ui/clipboard-text-multiple-outline.svg new file mode 100644 index 0000000..6fa27e0 --- /dev/null +++ b/svg/ui/clipboard-text-multiple-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/clipboard-text-off-outline.svg b/svg/ui/clipboard-text-off-outline.svg new file mode 100644 index 0000000..0240064 --- /dev/null +++ b/svg/ui/clipboard-text-off-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/clipboard-text-outline.svg b/svg/ui/clipboard-text-outline.svg new file mode 100644 index 0000000..7e53374 --- /dev/null +++ b/svg/ui/clipboard-text-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/clipboard-text-search-outline.svg b/svg/ui/clipboard-text-search-outline.svg new file mode 100644 index 0000000..dfe39a3 --- /dev/null +++ b/svg/ui/clipboard-text-search-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/close-circle-outline.svg b/svg/ui/close-circle-outline.svg new file mode 100644 index 0000000..bf10782 --- /dev/null +++ b/svg/ui/close-circle-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/delete-empty-outline.svg b/svg/ui/delete-empty-outline.svg new file mode 100644 index 0000000..ed1c6f4 --- /dev/null +++ b/svg/ui/delete-empty-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/delete-outline.svg b/svg/ui/delete-outline.svg new file mode 100644 index 0000000..7645d7c --- /dev/null +++ b/svg/ui/delete-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/download-off-outline.svg b/svg/ui/download-off-outline.svg new file mode 100644 index 0000000..8317ee0 --- /dev/null +++ b/svg/ui/download-off-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/download-outline.svg b/svg/ui/download-outline.svg new file mode 100644 index 0000000..6b2e192 --- /dev/null +++ b/svg/ui/download-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/export.svg b/svg/ui/export.svg new file mode 100644 index 0000000..384fa52 --- /dev/null +++ b/svg/ui/export.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/folder-outline.svg b/svg/ui/folder-outline.svg new file mode 100644 index 0000000..7ff92d4 --- /dev/null +++ b/svg/ui/folder-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/fullscreen-exit.svg b/svg/ui/fullscreen-exit.svg new file mode 100644 index 0000000..b712ffc --- /dev/null +++ b/svg/ui/fullscreen-exit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/fullscreen.svg b/svg/ui/fullscreen.svg new file mode 100644 index 0000000..6c94f97 --- /dev/null +++ b/svg/ui/fullscreen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/heart-outline.svg b/svg/ui/heart-outline.svg new file mode 100644 index 0000000..91475fd --- /dev/null +++ b/svg/ui/heart-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/help-rhombus-outline.svg b/svg/ui/help-rhombus-outline.svg new file mode 100644 index 0000000..da94d67 --- /dev/null +++ b/svg/ui/help-rhombus-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/hexagon-multiple-outline.svg b/svg/ui/hexagon-multiple-outline.svg new file mode 100644 index 0000000..63e8334 --- /dev/null +++ b/svg/ui/hexagon-multiple-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/hexagon-multiple.svg b/svg/ui/hexagon-multiple.svg new file mode 100644 index 0000000..2bb5cea --- /dev/null +++ b/svg/ui/hexagon-multiple.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/hexagon-outline.svg b/svg/ui/hexagon-outline.svg new file mode 100644 index 0000000..0ffe857 --- /dev/null +++ b/svg/ui/hexagon-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/hexagon-slice-1.svg b/svg/ui/hexagon-slice-1.svg new file mode 100644 index 0000000..37d9bda --- /dev/null +++ b/svg/ui/hexagon-slice-1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/hexagon-slice-2.svg b/svg/ui/hexagon-slice-2.svg new file mode 100644 index 0000000..8a1fc3f --- /dev/null +++ b/svg/ui/hexagon-slice-2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/hexagon-slice-3.svg b/svg/ui/hexagon-slice-3.svg new file mode 100644 index 0000000..5075ef3 --- /dev/null +++ b/svg/ui/hexagon-slice-3.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/hexagon-slice-4.svg b/svg/ui/hexagon-slice-4.svg new file mode 100644 index 0000000..01fff71 --- /dev/null +++ b/svg/ui/hexagon-slice-4.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/hexagon-slice-5.svg b/svg/ui/hexagon-slice-5.svg new file mode 100644 index 0000000..7feb6f9 --- /dev/null +++ b/svg/ui/hexagon-slice-5.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/hexagon-slice-6.svg b/svg/ui/hexagon-slice-6.svg new file mode 100644 index 0000000..77172a5 --- /dev/null +++ b/svg/ui/hexagon-slice-6.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/history.svg b/svg/ui/history.svg new file mode 100644 index 0000000..675288a --- /dev/null +++ b/svg/ui/history.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/information-variant-circle-outline.svg b/svg/ui/information-variant-circle-outline.svg new file mode 100644 index 0000000..39c4225 --- /dev/null +++ b/svg/ui/information-variant-circle-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/keyboard-caps.svg b/svg/ui/keyboard-caps.svg new file mode 100644 index 0000000..3bfcea7 --- /dev/null +++ b/svg/ui/keyboard-caps.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/keyboard.svg b/svg/ui/keyboard.svg new file mode 100644 index 0000000..18a8cc6 --- /dev/null +++ b/svg/ui/keyboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/lan-check.svg b/svg/ui/lan-check.svg new file mode 100644 index 0000000..047630a --- /dev/null +++ b/svg/ui/lan-check.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/lan-connect.svg b/svg/ui/lan-connect.svg new file mode 100644 index 0000000..1121de0 --- /dev/null +++ b/svg/ui/lan-connect.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/lan-disconnect.svg b/svg/ui/lan-disconnect.svg new file mode 100644 index 0000000..4ca8e1c --- /dev/null +++ b/svg/ui/lan-disconnect.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/lan.svg b/svg/ui/lan.svg new file mode 100644 index 0000000..463e865 --- /dev/null +++ b/svg/ui/lan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/lock-outline.svg b/svg/ui/lock-outline.svg new file mode 100644 index 0000000..f3510a7 --- /dev/null +++ b/svg/ui/lock-outline.svg @@ -0,0 +1 @@ + diff --git a/svg/ui/logout.svg b/svg/ui/logout.svg new file mode 100644 index 0000000..286a41d --- /dev/null +++ b/svg/ui/logout.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/microsoft-xbox-controller-battery-alert.svg b/svg/ui/microsoft-xbox-controller-battery-alert.svg new file mode 100644 index 0000000..b4e6576 --- /dev/null +++ b/svg/ui/microsoft-xbox-controller-battery-alert.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/microsoft-xbox-controller-battery-charging.svg b/svg/ui/microsoft-xbox-controller-battery-charging.svg new file mode 100644 index 0000000..215e64e --- /dev/null +++ b/svg/ui/microsoft-xbox-controller-battery-charging.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/microsoft-xbox-controller-battery-empty.svg b/svg/ui/microsoft-xbox-controller-battery-empty.svg new file mode 100644 index 0000000..53c6317 --- /dev/null +++ b/svg/ui/microsoft-xbox-controller-battery-empty.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/microsoft-xbox-controller-battery-full.svg b/svg/ui/microsoft-xbox-controller-battery-full.svg new file mode 100644 index 0000000..355ced4 --- /dev/null +++ b/svg/ui/microsoft-xbox-controller-battery-full.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/microsoft-xbox-controller-battery-low.svg b/svg/ui/microsoft-xbox-controller-battery-low.svg new file mode 100644 index 0000000..14ea1eb --- /dev/null +++ b/svg/ui/microsoft-xbox-controller-battery-low.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/microsoft-xbox-controller-battery-medium.svg b/svg/ui/microsoft-xbox-controller-battery-medium.svg new file mode 100644 index 0000000..a954028 --- /dev/null +++ b/svg/ui/microsoft-xbox-controller-battery-medium.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/microsoft-xbox-controller-battery-unknown.svg b/svg/ui/microsoft-xbox-controller-battery-unknown.svg new file mode 100644 index 0000000..527fe99 --- /dev/null +++ b/svg/ui/microsoft-xbox-controller-battery-unknown.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/microsoft-xbox-controller-off.svg b/svg/ui/microsoft-xbox-controller-off.svg new file mode 100644 index 0000000..105cf90 --- /dev/null +++ b/svg/ui/microsoft-xbox-controller-off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/microsoft-xbox-controller.svg b/svg/ui/microsoft-xbox-controller.svg new file mode 100644 index 0000000..ab30aba --- /dev/null +++ b/svg/ui/microsoft-xbox-controller.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/palette-outline.svg b/svg/ui/palette-outline.svg new file mode 100644 index 0000000..001705d --- /dev/null +++ b/svg/ui/palette-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/power-sleep.svg b/svg/ui/power-sleep.svg new file mode 100644 index 0000000..1a07888 --- /dev/null +++ b/svg/ui/power-sleep.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/power.svg b/svg/ui/power.svg new file mode 100644 index 0000000..fd5d24d --- /dev/null +++ b/svg/ui/power.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/send-outline.svg b/svg/ui/send-outline.svg new file mode 100644 index 0000000..0b894b5 --- /dev/null +++ b/svg/ui/send-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/sync-alert.svg b/svg/ui/sync-alert.svg new file mode 100644 index 0000000..322c85e --- /dev/null +++ b/svg/ui/sync-alert.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/sync-off.svg b/svg/ui/sync-off.svg new file mode 100644 index 0000000..544e1a4 --- /dev/null +++ b/svg/ui/sync-off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/sync.svg b/svg/ui/sync.svg new file mode 100644 index 0000000..ca5d90c --- /dev/null +++ b/svg/ui/sync.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/tag-edit-outline.svg b/svg/ui/tag-edit-outline.svg new file mode 100644 index 0000000..4c5ee38 --- /dev/null +++ b/svg/ui/tag-edit-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/tag-minus-outline.svg b/svg/ui/tag-minus-outline.svg new file mode 100644 index 0000000..0cefe1e --- /dev/null +++ b/svg/ui/tag-minus-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/tag-outline.svg b/svg/ui/tag-outline.svg new file mode 100644 index 0000000..1993118 --- /dev/null +++ b/svg/ui/tag-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/tag-plus-outline.svg b/svg/ui/tag-plus-outline.svg new file mode 100644 index 0000000..a5f9be6 --- /dev/null +++ b/svg/ui/tag-plus-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/theme-light-dark.svg b/svg/ui/theme-light-dark.svg new file mode 100644 index 0000000..92d0218 --- /dev/null +++ b/svg/ui/theme-light-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/toggle-switch-off-outline.svg b/svg/ui/toggle-switch-off-outline.svg new file mode 100644 index 0000000..1f049ca --- /dev/null +++ b/svg/ui/toggle-switch-off-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/toggle-switch-outline.svg b/svg/ui/toggle-switch-outline.svg new file mode 100644 index 0000000..d761bbc --- /dev/null +++ b/svg/ui/toggle-switch-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/toggle-switch-variant-off.svg b/svg/ui/toggle-switch-variant-off.svg new file mode 100644 index 0000000..22a9dac --- /dev/null +++ b/svg/ui/toggle-switch-variant-off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/toggle-switch-variant.svg b/svg/ui/toggle-switch-variant.svg new file mode 100644 index 0000000..b0d2eb8 --- /dev/null +++ b/svg/ui/toggle-switch-variant.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/tools.svg b/svg/ui/tools.svg new file mode 100644 index 0000000..78c37b5 --- /dev/null +++ b/svg/ui/tools.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/trackpad-lock.svg b/svg/ui/trackpad-lock.svg new file mode 100644 index 0000000..b5000f6 --- /dev/null +++ b/svg/ui/trackpad-lock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/trackpad.svg b/svg/ui/trackpad.svg new file mode 100644 index 0000000..11df307 --- /dev/null +++ b/svg/ui/trackpad.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/tray-alert.svg b/svg/ui/tray-alert.svg new file mode 100644 index 0000000..2aea1ac --- /dev/null +++ b/svg/ui/tray-alert.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/tray.svg b/svg/ui/tray.svg new file mode 100644 index 0000000..f00e2cd --- /dev/null +++ b/svg/ui/tray.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/view-dashboard-edit-outline.svg b/svg/ui/view-dashboard-edit-outline.svg new file mode 100644 index 0000000..9e2ec9c --- /dev/null +++ b/svg/ui/view-dashboard-edit-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/view-dashboard-outline.svg b/svg/ui/view-dashboard-outline.svg new file mode 100644 index 0000000..a9b9d85 --- /dev/null +++ b/svg/ui/view-dashboard-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/widgets-outline.svg b/svg/ui/widgets-outline.svg new file mode 100644 index 0000000..1d15c53 --- /dev/null +++ b/svg/ui/widgets-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svg/ui/wrench-outline.svg b/svg/ui/wrench-outline.svg new file mode 100644 index 0000000..46b671b --- /dev/null +++ b/svg/ui/wrench-outline.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-cloudy-alert.svg b/svg/weather/weather-cloudy-alert.svg new file mode 100644 index 0000000..f567caf --- /dev/null +++ b/svg/weather/weather-cloudy-alert.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-cloudy-arrow-right.svg b/svg/weather/weather-cloudy-arrow-right.svg new file mode 100644 index 0000000..de7bc2d --- /dev/null +++ b/svg/weather/weather-cloudy-arrow-right.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-cloudy-clock.svg b/svg/weather/weather-cloudy-clock.svg new file mode 100644 index 0000000..d32aafb --- /dev/null +++ b/svg/weather/weather-cloudy-clock.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-cloudy.svg b/svg/weather/weather-cloudy.svg new file mode 100644 index 0000000..e8d81cb --- /dev/null +++ b/svg/weather/weather-cloudy.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-dust.svg b/svg/weather/weather-dust.svg new file mode 100644 index 0000000..da87ed8 --- /dev/null +++ b/svg/weather/weather-dust.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-fog.svg b/svg/weather/weather-fog.svg new file mode 100644 index 0000000..08d65df --- /dev/null +++ b/svg/weather/weather-fog.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-hail.svg b/svg/weather/weather-hail.svg new file mode 100644 index 0000000..fb864dd --- /dev/null +++ b/svg/weather/weather-hail.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-hazy.svg b/svg/weather/weather-hazy.svg new file mode 100644 index 0000000..46e2cd8 --- /dev/null +++ b/svg/weather/weather-hazy.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-hurricane-outline.svg b/svg/weather/weather-hurricane-outline.svg new file mode 100644 index 0000000..703da36 --- /dev/null +++ b/svg/weather/weather-hurricane-outline.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-hurricane.svg b/svg/weather/weather-hurricane.svg new file mode 100644 index 0000000..1991640 --- /dev/null +++ b/svg/weather/weather-hurricane.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-lightning-rainy.svg b/svg/weather/weather-lightning-rainy.svg new file mode 100644 index 0000000..3a518f2 --- /dev/null +++ b/svg/weather/weather-lightning-rainy.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-lightning.svg b/svg/weather/weather-lightning.svg new file mode 100644 index 0000000..8ca84b1 --- /dev/null +++ b/svg/weather/weather-lightning.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-moonset-down.svg b/svg/weather/weather-moonset-down.svg new file mode 100644 index 0000000..aaaf8fa --- /dev/null +++ b/svg/weather/weather-moonset-down.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-moonset-up.svg b/svg/weather/weather-moonset-up.svg new file mode 100644 index 0000000..24f6e02 --- /dev/null +++ b/svg/weather/weather-moonset-up.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-moonset.svg b/svg/weather/weather-moonset.svg new file mode 100644 index 0000000..acfee03 --- /dev/null +++ b/svg/weather/weather-moonset.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-night-partly-cloudy.svg b/svg/weather/weather-night-partly-cloudy.svg new file mode 100644 index 0000000..d1dc922 --- /dev/null +++ b/svg/weather/weather-night-partly-cloudy.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-night.svg b/svg/weather/weather-night.svg new file mode 100644 index 0000000..f8ac18c --- /dev/null +++ b/svg/weather/weather-night.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-partly-cloudy.svg b/svg/weather/weather-partly-cloudy.svg new file mode 100644 index 0000000..0a06d83 --- /dev/null +++ b/svg/weather/weather-partly-cloudy.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-partly-lightning.svg b/svg/weather/weather-partly-lightning.svg new file mode 100644 index 0000000..f84e844 --- /dev/null +++ b/svg/weather/weather-partly-lightning.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-partly-rainy.svg b/svg/weather/weather-partly-rainy.svg new file mode 100644 index 0000000..f1066fe --- /dev/null +++ b/svg/weather/weather-partly-rainy.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-partly-snowy-rainy.svg b/svg/weather/weather-partly-snowy-rainy.svg new file mode 100644 index 0000000..64eab95 --- /dev/null +++ b/svg/weather/weather-partly-snowy-rainy.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-partly-snowy.svg b/svg/weather/weather-partly-snowy.svg new file mode 100644 index 0000000..c86a778 --- /dev/null +++ b/svg/weather/weather-partly-snowy.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-pouring.svg b/svg/weather/weather-pouring.svg new file mode 100644 index 0000000..f5e38bf --- /dev/null +++ b/svg/weather/weather-pouring.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-rainy.svg b/svg/weather/weather-rainy.svg new file mode 100644 index 0000000..c995dac --- /dev/null +++ b/svg/weather/weather-rainy.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-snowy-heavy.svg b/svg/weather/weather-snowy-heavy.svg new file mode 100644 index 0000000..ded5119 --- /dev/null +++ b/svg/weather/weather-snowy-heavy.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-snowy-rainy.svg b/svg/weather/weather-snowy-rainy.svg new file mode 100644 index 0000000..c68ca18 --- /dev/null +++ b/svg/weather/weather-snowy-rainy.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-snowy.svg b/svg/weather/weather-snowy.svg new file mode 100644 index 0000000..8b28405 --- /dev/null +++ b/svg/weather/weather-snowy.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-sunny-alert.svg b/svg/weather/weather-sunny-alert.svg new file mode 100644 index 0000000..7a1a9db --- /dev/null +++ b/svg/weather/weather-sunny-alert.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-sunny-off.svg b/svg/weather/weather-sunny-off.svg new file mode 100644 index 0000000..04314d5 --- /dev/null +++ b/svg/weather/weather-sunny-off.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-sunny.svg b/svg/weather/weather-sunny.svg new file mode 100644 index 0000000..a5f632b --- /dev/null +++ b/svg/weather/weather-sunny.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-sunset-down.svg b/svg/weather/weather-sunset-down.svg new file mode 100644 index 0000000..593ea0c --- /dev/null +++ b/svg/weather/weather-sunset-down.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-sunset-up.svg b/svg/weather/weather-sunset-up.svg new file mode 100644 index 0000000..5dec74d --- /dev/null +++ b/svg/weather/weather-sunset-up.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-sunset.svg b/svg/weather/weather-sunset.svg new file mode 100644 index 0000000..e59992a --- /dev/null +++ b/svg/weather/weather-sunset.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-tornado.svg b/svg/weather/weather-tornado.svg new file mode 100644 index 0000000..71dfe0a --- /dev/null +++ b/svg/weather/weather-tornado.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-windy-variant.svg b/svg/weather/weather-windy-variant.svg new file mode 100644 index 0000000..caf9547 --- /dev/null +++ b/svg/weather/weather-windy-variant.svg @@ -0,0 +1 @@ + diff --git a/svg/weather/weather-windy.svg b/svg/weather/weather-windy.svg new file mode 100644 index 0000000..2f49797 --- /dev/null +++ b/svg/weather/weather-windy.svg @@ -0,0 +1 @@ + diff --git a/svg/yin-yang.svg b/svg/yin-yang.svg new file mode 100644 index 0000000..ceee1b4 --- /dev/null +++ b/svg/yin-yang.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 4cc4e67..662a76b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,5 +1,7 @@ { - "include": ["."], + "include": [ + "." + ], "compilerOptions": { "rootDir": ".", "target": "ESNext", @@ -8,7 +10,7 @@ "noEmit": true, "allowJs": true, "checkJs": true, - "strict": true, + "strict": false, "skipLibCheck": true, "noFallthroughCasesInSwitch": true, "exactOptionalPropertyTypes": true, diff --git a/wallpapers/pinksunwave.mp4 b/wallpapers/pinksunwave.mp4 new file mode 100644 index 0000000..e64e8c6 Binary files /dev/null and b/wallpapers/pinksunwave.mp4 differ