diff --git a/Modules/LockScreen/LockScreen.qml b/Modules/LockScreen/LockScreen.qml index e4da717a..e97cb3fe 100644 --- a/Modules/LockScreen/LockScreen.qml +++ b/Modules/LockScreen/LockScreen.qml @@ -103,8 +103,8 @@ Loader { visible: Settings.data.general.showScreenCorners property color cornerColor: Settings.data.general.forceBlackScreenCorners ? Qt.rgba(0, 0, 0, 1) : Qt.alpha(Color.mSurface, Settings.data.bar.backgroundOpacity) - property real cornerRadius: Style.screenRadius - property real cornerSize: Style.screenRadius + property real cornerRadius: Style.screenRadius + property real cornerSize: Style.screenRadius // Top-left concave corner Canvas { @@ -248,12 +248,12 @@ Loader { // Time, Date, and User Profile Container Rectangle { - width: Math.max(500 , contentRow.implicitWidth + 32) - height: Math.max(120 , contentRow.implicitHeight + 32) + width: Math.max(500, contentRow.implicitWidth + 32) + height: Math.max(120, contentRow.implicitHeight + 32) anchors.horizontalCenter: parent.horizontalCenter anchors.top: parent.top - anchors.topMargin: 100 - radius: Style.radiusL + anchors.topMargin: 100 + radius: Style.radiusL color: Color.mSurface border.color: Qt.alpha(Color.mOutline, 0.2) border.width: 1 @@ -266,8 +266,8 @@ Loader { // Left side: Avatar Rectangle { - Layout.preferredWidth: 70 - Layout.preferredHeight: 70 + Layout.preferredWidth: 70 + Layout.preferredHeight: 70 Layout.alignment: Qt.AlignVCenter radius: width * 0.5 color: Color.transparent @@ -296,8 +296,8 @@ Loader { NImageCircled { anchors.centerIn: parent - width: 66 - height: 66 + width: 66 + height: 66 imagePath: Settings.preprocessPath(Settings.data.general.avatarImage) fallbackIcon: "person" @@ -320,12 +320,12 @@ Loader { // Center: User Info Column (left-aligned text) ColumnLayout { Layout.alignment: Qt.AlignVCenter - spacing: 2 + spacing: 2 // Welcome back + Username on one line NText { text: I18n.tr("lock-screen.welcome-back") + " " + Quickshell.env("USER") + "!" - pointSize: Style.fontSizeXXL + pointSize: Style.fontSizeXXL font.weight: Font.Medium color: Color.mOnSurface horizontalAlignment: Text.AlignLeft @@ -334,7 +334,7 @@ Loader { // Date below NText { text: Qt.locale().toString(Time.date, "dddd, MMMM d") - pointSize: Style.fontSizeXL + pointSize: Style.fontSizeXL font.weight: Font.Medium color: Color.mOnSurfaceVariant horizontalAlignment: Text.AlignLeft @@ -347,8 +347,8 @@ Loader { } Item { - Layout.preferredWidth: 70 - Layout.preferredHeight: 70 + Layout.preferredWidth: 70 + Layout.preferredHeight: 70 Layout.alignment: Qt.AlignVCenter // Seconds circular progress @@ -371,21 +371,21 @@ Loader { var ctx = getContext("2d") var centerX = width / 2 var centerY = height / 2 - var radius = Math.min(width, height) / 2 - 3 + var radius = Math.min(width, height) / 2 - 3 ctx.reset() // Background circle ctx.beginPath() ctx.arc(centerX, centerY, radius, 0, 2 * Math.PI) - ctx.lineWidth = 2.5 + ctx.lineWidth = 2.5 ctx.strokeStyle = Qt.alpha(Color.mOnSurface, 0.15) ctx.stroke() // Progress arc ctx.beginPath() ctx.arc(centerX, centerY, radius, -Math.PI / 2, -Math.PI / 2 + progress * 2 * Math.PI) - ctx.lineWidth = 2.5 + ctx.lineWidth = 2.5 ctx.strokeStyle = Color.mPrimary ctx.lineCap = "round" ctx.stroke() @@ -402,7 +402,7 @@ Loader { var t = Settings.data.location.use12hourFormat ? Qt.locale().toString(Time.date, "hh AP") : Qt.locale().toString(Time.date, "HH") return t } - pointSize: Style.fontSizeL + pointSize: Style.fontSizeL font.weight: Style.fontWeightBold color: Color.mOnSurface horizontalAlignment: Text.AlignHCenter @@ -411,7 +411,7 @@ Loader { NText { text: Qt.formatTime(Time.date, "mm") - pointSize: Style.fontSizeL + pointSize: Style.fontSizeL font.weight: Style.fontWeightBold color: Color.mOnSurfaceVariant horizontalAlignment: Text.AlignHCenter @@ -424,12 +424,12 @@ Loader { // Error notification Rectangle { - width: 450 - height: 60 + width: 450 + height: 60 anchors.horizontalCenter: parent.horizontalCenter anchors.bottom: parent.bottom - anchors.bottomMargin: 300 - radius: 30 + anchors.bottomMargin: 300 + radius: 30 color: Color.mError border.color: Color.mError border.width: 1 @@ -438,18 +438,18 @@ Loader { RowLayout { anchors.centerIn: parent - spacing: 10 + spacing: 10 NIcon { icon: "alert-circle" - pointSize: Style.fontSizeL + pointSize: Style.fontSizeL color: Color.mOnError } NText { text: lockContext.errorMessage || "Authentication failed" color: Color.mOnError - pointSize: Style.fontSizeL + pointSize: Style.fontSizeL font.weight: Font.Medium horizontalAlignment: Text.AlignHCenter } @@ -470,60 +470,60 @@ Loader { var hasKeyboard = keyboardLayout.currentLayout !== "Unknown" if (hasBattery && hasKeyboard) { - return 200 + return 200 } else if (hasBattery || hasKeyboard) { - return 120 + return 120 } else { return 0 } } - height: 40 + height: 40 anchors.horizontalCenter: parent.horizontalCenter anchors.bottom: parent.bottom - anchors.bottomMargin: 96 + (Settings.data.general.compactLockScreen ? 116 : 220 ) - topLeftRadius: Style.radiusL - topRightRadius: Style.radiusL + anchors.bottomMargin: 96 + (Settings.data.general.compactLockScreen ? 116 : 220) + topLeftRadius: Style.radiusL + topRightRadius: Style.radiusL color: Color.mSurface visible: Settings.data.general.compactLockScreen && ((UPower.displayDevice && UPower.displayDevice.ready && UPower.displayDevice.isPresent) || keyboardLayout.currentLayout !== "Unknown") RowLayout { anchors.centerIn: parent - spacing: 16 + spacing: 16 // Battery indicator RowLayout { - spacing: 6 + spacing: 6 visible: UPower.displayDevice && UPower.displayDevice.ready && UPower.displayDevice.isPresent NIcon { icon: BatteryService.getIcon(Math.round(UPower.displayDevice.percentage * 100), UPower.displayDevice.state === UPowerDeviceState.Charging, true) - pointSize: Style.fontSizeM + pointSize: Style.fontSizeM color: UPower.displayDevice.state === UPowerDeviceState.Charging ? Color.mPrimary : Color.mOnSurfaceVariant } NText { text: Math.round(UPower.displayDevice.percentage * 100) + "%" color: Color.mOnSurfaceVariant - pointSize: Style.fontSizeM + pointSize: Style.fontSizeM font.weight: Font.Medium } } // Keyboard layout indicator RowLayout { - spacing: 6 + spacing: 6 visible: keyboardLayout.currentLayout !== "Unknown" NIcon { icon: "keyboard" - pointSize: Style.fontSizeM + pointSize: Style.fontSizeM color: Color.mOnSurfaceVariant } NText { text: keyboardLayout.currentLayout color: Color.mOnSurfaceVariant - pointSize: Style.fontSizeM + pointSize: Style.fontSizeM font.weight: Font.Medium elide: Text.ElideRight } @@ -533,38 +533,38 @@ Loader { // Bottom container with weather, password input and controls Rectangle { - width: 750 - height: Settings.data.general.compactLockScreen ? 120 : 220 + width: 750 + height: Settings.data.general.compactLockScreen ? 120 : 220 anchors.horizontalCenter: parent.horizontalCenter anchors.bottom: parent.bottom - anchors.bottomMargin: 100 - radius: Style.radiusL + anchors.bottomMargin: 100 + radius: Style.radiusL color: Color.mSurface ColumnLayout { anchors.fill: parent - anchors.margins: 14 - spacing: 14 + anchors.margins: 14 + spacing: 14 // Weather section RowLayout { Layout.fillWidth: true - Layout.preferredHeight: 65 - spacing: 18 + Layout.preferredHeight: 65 + spacing: 18 visible: !Settings.data.general.compactLockScreen && LocationService.coordinatesReady && LocationService.data.weather !== null // Media widget with visualizer Rectangle { - Layout.preferredWidth: 220 - Layout.preferredHeight: 50 - radius: 25 + Layout.preferredWidth: 220 + Layout.preferredHeight: 50 + radius: 25 color: Color.transparent clip: true visible: MediaService.currentPlayer && MediaService.canPlay Loader { anchors.fill: parent - anchors.margins: 4 + anchors.margins: 4 active: Settings.data.audio.visualizerType === "linear" z: 0 sourceComponent: LinearSpectrum { @@ -577,7 +577,7 @@ Loader { Loader { anchors.fill: parent - anchors.margins: 4 + anchors.margins: 4 active: Settings.data.audio.visualizerType === "mirrored" z: 0 sourceComponent: MirroredSpectrum { @@ -590,7 +590,7 @@ Loader { Loader { anchors.fill: parent - anchors.margins: 4 + anchors.margins: 4 active: Settings.data.audio.visualizerType === "wave" z: 0 sourceComponent: WaveSpectrum { @@ -603,35 +603,35 @@ Loader { RowLayout { anchors.fill: parent - anchors.margins: 8 - spacing: 8 + anchors.margins: 8 + spacing: 8 z: 1 Rectangle { - Layout.preferredWidth: 34 - Layout.preferredHeight: 34 + Layout.preferredWidth: 34 + Layout.preferredHeight: 34 radius: width * 0.5 color: Color.transparent clip: true NImageCircled { anchors.fill: parent - anchors.margins: 2 + anchors.margins: 2 imagePath: MediaService.trackArtUrl fallbackIcon: "disc" - fallbackIconSize: Style.fontSizeM + fallbackIconSize: Style.fontSizeM borderColor: Color.mOutline - borderWidth: Math.max(1, Style.borderS ) + borderWidth: Math.max(1, Style.borderS) } } ColumnLayout { Layout.fillWidth: true - spacing: 2 + spacing: 2 NText { text: MediaService.trackTitle || "No media" - pointSize: Style.fontSizeM + pointSize: Style.fontSizeM font.weight: Style.fontWeightMedium color: Color.mOnSurface Layout.fillWidth: true @@ -640,7 +640,7 @@ Loader { NText { text: MediaService.trackArtist || "" - pointSize: Style.fontSizeM + pointSize: Style.fontSizeM color: Color.mOnSurfaceVariant Layout.fillWidth: true elide: Text.ElideRight @@ -652,35 +652,35 @@ Loader { Rectangle { Layout.preferredWidth: 1 Layout.fillHeight: true - Layout.rightMargin: 4 + Layout.rightMargin: 4 color: Qt.alpha(Color.mOutline, 0.3) visible: MediaService.currentPlayer && MediaService.canPlay } Item { - Layout.preferredWidth: Style.marginM + Layout.preferredWidth: Style.marginM visible: !(MediaService.currentPlayer && MediaService.canPlay) } // Current weather RowLayout { - Layout.preferredWidth: 180 - spacing: 8 + Layout.preferredWidth: 180 + spacing: 8 NIcon { Layout.alignment: Qt.AlignVCenter icon: LocationService.weatherSymbolFromCode(LocationService.data.weather.current_weather.weathercode) - pointSize: Style.fontSizeXXXL + pointSize: Style.fontSizeXXXL color: Color.mPrimary } ColumnLayout { Layout.fillWidth: true - spacing: 2 + spacing: 2 RowLayout { Layout.fillWidth: true - spacing: 12 + spacing: 12 NText { text: { @@ -693,7 +693,7 @@ Loader { temp = Math.round(temp) return temp + "°" + suffix } - pointSize: Style.fontSizeXL + pointSize: Style.fontSizeXL font.weight: Style.fontWeightBold color: Color.mOnSurface } @@ -709,7 +709,7 @@ Loader { wind = Math.round(wind) return wind + " " + unit } - pointSize: Style.fontSizeM + pointSize: Style.fontSizeM color: Color.mOnSurfaceVariant font.weight: Font.Normal } @@ -717,17 +717,17 @@ Loader { RowLayout { Layout.fillWidth: true - spacing: 8 + spacing: 8 NText { text: Settings.data.location.name.split(",")[0] - pointSize: Style.fontSizeM + pointSize: Style.fontSizeM color: Color.mOnSurfaceVariant } NText { text: (LocationService.data.weather.current && LocationService.data.weather.current.relativehumidity_2m) ? LocationService.data.weather.current.relativehumidity_2m + "% humidity" : "" - pointSize: Style.fontSizeM + pointSize: Style.fontSizeM color: Color.mOnSurfaceVariant } } @@ -736,19 +736,19 @@ Loader { // 3-day forecast RowLayout { - Layout.preferredWidth: 260 - Layout.rightMargin: 8 - spacing: 4 + Layout.preferredWidth: 260 + Layout.rightMargin: 8 + spacing: 4 Repeater { model: 3 delegate: ColumnLayout { Layout.fillWidth: true - spacing: 3 + spacing: 3 NText { text: Qt.locale().toString(now, "ddd") - pointSize: Style.fontSizeM + pointSize: Style.fontSizeM color: Color.mOnSurfaceVariant horizontalAlignment: Text.AlignHCenter Layout.fillWidth: true @@ -757,7 +757,7 @@ Loader { NIcon { Layout.alignment: Qt.AlignHCenter icon: LocationService.weatherSymbolFromCode(LocationService.data.weather.daily.weathercode[index]) - pointSize: Style.fontSizeXL + pointSize: Style.fontSizeXL color: Color.mOnSurfaceVariant } @@ -773,7 +773,7 @@ Loader { min = Math.round(min) return max + "°/" + min + "°" } - pointSize: Style.fontSizeM + pointSize: Style.fontSizeM font.weight: Style.fontWeightMedium color: Color.mOnSurfaceVariant horizontalAlignment: Text.AlignHCenter @@ -785,24 +785,24 @@ Loader { // Battery and Keyboard Layout (full mode only) ColumnLayout { - Layout.preferredWidth: 60 - spacing: 8 + Layout.preferredWidth: 60 + spacing: 8 // Battery RowLayout { - spacing: 4 + spacing: 4 visible: UPower.displayDevice && UPower.displayDevice.ready && UPower.displayDevice.isPresent NIcon { icon: BatteryService.getIcon(Math.round(UPower.displayDevice.percentage * 100), UPower.displayDevice.state === UPowerDeviceState.Charging, true) - pointSize: Style.fontSizeM + pointSize: Style.fontSizeM color: UPower.displayDevice.state === UPowerDeviceState.Charging ? Color.mPrimary : Color.mOnSurfaceVariant } NText { text: Math.round(UPower.displayDevice.percentage * 100) + "%" color: Color.mOnSurfaceVariant - pointSize: Style.fontSizeM + pointSize: Style.fontSizeM font.weight: Font.Medium elide: Text.ElideRight Layout.fillWidth: true @@ -811,19 +811,19 @@ Loader { // Keyboard Layout RowLayout { - spacing: 4 + spacing: 4 visible: keyboardLayout.currentLayout !== "Unknown" NIcon { icon: "keyboard" - pointSize: Style.fontSizeM + pointSize: Style.fontSizeM color: Color.mOnSurfaceVariant } NText { text: keyboardLayout.currentLayout color: Color.mOnSurfaceVariant - pointSize: Style.fontSizeM + pointSize: Style.fontSizeM font.weight: Font.Medium elide: Text.ElideRight Layout.fillWidth: true @@ -838,26 +838,26 @@ Loader { spacing: 0 Item { - Layout.preferredWidth: Style.marginM + Layout.preferredWidth: Style.marginM } Rectangle { Layout.fillWidth: true - Layout.preferredHeight: 48 - radius: 24 + Layout.preferredHeight: 48 + radius: 24 color: Color.mSurface border.color: passwordInput.activeFocus ? Color.mPrimary : Qt.alpha(Color.mOutline, 0.3) border.width: passwordInput.activeFocus ? 2 : 1 Row { anchors.left: parent.left - anchors.leftMargin: 18 + anchors.leftMargin: 18 anchors.verticalCenter: parent.verticalCenter - spacing: 14 + spacing: 14 NIcon { icon: "lock" - pointSize: Style.fontSizeL + pointSize: Style.fontSizeL color: passwordInput.activeFocus ? Color.mPrimary : Color.mOnSurfaceVariant anchors.verticalCenter: parent.verticalCenter } @@ -869,7 +869,7 @@ Loader { height: 0 visible: false enabled: !lockContext.unlockInProgress - font.pointSize: Style.fontSizeM + font.pointSize: Style.fontSizeM color: Color.mPrimary echoMode: TextInput.Password passwordCharacter: "•" @@ -890,8 +890,8 @@ Loader { spacing: 0 Rectangle { - width: 2 - height: 20 + width: 2 + height: 20 color: Color.mPrimary visible: passwordInput.activeFocus && passwordInput.text.length === 0 anchors.verticalCenter: parent.verticalCenter @@ -911,7 +911,7 @@ Loader { } Row { - spacing: 6 + spacing: 6 visible: passwordInput.text.length > 0 anchors.verticalCenter: parent.verticalCenter @@ -920,7 +920,7 @@ Loader { NIcon { icon: "circle-filled" - pointSize: Style.fontSizeS + pointSize: Style.fontSizeS color: Color.mPrimary opacity: 1.0 } @@ -928,8 +928,8 @@ Loader { } Rectangle { - width: 2 - height: 20 + width: 2 + height: 20 color: Color.mPrimary visible: passwordInput.activeFocus && passwordInput.text.length > 0 anchors.verticalCenter: parent.verticalCenter @@ -952,10 +952,10 @@ Loader { Rectangle { anchors.right: parent.right - anchors.rightMargin: 8 + anchors.rightMargin: 8 anchors.verticalCenter: parent.verticalCenter - width: 36 - height: 36 + width: 36 + height: 36 radius: width * 0.5 color: submitButtonArea.containsMouse ? Color.mPrimary : Qt.alpha(Color.mPrimary, 0.8) border.color: Color.mPrimary @@ -965,7 +965,7 @@ Loader { NIcon { anchors.centerIn: parent icon: "arrow-forward" - pointSize: Style.fontSizeM + pointSize: Style.fontSizeM color: Color.mOnPrimary } @@ -986,42 +986,42 @@ Loader { } Item { - Layout.preferredWidth: Style.marginM + Layout.preferredWidth: Style.marginM } } // System control buttons RowLayout { Layout.fillWidth: true - Layout.preferredHeight: Settings.data.general.compactLockScreen ? 36 : 48 - spacing: 10 + Layout.preferredHeight: Settings.data.general.compactLockScreen ? 36 : 48 + spacing: 10 Item { - Layout.preferredWidth: Style.marginM + Layout.preferredWidth: Style.marginM } Rectangle { Layout.fillWidth: true - Layout.preferredHeight: Settings.data.general.compactLockScreen ? 36 : 48 - radius: Settings.data.general.compactLockScreen ? 18 : 24 + Layout.preferredHeight: Settings.data.general.compactLockScreen ? 36 : 48 + radius: Settings.data.general.compactLockScreen ? 18 : 24 color: logoutButtonArea.containsMouse ? Color.mTertiary : "transparent" border.color: Color.mOutline border.width: 1 RowLayout { anchors.centerIn: parent - spacing: 6 + spacing: 6 NIcon { icon: "logout" - pointSize: Settings.data.general.compactLockScreen ? Style.fontSizeM : Style.fontSizeL + pointSize: Settings.data.general.compactLockScreen ? Style.fontSizeM : Style.fontSizeL color: logoutButtonArea.containsMouse ? Color.mOnTertiary : Color.mOnSurfaceVariant } NText { text: I18n.tr("session-menu.logout") color: logoutButtonArea.containsMouse ? Color.mOnTertiary : Color.mOnSurfaceVariant - pointSize: Settings.data.general.compactLockScreen ? Style.fontSizeS : Style.fontSizeM + pointSize: Settings.data.general.compactLockScreen ? Style.fontSizeS : Style.fontSizeM font.weight: Font.Medium } } @@ -1050,26 +1050,26 @@ Loader { Rectangle { Layout.fillWidth: true - Layout.preferredHeight: Settings.data.general.compactLockScreen ? 36 : 48 - radius: Settings.data.general.compactLockScreen ? 18 : 24 + Layout.preferredHeight: Settings.data.general.compactLockScreen ? 36 : 48 + radius: Settings.data.general.compactLockScreen ? 18 : 24 color: suspendButtonArea.containsMouse ? Color.mTertiary : "transparent" border.color: Color.mOutline border.width: 1 RowLayout { anchors.centerIn: parent - spacing: 6 + spacing: 6 NIcon { icon: "suspend" - pointSize: Settings.data.general.compactLockScreen ? Style.fontSizeM : Style.fontSizeL + pointSize: Settings.data.general.compactLockScreen ? Style.fontSizeM : Style.fontSizeL color: suspendButtonArea.containsMouse ? Color.mOnTertiary : Color.mOnSurfaceVariant } NText { text: I18n.tr("session-menu.suspend") color: suspendButtonArea.containsMouse ? Color.mOnTertiary : Color.mOnSurfaceVariant - pointSize: Settings.data.general.compactLockScreen ? Style.fontSizeS : Style.fontSizeM + pointSize: Settings.data.general.compactLockScreen ? Style.fontSizeS : Style.fontSizeM font.weight: Font.Medium } } @@ -1098,26 +1098,26 @@ Loader { Rectangle { Layout.fillWidth: true - Layout.preferredHeight: Settings.data.general.compactLockScreen ? 36 : 48 - radius: Settings.data.general.compactLockScreen ? 18 : 24 + Layout.preferredHeight: Settings.data.general.compactLockScreen ? 36 : 48 + radius: Settings.data.general.compactLockScreen ? 18 : 24 color: rebootButtonArea.containsMouse ? Color.mTertiary : "transparent" border.color: Color.mOutline border.width: 1 RowLayout { anchors.centerIn: parent - spacing: 6 + spacing: 6 NIcon { icon: "reboot" - pointSize: Settings.data.general.compactLockScreen ? Style.fontSizeM : Style.fontSizeL + pointSize: Settings.data.general.compactLockScreen ? Style.fontSizeM : Style.fontSizeL color: rebootButtonArea.containsMouse ? Color.mOnTertiary : Color.mOnSurfaceVariant } NText { text: I18n.tr("session-menu.reboot") color: rebootButtonArea.containsMouse ? Color.mOnTertiary : Color.mOnSurfaceVariant - pointSize: Settings.data.general.compactLockScreen ? Style.fontSizeS : Style.fontSizeM + pointSize: Settings.data.general.compactLockScreen ? Style.fontSizeS : Style.fontSizeM font.weight: Font.Medium } } @@ -1146,26 +1146,26 @@ Loader { Rectangle { Layout.fillWidth: true - Layout.preferredHeight: Settings.data.general.compactLockScreen ? 36 : 48 - radius: Settings.data.general.compactLockScreen ? 18 : 24 + Layout.preferredHeight: Settings.data.general.compactLockScreen ? 36 : 48 + radius: Settings.data.general.compactLockScreen ? 18 : 24 color: shutdownButtonArea.containsMouse ? Color.mError : "transparent" border.color: shutdownButtonArea.containsMouse ? Color.mError : Color.mOutline border.width: 1 RowLayout { anchors.centerIn: parent - spacing: 6 + spacing: 6 NIcon { icon: "shutdown" - pointSize: Settings.data.general.compactLockScreen ? Style.fontSizeM : Style.fontSizeL + pointSize: Settings.data.general.compactLockScreen ? Style.fontSizeM : Style.fontSizeL color: shutdownButtonArea.containsMouse ? Color.mOnError : Color.mOnSurfaceVariant } NText { text: I18n.tr("session-menu.shutdown") color: shutdownButtonArea.containsMouse ? Color.mOnError : Color.mOnSurfaceVariant - pointSize: Settings.data.general.compactLockScreen ? Style.fontSizeS : Style.fontSizeM + pointSize: Settings.data.general.compactLockScreen ? Style.fontSizeS : Style.fontSizeM font.weight: Font.Medium } } @@ -1193,7 +1193,7 @@ Loader { } Item { - Layout.preferredWidth: Style.marginM + Layout.preferredWidth: Style.marginM } } } @@ -1203,4 +1203,4 @@ Loader { } } } -} \ No newline at end of file +}