Remove unused lodash and parallax-js dependencies

lodash was only used for debounce, replaced with a small custom
implementation in utils/helper.ts. parallax-js and its type
declarations were no longer referenced anywhere in the project.
main
Warinyourself 1 month ago
parent 5898ad34d6
commit ea20e053b6

50
package-lock.json generated

@ -9,11 +9,9 @@
"version": "0.0.0",
"dependencies": {
"@lucide/vue": "^1.17.0",
"lodash": "^4.18.1",
"mousetrap": "^1.6.5",
"nody-greeter-types": "^1.1.0",
"nouislider": "^15.8.1",
"parallax-js": "^3.1.0",
"pinia": "^3.0.4",
"vue": "^3.5.32",
"vue-i18n": "^11.4.5",
@ -21,7 +19,6 @@
},
"devDependencies": {
"@tsconfig/node24": "^24.0.4",
"@types/lodash": "^4.17.24",
"@types/mousetrap": "^1.6.15",
"@types/node": "^24.12.2",
"@vitejs/plugin-vue": "^6.0.6",
@ -1004,13 +1001,6 @@
"integrity": "sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==",
"license": "MIT"
},
"node_modules/@types/lodash": {
"version": "4.17.24",
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.24.tgz",
"integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/mousetrap": {
"version": "1.6.15",
"resolved": "https://registry.npmjs.org/@types/mousetrap/-/mousetrap-1.6.15.tgz",
@ -2519,12 +2509,6 @@
"url": "https://github.com/sponsors/antfu"
}
},
"node_modules/lodash": {
"version": "4.18.1",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz",
"integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==",
"license": "MIT"
},
"node_modules/lru-cache": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
@ -2755,15 +2739,6 @@
"url": "https://github.com/fb55/nth-check?sponsor=1"
}
},
"node_modules/object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/obug": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/obug/-/obug-2.1.2.tgz",
@ -2813,16 +2788,6 @@
"dev": true,
"license": "BlueOak-1.0.0"
},
"node_modules/parallax-js": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/parallax-js/-/parallax-js-3.1.0.tgz",
"integrity": "sha512-UONoPKSQykeNvFcemDPxYYDU/T89LSffoaZAwOMhDp0ABhmFPwthgn2GrfB7An9Qo+8nPZIuQeZsh2pWn1qN3A==",
"license": "MIT",
"dependencies": {
"object-assign": "^4.1.1",
"raf": "^3.3.0"
}
},
"node_modules/path-browserify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
@ -2876,12 +2841,6 @@
"integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==",
"license": "MIT"
},
"node_modules/performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==",
"license": "MIT"
},
"node_modules/picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
@ -3002,15 +2961,6 @@
],
"license": "MIT"
},
"node_modules/raf": {
"version": "3.4.1",
"resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
"integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
"license": "MIT",
"dependencies": {
"performance-now": "^2.1.0"
}
},
"node_modules/read-package-json-fast": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-4.0.0.tgz",

@ -12,11 +12,9 @@
},
"dependencies": {
"@lucide/vue": "^1.17.0",
"lodash": "^4.18.1",
"mousetrap": "^1.6.5",
"nody-greeter-types": "^1.1.0",
"nouislider": "^15.8.1",
"parallax-js": "^3.1.0",
"pinia": "^3.0.4",
"vue": "^3.5.32",
"vue-i18n": "^11.4.5",
@ -24,7 +22,6 @@
},
"devDependencies": {
"@tsconfig/node24": "^24.0.4",
"@types/lodash": "^4.17.24",
"@types/mousetrap": "^1.6.15",
"@types/node": "^24.12.2",
"@vitejs/plugin-vue": "^6.0.6",

@ -1,9 +1,8 @@
import { defineComponent, watch } from 'vue'
import { debounce } from 'lodash'
import Mousetrap from 'mousetrap'
import { useAppStore } from '@/store/app'
import { usePageStore } from '@/store/page'
import { focusInputPassword, setCSSVariable } from '@/utils/helper'
import { debounce, focusInputPassword, setCSSVariable } from '@/utils/helper'
import { hotkeys } from '@/utils/hotkeys'
export default defineComponent({

@ -1,7 +1,7 @@
import { defineComponent, onMounted, onUpdated, ref } from 'vue'
import { useI18n } from 'vue-i18n'
import noUiSlider from 'nouislider'
import { debounce } from 'lodash'
import { debounce } from '@/utils/helper'
export default defineComponent({
name: 'AppSlider',

@ -7,7 +7,7 @@ import AppCheckbox from '@/components/app/AppCheckbox'
import AppSelector from '@/components/app/AppSelector'
import AppColorSelector from '@/components/app/AppColorSelector'
import AppPaletteSelector from '@/components/app/AppPaletteSelector'
import { createDebounce } from '@/utils/helper'
import { debounce } from '@/utils/helper'
import type {
AppInputButton,
AppInputColor,
@ -24,7 +24,7 @@ export default defineComponent({
const { t } = useI18n()
const inputs = computed(() => appStore.activeTheme?.settings || [])
const debouncedSync = createDebounce(() => appStore.syncStoreWithQuery(), 300)
const debouncedSync = debounce(() => appStore.syncStoreWithQuery(), 300)
onUpdated(() => debouncedSync())

@ -5,7 +5,7 @@ import { usePageStore } from '@/store/page'
import { useRouter } from 'vue-router'
import AppSelector from '@/components/app/AppSelector'
import AppSlider from '@/components/app/AppSlider'
import { createDebounce, generateDesktopIcons, languageMap, setCSSVariable } from '@/utils/helper'
import { debounce, generateDesktopIcons, languageMap, setCSSVariable } from '@/utils/helper'
import type { LoginPosition } from '@/models/page'
export default defineComponent({
@ -49,7 +49,7 @@ export default defineComponent({
appStore.saveStateApp({ key: 'desktop', value })
}
const updateZoom = createDebounce((value: number) => {
const updateZoom = debounce((value: number) => {
setCSSVariable('--zoom', value + '' || '1')
appStore.zoom = parseFloat(value + '')
}, 100)

@ -1,62 +0,0 @@
declare module 'parallax-js' {
export default class Parallax {
private inputElement?: string | HTMLElement | null;
private calibrateX?: boolean;
private calibrateY?: boolean;
private invertX?: boolean;
private invertY?: boolean;
private limitX?: number | false;
private limitY?: number | false;
private scalarX?: number;
private scalarY?: number;
private frictionX?: number;
private frictionY?: number;
private originX?: number;
private originY?: number;
public precision?: number;
public relativeInput?: boolean;
public clipRelativeInput?: boolean;
public pointerEvents?: boolean;
public hoverOnly?: boolean;
public selector?: string | null;
public onReady?: () => void;
constructor(element: HTMLElement, options?: ParallaxOptions);
public enable(): void;
public disable(): void;
public destroy(): void;
public version(): void;
public setInputElement(element: string | HTMLElement | null): void;
public calibrate(x: boolean, y: boolean): void;
public invert(x: boolean, y: boolean): void;
public limit(x: number | false, y: number | false): void;
public scalar(x: number, y: number): void;
public friction(x: number, y: number): void;
public origin(x: number, y: number): void;
}
export interface ParallaxOptions {
precision?: number;
relativeInput?: boolean;
clipRelativeInput?: boolean;
hoverOnly?: boolean;
inputElement?: string | HTMLElement | null;
pointerEvents?: boolean;
calibrateX?: boolean;
calibrateY?: boolean;
invertX?: boolean;
invertY?: boolean;
limitX?: number | false;
limitY?: number | false;
scalarX?: number;
scalarY?: number;
frictionX?: number;
frictionY?: number;
originX?: number;
originY?: number;
selector?: string | null;
onReady?: () => void;
}
}

@ -1,5 +1,4 @@
import type { AppInputButton, AppInputThemeGeneral, AppInputThemePalette, AppInputThemeSlider, AppTheme } from '@/models/app'
import { debounce, type DebounceSettings } from 'lodash'
import type { RouteLocationRaw } from 'vue-router'
import router from '@/router'
import { LightdmHandler } from '@/utils/lightdm'
@ -23,8 +22,12 @@ export function isDifferentRoute(to: RouteLocationRaw) {
return router.currentRoute.value.fullPath !== resolve.fullPath
}
export function createDebounce<T extends (...args: any[]) => any>(fn: T, time = 500, options?: DebounceSettings) {
return debounce(fn, time, options) as unknown as T
export function debounce<T extends (...args: any[]) => void>(fn: T, wait = 500) {
let timeout: ReturnType<typeof setTimeout>
return ((...args: Parameters<T>) => {
clearTimeout(timeout)
timeout = setTimeout(() => fn(...args), wait)
}) as T
}
export function parseQueryValue(value: string) {

Loading…
Cancel
Save