diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 2fcb0e2..88f574a 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -1,5 +1,11 @@ +### 📦 0.7.1 + +- **Reduced app size**. The app size is now is a reasonable 35MB, down significantly from a whopping 200MB 😬 which was due to asset bloat (unused icons, uncompressed images). + ### 📦 0.7.0 - _BREAKING RELEASE_. The way albums are stored internally has changed, please delete and re-import your library. + +_BREAKING RELEASE_. The way albums are stored internally has changed, please delete and re-import your library. + - **Gapless playback**. The audio playback component has been re-built to support gapless playback (between files of the same sample rate), resampling (automatically switches on when the audio device doesn't support the file sample rate), and better performance than the previous web-based version. - **New: Queue**. Press "Q" to open up the new queue panel. You can drag and drop tracks from the library, re-arrange tracks in the queue, and create a new playlist from the current queue. Multi-select works via Shift/Cmd + click. The queue has two modes: Custom and Same as Library. When in "Same as library" mode, playing a track from the library will reset the queue to library order. - **Waveform View**. Click on the wave icon next to the volume to open up the Waveform view. Here you can drag to create loop regions, or Cmd/Ctrl + Click to set markers of your favourite song moments. You can scroll to zoom in and pan around the waveform. diff --git a/package-lock.json b/package-lock.json index 0f37cfd..1da2030 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "musicat", - "version": "0.6.0", + "version": "0.7.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "musicat", - "version": "0.6.0", + "version": "0.7.0", "dependencies": { "@tauri-apps/api": "^1.5.1", "is-dark-color": "^1.2.0", @@ -19,8 +19,6 @@ "@alexanderolsen/libsamplerate-js": "^2.1.1", "@esbuild-plugins/node-globals-polyfill": "^0.2.3", "@esbuild-plugins/node-modules-polyfill": "^0.2.2", - "@iconify/json": "^2.1.110", - "@iconify/utils": "^2.0.0", "@sveltejs/vite-plugin-svelte": "^2.4.1", "@tauri-apps/cli": "^1.5.5", "@tsconfig/svelte": "^3.0.0", @@ -29,7 +27,6 @@ "better-cue-parser": "^0.3.1", "dexie": "^4.0.4", "hotkeys-js": "^3.9.5", - "iconify-icon": "^1.0.0-beta.3", "konva": "^9.3.1", "lodash-es": "^4.17.21", "md5": "^2.3.0", @@ -55,6 +52,7 @@ "tsparticles-slim": "^2.12.0", "typescript": "^4.6.4", "vite": "^4.5.1", + "vite-bundle-analyzer": "^0.10.3", "wavefile": "^11.0.0", "wavesurfer.js": "^7.7.11", "wikibase-sdk": "^9.2.4" @@ -79,27 +77,6 @@ "node": ">=6.0.0" } }, - "node_modules/@antfu/install-pkg": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^5.1.1", - "find-up": "^5.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@antfu/utils": { - "version": "0.7.7", - "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.7.tgz", - "integrity": "sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, "node_modules/@esbuild-plugins/node-globals-polyfill": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.2.3.tgz", @@ -519,46 +496,6 @@ "integrity": "sha512-WxXiHFmD9u/owrzempiDlBB1ZYqiLnm9s6aPc8AlFQalq2tKmqdmMr9GXOupDgzXtqnBipj8Un0gkIm7Sjf8mw==", "dev": true }, - "node_modules/@iconify/json": { - "version": "2.1.110", - "dev": true, - "license": "MIT", - "dependencies": { - "@iconify/types": "*", - "pathe": "^0.3.0" - } - }, - "node_modules/@iconify/types": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@iconify/utils": { - "version": "2.1.14", - "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-2.1.14.tgz", - "integrity": "sha512-9pKIntkbLbjVVFxH32td21Am3AGGJfyI2KY2d8yDQxkZe4BBZtufJI8NgcamFn8B5QKLU9ai2VMo8OEov8jAtw==", - "dev": true, - "dependencies": { - "@antfu/install-pkg": "^0.1.1", - "@antfu/utils": "^0.7.5", - "@iconify/types": "^2.0.0", - "debug": "^4.3.4", - "kolorist": "^1.8.0", - "local-pkg": "^0.4.3" - } - }, - "node_modules/@iconify/utils/node_modules/local-pkg": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", - "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", @@ -1276,19 +1213,6 @@ "node": ">= 0.6" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/crypt": { "version": "0.0.2", "dev": true, @@ -1451,28 +1375,6 @@ "node": ">=6" } }, - "node_modules/execa": { - "version": "5.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, "node_modules/fast-glob": { "version": "3.3.2", "dev": true, @@ -1522,21 +1424,6 @@ "node": ">=8" } }, - "node_modules/find-up": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/form-data": { "version": "4.0.0", "dev": true, @@ -1607,17 +1494,6 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/get-stream": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -1660,14 +1536,6 @@ "dev": true, "license": "MIT" }, - "node_modules/human-signals": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, "node_modules/humanize-ms": { "version": "1.2.1", "dev": true, @@ -1676,17 +1544,6 @@ "ms": "^2.0.0" } }, - "node_modules/iconify-icon": { - "version": "1.0.0-beta.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@iconify/types": "^2.0.0-beta.1" - }, - "funding": { - "url": "http://github.com/sponsors/cyberalien" - } - }, "node_modules/ieee754": { "version": "1.2.1", "funding": [ @@ -1795,22 +1652,6 @@ "@types/estree": "*" } }, - "node_modules/is-stream": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/kleur": { "version": "4.1.5", "dev": true, @@ -1819,12 +1660,6 @@ "node": ">=6" } }, - "node_modules/kolorist": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", - "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", - "dev": true - }, "node_modules/konva": { "version": "9.3.1", "resolved": "https://registry.npmjs.org/konva/-/konva-9.3.1.tgz", @@ -1851,20 +1686,6 @@ "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", "dev": true }, - "node_modules/locate-path": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/lodash-es": { "version": "4.17.21", "dev": true, @@ -1920,11 +1741,6 @@ "node": ">= 0.8" } }, - "node_modules/merge-stream": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, "node_modules/merge2": { "version": "1.4.1", "dev": true, @@ -1964,14 +1780,6 @@ "node": ">= 0.6" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -2154,17 +1962,6 @@ "node": ">=0.10.0" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -2174,20 +1971,6 @@ "wrappy": "1" } }, - "node_modules/onetime": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/openai": { "version": "4.22.0", "dev": true, @@ -2207,34 +1990,6 @@ "openai": "bin/cli" } }, - "node_modules/p-limit": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/parent-module": { "version": "1.0.1", "dev": true, @@ -2246,14 +2001,6 @@ "node": ">=6" } }, - "node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -2263,19 +2010,6 @@ "node": ">=0.10.0" } }, - "node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/pathe": { - "version": "0.3.8", - "dev": true, - "license": "MIT" - }, "node_modules/peek-readable": { "version": "4.1.0", "license": "MIT", @@ -2599,30 +2333,6 @@ "node": ">=12.0.0" } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "dev": true, - "license": "ISC" - }, "node_modules/simple-yenc": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/simple-yenc/-/simple-yenc-1.0.4.tgz", @@ -2667,14 +2377,6 @@ "safe-buffer": "~5.2.0" } }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", @@ -3521,6 +3223,15 @@ } } }, + "node_modules/vite-bundle-analyzer": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/vite-bundle-analyzer/-/vite-bundle-analyzer-0.10.3.tgz", + "integrity": "sha512-Q5ko1EOu808q0mVv//H8OYd7yrijfEPUBlsg2NVx0rvbZ0ncUbnDh7UYqRmZWxaRDj0is4anE9DXatTiwZ1ZLg==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0" + } + }, "node_modules/vite/node_modules/@esbuild/android-arm": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", @@ -3964,20 +3675,6 @@ "webidl-conversions": "^3.0.0" } }, - "node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/wikibase-sdk": { "version": "9.2.4", "dev": true, @@ -3991,17 +3688,6 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } } }, "dependencies": { @@ -4021,20 +3707,6 @@ "@jridgewell/trace-mapping": "^0.3.9" } }, - "@antfu/install-pkg": { - "version": "0.1.1", - "dev": true, - "requires": { - "execa": "^5.1.1", - "find-up": "^5.0.0" - } - }, - "@antfu/utils": { - "version": "0.7.7", - "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.7.tgz", - "integrity": "sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg==", - "dev": true - }, "@esbuild-plugins/node-globals-polyfill": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.2.3.tgz", @@ -4242,40 +3914,6 @@ "integrity": "sha512-WxXiHFmD9u/owrzempiDlBB1ZYqiLnm9s6aPc8AlFQalq2tKmqdmMr9GXOupDgzXtqnBipj8Un0gkIm7Sjf8mw==", "dev": true }, - "@iconify/json": { - "version": "2.1.110", - "dev": true, - "requires": { - "@iconify/types": "*", - "pathe": "^0.3.0" - } - }, - "@iconify/types": { - "version": "2.0.0", - "dev": true - }, - "@iconify/utils": { - "version": "2.1.14", - "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-2.1.14.tgz", - "integrity": "sha512-9pKIntkbLbjVVFxH32td21Am3AGGJfyI2KY2d8yDQxkZe4BBZtufJI8NgcamFn8B5QKLU9ai2VMo8OEov8jAtw==", - "dev": true, - "requires": { - "@antfu/install-pkg": "^0.1.1", - "@antfu/utils": "^0.7.5", - "@iconify/types": "^2.0.0", - "debug": "^4.3.4", - "kolorist": "^1.8.0", - "local-pkg": "^0.4.3" - }, - "dependencies": { - "local-pkg": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", - "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", - "dev": true - } - } - }, "@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", @@ -4694,15 +4332,6 @@ "content-type": { "version": "1.0.4" }, - "cross-spawn": { - "version": "7.0.3", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, "crypt": { "version": "0.0.2", "dev": true @@ -4812,21 +4441,6 @@ "event-target-shim": { "version": "5.0.1" }, - "execa": { - "version": "5.1.1", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, "fast-glob": { "version": "3.3.2", "dev": true, @@ -4860,14 +4474,6 @@ "to-regex-range": "^5.0.1" } }, - "find-up": { - "version": "5.0.0", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, "form-data": { "version": "4.0.0", "dev": true, @@ -4912,10 +4518,6 @@ "dev": true, "optional": true }, - "get-stream": { - "version": "6.0.1", - "dev": true - }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -4947,10 +4549,6 @@ "version": "3.9.5", "dev": true }, - "human-signals": { - "version": "2.1.0", - "dev": true - }, "humanize-ms": { "version": "1.2.1", "dev": true, @@ -4958,13 +4556,6 @@ "ms": "^2.0.0" } }, - "iconify-icon": { - "version": "1.0.0-beta.3", - "dev": true, - "requires": { - "@iconify/types": "^2.0.0-beta.1" - } - }, "ieee754": { "version": "1.2.1" }, @@ -5031,24 +4622,10 @@ "@types/estree": "*" } }, - "is-stream": { - "version": "2.0.1", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "dev": true - }, "kleur": { "version": "4.1.5", "dev": true }, - "kolorist": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", - "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", - "dev": true - }, "konva": { "version": "9.3.1", "resolved": "https://registry.npmjs.org/konva/-/konva-9.3.1.tgz", @@ -5061,13 +4638,6 @@ "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", "dev": true }, - "locate-path": { - "version": "6.0.0", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, "lodash-es": { "version": "4.17.21", "dev": true @@ -5111,10 +4681,6 @@ "media-typer": { "version": "1.1.0" }, - "merge-stream": { - "version": "2.0.0", - "dev": true - }, "merge2": { "version": "1.4.1", "dev": true @@ -5138,10 +4704,6 @@ "mime-db": "1.52.0" } }, - "mimic-fn": { - "version": "2.1.0", - "dev": true - }, "min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -5242,13 +4804,6 @@ "version": "0.1.2", "dev": true }, - "npm-run-path": { - "version": "4.0.1", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -5258,13 +4813,6 @@ "wrappy": "1" } }, - "onetime": { - "version": "5.1.2", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, "openai": { "version": "4.22.0", "dev": true, @@ -5280,20 +4828,6 @@ "web-streams-polyfill": "^3.2.1" } }, - "p-limit": { - "version": "3.1.0", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, "parent-module": { "version": "1.0.1", "dev": true, @@ -5301,24 +4835,12 @@ "callsites": "^3.0.0" } }, - "path-exists": { - "version": "4.0.0", - "dev": true - }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true }, - "path-key": { - "version": "3.1.1", - "dev": true - }, - "pathe": { - "version": "0.3.8", - "dev": true - }, "peek-readable": { "version": "4.1.0" }, @@ -5512,21 +5034,6 @@ "source-map-js": ">=0.6.2 <2.0.0" } }, - "shebang-command": { - "version": "2.0.0", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "dev": true - }, - "signal-exit": { - "version": "3.0.7", - "dev": true - }, "simple-yenc": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/simple-yenc/-/simple-yenc-1.0.4.tgz", @@ -5558,10 +5065,6 @@ "safe-buffer": "~5.2.0" } }, - "strip-final-newline": { - "version": "2.0.0", - "dev": true - }, "strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", @@ -6270,6 +5773,15 @@ } } }, + "vite-bundle-analyzer": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/vite-bundle-analyzer/-/vite-bundle-analyzer-0.10.3.tgz", + "integrity": "sha512-Q5ko1EOu808q0mVv//H8OYd7yrijfEPUBlsg2NVx0rvbZ0ncUbnDh7UYqRmZWxaRDj0is4anE9DXatTiwZ1ZLg==", + "dev": true, + "requires": { + "picocolors": "^1.0.0" + } + }, "vitefu": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz", @@ -6305,13 +5817,6 @@ "webidl-conversions": "^3.0.0" } }, - "which": { - "version": "2.0.2", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, "wikibase-sdk": { "version": "9.2.4", "dev": true @@ -6321,10 +5826,6 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "dev": true } } } diff --git a/package.json b/package.json index 1ff8ef8..3c6cb71 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "musicat", "private": true, - "version": "0.7.0", + "version": "0.7.1", "type": "module", "scripts": { "dev": "vite", @@ -14,8 +14,6 @@ "@alexanderolsen/libsamplerate-js": "^2.1.1", "@esbuild-plugins/node-globals-polyfill": "^0.2.3", "@esbuild-plugins/node-modules-polyfill": "^0.2.2", - "@iconify/json": "^2.1.110", - "@iconify/utils": "^2.0.0", "@sveltejs/vite-plugin-svelte": "^2.4.1", "@tauri-apps/cli": "^1.5.5", "@tsconfig/svelte": "^3.0.0", @@ -24,7 +22,6 @@ "better-cue-parser": "^0.3.1", "dexie": "^4.0.4", "hotkeys-js": "^3.9.5", - "iconify-icon": "^1.0.0-beta.3", "konva": "^9.3.1", "lodash-es": "^4.17.21", "md5": "^2.3.0", @@ -50,6 +47,7 @@ "tsparticles-slim": "^2.12.0", "typescript": "^4.6.4", "vite": "^4.5.1", + "vite-bundle-analyzer": "^0.10.3", "wavefile": "^11.0.0", "wavesurfer.js": "^7.7.11", "wikibase-sdk": "^9.2.4" diff --git a/public/images/welcome-cartwheel-galaxy.jpg b/public/images/welcome-cartwheel-galaxy.jpg new file mode 100644 index 0000000..50392d5 Binary files /dev/null and b/public/images/welcome-cartwheel-galaxy.jpg differ diff --git a/public/images/welcome-cartwheel-galaxy.png b/public/images/welcome-cartwheel-galaxy.png deleted file mode 100644 index 523f3ea..0000000 Binary files a/public/images/welcome-cartwheel-galaxy.png and /dev/null differ diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index aa205eb..415551e 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -55,3 +55,10 @@ default = [ "custom-protocol" ] # this feature is used used for production builds where `devPath` points to the filesystem # DO NOT remove this custom-protocol = [ "tauri/custom-protocol" ] + +[profile.release] +panic = "abort" # Strip expensive panic clean-up logic +codegen-units = 1 # Compile crates one after another so the compiler can optimize better +lto = true # Enables link to optimizations +opt-level = "s" # Optimize for binary size +strip = true # Remove debug symbols diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 182a5b1..bd3e8bd 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -9,7 +9,7 @@ }, "package": { "productName": "Musicat", - "version": "0.7.0" + "version": "0.7.1" }, "tauri": { "macOSPrivateApi": true, diff --git a/src/data/LibraryImporter.ts b/src/data/LibraryImporter.ts index 3b2ba1e..0bce200 100644 --- a/src/data/LibraryImporter.ts +++ b/src/data/LibraryImporter.ts @@ -5,7 +5,6 @@ import { BaseDirectory, exists, readDir } from "@tauri-apps/api/fs"; import { audioDir } from "@tauri-apps/api/path"; import { convertFileSrc } from "@tauri-apps/api/tauri"; import { appWindow } from "@tauri-apps/api/window"; -import "iconify-icon"; import md5 from "md5"; import * as musicMetadata from "music-metadata-browser"; import type { diff --git a/src/lib/albums/AlbumItem.svelte b/src/lib/albums/AlbumItem.svelte index 3feef79..4bd93e9 100644 --- a/src/lib/albums/AlbumItem.svelte +++ b/src/lib/albums/AlbumItem.svelte @@ -379,11 +379,6 @@ .artwork { width: 100%; } - iconify-icon { - /* margin-top: 0.7em; */ - font-size: 2em; - display: none; - } } } } diff --git a/src/lib/library/BottomBar.svelte b/src/lib/library/BottomBar.svelte index 4a97555..2eb4a07 100644 --- a/src/lib/library/BottomBar.svelte +++ b/src/lib/library/BottomBar.svelte @@ -1,5 +1,4 @@ + + {#if isLoading} - +
+ +
{/if} {#if checked !== null} @@ -78,9 +79,9 @@ {/if} {#if onDelete} - {/if} {:else} @@ -179,20 +180,6 @@ text-align: left; } } - - &.single-selection { - iconify-icon[icon="charm:tick"] { - color: transparent; - } - } - - iconify-icon[icon="charm:tick"] { - color: grey; - - &.checked { - color: white; - } - } } @keyframes loading { diff --git a/src/lib/sidebar/Sidebar.svelte b/src/lib/sidebar/Sidebar.svelte index f7aba9a..508bc09 100644 --- a/src/lib/sidebar/Sidebar.svelte +++ b/src/lib/sidebar/Sidebar.svelte @@ -1040,7 +1040,6 @@ {:else}
placeholder -
{/if} @@ -1330,9 +1329,6 @@ cursor: default; &.selected { color: white; - iconify-icon { - color: #45fffcf3; - } .chevron { visibility: visible; } @@ -1352,13 +1348,6 @@ } } - iconify-icon { - margin-right: 5px; - font-size: 15px; - text-align: center; - vertical-align: middle; - } - .chevron { visibility: hidden; &.expanded { @@ -1448,11 +1437,6 @@ height: fit-content; padding: 5px; margin: auto 0; - > iconify-icon { - font-size: 17px; - color: #737373; - pointer-events: none; - } } } @@ -1658,9 +1642,6 @@ img { width: 80%; } - iconify-icon { - /* margin-top: 0.7em; */ - } } } } @@ -1779,27 +1760,6 @@ } } - iconify-icon { - font-size: 40px; - &.disabled { - pointer-events: none; - color: #474747; - } - - // Like disabled but clickable - &.off { - color: #474747; - } - - &:hover { - opacity: 0.5; - } - - &:active { - color: rgb(141, 47, 47); - opacity: 1; - } - } .playlist-menu { position: fixed; diff --git a/src/lib/ui/ButtonWithIcon.svelte b/src/lib/ui/ButtonWithIcon.svelte index 41d46e3..7ef2fa1 100644 --- a/src/lib/ui/ButtonWithIcon.svelte +++ b/src/lib/ui/ButtonWithIcon.svelte @@ -1,4 +1,6 @@ -
+
{#if icon} - + {/if}

{text}

diff --git a/src/lib/ui/CompressionSelector.svelte b/src/lib/ui/CompressionSelector.svelte index 7e1c493..f53cd2f 100644 --- a/src/lib/ui/CompressionSelector.svelte +++ b/src/lib/ui/CompressionSelector.svelte @@ -89,10 +89,6 @@ &:active { background-color: rgba(128, 128, 128, 0.391); } - - iconify-icon { - color: grey; - } } .menu { diff --git a/src/lib/ui/Dropdown.svelte b/src/lib/ui/Dropdown.svelte index 0b09100..a865506 100644 --- a/src/lib/ui/Dropdown.svelte +++ b/src/lib/ui/Dropdown.svelte @@ -72,10 +72,6 @@ &:active { background-color: rgba(128, 128, 128, 0.391); } - - iconify-icon { - color: grey; - } } .menu { diff --git a/src/lib/ui/Icon.svelte b/src/lib/ui/Icon.svelte index c4b83d1..8e74ab5 100644 --- a/src/lib/ui/Icon.svelte +++ b/src/lib/ui/Icon.svelte @@ -122,6 +122,24 @@ }, "heroicons-solid:volume-up": { svg: `` + }, + "system-uicons:audio-wave": { + svg: `` + }, + "bxs:video": { + svg: `` + }, + "dashicons:editor-video": { + svg: `` + }, + "akar-icons:link-chain": { + svg: `` + }, + "ant-design:delete-outlined": { + svg: `` + }, + "icon-park-outline:full-screen-one": { + svg: `` } }; diff --git a/src/lib/views/AlbumsView.svelte b/src/lib/views/AlbumsView.svelte index a8e6231..0011e4d 100644 --- a/src/lib/views/AlbumsView.svelte +++ b/src/lib/views/AlbumsView.svelte @@ -1,7 +1,6 @@ - +

A few words about this app diff --git a/src/lib/your-music/ArtistInfo.svelte b/src/lib/your-music/ArtistInfo.svelte index bf742b8..d088e8c 100644 --- a/src/lib/your-music/ArtistInfo.svelte +++ b/src/lib/your-music/ArtistInfo.svelte @@ -5,6 +5,7 @@ import { autoWidth } from "../../utils/AutoWidth"; import { flip } from "svelte/animate"; import { quadInOut } from "svelte/easing"; + import Icon from "../ui/Icon.svelte"; export let artist: ArtistProject; @@ -49,10 +50,9 @@ >

{member}

{#if isEditEnabled} - removeMember(member)} + onClick={() => removeMember(member)} /> {/if}

@@ -76,7 +76,7 @@ isEditEnabled = !isEditEnabled; }} > - +
@@ -125,17 +125,7 @@ gap: 5px; padding: 0 1px; - iconify-icon { - display: none; - } - &.editable { - iconify-icon { - display: flex; - &:hover { - opacity: 0.6; - } - } background: rgb(62, 61, 61); border-radius: 4px; border: 1px solid rgb(76, 72, 72); diff --git a/src/lib/your-music/FileBlock.svelte b/src/lib/your-music/FileBlock.svelte index f2c359e..3f9ca43 100644 --- a/src/lib/your-music/FileBlock.svelte +++ b/src/lib/your-music/FileBlock.svelte @@ -8,6 +8,7 @@ } from "../../data/LibraryImporter"; import audioPlayer from "../player/AudioPlayer"; import { convertFileSrc } from "@tauri-apps/api/tauri"; + import Icon from "../ui/Icon.svelte"; export let item: ArtistFileItem; export let style: "dashed" | "outline" = "dashed"; @@ -45,6 +46,8 @@ on:click={openFile} draggable="true" on:dragstart={onDragStart} + role="button" + tabindex="0" >
{#if item.fileType.type === "image"} @@ -59,22 +62,18 @@ {:else}
- +
{/if}
{#if item.fileType.type === "audio"} - + {:else if item.fileType.type === "video"} - + {:else if item.fileType.type === "image"} - + {:else if item.fileType.type === "txt"} - + {/if}

{item.name}

@@ -89,22 +88,6 @@ flex-direction: column; max-width: 165px; - &.audio { - iconify-icon { - color: rgb(199, 69, 199); - } - } - &.video { - iconify-icon { - color: rgb(224, 72, 72); - } - } - &.txt { - iconify-icon { - color: rgb(212, 212, 66); - } - } - &.dashed { .container { border-style: dashed; @@ -142,11 +125,6 @@ overflow: hidden; text-overflow: ellipsis; } - iconify-icon { - width: auto; - height: fit-content; - display: flex; - } } img, @@ -185,10 +163,6 @@ display: flex; align-items: center; justify-content: center; - iconify-icon { - font-size: 40px; - color: white; - } } } } diff --git a/src/lib/your-music/LinkBlock.svelte b/src/lib/your-music/LinkBlock.svelte index 65af631..c0e79be 100644 --- a/src/lib/your-music/LinkBlock.svelte +++ b/src/lib/your-music/LinkBlock.svelte @@ -2,6 +2,7 @@ import type { ArtistLinkItem } from "src/App"; import { draggedScrapbookItems } from "../../data/store"; import { open } from "@tauri-apps/api/shell"; + import Icon from "../ui/Icon.svelte"; export let item: ArtistLinkItem; @@ -26,9 +27,11 @@ on:click={openUrl} >
- {#if item.imageUrl} thumnbail {/if} + {#if item.imageUrl} + thumnbail + {/if}
- +

{item.name}

@@ -88,12 +91,6 @@ width: 100%; text-align: end; } - iconify-icon { - width: auto; - height: fit-content; - display: flex; - color: rgb(70, 227, 227); - } } &:hover { border: 1px solid rgb(70, 227, 227); diff --git a/src/lib/your-music/LyricsBlock.svelte b/src/lib/your-music/LyricsBlock.svelte index 7f3a1be..5e595d0 100644 --- a/src/lib/your-music/LyricsBlock.svelte +++ b/src/lib/your-music/LyricsBlock.svelte @@ -1,5 +1,6 @@ @@ -10,7 +11,7 @@
- +

{item.name}

@@ -51,12 +52,6 @@ margin: 0; line-height: 1em; } - iconify-icon { - width: auto; - height: fit-content; - display: flex; - color: rgb(212, 212, 66); - } } &:hover { border: 1px solid rgb(212, 212, 66); @@ -80,10 +75,6 @@ display: flex; align-items: center; justify-content: center; - iconify-icon { - font-size: 40px; - color: white; - } } } diff --git a/src/lib/your-music/MusicTab.svelte b/src/lib/your-music/MusicTab.svelte index 687e9bb..7e9a026 100644 --- a/src/lib/your-music/MusicTab.svelte +++ b/src/lib/your-music/MusicTab.svelte @@ -8,6 +8,7 @@ import { fly } from "svelte/transition"; import { quadInOut, quadOut } from "svelte/easing"; import { flip } from "svelte/animate"; + import Icon from "../ui/Icon.svelte"; export let recordings: SongProjectRecording[]; export let songProject: SongProject; @@ -42,10 +43,12 @@ } async function createProject() { - const songProjectId = await db.songProjects.add(songProject) as number; + const songProjectId = (await db.songProjects.add( + songProject + )) as number; if (song) { song.songProjectId = songProjectId; - await db.songs.put(song) + await db.songs.put(song); onSelectSong && onSelectSong(song); } } @@ -65,13 +68,14 @@

{recording.song.file}

{#if isProject} - { - deleteRecording(idx); - }} - /> +
+ { + deleteRecording(idx); + }} + /> +
{/if} {/each} diff --git a/src/lib/your-music/Scrapbook.svelte b/src/lib/your-music/Scrapbook.svelte index 20ac85c..1460f1b 100644 --- a/src/lib/your-music/Scrapbook.svelte +++ b/src/lib/your-music/Scrapbook.svelte @@ -27,6 +27,7 @@ import TagCloud from "./TagCloud.svelte"; import MenuInput from "../menu/MenuInput.svelte"; import hotkeys from "hotkeys-js"; + import Icon from "../ui/Icon.svelte"; let contentTypes = [ { @@ -327,7 +328,7 @@ class={contentType.name} on:click={() => toggleContentType(contentType.name)} > - +

{contentType.name}

{/each} @@ -463,16 +464,16 @@ user-select: none; text-transform: capitalize; } - &.lyrics > iconify-icon { - color: rgb(212, 212, 66); + &.lyrics { + color: #d4d442; } - &.audio > iconify-icon { + &.audio { color: rgb(199, 69, 199); } - &.video > iconify-icon { + &.video { color: rgb(224, 72, 72); } - &.link > iconify-icon { + &.link { color: rgb(70, 227, 227); } } diff --git a/src/lib/your-music/SongDetails.svelte b/src/lib/your-music/SongDetails.svelte index ab25870..8c1adfe 100644 --- a/src/lib/your-music/SongDetails.svelte +++ b/src/lib/your-music/SongDetails.svelte @@ -6,7 +6,8 @@ ArtistFileItem, ArtistLinkItem, ArtistProject, - ContentFileType, Song, + ContentFileType, + Song, SongProject } from "src/App"; import { onDestroy, onMount } from "svelte"; @@ -23,7 +24,10 @@ import { readTextFile } from "@tauri-apps/api/fs"; import toast from "svelte-french-toast"; - import { getMetadataFromFile, getSongFromMetadata } from "../../data/LibraryImporter"; + import { + getMetadataFromFile, + getSongFromMetadata + } from "../../data/LibraryImporter"; import { droppedFiles, fileDropHandler, @@ -50,13 +54,16 @@ // Eg. 127 beats per minute = 1 beat every 0.4724409449 seconds function startBPMTicker(bpm: number) { if (bpmTicker === 1 && !bpmInterval) { - bpmInterval = setInterval(() => { - if (songProjectClone?.bpm !== undefined) { - bpmTicker++; - } else { - stopBpmTicker(); - } - }, 60000 / bpm / 2); + bpmInterval = setInterval( + () => { + if (songProjectClone?.bpm !== undefined) { + bpmTicker++; + } else { + stopBpmTicker(); + } + }, + 60000 / bpm / 2 + ); } } @@ -732,15 +739,15 @@ {/each}
- - - @@ -1021,15 +1028,6 @@ gap: 3px; align-items: center; margin-right: 20px; - - iconify-icon { - padding: 6px; - font-size: 20px; - border-radius: 4px; - &:hover { - background-color: rgba(0, 0, 0, 0.457); - } - } } } p { diff --git a/vite.config.ts b/vite.config.ts index 9948a8c..65effb7 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -4,6 +4,7 @@ import { NodeGlobalsPolyfillPlugin } from "@esbuild-plugins/node-globals-polyfil // yarn add --dev @esbuild-plugins/node-modules-polyfill import { NodeModulesPolyfillPlugin } from "@esbuild-plugins/node-modules-polyfill"; import rollupNodePolyFill from "rollup-plugin-node-polyfills"; +import { analyzer } from 'vite-bundle-analyzer' // https://vitejs.dev/config/ export default defineConfig({