From 1bf9a1b14f1647567c2b3043e98faf51f3ee530c Mon Sep 17 00:00:00 2001 From: 3gf8jv4dv <3gf8jv4dv@gmail.com> Date: Sat, 28 Dec 2024 13:08:29 +0800 Subject: [PATCH 01/26] i18n cleanup 2 (#669) --- src/lang/en-us.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/en-us.json b/src/lang/en-us.json index 3a41613..29d1fa1 100644 --- a/src/lang/en-us.json +++ b/src/lang/en-us.json @@ -48,7 +48,7 @@ "exit_app_tip": "Are you sure you want to exit the app?", "ignoring_battery_optimization_check_tip": "LX Music is \"Restricted\" or \"Optimized\" in \"App battery usage\", which may cause LX Music to be prevented by the system when playing music in the background. Do you need to set LX Music to “Unrestricted”?", "ignoring_battery_optimization_check_title": "Background Running Permission Reminder", - "input_error": "Don't input indiscriminately 😡", + "input_error": "Don't type indiscriminately 😡", "list_name_default": "Default", "list_name_love": "Loved", "list_add_btn_title": "Add the song(s) to \"{name}\"", From 7b049a7339cf90b8c9bde8dbec9e1bdb0ba148fe Mon Sep 17 00:00:00 2001 From: lyswhut Date: Sat, 28 Dec 2024 12:48:58 +0800 Subject: [PATCH 02/26] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 1709 ++++++++++++++++++++++++++------------------- package.json | 6 +- 2 files changed, 1004 insertions(+), 711 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5b8f3a7..6eb77db 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,7 +29,7 @@ "react-native-pager-view": "6.6.1", "react-native-quick-base64": "^2.1.2", "react-native-quick-md5": "^3.0.6", - "react-native-track-player": "github:lyswhut/react-native-track-player#57eeeba57e28702fa931d4aeb753da225b6fcf6c", + "react-native-track-player": "github:lyswhut/react-native-track-player#b9062b07ca4fc5f3316c2ae43f2dafed1baed015", "react-native-vector-icons": "^10.2.0" }, "devDependencies": { @@ -42,7 +42,7 @@ "@react-native/metro-config": "^0.74.88", "@react-native/typescript-config": "^0.74.88", "@tsconfig/react-native": "^3.0.5", - "@types/react": "^18.3.14", + "@types/react": "^18.3.18", "@types/react-native": "^0.72.8", "@types/react-native-background-timer": "^2.0.2", "@types/react-native-vector-icons": "^6.4.18", @@ -50,7 +50,7 @@ "changelog-parser": "^3.0.1", "eslint-config-standard": "^17.1.0", "eslint-config-standard-with-typescript": "^43.0.1", - "eslint-plugin-react": "^7.37.2", + "eslint-plugin-react": "^7.37.3", "eslint-plugin-react-hooks": "^5.1.0", "typescript": "^5.7.2" }, @@ -4305,9 +4305,9 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.14", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.14.tgz", - "integrity": "sha512-NzahNKvjNhVjuPBQ+2G7WlxstQ+47kXZNHlUvFakDViuIEfGY926GqhMueQFZ7woG+sPiQKlF36XfrIUVSUfFg==", + "version": "18.3.18", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.18.tgz", + "integrity": "sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4910,13 +4910,14 @@ } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" }, "engines": { "node": ">= 0.4" @@ -5024,15 +5025,16 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -5058,19 +5060,19 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" }, "engines": { "node": ">= 0.4" @@ -5159,6 +5161,7 @@ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, + "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -5492,16 +5495,47 @@ } }, "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, + "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -5990,14 +6024,15 @@ "license": "MIT" }, "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -6007,29 +6042,31 @@ } }, "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/inspect-js" } }, "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" }, @@ -6260,6 +6297,21 @@ "node": ">=6.0.0" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -6345,57 +6397,59 @@ } }, "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "version": "1.23.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.7.tgz", + "integrity": "sha512-OygGC8kIcDhXX+6yAZRGLqwi2CmEXCbLQixeGUgYeR+Qwlppqmo7DIDr8XibtEBZp+fJcoYpoatp5qwLMEdcqQ==", "dev": true, + "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.2.6", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", + "is-data-view": "^1.0.2", + "is-regex": "^1.2.1", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.3", "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", + "object.assign": "^4.1.7", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.3", + "safe-regex-test": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.18" }, "engines": { "node": ">= 0.4" @@ -6405,13 +6459,11 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.4" - }, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -6426,26 +6478,28 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.1.0.tgz", - "integrity": "sha512-/SurEfycdyssORP/E+bj4sEu1CWw4EmLDsHynHwSXQ7utgbrMRWW195pTrCjFgFCddf/UkYm3oqKPRq5i8bJbw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", + "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", + "get-intrinsic": "^1.2.6", "globalthis": "^1.0.4", + "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.3", - "safe-array-concat": "^1.1.2" + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" }, "engines": { "node": ">= 0.4" @@ -6487,15 +6541,15 @@ } }, "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { "node": ">= 0.4" @@ -6831,29 +6885,29 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.37.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz", - "integrity": "sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==", + "version": "7.37.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.3.tgz", + "integrity": "sha512-DomWuTQPFYZwF/7c9W2fkKkStqZmBd3uugfqBYLdkZ3Hii23WzZuOLUskGxB8qkSKqftxEeGL1TB2kMhrce0jA==", "dev": true, "license": "MIT", "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.2", + "array.prototype.flatmap": "^1.3.3", "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.1.0", + "es-iterator-helpers": "^1.2.1", "estraverse": "^5.3.0", "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", "object.entries": "^1.1.8", "object.fromentries": "^2.0.8", - "object.values": "^1.2.0", + "object.values": "^1.2.1", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.11", + "string.prototype.matchall": "^4.0.12", "string.prototype.repeat": "^1.0.0" }, "engines": { @@ -7403,6 +7457,7 @@ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, + "license": "MIT", "dependencies": { "is-callable": "^1.1.3" } @@ -7472,15 +7527,18 @@ } }, "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -7518,16 +7576,22 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", + "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==", "dev": true, + "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "dunder-proto": "^1.0.0", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -7643,14 +7707,15 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -7740,12 +7805,13 @@ } }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" + "license": "MIT", + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7778,11 +7844,14 @@ } }, "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7809,10 +7878,14 @@ } }, "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -7821,9 +7894,9 @@ } }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, "license": "MIT", "engines": { @@ -8090,14 +8163,15 @@ "license": "ISC" }, "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -8136,13 +8210,15 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -8173,27 +8249,30 @@ } }, "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "license": "MIT", "dependencies": { - "has-bigints": "^1.0.1" + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", + "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -8227,11 +8306,14 @@ } }, "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, + "license": "MIT", "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" }, "engines": { @@ -8242,13 +8324,14 @@ } }, "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -8290,13 +8373,16 @@ } }, "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8361,18 +8447,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -8382,13 +8456,14 @@ } }, "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -8428,13 +8503,16 @@ } }, "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -8457,12 +8535,13 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7" + "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -8483,13 +8562,14 @@ } }, "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -8499,13 +8579,15 @@ } }, "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -8515,12 +8597,13 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, + "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.14" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -8554,27 +8637,30 @@ } }, "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz", + "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-weakset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", - "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -8598,7 +8684,8 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", @@ -8615,17 +8702,18 @@ } }, "node_modules/iterator.prototype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", - "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.4.tgz", + "integrity": "sha512-x4WH0BWmrMmg4oHHl+duwubhrvczGlyuGAZu3nvrf0UXOfPu8IhZObFEr7DE/iv01YgVZrsOiRcqw2srkKEDIA==", "dev": true, "license": "MIT", "dependencies": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "reflect.getprototypeof": "^1.0.8", + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -9255,6 +9343,16 @@ "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==" }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/mem": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/mem/-/mem-5.1.1.tgz", @@ -9861,10 +9959,14 @@ } }, "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -9880,14 +9982,17 @@ } }, "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" }, "engines": { @@ -9943,12 +10048,14 @@ } }, "node_modules/object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, @@ -10385,6 +10492,7 @@ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -10874,8 +10982,8 @@ }, "node_modules/react-native-track-player": { "version": "2.1.2", - "resolved": "git+ssh://git@github.com/lyswhut/react-native-track-player.git#57eeeba57e28702fa931d4aeb753da225b6fcf6c", - "integrity": "sha512-Wus/F+WhqzRh7ppcOdnWV2/qvj5YIfNzIEK7ZBv9Y5leeWJ0ych7zuAJdXE7eyAfTdj2jMeFa9Z9H+qE8K9Kag==", + "resolved": "git+ssh://git@github.com/lyswhut/react-native-track-player.git#b9062b07ca4fc5f3316c2ae43f2dafed1baed015", + "integrity": "sha512-28GO+cSlktUdhnqzVKGIZT1WOozTDLntwTXtOv/UZ3rQwiXN6oBbMXyUefyoP1R2Wp0P34NHsFXV6Gt3UJzYFg==", "license": "Apache-2.0", "peerDependencies": { "react": ">=16.8.6", @@ -11538,19 +11646,20 @@ } }, "node_modules/reflect.getprototypeof": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", - "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.9.tgz", + "integrity": "sha512-r0Ay04Snci87djAsI4U+WNRcSw5S4pOH7qFjd/veA5gC7TbqESR3tcj28ia95L/fYUDw11JKP7uqUKUAfVvV5Q==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.23.1", + "dunder-proto": "^1.0.1", + "es-abstract": "^1.23.6", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "which-builtin-type": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -11593,15 +11702,16 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -11773,14 +11883,16 @@ } }, "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, "engines": { @@ -11797,14 +11909,15 @@ "license": "MIT" }, "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "is-regex": "^1.1.4" + "is-regex": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -11952,17 +12065,18 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, "node_modules/set-function-length": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", - "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, + "license": "MIT", "dependencies": { - "define-data-property": "^1.1.2", + "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -12056,15 +12170,73 @@ "peer": true }, "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -12274,23 +12446,25 @@ } }, "node_modules/string.prototype.matchall": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", - "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", + "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "regexp.prototype.flags": "^1.5.2", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", "set-function-name": "^2.0.2", - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -12310,15 +12484,19 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -12328,15 +12506,20 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -12657,30 +12840,32 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -12690,17 +12875,19 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" }, "engines": { "node": ">= 0.4" @@ -12710,17 +12897,18 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" }, "engines": { "node": ">= 0.4" @@ -12744,16 +12932,19 @@ } }, "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bound": "^1.0.3", "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -13108,41 +13299,45 @@ } }, "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, "license": "MIT", "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-builtin-type": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", - "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, "license": "MIT", "dependencies": { + "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", + "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", + "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", - "which-typed-array": "^1.1.15" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -13176,15 +13371,17 @@ "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" }, "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", + "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "for-each": "^0.3.3", - "gopd": "^1.0.1", + "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" }, "engines": { @@ -16392,9 +16589,9 @@ "dev": true }, "@types/react": { - "version": "18.3.14", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.14.tgz", - "integrity": "sha512-NzahNKvjNhVjuPBQ+2G7WlxstQ+47kXZNHlUvFakDViuIEfGY926GqhMueQFZ7woG+sPiQKlF36XfrIUVSUfFg==", + "version": "18.3.18", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.18.tgz", + "integrity": "sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==", "dev": true, "requires": { "@types/prop-types": "*", @@ -16825,13 +17022,13 @@ } }, "array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, "requires": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" } }, "array-includes": { @@ -16902,15 +17099,15 @@ } }, "array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" } }, "array.prototype.tosorted": { @@ -16927,19 +17124,18 @@ } }, "arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "requires": { "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" } }, "asap": { @@ -17245,16 +17441,35 @@ "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" }, "call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, "requires": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "set-function-length": "^1.2.2" + } + }, + "call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + } + }, + "call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "dev": true, + "requires": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" } }, "caller-callsite": { @@ -17609,34 +17824,34 @@ "dev": true }, "data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "requires": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" } }, "data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "requires": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" } }, "data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "requires": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } @@ -17799,6 +18014,17 @@ "esutils": "^2.0.2" } }, + "dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "requires": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -17870,67 +18096,65 @@ } }, "es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "version": "1.23.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.7.tgz", + "integrity": "sha512-OygGC8kIcDhXX+6yAZRGLqwi2CmEXCbLQixeGUgYeR+Qwlppqmo7DIDr8XibtEBZp+fJcoYpoatp5qwLMEdcqQ==", "dev": true, "requires": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.2.6", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", + "is-data-view": "^1.0.2", + "is-regex": "^1.2.1", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.3", "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", + "object.assign": "^4.1.7", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.3", + "safe-regex-test": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.18" } }, "es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.2.4" - } + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true }, "es-errors": { "version": "1.3.0", @@ -17939,25 +18163,27 @@ "dev": true }, "es-iterator-helpers": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.1.0.tgz", - "integrity": "sha512-/SurEfycdyssORP/E+bj4sEu1CWw4EmLDsHynHwSXQ7utgbrMRWW195pTrCjFgFCddf/UkYm3oqKPRq5i8bJbw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", "dev": true, "requires": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", + "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", + "get-intrinsic": "^1.2.6", "globalthis": "^1.0.4", + "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.3", - "safe-array-concat": "^1.1.2" + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" } }, "es-object-atoms": { @@ -17990,14 +18216,14 @@ } }, "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" } }, "escalade": { @@ -18318,28 +18544,28 @@ "requires": {} }, "eslint-plugin-react": { - "version": "7.37.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz", - "integrity": "sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==", + "version": "7.37.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.3.tgz", + "integrity": "sha512-DomWuTQPFYZwF/7c9W2fkKkStqZmBd3uugfqBYLdkZ3Hii23WzZuOLUskGxB8qkSKqftxEeGL1TB2kMhrce0jA==", "dev": true, "requires": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.2", + "array.prototype.flatmap": "^1.3.3", "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.1.0", + "es-iterator-helpers": "^1.2.1", "estraverse": "^5.3.0", "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", "object.entries": "^1.1.8", "object.fromentries": "^2.0.8", - "object.values": "^1.2.0", + "object.values": "^1.2.1", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.11", + "string.prototype.matchall": "^4.0.12", "string.prototype.repeat": "^1.0.0" }, "dependencies": { @@ -18695,15 +18921,17 @@ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, "function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" } }, "functions-have-names": { @@ -18723,16 +18951,21 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", + "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==", "dev": true, "requires": { + "call-bind-apply-helpers": "^1.0.1", + "dunder-proto": "^1.0.0", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.0.0" } }, "get-monorepo-packages": { @@ -18820,14 +19053,14 @@ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" }, "get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "requires": { - "call-bind": "^1.0.5", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" + "get-intrinsic": "^1.2.6" } }, "glob": { @@ -18883,13 +19116,10 @@ } }, "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3" - } + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true }, "graceful-fs": { "version": "4.2.11", @@ -18912,9 +19142,9 @@ } }, "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true }, "has-flag": { @@ -18932,15 +19162,18 @@ } }, "has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "dev": true + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "requires": { + "dunder-proto": "^1.0.0" + } }, "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true }, "has-tostringtag": { @@ -19131,14 +19364,14 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "requires": { "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "hasown": "^2.0.2", + "side-channel": "^1.1.0" } }, "interpret": { @@ -19164,13 +19397,14 @@ "peer": true }, "is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" } }, "is-arrayish": { @@ -19188,22 +19422,22 @@ } }, "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "requires": { - "has-bigints": "^1.0.1" + "has-bigints": "^1.0.2" } }, "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", + "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" } }, "is-callable": { @@ -19221,21 +19455,24 @@ } }, "is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "requires": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" } }, "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "requires": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" } }, "is-directory": { @@ -19255,12 +19492,12 @@ "devOptional": true }, "is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, "requires": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.3" } }, "is-fullwidth-code-point": { @@ -19297,24 +19534,19 @@ "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true }, - "is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true - }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "requires": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" } }, "is-path-inside": { @@ -19338,13 +19570,15 @@ } }, "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" } }, "is-set": { @@ -19354,12 +19588,12 @@ "dev": true }, "is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "requires": { - "call-bind": "^1.0.7" + "call-bound": "^1.0.3" } }, "is-stream": { @@ -19368,30 +19602,33 @@ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" }, "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "requires": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" } }, "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "requires": { - "has-symbols": "^1.0.2" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" } }, "is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, "requires": { - "which-typed-array": "^1.1.14" + "which-typed-array": "^1.1.16" } }, "is-unicode-supported": { @@ -19406,22 +19643,22 @@ "dev": true }, "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz", + "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==", "dev": true, "requires": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.2" } }, "is-weakset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", - "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, "requires": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" } }, "is-wsl": { @@ -19449,16 +19686,17 @@ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" }, "iterator.prototype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", - "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.4.tgz", + "integrity": "sha512-x4WH0BWmrMmg4oHHl+duwubhrvczGlyuGAZu3nvrf0UXOfPu8IhZObFEr7DE/iv01YgVZrsOiRcqw2srkKEDIA==", "dev": true, "requires": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "reflect.getprototypeof": "^1.0.8", + "set-function-name": "^2.0.2" } }, "jest-environment-node": { @@ -19960,6 +20198,12 @@ "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==" }, + "math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true + }, "mem": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/mem/-/mem-5.1.1.tgz", @@ -20431,9 +20675,9 @@ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, "object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", "dev": true }, "object-keys": { @@ -20443,14 +20687,16 @@ "dev": true }, "object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, "requires": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" } }, @@ -20491,12 +20737,13 @@ } }, "object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, "requires": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } @@ -21484,9 +21731,9 @@ } }, "react-native-track-player": { - "version": "git+ssh://git@github.com/lyswhut/react-native-track-player.git#57eeeba57e28702fa931d4aeb753da225b6fcf6c", - "integrity": "sha512-Wus/F+WhqzRh7ppcOdnWV2/qvj5YIfNzIEK7ZBv9Y5leeWJ0ych7zuAJdXE7eyAfTdj2jMeFa9Z9H+qE8K9Kag==", - "from": "react-native-track-player@github:lyswhut/react-native-track-player#57eeeba57e28702fa931d4aeb753da225b6fcf6c", + "version": "git+ssh://git@github.com/lyswhut/react-native-track-player.git#b9062b07ca4fc5f3316c2ae43f2dafed1baed015", + "integrity": "sha512-28GO+cSlktUdhnqzVKGIZT1WOozTDLntwTXtOv/UZ3rQwiXN6oBbMXyUefyoP1R2Wp0P34NHsFXV6Gt3UJzYFg==", + "from": "react-native-track-player@github:lyswhut/react-native-track-player#b9062b07ca4fc5f3316c2ae43f2dafed1baed015", "requires": {} }, "react-native-vector-icons": { @@ -21693,18 +21940,19 @@ } }, "reflect.getprototypeof": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", - "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.9.tgz", + "integrity": "sha512-r0Ay04Snci87djAsI4U+WNRcSw5S4pOH7qFjd/veA5gC7TbqESR3tcj28ia95L/fYUDw11JKP7uqUKUAfVvV5Q==", "dev": true, "requires": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.23.1", + "dunder-proto": "^1.0.1", + "es-abstract": "^1.23.6", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "which-builtin-type": "^1.2.1" } }, "regenerate": { @@ -21734,15 +21982,15 @@ } }, "regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", "dev": true, "requires": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" + "set-function-name": "^2.0.2" } }, "regexpu-core": { @@ -21853,14 +22101,15 @@ } }, "safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, "requires": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", "isarray": "^2.0.5" } }, @@ -21870,14 +22119,14 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, "requires": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "is-regex": "^1.1.4" + "is-regex": "^1.2.1" } }, "safer-buffer": { @@ -21987,17 +22236,17 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, "set-function-length": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", - "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "requires": { - "define-data-property": "^1.1.2", + "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "has-property-descriptors": "^1.0.2" } }, "set-function-name": { @@ -22063,15 +22312,51 @@ "peer": true }, "side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, "requires": { - "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + } + }, + "side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + } + }, + "side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + } + }, + "side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" } }, "signal-exit": { @@ -22231,23 +22516,24 @@ } }, "string.prototype.matchall": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", - "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", "dev": true, "requires": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", + "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "regexp.prototype.flags": "^1.5.2", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", "set-function-name": "^2.0.2", - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" } }, "string.prototype.repeat": { @@ -22261,24 +22547,28 @@ } }, "string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, "requires": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" } }, "string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, "requires": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } @@ -22525,55 +22815,56 @@ "peer": true }, "typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "requires": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" + "is-typed-array": "^1.1.14" } }, "typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, "requires": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" } }, "typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, "requires": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" } }, "typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, "requires": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" } }, "typescript": { @@ -22583,15 +22874,15 @@ "dev": true }, "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, "requires": { - "call-bind": "^1.0.2", + "call-bound": "^1.0.3", "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" } }, "unicode-canonical-property-names-ecmascript": { @@ -22846,36 +23137,37 @@ } }, "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" } }, "which-builtin-type": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", - "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, "requires": { + "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", + "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", + "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", - "which-typed-array": "^1.1.15" + "which-typed-array": "^1.1.16" } }, "which-collection": { @@ -22896,15 +23188,16 @@ "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" }, "which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", + "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", "dev": true, "requires": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "for-each": "^0.3.3", - "gopd": "^1.0.1", + "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, diff --git a/package.json b/package.json index ff27a58..9280260 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "react-native-pager-view": "6.6.1", "react-native-quick-base64": "^2.1.2", "react-native-quick-md5": "^3.0.6", - "react-native-track-player": "github:lyswhut/react-native-track-player#57eeeba57e28702fa931d4aeb753da225b6fcf6c", + "react-native-track-player": "github:lyswhut/react-native-track-player#b9062b07ca4fc5f3316c2ae43f2dafed1baed015", "react-native-vector-icons": "^10.2.0" }, "devDependencies": { @@ -77,7 +77,7 @@ "@react-native/metro-config": "^0.74.88", "@react-native/typescript-config": "^0.74.88", "@tsconfig/react-native": "^3.0.5", - "@types/react": "^18.3.14", + "@types/react": "^18.3.18", "@types/react-native": "^0.72.8", "@types/react-native-background-timer": "^2.0.2", "@types/react-native-vector-icons": "^6.4.18", @@ -85,7 +85,7 @@ "changelog-parser": "^3.0.1", "eslint-config-standard": "^17.1.0", "eslint-config-standard-with-typescript": "^43.0.1", - "eslint-plugin-react": "^7.37.2", + "eslint-plugin-react": "^7.37.3", "eslint-plugin-react-hooks": "^5.1.0", "typescript": "^5.7.2" } From d1940468f2b3b83d422404fc05e6532e1c08b756 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Sat, 28 Dec 2024 13:07:52 +0800 Subject: [PATCH 03/26] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=BA=94=E7=94=A8?= =?UTF-8?q?=E5=9B=BE=E6=A0=87=E8=B4=A8=E9=87=8F=EF=BC=8C=E5=9C=A8=E9=AB=98?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E7=B3=BB=E7=BB=9F=E4=B8=8A=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E7=9F=A2=E9=87=8F=E5=9B=BE=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../res/drawable/ic_launcher_foreground.xml | 17 +++++++++++++++++ .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 +++++ .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 +++++ .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 3033 -> 1902 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 2351 -> 3834 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 2339 -> 1333 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 1774 -> 2461 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 4537 -> 2541 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 3613 -> 5502 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 6814 -> 4062 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 5268 -> 8640 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 9027 -> 5422 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 7061 -> 12510 bytes .../res/values/ic_launcher_background.xml | 4 ++++ publish/changeLog.md | 1 + 15 files changed, 32 insertions(+) create mode 100644 android/app/src/main/res/drawable/ic_launcher_foreground.xml create mode 100644 android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 android/app/src/main/res/values/ic_launcher_background.xml diff --git a/android/app/src/main/res/drawable/ic_launcher_foreground.xml b/android/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..569dab3 --- /dev/null +++ b/android/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,17 @@ + + + + + + diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..7353dbd --- /dev/null +++ b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..7353dbd --- /dev/null +++ b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index 6b3f2007c83687a9c633cb3bd69537206b51ccf6..de9e4306b6e74840af037bd20f13d5c03003f5c2 100644 GIT binary patch literal 1902 zcmV-!2a))RP)WQy6K!VCOYx4 zpx}#5hKhhs94HU*)j@G6yq<<#ak1hi6q>DD3)V4OOGTU@#a+C6I{; zs$mgB13~$m#40bqtJmvY6_UgM7m^*8E8up!$z(FU8J<~DnW&uMa=CV-svt(d@As40 zY~F*cY6Q)9I2_q%EENSI6DtsO1XUIy2-RGjIu zE9k#Loo*ZXf_|Ybm1tW~{rxs6JTD{`TP!71G1M>hYf8Qd6kB3k1>B%B4c9F5c1f=m-MuHy)(D zon->#Y&`iol~M2;iNu&S4SylR?{p^p4pP1h8)M#$E{f!W9}YwroSn4Z zd{j6##PPms!f_lL7Zha#;a-ccFGtO=IpRpF9&Qrqb7)*pl(%{85%Klqzzyrxwll)< z0P_}KpCg$CH4613QO+iG{`hT7nlBg->T+mX5EgTMu!n+_jUdqA?3!{cq${|*fVKt6 z%|Tf2VEeVhJt)+V1TSdQ-9n*G1T-#)+Yf>q?Cj}9&kK>`kYRkZVZr#5rHH<2$(J_t z`E!Xu;sxP^PqR^jk8XGg(ZKw3eRzCS@G|7cHC&YHnn!x+>z2RB$X3<-xhNp*RvKs2yZh&^e(9l*nz6=|o? zG}ulh&DW;D%aG&StGQE-DQl~x5ntR7I3!LGcJFuz(a7nkl#V;WR>gdHHLNS!NrNuC za9%M;oS=9|&^IjwWb-*`)aRk!Z=V$c$HTi9w^Mz8i*QZ~NSq*Sk@6B^v9GI)?)yh2 zNqhArlqnNF7LZfhXBN&!A&C>z@3jj8lz@+l@o?0r-%ES+#e#rnymMij+L03?ae}b* zxy4c}2v7p{e;~=tBxThV2_ocp`}{BT-@sipPjrNnI6ln`&7`&p91_pgG)3Ie-3ONH=C+1YV%a-V0ru0Rk2-Z=9k83!#wzbZ+* zAWzUo+uP3x;gztz>+)nftUuaacbXeHTd2v_A@n&75-$kgAto#Ym0oUGRiEs?B|LNJ zVRO<^V;QX}-9a0wbICAZ5&D`Yb0Y}g$qJpLmA1B(MBM&>7|cD5Bi+*6!?ytf?C-;F zC%JrzABu{Hxf2uuPkUjf51aAWa|Zjm%IUhjnR?jGse(sTW|O%Wq;Y0MP|AN-g9$o@ ztf~arY_^mgLC6F_4Gj(IN08NO%}Vtz)ai7(9As4`=;qCvt3!=pZ6ec2Qi3e_N~Y84 zr2PE+^~kE%>lgAKA{H9|g6m_9=i1xbZ(}H;LDqOmfGo&VUte!v8DBuwiOkB&sZ*yQ zXi;Wn=Bq}d(O|dR$>;MC8ct?#SvedIs;jFru2`|+HDuhpd9(7%E4(aUzWj0a@;u{} ztgNi>OG``htE;PvDk>@ptE#F_hf`TuIpt^mccpb^qs@ueLYzA?APX`f+p=ZLo|u|C zzLK$Y>Cz|J>$8j(880zjPI8a|S)N(4WXV(PHNHzrt}sap*=SnCUKg`QpH60wVIqt2 oNjZ)J+o?dhq)WP_OH!2o0s1vqo)!QllmGw#07*qoM6N<$g1^d}6951J literal 3033 zcmV;~3nui5P)j{000Z1NkllT`5{M5F#XukhLZMVG;I?eL@73u z*N9|9huutHJi`X3m5iM_ljIjUE+-$Ht{z`09OhdC4>27Ui3tl^n8b}38QY~h*24LT zF194P*qZ2KQ~b0l-y+B5YOlOv(^~gdjY7Wq#;t zzQEOPKR2~)XGc@dnvCja!czDzOZp8j&*7@mM1x9HIxuc46?B{TI?hb zPCd_8UjHTgXO6t{$uD3*6SgKg84B}!W8eY)Hny+fcFsxiXrBO)lx(zHNXFuPf9O&E zF}lB@HqKe{3kYRIi;mKK)@whDN;&%HADz?7)_jL9NQm;{+-T-QC}{p(I%sd-Eq^jNJ#2@4rXY^9JA zo!;i7G6TUB&-sUVCOD|3myAfgtpH3+=7i5I6?zPtiHQk){X_y-ck%{;5J^E+2%~@? zI%=z`))uoYuCe>LHr~hem95-gevaX2hHfK$LIEf{_K|opz&1=Q%hCc+ZKYDF|ltaLb_tqBJLkrM1d13{2Bxe0-czsdVm;Ux1DX zQu0=qr_)ODwbTuyghNSIkGt0=A|-8_MS?&?T7YjSfO9I&n+S%&87{KB_^@*^)3SWb z+^g?p;nOYCbeOId!~zxsFf}!G^x8UbSS18=vch}pO|*%W&JC6#j3gJ(j%&rWFIfsD zfQ6bpXG@$9m(0*gP(v@u3Y~^ax6yk{e|@uH~eZ0^(HWqdHPm1HUb zrm`h<_&7 z&aRegz_r*{7^D*TSjJIhRGwNr)tk)FVJ8@`%+?BGLg*P+r7czJQf5<>Rdz?)=yN-m z5+3zf(wdSVuNKG$B?1}fK{+DE=0rQKRuW@zmTD>OjlmXnHC@GIyu?pmdz=@i-oOxs zer}OGQYSr~@n*iu z%KwWOiw8O4q#%C-)ahuJ?DX#uF!TbY1%nIIc)VYE8QzT822lkFs}#M}0> zIn~XmH_fY41ANTA3R@ZshItOlY1(9x&vPX`>2@aTRQFYpS1ITB4nD%uGykG9*2I=% zr}n_hp(^#Q*3o=g&Rf2kQBw%KFvL*#_X;(A)ppD(2FD9`B-%i14GJVd6AO z{)yav{yepJk@$K*Im|W^^dy`0nmss0;ti2kcK++pXX%KgkBi$YLCiZpm4_>bS6RhQ zxZcAf(nSuIZ!sH( zvka5wn8U1J*7d%6D!fZk7x|oDq!?D}-eYGzoRww3wPe}c*3TnT&-2j1XGmC%PES?X zQu(3DOpoG=J4#4A>{;FLh#D2?J*L+;pk9fo7- zt&24$pD=7~Z#ulysaZ+|W5VF&Xqb-`Ci!yzhsalp{C42)WK%A-VJ{M{$B(GKlV)81 zD4`8ia$MVb33pxaNt~EXF{=(6{zSu-(n-<*Fg- zAFOhE%DuH4DISVm;r{%*0509luD+cNmUH+@0Clvvpz2wtlOJ64DYmqAGZxG$d#HOn z$G2H0cD7zjtC^zQ;Owi+E{;Wq;qqX#m-`k4u!~!JZ{V=ffbir3IF|UQ^^A}Cg@%@| zt0KQ4*38YB%XPtGX|<&u92G!{hr$H`1l+Yv31BCKC-DJF(-w(e_$m6^x)}9mb&|7M zG{oYL?(67rIvA-=pP~S4y_xWEw3mDHPf{)yx$Dwf=S^U0es#8_NGWPIzDPXN&3G_- z$~L|n4KYxT@4J1U&>I8e{!GIHsQCbkswp{89c8SL$Mfg7^OBFVyLYEHfokMy(na(|}eDL_K(j-4V^f<2u zL%4Q=W)atQ^yQHAM^5s1BtnZ1$*t^mw(C0mw5TAW+M%K*J3-uZ_|wQhDSe&O+!{%d**Q?nLBS?MsE#YL&6Ev6^HXSO=VD9P?6PHk&;gC+1z8 b836wSr|~NeL{4p*00000NkvXXu0mjfYBbcb diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png index 9f8da4db48cede8d8f9acc89d99ea1324183c81d..3dabe95cc96fef17b6a349235fb9355873a1da7a 100644 GIT binary patch literal 3834 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 VE`>}t;j{n%002ovPDHLkV1n#Ij>P}~ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index 34d9454dde9c0f3cb5423df4161ca6eaec1e9e8f..59cec6ddb128ce15c089014b7a638aed6597dbd1 100644 GIT binary patch delta 1315 zcmV+;1>E|h6157DBYy<^NklRzMx)(Ywl&?7WoeggSrXT| zr*Y!;$M5IH#XcuDSQ2N_e$q#7{e(m2mKDO7byAxF$0Dn+}tT&h%R#(BmMt2kJ z??%Oc(xXkpzc(R|B99mZ9eYzYZCOK2!0r7=+sewy&E@6gMI*^*Xd_Kpjaft8Da-Oc zYzWw}Y6yiwCX{wpP6Ln`ERjg$K{Vi}M!1!5yNp{y$Q)aulZmS}XtnC1R0c?_*>?uE*?)kh851-+dtuMq zVK@?)g1LAALa8{{CLa|y5KS+^4%Z=QyttR+)tPo^xqs3Jzj#l>d?ElzImNYSsknhK zp5aej2RZR9Wag{+BjAjAA)Tkhj4^PfumP=+1J_S+{iqmYpolBLvcuI630dO$yKM{* zUt&ourS&FmD+60E?t_Vt%V+}$_{?S23H$ci?=UKy$6B}Izd;nd2CSLs+dS$zhE z{Ad3agnx)q6s+PbyzA)Z419-XwX>1|2KW*h@t@=J2)a|hbGb{G+vYj0%Q3(Je+6gnH(Cs(eK(n(?x!baNDluGoyn?e2<(hB+ z(?U?Y-%tZI+t7d7}sA}4LD*qlxgqv*`M(8 zcPPAvGs_$J|7z(>!O6LE@ZzCQ;D!Dc9j&$=rH}KGc_numw`~7qGmw^L7{yKPS8_2570f+dagI)^av{6^5MS@X`Q3^JHTS^7-jbPIy@i(41cA3Vbm) z0%9@>roTsU`uvy^%!+^C(hg!G!U->n0e^yOn-$ISy=N4{QXI=?gcGghgFia*iZ6?S zg{8%{TYo<2=_-*5~sJ7K4-yJ+!5S$_-= zbY^Wq2kdeWDmOMdR4OGiUi@<-@_@l?BrQdY*9Hw1ti5}TBpl~}y%SXu Z{{U_DbRdLo`zZhb002ovPDHLkV1gzfd#?Zh delta 2329 zcmV+!3Fh{-3ZoK`BYz0$Nkl~h%?m4uFy`_C*BT3@AMK+S4+sd*&p5xNg zAe$0>v|FhU#eW{~7cS~uXa-1sn5RBHwU2ub?_pC?#sEQxzzuz>q04MwW1!PzWf@NN zurs}mPqeI~%}lOlsIsPM%3~tS|F?Ne`xWB4smKdu9gV1Ns!v-asqWQ6m*-1w^N->_ z2BRHH%;hZ`xTbB>s>VE{0xUg(uIY$H+7|9fx9X2tN`GD@w0X9)k7tT+^0&#?_-gJ7 zc4jVE(U|%fVZK6$`8i7HQPxB|)M9_LI>L7kKhCd4o`&!vE}$M_es21$HoBu3{y6a> zcOH0%qFrgK|9Ka%0J-2T&0r|e!+v*^yAM9bj8k2<-$zCO^R5*N!G>6l{eGU`AAN4w zK4)Ek41b+fJPKl#lBiL^#XFUU7DXUJHpFv0S2@5NN8e@9s4$N+8if`^4Uaxr$Z1KY zuqg|hlCYUz1_O;YJ&A>(T&Ny#5up$b_-pZXF4Q}T_GQrZ58C^z3z!sDu4f}(PhLSm zpP>>u6vHYbVTpZyo|pX*Gz~hm6hU412@oVTi+`f&FjbqzEI731Ix!66+zOD%%q1ky zJ&cG>RwU@6g&hp=d9jIo-U)tF`xnQ;5`B8+G!Z5`HR0h!!0>$X`8>V7y{FB@SziO% ze5mwAs0uw&EUgeR!5J+_7)rantfOED>C(N9%3Y8IjxSm+q0iRXEYj*b!pr`FJU zi+@6LW@N-U>W?!RY2%LMm3Ts&T;Q_Z#;27yEm}+&z_KhQVr*>e{0mrsj8gfa$WC*R zUFKS*!nxQlXHD+8hV&e!X%dQ1?HU(EEa0pPknS*pLs>W&LR<2GKB01ziy~d>T0-_) z7qqg=T*Iv4Eo^z!_c>Vu(gnt-&=aKCtbcc*TLuZkI_+bq!cVCGO4o^NCZ-CmP!u(W zjhxyH*}_|LoHH7QbWKz7Tv~pd3hTWr_oqHbHr>u)_XN7o6xoIPrze`h30S&2d~VZrvMJU>UR0JOzbXOGPVHxJ z@huM71mTF_e}LN(y9nYscHlH5 z-?V@iXAW`ykw0UHuG*Z}`?01*&=hgz3o#k~{P}Yy={8G2Z8;5-m}c>B?|&UOxUJlm zxQ%=DA6;!K8B zwcwk zJ3>#iF?mVU)k4Na1tZYt2!G>5L*ul91@CC+*3AuGl8W(OowJh1;SyfpR}Yg65-0Bg6Bq|Kzdem}Bil7d_0fw%Xl znL1d>b9MVA{C3B!1jbylTMiA^fTf#FSs|gBJng*$p~Fu$e~rFG2Z(^~SO!Bg7A4QT z3q>@8u4oIkaM_g|;(z-azevQ;)!v~QG!)QnW=?(_lwA_LlIuBJ};?=@_uI=5yuXo%=+DdV}I)M-&Beiid zkrY4Md=sA;*vbjFL>PoCCeKPM!%k^|iRi4Se#=F`iQ=$qYl&3c2^dv)CjvZD%@mNfq$cgaOW<=(b zj2R~tiGQgCS@E5wi@ilq9T*r$zF&Ym&xkjtKV)`d0?!c2x;nZ_X2O`;&pN6oTQ#|6 z;0z25#CYE#{$11E(>h+(WZJJPAGZykalOiTSWz$a&N6w4Hy1AIYoWVTQiW@pd0W}q z+KTV{RIAkw9JroE$XCH{0Jog00Y64V0RIDMn-X+!Evdi%00000NkvXXu0mjf2i0b7)_^=7*lQ4)MjdpF*XKT8%nE_nK-7!Rvntp5G~O?dJTFjnjLA$)%wBb{-#0It{RdJx!vE&cv26D#8U`Ci6uM(*tF?Ay_3 zw39K+*FFH(xQFkcBXsZ8Y}|TBc!D*`HC8!;NmVg|3}TW=LyW0{4aSG9=2$Ty5$DSF zqfEl3k)EBInSY5U1L$fFxnL8v#T?j;mB|lDTwH&RNjECQK`4UX8lhxh8q1#>F^ARM zOA?LzJ|>RklatHqWkcA4AhdA3&x%7zq7Gz($K|SvRntRYC4dlwZR7Lw^mMKjm!yQ0 zYQV+{1$i02`owYQnz%`S?s?owa^;J>zdk$(1ynjoc&=_$BnDlkbZ$^~D;qYmu zAoC(QC)DI&V=scdYIHG7M#A($?*+=Z{$d<{>d2!*U9Z#ezDsn`+e*RdNt&LCn8quJ zEmklX%v&|@MB>Co1;B3}{J30sA^IdHc*6lY+HPwu^nQSPC^8C?A zBtkx)?|%uE+k!%(26Oybo#-DRq9i4gi1YtuT^YwF@p- zRNjS-%F4=*s+^?*hDYP$huIssUe%Nj*x!48H1?uVP*`sofD@~zL zs0zxd#=eA=1G^l#bfB}?z@u%i@aH@eX&t|5f0aveD9*OzG(0@~=BoKzNW%}~fEXDW zxqpY1f?@!~L@*KN%4kU(nMXK5QDugveB>G*G!C`5yw~Y>9j9rJ(?7eJg}^>-Og>JC`!fWeJHZnwLDDaTrT zNZQ22M4eR92PTVD9gz4tw;1Y}$J$SsasZIrhK7dfne%)pwb^XzrlzLw82G+8&=Tm4 z8&fn?PZ5j8PoB&kkEc63JNwR<1I^9NpXP(&rc}}gCJU>RIFk>j!KqP`u8NNFA%EJ* z%d{!5n0sH20c(@rs_ zWcaG-dkN_P=d17R*|T4YIZ#tmb5E)c_@^hx?(ZQR_xtGifh#^2{h{+UgUIi>?t4Q4 zI^TJPeq8G-24XkM$U1a@^%KHa&OG3aSGI1qDVaHKe?} z{BwMW;nhb%2PQbVE^$wPkcs}>`Ep#ipys2)#5MXF=s#3(B#ykq17(NlodKtz^UA>6 z^y~Hl8V>nQ^Qn*yaLFGzcI?>3m;(n69Jq6Gax!5OV|8BUK3*lg5TpY?cz@%tiM&K@ zUyGrGC%7hmw`o2d(g8k=yE8H}J`r<(Wi3B6T$W1uKmbor$NS%mC0imS>j0_^l3ee7 ztRT7d_4PF}=Q|AMqA6OqQom56I6aO@v(mw%Z^T466ALO2T$Y8bnM4xp2mRYd z&u77yP=>??qd!NRtCQ7HFi=Cj@VKFmWXIT*asaE3W{yKWkdu@1b#S)XY{m}Ac6uFm zq}4(>uARogqLbAD2T?^Tx*90Eu_%V`ammz)OFU`Ijp?0et}v0-9Dgu4xm>Oq=K3)a z{&U=A9@N&>K86^JYGH(KQYUN$w97rdLE81N9242a@FPAaa9-%774oypahBU1DlIKV z_~6~?d@n@e@odYMEuZBr>JWoskCXup37xDJP!4bME?gaKr-!TlY9eX{kS}%BQ7B@5 zE1@`GJW_J?>D;_|^M3}Fv+4vq`cQRs^+CLgLBd4EE}%2SQ<6^D3eSntv|+$OyDAso ziSL&lqH_tzgM+gAhruy!^`$5tr4J4c+J)yv+@VI74mZX6l|*=&ODOWe;c?SXDzZ() z0kjwAT(vq`6O`EhFLV102%b4}#`-m*@NDhTqer*#1AZ9WCVxW-P1#djubap&1oSl? z?uD-0xK4Zi{X!i1AC_fN36r0i4x0$8;7FK3`FY-HJ-$g_Y8_Z-3v8ExN0rp`j4Zpe%ELU17sW(jz@(w0nWK3%LL4U~OC*jSzJEhbXW4 zg0Ul!#b4}7@=+|H&1NeG7jObMov)>ce85)S-PF`{UhIUirI-Lo`X6qAU*gjiZx{CQ zLkL=jGeZs39C+9AX)0OBu)&=5_4OB+!{@J5H?&5vGQL42OCb@rHB{^CpI7s`HTo*GMdYa6>&r%ZrJjAy`kdb;^#3Z z=C&=BycC4frcIkZ$d`BVbHjseZEbe!1}c=|2+y6;`y}}nO@laW!KTycwC~@){~^qU zIa3asg@1%6Nn>Mh0&fEDD=I2_+U<6CV5>n$3cL`+76e4mH^K$B3JVLLVcTEE9GDAp z#9zfeqM# zP1sIY=a(y388ON2j88JYxMRnTZ*x0-h?~J;4u6A2^ep_?H^c{!7r=FYe}5;3Un6v& zi!nSFZx&$VcG%3!%ryVu;#LXG|IY-R!8>~p*}%9jJw5#^Teoig=C*Cyz6IbK_wb$2 zfiA`vPgSrrXZ3v$>EAy4G);Qt>!B7ke$Lp?`)ufZ6Mowu|!`5!s5Fpa)( S84Yp(0000BaWTJahe{`rs8z*)g z$5(dHY-bmH*^PHohraNaR<>tnX8-@$@B8MP8S_8RGc@z@LVt*JWpW9y8n_Zz0JH;* zKpaQ`8Q=tP0N4k73H*9457ad6oCVAR9suqI=8U8LQD77B4shIWV=2Ib6yW3P6hgc! zgeZ#Ips4!m^uwb99vjsQAzlzdV{SAYzQJH3#XkfZ+U@m(Cq_c-2{k89Q%xhQ%8 zYg-r59!(fxR`8;bcbP~`BJT;Mo-EgXOnx~I{NKdBUO~jLmp9LoY8-U1vP2NO- z0xzB1L4PWrbrKO#{4Cf7%mwcJugJQgK%O_dzc75l0e2~$2J8aX1HtnxK;pRG%Za`} zo!)}v{80Iia@;c!WST@Hw+Aj`ZEz8bwb@Lkjj$MdY7q#&%XHJ<@8}N}&rn(6LZG9@ z+zmvuAeTm_5)1|_a+!UFKiO3}NM6f3w(Hl2$$w_EM!aurZ7rX3bp*G-==uSTuTdU-)Y+!~qhDq4wX zvJ0rXSTW(YI+E#hxueBIl*b}V*_}SY=jq+(LbvWUgd(h)B2()4*>!}-TK852I*oP1 zSZ{4)WTe?HAniqjB$+Q3*xL6aUDGU!4Ap50c*+v!oYD11L8eCx6Jk z(xN~>(|9NQA^xM(1%g=r2(>`}Fr_{uI| zKhUERB@5Dg_N0y(PFf975#`aktAB{79L5N#RV+>))hQN>6}gg!H_>Bm42NttHrtnz zlEhzyl&68~)Y|x?Fw9$rw?h@@HL>Bq7VCR+YznU|Sm#B+W;188$E&yHpxA4Bb=#97 z#jHr2$&J%JwkU(9aZTIBUdZc;rvbZwBWgRvg6!~uI&YKofR<)^;UG_TtbeAhX@)QI zYo;&b#!2(M2-v20Itq|@9aD zr)OQ~EW$r|$>(Kzp&O%|+JC-Cq0DGTEWvHj%g}rT_B&F|KwAOPtJbB z*Y32;=Xag_nUAwwlqkABO^Uoi>tJ1Uft8r$OC>g*`hmXuAS)&JJBAZ5?sAGnf;O4qcriPm;&HyS-Re!vl4N&cTz^ed> z8&!C1HtP-y3@|h_WD&EkuzcnVv(v4D6yVh>KU2FFhGU!iH1T-c*d7Uo!^Wqy z=W!e*IpHU@>)=Y>g!iy=Hhe7wUNq;4mX;P88*8+bK8u3tf2loOy1|bCR1}aC$s*uA zpj0CfCDq?T)&IYujaVCMby9!d;NalwOeW*E{V^3F#&uHf$BDgQ;o#uls!S$h{#Qco zGc_p3mm3DdY8hz$S3>6VGKC)(5{X2u&G$S2_#4|SNOb1j7;pdp002ovPDHLkV1h#B BTH62s diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 748d7e432e0b180af5c26e3bdaeaa3eccb47504a..acc81c6cc64359e21919902cc29133e825ea7477 100644 GIT binary patch delta 2532 zcmVdT35k$wc0=Cm zhU_kRY<81<=k$DU_QvI$ecZcy6K- z$J;1RQ(7rbikmVKJsJu5JwpR%0Znd;)k?Dao2II2Ye+E4?!PoF-0d#rXDgN?Ldu9ERO-k_#xZHp9ci7xVM;Z;90~ zt&knGSS&fT;H%Lj5jL@47HET3!r^d?R#a51kJT`(h<~1ZLrY7`-86wmPQoS@%px1$ za=E-^Wo6%jc3K#){P^+XUyTR@QX(7RbUHo7#l_!-c3K#)qM@N-Lqr&mk{AQL2M!$g z4zv>nEFeqXfUAK?a%!wg!tNX8et*4L(gqxLo+H2MdYR;PmPkBgeu?CF9U{;6)suS1 z|0Gi!{(lMXyoF@R8t~CX5BWuB8QIZMoRHj(67pNif5;O()uhI8mbAM2$z*VvD{DSk zvIZ3PALRs3#r>V7j<;Un#->4Zyvj%{{=?K?%YDjrg7Q z6?$`aaP>%qFhE28I?zbGAs<(lWC#N^B(I}HnqOk;k_=&h#ys6yOQu5su0Dw{tO1y) z+kewtNgku%wY#l{rHMJrnzFA|!-I5;VDZ|y`Xs`z2K@Qb>%+}_NUk%)3zGgn3;41a6DlRa-JHUOZBsv0??s7Y$1R}Fi9A`EN5 zUX=!b05#zyTk0#J&E3zPn+U@i@KjHYY6F1XH%11I1+>3D z74mcEr2;*sa{GH+c`~@N)Rb#j12AAxBUCKylY?A&GH*K1aj#E?VGVeuFMR`C{(niX zJb>=%;IxZ-eKHJb07k)oA869t04(6MuT6#F48U~5dD=@sw~{?aDe(;Wz4cW(l2*UT z%TNYDe6>wPJmMK}YE<1UsLY}_0DbfEfR|e!XAMBJgWYoS?<+e`ke@X^OMY1UctUoc zEG8G6yCpf|5ac|>ah;7n&O&v_Gwz+a)v^zM()l(^p#sCP9ErXb$WG{au zVBjT}m22A137w2O>-%%(VjO^apiHaZ%6a8xRVIrB$YfEr&Q!)qk+Bw{EUX zR^U_=wbsv_i|y|C)bH#pB_~HaxcaI^*9HV=yNa&e{V8@iD*=0W_Fp)GRwDL$?NCxR0AED`dK8Wq{V` z(g3VPVa19SF%yIVagrzEy?-$?Ct#)s1L7o)hc6tErixhsGesB>CwV+9w3mT_6)T_` zcGE#uqw_qOpaUfIq(JQ44=Zpg3}pa%8LXgcz(5UC1#G#oumY#TPzD?x{(uuz4Op#0 z|2z;1k`HYiq|$tXywdT`HLwDw;*k?YTp2aiQ>1@9vr#b6odM7HH-B)VssRR~oZj(a z^7E!bPE0NN$4Av%{nes71Je0=X)Kth!Sn^%{PGKLk)PB*#R;bcJ4}V7!=-%pLn3r% zz#;o7PE<8KXg)Z%Pk%b-Cog{7M1EYqmlH4(c9@=*nm4xY>7Y9U&QA1jqN)X(Zn1p? z<;|L4B0s8ok`po=Ab!N^#?C%}Y*^v0~TIe$X4(>`)ZlezzR=+Xdy z)h1TROn8i5374ZIWHd(y+f(6EYnNdTY2pD=-!CNxdW11Pro1cJy-fnGbYr0GJN>$*aTf zOY5+#s7kuSc1rU_*m#9~IWPnZ z_W+-E{6EGKZ@Jo~rA@XBy|Jhahy^!kjGAExdQ1Rc4}Znt3;S9M`ji)bOYY}>Z&n?p2$!JuRUO&Y?*Koc7pXh4Db zL1@#~)@IwXWeaY=w-yu>e2UdGow#B9_U(8gQ1+fZd+woEf^A}A_8WvEW&_QR+wCT; zt*!Q5yLR0Nt+sC6dMmVJv`jm0T)TGd=jrjz&3~IWZ>g=Vt)x!(3=9lR*le~biZ^;R z64HAf92|5*i|Xp?BbzpD`T;befd{#1^CZ1!z{!>C)~(B;$2%!s%gW079&MJk?cBNZ zr@6Vg_ZShpcW6Mh_&zj&Hc^dMMm5tk&?CAzCnx6)8aedmyC`3w;CWd_1{&N2O`r|^ z`CaB^vs%qdz*XFoKb@VO{kb)3)_h_0>eXLdwQ5zC5y5+h2G9bUM77cUlOHdT1pQmI ub4Y4rpaHa45aC6L5FtW@2oWNdM*JU}Kr8Q!G-xmY0000 zX^>pib;p1AZN1MfX{4DR2}S~KARuf(;1m$!LWB@Iu?-kV@*&9=rwUW9$_IalV>^pe zm2#CaUqYoS!Hz@9g()1zAQun_iNj(H7!U{{p^=!8X6spcef_r7z1=;UrDvq+WtfrX zU)3e`boYDrp8q}Po_o%@_py$3tYaPPxL_gXcRUD!*>8UrxF5I?h^-HkWg!Q=1biR( zN#%z^%oX`k1pEu|!0PGGn#N2OW)=7G`U> z6GK~U3R|^UAlqsL_^YY)M{*-PI`jgE^Fw%nhb~G4^n}`JH)8aKy0|pjO_$ZeMUl=` z(BdVrK(^IP(DZ82f@AqnzWU+6k@jnj3Ud%yS2+=b8538DhuN`}WSJOx64RzuNODm=mxMaN|Zs6etKJ7-FzEB63 zMz*jg-lIr~8PjOXLkrU5hJ5JN?yH3D7R5YT? zXra{%^W?;9eD&z#ygxP6l>4m{um~g(rZDKW+WE*G;cLf##PdUMH~c>91e^s@A2#R- zFa>`<@-$DK{AEM0f5Cb|%YjcoiwL8K1dohAkBQEKT4k#6<|xGWgEuvkaaduKSwn1S}Jhgbop9)XeeNsh4oab9G&Boq!r3 zN$Av~ylM{ezk~0>bfM;JtrJiqLg*B9kN@LiMo*2B&17o2(0Snn=?HSTOk*R0QuI@+ zyo6BiEp#k3-Wn6&k?v_6i=%pqVJ}U`DEL7@BC)(w%6UORS`^vtb#g5|*t&;}$8=C+ zDkzW+Z1NPD2=b&TfC#XJPE&#QChb zn?g*(3j&#qLK0XIF5`X%-Ph19 zo$>K;_1U?SaDJGeKw#rCB67Hzq3T;TWq72JbPNo3iWvL+EsB^a-{z=0#_R4$UUg40 zCNi{(XjvncM}#zg(?NlP@1ScMfxbKv&byVc6ux|U^8{H8T+(s|&;+KYbB)=@)qav& zoH2e{JjBcHablWD6iazI=L$(cTDaK0haPCE_*P#A2^X9f6qLPhPkVK@h`CN1_Uyj^F5C}4XT{d86 zht#wdOf|93)|+!B;euZWNI}cV`m~qk=1@NmM6RU}xVU)d^m|{qqaj7We9j~Znx-vD z!UazN<&}XP$-{n{+rvA#(duWy&!1HXJbWS;v=PBuq;yFVuoMaF1e76#?cm|ya=W#g zRuQ3yyX0>id|Lf5eWDFV59V+0nt>!hnxlz{iG`mvxF2g8(i~0tdA6IKTyFL#cXcsH z!g9i)*Kc8y9>YJ2BrE1S<8X-l%Vj8d%)(Myg zsRef6u~lzVvH$t&3Cg2CD;#?K7WRmZ*r5^`wcxxUK$WaFa9e|qhb2s+T1bU57T&KE z{=0;%wqQj%ACe%sfkW;c@Ko+#A*5Mw@hRfZ2}{WNVM65T zcRTo$*hVp2`m`R!TXO`+4o?c3tDPSHSX_k_58+2mqQc-7k zpJf+j%pwwtF;tl1Uyr}UJ5$HWd8M6{i`gQ1&5)+EEw+g-_WmaOT6-CHvU9#8$F*FL z6@sG5s8Jr})57L9r=P3LE#$*0w^R4Dvtk5DS-z7UWWXNdaP~AgKR>gd%hU`dv{pUJ zCDCqnM|+fcsJ0C?FI+z3_OL~6+KYx6E~NR!J3r!`iKBE`F)YnkGK!-nQOD<{%qiZU z9N_CaKhG5%eN1|}8EMMRAu={pz)|68X?kSlYrEUY9bAGRH9!*tb&h^kf`E}?n&(o7 zcr9~`WBCzmzod^XX^J|mID>^z2GXPK?Cil2K1QIC_8mULUXQyh0wgfxRGQRMfEySTyJN8W+pEkno&qhO6!q27-@vVU;F*Ly@vvp?I$!bR>`=zVojL*C7DNd2$IycD|*^3sp z@b$(EpGIoHD^nlw?Gyh&t5Mp4xSYiHYJpro$XcS&AjfU~4jy11;Y5UD1N{BP&=3NK zi)kf%c@#jxh*b68*8+-oD){hck?U#GO+to2(Q2OXX_N_i_~g&Ycsbf-Vq%R7zXI9% zUcH5IB!tsIcXKh+tpP7ge84ZJ57Qg&Sd(U_8gfDNc16xdT^b-)t51x+Ld*!M12NXI zeAJ}@uT6i%`?(=DhguuzYE~d)@daFEnwZfl065O1lWF1y~-3&LB#lao(7_nhD7J4j<%()WH{x6Mm^QM5g<$b$i*b zZDotqMw=0tiAqXx@|uU&6rEdn)J(v;nIVRY)5`B}6atm*bGX&Ln0vI#FympcN;NfN zR_Y@vUz$PI4^+8Fy;Q_BOOc${J^XpuE!%goJx8s+n_>29CScObkn?Oh%xJ?JBcqPn z-45>LQk=Mk5izh`mlNqR72KOW(MNQHF{gkhtCDMU04f38! zq0I=B_6ki|*4Iox%E>nL*vLRdPy;UZJ4l4XgrafYnmoz(jy%JZJ*{Fk+MMKfNh4%1 zEnK4(8lu$w#|B@3!MVxBKt()#LVB2c`)=aa4LivN#fEcGGXXM-R7ux03UY*-GN-F+ z#El5=O%L)v!*8>@W%B|9P)Q?Nx>>gq;CQxLK+ZQYlJIvjgZyG-BR9A1K$x|cpDc!& z36LhCkv37ND5pYXg+W7Xq`{_ya za5_J+?A0usB9^l5VezIn{M7>Et#+nJ}4{xN)ic|E@ zZ70dOH%QPX!u%H>@@W1QbVo34=hzl$<8Lqj63IjlBTXQoVs>hd(J&YD68%BW? z{)7^KLx9_6EOpy1BjcZXE>ReAWMZ)vJ84|L^f-*4O*;B z!pmq<6PyCuqHTQhvb#yf<(x3N?E6dMr(Ef3MtDe#{C+YbSuTpS^Ea2>OEOV%QO`y~#q3Domqz}@D{gk?wx~!{% zHk$8hE`^3g(;iIT#{T%F950MD<>Yfwo|t8o@^yY6mwOx4Rw0=Wkmc#y)Qb5&wOAXf zLPACOq4I<)SGZ|&iaE6MUopbL>y-kW%6d)-a^iGL-1 z@lFCuFC9%INytwsO^{&==^Y)7poajIaZrPq|z9g4jbM7NZaKBGA;yBb`Lp6ePGrbg@g{NUzyS(F(Bj@~(&)1gH}CtD|HxlT0S(4DMaN0k=20U0q#W>R)+ikz;yio-9322ZNx28?aU%el@>E)z$$IH>=r_1bK>}<2W;? z8_s{7=U5=yY6Qq9KL21PNVvf8gR*SrV6n24`^({%`r_VzIJI=f(K1piGc1}a)Z)@2 zFeQNy7Qs-q1QHUqnW!U?>aW3cjft-=)|@)@N3{f=-! zZ{=hS>5p*wEtoKxFp)5gFoOf{@g05(R;CjoFN56~A$@viA2R6kP{MS=KNHpvb`g>Y zR|p0|1EGb`#)0?v?gqaG*CGwlA`j#>R8a<$?$!tkSh3Y``aF*Cb3!=bGNGBkZr!@o z3#-+t8S->IuS+~{lrc_Gw$u^i-+e8GH?)^{dOw`-Q^J=7qnvOVncW174EPKvMSQQk zR;3hP7Rp4~!|m1YYa_~r(fcWcFhYS1(&Yr-k`w46kOxHMD}66h2I_#iOtDwrfEC8= ztn70rVKc!bi01@#agsbixFZOKpiHSet_ai#bqkf%SLL4qMij)4B&;KtWyA|};S193 z0cH1^Dy|6B5p^ADt1Saw&|?TgWS?Iml*ouz+2#QP(IJE)Q0JFr?LhcCutx*qGgbb6 z3}L^FcwuIg4IgNLpsuJo1Z^0@+a%4j`?h+3h#;Q7{{icX*F~eGo)ut_j|R*yeqgJu z145Y0MpC8MqQ z3))ySeMQrIW@<1F%KGRtl(WjEUDSanAuYqfN!(s&6{*a{_dc6O#442Ds1 zE_^1Uz}nhc^!!wi?=6!VcxG?VRiTv+_d>-dRl$G)*JgEQyQG8RvUL0Rk{l>r0PHifFfVs>;?1 z;-VXzkSQ{xrKL@fbLO_Np2aoTw;(Df8ol3F zxpP?-z!)1_ozDgan~HJpW&9A-D$>s57e1YwHm>+4J6;^Mv`=g=kL ziG!&3f51(TPss;-tpEXxhUEG@r=ulOKzBz+2P-Zv{utc3tN@YFY&K7!OdELbw<-(t zHvFXk;MY|4nYvt3f_A?Ej?h_Y6qwGQJv$v7>iFWFQ^M_65XHC~{nh&ce<}cY{aPfu z+^AR8%K^kF2nUBw`vQ@GJo+T+`E~y4{eZs}0K8im?UYXdSKzF!uCAVZ!MDI=R#ukw zxq-0#?d|Q-=8CmPR0a7013>}6<{PJ+GDV;ble4_Mygz_T&Ax!~wG5q3cQ0j>=a0xo zj)9_pWn_x3&^$p|KYI|IRaRE!hlPcSWoyUlM8ftrH8uU1_kO@9p(C#EK_vU-we8Yx z%IjUloB6w>YZL^kKwwum7@c55spzUfcrE1*RIAYN`BV5_l< z2FH1{I*aY8JjXuP$J^c1aRxOVjjB4@g9u5DMq}mHty?F7+XDv<*!KmjXB97qV%VPz z1oH!EQNVv(-^uct4XU&PP)M_-of+EdSz_(qq&Py7cN{_0&b~u z_cx~l=<`r!J%HSzdUZ-IO*;k zn`Vf6=%D=k{ArZHBv0&5XjMRdi}MNqsyobVEtw=`p7zk6sj~&)2Wo0+%=`B3n*)w* zPRfJ=C~p0U%>F}Enfemi6tGL$^HrwRiqh6(px`q=>kS`_e~q=3SfDpgvofRm1?&Q#^A#BWGRCg;LX0FGFi z6=!By^KfrFsr+1Ub-r?`ruN;~bK=FBz8wvm#$shcigX1sT49QY>t4!+%SfYj_ z&dtr;M;uGX+&SO93J_D|p%ej~3N!^^f`pTE%Cyb^#NyPQGH(GW=YlC;l};l-CnNuw zLL5tuSjKtphoBcq0?&A|Y;*g0^qpK88ZjQh6eOLyH1DVS<2!+RLiE0W4=E(r?P^wL2&dcnF9d!6o93K4@+Vs;=44iP&$Gw1)%p|G!?3@bp}EK)z#JJ zEnBwy1Gu)SfW*Ya*_5D3BvNMN57<+{hov!2EsSY_Ed}7@wbmtQdk_ks$yhTf;7NN5 z7#tTD_o&qm3P2CW5y3Va=lpFc;LZHqtg^kK_nHfaE9@OzI9qsRHTz*d_(|;hZ0qG? ztfHw_RSvb5#VY0k|5flspK@GF!tfEzSKuS~1B#$JwJuOizX7RIb$ztcsq z*3Q275p+-(x}hwtw+xh<>Za)tkei?l8#X*{R{`6$ZF|IGv3Si1m$%ij-9)UdUab|d z$ymu0d9FRbQ$?~CWLNbix7E_lekD_Oj4?w}in0x^Kq#QHva)97%9W4WRlvLNzB_^D z0cAXq$HGv|GIv*=bBlNZINwvXIlXzKM=QzIg2>GZ7m!W5$e8G!ypdL<|j+4{dj`Brlwulqo<-tX6Evj_p%V?Dryn zm_tuHcPoD~Kv7ZA)k%{kjRn`riI}txOt{Z%HlOy?QUoSP%L}xvGHQi46o8xj&`B`c zb>{q!6OaZ$Zf z5*n?}oc+-P5HA+v($doQ6UW2BHShGdg>MoB(=d6DFGpi3+NI@aZ25&7l2qh*0^U%7 zH__d*FMO+|rG?Qv3kPONl-yatX904v{{u`RBj?WT6lpO8f#Q-a~3@Qx4`@)Cnv`er(-y`{R?RbA=3S^ zv9XJh3C~cI8Hz9@tB7<3SdS^>=X?qqZnD=BKUNXwO>EANQMJuk2=h~0Tgx_X-1r7K z?brSb;btiKp@$v{CEJz9Gt)FHhO<pX;r?L(gkDkaObG|i;7A^WNxP0ra zw;Y=vnMh}Z=yhCnc6K0AH-2rYrI^S^n zL|Oxxqd%rad(0ex{L^Jw9_jgj==}u+1+~=szXuMNE?sIr_U}i6=FgvxN4rlrckbM0 zxbfK9BdS6LU^_8+Qj+K{u#=WyF77R-uCb*)EzmaUv#Oqcp|-{YVfEBWQ4ZWMt$U&CSw3wLn1-W#JMq z3f8&toVWgfoAJ)c%#oRV!iVIToi#`Qa_j?k#)D=D5T>WHvXX7su;I7hjL5$a94a_< zTJD}OVFI?%LMbdg3{!+19%TjO!2MddZ%av_CxFp~Q6`U${*by)MY27-NaQCJr@8ZB zCKb5p=|%^QBLP>OGi`Cd0|{EVa3NyYv2*6knWxw5OZnWut|>y}wA}FEDsWU>ZjKNg zeU@?1VTg+JL%JK6Jx)HoN>5L`bm@|Q)~s1ifvabpdB*w3rym*g^wUq{9~yk~qmMpX zO4DoU!KM90MOeYa<04_Zl?1vA%n{^H89;Od$866W{p{H9*%^H{nH|qKTmfNvN=r*E zD_5@kH8|p2-9Gi;AsI4z_UzI0I`znrBOk-lJMstE8;<11Jv;?0cV{)0+T1*c5;mmo zSCRjc6l!Lwu6GxLe529GqN1WUf*a0}ddJHH5=3@wSV%|+&b53iIXQVhCL7QJRmAQx z1M88@!vXcD1UO7Qf_PQYUtM}!08CC) zh0dva0BT#!Om8-_wl4L7Uw47FqRqJT@x+M}$;8EMaKgE!A=32?xBf$ zeH)&D*cBcgj!<(J+REGPSMr5O=4kx*@qa&J#0V&1#;R4TUZ+`MDQsmRjs|(JM;p@9 z)5}(@Sb<5_473q#MVoos2ZTsU7&&s}h)E>$e)=PiJo0pWe0*$0MFsxpjkHXQt~8Jp z!FxTz9BI@V3}*B69^g}s9|pe?*jA-s(Pj(oXbB682<$&<&7 z9z8mg-hX@4s8Qe9vuDqit5>fY5h+0tBv1f4oL_td@9p%~ira^J{)?yCj5D0ZsHmvF zpw6f}+JLs8O}uRZA(BZV44*P(3U1BEXqdHN!Gh=a@87?Z6j6mCy zR0b!#XU0fnqHKJJ&=Pfuj*i|nfByUzP*>EM*B$#I1JdL;5@C|=89R3D0~04sgoB<& znEm9FPd-Pz>~k9CdGHZ@CM}dWjg864$tedR z*whdsLkNiDAuT$uT!cTl{RLfvYvp7^=qE|hn5R%#dX$N>sSdbv9X);;>V`U^uDs3x zO}tWIKQWX;U{iUt1k*HwNO*MGv}xa4yLRmgn&|Akc=2L3P8Ar9Mrnf^y%qOZfkZJ< zYzcnDHHf9t{|0#>Pfj|XRx%A`qHG@1V+r|dPrOoukC5(3fX#)| z!_BZb%eQ~-@p6#xMV`o;mw~cS=KpKr?TK6=SZf(Z2*E5HCk@7p8}|+FL&nO1@9-P0!L>-k z(;|;Mgu5XiO(+GBo@;Se52 zdvH|M9mhX+-+7RPym<#fFh&Zric~r+TCHLoEjYIJVXGaqol)DF&a}1l@t00(`%mq| znU>;IrIm3;ZPikXpi&hm#40LJfg}hda}8WiOm?ZqU36IcRV2P_9J14=APdkEMGyaBud>;NJbrEMC;B!I~O z^T5}En}ON_<=YE92doFSh^iMTUk$||KoxK&@I7Eop)yT_gTSAFHL@AA9b+j#1MpK| zwQRqO38Me_Gw>^*%g%C*g#hKi&w(ETrFLav5dy$(fk%J=J2EJw03!X{fL{VrtWMl! zbOQGQPg~tb6iR?5*|uI|Wujw%SAo0au+|bJ3gED*KHma%eFDfw)?t^dljX2l0IwWP zh|jjdjslMnDrBA3$U0gEE1RH3;P1fY23!y9 z%ca;>3$R#D@9XX2@WX-QtUdlFCnKj(QE}p;!dXUxyOIk_8dzF6n`yqPq>2>)-O_CG zuGy@t6kvgz%1^edzB~In_`|V{s6;c~=fXv`tCIO8ja*SVhvxFeLI`q7no>S6^N>{n z%mB6m)6G0&7T@3Z6hrEe>F2~(GRvW{0Y{8JV1)p6lKi=* zi)#WO1-f~-d zg9Fd-Quq6Wqn6~eR2uS3!R!|x#=p<&pR)_E_U&a|_kV29$E$d`rg8x*8y4eoS7|xP8PRdceH^Bb5oIK=s`W6az4;<- zF*G$Og5dOSy;pWB0hSifOW87rMHfN7+wD%WHVTqFs>&jD3JcXnZ3J^L>}QkOMz3-@ zr|iX76%#$!qb)!aT156+bT7kxq& z5k_^ydI3CgXUZoYLJaYBRC~*~r(`J})%c>lPj#nV%FH6dWs>8x0$gn2wxDqVL1cxi zgquAJ3>UXC%ltHh2qlu^IP?M-FU2PaLWCA?J&jZws?wg_;#km#qK)Ip(_(+sFUNPEF&&0DMUzGFV+h% z)2_;m2M9tZWwgF4T&2#?I&T9r-#Bz4Byp@yW!z1`tVX$#el%1ct)$LbrVV4wI&>w7 zki@b6do$Jx6%`cfq7}?gCRyU;=1nuk7c=cIt8?OSe=d1R5o!|urx(CB4^}(iQ+?bL zZDy*YT$@-W+JSOKx+zpsw2lV(_M2&b^auunNgV41D7L-3Y2j79+!KZlXDB+XIpK<(FA5GkiknJD8FNY+D0ilA5v$a4W;-giH~*c%6FhxrgD`s< zDsng!V9T+sj6_0wbIQU|?fDSHN%zl#hB;FSH52qI@6QYqIM~6={*IgTLR^AOA zKSzw}<{QzAaeL01u`O(R`VxQW1vqI{E&>DL5gt1H5BegOCaVnzW9_%9<}PYD5{a*x ziL^Q*XSorZIKCQfq1sg%A6;3vkt1mrjb4Bbt8(cL4)DO?=X2WMRY=4ZR)*CugA8fn zu87WKrn5rpV=QcXVmO@mLodKyD{>G+!3Ph&Q1s*{VsEHdBmZjVvA|Jh7y0Np)(h~F z6*)Z8wn6i?A5XZ%T}Pw3jH>9__TJ)lKM@BKf9M6sY3Fw$UhH|FW1;SRlPNgdijxL+ zdAvWciF|?mi9hrL9FPI-a#|G&Mb9S3()5nl+guq!r!`D2^CLt z$YR7!{WjKAlIOfJcYD7jUC1XHTl95HWtrLtJY<%Hqa&vnR0l2PPK?KAMr*i`Dys0| zRn8W--dS3R=E4qa)TfzBfbBA_rm4l5H~a?-++`fXP2~3Ir>J(Go%JS8hGH%y1&)rA zF9fIC^l7AejUqCrsVTG%848nN7&k@dQR6DrtexT#n(R$Mv$Jd+P zAK(vL*Zg=?4;MJ9G_pS&?&B|Qn=~t?)p)%9<&-HpoF1;6vV@iO%~lG%K4o5MZr&mz zfEY$d&1oxVN;o*@*Li5jZwvXEAPjW}2fDQVU=~G^JeY29lTH9t?)DxN2>0=T9M0ZY zH=pv7!ukq0T|QP;w%s*Zjj)61MmfKxJ-vLQ@%mE~K|Bpg;w@aD)7?JcbE_;_H>3fo1{ z$e*^Hd8IY+b!H0$Seq#*c(xwqQ5j1)E1G=Plk=LopSOmOXkS8wx5QQv^yFJK(h6h? z^N=kE5gYUOMsiwKX?+xW(G~v>d_}OCe8J6k&73u0HfIqH@OK##bU3(g=5=`SnM~R^gb4n~P&{;u zQ4wq=AIVL|h>3dSlKYRP$vQ12d&_um<_&mka<*=XPUVZrjQDSDqg@se3PApL$&D%G zQUbB0cB6=Gm+l5Z$n?@`9-g(53JW9N2)B`?k=fj!%o*j5o+v_1`Lv|xeBLVVoPL#^ zVpMn~@Sd56tP}tv2ROtC z5qqS1`%khhbc_S^af$#zB@`D#G%*guGXS#^XKcmnO3zu|75|Uy3*X z+FTBBuv!3QbM!BH+G$#d^!xhyICJKVCP+j&$HumB#+;&JSM05gkzPd0kiv&{MXs)# zi2_(PZQU!w++;k&N03-sd)6I%aPVx*9TMXDknpA^3Q=T>?>l7>^Wz5Y%?c}DsV*65 zWo@<_tE;OiD=UjPDT(1^#NV;z#)dXKU#yi!mRLeQHk>0iETb*nmdy|)L?|sCHz7&; zWt~>bI$8$18r5}jgtR%+P2)s_&9W}*>`2_sUaeh55x-p?jF}QeEJCL&`!!acBdLeo z!wOZJWiOJ)d!$_6EHV*98GkKDc2C-U+IFGFb^Y=nXR%`Qm^^qt2}K~npe&mx<4=Ix zBKn!cSRH9TS=!9+(jRH=_xlM13hIb;DB(zRYj+c-fgKaET%pLJ>#g$e8_kqi01?T8R@ZB(25t60ErN$%_VY%x!mvfUm6GmtcqVJcBZsSvc-&jM=D3zLO`<=Pd|6~ zU@-}xhuiP>w*&%#1+qhIlBSMYxtqTv;cSC|B)Lz%-5qk|vR9t-xLXVNImU=t0(?IE j7ON&OfeB2&D1iS1$JO4yB6mIa00000NkvXXu0mjfu_eBa diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index ec5b3a85846a429eb7a4ef9784ff53cbc074a5e3..348301b2aecaf5f25884aee8803bffdee37fcfe3 100644 GIT binary patch literal 4062 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 literal 6814 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 M07*qoM6N<$g32!wPXGV_ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png index 3d96bdbaa70d98b66b8b50c2f0252f832f625ae8..5d4dae1b45071ecaa04b2f826aecb3b52ec05816 100644 GIT binary patch literal 8640 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 S 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 literal 9027 zcmY*zG<@ufem-oYT zpQ)L?UEO`=p1L&^siGujRuDh>99iWR;j=7Hj4?YvMV-lq9&@L_4j(kgr<#kic3gS9MJ< ztH{8WpQND3p1MGlJh;!B#yqsU6lphhw?rb3MITjEVYN#EtJm;hJ=S2uo5$6`J$Z|w z00#ExU%*pw=U1TBWjEx||DxkC&-?SI;69@-cqsp0$IWcgL71${a=Y)gCA>A!YiuNQ zcEM!I9_C60dl1mv%h-$D%Vu;}{7O%r#(lMjRDgX?bg3NJ1+(h25=Mg#OB?79^Xy>s z`Y5l326GDYN`0C0Fo?>wBhV`Xv!UxFYr_oKKX^8`Tj0Ul3Clu#MdxiIfn7osL_6gn z?IIt}0pwNAz)c_)%npG+-D?itqaqslPig29bSy}JymV1i|0IFoQD)IRF&BZn@aZ`g z{{gqDy`*0^kSnc?=6_syXAP2pBk+=b=h5w`&8! zoPNpwMPA5c(-n(Qu>OB<@T0D!kKI@&WXdI)-W+CpK14JV^+lc?DjbrVKeJdqaA!{d z$G&viVx+aKOT#so@mIiz(?4tvBF612-MDR2d^gTh3DeAriIrHnK6YgP>urbfboPS} ze@-JyxIA?|)8Lb;-GOYK(8P*8APFVSkcd9GKK7XlqQ4Bcu~a zB@PCq6elEQ5mVjw7q3r$*=yrCb)N&5A3N$SpSyooc0*s)x!Yx9QZztF)Q1Yh0PF)N z_KEz3A321sEp2gSY9@7KA`r|a`H<+w(B*Z^YEs-%Q|LN#ne^=i+Mc@CAlyM;%9%9A zn_#U5KeGG4ZFc@8j60n9ZK5gjl4??E*x%nmEYyFLDK4!5#}T7J6G64&3T@TJ%Q`NY z7@IqEakiWwb8q{c5pRzA1y+k%B+Dn7^5$Y!ce*O(&4R9N45!uaq5V-{fr$-&%88t( zwuh3^r}I$fDBretz}~z~q&JvY!1~|Zlpj^(V7qAbUcT?8U^$L-%S;bQ%@RSDOoD-Z zaJXzrX@1xI*jWev%FDCFmxnTQdQa&0ZC?${pJ2$r^c60y->_}Q2NvhnZ6;)7n^|FEst}FgJ6of#WiM(efG*wci$^wpmU?( zl$K|f`{2ho+zkk*bhR5M54tfTx^il55D)BS$UsF(F&E{xh*xH=@~!S90U1Lgjq z1rMWkiN<;)!smxymRCJ~-mvHh_8db9;bQKy^_?N3=ysu?ALBIep`;Hd4hR5CU2KBK&x||682?K!v z+mwxqp7bz1V?6_m4`}yltNK2L{{RvOgtkcv>Xd+irV1Zg?7NrQwUcMJSKqv2{?TCK zw)tEg=VUHm2Ar;h1l>r*;vaUZIYdk%K`lUmA6Vu1n1Lv-Y3wVc10@2CH6Uf0jOBtXih)v9l4QQqgRQn7(e zjaxr#z4F_K_2<8%{Ka+Gh9y@jDWvlLl({hEw{aU;ZNMANr6Myzehvb@kwT<32?G=F_|@c7Cxbe`cg>%f=C4teDX9bv9sroX;jnB-<~NG@j(! zvU{UnuQVWxODb352n+up7sH?HP4}1kD?&=uYeJ0ir`mUKr$AwO)Kbfc_oN+~o_?nY zO;}KT3VVz%uwQDB<>2rIOE9l|&gn$jFZr9W$V|!r?{0P$N+$GEJBt6x78svl&7r7* zYvh+VgEP|7OsOq*q+2onl`Aryoj#4O!O-Y=^zMLbIZKc=yMpb&;H4Yiuk4 zg)j&sFn&s#ZOFYW{=4-KI|!Y7osb>&i!EJV10RdDr}-o2ZZdeJy+e2S9RpR0xHwXB zRQ~z{i?T917guc+8uyvRyPLMWRRNHc)WgGVKAQ5fjLb~ym2ji?LqcMZ^qT7&wWXe! z{EO1u+^pE~nGzuJO{J^<ctaZ$N>yi@d!L`5 z!|D)Y04RzQkp*PqM5*cIF$e>W15*D%6I3afh9tO`a?ao*m##HCZ%gmfjcvL`4+M&$RQlgT&6&YkAomYNQqcp|{#YwN z{*98H7ojo20_BE_h-izPSVsA1_65`T1m~HIkPD@-Do-Nx8AzC zt68rT(g4IA3sB;T@9ro@N-BrBYzgIYns#1-T}jE5q}G!iN5R0~Lo&66uORhf-mYBZqjjPL!|Zmh9OprHyzB5$)$% z<;>4wwWDo&9@S+I3;q zvOc8UcOQ%F59^dH+DIr)ywKnKTuBzVLaW70gWX>+dme6g_3)SY*$*oG>DWxner?;8 zS{kiudq?{=Q&cKkZDkP52Kz;iT*a@w<}yHJQu7=9lJTu7)lvd{iCY5)*uMzp)h=X+ zd`^$0t;!#Q(Cdf_F07GsEMJ{ye)aowT+lR4q4HK1Efud&f1mKYlWD|7@%~w^1vpE{ z!JRsF-8+Lt@)VAJN^T_)3$Qh##cGUjwmLJ7O3xGCdAf{FLJgGZz2@f!>B;Wr*Kknr zUaE7crYDJ3CDZuJ0loksx-bI&$LN)o`NCTcyT%TRCP_a~#>Cv(O*oy?Q(98ijid?wv@A{c0bV>cTF z@6!9%8<5pgk1wiX@7|4nrszvmJJL12QfMH0$1(@iB{16F@d~*lEZWbmkdJ=NxAzHg zwYxj1Rl)6Z#)H8lC}NU$Jk=n%b1)T4gX|U3zisvvX|{rQ4WnoM*jE5aIJk8Y^p%7-E7 zL+JheB{1fwiGA((uWC|TtAL)nzkRyCmdV+AzV!Q{amI{eLmPbD_;TUew3^FTSbMis zI17?5QviR!Fh4Qgu^Gij&KhO6H|O|8&HX>ir9{m10=$v=Q~QXQnS&c0vHh2tE?kT*7)DE`9`5YvfDf+e3CSY z5?>Q< zk^b7^(Swm>u@U>V%bcKj*NMI805UwMv9_oIdfXo#H?8|Ei_iZ|fnyFtSF)y&5plQ-G_~{aaJKZzB`~cD? zlVrt7g)q05>ciY_6s6=aD_s7W^fv2u+sNRXfP|A6ku6rqQ*uYK7|4IkL}HfDh=2UW z7j>E*OceLYk(h9MrBUmi#X=roD>#&1m`RCEJ=2n$;aFU`@Gd+UY7r;-v>K;=*07J5 z9&`B~r7x|ri}v(9t|Tw?`}>;l;h|#a0OL-M&iq3unM&ASk?U_ZmEU6MnC5m%A?C>& zErp?+VrmD6>2XdSoD-xDZ=5g3+zfxNn_~!G7Bjb^L2;!&NpDMw=;kq7uZ|tzt+&ba z30bA73FD8e5hp{_Z-`r?r+fwzxfV5?LmhKi^I}Q@qEyAOR|r${GamEIR&44 zE8%!}-eKXd&bK%duxW5XT(%nZTQQcd!SIsUS5B%#T^>R12h#6CmoWc@l1UZRTYosy zATTe{Ghg=kz;Cau+EO(Qo2H1U_D}4m+Pu{oI%fyoielkB=);MQ;?$j9oFwvAX{EcT z=N*-0^zI~_=b6rry1AotiS!GcxL1|RDU8?xxP(*|iKfuspL)14_{G2Ae$>;+`0dxT zU#m>`d*3m1BC}r#DV2hK5@UH*(Gq4|UNlT$R4}n(&4{0Whf*#^GFOmfL%M4p(*wtk zc@A3>gFfINF3tVjzNSapmvLK_-(j2QC8mz%JVg>YS}q9rP3<~QsvYL0L!K;Y2VWx( z@FP0YRH>D*LOZ1@5gZJ%Wf0wHn65Re2xb!Z5%?ezHV?m<`^Qg|3%fj$;+N1Ccgw>Yifd#SyYFOzQ049y_x4nOGV-53^b=d_STa;3srL^5%C+ z-F}}`wRlIr&9V@!ir;_EJER`Ik8B1k99`cW zyWgXkvXV=>1aDd|@uu)qhk1T;&P!VXeNEl)v0NHS-ewV^L}vB#6plsLg`wNkr0jtj z*|R3Qm}`kFm~@kU5Jo7w75}xtXVG>#JG^P^xuxy37wF+axGh{k6I+jnU(D<{Z{3#>teueSC+`{*U%xO_yshQMZ?>{LemhhF znupVu^O>0ZtefZ}MLOkMon6gy++|MGI2am--`*xd4Ue74!pss%wBA$)`*&Wwc2F&f zJ0wfF@wnj?aeGVW1VwWFFv%4rM;fj;^#Pk5&jc{orq5wzztvzAG;w(I1ZpWoPn;r# zjI`p)khb7=9aPGGS}e|>gr&}@!4OU4|M5Js_{+l?UG{N(b2K(F8i~sDQnRaM(WI?P zr|GA)C9XQ|cZ0K>ETVI*IZl{o7btU-amT|5jAldyb|*tbKpNdt#A$({g%$2EsHgJ) z+I+2)c~nwuTjJkMyEMg;Dbaa2$40@**a1bgs%A3{H5c0Sk$#v*GsawvEG0&%Ki4jO zH77g~&=-JnQOqILVab9nft3 ziedDH_%Bbv>B&;VtYG*NSKc-;P<6kS(u)wAXnNoRt1d376#~8Me%In1a@+^SMp5-` z@;YBf+~T@MD$36xz9@6zQtEsL3#)RObzs3l{#qZE9Mdw@0+8;dU3m1q;7~)ibbw;6uB|AI>fWSs@h)8HnYNcV9ydnWE1WNTas=aqTG+{} z_T#)9bgQz<;nAG^PZG{ajmC?Z`u4AX-n}JXCM*nVq$?y2FG}T~O4-L(3BQoeyhd&6 z`6bg;xhd#HBA0|vxLj5|*e9@fV=$>P4%F_&Ha*5jBV%F(QEap-JG!@qCqctakxbWf zmK!oMDpm1=!K!<=1J!!|?Pgi8J>?7Ef-1S1D&&Vlj z+YU%lJC|G>7>lO(E-S zF1dnVjL<$7f7QWjson`r7>9O{w|G|2fT}LivwHf(@U%O524!7&eClXAS@+}qFcjVC z$>7&-S61TI?Dp~BoDu+HdmV>%sv)49@%NRi9U(qhtgn(TXOB{LM?$OaJn^U^0f%OP z-yGahuF}m%yU*M&^)ARitz#u-Pwuo6`n7c1YosqJO`jL4Sld2}`;1mP!U~}4^{ke< zN#vh(g^z@j^fu3Dd(o);)6k&wmsz}jBF_Kah^b4|hRBi-ZP^j2gHoMxhR--Mas6R< z{QDA^M(eMuHfG=V4^N&x_hPmJQs^HQf9~8C+CP(?EKO*7r(Ai5)TJIh7AR)c`)pG~ z@k-b)aRimL(;vkCa;J~;)euUO-A-R!pq?I%ZNoR(=95)%UR6QTIRV#zI z3^a&&Y+qDx)Qh?9-eMkhpa^PGii*B}{O#*wzh^8yQJNzPl)SZ49w8Q7^^PzYSw!BL zGI{2d2lyH=GHdWRBEqQyJ#^qU(KbwqQXn=#{Nt0+3>Z|@n|OkwhcYCE6nb*TY-|)N z!-i3672jEB?ua^fZfLnyZa|!Nw@p(gv*D~sOhJFL5DXADOq$esk?OGn!6D2M_rZk{ zK2A>qkwCFqBFWL$xNgC3Xs-4c`EOoXGy$}ocj^!rM3-Qkuo3ef8)CFjd90vXo>g4}x!K-F+d>eQ2p4KD*v~X~!!I9LwuP)VXOtlq zOxSHB>;JRnv1%q_QVaK6(B3iisoJ=SDJCHM>VF9Bp0{D$-A?N|h5Q(Kaq4M->?HKq6(aw zI%y*6u;24eD%O~rc>JS>t#3+Pf%e4BU#snB#23$w`3BwU!Ozn;T9+F!OQ*J{GoNpU z&VwH_wk>uZGmUK(2Q$$J%fH4Tvq)J3s&ECx3hcJHSY7~ z*lBK|-KsqIZl`QvW;6drF!Tr6G}}}Mjy987zegD`M7PkjV@OzIk;t!<Bo|qLq4&*PeBtvlBk=ik z3np*vj;yYWdxX)|)4gSE5fpnDAeyn@;-Tw;4lMBygQ>sNIZ!&y|OK6R7`y% z6YQFTXF}Q%Q>SG*y`X}D?2q+#n-iE4XgmCEG(li{4SQ1uA9SiOpqpl~@+K|$$2C;8?ML_`=o&HLM$B{Mu1dLgY8OUF# zp=ewE_&i{L5Ow7+^zmXU!p>{+<*e-rEj+(BIgh0*TXNxua3SVx%n{f7xTXw`vtgp@ zx_H6%Qt!==gwzY&utNg0%TY9an2v4tJhKpE$luELdJ^I4ck)6k@E}8}oJd_;enmw+ zRcWKHj~-U+CX9Q!{n`9EFZ7Tn&xFi|!lUesgrqvMfFjs@URuqr2s~RQ@MA_qZ3em) zo|uH&MPF00YX1u69Bp z_r~W`$$JgVslNE}Uks$uhnw({YKf4-A9z2csNajc3_!%`#3zEzw*C0KmTfR|_zQB)feC zbgms#LA91nQ9*qrdMrX&wX#%R7!aF{w?iKPyt1zq587;C;I0Q?rIHz0fRU>4z@{Pw zzXmHWG1B*l-bKGc^hekrM!)9qu?~jF>`gDBL9N;gnihw8JtFGzX}Tc~ZYTEv$Ge-MxcE9;A0ywtzFe=%IWo2b_IMHTI=|5cX>alq7^$vn^Obu8Z>Brfq zaWl#lwCU=FB%`1(snuwrN9h<5%+)qX>ga7UWk=)^(F(K5X}(3-pHtf$|UFPLQH;F|p8sts-o z)#lSfgX851g(b{xCt8>oG)hnnb8}RSpHst@p$g6TSG!-0&CJZk`nrHHlgAWRY?h4( z&}e1zlp>8y!xsLQl4+nQ)aQAnA2cpC!e+zwm{!p#3M-Bbdpqo5d(m)me<#PV-YGce?%>*)nv`G=wxqL4eo@AXj-OZWq^AKca>3^C-ki- z3!|E4J9Mdo>grh58>u>3oK7vIb=^(VyqNv!*`5a*|5s-~Dcfm-?f*sx)Km85G=!Re z<^1oLKdcA2wX$fWXvcfXemJ7-|7@rpl-A0Pzi3ost)$^}lX$?bT~x6MqEdmcRFTRJ z?{Ev?#op?Y^+^NMs34nC z1}ToY+q8BRHN1eG-8MhIBHZgJIz?9Ls^%k3_IrFo|6_Y;!+>Ywa_U zn)z#>L~q>6=8!P{FV)JUABeYIV|xlHV9W2nS_hsOE`7I-RO!(uDJgYdGV%ZaDwF^2 e8n|FyMe2xIEdfKm=kLWa09h#|$vSbPp#KLY^N%V3 diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png index 87eff7d9d570a88aca453c59aa8f9e7c60a0e706..3ef886051eb58a93716313fcc09ea03bad5a6776 100644 GIT binary patch literal 12510 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 T;6|wL7658W+KQF(=0X1p!=&9N literal 7061 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 diff --git a/android/app/src/main/res/values/ic_launcher_background.xml b/android/app/src/main/res/values/ic_launcher_background.xml new file mode 100644 index 0000000..c5d5899 --- /dev/null +++ b/android/app/src/main/res/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #FFFFFF + \ No newline at end of file diff --git a/publish/changeLog.md b/publish/changeLog.md index 67cba7d..a99a3a7 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -15,6 +15,7 @@ - 首次使用的提示窗口可以通过点击背景或者返回键关闭(#577) - 上移 Toast 位置避免遮挡播放模式图标(#603, @sibojia) - 优化简体中文文案编排,大幅修订英语文案编排(#658, #660 等, @3gf8jv4dv) +- 优化应用图标质量,在高版本系统上使用矢量图标 ### 修复 From 634f34b4d38dd7df3adc89bd74cc604ceb2f56cd Mon Sep 17 00:00:00 2001 From: lyswhut Date: Sat, 28 Dec 2024 13:09:07 +0800 Subject: [PATCH 04/26] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7=EF=BC=881.7.0-beta.7=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6eb77db..90a06c2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "lx-music-mobile", - "version": "1.7.0-beta.6", + "version": "1.7.0-beta.7", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "lx-music-mobile", - "version": "1.7.0-beta.6", + "version": "1.7.0-beta.7", "license": "Apache-2.0", "dependencies": { "@craftzdog/react-native-buffer": "^6.0.5", diff --git a/package.json b/package.json index 9280260..30fff20 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lx-music-mobile", - "version": "1.7.0-beta.6", + "version": "1.7.0-beta.7", "versionCode": 69, "private": true, "scripts": { From e9b339977dad6ff15e589736467d369d689947f0 Mon Sep 17 00:00:00 2001 From: 3gf8jv4dv <3gf8jv4dv@gmail.com> Date: Sat, 28 Dec 2024 23:27:54 +0800 Subject: [PATCH 05/26] Fix list search bar english (#671) Related: https://github.com/lyswhut/lx-music-desktop/issues/2050 --- src/screens/Home/Views/Mylist/MusicList/ListSearchBar.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/screens/Home/Views/Mylist/MusicList/ListSearchBar.tsx b/src/screens/Home/Views/Mylist/MusicList/ListSearchBar.tsx index 9371c85..f267221 100644 --- a/src/screens/Home/Views/Mylist/MusicList/ListSearchBar.tsx +++ b/src/screens/Home/Views/Mylist/MusicList/ListSearchBar.tsx @@ -25,7 +25,7 @@ const SearchInput = forwardRef(({ onSearch }, return ( Date: Sat, 28 Dec 2024 23:28:15 +0800 Subject: [PATCH 06/26] i18n cleanup 3 (#672) --- src/lang/en-us.json | 24 ++++++++++++------------ src/lang/zh-cn.json | 4 ++-- src/lang/zh-tw.json | 6 +++--- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/lang/en-us.json b/src/lang/en-us.json index 29d1fa1..9b0403d 100644 --- a/src/lang/en-us.json +++ b/src/lang/en-us.json @@ -30,14 +30,14 @@ "confirm_tip": "Just to double check, do you really want to do this?", "copy_name": "Share Song", "copy_name_tip": "Copied", - "create_new_folder": "Create new directory", + "create_new_folder": "Create new folder", "create_new_folder_error_tip": "The name entered is invalid", - "create_new_folder_tip": "Please enter a new directory name", + "create_new_folder_tip": "Please enter a new folder name", "date_format_hour": "{num} hours ago", "date_format_minute": "{num} minutes ago", "date_format_second": "{num} seconds ago", "deep_link__handle_error_tip": "Call failed: {message}", - "delete": "Delete", + "delete": "Remove", "dialog_cancel": "No", "dialog_confirm": "OK", "disagree": "Deny", @@ -46,7 +46,7 @@ "duplicate_list_tip": "You have collected this list \"{name}\", do you need to update the songs in it?", "edit_metadata": "Edit Metadata", "exit_app_tip": "Are you sure you want to exit the app?", - "ignoring_battery_optimization_check_tip": "LX Music is \"Restricted\" or \"Optimized\" in \"App battery usage\", which may cause LX Music to be prevented by the system when playing music in the background. Do you need to set LX Music to “Unrestricted”?", + "ignoring_battery_optimization_check_tip": "LX Music is \"Restricted\" or \"Optimized\" in \"App battery usage\", which may cause LX Music to be prevented by the system when playing music in the background. Do you need to set LX Music to \"Unrestricted\"?", "ignoring_battery_optimization_check_title": "Background Running Permission Reminder", "input_error": "Don't type indiscriminately 😡", "list_name_default": "Default", @@ -57,7 +57,7 @@ "list_add_title_first_move": "Move", "list_add_title_last": "to...", "list_create": "Create List", - "list_create_input_placeholder": "What name do you think of...", + "list_create_input_placeholder": "What name do you want...", "list_duplicate_tip": "A list with the same name already exists. Do you want to continue creating it?", "list_edit_action_tip_add_failed": "Failed to add", "list_edit_action_tip_add_success": "Successfully added", @@ -93,8 +93,8 @@ "list_select_all": "Select All", "list_select_cancel": "Cancel", "list_select_local_file": "Add Local Songs", - "list_select_local_file_desc": "Choose local song directory", - "list_select_local_file_empty_tip": "No songs found in current directory", + "list_select_local_file_desc": "Choose local song folder", + "list_select_local_file_empty_tip": "No songs found in current folder", "list_select_local_file_result_failed_tip": "Found {total} song(s), successfully added {success} song(s), failed to add {failed} song(s). View the error log for details.", "list_select_local_file_result_tip": "Found {Total} song(s), all added!", @@ -164,7 +164,7 @@ "nav_top": "Charts", "never_show": "Never show again", "no_item": "The list is empty...", - "notifications_check_tip": "You have not allowed LX Music to show notifications, or the “MusicService” notification category in the LX Music notification settings is disabled, which prevents you from using the notification for actions such as pausing, switching songs, and so on. Do you want to enable it?", + "notifications_check_tip": "You have not allowed LX Music to show notifications, or the \"MusicService\" notification category in the LX Music notification settings is disabled, which prevents you from using the notification for actions such as pausing, switching songs, and so on. Do you want to enable it?", "notifications_check_title": "Notification Permission Reminder", "ok": "OK", "open_storage_error_tip": "The entered path is illegal", @@ -174,7 +174,7 @@ "open_storage_select_path_tip": "TIP: For external storage, if you still cannot access it after granting storage permissions, you can click the following button to select the path to allow access.", "open_storage_tip": "Enter storage path", "open_storage_title": "Manually enter the path to specify external memory in the following", - "parent_dir_name": "Parent directory", + "parent_dir_name": "Parent folder", "pause": "Pause", "play": "Play", "play_all": "Play all", @@ -303,7 +303,7 @@ "setting_list_click_action": "Automatically switch to current list when clicking a song in the list (Only valid for \"Playlists\" and \"Charts\" page)", "setting_list_show interval": "Show song length", "setting_list_show_album_name": "Show song album name", - "setting_lyric_desktop_permission_tip": "To use this feature, you need to grant LX Music the permission to display hover windows in the system permission settings, do you go to the relevant page to grant this permission?", + "setting_lyric_desktop_permission_tip": "To use this feature, you need to grant LX Music the permission to display hover windows in the system permission settings.\n\nDo you go to the relevant page to grant this permission?", "setting_lyric_desktop": "Desktop Lyric", "setting_lyric_desktop_enable": "Show lyric window", "setting_lyric_desktop_lock": "Lock lyric window", @@ -340,7 +340,7 @@ "setting_play_audio_offload": "Enable audio offload", "setting_play_audio_offload_tip": "You can enable this option to save power consumption, but on some devices there may be an issue where all songs prompt \"Error loading music\" or \"Unable to play the whole song in full\", this is due to a bug in the current system. \n\nFor those experiencing this issue you can turn off the option and restart the app completely and try again.", "setting_play_auto_clean_played_list": "Automatically empty the played list", - "setting_play_auto_clean_played_list_tip": "In the shuffle mode, when switching between songs by clicking on a song in the \"Same list as playlist\", if \" Automatically empty played list\" is enabled, the songs in the list will participate in the random again.", + "setting_play_auto_clean_played_list_tip": "In the shuffle mode, when switching between songs by clicking on a song in the same list as playlist, if \"Automatically empty played list\" is enabled, the songs in the list will participate in the random again.", "setting_play_cache_size": "Maximum Cache Size (MB)", "setting_play_cache_size_no_cache": "Cache Disabled", "setting_play_cache_size_save_tip": "The cache is set and takes effect after restarting the app.", @@ -502,7 +502,7 @@ "version_tip_downloaded": "The apk has been downloaded.", "version_tip_failed": "Failed to download the apk. You can either retry or go to the project address and download the new update manually.", "version_tip_latest": "The app is up to date, please enjoy it~🥂", - "version_tip_min": "The download has been switched to background. You can navigate to “Settings → Update” to re-open this pop-up window.", + "version_tip_min": "The download has been switched to background. You can navigate to \"Settings → Update\" to re-open this pop-up window.", "version_tip_unknown": "Failed to get the latest version information. Recommended to manually go to the project address to check for a new version.", "version_title_checking": "⏳ Checking for updates ⏳", "version_title_failed": "❌ Failed to download ❌", diff --git a/src/lang/zh-cn.json b/src/lang/zh-cn.json index 4ab3187..225dd6d 100644 --- a/src/lang/zh-cn.json +++ b/src/lang/zh-cn.json @@ -94,7 +94,7 @@ "list_select_cancel": "取消", "list_select_local_file": "添加本地歌曲", "list_select_local_file_desc": "选择本地歌曲文件夹", - "list_select_local_file_empty_tip": "没有在当前目录中发现歌曲", + "list_select_local_file_empty_tip": "没有在当前文件夹中发现歌曲", "list_select_local_file_result_failed_tip": "共发现 {total} 首歌曲,成功添加 {success} 首,失败 {failed} 首,可到错误日志查看添加失败的歌曲", "list_select_local_file_result_tip": "共发现 {total} 首歌曲,已全部添加!", "list_select_local_file_temp_add_tip": "共找到 {total} 个符合要求的文件,已快速添加到当前列表,现在将进入文件标签读取流程,请勿退出应用!", @@ -173,7 +173,7 @@ "open_storage_select_path_tip": "提示:对于外部存储,在授予存储权限后仍然无法访问时,可以点击下面的按钮选择允许访问的路径。", "open_storage_tip": "输入存储路径", "open_storage_title": "请手动在下方输入路径以指定外置存储器", - "parent_dir_name": "上一级目录", + "parent_dir_name": "上一级文件夹", "pause": "暂停", "play": "播放", "play_all": "播放全部", diff --git a/src/lang/zh-tw.json b/src/lang/zh-tw.json index 965aa63..1aad54e 100644 --- a/src/lang/zh-tw.json +++ b/src/lang/zh-tw.json @@ -95,7 +95,7 @@ "list_select_cancel": "取消", "list_select_local_file": "添加本機歌曲", "list_select_local_file_desc": "選取本機歌曲資料夾", - "list_select_local_file_empty_tip": "沒有在目前目錄中發現歌曲", + "list_select_local_file_empty_tip": "沒有在目前資料夾中發現歌曲", "list_select_local_file_result_failed_tip": "共發現 {total} 首歌曲,成功添加 {success} 首,失敗 {failed} 首,可到錯誤日誌查看添加失敗的歌曲", "list_select_local_file_result_tip": "共發現 {total} 首歌曲,已全部添加!", "list_select_local_file_temp_add_tip": "共找到 {total} 個符合要求的檔案,已快速添加到目前清單,現在將進入檔案標籤讀取流程,請勿退出應用!", @@ -173,7 +173,7 @@ "open_storage_select_path_tip": "提示:對於外部儲存,在授予儲存權限後仍然無法訪問時,可以點擊下面的按鈕選取允許訪問的路徑。", "open_storage_tip": "輸入儲存路徑", "open_storage_title": "請手動在下方輸入路徑以指定外部儲存器", - "parent_dir_name": "上一級目錄", + "parent_dir_name": "上一級資料夾", "pause": "暫停", "play": "播放", "play_all": "播放全部", @@ -230,7 +230,7 @@ "setting_backup_all_export_desc": "選取備份儲存位置", "setting_backup_all_import": "匯入", "setting_backup_all_import_desc": "選取備份檔案", - "setting_backup_part": "清單資料(與桌面版清單備檔案通用)", + "setting_backup_part": "清單資料(與桌面版清單備份檔案通用)", "setting_backup_part_export_list": "匯出清單", "setting_backup_part_export_list_desc": "選取歌單備份檔案儲存位置", "setting_backup_part_export_list_tip_failed": "歌單匯出失敗", From 4cbd09445ecdd36ce9b2ca7d0ba5dd8509531527 Mon Sep 17 00:00:00 2001 From: 3gf8jv4dv <3gf8jv4dv@gmail.com> Date: Sat, 28 Dec 2024 23:30:37 +0800 Subject: [PATCH 07/26] Fix button wrap on "Extras" settings (#673) --- src/screens/Home/Views/Setting/settings/Other/MetaCache.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/screens/Home/Views/Setting/settings/Other/MetaCache.tsx b/src/screens/Home/Views/Setting/settings/Other/MetaCache.tsx index 8fd28ba..2fb9faf 100644 --- a/src/screens/Home/Views/Setting/settings/Other/MetaCache.tsx +++ b/src/screens/Home/Views/Setting/settings/Other/MetaCache.tsx @@ -76,6 +76,8 @@ const styles = StyleSheet.create({ marginBottom: 5, }, clearBtn: { + gap: 5, flexDirection: 'row', + flexWrap: 'wrap', }, }) From 64a8e5dcfc2c0bb782c9ae3dff08f35a861bd4ee Mon Sep 17 00:00:00 2001 From: lyswhut Date: Mon, 6 Jan 2025 12:19:29 +0800 Subject: [PATCH 08/26] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=A6=81=E7=94=A8?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E6=97=B6=E9=A2=84=E5=8A=A0=E8=BD=BD=E4=B8=8B?= =?UTF-8?q?=E4=B8=80=E6=9B=B2=E4=BC=9A=E5=AF=BC=E8=87=B4APP=E5=B4=A9?= =?UTF-8?q?=E6=BA=83=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=88#675=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 12 ++++++------ package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 90a06c2..bb8f793 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,7 +29,7 @@ "react-native-pager-view": "6.6.1", "react-native-quick-base64": "^2.1.2", "react-native-quick-md5": "^3.0.6", - "react-native-track-player": "github:lyswhut/react-native-track-player#b9062b07ca4fc5f3316c2ae43f2dafed1baed015", + "react-native-track-player": "github:lyswhut/react-native-track-player#75c097a4a46bea19970540bbc1bd38527ea73cde", "react-native-vector-icons": "^10.2.0" }, "devDependencies": { @@ -10982,8 +10982,8 @@ }, "node_modules/react-native-track-player": { "version": "2.1.2", - "resolved": "git+ssh://git@github.com/lyswhut/react-native-track-player.git#b9062b07ca4fc5f3316c2ae43f2dafed1baed015", - "integrity": "sha512-28GO+cSlktUdhnqzVKGIZT1WOozTDLntwTXtOv/UZ3rQwiXN6oBbMXyUefyoP1R2Wp0P34NHsFXV6Gt3UJzYFg==", + "resolved": "git+ssh://git@github.com/lyswhut/react-native-track-player.git#75c097a4a46bea19970540bbc1bd38527ea73cde", + "integrity": "sha512-jM+dRCa1gslIJzuddwy7nWTvUi8kIxCnd7thx82nV9cDI7FLKXz1WFp9G08phjlCMqHoGvbdAXkqn6Fs02e7jg==", "license": "Apache-2.0", "peerDependencies": { "react": ">=16.8.6", @@ -21731,9 +21731,9 @@ } }, "react-native-track-player": { - "version": "git+ssh://git@github.com/lyswhut/react-native-track-player.git#b9062b07ca4fc5f3316c2ae43f2dafed1baed015", - "integrity": "sha512-28GO+cSlktUdhnqzVKGIZT1WOozTDLntwTXtOv/UZ3rQwiXN6oBbMXyUefyoP1R2Wp0P34NHsFXV6Gt3UJzYFg==", - "from": "react-native-track-player@github:lyswhut/react-native-track-player#b9062b07ca4fc5f3316c2ae43f2dafed1baed015", + "version": "git+ssh://git@github.com/lyswhut/react-native-track-player.git#75c097a4a46bea19970540bbc1bd38527ea73cde", + "integrity": "sha512-jM+dRCa1gslIJzuddwy7nWTvUi8kIxCnd7thx82nV9cDI7FLKXz1WFp9G08phjlCMqHoGvbdAXkqn6Fs02e7jg==", + "from": "react-native-track-player@github:lyswhut/react-native-track-player#75c097a4a46bea19970540bbc1bd38527ea73cde", "requires": {} }, "react-native-vector-icons": { diff --git a/package.json b/package.json index 30fff20..2bb52d9 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "react-native-pager-view": "6.6.1", "react-native-quick-base64": "^2.1.2", "react-native-quick-md5": "^3.0.6", - "react-native-track-player": "github:lyswhut/react-native-track-player#b9062b07ca4fc5f3316c2ae43f2dafed1baed015", + "react-native-track-player": "github:lyswhut/react-native-track-player#75c097a4a46bea19970540bbc1bd38527ea73cde", "react-native-vector-icons": "^10.2.0" }, "devDependencies": { From d1348b2abae5d145f12608195405724d14d1200a Mon Sep 17 00:00:00 2001 From: lyswhut Date: Mon, 6 Jan 2025 12:20:33 +0800 Subject: [PATCH 09/26] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7=EF=BC=881.7.0-beta.8=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index bb8f793..83a5c46 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "lx-music-mobile", - "version": "1.7.0-beta.7", + "version": "1.7.0-beta.8", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "lx-music-mobile", - "version": "1.7.0-beta.7", + "version": "1.7.0-beta.8", "license": "Apache-2.0", "dependencies": { "@craftzdog/react-native-buffer": "^6.0.5", diff --git a/package.json b/package.json index 2bb52d9..360c97a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lx-music-mobile", - "version": "1.7.0-beta.7", + "version": "1.7.0-beta.8", "versionCode": 69, "private": true, "scripts": { From 80e39555ca3b6ed115af4c7810082edabd85318f Mon Sep 17 00:00:00 2001 From: lyswhut Date: Wed, 8 Jan 2025 10:01:34 +0800 Subject: [PATCH 10/26] =?UTF-8?q?=E5=B0=86=20LX=20Music=20=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E4=B8=BA=E2=80=9C=E9=9F=B3=E4=B9=90=E5=BA=94=E7=94=A8?= =?UTF-8?q?=E2=80=9D=E5=88=86=E7=B1=BB=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=9C=A8?= =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E5=A4=96=E4=BD=BF=E7=94=A8LX=20Music?= =?UTF-8?q?=E6=89=93=E5=BC=80=E6=AD=8C=E6=9B=B2=E6=96=87=E4=BB=B6=E3=80=81?= =?UTF-8?q?`js`=E3=80=81`json`=E3=80=81`lxmc`=E6=96=87=E4=BB=B6=E7=9A=84?= =?UTF-8?q?=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/src/main/AndroidManifest.xml | 54 +++++++++++++++- publish/changeLog.md | 2 + src/core/init/deeplink/fileAction.ts | 36 +++++++++++ src/core/init/deeplink/index.ts | 61 ++++++++++++++++--- src/lang/en-us.json | 11 ++-- src/lang/zh-cn.json | 10 +-- src/lang/zh-tw.json | 2 + .../Home/Views/Mylist/MyList/listAction.ts | 4 +- src/store/player/action.ts | 2 +- src/types/player.d.ts | 2 +- src/utils/fs.ts | 2 + src/utils/localMediaMetadata.ts | 8 ++- src/utils/music.ts | 4 +- 13 files changed, 174 insertions(+), 24 deletions(-) create mode 100644 src/core/init/deeplink/fileAction.ts diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index d9ddae6..f203997 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -31,12 +31,64 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/publish/changeLog.md b/publish/changeLog.md index a99a3a7..9d59bf1 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -6,6 +6,8 @@ - 新增蓝牙歌词支持,可以通过「设置 → 播放设置 → 显示蓝牙歌词」启用(#615) - 新增繁体中文语言(#659, @3gf8jv4dv) +- 将 LX Music 设置为“音乐应用”分类,允许将 LX Music 设置为系统默认音乐播放器 +- 添加在程序外使用LX Music打开歌曲文件、`js`、`json`、`lxmc`文件的支持 ### 优化 diff --git a/src/core/init/deeplink/fileAction.ts b/src/core/init/deeplink/fileAction.ts new file mode 100644 index 0000000..c8db09d --- /dev/null +++ b/src/core/init/deeplink/fileAction.ts @@ -0,0 +1,36 @@ +import { readMetadata } from '@/utils/localMediaMetadata' +import { handleImportList } from '@/screens/Home/Views/Setting/settings/Backup/actions' +import { handleImportLocalFile } from '@/screens/Home/Views/Setting/settings/Basic/UserApiEditModal/action' +import { type FileType } from '@/utils/fs' +import { confirmDialog } from '@/utils/tools' +import playerState from '@/store/player/state' +import { addTempPlayList } from '@/core/player/tempPlayList' +import { LIST_IDS } from '@/config/constant' +import { playNext } from '@/core/player/player' +import { buildLocalMusicInfo, buildLocalMusicInfoByFilePath } from '@/screens/Home/Views/Mylist/MyList/listAction' + + +export const handleFileLXMCAction = async(file: FileType) => { + if (!(await confirmDialog({ + message: global.i18n.t('deep_link_file_lxmc_confirm_tip', { name: file.name }), + }))) return + + handleImportList(file.path) +} + +export const handleFileMusicAction = async(file: FileType) => { + const info = await readMetadata(file.path) + const isPlaying = !!playerState.playMusicInfo.musicInfo + const musicInfo = info ? buildLocalMusicInfo(file.path, info) : buildLocalMusicInfoByFilePath(file) + console.log(musicInfo) + addTempPlayList([{ listId: LIST_IDS.PLAY_LATER, musicInfo, isTop: true }]) + if (isPlaying) void playNext() +} + +export const handleFileJSAction = async(file: FileType) => { + if (!(await confirmDialog({ + message: global.i18n.t('deep_link_file_js_confirm_tip', { name: file.name }), + }))) return + + handleImportLocalFile(file.path) +} diff --git a/src/core/init/deeplink/index.ts b/src/core/init/deeplink/index.ts index cb4ebc7..e7ce1e0 100644 --- a/src/core/init/deeplink/index.ts +++ b/src/core/init/deeplink/index.ts @@ -3,6 +3,8 @@ import { errorDialog } from './utils' import { handleMusicAction } from './musicAction' import { handlePlayerAction, type PlayerAction } from './playerAction' import { handleSonglistAction } from './songlistAction' +import { extname, stat } from '@/utils/fs' +import { handleFileMusicAction, handleFileJSAction, handleFileLXMCAction } from './fileAction' const handleLinkAction = async(link: string) => { @@ -38,16 +40,61 @@ const handleLinkAction = async(link: string) => { // default: throw new Error('Unknown type: ' + type) } } -const runLinkAction = async(link: string) => { - if (!link.startsWith('lxmusic://')) return - try { - await handleLinkAction(link) - } catch (err: any) { - errorDialog(err.message) - // focusWindow() + +const handleFileAction = async(link: string) => { + const file = await stat(link) + // console.log(file) + switch (extname(file.name)) { + case 'json': + case 'lxmc': + await handleFileLXMCAction(file) + break + case 'js': + await handleFileJSAction(file) + break + case 'ogg': + case 'flac': + case 'wav': + case 'mp3': + await handleFileMusicAction(file) + break + default: + if (!file.mimeType?.startsWith('audio/')) throw new Error('Unknown file type') + await handleFileMusicAction(file) + break } } +// const handleHttpAction = async(link: string) => { +// } + + +const runLinkAction = async(link: string) => { + if (link.startsWith('lxmusic://')) { + try { + await handleLinkAction(link) + } catch (err: any) { + errorDialog(err.message) + // focusWindow() + } + } else if (link.startsWith('file://') || link.startsWith('content://')) { + try { + await handleFileAction(link) + } catch (err: any) { + errorDialog(err.message) + // focusWindow() + } + } + // else if (/^https?:\/\//.test(link)) { + // try { + // await handleHttpAction(link) + // } catch (err: any) { + // errorDialog(err.message) + // // focusWindow() + // } + // } +} + export const initDeeplink = async() => { Linking.addEventListener('url', ({ url }) => { void runLinkAction(url) diff --git a/src/lang/en-us.json b/src/lang/en-us.json index 9b0403d..c9386b6 100644 --- a/src/lang/en-us.json +++ b/src/lang/en-us.json @@ -37,6 +37,8 @@ "date_format_minute": "{num} minutes ago", "date_format_second": "{num} seconds ago", "deep_link__handle_error_tip": "Call failed: {message}", + "deep_link_file_js_confirm_tip": "Are you sure you want to import this ({name}) custom source file?", + "deep_link_file_lxmc_confirm_tip": "Are you sure you want to import this ({name}) list file?", "delete": "Remove", "dialog_cancel": "No", "dialog_confirm": "OK", @@ -49,8 +51,6 @@ "ignoring_battery_optimization_check_tip": "LX Music is \"Restricted\" or \"Optimized\" in \"App battery usage\", which may cause LX Music to be prevented by the system when playing music in the background. Do you need to set LX Music to \"Unrestricted\"?", "ignoring_battery_optimization_check_title": "Background Running Permission Reminder", "input_error": "Don't type indiscriminately 😡", - "list_name_default": "Default", - "list_name_love": "Loved", "list_add_btn_title": "Add the song(s) to \"{name}\"", "list_add_tip_exists": "This song already exists in the list, don't click me again~😡", "list_add_title_first_add": "Add", @@ -84,6 +84,9 @@ "list_multi_add_title_first_add": "Add the selected", "list_multi_add_title_first_move": "Move the selected", "list_multi_add_title_last": "songs to ...", + "list_name_default": "Default", + "list_name_love": "Loved", + "list_name_temp": "Temp List", "list_remove": "Remove", "list_remove_music_multi_tip": "Do you really want to remove the selected {num} songs?", "list_remove_tip": "Do you really want to remove \"{name}\"?", @@ -96,7 +99,6 @@ "list_select_local_file_desc": "Choose local song folder", "list_select_local_file_empty_tip": "No songs found in current folder", "list_select_local_file_result_failed_tip": "Found {total} song(s), successfully added {success} song(s), failed to add {failed} song(s). View the error log for details.", - "list_select_local_file_result_tip": "Found {Total} song(s), all added!", "list_select_local_file_temp_add_tip": "Found {total} matching files, quickly added to the current list, will now start the file metadata reading process. Please do not exit the app!", "list_select_range": "Range", @@ -115,7 +117,6 @@ "list_sort_modal_by_up": "Ascending", "list_sync": "Update", "list_sync_confirm_tip": "This will replace the songs in \"{name}\" with the songs in the online list, are you sure you want to update?", - "list_name_temp": "Temp List", "list_update_error": "Failed to update \"{name}\"", "list_update_success": "Successfully updated \"{name}\"", "list_updating": "Updating", @@ -303,11 +304,11 @@ "setting_list_click_action": "Automatically switch to current list when clicking a song in the list (Only valid for \"Playlists\" and \"Charts\" page)", "setting_list_show interval": "Show song length", "setting_list_show_album_name": "Show song album name", - "setting_lyric_desktop_permission_tip": "To use this feature, you need to grant LX Music the permission to display hover windows in the system permission settings.\n\nDo you go to the relevant page to grant this permission?", "setting_lyric_desktop": "Desktop Lyric", "setting_lyric_desktop_enable": "Show lyric window", "setting_lyric_desktop_lock": "Lock lyric window", "setting_lyric_desktop_maxlineNum": "Maximum Number of Lines", + "setting_lyric_desktop_permission_tip": "To use this feature, you need to grant LX Music the permission to display hover windows in the system permission settings.\n\nDo you go to the relevant page to grant this permission?", "setting_lyric_desktop_single_line": "Do not wrap lyrics", "setting_lyric_desktop_text_opacity": "Lyric Font Transparency", "setting_lyric_desktop_text_size": "Lyric Font Size", diff --git a/src/lang/zh-cn.json b/src/lang/zh-cn.json index 225dd6d..53e1354 100644 --- a/src/lang/zh-cn.json +++ b/src/lang/zh-cn.json @@ -37,6 +37,8 @@ "date_format_minute": "{num} 分钟前", "date_format_second": "{num} 秒前", "deep_link__handle_error_tip": "调用失败:{message}", + "deep_link_file_js_confirm_tip": "确认要导入这个({name})自定义源文件吗?", + "deep_link_file_lxmc_confirm_tip": "确认要导入这个({name})列表文件吗?", "delete": "移除", "dialog_cancel": "我不", "dialog_confirm": "好的", @@ -49,8 +51,6 @@ "ignoring_battery_optimization_check_tip": "LX Music 没有在「忽略电池优化」的白名单中,这可能会导致在后台播放音乐时被系统暂停。是否将 LX Music 加入该白名单中?", "ignoring_battery_optimization_check_title": "后台运行权限设置提醒", "input_error": "不要乱输好吧😡", - "list_name_default": "试听列表", - "list_name_love": "我的收藏", "list_add_btn_title": "把该歌曲添加到「{name}」", "list_add_tip_exists": "列表已经存在这首歌啦,不要再点我啦~😡", "list_add_title_first_add": "添加", @@ -84,6 +84,9 @@ "list_multi_add_title_first_add": "添加已选的", "list_multi_add_title_first_move": "移动已选的", "list_multi_add_title_last": "首歌曲到...", + "list_name_default": "试听列表", + "list_name_love": "我的收藏", + "list_name_temp": "临时列表", "list_remove": "移除", "list_remove_music_multi_tip": "你真的想要移除所选的 {num} 首歌曲吗?", "list_remove_tip": "你真的想要移除「{name}」吗?", @@ -114,7 +117,6 @@ "list_sort_modal_by_up": "升序", "list_sync": "更新", "list_sync_confirm_tip": "这将会把「{name}」内的歌曲替换成在线列表的歌曲,你确认要更新吗?", - "list_name_temp": "临时列表", "list_update_error": "「{name}」更新失败", "list_update_success": "「{name}」更新成功", "list_updating": "更新中", @@ -302,11 +304,11 @@ "setting_list_click_action": "点击列表里的歌曲时自动切换到当前列表播放(仅对歌单、排行榜有效)", "setting_list_show interval": "显示歌曲时长", "setting_list_show_album_name": "显示歌曲专辑名", - "setting_lyric_desktop_permission_tip": "桌面歌词功能需要在系统权限设置中授予 LX Music 显示悬浮窗口的权限才能使用,是否去相关界面授予该权限?", "setting_lyric_desktop": "桌面歌词", "setting_lyric_desktop_enable": "显示歌词", "setting_lyric_desktop_lock": "锁定歌词", "setting_lyric_desktop_maxlineNum": "最大行数", + "setting_lyric_desktop_permission_tip": "桌面歌词功能需要在系统权限设置中授予 LX Music 显示悬浮窗口的权限才能使用,是否去相关界面授予该权限?", "setting_lyric_desktop_single_line": "使用单行歌词", "setting_lyric_desktop_text_opacity": "歌词字体透明度", "setting_lyric_desktop_text_size": "歌词字体大小", diff --git a/src/lang/zh-tw.json b/src/lang/zh-tw.json index 1aad54e..e986b24 100644 --- a/src/lang/zh-tw.json +++ b/src/lang/zh-tw.json @@ -37,6 +37,8 @@ "date_format_minute": "{num} 分鐘前", "date_format_second": "{num} 秒前", "deep_link__handle_error_tip": "呼叫失敗:{message}", + "deep_link_file_js_confirm_tip": "確認要匯入這個({name})自訂原始檔嗎?", + "deep_link_file_lxmc_confirm_tip": "確認要匯入這個({name})清單檔案嗎?", "delete": "移除", "dialog_cancel": "我不", "dialog_confirm": "好的", diff --git a/src/screens/Home/Views/Mylist/MyList/listAction.ts b/src/screens/Home/Views/Mylist/MyList/listAction.ts index d2297f3..e66d0c8 100644 --- a/src/screens/Home/Views/Mylist/MyList/listAction.ts +++ b/src/screens/Home/Views/Mylist/MyList/listAction.ts @@ -92,7 +92,7 @@ export const handleSync = (listInfo: LX.List.UserListInfo) => { }) } -const buildLocalMusicInfoByFilePath = (file: FileType): LX.Music.MusicInfoLocal => { +export const buildLocalMusicInfoByFilePath = (file: FileType): LX.Music.MusicInfoLocal => { const index = file.name.lastIndexOf('.') return { id: file.path, @@ -109,7 +109,7 @@ const buildLocalMusicInfoByFilePath = (file: FileType): LX.Music.MusicInfoLocal }, } } -const buildLocalMusicInfo = (filePath: string, metadata: MusicMetadataFull): LX.Music.MusicInfoLocal => { +export const buildLocalMusicInfo = (filePath: string, metadata: MusicMetadataFull): LX.Music.MusicInfoLocal => { return { id: filePath, name: metadata.name, diff --git a/src/store/player/action.ts b/src/store/player/action.ts index 6788c9d..5054101 100644 --- a/src/store/player/action.ts +++ b/src/store/player/action.ts @@ -81,7 +81,7 @@ export default { global.state_event.playPlayedListChanged({ ...state.playedList }) }, addTempPlayList(list: LX.Player.TempPlayListItem[]) { - const topList: Array<{ listId: string, musicInfo: LX.Music.MusicInfo | LX.Download.ListItem }> = [] + const topList: Array<{ listId: string | null, musicInfo: LX.Music.MusicInfo | LX.Download.ListItem }> = [] const bottomList = list.filter(({ isTop, ...musicInfo }) => { if (isTop) { topList.push(musicInfo) diff --git a/src/types/player.d.ts b/src/types/player.d.ts index 74f2245..d09a4a6 100644 --- a/src/types/player.d.ts +++ b/src/types/player.d.ts @@ -57,7 +57,7 @@ declare global { /** * 播放列表id */ - listId: string + listId: string | null /** * 歌曲信息 */ diff --git a/src/utils/fs.ts b/src/utils/fs.ts index 161a1ee..c776712 100644 --- a/src/utils/fs.ts +++ b/src/utils/fs.ts @@ -15,6 +15,8 @@ export type { // export const externalDirectoryPath = RNFS.ExternalDirectoryPath +export const extname = (name: string) => name.lastIndexOf('.') > 0 ? name.substring(name.lastIndexOf('.') + 1) : '' + export const temporaryDirectoryPath = Dirs.CacheDir export const externalStorageDirectoryPath = Dirs.SDCardDir export const privateStorageDirectoryPath = Dirs.DocumentDir diff --git a/src/utils/localMediaMetadata.ts b/src/utils/localMediaMetadata.ts index 98e5f69..5f67f31 100644 --- a/src/utils/localMediaMetadata.ts +++ b/src/utils/localMediaMetadata.ts @@ -1,4 +1,4 @@ -import { temporaryDirectoryPath, readDir, unlink } from '@/utils/fs' +import { temporaryDirectoryPath, readDir, unlink, extname } from '@/utils/fs' import { readPic as _readPic } from 'react-native-local-media-metadata' export { type MusicMetadata, @@ -15,7 +15,11 @@ const picCachePath = temporaryDirectoryPath + '/local-media-metadata' export const scanAudioFiles = async(dirPath: string) => { const files = await readDir(dirPath) - return files.filter(file => file.mimeType?.startsWith('audio/')).map(file => file) + return files.filter(file => { + if (file.mimeType?.startsWith('audio/')) return true + if (extname(file?.name ?? '') === 'ogg') return true + return false + }).map(file => file) } const clearPicCache = async() => { diff --git a/src/utils/music.ts b/src/utils/music.ts index 9f42f28..a8d0adb 100644 --- a/src/utils/music.ts +++ b/src/utils/music.ts @@ -2,5 +2,7 @@ import { existsFile } from './fs' export const getLocalFilePath = async(musicInfo: LX.Music.MusicInfoLocal): Promise => { - return (await existsFile(musicInfo.meta.filePath)) ? musicInfo.meta.filePath : '' + if (await existsFile(musicInfo.meta.filePath)) return musicInfo.meta.filePath + // 直接从应用外 intent 调用打开的文件,ogg等类型无法判断文件是否存在,但这类文件路径为纯数字 + return /\/\d+$/.test(musicInfo.meta.filePath) ? musicInfo.meta.filePath : '' } From d9427769a85b57503c439bdf74123adf63dfc236 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Wed, 8 Jan 2025 12:01:42 +0800 Subject: [PATCH 11/26] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7=EF=BC=881.7.0-beta.9=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 83a5c46..d402858 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "lx-music-mobile", - "version": "1.7.0-beta.8", + "version": "1.7.0-beta.9", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "lx-music-mobile", - "version": "1.7.0-beta.8", + "version": "1.7.0-beta.9", "license": "Apache-2.0", "dependencies": { "@craftzdog/react-native-buffer": "^6.0.5", diff --git a/package.json b/package.json index 360c97a..91689d2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lx-music-mobile", - "version": "1.7.0-beta.8", + "version": "1.7.0-beta.9", "versionCode": 69, "private": true, "scripts": { From 3e881323f79ede79f8e4827e952fd454ecf1834e Mon Sep 17 00:00:00 2001 From: lyswhut Date: Sat, 11 Jan 2025 15:10:07 +0800 Subject: [PATCH 12/26] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=9F=90=E4=BA=9B?= =?UTF-8?q?=E6=83=85=E5=86=B5=E4=B8=8B=E8=BF=9B=E6=92=AD=E6=94=BE=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E9=A1=B5=E6=97=B6=E7=95=8C=E9=9D=A2=E4=BC=9A=E6=97=A0?= =?UTF-8?q?=E5=93=8D=E5=BA=94=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/build.gradle | 3 +++ package-lock.json | 16 ---------------- package.json | 1 - publish/changeLog.md | 1 + src/components/common/Image.tsx | 25 +++++++++++++------------ 5 files changed, 17 insertions(+), 29 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 3270ddc..630be50 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -10,6 +10,9 @@ buildscript { ndkVersion = "26.1.10909125" kotlinVersion = "1.9.24" // Or any version above 1.3.x RNNKotlinVersion = kotlinVersion + + // https://github.com/DylanVann/react-native-fast-image/blob/9ab80fcd570b7f56da66ab20e52c9a35934067c9/docs/app-glide-module.md + excludeAppGlideModule = true } repositories { google() diff --git a/package-lock.json b/package-lock.json index d402858..bac84c0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,6 @@ "react-native": "0.73.11", "react-native-background-timer": "github:lyswhut/react-native-background-timer#55ecaa80880e9cec1fff81f3ce10e6250ab3c40c", "react-native-exception-handler": "^2.10.10", - "react-native-fast-image": "^8.6.3", "react-native-file-system": "github:lyswhut/react-native-file-system#2a37b90dbb8d37c5180777d0bf0d4f160812b0c1", "react-native-fs": "^2.20.0", "react-native-local-media-metadata": "github:lyswhut/react-native-local-media-metadata#5eac1b6c70e934a1ad7b800b3ab7122f1075f704", @@ -10741,15 +10740,6 @@ "react-native": "*" } }, - "node_modules/react-native-fast-image": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/react-native-fast-image/-/react-native-fast-image-8.6.3.tgz", - "integrity": "sha512-Sdw4ESidXCXOmQ9EcYguNY2swyoWmx53kym2zRsvi+VeFCHEdkO+WG1DK+6W81juot40bbfLNhkc63QnWtesNg==", - "peerDependencies": { - "react": "^17 || ^18", - "react-native": ">=0.60.0" - } - }, "node_modules/react-native-file-system": { "version": "0.1.0", "resolved": "git+ssh://git@github.com/lyswhut/react-native-file-system.git#2a37b90dbb8d37c5180777d0bf0d4f160812b0c1", @@ -21559,12 +21549,6 @@ "integrity": "sha512-otAXGoZDl1689OoUJWN/rXxVbdoZ3xcmyF1uq/CsizdLwwyZqVGd6d+p/vbYvnF996FfEyAEBnHrdFxulTn51w==", "requires": {} }, - "react-native-fast-image": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/react-native-fast-image/-/react-native-fast-image-8.6.3.tgz", - "integrity": "sha512-Sdw4ESidXCXOmQ9EcYguNY2swyoWmx53kym2zRsvi+VeFCHEdkO+WG1DK+6W81juot40bbfLNhkc63QnWtesNg==", - "requires": {} - }, "react-native-file-system": { "version": "git+ssh://git@github.com/lyswhut/react-native-file-system.git#2a37b90dbb8d37c5180777d0bf0d4f160812b0c1", "integrity": "sha512-z4YA6mznWWgPA/Sc2LgAx8zl0OfNfaNJR7tWkZiKqlUgsN0tcecF9x56C61dxoLiUTLdud4/VttNkdP7JcbbQw==", diff --git a/package.json b/package.json index 91689d2..e7ff7e7 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,6 @@ "react-native": "0.73.11", "react-native-background-timer": "github:lyswhut/react-native-background-timer#55ecaa80880e9cec1fff81f3ce10e6250ab3c40c", "react-native-exception-handler": "^2.10.10", - "react-native-fast-image": "^8.6.3", "react-native-file-system": "github:lyswhut/react-native-file-system#2a37b90dbb8d37c5180777d0bf0d4f160812b0c1", "react-native-fs": "^2.20.0", "react-native-local-media-metadata": "github:lyswhut/react-native-local-media-metadata#5eac1b6c70e934a1ad7b800b3ab7122f1075f704", diff --git a/publish/changeLog.md b/publish/changeLog.md index 9d59bf1..f708d1a 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -24,6 +24,7 @@ - 修复导出文件到范围存储类型的目录时,扩展名丢失的问题 - 修复切换列表播放歌曲时可能会出现播放的歌曲不对应的问题 - 修复内置列表名称硬编码和语言切换显示的问题(#662) +- 修复某些情况下进播放详情页时,详情页会不显示或APP界面无响应的问题 ### 变更 diff --git a/src/components/common/Image.tsx b/src/components/common/Image.tsx index f76f106..9d94af2 100644 --- a/src/components/common/Image.tsx +++ b/src/components/common/Image.tsx @@ -1,18 +1,18 @@ import { useTheme } from '@/store/theme/hook' import { BorderRadius } from '@/theme' import { createStyle } from '@/utils/tools' -import { memo, useCallback, useEffect, useMemo, useState } from 'react' -import { View, type ViewProps, Image as _Image, StyleSheet } from 'react-native' -import FastImage, { type FastImageProps } from 'react-native-fast-image' +import { type ComponentProps, memo, useCallback, useEffect, useMemo, useState } from 'react' +import { View, type ViewProps, StyleSheet, Image as FastImage } from 'react-native' +// import FastImage, { type FastImageProps } from 'react-native-fast-image' import Text from './Text' import { useLayout } from '@/utils/hooks' -export type { OnLoadEvent } from 'react-native-fast-image' +// export type { OnLoadEvent } from 'react-native-fast-image' export interface ImageProps extends ViewProps { - style: FastImageProps['style'] + style: ComponentProps['style'] url?: string | number | null cache?: boolean - resizeMode?: FastImageProps['resizeMode'] + resizeMode?: ComponentProps['resizeMode'] onError?: (url: string | number) => void } @@ -34,7 +34,7 @@ const EmptyPic = memo(({ style, nativeID }: { style: ImageProps['style'], native ) }) -const Image = memo(({ url, cache, resizeMode = FastImage.resizeMode.cover, style, onError, nativeID }: ImageProps) => { +const Image = memo(({ url, cache, resizeMode = 'cover', style, onError, nativeID }: ImageProps) => { const [isError, setError] = useState(false) const handleError = useCallback(() => { setError(true) @@ -44,7 +44,7 @@ const Image = memo(({ url, cache, resizeMode = FastImage.resizeMode.cover, style setError(false) }, [url]) let uri = typeof url == 'number' - ? _Image.resolveAssetSource(url).uri + ? FastImage.resolveAssetSource(url).uri : url?.startsWith('/') ? 'file://' + url : url @@ -57,8 +57,9 @@ const Image = memo(({ url, cache, resizeMode = FastImage.resizeMode.cover, style source={{ uri: uri!, headers: defaultHeaders, - priority: FastImage.priority.normal, - cache: cache === false ? 'web' : 'immutable', + cache: cache === false ? 'reload' : 'force-cache', + // priority: FastImage.priority.normal, + // cache: cache === false ? 'web' : 'immutable', }} onError={handleError} resizeMode={resizeMode} @@ -73,10 +74,10 @@ const Image = memo(({ url, cache, resizeMode = FastImage.resizeMode.cover, style }) export const getSize = (uri: string, success: (width: number, height: number) => void, failure?: (error: any) => void) => { - _Image.getSize(uri, success, failure) + FastImage.getSize(uri, success, failure) } export const clearMemoryCache = async() => { - return Promise.all([FastImage.clearMemoryCache(), FastImage.clearDiskCache()]) + // return Promise.all([FastImage.clearMemoryCache(), FastImage.clearDiskCache()]) } export default Image From 53d1e3604078103e782336f86bd5ac0ec20a2f33 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Sat, 11 Jan 2025 15:12:21 +0800 Subject: [PATCH 13/26] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7=EF=BC=881.7.0-beta.10=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index bac84c0..62ad5b5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "lx-music-mobile", - "version": "1.7.0-beta.9", + "version": "1.7.0-beta.10", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "lx-music-mobile", - "version": "1.7.0-beta.9", + "version": "1.7.0-beta.10", "license": "Apache-2.0", "dependencies": { "@craftzdog/react-native-buffer": "^6.0.5", diff --git a/package.json b/package.json index e7ff7e7..f2c360e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lx-music-mobile", - "version": "1.7.0-beta.9", + "version": "1.7.0-beta.10", "versionCode": 69, "private": true, "scripts": { From 8e622ee02f4416e08f6feb6db20ee59087995178 Mon Sep 17 00:00:00 2001 From: 3gf8jv4dv <3gf8jv4dv@gmail.com> Date: Tue, 14 Jan 2025 22:53:25 +0800 Subject: [PATCH 14/26] i18n cleanup 4 (#680) --- README.md | 23 +++++++++++-------- src/lang/en-us.json | 4 ++-- src/lang/zh-cn.json | 10 ++++---- src/lang/zh-tw.json | 8 +++---- .../Home/Views/Setting/settings/About.tsx | 8 +++---- 5 files changed, 29 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 51c378b..8e0f399 100644 --- a/README.md +++ b/README.md @@ -16,45 +16,50 @@ ## 说明 -支持的平台: +所用技术栈: + +- React Native +- Redux + +已支持的平台: - Android -*注:由于没有相关开发环境及证书,所以 **没有计划支持 iOS**。*
+*注:由于没有相关开发环境及证书,**目前没有计划支持 iOS 和 HarmonyOS NEXT**。*
*桌面版项目地址:* -软件变化请查看 [更新日志](https://github.com/lyswhut/lx-music-mobile/blob/master/CHANGELOG.md)。 +软件变化请查看[更新日志](https://github.com/lyswhut/lx-music-mobile/blob/master/CHANGELOG.md)。 软件下载请查看 [GitHub Releases](https://github.com/lyswhut/lx-music-mobile/releases)。 -使用常见问题请参阅 [常见问题](https://lyswhut.github.io/lx-music-doc/mobile/faq)。 +使用常见问题请参阅[移动版常见问题](https://lyswhut.github.io/lx-music-doc/mobile/faq)。 目前本项目的原始发布地址只有 [**GitHub Releases**](https://github.com/lyswhut/lx-music-mobile/releases),其他渠道均为第三方转载发布,与本项目无关! -为了提高使用门槛,本软件内的默认设置、UI 操作不以新手友好为目标,所以使用前建议先根据你的喜好浏览调整一遍软件设置,阅读一遍 [音乐播放列表机制](https://lyswhut.github.io/lx-music-doc/mobile/faq/playlist)。 +为了提高使用门槛,本软件内的默认设置、UI 操作不以新手友好为目标,所以使用前建议先根据你的喜好浏览调整一遍软件设置,阅读一遍[音乐播放列表机制](https://lyswhut.github.io/lx-music-doc/mobile/faq/playlist)。 ### 数据同步服务 -从 v1.0.0 起,我们发布了一个独立版的 [数据同步服务](https://github.com/lyswhut/lx-music-sync-server#readme),如果你有服务器,可以将其部署到服务器上作为私人多端同步服务使用,详情看该项目说明。 +从 v1.0.0 起,我们发布了一个独立的[数据同步服务](https://github.com/lyswhut/lx-music-sync-server#readme)。如果你有服务器,可以将其部署到服务器上作为私人多端同步服务使用,详情看该项目说明。 ## 贡献代码 本项目欢迎 PR,但为了 PR 能顺利合并,需要注意以下几点: -- 对于添加新功能的 PR,建议在提交 PR 前先创建 issue 进行说明,以确认该功能是否确实需要; +- 对于添加新功能的 PR,建议在提交 PR 前先创建 Issue 进行说明,以确认该功能是否确实需要; - 对于修复 bug 的 PR,请提供修复前后的说明及重现方式; - 对于其他类型的 PR,则适当附上说明。 贡献代码步骤: -1. 参照 [源码使用方法](https://lyswhut.github.io/lx-music-doc/mobile/use-source-code) 设置开发环境; +1. 参照[源码使用方法](https://lyswhut.github.io/lx-music-doc/mobile/use-source-code)设置开发环境; 2. 克隆本仓库代码并切换至 `dev` 分支进行开发; 3. 提交 PR 至 `dev` 分支。 +

lx-music mobile UI

--> ## 项目协议 diff --git a/src/lang/en-us.json b/src/lang/en-us.json index c9386b6..79f298c 100644 --- a/src/lang/en-us.json +++ b/src/lang/en-us.json @@ -37,8 +37,8 @@ "date_format_minute": "{num} minutes ago", "date_format_second": "{num} seconds ago", "deep_link__handle_error_tip": "Call failed: {message}", - "deep_link_file_js_confirm_tip": "Are you sure you want to import this ({name}) custom source file?", - "deep_link_file_lxmc_confirm_tip": "Are you sure you want to import this ({name}) list file?", + "deep_link_file_js_confirm_tip": "Are you sure you want to import the \"{name}\" music API?", + "deep_link_file_lxmc_confirm_tip": "Are you sure you want to import the \"{name}\" list file?", "delete": "Remove", "dialog_cancel": "No", "dialog_confirm": "OK", diff --git a/src/lang/zh-cn.json b/src/lang/zh-cn.json index 53e1354..8ef704d 100644 --- a/src/lang/zh-cn.json +++ b/src/lang/zh-cn.json @@ -37,8 +37,8 @@ "date_format_minute": "{num} 分钟前", "date_format_second": "{num} 秒前", "deep_link__handle_error_tip": "调用失败:{message}", - "deep_link_file_js_confirm_tip": "确认要导入这个({name})自定义源文件吗?", - "deep_link_file_lxmc_confirm_tip": "确认要导入这个({name})列表文件吗?", + "deep_link_file_js_confirm_tip": "确认要导入自定义源文件「{name}」吗?", + "deep_link_file_lxmc_confirm_tip": "确认要导入列表文件「{name}」吗?", "delete": "移除", "dialog_cancel": "我不", "dialog_confirm": "好的", @@ -72,7 +72,7 @@ "list_import": "导入", "list_import_part_button_cancel": "不要啊", "list_import_part_button_confirm": "覆盖掉", - "list_import_part_confirm": "导入的列表({importName})与本地列表({localName})的 ID 相同,是否覆盖本地列表?", + "list_import_part_confirm": "导入的列表「{importName}」与本地列表「{localName}」的 ID 相同,是否覆盖本地列表?", "list_import_part_desc": "选择列表文件", "list_import_tip__alldata": "这是一个「所有数据」备份文件,你需要去这里导入:\n\n设置 → 备份与恢复 → 列表数据 → 导入列表", "list_import_tip__failed": "导入失败", @@ -122,7 +122,7 @@ "list_updating": "更新中", "lists__duplicate": "重复歌曲", "lists_dislike_music_add_tip": "已添加", - "lists_dislike_music_singer_tip": "你真的不喜欢 {singer} 的「{name}」吗?", + "lists_dislike_music_singer_tip": "你真的不喜欢「{singer}」的「{name}」吗?", "lists_dislike_music_tip": "你真的不喜欢「{name}」吗?", "load_failed": "啊~加载失败了😥", "loading": "加载中...", @@ -301,7 +301,7 @@ "setting_list_add_music_location_type": "添加歌曲到列表时的位置", "setting_list_add_music_location_type_bottom": "底部", "setting_list_add_music_location_type_top": "顶部", - "setting_list_click_action": "点击列表里的歌曲时自动切换到当前列表播放(仅对歌单、排行榜有效)", + "setting_list_click_action": "点击列表里的歌曲时自动切换到当前列表播放(仅对「歌单」和「排行榜」有效)", "setting_list_show interval": "显示歌曲时长", "setting_list_show_album_name": "显示歌曲专辑名", "setting_lyric_desktop": "桌面歌词", diff --git a/src/lang/zh-tw.json b/src/lang/zh-tw.json index e986b24..7483cee 100644 --- a/src/lang/zh-tw.json +++ b/src/lang/zh-tw.json @@ -37,8 +37,8 @@ "date_format_minute": "{num} 分鐘前", "date_format_second": "{num} 秒前", "deep_link__handle_error_tip": "呼叫失敗:{message}", - "deep_link_file_js_confirm_tip": "確認要匯入這個({name})自訂原始檔嗎?", - "deep_link_file_lxmc_confirm_tip": "確認要匯入這個({name})清單檔案嗎?", + "deep_link_file_js_confirm_tip": "確認要匯入自訂來源 API「{name}」嗎?", + "deep_link_file_lxmc_confirm_tip": "確認要匯入清單檔案「{name}」嗎?", "delete": "移除", "dialog_cancel": "我不", "dialog_confirm": "好的", @@ -72,7 +72,7 @@ "list_import": "匯入", "list_import_part_button_cancel": "不要啊", "list_import_part_button_confirm": "覆蓋掉", - "list_import_part_confirm": "匯入的清單({importName})與本機清單({localName})的 ID 相同,是否覆蓋本機清單?", + "list_import_part_confirm": "匯入的清單「{importName}」與本機清單「{localName}」的 ID 相同,是否覆蓋本機清單?", "list_import_part_desc": "選取清單檔案", "list_import_tip__alldata": "這是一個「所有資料」備份檔案,你需要去這裡匯入:\n\n設定 → 備份與復原 → 清單資料 → 匯入清單", "list_import_tip__failed": "匯入失敗", @@ -122,7 +122,7 @@ "list_updating": "更新中", "lists__duplicate": "重複歌曲", "lists_dislike_music_add_tip": "已添加", - "lists_dislike_music_singer_tip": "你真的不喜歡 {singer} 的「{name}」嗎?", + "lists_dislike_music_singer_tip": "你真的不喜歡「{singer}」的「{name}」嗎?", "lists_dislike_music_tip": "你真的不喜歡「{name}」嗎?", "load_failed": "啊~載入失敗了😥", "loading": "載入中...", diff --git a/src/screens/Home/Views/Setting/settings/About.tsx b/src/screens/Home/Views/Setting/settings/About.tsx index 2ed14d8..9a34f21 100644 --- a/src/screens/Home/Views/Setting/settings/About.tsx +++ b/src/screens/Home/Views/Setting/settings/About.tsx @@ -23,7 +23,7 @@ export default memo(() => { void openUrl('https://github.com/lyswhut/lx-music-mobile#readme') } const openIssuePage = () => { - void openUrl('https://github.com/lyswhut/lx-music-mobile/issues') + void openUrl('https://github.com/lyswhut/lx-music-mobile/issues?q=is%3Aissue+') } const openGHReleasePage = () => { void openUrl('https://github.com/lyswhut/lx-music-mobile/releases') @@ -82,9 +82,9 @@ export default memo(() => { 本软件没有客服,但我们整理了一些常见的使用问题。仔细、仔细、仔细地阅读常见问题后, - 仍有问题可到 GitHub 提交 + 仍有问题可到 GitHub - Issue + 提交 Issue @@ -95,7 +95,7 @@ export default memo(() => { 目前本项目的原始发布地址只有 GitHub,其他渠道均为第三方转载发布,可信度请自行鉴别。 - 本项目「没有」微信公众号之类的所谓「官方账号」,也未在小米、华为、vivo 等应用商店发布同名应用,谨防被骗! + 本项目没有微信公众号之类的所谓「官方账号」,也未在小米、华为、vivo 等应用商店发布同名应用,谨防被骗! 若你使用过程中遇到广告或者引流(如需要加群、关注公众号之类才能使用或者升级)的信息,则表明你当前运行的软件是「第三方修改版」。 From 5a60eb4423aae26b0246b6a94aa983ac9d25b0fd Mon Sep 17 00:00:00 2001 From: 3gf8jv4dv <3gf8jv4dv@gmail.com> Date: Tue, 14 Jan 2025 22:53:47 +0800 Subject: [PATCH 15/26] Update publish/changeLog.md (#681) --- publish/changeLog.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/publish/changeLog.md b/publish/changeLog.md index f708d1a..54e9236 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -6,8 +6,8 @@ - 新增蓝牙歌词支持,可以通过「设置 → 播放设置 → 显示蓝牙歌词」启用(#615) - 新增繁体中文语言(#659, @3gf8jv4dv) -- 将 LX Music 设置为“音乐应用”分类,允许将 LX Music 设置为系统默认音乐播放器 -- 添加在程序外使用LX Music打开歌曲文件、`js`、`json`、`lxmc`文件的支持 +- 将 LX Music 设置为「音乐应用」类,允许将 LX Music 设置为系统默认音乐播放器 +- 支持在程序外使用 LX Music 打开常见音乐文件及 `.js`、`.json`、`.lxmc` 等文件 ### 优化 @@ -24,7 +24,7 @@ - 修复导出文件到范围存储类型的目录时,扩展名丢失的问题 - 修复切换列表播放歌曲时可能会出现播放的歌曲不对应的问题 - 修复内置列表名称硬编码和语言切换显示的问题(#662) -- 修复某些情况下进播放详情页时,详情页会不显示或APP界面无响应的问题 +- 修复某些情况下进播放详情页时,详情页不显示或应用界面无响应的问题 ### 变更 @@ -35,4 +35,5 @@ - 更新 Readme 文档,优化文案编排(#651, Thanks @3gf8jv4dv) - 更新 Issue 模板(#652, @3gf8jv4dv) +- 更新项目文档(@3gf8jv4dv) - 更新 React Native 到 v0.73.11 From 22c89e9f8e77d4b73798565839398899564c5e62 Mon Sep 17 00:00:00 2001 From: 3gf8jv4dv <3gf8jv4dv@gmail.com> Date: Sat, 18 Jan 2025 22:17:12 +0800 Subject: [PATCH 16/26] i18n cleanup 5 (#683) --- README.md | 4 ++-- src/config/setting.ts | 4 ++-- src/screens/Home/Views/Setting/settings/About.tsx | 2 +- src/utils/errorHandle.ts | 2 +- src/utils/tools.ts | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 8e0f399..c8badd3 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ - Android -*注:由于没有相关开发环境及证书,**目前没有计划支持 iOS 和 HarmonyOS NEXT**。*
+***注:目前没有计划支持 iOS 和 HarmonyOS NEXT**。*
*桌面版项目地址:* 软件变化请查看[更新日志](https://github.com/lyswhut/lx-music-mobile/blob/master/CHANGELOG.md)。 @@ -34,7 +34,7 @@ 使用常见问题请参阅[移动版常见问题](https://lyswhut.github.io/lx-music-doc/mobile/faq)。 -目前本项目的原始发布地址只有 [**GitHub Releases**](https://github.com/lyswhut/lx-music-mobile/releases),其他渠道均为第三方转载发布,与本项目无关! +目前本项目的原始发布地址只有 [**GitHub**](https://github.com/lyswhut/lx-music-mobile/releases),其他渠道均为第三方转载发布,与本项目无关! 为了提高使用门槛,本软件内的默认设置、UI 操作不以新手友好为目标,所以使用前建议先根据你的喜好浏览调整一遍软件设置,阅读一遍[音乐播放列表机制](https://lyswhut.github.io/lx-music-doc/mobile/faq/playlist)。 diff --git a/src/config/setting.ts b/src/config/setting.ts index 31e4efa..f3f2639 100644 --- a/src/config/setting.ts +++ b/src/config/setting.ts @@ -90,8 +90,8 @@ export const initSetting = async() => { await migrateMetaData() } catch (err: any) { void tipDialog({ - title: '数据迁移失败 (Migrate data Failed)', - message: `请加企鹅群(830125506)或到GitHub反馈,为了防止数据丢失,应用将停止运行,错误信息:\n${(err.stack ?? err.message) as string}`, + title: '数据迁移失败 (Failed to migrate data)', + message: `请截图并在 GitHub 反馈。为了防止数据丢失,应用将停止运行。错误信息:\n${(err.stack ?? err.message) as string}`, btnText: 'Exit', bgClose: false, }).then(() => { diff --git a/src/screens/Home/Views/Setting/settings/About.tsx b/src/screens/Home/Views/Setting/settings/About.tsx index 9a34f21..22db5f0 100644 --- a/src/screens/Home/Views/Setting/settings/About.tsx +++ b/src/screens/Home/Views/Setting/settings/About.tsx @@ -71,7 +71,7 @@ export default memo(() => { 最新版下载地址: - GitHub Release + GitHub Releases diff --git a/src/utils/errorHandle.ts b/src/utils/errorHandle.ts index 5d5773a..cd3b981 100644 --- a/src/utils/errorHandle.ts +++ b/src/utils/errorHandle.ts @@ -8,7 +8,7 @@ const errorHandler = (e: Error, isFatal: boolean) => { Alert.alert( '💥Unexpected error occurred💥', ` -应用出bug了😭,以下是错误异常信息,请截图(并附上刚才你进行了什么操作)通过企鹅群或者GitHub反馈,现在应用可能会出现异常,若出现异常请尝试强制结束APP后重新启动! +应用出 bug 了😭,以下是错误异常信息。请截图并在 GitHub 反馈(并附上刚才你进行了什么操作)。现在应用可能会出现异常,若出现异常请尝试强制结束应用后重新启动! Error: ${isFatal ? 'Fatal:' : ''} ${e.name} ${e.message} diff --git a/src/utils/tools.ts b/src/utils/tools.ts index 383c641..9a45523 100644 --- a/src/utils/tools.ts +++ b/src/utils/tools.ts @@ -550,7 +550,7 @@ export const cheatTip = async() => { return tipDialog({ title: '谨防被骗提示', - message: `1. 本项目无微信公众号之类的所谓「官方账号」,也未在小米、华为、vivo 等应用商店发布应用,商店内的「LX Music」、「洛雪音乐」相关的应用全部属于假冒应用,谨防被骗!\n + message: `1. 本项目无微信公众号之类的所谓「官方账号」,也未在小米、华为、vivo 等应用商店发布应用,商店内的「LX Music」「洛雪音乐」相关的应用全部属于假冒应用,谨防被骗!\n 2. 本软件完全无广告且无引流(如需要加群、关注公众号之类才能使用或者升级)的行为,若你使用过程中遇到广告或者引流的信息,则表明你当前运行的软件是第三方修改版。\n 3. 目前本项目的原始发布地址只有 GitHub,其他渠道均为第三方转载发布,可信度请自行鉴别。`, btnText: '我知道了 (Close)', From 91c712c983a3d0d35606af2448151d3aebaddbe8 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Fri, 24 Jan 2025 18:39:25 +0800 Subject: [PATCH 17/26] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BD=8E=E7=89=88?= =?UTF-8?q?=E6=9C=AC=20Android=20=E5=9C=A8=E6=9F=90=E4=BA=9B=E6=83=85?= =?UTF-8?q?=E5=86=B5=E4=B8=8B=E5=AF=B9=20Emoji=20=E5=AD=97=E7=AC=A6?= =?UTF-8?q?=E7=BC=96=E7=A0=81=E7=9A=84=E5=A4=84=E7=90=86=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/assets/script/user-api-preload.js | 2 +- .../toside/music/mobile/userApi/QuickJS.java | 18 ++++++++++++------ publish/changeLog.md | 3 ++- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/android/app/src/main/assets/script/user-api-preload.js b/android/app/src/main/assets/script/user-api-preload.js index d948427..b5e9306 100644 --- a/android/app/src/main/assets/script/user-api-preload.js +++ b/android/app/src/main/assets/script/user-api-preload.js @@ -377,7 +377,7 @@ globalThis.lx_setup = (key, id, name, description, version, author, homepage, ra }, md5(str) { if (typeof str !== 'string') throw new Error('param required a string') - const md5 = nativeFuncs.utils_str2md5(str) + const md5 = nativeFuncs.utils_str2md5(encodeURIComponent(str)) // console.log('md5', str, md5) return md5 }, diff --git a/android/app/src/main/java/cn/toside/music/mobile/userApi/QuickJS.java b/android/app/src/main/java/cn/toside/music/mobile/userApi/QuickJS.java index 416c906..c3c8bad 100644 --- a/android/app/src/main/java/cn/toside/music/mobile/userApi/QuickJS.java +++ b/android/app/src/main/java/cn/toside/music/mobile/userApi/QuickJS.java @@ -1,5 +1,6 @@ package cn.toside.music.mobile.userApi; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Message; @@ -10,14 +11,12 @@ import cn.toside.music.mobile.crypto.RSA; import com.facebook.react.bridge.ReactApplicationContext; import com.whl.quickjs.android.QuickJSLoader; -import com.whl.quickjs.wrapper.JSCallFunction; import com.whl.quickjs.wrapper.QuickJSContext; import java.io.InputStream; +import java.net.URLDecoder; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; import java.util.UUID; -import okhttp3.HttpUrl; public class QuickJS { private final Handler eventHandler; @@ -87,15 +86,22 @@ public class QuickJS { }); jsContext.getGlobalObject().setProperty("__lx_native_call__utils_str2md5", args -> { try { + // Log.d("UserApi [script call]", "utils_str2md5: " + args[0]); + String str; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + str = URLDecoder.decode((String) args[0], StandardCharsets.UTF_8); + } else { + str = URLDecoder.decode((String) args[0], "UTF-8"); + } + // Log.d("UserApi [script call]", "utils_str2md5: " + str); MessageDigest md = MessageDigest.getInstance("MD5"); - byte[] inputBytes = ((String) args[0]).getBytes(); - byte[] md5Bytes = md.digest(inputBytes); + byte[] md5Bytes = md.digest(str.getBytes(StandardCharsets.UTF_8)); StringBuilder md5String = new StringBuilder(); for (byte b : md5Bytes) { md5String.append(String.format("%02x", b)); } return md5String.toString(); - } catch (NoSuchAlgorithmException e) { + } catch (Exception e) { Log.e("UserApi [utils]", "utils_str2md5 error: " + e.getMessage()); return ""; } diff --git a/publish/changeLog.md b/publish/changeLog.md index 54e9236..fb3b480 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -24,7 +24,8 @@ - 修复导出文件到范围存储类型的目录时,扩展名丢失的问题 - 修复切换列表播放歌曲时可能会出现播放的歌曲不对应的问题 - 修复内置列表名称硬编码和语言切换显示的问题(#662) -- 修复某些情况下进播放详情页时,详情页不显示或应用界面无响应的问题 +- 修复某些情况下进播放详情页时,详情页会不显示或APP界面无响应的问题 +- 修复低版本 Android 在某些情况下对 Emoji 字符编码的处理问题 ### 变更 From c1c14148ba7663830bd56365ffe1bff777751ab7 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Sat, 25 Jan 2025 18:19:33 +0800 Subject: [PATCH 18/26] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BE=9D=E8=B5=96&?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=8F=B7=EF=BC=881.7.0-beta.11=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 436 +++++++++++++++++++++------------------------- package.json | 18 +- 2 files changed, 203 insertions(+), 251 deletions(-) diff --git a/package-lock.json b/package-lock.json index 62ad5b5..04bd163 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,17 +1,17 @@ { "name": "lx-music-mobile", - "version": "1.7.0-beta.10", + "version": "1.7.0-beta.11", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "lx-music-mobile", - "version": "1.7.0-beta.10", + "version": "1.7.0-beta.11", "license": "Apache-2.0", "dependencies": { "@craftzdog/react-native-buffer": "^6.0.5", "@react-native-async-storage/async-storage": "^2.1.0", - "@react-native-clipboard/clipboard": "^1.15.0", + "@react-native-clipboard/clipboard": "^1.16.1", "@react-native-community/slider": "^4.5.5", "iconv-lite": "^0.6.3", "lrc-file-parser": "^2.4.1", @@ -25,18 +25,18 @@ "react-native-fs": "^2.20.0", "react-native-local-media-metadata": "github:lyswhut/react-native-local-media-metadata#5eac1b6c70e934a1ad7b800b3ab7122f1075f704", "react-native-navigation": "7.39.2", - "react-native-pager-view": "6.6.1", + "react-native-pager-view": "6.7.0", "react-native-quick-base64": "^2.1.2", "react-native-quick-md5": "^3.0.6", "react-native-track-player": "github:lyswhut/react-native-track-player#75c097a4a46bea19970540bbc1bd38527ea73cde", "react-native-vector-icons": "^10.2.0" }, "devDependencies": { - "@babel/core": "^7.26.0", - "@babel/eslint-parser": "^7.25.9", + "@babel/core": "^7.26.7", + "@babel/eslint-parser": "^7.26.5", "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/preset-env": "^7.26.0", - "@babel/runtime": "^7.26.0", + "@babel/preset-env": "^7.26.7", + "@babel/runtime": "^7.26.7", "@react-native/babel-preset": "^0.74.88", "@react-native/metro-config": "^0.74.88", "@react-native/typescript-config": "^0.74.88", @@ -49,9 +49,9 @@ "changelog-parser": "^3.0.1", "eslint-config-standard": "^17.1.0", "eslint-config-standard-with-typescript": "^43.0.1", - "eslint-plugin-react": "^7.37.3", + "eslint-plugin-react": "^7.37.4", "eslint-plugin-react-hooks": "^5.1.0", - "typescript": "^5.7.2" + "typescript": "^5.7.3" }, "engines": { "node": ">= 18", @@ -241,30 +241,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", - "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz", + "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", - "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.7.tgz", + "integrity": "sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA==", "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.0", - "@babel/generator": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.5", + "@babel/helper-compilation-targets": "^7.26.5", "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.0", - "@babel/parser": "^7.26.0", + "@babel/helpers": "^7.26.7", + "@babel/parser": "^7.26.7", "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.26.0", + "@babel/traverse": "^7.26.7", + "@babel/types": "^7.26.7", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -280,9 +280,9 @@ } }, "node_modules/@babel/eslint-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.25.9.tgz", - "integrity": "sha512-5UXfgpK0j0Xr/xIdgdLEhOFxaDZ0bRPWJJchRpqOSur/3rZoPbqqki5mm0p4NE2cs28krBEiSM2MB7//afRSQQ==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.26.5.tgz", + "integrity": "sha512-Kkm8C8uxI842AwQADxl0GbcG1rupELYLShazYEZO/2DYjhyWXJIOUVOE3tBYm6JXzUCNJOZEzqc4rCW/jsEQYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -308,13 +308,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", - "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz", + "integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.26.2", - "@babel/types": "^7.26.0", + "@babel/parser": "^7.26.5", + "@babel/types": "^7.26.5", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -335,26 +335,13 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz", - "integrity": "sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", - "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.25.9", + "@babel/compat-data": "^7.26.5", "@babel/helper-validator-option": "^7.25.9", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -484,9 +471,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", - "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -526,19 +513,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz", - "integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", @@ -594,25 +568,25 @@ } }, "node_modules/@babel/helpers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", - "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.7.tgz", + "integrity": "sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==", "license": "MIT", "dependencies": { "@babel/template": "^7.25.9", - "@babel/types": "^7.26.0" + "@babel/types": "^7.26.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", - "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.7.tgz", + "integrity": "sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==", "license": "MIT", "dependencies": { - "@babel/types": "^7.26.0" + "@babel/types": "^7.26.7" }, "bin": { "parser": "bin/babel-parser.js" @@ -1144,12 +1118,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz", - "integrity": "sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", + "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -1319,12 +1293,11 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz", - "integrity": "sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", + "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", "license": "MIT", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { @@ -1475,14 +1448,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz", - "integrity": "sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", + "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-simple-access": "^7.25.9" + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1557,12 +1529,12 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz", - "integrity": "sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==", + "version": "7.26.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", + "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -1906,12 +1878,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz", - "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.26.7.tgz", + "integrity": "sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -2001,14 +1973,14 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.0.tgz", - "integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.7.tgz", + "integrity": "sha512-Ycg2tnXwixaXOVb29rana8HNPgLVBof8qqtNQ9LE22IoyZboQbGSxI6ZySMdW3K5nAe6gu35IaJefUJflhUFTQ==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", + "@babel/compat-data": "^7.26.5", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-plugin-utils": "^7.26.5", "@babel/helper-validator-option": "^7.25.9", "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", @@ -2022,7 +1994,7 @@ "@babel/plugin-transform-arrow-functions": "^7.25.9", "@babel/plugin-transform-async-generator-functions": "^7.25.9", "@babel/plugin-transform-async-to-generator": "^7.25.9", - "@babel/plugin-transform-block-scoped-functions": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.26.5", "@babel/plugin-transform-block-scoping": "^7.25.9", "@babel/plugin-transform-class-properties": "^7.25.9", "@babel/plugin-transform-class-static-block": "^7.26.0", @@ -2033,7 +2005,7 @@ "@babel/plugin-transform-duplicate-keys": "^7.25.9", "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", "@babel/plugin-transform-dynamic-import": "^7.25.9", - "@babel/plugin-transform-exponentiation-operator": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.26.3", "@babel/plugin-transform-export-namespace-from": "^7.25.9", "@babel/plugin-transform-for-of": "^7.25.9", "@babel/plugin-transform-function-name": "^7.25.9", @@ -2042,12 +2014,12 @@ "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", "@babel/plugin-transform-member-expression-literals": "^7.25.9", "@babel/plugin-transform-modules-amd": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.26.3", "@babel/plugin-transform-modules-systemjs": "^7.25.9", "@babel/plugin-transform-modules-umd": "^7.25.9", "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", "@babel/plugin-transform-new-target": "^7.25.9", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", "@babel/plugin-transform-numeric-separator": "^7.25.9", "@babel/plugin-transform-object-rest-spread": "^7.25.9", "@babel/plugin-transform-object-super": "^7.25.9", @@ -2064,7 +2036,7 @@ "@babel/plugin-transform-spread": "^7.25.9", "@babel/plugin-transform-sticky-regex": "^7.25.9", "@babel/plugin-transform-template-literals": "^7.25.9", - "@babel/plugin-transform-typeof-symbol": "^7.25.9", + "@babel/plugin-transform-typeof-symbol": "^7.26.7", "@babel/plugin-transform-unicode-escapes": "^7.25.9", "@babel/plugin-transform-unicode-property-regex": "^7.25.9", "@babel/plugin-transform-unicode-regex": "^7.25.9", @@ -2189,9 +2161,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", - "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.7.tgz", + "integrity": "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==", "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" @@ -2220,16 +2192,16 @@ } }, "node_modules/@babel/traverse": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", - "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.7.tgz", + "integrity": "sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/parser": "^7.25.9", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.5", + "@babel/parser": "^7.26.7", "@babel/template": "^7.25.9", - "@babel/types": "^7.25.9", + "@babel/types": "^7.26.7", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2238,9 +2210,9 @@ } }, "node_modules/@babel/types": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", - "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.7.tgz", + "integrity": "sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.25.9", @@ -2758,9 +2730,9 @@ } }, "node_modules/@react-native-clipboard/clipboard": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@react-native-clipboard/clipboard/-/clipboard-1.15.0.tgz", - "integrity": "sha512-YDMC3E956jn9zE11uKGcQDKS1SO9q72iNHxZyrKY5y9XYwZcA9vo3Xk74+zRnf7cM48drDO0s9lyAPUlOvyhrw==", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/@react-native-clipboard/clipboard/-/clipboard-1.16.1.tgz", + "integrity": "sha512-YdSwSS3P4IiJq5nW0iv3qpntDAzBf/xoew2zRPGJ6SJZr/Lhk4aWyR506EWl6BID+iQy7xQmzHXZYR5H4apM6g==", "license": "MIT", "workspaces": [ "example" @@ -6884,9 +6856,9 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.37.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.3.tgz", - "integrity": "sha512-DomWuTQPFYZwF/7c9W2fkKkStqZmBd3uugfqBYLdkZ3Hii23WzZuOLUskGxB8qkSKqftxEeGL1TB2kMhrce0jA==", + "version": "7.37.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.4.tgz", + "integrity": "sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10937,9 +10909,9 @@ "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" }, "node_modules/react-native-pager-view": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/react-native-pager-view/-/react-native-pager-view-6.6.1.tgz", - "integrity": "sha512-2dFulYs8JxEUecemv1PGWCUv+ZQuwSaQfFiSr2++KH8km5HzpuS8vJ3MVb0M6UhpqacFDj9OGe7z97ks/mr7gA==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/react-native-pager-view/-/react-native-pager-view-6.7.0.tgz", + "integrity": "sha512-sutxKiMqBuQrEyt4mLaLNzy8taIC7IuYpxfcwQBXfSYBSSpAa0qE9G1FXlP/iXqTSlFgBXyK7BESsl9umOjECQ==", "license": "MIT", "peerDependencies": { "react": "*", @@ -12908,9 +12880,9 @@ } }, "node_modules/typescript": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", - "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -13712,25 +13684,25 @@ } }, "@babel/compat-data": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", - "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==" + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz", + "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==" }, "@babel/core": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", - "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.7.tgz", + "integrity": "sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA==", "requires": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.0", - "@babel/generator": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.5", + "@babel/helper-compilation-targets": "^7.26.5", "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.0", - "@babel/parser": "^7.26.0", + "@babel/helpers": "^7.26.7", + "@babel/parser": "^7.26.7", "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.26.0", + "@babel/traverse": "^7.26.7", + "@babel/types": "^7.26.7", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -13739,9 +13711,9 @@ } }, "@babel/eslint-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.25.9.tgz", - "integrity": "sha512-5UXfgpK0j0Xr/xIdgdLEhOFxaDZ0bRPWJJchRpqOSur/3rZoPbqqki5mm0p4NE2cs28krBEiSM2MB7//afRSQQ==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.26.5.tgz", + "integrity": "sha512-Kkm8C8uxI842AwQADxl0GbcG1rupELYLShazYEZO/2DYjhyWXJIOUVOE3tBYm6JXzUCNJOZEzqc4rCW/jsEQYQ==", "dev": true, "requires": { "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", @@ -13758,12 +13730,12 @@ } }, "@babel/generator": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", - "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz", + "integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==", "requires": { - "@babel/parser": "^7.26.2", - "@babel/types": "^7.26.0", + "@babel/parser": "^7.26.5", + "@babel/types": "^7.26.5", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -13777,21 +13749,12 @@ "@babel/types": "^7.25.9" } }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz", - "integrity": "sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==", - "requires": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - } - }, "@babel/helper-compilation-targets": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", - "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", "requires": { - "@babel/compat-data": "^7.25.9", + "@babel/compat-data": "^7.26.5", "@babel/helper-validator-option": "^7.25.9", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -13879,9 +13842,9 @@ } }, "@babel/helper-plugin-utils": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", - "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==" + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==" }, "@babel/helper-remap-async-to-generator": { "version": "7.25.9", @@ -13903,15 +13866,6 @@ "@babel/traverse": "^7.25.9" } }, - "@babel/helper-simple-access": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz", - "integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==", - "requires": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - } - }, "@babel/helper-skip-transparent-expression-wrappers": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", @@ -13947,20 +13901,20 @@ } }, "@babel/helpers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", - "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.7.tgz", + "integrity": "sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==", "requires": { "@babel/template": "^7.25.9", - "@babel/types": "^7.26.0" + "@babel/types": "^7.26.7" } }, "@babel/parser": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", - "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.7.tgz", + "integrity": "sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==", "requires": { - "@babel/types": "^7.26.0" + "@babel/types": "^7.26.7" } }, "@babel/plugin-bugfix-firefox-class-in-computed-class-key": { @@ -14271,11 +14225,11 @@ } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz", - "integrity": "sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", + "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", "requires": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5" } }, "@babel/plugin-transform-block-scoping": { @@ -14369,11 +14323,10 @@ } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz", - "integrity": "sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", + "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" } }, @@ -14455,13 +14408,12 @@ } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz", - "integrity": "sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", + "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", "requires": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-simple-access": "^7.25.9" + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-modules-systemjs": { @@ -14502,11 +14454,11 @@ } }, "@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz", - "integrity": "sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==", + "version": "7.26.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", + "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", "requires": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5" } }, "@babel/plugin-transform-numeric-separator": { @@ -14697,11 +14649,11 @@ } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz", - "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.26.7.tgz", + "integrity": "sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==", "requires": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5" } }, "@babel/plugin-transform-typescript": { @@ -14751,13 +14703,13 @@ } }, "@babel/preset-env": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.0.tgz", - "integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.7.tgz", + "integrity": "sha512-Ycg2tnXwixaXOVb29rana8HNPgLVBof8qqtNQ9LE22IoyZboQbGSxI6ZySMdW3K5nAe6gu35IaJefUJflhUFTQ==", "requires": { - "@babel/compat-data": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", + "@babel/compat-data": "^7.26.5", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-plugin-utils": "^7.26.5", "@babel/helper-validator-option": "^7.25.9", "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", @@ -14771,7 +14723,7 @@ "@babel/plugin-transform-arrow-functions": "^7.25.9", "@babel/plugin-transform-async-generator-functions": "^7.25.9", "@babel/plugin-transform-async-to-generator": "^7.25.9", - "@babel/plugin-transform-block-scoped-functions": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.26.5", "@babel/plugin-transform-block-scoping": "^7.25.9", "@babel/plugin-transform-class-properties": "^7.25.9", "@babel/plugin-transform-class-static-block": "^7.26.0", @@ -14782,7 +14734,7 @@ "@babel/plugin-transform-duplicate-keys": "^7.25.9", "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", "@babel/plugin-transform-dynamic-import": "^7.25.9", - "@babel/plugin-transform-exponentiation-operator": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.26.3", "@babel/plugin-transform-export-namespace-from": "^7.25.9", "@babel/plugin-transform-for-of": "^7.25.9", "@babel/plugin-transform-function-name": "^7.25.9", @@ -14791,12 +14743,12 @@ "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", "@babel/plugin-transform-member-expression-literals": "^7.25.9", "@babel/plugin-transform-modules-amd": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.26.3", "@babel/plugin-transform-modules-systemjs": "^7.25.9", "@babel/plugin-transform-modules-umd": "^7.25.9", "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", "@babel/plugin-transform-new-target": "^7.25.9", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", "@babel/plugin-transform-numeric-separator": "^7.25.9", "@babel/plugin-transform-object-rest-spread": "^7.25.9", "@babel/plugin-transform-object-super": "^7.25.9", @@ -14813,7 +14765,7 @@ "@babel/plugin-transform-spread": "^7.25.9", "@babel/plugin-transform-sticky-regex": "^7.25.9", "@babel/plugin-transform-template-literals": "^7.25.9", - "@babel/plugin-transform-typeof-symbol": "^7.25.9", + "@babel/plugin-transform-typeof-symbol": "^7.26.7", "@babel/plugin-transform-unicode-escapes": "^7.25.9", "@babel/plugin-transform-unicode-property-regex": "^7.25.9", "@babel/plugin-transform-unicode-regex": "^7.25.9", @@ -14902,9 +14854,9 @@ } }, "@babel/runtime": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", - "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.7.tgz", + "integrity": "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==", "requires": { "regenerator-runtime": "^0.14.0" }, @@ -14927,23 +14879,23 @@ } }, "@babel/traverse": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", - "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.7.tgz", + "integrity": "sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==", "requires": { - "@babel/code-frame": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/parser": "^7.25.9", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.5", + "@babel/parser": "^7.26.7", "@babel/template": "^7.25.9", - "@babel/types": "^7.25.9", + "@babel/types": "^7.26.7", "debug": "^4.3.1", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", - "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.7.tgz", + "integrity": "sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==", "requires": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" @@ -15317,9 +15269,9 @@ } }, "@react-native-clipboard/clipboard": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@react-native-clipboard/clipboard/-/clipboard-1.15.0.tgz", - "integrity": "sha512-YDMC3E956jn9zE11uKGcQDKS1SO9q72iNHxZyrKY5y9XYwZcA9vo3Xk74+zRnf7cM48drDO0s9lyAPUlOvyhrw==", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/@react-native-clipboard/clipboard/-/clipboard-1.16.1.tgz", + "integrity": "sha512-YdSwSS3P4IiJq5nW0iv3qpntDAzBf/xoew2zRPGJ6SJZr/Lhk4aWyR506EWl6BID+iQy7xQmzHXZYR5H4apM6g==", "requires": {} }, "@react-native-community/cli": { @@ -18534,9 +18486,9 @@ "requires": {} }, "eslint-plugin-react": { - "version": "7.37.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.3.tgz", - "integrity": "sha512-DomWuTQPFYZwF/7c9W2fkKkStqZmBd3uugfqBYLdkZ3Hii23WzZuOLUskGxB8qkSKqftxEeGL1TB2kMhrce0jA==", + "version": "7.37.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.4.tgz", + "integrity": "sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==", "dev": true, "requires": { "array-includes": "^3.1.8", @@ -21693,9 +21645,9 @@ } }, "react-native-pager-view": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/react-native-pager-view/-/react-native-pager-view-6.6.1.tgz", - "integrity": "sha512-2dFulYs8JxEUecemv1PGWCUv+ZQuwSaQfFiSr2++KH8km5HzpuS8vJ3MVb0M6UhpqacFDj9OGe7z97ks/mr7gA==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/react-native-pager-view/-/react-native-pager-view-6.7.0.tgz", + "integrity": "sha512-sutxKiMqBuQrEyt4mLaLNzy8taIC7IuYpxfcwQBXfSYBSSpAa0qE9G1FXlP/iXqTSlFgBXyK7BESsl9umOjECQ==", "requires": {} }, "react-native-quick-base64": { @@ -22852,9 +22804,9 @@ } }, "typescript": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", - "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", "dev": true }, "unbox-primitive": { diff --git a/package.json b/package.json index f2c360e..3bb3529 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lx-music-mobile", - "version": "1.7.0-beta.10", + "version": "1.7.0-beta.11", "versionCode": 69, "private": true, "scripts": { @@ -46,7 +46,7 @@ "dependencies": { "@craftzdog/react-native-buffer": "^6.0.5", "@react-native-async-storage/async-storage": "^2.1.0", - "@react-native-clipboard/clipboard": "^1.15.0", + "@react-native-clipboard/clipboard": "^1.16.1", "@react-native-community/slider": "^4.5.5", "iconv-lite": "^0.6.3", "lrc-file-parser": "^2.4.1", @@ -60,18 +60,18 @@ "react-native-fs": "^2.20.0", "react-native-local-media-metadata": "github:lyswhut/react-native-local-media-metadata#5eac1b6c70e934a1ad7b800b3ab7122f1075f704", "react-native-navigation": "7.39.2", - "react-native-pager-view": "6.6.1", + "react-native-pager-view": "6.7.0", "react-native-quick-base64": "^2.1.2", "react-native-quick-md5": "^3.0.6", "react-native-track-player": "github:lyswhut/react-native-track-player#75c097a4a46bea19970540bbc1bd38527ea73cde", "react-native-vector-icons": "^10.2.0" }, "devDependencies": { - "@babel/core": "^7.26.0", - "@babel/eslint-parser": "^7.25.9", + "@babel/core": "^7.26.7", + "@babel/eslint-parser": "^7.26.5", "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/preset-env": "^7.26.0", - "@babel/runtime": "^7.26.0", + "@babel/preset-env": "^7.26.7", + "@babel/runtime": "^7.26.7", "@react-native/babel-preset": "^0.74.88", "@react-native/metro-config": "^0.74.88", "@react-native/typescript-config": "^0.74.88", @@ -84,8 +84,8 @@ "changelog-parser": "^3.0.1", "eslint-config-standard": "^17.1.0", "eslint-config-standard-with-typescript": "^43.0.1", - "eslint-plugin-react": "^7.37.3", + "eslint-plugin-react": "^7.37.4", "eslint-plugin-react-hooks": "^5.1.0", - "typescript": "^5.7.2" + "typescript": "^5.7.3" } } From 9aa00e45a82b980fe0d1afab017a99dab0f5e0a9 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Sun, 26 Jan 2025 10:10:01 +0800 Subject: [PATCH 19/26] =?UTF-8?q?=E8=BF=98=E5=8E=9F=E8=A2=AB=E6=84=8F?= =?UTF-8?q?=E5=A4=96=E8=A6=86=E7=9B=96=E7=9A=84=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publish/changeLog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/publish/changeLog.md b/publish/changeLog.md index fb3b480..a9eb3bb 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -24,7 +24,7 @@ - 修复导出文件到范围存储类型的目录时,扩展名丢失的问题 - 修复切换列表播放歌曲时可能会出现播放的歌曲不对应的问题 - 修复内置列表名称硬编码和语言切换显示的问题(#662) -- 修复某些情况下进播放详情页时,详情页会不显示或APP界面无响应的问题 +- 修复某些情况下进播放详情页时,详情页不显示或应用界面无响应的问题 - 修复低版本 Android 在某些情况下对 Emoji 字符编码的处理问题 ### 变更 From e78f31c78548ff40f60db72f63eb5de753885ea9 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Mon, 27 Jan 2025 00:48:50 +0800 Subject: [PATCH 20/26] =?UTF-8?q?=E6=9A=82=E6=97=B6=E7=A7=BB=E9=99=A4SL?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E6=9E=84=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/beta-pack-all.yml | 114 ---------------------------- .github/workflows/release.yml | 83 ++++++++++---------- 2 files changed, 42 insertions(+), 155 deletions(-) delete mode 100644 .github/workflows/beta-pack-all.yml diff --git a/.github/workflows/beta-pack-all.yml b/.github/workflows/beta-pack-all.yml deleted file mode 100644 index 534bb6e..0000000 --- a/.github/workflows/beta-pack-all.yml +++ /dev/null @@ -1,114 +0,0 @@ -name: Build Beta - -on: - workflow_dispatch: - -jobs: - Android: - name: Android - runs-on: ubuntu-latest - steps: - - name: Check out git repository - uses: actions/checkout@v4 - - - name: Setup Env - uses: ./.github/actions/setup - - - name: Build Packages - shell: bash - run: | - cd android - echo ${{ secrets.KEYSTORE_STORE_FILE_BASE64 }} | base64 --decode > app/${{ secrets.KEYSTORE_STORE_FILE }} - ./gradlew assembleRelease -PMYAPP_UPLOAD_STORE_FILE='${{ secrets.KEYSTORE_STORE_FILE }}' -PMYAPP_UPLOAD_KEY_ALIAS='${{ secrets.KEYSTORE_KEY_ALIAS }}' -PMYAPP_UPLOAD_STORE_PASSWORD='${{ secrets.KEYSTORE_PASSWORD }}' -PMYAPP_UPLOAD_KEY_PASSWORD='${{ secrets.KEYSTORE_KEY_PASSWORD }}' - rm -f app/${{ secrets.KEYSTORE_STORE_FILE }} - - # Push tag to GitHub if package.json version's tag is not tagged - - name: Get package version - run: node -p -e '`PACKAGE_VERSION=${require("./package.json").version}`' >> $GITHUB_ENV - - - name: Generate file MD5 - run: | - cd android/app/build/outputs/apk/release - md5sum *.apk - - - name: Upload Artifact - uses: ./.github/actions/upload-artifact - env: - PACKAGE_VERSION: ${{ env.PACKAGE_VERSION }} - - - Android_SL: - name: Android_SL - runs-on: ubuntu-latest - steps: - - name: Check out git repository - uses: actions/checkout@v4 - with: - ref: statusbar_lyric - - - name: Setup Env - uses: ./.github/actions/setup - - - name: Build Packages - shell: bash - run: | - cd android - echo ${{ secrets.KEYSTORE_STORE_FILE_BASE64 }} | base64 --decode > app/${{ secrets.KEYSTORE_STORE_FILE }} - ./gradlew assembleRelease -PMYAPP_UPLOAD_STORE_FILE='${{ secrets.KEYSTORE_STORE_FILE }}' -PMYAPP_UPLOAD_KEY_ALIAS='${{ secrets.KEYSTORE_KEY_ALIAS }}' -PMYAPP_UPLOAD_STORE_PASSWORD='${{ secrets.KEYSTORE_PASSWORD }}' -PMYAPP_UPLOAD_KEY_PASSWORD='${{ secrets.KEYSTORE_KEY_PASSWORD }}' - rm -f app/${{ secrets.KEYSTORE_STORE_FILE }} - - # Push tag to GitHub if package.json version's tag is not tagged - - name: Get package version - run: | - node -p -e '`PACKAGE_VERSION=${require("./package.json").version}`' >> $GITHUB_ENV - echo "COMMIT_SHA=$(git show -s --format=%H)" >> $GITHUB_ENV - - - name: Generate file MD5 - run: | - echo "current commit sha: ${{ env.COMMIT_SHA }}" - cd android/app/build/outputs/apk/release - md5sum *.apk - - - name: Upload Artifact - uses: ./.github/actions/upload-artifact - env: - PACKAGE_TYPE: 'Android_SL' - PACKAGE_VERSION: ${{ env.PACKAGE_VERSION }} - - # Android_5: - # name: Android_5 - # runs-on: ubuntu-latest - # steps: - # - name: Check out git repository - # uses: actions/checkout@v4 - # with: - # ref: android_5 - - # - name: Setup Env - # uses: ./.github/actions/setup - - # - name: Build Packages - # shell: bash - # run: | - # cd android - # echo ${{ secrets.KEYSTORE_STORE_FILE_BASE64 }} | base64 --decode > app/${{ secrets.KEYSTORE_STORE_FILE }} - # ./gradlew assembleRelease -PMYAPP_UPLOAD_STORE_FILE='${{ secrets.KEYSTORE_STORE_FILE }}' -PMYAPP_UPLOAD_KEY_ALIAS='${{ secrets.KEYSTORE_KEY_ALIAS }}' -PMYAPP_UPLOAD_STORE_PASSWORD='${{ secrets.KEYSTORE_PASSWORD }}' -PMYAPP_UPLOAD_KEY_PASSWORD='${{ secrets.KEYSTORE_KEY_PASSWORD }}' - # rm -f app/${{ secrets.KEYSTORE_STORE_FILE }} - - # # Push tag to GitHub if package.json version's tag is not tagged - # - name: Get package version - # run: | - # node -p -e '`PACKAGE_VERSION=${require("./package.json").version}`' >> $GITHUB_ENV - # echo "COMMIT_SHA=$(git show -s --format=%H)" >> $GITHUB_ENV - - # - name: Generate file MD5 - # run: | - # echo "current commit sha: ${{ env.COMMIT_SHA }}" - # cd android/app/build/outputs/apk/release - # md5sum *.apk - - # - name: Upload Artifact - # uses: ./.github/actions/upload-artifact - # env: - # PACKAGE_TYPE: 'Android_5' - # PACKAGE_VERSION: ${{ env.PACKAGE_VERSION }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8251b8e..8a0d5dd 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -47,52 +47,52 @@ jobs: env: PACKAGE_VERSION: ${{ env.PACKAGE_VERSION }} - Android_SL: - name: Android_SL - runs-on: ubuntu-latest - steps: - - name: Check out git repository - uses: actions/checkout@v4 - with: - ref: statusbar_lyric + # Android_SL: + # name: Android_SL + # runs-on: ubuntu-latest + # steps: + # - name: Check out git repository + # uses: actions/checkout@v4 + # with: + # ref: statusbar_lyric - - name: Setup Env - uses: ./.github/actions/setup + # - name: Setup Env + # uses: ./.github/actions/setup - - name: Build Packages - shell: bash - run: | - cd android - echo ${{ secrets.KEYSTORE_STORE_FILE_BASE64 }} | base64 --decode > app/${{ secrets.KEYSTORE_STORE_FILE }} - ./gradlew assembleRelease -PMYAPP_UPLOAD_STORE_FILE='${{ secrets.KEYSTORE_STORE_FILE }}' -PMYAPP_UPLOAD_KEY_ALIAS='${{ secrets.KEYSTORE_KEY_ALIAS }}' -PMYAPP_UPLOAD_STORE_PASSWORD='${{ secrets.KEYSTORE_PASSWORD }}' -PMYAPP_UPLOAD_KEY_PASSWORD='${{ secrets.KEYSTORE_KEY_PASSWORD }}' - rm -f app/${{ secrets.KEYSTORE_STORE_FILE }} + # - name: Build Packages + # shell: bash + # run: | + # cd android + # echo ${{ secrets.KEYSTORE_STORE_FILE_BASE64 }} | base64 --decode > app/${{ secrets.KEYSTORE_STORE_FILE }} + # ./gradlew assembleRelease -PMYAPP_UPLOAD_STORE_FILE='${{ secrets.KEYSTORE_STORE_FILE }}' -PMYAPP_UPLOAD_KEY_ALIAS='${{ secrets.KEYSTORE_KEY_ALIAS }}' -PMYAPP_UPLOAD_STORE_PASSWORD='${{ secrets.KEYSTORE_PASSWORD }}' -PMYAPP_UPLOAD_KEY_PASSWORD='${{ secrets.KEYSTORE_KEY_PASSWORD }}' + # rm -f app/${{ secrets.KEYSTORE_STORE_FILE }} - # Push tag to GitHub if package.json version's tag is not tagged - - name: Get package version - run: | - node -p -e '`PACKAGE_VERSION=${require("./package.json").version}`' >> $GITHUB_ENV - echo "COMMIT_SHA=$(git show -s --format=%H)" >> $GITHUB_ENV + # # Push tag to GitHub if package.json version's tag is not tagged + # - name: Get package version + # run: | + # node -p -e '`PACKAGE_VERSION=${require("./package.json").version}`' >> $GITHUB_ENV + # echo "COMMIT_SHA=$(git show -s --format=%H)" >> $GITHUB_ENV - - name: Create git tag - uses: pkgdeps/git-tag-action@v3 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - github_repo: ${{ github.repository }} - version: ${{ env.PACKAGE_VERSION }} - git_commit_sha: ${{ env.COMMIT_SHA }} - git_tag_prefix: "v" + # - name: Create git tag + # uses: pkgdeps/git-tag-action@v3 + # with: + # github_token: ${{ secrets.GITHUB_TOKEN }} + # github_repo: ${{ github.repository }} + # version: ${{ env.PACKAGE_VERSION }} + # git_commit_sha: ${{ env.COMMIT_SHA }} + # git_tag_prefix: "v" - - name: Generate file MD5 - run: | - echo "current commit sha: ${{ env.COMMIT_SHA }}" - cd android/app/build/outputs/apk/release - md5sum *.apk + # - name: Generate file MD5 + # run: | + # echo "current commit sha: ${{ env.COMMIT_SHA }}" + # cd android/app/build/outputs/apk/release + # md5sum *.apk - - name: Upload Artifact - uses: ./.github/actions/upload-artifact - env: - PACKAGE_TYPE: 'Android_SL' - PACKAGE_VERSION: ${{ env.PACKAGE_VERSION }} + # - name: Upload Artifact + # uses: ./.github/actions/upload-artifact + # env: + # PACKAGE_TYPE: 'Android_SL' + # PACKAGE_VERSION: ${{ env.PACKAGE_VERSION }} # Android_5: # name: Android_5 @@ -178,7 +178,8 @@ jobs: artifacts/lx-music-mobile-v${{ env.PACKAGE_VERSION }}-x86_64.apk artifacts/lx-music-mobile-v${{ env.PACKAGE_VERSION }}-x86.apk artifacts/lx-music-mobile-v${{ env.PACKAGE_VERSION }}-universal.apk - artifacts/lx-music-mobile-v${{ env.PACKAGE_VERSION }}-sl-arm64-v8a.apk + + # artifacts/lx-music-mobile-v${{ env.PACKAGE_VERSION }}-sl-arm64-v8a.apk # artifacts/lx-music-mobile-v${{ env.PACKAGE_VERSION }}-android_5-universal.apk env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 9a5e452a269e3697e452e7b3645f4ea591ded49e Mon Sep 17 00:00:00 2001 From: lyswhut Date: Mon, 27 Jan 2025 00:48:54 +0800 Subject: [PATCH 21/26] =?UTF-8?q?=E5=8F=91=E5=B8=83v=201.7.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 59 ++++++++++++++++++++++++++++++++++++++++++++ package.json | 4 +-- publish/changeLog.md | 16 ++++++++++++ publish/version.json | 2 +- 4 files changed, 78 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 375048f..d661bfa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,65 @@ Project versioning adheres to [Semantic Versioning](http://semver.org/). Commit convention is based on [Conventional Commits](http://conventionalcommits.org). Change log format is based on [Keep a Changelog](http://keepachangelog.com/). +## [1.7.0](https://github.com/lyswhut/lx-music-mobile/compare/v1.6.0...v1.7.0) - 2025-01-27 + +落雪祝大家新年快乐! + +### 关于之前提到的新项目 + +新项目我取名叫 Any Listen,希望它能像它的名字一样让我们能到处任意听歌。 +经过一年多的开发,因各种原因,实际进度比预期的慢,但还是赶在年前发布了第一个web服务预览版,第一个版本仅支持播放服务器上的歌曲,扩展功能暂时未能开放,但已趋于完成,一两个月内可以搞定。 +目前的版本仅是“能用”的状态,因时间关系,部分UI未能重新设计,但后面会继续完善。 +该项目目前的目标用户是拥有自己服务器且上面存储有歌曲的人使用。 + +项目刚发布,文档未能完善,遇到使用问题或有任何建议欢迎提 issue 交流, +项目地址: https://github.com/any-listen/any-listen + +--- + +*为了防止歌曲缓存被第三方软件当做垃圾意外清理,歌曲缓存不再存储到缓存目录。若想清理缓存,需去「设置 → 其他 → 资源缓存管理」清理。* + +*更新到该版本后首次播放歌曲时,会将之前的歌曲缓存迁移到新位置,需要等待的时间取决于你已缓存资源的大小。* + +*感谢 @3gf8jv4dv 对 LX 系列项目翻译、文档等文案的大幅修订优化。* + +### 新增 + +- 新增蓝牙歌词支持,可以通过「设置 → 播放设置 → 显示蓝牙歌词」启用(#615) +- 新增繁体中文语言(#659, @3gf8jv4dv) +- 将 LX Music 设置为「音乐应用」类,允许将 LX Music 设置为系统默认音乐播放器 +- 支持在程序外使用 LX Music 打开常见音乐文件及 `.js`、`.json`、`.lxmc` 等文件 + +### 优化 + +- 防止歌曲缓存被第三方软件当做垃圾意外清理 +- 优化正常播放结束时的下一首歌曲播放衔接度,在歌曲即将结束播放时将预获取下一首歌曲的播放链接,减少自动切歌时的等待时间 +- 优化歌曲换源机制,提升换源正确率 +- 首次使用的提示窗口可以通过点击背景或者返回键关闭(#577) +- 上移 Toast 位置避免遮挡播放模式图标(#603, @sibojia) +- 优化简体中文文案编排,大幅修订英语文案编排(#658, #660 等, @3gf8jv4dv) +- 优化应用图标质量,在高版本系统上使用矢量图标 + +### 修复 + +- 修复导出文件到范围存储类型的目录时,扩展名丢失的问题 +- 修复切换列表播放歌曲时可能会出现播放的歌曲不对应的问题 +- 修复内置列表名称硬编码和语言切换显示的问题(#662) +- 修复某些情况下进播放详情页时,详情页不显示或应用界面无响应的问题 +- 修复低版本 Android 在某些情况下对 Emoji 字符编码的处理问题 + +### 变更 + +- 歌曲缓存不再存储到缓存目录 +- 不再长期缓存换源歌曲信息 + +### 其他 + +- 更新 Readme 文档,优化文案编排(#651, Thanks @3gf8jv4dv) +- 更新 Issue 模板(#652, @3gf8jv4dv) +- 更新项目文档(@3gf8jv4dv) +- 更新 React Native 到 v0.73.11 + ## [1.6.0](https://github.com/lyswhut/lx-music-mobile/compare/v1.5.0...v1.6.0) - 2024-08-24 ### 新增 diff --git a/package.json b/package.json index 3bb3529..9f149d6 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "lx-music-mobile", - "version": "1.7.0-beta.11", - "versionCode": 69, + "version": "1.7.0", + "versionCode": 70, "private": true, "scripts": { "dev": "react-native run-android --active-arch-only", diff --git a/publish/changeLog.md b/publish/changeLog.md index a9eb3bb..7b2979c 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -1,7 +1,23 @@ +落雪祝大家新年快乐! + +### 关于之前提到的新项目 + +新项目我取名叫 Any Listen,希望它能像它的名字一样让我们能到处任意听歌。 +经过一年多的开发,因各种原因,实际进度比预期的慢,但还是赶在年前发布了第一个web服务预览版,第一个版本仅支持播放服务器上的歌曲,扩展功能暂时未能开放,但已趋于完成,一两个月内可以搞定。 +目前的版本仅是“能用”的状态,因时间关系,部分UI未能重新设计,但后面会继续完善。 +该项目目前的目标用户是拥有自己服务器且上面存储有歌曲的人使用。 + +项目刚发布,文档未能完善,遇到使用问题或有任何建议欢迎提 issue 交流, +项目地址: https://github.com/any-listen/any-listen + +--- + *为了防止歌曲缓存被第三方软件当做垃圾意外清理,歌曲缓存不再存储到缓存目录。若想清理缓存,需去「设置 → 其他 → 资源缓存管理」清理。* *更新到该版本后首次播放歌曲时,会将之前的歌曲缓存迁移到新位置,需要等待的时间取决于你已缓存资源的大小。* +*感谢 @3gf8jv4dv 对 LX 系列项目翻译、文档等文案的大幅修订优化。* + ### 新增 - 新增蓝牙歌词支持,可以通过「设置 → 播放设置 → 显示蓝牙歌词」启用(#615) diff --git a/publish/version.json b/publish/version.json index e508158..7b206d6 100644 --- a/publish/version.json +++ b/publish/version.json @@ -1 +1 @@ -{"version":"1.6.0","desc":"新增\n- 新增 我的列表-歌曲右击菜单-歌曲换源 功能,换源后下次再播放该列表的该歌曲时将优先尝试播放所选源的歌曲,该功能允许你手动指定来源以解决自动换源失败或者换源不准确的问题\n- 新增 Scheme URL 调用支持,调用传参格式与PC端一致,详情看文档说明: https://lyswhut.github.io/lx-music-doc/mobile/scheme-url","history":[{"version":"1.5.0","desc":"我们发布了关于 LX Music 项目发展调整与新项目计划的说明,\n详情看: https://github.com/lyswhut/lx-music-desktop/issues/1912\n\n新增\n- 新增重复歌曲列表,可以方便移除我的列表中的重复歌曲,此列表会列出目标列表里歌曲名相同的歌曲,可在“我的列表”里的列表名菜单中使用(注:该功能与PC端的区别是可以点击歌曲名多选删除)\n- 新增打开当前歌曲详情页菜单,可以在歌曲菜单中使用\n\n修复\n- 修复潜在桌面歌词导致的崩溃问题\n\n其他\n- 更新 React native 到 v0.73.9\n- 更新 exoplayer 到 v1.4.0"},{"version":"1.4.2","desc":"我们发布了关于 LX Music 项目发展调整与新项目计划的说明,\n详情看: https://github.com/lyswhut/lx-music-desktop/issues/1912\n\n修复\n- 修复数据存储管理在移除数据时可能出现移除失败的问题"},{"version":"1.4.1","desc":"我们发布了关于 LX Music 项目发展调整与新项目计划的说明,\n详情看: https://github.com/lyswhut/lx-music-desktop/issues/1912\n\n修复\n- 修复播放详情页歌词滚动问题(#518)"},{"version":"1.4.0","desc":"我们发布了关于 LX Music 项目发展调整与新项目计划的说明,\n详情看: https://github.com/lyswhut/lx-music-desktop/issues/1912\n\n新增\n- 新增 设置-基本设置-启动后打开播放详情界面 设置,默认关闭(#502 @mingcc7)\n\n修复\n- 修复重复的数据初始化调用\n- 修复导入歌单时可能会导致歌单数据存储异常的问题(#500)\n\n变更\n- 设置-播放设置-优先播放320k音质选项改为“优先播放的音质”,允许选择更高优先播放的音质,如果歌曲及音源支持的话(#487)\n\n其他\n- 更新 React native 到 v0.73.8"},{"version":"1.3.0","desc":"新增\n- 新增棕色主题“泥牛入海”\n- 新增设置-基本设置-总是保留状态栏高度设置,如果在你的设备上出现软件可交互内容与状态栏内容显示重叠的情况,可以启用该设置以始终为系统状态栏保留空间\n- 新增在线自定义源导入功能,允许通过http/https链接导入自定义源\n\n优化\n- 不再丢弃kg源逐行歌词(@helloplhm-qwq)\n- 支持kw源排行榜显示大小(revert @Folltoshe #1460)\n- 优化本地歌曲换源匹配机制\n\n修复\n- 修复mg歌词在某些情况下获取失败的问题\n- 修复mg歌单搜索(@helloplhm-qwq)\n- 修复kg最新评论无法获取的问题(@helloplhm-qwq)\n\n其他\n- 更新 React native 到 v0.73.6"},{"version":"1.2.0","desc":"提前祝大家新年快乐!\n\n新增\n- 新增自定义源(实验性功能),调用方式与PC端一致,但需要注意的是,移动端自定义源的环境与PC端不同,某些环境API不可用,详情看自定义说明文档\n- 新增长按收藏列表名自动跳转列表顶部的功能\n- 新增实验性的添加本地歌曲到我的收藏支持,与PC端类似,在我的收藏的列表菜单中选择歌曲目录,将添加所选目录下的所有歌曲,目前支持mp3/flac/ogg/wav等格式\n- 新增歌曲标签编辑功能,允许编辑本地源且文件存在的歌曲标签信息\n- 新增动态背景,启用后将使用当前播放歌曲封面做APP背景,默认关闭,可到设置-主题设置启用\n- 新增APP全局字体阴影,默认关闭,可到设置-主题设置启用\n- 新增启用竖屏首页横向滚动设置,默认开启(原来的行为),如果你不想要竖屏的首页左右滑动则可以关闭此设置(#397)\n- 新增“使用系统文件选择器”设置,默认启用,启用该选项后,导入备份文件、自定义源等操作将不需要申请存储权限,但可能在某些系统上不可用\n- 播放详情页新增桌面歌词显示/隐藏切换按钮,长按可切换歌词锁定状态\n- 我的列表菜单列表新增“新建列表”菜单\n- 我的列表菜单列表新增“排序歌曲”菜单,可以排序所选列表内的歌曲,排序功能与PC一致\n- 添加 墨·状态栏特别版(版本号包含`sl`)的 release 构建\n\n优化\n- 添加是否忽略电池优化检查,用于提醒用户添加白名单,确保APP后台播放稳定性\n- 在设置界面返回时,不再直接返回桌面,将回到进入设置界面前的界面,在非设置界面返回时才会返回桌面\n- 更新播放栏进度条样式,进度条允许拖动调整进度\n- 优化播放详情页歌曲封面、控制按钮对各尺寸屏幕的适配,修改横屏下的控制栏按钮布局\n- 优化横竖屏界面的展示判断,现在趋于方屏的屏幕按竖屏的方式显示,横屏下的播放栏添加上一曲切歌按钮\n- 添加对wy源某些歌曲有问题的歌词进行修复(#370)\n- 文件选择器允许选择外置存储设备上的路径,添加SD卡、USB存储等外置存储设备的读写支持\n- 图片显示改用第三方的图片组件,支持gif类型的图片显示,尝试解决某些设备上图片过多导致的应用崩溃问题\n- 歌曲评论内容过长时自动折叠,需手动展开\n- 改进本地音乐在线信息的匹配机制\n- 移除播放服务唤醒锁,解决APP在空闲时仍然处于唤醒状态的问题\n- 添加创建同名列表时的二次确认\n\n修复\n- 修复主题背景覆盖不全的问题\n- 修复清理缓存后查看日志时会导致APP崩溃的问题\n- 修复临时列表变更会意外触发同步的问题\n\n变更\n- 在更低版本的安卓上启用跟随系统亮暗主题功能(#317)\n- 由于歌曲评论的图片太大占用较多资源,评论图片不再直接加载,需要点击图片区域后再加载\n- 导入文件(歌单备份、自定义源文件等)默认不再需要设备存储权限,但如果这导致在你的设备上无法选择文件,则可以关闭基本设置的“使用系统文件选择器”设置,回退到原来的文件选择方式\n\n其他\n- 移除所有内置源,由于收到腾讯投诉要求停止提供软件内置的连接到他们平台的在线播放及下载服务,所以从即日(2023年10月18日)起LX本身不再提供上述服务\n- 更新许可协议的排版,使其看起来更加清晰明了,更新数据来源原理说明\n- 更新 React native 到 v0.73.3\n- 核心播放器从 ExoPlayer 迁移到 media3 v1.2.1"},{"version":"1.1.1","desc":"落雪提前祝大家中秋快乐~🥮😘!\n\n优化\n- 通过歌曲菜单添加不喜欢歌曲时需要二次确认防止手抖\n- 减慢歌词详情页歌词滚动速度\n- 更改应用窗口大小获取方式,尝试解决在某些设备上的背景、弹出菜单显示问题\n- 优化同步功能错误消息提示,因同步服务版本不匹配导致的连接失败现在将区分提示\n\n修复\n- 修复横屏状态下的歌词滚动位置计算问题\n- 修复切歌时歌词激活行的重置问题\n- 修复更新翻译歌词、罗马音歌词设置后需重启应用才生效的问题,现在更新设置后会立即生效\n\n其他\n- 更新 React native 到 v0.72.5"},{"version":"1.1.0","desc":"目前本项目的原始发布地址只有 **GitHub** 及 **蓝奏网盘** (在设置-关于有说明),其他渠道均为第三方转载发布,可信度请自行鉴别。\n\n本项目无微信公众号之类的官方账号,也未在小米、华为、vivo等应用商店发布应用,商店内的“LX Music”、“洛雪音乐”相关的应用全部属于假冒应用,谨防被骗。\n\n本软件完全无广告且无引流(如需要加群、关注公众号之类才能使用或者升级)的行为,若你使用过程中遇到广告或者引流的信息,则表明你当前运行的软件是第三方修改版。\n\n若在升级新版本时提示签名不一致,则表明你手机上的旧版本或者将要安装的新版本中有一方是第三方修改版。\n\n若在升级新版本时提示无法降级安装,则表明你使用的是universal(通用)版安装包(安装包大小20M+),尝试使用arm64-v8a版安装包或者到GitHub下载其他版本安装包。\n\n该版本针对一加、OPPO、Pixel无法播放歌曲(提示音频加载出错,5 秒后切换下一首)或者无法完整播放歌曲的问题做了处理,但如果你使用该版本后问题依然存在,临时的解决方案是去设置-播放设置关闭“音频卸载”选项后完全重启应用\n\n不兼容性变更\n该版本修改了同步协议逻辑,同步功能至少需要PC端v2.4.0或移动端v1.1.0或同步服务v2.0.0版本才能连接使用\n\n新增\n- 新增列表设置-是否显示歌曲专辑名,默认关闭\n- 新增列表设置-是否显示歌曲时长,默认开启\n- 新增是否允许通过歌词调整播放进度功能,默认关闭,可到播放详情页右上角设置开启\n- 新增“不喜欢歌曲”功能,可以在我的列表或者在线列表内歌曲的右击菜单使用,还可以去“设置-其他”手动编辑不喜欢规则,注:“上一曲”、“下一曲”功能将跳过符合“不喜欢歌曲”规则的歌曲,但你仍可以手动播放这些歌曲\n- 新增同步功能对“不喜欢歌曲”列表的同步\n- 新增设置-播放设置-是否启用音频卸载,该设置之前默认是启用的,现在添加开关允许将其关闭,若出现播放器问题可尝试将其关闭\n- 新增设置-播放设置-自动清空已播放列表选项,默认关闭\n\n优化\n- 优化歌单列表歌单封面大小计算方式\n- 调整竖屏下的排行榜布局\n- 调整歌曲列表信息布局\n- 调整横屏下的歌曲列表为两列\n- 调整桌面歌词主题配色,增强歌词字体阴影(#276)\n- 优化数据传输逻辑,列表同步指令使用队列机制,保证列表同步操作的顺序\n- 暂停播放时播放详情歌词页不要自动滚动歌词回播放位置\n- 播放详情页歌词添加延迟滚动及着色动画\n- 优化息屏下的逻辑处理,尽量减少电量消耗\n\n修复\n- 修复wy歌单分类切换无效的问题\n- 修复因插入数字类型的ID导致其意外在末尾追加 .0 导致列表数据异常的问题,同时也可能导致同步数据丢失的问题(此问题会影响PC端,要完全修复这个问题还需要同时将PC端、同步服务更新到最新版本)\n- 修复在线列表、我的列表内的歌曲批量操作后,没有自动取消选择的问题\n- 修复tx热门评论昵称被错误切割的问题 (By: @helloplhm-qwq, @Folltoshe)\n- 修复wy源热搜词失效的问题(@Folltoshe)\n- 修复mg歌单搜索歌单播放数量显示问题\n- 修复搜索提示功能失效的问题(@Folltoshe)\n- 修复潜在导致列表数据不同步的问题\n- 修复kg无评论时的加载处理问题\n- 修复顺序播放时播放完列表的最后一首歌播放按钮状态没有更新的问题(#300)\n\n变更\n- 随机模式下,通过点击与播放列表相同的列表切歌时,将不再清空已播放列表,即已播放的歌曲不再重新参与随机,若想恢复之前的行为可以去设置-播放设置启用清空已播放列表选项\n\n其他\n- 更新 React native 到 v0.72.4"},{"version":"1.0.6","desc":"修复\n- 修复wy歌单分类切换无效的问题"},{"version":"1.0.5","desc":"优化\n- 增加kg歌单歌曲flac24bit显示(@helloplhm-qwq)\n- 增加tx源热门评论图片显示(@Folltoshe)\n- 支持wy热门评论翻页\n- 微调排行榜列表宽度及字体大小\n\n修复\n- 修复wy我喜欢列表使用token的方式导入,现在移动端可以使用token的方式导入我喜欢列表的音乐了,这意味着从PC端同步过来的歌单也可以在移动端上更新\n- 修复在线列表的多选问题\n- 修复mg搜索不显示时长的问题(@Folltoshe)\n- 修复mg评论加载失败的问题(@Folltoshe)\n- 修复在Android 5.1下报错的问题\n- 修复对存在错误时间标签的歌词的解析\n- 修复聚合搜索时未显示源名称的问题\n- 修复更改音源的列表歌曲颜色的实时更新问题\n\n其他\n- 更新kg、tx、wy等平台排行榜列表\n- 更新react native到v0.71.7"},{"version":"1.0.4","desc":"新增\n- 隐藏黑色主题背景设置,默认关闭,可以去设置-主题设置更改\n\n优化\n- 添加歌单分类、排行榜激活指示器\n- 调整设置界面竖屏下的UI布局\n\n修复\n- 修复歌单排序列表滚动重置问题\n- 修复搜索提示列表的显示时机问题\n- 就放tx源歌词获取失败的问题\n- 修复将播放速率调整为0.6后,再次打开设置面板将会导致app崩溃的问题\n- 修复播放详情页设置面板当前音量显示格式问题\n\n其他\n- 升级 React Native 到 v0.71.5"},{"version":"1.0.3","desc":"修复\n- 修复歌单详情页内歌曲最多只加载30首的问题"},{"version":"1.0.2","desc":"优化\n- 竖屏下的首页允许滑动切换页面(恢复v0.x.x的切页操作)\n- 优化更新语言、主题设置时的流畅度\n\n其他\n- 启用新架构"},{"version":"1.0.1","desc":"修复\n- 修复在线列表翻页问题"},{"version":"1.0.0","desc":"从v1.0.0起,我们发布了一个独立版的[数据同步服务](https://github.com/lyswhut/lx-music-sync-server#readme),如果你有服务器,可以将其部署到服务器上作为私人多端同步服务使用,详情看该项目说明\n\n由于该版本涉及旧版数据迁移,建议更新前先到设置-备份与恢复备份歌单\n\n不兼容性变更说明\n- 同步功能,该功能不支持与PC端v2.2.0之前的版本使用\n\n新增\n- 新增聚合搜索,注:由于这个方式需要对各个源的结果进行排序,所以需要以“歌曲名 歌手”的顺序输入(例如:突然的自我 伍佰),否则排序后的结果可能不是你想要的\n- 新增歌单搜索功能\n- 新增热门搜索显示,默认关闭,需要到设置-搜索设置开启\n- 新增搜索历史记录,默认关闭,需要到设置-搜索设置开启\n- 启动软件时自动回到上次的界面,例如上次退出软件时在我的收藏,下次启动软件时会自动进入我的收藏\n- 新增PC端所拥有的内置皮肤\n- 新增界面字体大小设置\n- 新增播放器音量大小设置,可以去播放详情页-播放器设置-音量大小更改\n- 新增播放器播放速率设置,可以去播放详情页-播放器设置-播放速率更改\n- 新增播放详情页歌词对齐方式设置,可以去播放详情页-播放器设置-歌词对齐方式更改\n- 新增是否在左侧导航栏显示返回桌面按钮设置,默认关闭,可以去设置-基本设置-是否显示返回桌面按钮开启\n- 新增是否在左侧导航栏显示退出应用按钮设置,默认关闭,可以去设置-基本设置-是否显示退出应用按钮开启\n- 支持wy源flac hires歌曲类型的显示\n- 添加kg源评论图片展示(@helloplhm-qwq)\n- 支持kg源搜索列表、排行榜flac hires歌曲类型的显示(@helloplhm-qwq, @Folltoshe)\n\n优化(界面/交互/功能)\n- 调整了首页的界面布局\n- 优化大屏幕下的字体大小及界面布局显示\n- 支持wy源flac hires歌曲类型的显示\n- 优化列表数据导入导出的性能,现在进行这些操作应该可以一下子完成且不会再冻结UI了\n- 支持kg源搜索列表flac hires歌曲类型的显示(@helloplhm-qwq)\n\n优化(程序)\n- 优化程序启动性能,优化与程序交互的流畅度\n- 重构整个程序,重新梳理了程序逻辑,使其更容易扩展及维护,将大部分代码从JavaScript迁移到TypeScript\n- 重写配置管理、列表管理功能,使其与PC端同步,更容易复用PC端的代码\n\n修复\n- 修复使用酷狗码无法打开某些类型的歌单的问题\n- 修复tx源某些歌单无法打开的问题\n\n变更\n- 原来播放详情页的歌词字体大小设置改为播放器设置\n\n其他\n- 升级React Native到v0.71.4"},{"version":"0.15.5","desc":"修复\n- 修复导入PC端v2列表文件歌曲信息转换丢失的问题\n- 修复上面问题导致的tx源评论加载失败的问题"},{"version":"0.15.4","desc":"修复\n- 修复播放详情页歌词翻译、罗马音歌词匹配问题"},{"version":"0.15.3","desc":"修复\n- 修复鸿蒙系统下的崩溃问题"},{"version":"0.15.2","desc":"修复\n- 修复潜在的歌词解析导致应用崩溃问题"},{"version":"0.15.1","desc":"修复\n- 修复某些歌曲的桌面歌词翻译或罗马音没有显示的问题\n- 修复kg某些歌单链接无法打开的问题"},{"version":"0.15.0","desc":"新增\n- 支持导入PC端v2版本的列表数据\n- 添加kg源罗马音歌词的支持\n- 支持打开波点音乐歌单(需在酷我源打开)\n\n修复\n- 支持单行多时间标签歌词解析,修复某些歌词会出现时间标签的问题\n- 修复某些类型的kg歌单无法导入的问题\n- 修复异常歌单、歌曲数据导致的崩溃问题(#157)\n\n其他\n- 升级react-native到 v0.68.5"},{"version":"0.14.3","desc":"修复\n- 修复因音源的域名到期导致的音源失效的问题"},{"version":"0.14.2","desc":"优化\n- 为tx、kw源添加 Flac 24bit 音质显示,注:由于之前没有记录此音质,所以之前收藏的歌曲信息中不包含它\n\n修复\n- 修复排行榜在旋转屏幕后,选中的榜单被重置回第一个的问题\n- 修复企鹅音乐搜索失效的问题"},{"version":"0.14.1","desc":"优化\n- 添加“弹出键盘时自动隐藏播放栏”设置,默认启用(原来的行为),若在某些设备上播放栏无法显示时则可以关闭此设置\n- 优化切歌时桌面歌词的切换动画显示\n- 暂停播放时自动隐藏桌面歌词\n- 在我的列表-列表名左侧添加了一个图标,以表示此处可以点击切换列表\n\n修复\n- 修复tx源搜索失效的问题"},{"version":"0.14.0","desc":"新增\n- 新增设置-桌面歌词-单行歌词设置,默认关闭,启用后只显示一行歌词,超出窗口宽度自动滚动到末尾\n- 新增设置-桌面歌词-显示歌词切换动画,默认启用,如果你觉得切换动画影响视觉可以将其关闭\n- 新增设置-基本设置-启动后自动播放音乐,默认关闭\n\n优化\n- 支持mg源的歌词翻译(之前添加的歌曲需要去设置清空缓存才会刷新歌词)\n- 添加歌曲列表更新操作的二次确认\n- 添加导入文件错误时的指引提示\n\n修复\n- 修复桌面歌词转繁体设置不立即生效的问题\n- 修复搜索、歌单、排行榜列表可能在切换新内容后出现上次列表内容的残留问题(#118)\n- 修复在某些系统上播放音乐会导致应用崩溃的问题(#129)\n- 修复停止播放后的播放器状态清理问题\n\n文档\n移动版文档已迁移到:"},{"version":"0.13.0","desc":"从这个版本起,你可以将桌面歌词拖动到状态栏上,然后将歌词字体调小后配合新增的歌词窗口宽度、行数设置,模拟出类似状态栏歌词的效果。\n\n如果你的设备装有Xposed框架,可以使用状态栏版(详情看GitHub置顶issue),它通过调用第三方Xposed模块【墨•状态栏歌词】的API支持来状态栏歌词(感谢@ftevxk)。\n但考虑到要依赖第三方应用,并且是Xposed模块,预计用的人会比较少,所以暂不考虑将此特性包含在正式版中。\n\n新增\n- 新增设置-播放设置-显示歌词罗马音,默认关闭,注:目前只有网易源能获取到罗马音歌词(得益于 Binaryify/NeteaseCloudMusicApi/pull/1523),如果你知道其他源的歌词罗马音获取方式,欢迎PR或开issue交流!\n- 新增黑、白桌面歌词主题\n- 桌面歌词新增窗口宽度百分比、最大歌词行数调整设置,允许将歌词拖动到刘海屏状态栏上。提示:有了这组功能你就可以模拟状态栏歌词了\n- 新增设置-播放设置-将播放的歌词转繁体功能(#114)\n\n优化\n- 允许桌面歌词拖动到状态栏上(感谢@ftevxk)\n- 允许选择更新日志弹窗里的文本内容\n- 桌面歌词的最大字体大小允许调整到500(#107)\n\n修复\n- 修复潜在的桌面歌词导致应用崩溃问题\n\n文档\n- 将歌曲添加“稍后播放”后,它们会被放在一个优先级最高的特殊队列中,点击“下一曲”时会消耗该队列中的歌曲,并且无法通过“上一曲”功能播放该队列的上一首歌曲\n- 在切歌时若不是通过“上一曲”、“下一曲”功能切歌(例如直接点击“排行榜列表”、“我的列表”中的歌曲切歌),“稍后播放”队列将会被清空\n\n其他\n- 升级React native到v0.68.2"},{"version":"0.12.0","desc":"新增\n- 为搜索、歌单、排行榜的歌曲菜单添加分享“分享歌曲”按钮\n- 新增设置-基本设置-分享设置,它用于控制歌曲菜单的分享行为,默认使用系统分享\n- 新增是否在通知栏显示歌曲图片设置,默认开启(原来的行为)\n- 新增黑色皮肤“黑灯瞎火”\n- 新增设置-基本设置-主题颜色-跟随系统亮、暗模式切换主题设置,注:此设置需要android 10或ios 13及以上的版本才支持\n\n优化\n- 现在即使切歌模式处于单曲循环、顺序播放、禁用时,手动切歌将会按照列表循环的规则处理(#69)\n- 添加定时退出计时结束后的提示\n\n修复\n- 修复wy源搜索某些歌曲时第一页之后的歌曲无法加载的问题\n- 每次启动时过滤无效的歌曲\n- 修复换源失败时的处理问题\n- 修复非循环模式下播放结束后的状态显示问题及无法重新播放的问题(#104)\n- 修复定时退出可能导致崩溃的问题\n- 修复播放详情页歌词界面在把应用切到后台再切回来会导致屏幕常亮失效的问题\n\n变更\n- 歌曲菜单的“复制歌曲名”改为“分享歌曲”,点击后可以选择第三方应用分享歌曲详情页链接\n- 已存在目录列表的歌曲再次添加时将不会变成移除\n\n其他\n- 升级react-native到 v0.68.1"},{"version":"0.11.1","desc":"修复\n- 修复播放栏在某些设备不显示的问题"},{"version":"0.11.0","desc":"新增\n- 新增“点击列表里的歌曲时自动切换到当前列表播放”设置,此功能仅对歌单、排行榜有效,默认关闭\n- 添加试听接口,这是测试接口、临时接口都不可用时最后的选择...\n\n优化\n- 过滤tx源某些不支持播放的歌曲,解决播放此类内容会导致意外的问题\n- 备份与恢复兼容单个列表文件的导入\n- 添加通知权限的检查提醒,点击“不再提示”后,将会在设置-清空缓存后才会恢复提示\n\n修复\n- 修复Android 12下的桌面歌词锁定后还是无法在应用外点击歌词后面下面的内容的问题\n\n其他\n- 升级React native到v0.67.4"},{"version":"0.10.3","desc":"优化\n- 优化kw源英文与翻译歌词的匹配\n\n修复\n- 修复桌面歌词播放器会导致应用崩溃的问题"},{"version":"0.10.2","desc":"修复\n- 修复某些系统下的虚拟导航栏会导致播放栏隐藏的问题(react-native v0.67.x导致的)\n\n其他\n- 降级react-native到 v0.66.4"},{"version":"0.10.1","desc":"优化\n- 优化通知栏的更新机制,尝试修复魅族的通知栏图片不显示的问题\n- 我的列表-列表名的右击菜单更新已收藏的在线列表时,将始终重新加载,不再使用缓存,解决在原平台更新歌单后,在LX点击更新可能看到的还是在原平台更新前的歌单的问题\n\n修复\n- 修复tx源无搜索结果的问题\n- 修复小米等设备下面的手势提示线背景颜色为黑色的问题\n\n其他\n- 升级React native到v0.67.1"},{"version":"0.10.0","desc":"新增\n- 同步功能新增对列表位置调整的支持(需v1.15.3以上的PC端版本才支持)\n- 新增播放详情页歌词字体大小调整设置,可在详情页右上角的按钮进行调整\n- 新增同步服务地址历史列表功能\n- 横屏播放详情页新增评论入口\n- 我的列表歌曲三个点的菜单新增复制歌曲名\n\n优化\n- 修改对播放模块的调用,杜绝应用显示正在播放的歌曲与实际播放歌曲不一致的问题(这是播放模块歌曲队列与应用内歌曲队列在某些情况下出现不一致时导致的)\n- 支持PC端同步功能添加对列表顺序调整的控制,确保手动调整位置后的列表与不同的电脑同步时,列表位置不会被还原\n- 调整横屏下的导航栏、播放详情页布局,提高屏幕空间利用率并使其更易操作\n- 调整歌单类别、我的列表弹出层界面\n- 播放栏移除上一曲按钮,将多出来的空间加给播放、下一曲按钮\n- 现在点击、长按播放栏歌曲标题也可以进入详情页、定位当前播放歌曲了\n\n修复\n- 修复kw源某些歌曲的歌词提取异常的问题\n\n其他\n- 升级react-native到v0.66.4"},{"version":"0.9.2","desc":"优化\n- 添加应用初始化出错时的错误捕获输出\n- 优化歌词自动换源机制\n\n修复\n- 修复因kw源歌词接口停用导致该源歌词获取失败的问题\n\n其他\n- 更新react-native到v0.66.3\n- 更新Exoplayer到v2.16.0"},{"version":"0.9.1","desc":"修复\n- 修复删除列表时会导致应用崩溃的问题\n- 修复原生代码导致的错误日志记录"},{"version":"0.9.0","desc":"新增\n- 新增歌曲评论显示,可在播放详情页进入。(与PC端一样,目前仅支持显示部分评论)\n- 新增播放、收藏整个排行榜功能,可长按排行榜名字后在弹出的菜单中操作\n- 新增单个列表导入/导出功能,可以方便分享歌曲列表,可在点击“我的列表”里的列表名右侧的按钮后弹出的菜单中使用\n- 新增删除列表前的确认弹窗,防止误删列表\n\n优化\n- 添加更多同步功能的日志记录\n\n修复\n- 修复kg源的歌单链接无法打开的问题\n- 修复同一首歌的URL、歌词等同时需要换源时的处理问题\n- 修复在排行榜页面无法时无法通过点击我的列表图标切换到我的列表的问题\n\n其他\n- 更新react-native到v0.66.1"},{"version":"0.8.3","desc":"修复\n- 修复我的列表搜索无法搜索小括号、中括号等字符,并会导致应用崩溃的问题\n- 修复使用同步功能同步完成后,列表没有被保存,导致下次再连接同步时被同步新增的歌曲被移除的问题(此问题由v0.8.2的存储切片改造引入的)\n\n其他\n- 更新React native到v0.66.0"},{"version":"0.8.2","desc":"优化\n- 缓冲进度条颜色\n- 优化数据存储,若需要存储的数据过大时会将数据切片后存储,现在存储大列表不会导致列表丢失了\n\n修复\n- 修复随机播放模式下在同列表切其他歌曲不会清空已播放列表的问题\n- 修复歌曲播放出错时的URL刷新问题"},{"version":"0.8.1","desc":"优化\n- 添加更多错误信息的记录\n\n修复\n- 修复潜在的获取缓存大小报错问题\n- 修复mg排行榜无法加载的问题\n- 修复列表导出失败时的提示信息缺失翻译的问题\n- 修复 Android 11 导入列表时,不显示备份文件的问题\n- 修复其他应用播放声音时,软件临时暂停播放后通知栏的状态仍显示正在播放的问题"},{"version":"0.8.0","desc":"新增\n- 添加对通知栏歌曲进度条的支持\n\n修复\n- 修复某些情况下桌面歌词会导致APP崩溃的问题\n- 修复从电脑浏览器复制的企鹅歌单链接无法打开的问题\n\n其他\n- 升级React native到v0.65.1\n- 升级播放模块`react-native-track-player`到v2版本,优化通知栏歌曲信息显示逻辑"},{"version":"0.7.1","desc":"修复\n- 修复无法从歌单界面打开网易歌单详情的问题"},{"version":"0.7.0","desc":"如果你喜欢并经常使用洛雪音乐,并想要第一时间尝鲜洛雪的新功能,可以加入测试企鹅群768786588,\n注意:测试版的功可能会不稳定,打算潜水的勿加。\n\n新增\n- 新增横屏状态下的播放详情页\n- 新增橙、粉、灰主题色\n- 新增桌面歌词的字体大小、透明度设置\n- 新增我的列表内歌曲搜索定位功能\n\n调整\n- 为了与搜索、歌单操作栏位置统一,现将我的列表-收藏的列表操作栏由底部挪到顶部\n\n修复\n- 修复tx源的歌词无法显示的问题\n- 修复随机播放模式下使用稍后播放功能会导致歌曲单曲循环的问题\n- 修复某些情况下桌面歌词会导致APP崩溃的问题"},{"version":"0.6.2","desc":"优化\n- 优化设置界面的输入框输入机制,现在只要键盘收起即可自动保存输入的内容\n- 添加在启用桌面歌词时对悬浮层权限的检查,这应该可以修复某些设备上点击启用桌面歌词时不显示无权限弹窗也不显示桌面歌词的情况\n\n变更\n- 不再自动聚焦定时退出、调整位置弹窗内的输入框,这应该可以修复某些设备无法在这两个地方弹出键盘的问题\n\n修复\n- 修复启用桌面歌词时的权限提示弹窗会导致应用报错的问题\n- 修复我的列表无法更新从收藏的排行榜的问题"},{"version":"0.6.1","desc":"修复\n- 修复随机播放下无法切歌的问题"},{"version":"0.6.0","desc":"新增\n- 新增局域网同步功能(实验性,首次使用前建议先备份一次列表),此功能需要配合PC端使用,移动端与PC端处在同一个局域网(路由器的网络)下时,可以多端实时同步歌曲列表,使用问题请看\"常见问题\"。\n- 新增桌面歌词\n\n优化\n- 优化退出应用的机制,现在在需要退出应用的场景将会完全退出应用\n\n修复\n- 修复某些情况下出现恢复播放信息失败的问题\n- 修复删除列表中正在播放的歌曲时会自动跳到第一首的问题\n- 修复因其他应用需要播放声音而暂停播放音乐时歌词不会暂停播放导致恢复播放后歌词与播放进度不一致的问题"},{"version":"0.5.3","desc":"修复\n- 修复歌曲缓存失效的问题"},{"version":"0.5.2","desc":"优化\n- 优化mg源打开歌单的链接兼容\n\n修复\n- 修复单曲循环播放时循环次数为偶数时歌词不重新播放的问题\n- 添加针对进入歌词界面时某些情况下会弹出`scrollToIndex out of range: requested index ...`崩溃错误弹窗的处理\n- 修复导入kg歌单最多只能加载100、500首歌曲的问题。注:现在可以加载1000+首歌曲的歌单,但出于未知原因会导致部分歌曲无法加载(可能是无版权导致的),目前酷狗码仍然最多只能加载500首歌"},{"version":"0.5.1","desc":"优化\n- 添加切换播放模式时的文字提示\n- 优化单首歌曲的添加弹窗操作,当选择当前歌曲已存在目标列表时(列表名灰色显示),会将当前歌曲从目标列表移除,否则将当前歌曲添加到目标列表,添加在弹窗内对歌曲的添加、移动、删除操作时的文字提示\n\n修复\n- 修复mg源搜索失效的问题\n\n移除\n- 因wy源的歌单列表已没有“最新”排序的选项,所以现跟随移除wy源歌单列表按“最新”排序的按钮"},{"version":"0.5.0","desc":"新增\n- 新增“其他应用播放声音时,自动暂停播放”设置,默认开启\n- 新增“添加歌曲到列表时的位置”设置,可选项为列表的“顶部”与“底部”\n- 新增“显示歌词翻译设置”,默认关闭\n\n变更\n- 添加歌曲到列表时从原来的底部改为顶部,若想要恢复原来的行为则可以去更改“添加歌曲到列表时的位置”设置项"},{"version":"0.4.2","desc":"优化\n- 优化wy源歌单导入匹配,现在存在链接外的其他字符也可以打开歌单了\n\n修复\n- 修复定时播放开启歌曲播放完毕再停止时,若倒计时已结束会导致无法播放歌曲的问题\n- 修复打开歌单失败时会导致应用崩溃的问题\n- 修复打开kw歌单失败时会无限重试的问题\n- 尝试修复弹出菜单、列表位置不正确的问题\n- 修复打开kg源歌单链接失败的问题\n- 尝试修复有时候进入播放详情歌词界面时会导致应用UI被冻结的问题\n- 修复有时候进入播放详情页时歌曲封面大小显示不正确的问题"},{"version":"0.4.1","desc":"修复\n- 修复定时播放开启歌曲播放完毕再停止时,若倒计时已结束会导致无法播放歌曲的问题"},{"version":"0.4.0","desc":"新增\n- 新增我的列表中已收藏的在线列表的更新功能。注意:这将会覆盖本地的目标列表,歌曲将被替换成最新的在线列表(与PC端的同步一样)\n- 歌曲添加、移动弹窗新增创建新列表功能\n- 新增定时退出播放\n\n优化\n- 优化应用布局对手机系统字体大小的适配\n- 调整歌单详情页,现在在歌单详情页按手机上的返回键将会返回歌单列表,而不是直接退出APP\n- 优化进入播放详情页、歌单详情页的动画效果\n\n修复\n- 尝试修复某些情况下进播放详情歌词界面时报错的问题"},{"version":"0.3.3","desc":"修复\n- 尝试修复软件启动时恢复上一次播放的歌曲可能导致软件崩溃的问题\n- 尝试修复播放详情页歌词导致UI冻结的问题\n- 修复企鹅音乐搜索歌曲没有结果的问题\n\n其他\n- 整合日志记录\n- 更新 exoPlayer 到 2.14.0"},{"version":"0.3.2","desc":"修复\n- 修复手机分享的wy歌单、某些tx、kg歌单无法打开的问题\n- 修复打开空的歌单时,点击播放全部会导致应用崩溃的问题\n- 修复企鹅音乐搜索歌曲没有结果的问题"},{"version":"0.3.1","desc":"修复\n- 修复进入播放详情歌词界面后的屏幕常亮不会被取消的问题"},{"version":"0.3.0","desc":"新增\n- 新增通过歌单链接打开歌单的功能\n\n优化\n- 切换到播放详情歌词界面时将阻止屏幕息屏\n\n修复\n- 修复一个导致崩溃日志写入文件前会导致APP崩溃的莫名其妙问题"},{"version":"0.2.0","desc":"新增\n- 新增竖屏下的播放详情页"},{"version":"0.1.7","desc":"优化\n- 修改歌单导入流程,添加对歌单导入错误的捕获\n\n修复\n- 修复在系统暗主题下,应用内文字输入框的字体会变成白色的问题"},{"version":"0.1.6","desc":"优化\n- 改进软件错误处理,添加对软件崩溃的错误日志记录,可在设置-其他查看错误日志历史。注:清理缓存时日志也将会被清理\n\n修复\n- 修复显示版本更新弹窗会导致应用崩溃的问题"},{"version":"0.1.5","desc":"修复\n- 修复修复协议弹窗可以被绕过的问题\n- 修复从在线列表使用稍后播放功能播放歌曲时,歌曲封面不显示的问题\n- 修复正在播放“稍后播放”的歌曲时,对“稍后播放”前播放的列表进行添加、删除操作会导致切歌的问题"},{"version":"0.1.4","desc":"修复\n- 修复获取在线列表时快速切换会导致APP闪退的问题"},{"version":"0.1.3","desc":"优化\n- 添加导入提示,兼容从PC端“全部数据”类型的备份文件中导入歌单\n- 添加全局异常错误捕获,现在一般情况下APP崩溃前会弹窗提示错误信息。"},{"version":"0.1.2","desc":"优化\n- 在搜索、歌单、排行榜列表多选音乐后点菜单中的播放将会把已选的歌曲添加到试听列表播放\n\n修复\n- 修复播放模块没拉取最新代码导致播放器存在无法从通知栏停止等问题"},{"version":"0.1.1","desc":"lx-music移动端v0.1.1版本发布 🎊 🎉"}]} +{"version":"1.7.0","desc":"落雪祝大家新年快乐!\n\n关于之前提到的新项目\n新项目我取名叫 Any Listen,希望它能像它的名字一样让我们能到处任意听歌。\n经过一年多的开发,因各种原因,实际进度比预期的慢,但还是赶在年前发布了第一个web服务预览版,第一个版本仅支持播放服务器上的歌曲,扩展功能暂时未能开放,但已趋于完成,一两个月内可以搞定。\n目前的版本仅是“能用”的状态,因时间关系,部分UI未能重新设计,但后面会继续完善。\n该项目目前的目标用户是拥有自己服务器且上面存储有歌曲的人使用。\n\n项目刚发布,文档未能完善,遇到使用问题或有任何建议欢迎提 issue 交流,\n项目地址: https://github.com/any-listen/any-listen\n\n---\n\n*为了防止歌曲缓存被第三方软件当做垃圾意外清理,歌曲缓存不再存储到缓存目录。若想清理缓存,需去「设置 → 其他 → 资源缓存管理」清理。*\n\n*更新到该版本后首次播放歌曲时,会将之前的歌曲缓存迁移到新位置,需要等待的时间取决于你已缓存资源的大小。*\n\n*感谢 @3gf8jv4dv 对 LX 系列项目翻译、文档等文案的大幅修订优化。*\n\n新增\n- 新增蓝牙歌词支持,可以通过「设置 → 播放设置 → 显示蓝牙歌词」启用(#615)\n- 新增繁体中文语言(#659, @3gf8jv4dv)\n- 将 LX Music 设置为「音乐应用」类,允许将 LX Music 设置为系统默认音乐播放器\n- 支持在程序外使用 LX Music 打开常见音乐文件及 `.js`、`.json`、`.lxmc` 等文件\n\n优化\n- 防止歌曲缓存被第三方软件当做垃圾意外清理\n- 优化正常播放结束时的下一首歌曲播放衔接度,在歌曲即将结束播放时将预获取下一首歌曲的播放链接,减少自动切歌时的等待时间\n- 优化歌曲换源机制,提升换源正确率\n- 首次使用的提示窗口可以通过点击背景或者返回键关闭(#577)\n- 上移 Toast 位置避免遮挡播放模式图标(#603, @sibojia)\n- 优化简体中文文案编排,大幅修订英语文案编排(#658, #660 等, @3gf8jv4dv)\n- 优化应用图标质量,在高版本系统上使用矢量图标\n\n修复\n- 修复导出文件到范围存储类型的目录时,扩展名丢失的问题\n- 修复切换列表播放歌曲时可能会出现播放的歌曲不对应的问题\n- 修复内置列表名称硬编码和语言切换显示的问题(#662)\n- 修复某些情况下进播放详情页时,详情页不显示或应用界面无响应的问题\n- 修复低版本 Android 在某些情况下对 Emoji 字符编码的处理问题\n\n变更\n- 歌曲缓存不再存储到缓存目录\n- 不再长期缓存换源歌曲信息\n\n其他\n- 更新 Readme 文档,优化文案编排(#651, Thanks @3gf8jv4dv)\n- 更新 Issue 模板(#652, @3gf8jv4dv)\n- 更新项目文档(@3gf8jv4dv)\n- 更新 React Native 到 v0.73.11","history":[{"version":"1.6.0","desc":"新增\n- 新增 我的列表-歌曲右击菜单-歌曲换源 功能,换源后下次再播放该列表的该歌曲时将优先尝试播放所选源的歌曲,该功能允许你手动指定来源以解决自动换源失败或者换源不准确的问题\n- 新增 Scheme URL 调用支持,调用传参格式与PC端一致,详情看文档说明: https://lyswhut.github.io/lx-music-doc/mobile/scheme-url"},{"version":"1.5.0","desc":"我们发布了关于 LX Music 项目发展调整与新项目计划的说明,\n详情看: https://github.com/lyswhut/lx-music-desktop/issues/1912\n\n新增\n- 新增重复歌曲列表,可以方便移除我的列表中的重复歌曲,此列表会列出目标列表里歌曲名相同的歌曲,可在“我的列表”里的列表名菜单中使用(注:该功能与PC端的区别是可以点击歌曲名多选删除)\n- 新增打开当前歌曲详情页菜单,可以在歌曲菜单中使用\n\n修复\n- 修复潜在桌面歌词导致的崩溃问题\n\n其他\n- 更新 React native 到 v0.73.9\n- 更新 exoplayer 到 v1.4.0"},{"version":"1.4.2","desc":"我们发布了关于 LX Music 项目发展调整与新项目计划的说明,\n详情看: https://github.com/lyswhut/lx-music-desktop/issues/1912\n\n修复\n- 修复数据存储管理在移除数据时可能出现移除失败的问题"},{"version":"1.4.1","desc":"我们发布了关于 LX Music 项目发展调整与新项目计划的说明,\n详情看: https://github.com/lyswhut/lx-music-desktop/issues/1912\n\n修复\n- 修复播放详情页歌词滚动问题(#518)"},{"version":"1.4.0","desc":"我们发布了关于 LX Music 项目发展调整与新项目计划的说明,\n详情看: https://github.com/lyswhut/lx-music-desktop/issues/1912\n\n新增\n- 新增 设置-基本设置-启动后打开播放详情界面 设置,默认关闭(#502 @mingcc7)\n\n修复\n- 修复重复的数据初始化调用\n- 修复导入歌单时可能会导致歌单数据存储异常的问题(#500)\n\n变更\n- 设置-播放设置-优先播放320k音质选项改为“优先播放的音质”,允许选择更高优先播放的音质,如果歌曲及音源支持的话(#487)\n\n其他\n- 更新 React native 到 v0.73.8"},{"version":"1.3.0","desc":"新增\n- 新增棕色主题“泥牛入海”\n- 新增设置-基本设置-总是保留状态栏高度设置,如果在你的设备上出现软件可交互内容与状态栏内容显示重叠的情况,可以启用该设置以始终为系统状态栏保留空间\n- 新增在线自定义源导入功能,允许通过http/https链接导入自定义源\n\n优化\n- 不再丢弃kg源逐行歌词(@helloplhm-qwq)\n- 支持kw源排行榜显示大小(revert @Folltoshe #1460)\n- 优化本地歌曲换源匹配机制\n\n修复\n- 修复mg歌词在某些情况下获取失败的问题\n- 修复mg歌单搜索(@helloplhm-qwq)\n- 修复kg最新评论无法获取的问题(@helloplhm-qwq)\n\n其他\n- 更新 React native 到 v0.73.6"},{"version":"1.2.0","desc":"提前祝大家新年快乐!\n\n新增\n- 新增自定义源(实验性功能),调用方式与PC端一致,但需要注意的是,移动端自定义源的环境与PC端不同,某些环境API不可用,详情看自定义说明文档\n- 新增长按收藏列表名自动跳转列表顶部的功能\n- 新增实验性的添加本地歌曲到我的收藏支持,与PC端类似,在我的收藏的列表菜单中选择歌曲目录,将添加所选目录下的所有歌曲,目前支持mp3/flac/ogg/wav等格式\n- 新增歌曲标签编辑功能,允许编辑本地源且文件存在的歌曲标签信息\n- 新增动态背景,启用后将使用当前播放歌曲封面做APP背景,默认关闭,可到设置-主题设置启用\n- 新增APP全局字体阴影,默认关闭,可到设置-主题设置启用\n- 新增启用竖屏首页横向滚动设置,默认开启(原来的行为),如果你不想要竖屏的首页左右滑动则可以关闭此设置(#397)\n- 新增“使用系统文件选择器”设置,默认启用,启用该选项后,导入备份文件、自定义源等操作将不需要申请存储权限,但可能在某些系统上不可用\n- 播放详情页新增桌面歌词显示/隐藏切换按钮,长按可切换歌词锁定状态\n- 我的列表菜单列表新增“新建列表”菜单\n- 我的列表菜单列表新增“排序歌曲”菜单,可以排序所选列表内的歌曲,排序功能与PC一致\n- 添加 墨·状态栏特别版(版本号包含`sl`)的 release 构建\n\n优化\n- 添加是否忽略电池优化检查,用于提醒用户添加白名单,确保APP后台播放稳定性\n- 在设置界面返回时,不再直接返回桌面,将回到进入设置界面前的界面,在非设置界面返回时才会返回桌面\n- 更新播放栏进度条样式,进度条允许拖动调整进度\n- 优化播放详情页歌曲封面、控制按钮对各尺寸屏幕的适配,修改横屏下的控制栏按钮布局\n- 优化横竖屏界面的展示判断,现在趋于方屏的屏幕按竖屏的方式显示,横屏下的播放栏添加上一曲切歌按钮\n- 添加对wy源某些歌曲有问题的歌词进行修复(#370)\n- 文件选择器允许选择外置存储设备上的路径,添加SD卡、USB存储等外置存储设备的读写支持\n- 图片显示改用第三方的图片组件,支持gif类型的图片显示,尝试解决某些设备上图片过多导致的应用崩溃问题\n- 歌曲评论内容过长时自动折叠,需手动展开\n- 改进本地音乐在线信息的匹配机制\n- 移除播放服务唤醒锁,解决APP在空闲时仍然处于唤醒状态的问题\n- 添加创建同名列表时的二次确认\n\n修复\n- 修复主题背景覆盖不全的问题\n- 修复清理缓存后查看日志时会导致APP崩溃的问题\n- 修复临时列表变更会意外触发同步的问题\n\n变更\n- 在更低版本的安卓上启用跟随系统亮暗主题功能(#317)\n- 由于歌曲评论的图片太大占用较多资源,评论图片不再直接加载,需要点击图片区域后再加载\n- 导入文件(歌单备份、自定义源文件等)默认不再需要设备存储权限,但如果这导致在你的设备上无法选择文件,则可以关闭基本设置的“使用系统文件选择器”设置,回退到原来的文件选择方式\n\n其他\n- 移除所有内置源,由于收到腾讯投诉要求停止提供软件内置的连接到他们平台的在线播放及下载服务,所以从即日(2023年10月18日)起LX本身不再提供上述服务\n- 更新许可协议的排版,使其看起来更加清晰明了,更新数据来源原理说明\n- 更新 React native 到 v0.73.3\n- 核心播放器从 ExoPlayer 迁移到 media3 v1.2.1"},{"version":"1.1.1","desc":"落雪提前祝大家中秋快乐~🥮😘!\n\n优化\n- 通过歌曲菜单添加不喜欢歌曲时需要二次确认防止手抖\n- 减慢歌词详情页歌词滚动速度\n- 更改应用窗口大小获取方式,尝试解决在某些设备上的背景、弹出菜单显示问题\n- 优化同步功能错误消息提示,因同步服务版本不匹配导致的连接失败现在将区分提示\n\n修复\n- 修复横屏状态下的歌词滚动位置计算问题\n- 修复切歌时歌词激活行的重置问题\n- 修复更新翻译歌词、罗马音歌词设置后需重启应用才生效的问题,现在更新设置后会立即生效\n\n其他\n- 更新 React native 到 v0.72.5"},{"version":"1.1.0","desc":"目前本项目的原始发布地址只有 **GitHub** 及 **蓝奏网盘** (在设置-关于有说明),其他渠道均为第三方转载发布,可信度请自行鉴别。\n\n本项目无微信公众号之类的官方账号,也未在小米、华为、vivo等应用商店发布应用,商店内的“LX Music”、“洛雪音乐”相关的应用全部属于假冒应用,谨防被骗。\n\n本软件完全无广告且无引流(如需要加群、关注公众号之类才能使用或者升级)的行为,若你使用过程中遇到广告或者引流的信息,则表明你当前运行的软件是第三方修改版。\n\n若在升级新版本时提示签名不一致,则表明你手机上的旧版本或者将要安装的新版本中有一方是第三方修改版。\n\n若在升级新版本时提示无法降级安装,则表明你使用的是universal(通用)版安装包(安装包大小20M+),尝试使用arm64-v8a版安装包或者到GitHub下载其他版本安装包。\n\n该版本针对一加、OPPO、Pixel无法播放歌曲(提示音频加载出错,5 秒后切换下一首)或者无法完整播放歌曲的问题做了处理,但如果你使用该版本后问题依然存在,临时的解决方案是去设置-播放设置关闭“音频卸载”选项后完全重启应用\n\n不兼容性变更\n该版本修改了同步协议逻辑,同步功能至少需要PC端v2.4.0或移动端v1.1.0或同步服务v2.0.0版本才能连接使用\n\n新增\n- 新增列表设置-是否显示歌曲专辑名,默认关闭\n- 新增列表设置-是否显示歌曲时长,默认开启\n- 新增是否允许通过歌词调整播放进度功能,默认关闭,可到播放详情页右上角设置开启\n- 新增“不喜欢歌曲”功能,可以在我的列表或者在线列表内歌曲的右击菜单使用,还可以去“设置-其他”手动编辑不喜欢规则,注:“上一曲”、“下一曲”功能将跳过符合“不喜欢歌曲”规则的歌曲,但你仍可以手动播放这些歌曲\n- 新增同步功能对“不喜欢歌曲”列表的同步\n- 新增设置-播放设置-是否启用音频卸载,该设置之前默认是启用的,现在添加开关允许将其关闭,若出现播放器问题可尝试将其关闭\n- 新增设置-播放设置-自动清空已播放列表选项,默认关闭\n\n优化\n- 优化歌单列表歌单封面大小计算方式\n- 调整竖屏下的排行榜布局\n- 调整歌曲列表信息布局\n- 调整横屏下的歌曲列表为两列\n- 调整桌面歌词主题配色,增强歌词字体阴影(#276)\n- 优化数据传输逻辑,列表同步指令使用队列机制,保证列表同步操作的顺序\n- 暂停播放时播放详情歌词页不要自动滚动歌词回播放位置\n- 播放详情页歌词添加延迟滚动及着色动画\n- 优化息屏下的逻辑处理,尽量减少电量消耗\n\n修复\n- 修复wy歌单分类切换无效的问题\n- 修复因插入数字类型的ID导致其意外在末尾追加 .0 导致列表数据异常的问题,同时也可能导致同步数据丢失的问题(此问题会影响PC端,要完全修复这个问题还需要同时将PC端、同步服务更新到最新版本)\n- 修复在线列表、我的列表内的歌曲批量操作后,没有自动取消选择的问题\n- 修复tx热门评论昵称被错误切割的问题 (By: @helloplhm-qwq, @Folltoshe)\n- 修复wy源热搜词失效的问题(@Folltoshe)\n- 修复mg歌单搜索歌单播放数量显示问题\n- 修复搜索提示功能失效的问题(@Folltoshe)\n- 修复潜在导致列表数据不同步的问题\n- 修复kg无评论时的加载处理问题\n- 修复顺序播放时播放完列表的最后一首歌播放按钮状态没有更新的问题(#300)\n\n变更\n- 随机模式下,通过点击与播放列表相同的列表切歌时,将不再清空已播放列表,即已播放的歌曲不再重新参与随机,若想恢复之前的行为可以去设置-播放设置启用清空已播放列表选项\n\n其他\n- 更新 React native 到 v0.72.4"},{"version":"1.0.6","desc":"修复\n- 修复wy歌单分类切换无效的问题"},{"version":"1.0.5","desc":"优化\n- 增加kg歌单歌曲flac24bit显示(@helloplhm-qwq)\n- 增加tx源热门评论图片显示(@Folltoshe)\n- 支持wy热门评论翻页\n- 微调排行榜列表宽度及字体大小\n\n修复\n- 修复wy我喜欢列表使用token的方式导入,现在移动端可以使用token的方式导入我喜欢列表的音乐了,这意味着从PC端同步过来的歌单也可以在移动端上更新\n- 修复在线列表的多选问题\n- 修复mg搜索不显示时长的问题(@Folltoshe)\n- 修复mg评论加载失败的问题(@Folltoshe)\n- 修复在Android 5.1下报错的问题\n- 修复对存在错误时间标签的歌词的解析\n- 修复聚合搜索时未显示源名称的问题\n- 修复更改音源的列表歌曲颜色的实时更新问题\n\n其他\n- 更新kg、tx、wy等平台排行榜列表\n- 更新react native到v0.71.7"},{"version":"1.0.4","desc":"新增\n- 隐藏黑色主题背景设置,默认关闭,可以去设置-主题设置更改\n\n优化\n- 添加歌单分类、排行榜激活指示器\n- 调整设置界面竖屏下的UI布局\n\n修复\n- 修复歌单排序列表滚动重置问题\n- 修复搜索提示列表的显示时机问题\n- 就放tx源歌词获取失败的问题\n- 修复将播放速率调整为0.6后,再次打开设置面板将会导致app崩溃的问题\n- 修复播放详情页设置面板当前音量显示格式问题\n\n其他\n- 升级 React Native 到 v0.71.5"},{"version":"1.0.3","desc":"修复\n- 修复歌单详情页内歌曲最多只加载30首的问题"},{"version":"1.0.2","desc":"优化\n- 竖屏下的首页允许滑动切换页面(恢复v0.x.x的切页操作)\n- 优化更新语言、主题设置时的流畅度\n\n其他\n- 启用新架构"},{"version":"1.0.1","desc":"修复\n- 修复在线列表翻页问题"},{"version":"1.0.0","desc":"从v1.0.0起,我们发布了一个独立版的[数据同步服务](https://github.com/lyswhut/lx-music-sync-server#readme),如果你有服务器,可以将其部署到服务器上作为私人多端同步服务使用,详情看该项目说明\n\n由于该版本涉及旧版数据迁移,建议更新前先到设置-备份与恢复备份歌单\n\n不兼容性变更说明\n- 同步功能,该功能不支持与PC端v2.2.0之前的版本使用\n\n新增\n- 新增聚合搜索,注:由于这个方式需要对各个源的结果进行排序,所以需要以“歌曲名 歌手”的顺序输入(例如:突然的自我 伍佰),否则排序后的结果可能不是你想要的\n- 新增歌单搜索功能\n- 新增热门搜索显示,默认关闭,需要到设置-搜索设置开启\n- 新增搜索历史记录,默认关闭,需要到设置-搜索设置开启\n- 启动软件时自动回到上次的界面,例如上次退出软件时在我的收藏,下次启动软件时会自动进入我的收藏\n- 新增PC端所拥有的内置皮肤\n- 新增界面字体大小设置\n- 新增播放器音量大小设置,可以去播放详情页-播放器设置-音量大小更改\n- 新增播放器播放速率设置,可以去播放详情页-播放器设置-播放速率更改\n- 新增播放详情页歌词对齐方式设置,可以去播放详情页-播放器设置-歌词对齐方式更改\n- 新增是否在左侧导航栏显示返回桌面按钮设置,默认关闭,可以去设置-基本设置-是否显示返回桌面按钮开启\n- 新增是否在左侧导航栏显示退出应用按钮设置,默认关闭,可以去设置-基本设置-是否显示退出应用按钮开启\n- 支持wy源flac hires歌曲类型的显示\n- 添加kg源评论图片展示(@helloplhm-qwq)\n- 支持kg源搜索列表、排行榜flac hires歌曲类型的显示(@helloplhm-qwq, @Folltoshe)\n\n优化(界面/交互/功能)\n- 调整了首页的界面布局\n- 优化大屏幕下的字体大小及界面布局显示\n- 支持wy源flac hires歌曲类型的显示\n- 优化列表数据导入导出的性能,现在进行这些操作应该可以一下子完成且不会再冻结UI了\n- 支持kg源搜索列表flac hires歌曲类型的显示(@helloplhm-qwq)\n\n优化(程序)\n- 优化程序启动性能,优化与程序交互的流畅度\n- 重构整个程序,重新梳理了程序逻辑,使其更容易扩展及维护,将大部分代码从JavaScript迁移到TypeScript\n- 重写配置管理、列表管理功能,使其与PC端同步,更容易复用PC端的代码\n\n修复\n- 修复使用酷狗码无法打开某些类型的歌单的问题\n- 修复tx源某些歌单无法打开的问题\n\n变更\n- 原来播放详情页的歌词字体大小设置改为播放器设置\n\n其他\n- 升级React Native到v0.71.4"},{"version":"0.15.5","desc":"修复\n- 修复导入PC端v2列表文件歌曲信息转换丢失的问题\n- 修复上面问题导致的tx源评论加载失败的问题"},{"version":"0.15.4","desc":"修复\n- 修复播放详情页歌词翻译、罗马音歌词匹配问题"},{"version":"0.15.3","desc":"修复\n- 修复鸿蒙系统下的崩溃问题"},{"version":"0.15.2","desc":"修复\n- 修复潜在的歌词解析导致应用崩溃问题"},{"version":"0.15.1","desc":"修复\n- 修复某些歌曲的桌面歌词翻译或罗马音没有显示的问题\n- 修复kg某些歌单链接无法打开的问题"},{"version":"0.15.0","desc":"新增\n- 支持导入PC端v2版本的列表数据\n- 添加kg源罗马音歌词的支持\n- 支持打开波点音乐歌单(需在酷我源打开)\n\n修复\n- 支持单行多时间标签歌词解析,修复某些歌词会出现时间标签的问题\n- 修复某些类型的kg歌单无法导入的问题\n- 修复异常歌单、歌曲数据导致的崩溃问题(#157)\n\n其他\n- 升级react-native到 v0.68.5"},{"version":"0.14.3","desc":"修复\n- 修复因音源的域名到期导致的音源失效的问题"},{"version":"0.14.2","desc":"优化\n- 为tx、kw源添加 Flac 24bit 音质显示,注:由于之前没有记录此音质,所以之前收藏的歌曲信息中不包含它\n\n修复\n- 修复排行榜在旋转屏幕后,选中的榜单被重置回第一个的问题\n- 修复企鹅音乐搜索失效的问题"},{"version":"0.14.1","desc":"优化\n- 添加“弹出键盘时自动隐藏播放栏”设置,默认启用(原来的行为),若在某些设备上播放栏无法显示时则可以关闭此设置\n- 优化切歌时桌面歌词的切换动画显示\n- 暂停播放时自动隐藏桌面歌词\n- 在我的列表-列表名左侧添加了一个图标,以表示此处可以点击切换列表\n\n修复\n- 修复tx源搜索失效的问题"},{"version":"0.14.0","desc":"新增\n- 新增设置-桌面歌词-单行歌词设置,默认关闭,启用后只显示一行歌词,超出窗口宽度自动滚动到末尾\n- 新增设置-桌面歌词-显示歌词切换动画,默认启用,如果你觉得切换动画影响视觉可以将其关闭\n- 新增设置-基本设置-启动后自动播放音乐,默认关闭\n\n优化\n- 支持mg源的歌词翻译(之前添加的歌曲需要去设置清空缓存才会刷新歌词)\n- 添加歌曲列表更新操作的二次确认\n- 添加导入文件错误时的指引提示\n\n修复\n- 修复桌面歌词转繁体设置不立即生效的问题\n- 修复搜索、歌单、排行榜列表可能在切换新内容后出现上次列表内容的残留问题(#118)\n- 修复在某些系统上播放音乐会导致应用崩溃的问题(#129)\n- 修复停止播放后的播放器状态清理问题\n\n文档\n移动版文档已迁移到:"},{"version":"0.13.0","desc":"从这个版本起,你可以将桌面歌词拖动到状态栏上,然后将歌词字体调小后配合新增的歌词窗口宽度、行数设置,模拟出类似状态栏歌词的效果。\n\n如果你的设备装有Xposed框架,可以使用状态栏版(详情看GitHub置顶issue),它通过调用第三方Xposed模块【墨•状态栏歌词】的API支持来状态栏歌词(感谢@ftevxk)。\n但考虑到要依赖第三方应用,并且是Xposed模块,预计用的人会比较少,所以暂不考虑将此特性包含在正式版中。\n\n新增\n- 新增设置-播放设置-显示歌词罗马音,默认关闭,注:目前只有网易源能获取到罗马音歌词(得益于 Binaryify/NeteaseCloudMusicApi/pull/1523),如果你知道其他源的歌词罗马音获取方式,欢迎PR或开issue交流!\n- 新增黑、白桌面歌词主题\n- 桌面歌词新增窗口宽度百分比、最大歌词行数调整设置,允许将歌词拖动到刘海屏状态栏上。提示:有了这组功能你就可以模拟状态栏歌词了\n- 新增设置-播放设置-将播放的歌词转繁体功能(#114)\n\n优化\n- 允许桌面歌词拖动到状态栏上(感谢@ftevxk)\n- 允许选择更新日志弹窗里的文本内容\n- 桌面歌词的最大字体大小允许调整到500(#107)\n\n修复\n- 修复潜在的桌面歌词导致应用崩溃问题\n\n文档\n- 将歌曲添加“稍后播放”后,它们会被放在一个优先级最高的特殊队列中,点击“下一曲”时会消耗该队列中的歌曲,并且无法通过“上一曲”功能播放该队列的上一首歌曲\n- 在切歌时若不是通过“上一曲”、“下一曲”功能切歌(例如直接点击“排行榜列表”、“我的列表”中的歌曲切歌),“稍后播放”队列将会被清空\n\n其他\n- 升级React native到v0.68.2"},{"version":"0.12.0","desc":"新增\n- 为搜索、歌单、排行榜的歌曲菜单添加分享“分享歌曲”按钮\n- 新增设置-基本设置-分享设置,它用于控制歌曲菜单的分享行为,默认使用系统分享\n- 新增是否在通知栏显示歌曲图片设置,默认开启(原来的行为)\n- 新增黑色皮肤“黑灯瞎火”\n- 新增设置-基本设置-主题颜色-跟随系统亮、暗模式切换主题设置,注:此设置需要android 10或ios 13及以上的版本才支持\n\n优化\n- 现在即使切歌模式处于单曲循环、顺序播放、禁用时,手动切歌将会按照列表循环的规则处理(#69)\n- 添加定时退出计时结束后的提示\n\n修复\n- 修复wy源搜索某些歌曲时第一页之后的歌曲无法加载的问题\n- 每次启动时过滤无效的歌曲\n- 修复换源失败时的处理问题\n- 修复非循环模式下播放结束后的状态显示问题及无法重新播放的问题(#104)\n- 修复定时退出可能导致崩溃的问题\n- 修复播放详情页歌词界面在把应用切到后台再切回来会导致屏幕常亮失效的问题\n\n变更\n- 歌曲菜单的“复制歌曲名”改为“分享歌曲”,点击后可以选择第三方应用分享歌曲详情页链接\n- 已存在目录列表的歌曲再次添加时将不会变成移除\n\n其他\n- 升级react-native到 v0.68.1"},{"version":"0.11.1","desc":"修复\n- 修复播放栏在某些设备不显示的问题"},{"version":"0.11.0","desc":"新增\n- 新增“点击列表里的歌曲时自动切换到当前列表播放”设置,此功能仅对歌单、排行榜有效,默认关闭\n- 添加试听接口,这是测试接口、临时接口都不可用时最后的选择...\n\n优化\n- 过滤tx源某些不支持播放的歌曲,解决播放此类内容会导致意外的问题\n- 备份与恢复兼容单个列表文件的导入\n- 添加通知权限的检查提醒,点击“不再提示”后,将会在设置-清空缓存后才会恢复提示\n\n修复\n- 修复Android 12下的桌面歌词锁定后还是无法在应用外点击歌词后面下面的内容的问题\n\n其他\n- 升级React native到v0.67.4"},{"version":"0.10.3","desc":"优化\n- 优化kw源英文与翻译歌词的匹配\n\n修复\n- 修复桌面歌词播放器会导致应用崩溃的问题"},{"version":"0.10.2","desc":"修复\n- 修复某些系统下的虚拟导航栏会导致播放栏隐藏的问题(react-native v0.67.x导致的)\n\n其他\n- 降级react-native到 v0.66.4"},{"version":"0.10.1","desc":"优化\n- 优化通知栏的更新机制,尝试修复魅族的通知栏图片不显示的问题\n- 我的列表-列表名的右击菜单更新已收藏的在线列表时,将始终重新加载,不再使用缓存,解决在原平台更新歌单后,在LX点击更新可能看到的还是在原平台更新前的歌单的问题\n\n修复\n- 修复tx源无搜索结果的问题\n- 修复小米等设备下面的手势提示线背景颜色为黑色的问题\n\n其他\n- 升级React native到v0.67.1"},{"version":"0.10.0","desc":"新增\n- 同步功能新增对列表位置调整的支持(需v1.15.3以上的PC端版本才支持)\n- 新增播放详情页歌词字体大小调整设置,可在详情页右上角的按钮进行调整\n- 新增同步服务地址历史列表功能\n- 横屏播放详情页新增评论入口\n- 我的列表歌曲三个点的菜单新增复制歌曲名\n\n优化\n- 修改对播放模块的调用,杜绝应用显示正在播放的歌曲与实际播放歌曲不一致的问题(这是播放模块歌曲队列与应用内歌曲队列在某些情况下出现不一致时导致的)\n- 支持PC端同步功能添加对列表顺序调整的控制,确保手动调整位置后的列表与不同的电脑同步时,列表位置不会被还原\n- 调整横屏下的导航栏、播放详情页布局,提高屏幕空间利用率并使其更易操作\n- 调整歌单类别、我的列表弹出层界面\n- 播放栏移除上一曲按钮,将多出来的空间加给播放、下一曲按钮\n- 现在点击、长按播放栏歌曲标题也可以进入详情页、定位当前播放歌曲了\n\n修复\n- 修复kw源某些歌曲的歌词提取异常的问题\n\n其他\n- 升级react-native到v0.66.4"},{"version":"0.9.2","desc":"优化\n- 添加应用初始化出错时的错误捕获输出\n- 优化歌词自动换源机制\n\n修复\n- 修复因kw源歌词接口停用导致该源歌词获取失败的问题\n\n其他\n- 更新react-native到v0.66.3\n- 更新Exoplayer到v2.16.0"},{"version":"0.9.1","desc":"修复\n- 修复删除列表时会导致应用崩溃的问题\n- 修复原生代码导致的错误日志记录"},{"version":"0.9.0","desc":"新增\n- 新增歌曲评论显示,可在播放详情页进入。(与PC端一样,目前仅支持显示部分评论)\n- 新增播放、收藏整个排行榜功能,可长按排行榜名字后在弹出的菜单中操作\n- 新增单个列表导入/导出功能,可以方便分享歌曲列表,可在点击“我的列表”里的列表名右侧的按钮后弹出的菜单中使用\n- 新增删除列表前的确认弹窗,防止误删列表\n\n优化\n- 添加更多同步功能的日志记录\n\n修复\n- 修复kg源的歌单链接无法打开的问题\n- 修复同一首歌的URL、歌词等同时需要换源时的处理问题\n- 修复在排行榜页面无法时无法通过点击我的列表图标切换到我的列表的问题\n\n其他\n- 更新react-native到v0.66.1"},{"version":"0.8.3","desc":"修复\n- 修复我的列表搜索无法搜索小括号、中括号等字符,并会导致应用崩溃的问题\n- 修复使用同步功能同步完成后,列表没有被保存,导致下次再连接同步时被同步新增的歌曲被移除的问题(此问题由v0.8.2的存储切片改造引入的)\n\n其他\n- 更新React native到v0.66.0"},{"version":"0.8.2","desc":"优化\n- 缓冲进度条颜色\n- 优化数据存储,若需要存储的数据过大时会将数据切片后存储,现在存储大列表不会导致列表丢失了\n\n修复\n- 修复随机播放模式下在同列表切其他歌曲不会清空已播放列表的问题\n- 修复歌曲播放出错时的URL刷新问题"},{"version":"0.8.1","desc":"优化\n- 添加更多错误信息的记录\n\n修复\n- 修复潜在的获取缓存大小报错问题\n- 修复mg排行榜无法加载的问题\n- 修复列表导出失败时的提示信息缺失翻译的问题\n- 修复 Android 11 导入列表时,不显示备份文件的问题\n- 修复其他应用播放声音时,软件临时暂停播放后通知栏的状态仍显示正在播放的问题"},{"version":"0.8.0","desc":"新增\n- 添加对通知栏歌曲进度条的支持\n\n修复\n- 修复某些情况下桌面歌词会导致APP崩溃的问题\n- 修复从电脑浏览器复制的企鹅歌单链接无法打开的问题\n\n其他\n- 升级React native到v0.65.1\n- 升级播放模块`react-native-track-player`到v2版本,优化通知栏歌曲信息显示逻辑"},{"version":"0.7.1","desc":"修复\n- 修复无法从歌单界面打开网易歌单详情的问题"},{"version":"0.7.0","desc":"如果你喜欢并经常使用洛雪音乐,并想要第一时间尝鲜洛雪的新功能,可以加入测试企鹅群768786588,\n注意:测试版的功可能会不稳定,打算潜水的勿加。\n\n新增\n- 新增横屏状态下的播放详情页\n- 新增橙、粉、灰主题色\n- 新增桌面歌词的字体大小、透明度设置\n- 新增我的列表内歌曲搜索定位功能\n\n调整\n- 为了与搜索、歌单操作栏位置统一,现将我的列表-收藏的列表操作栏由底部挪到顶部\n\n修复\n- 修复tx源的歌词无法显示的问题\n- 修复随机播放模式下使用稍后播放功能会导致歌曲单曲循环的问题\n- 修复某些情况下桌面歌词会导致APP崩溃的问题"},{"version":"0.6.2","desc":"优化\n- 优化设置界面的输入框输入机制,现在只要键盘收起即可自动保存输入的内容\n- 添加在启用桌面歌词时对悬浮层权限的检查,这应该可以修复某些设备上点击启用桌面歌词时不显示无权限弹窗也不显示桌面歌词的情况\n\n变更\n- 不再自动聚焦定时退出、调整位置弹窗内的输入框,这应该可以修复某些设备无法在这两个地方弹出键盘的问题\n\n修复\n- 修复启用桌面歌词时的权限提示弹窗会导致应用报错的问题\n- 修复我的列表无法更新从收藏的排行榜的问题"},{"version":"0.6.1","desc":"修复\n- 修复随机播放下无法切歌的问题"},{"version":"0.6.0","desc":"新增\n- 新增局域网同步功能(实验性,首次使用前建议先备份一次列表),此功能需要配合PC端使用,移动端与PC端处在同一个局域网(路由器的网络)下时,可以多端实时同步歌曲列表,使用问题请看\"常见问题\"。\n- 新增桌面歌词\n\n优化\n- 优化退出应用的机制,现在在需要退出应用的场景将会完全退出应用\n\n修复\n- 修复某些情况下出现恢复播放信息失败的问题\n- 修复删除列表中正在播放的歌曲时会自动跳到第一首的问题\n- 修复因其他应用需要播放声音而暂停播放音乐时歌词不会暂停播放导致恢复播放后歌词与播放进度不一致的问题"},{"version":"0.5.3","desc":"修复\n- 修复歌曲缓存失效的问题"},{"version":"0.5.2","desc":"优化\n- 优化mg源打开歌单的链接兼容\n\n修复\n- 修复单曲循环播放时循环次数为偶数时歌词不重新播放的问题\n- 添加针对进入歌词界面时某些情况下会弹出`scrollToIndex out of range: requested index ...`崩溃错误弹窗的处理\n- 修复导入kg歌单最多只能加载100、500首歌曲的问题。注:现在可以加载1000+首歌曲的歌单,但出于未知原因会导致部分歌曲无法加载(可能是无版权导致的),目前酷狗码仍然最多只能加载500首歌"},{"version":"0.5.1","desc":"优化\n- 添加切换播放模式时的文字提示\n- 优化单首歌曲的添加弹窗操作,当选择当前歌曲已存在目标列表时(列表名灰色显示),会将当前歌曲从目标列表移除,否则将当前歌曲添加到目标列表,添加在弹窗内对歌曲的添加、移动、删除操作时的文字提示\n\n修复\n- 修复mg源搜索失效的问题\n\n移除\n- 因wy源的歌单列表已没有“最新”排序的选项,所以现跟随移除wy源歌单列表按“最新”排序的按钮"},{"version":"0.5.0","desc":"新增\n- 新增“其他应用播放声音时,自动暂停播放”设置,默认开启\n- 新增“添加歌曲到列表时的位置”设置,可选项为列表的“顶部”与“底部”\n- 新增“显示歌词翻译设置”,默认关闭\n\n变更\n- 添加歌曲到列表时从原来的底部改为顶部,若想要恢复原来的行为则可以去更改“添加歌曲到列表时的位置”设置项"},{"version":"0.4.2","desc":"优化\n- 优化wy源歌单导入匹配,现在存在链接外的其他字符也可以打开歌单了\n\n修复\n- 修复定时播放开启歌曲播放完毕再停止时,若倒计时已结束会导致无法播放歌曲的问题\n- 修复打开歌单失败时会导致应用崩溃的问题\n- 修复打开kw歌单失败时会无限重试的问题\n- 尝试修复弹出菜单、列表位置不正确的问题\n- 修复打开kg源歌单链接失败的问题\n- 尝试修复有时候进入播放详情歌词界面时会导致应用UI被冻结的问题\n- 修复有时候进入播放详情页时歌曲封面大小显示不正确的问题"},{"version":"0.4.1","desc":"修复\n- 修复定时播放开启歌曲播放完毕再停止时,若倒计时已结束会导致无法播放歌曲的问题"},{"version":"0.4.0","desc":"新增\n- 新增我的列表中已收藏的在线列表的更新功能。注意:这将会覆盖本地的目标列表,歌曲将被替换成最新的在线列表(与PC端的同步一样)\n- 歌曲添加、移动弹窗新增创建新列表功能\n- 新增定时退出播放\n\n优化\n- 优化应用布局对手机系统字体大小的适配\n- 调整歌单详情页,现在在歌单详情页按手机上的返回键将会返回歌单列表,而不是直接退出APP\n- 优化进入播放详情页、歌单详情页的动画效果\n\n修复\n- 尝试修复某些情况下进播放详情歌词界面时报错的问题"},{"version":"0.3.3","desc":"修复\n- 尝试修复软件启动时恢复上一次播放的歌曲可能导致软件崩溃的问题\n- 尝试修复播放详情页歌词导致UI冻结的问题\n- 修复企鹅音乐搜索歌曲没有结果的问题\n\n其他\n- 整合日志记录\n- 更新 exoPlayer 到 2.14.0"},{"version":"0.3.2","desc":"修复\n- 修复手机分享的wy歌单、某些tx、kg歌单无法打开的问题\n- 修复打开空的歌单时,点击播放全部会导致应用崩溃的问题\n- 修复企鹅音乐搜索歌曲没有结果的问题"},{"version":"0.3.1","desc":"修复\n- 修复进入播放详情歌词界面后的屏幕常亮不会被取消的问题"},{"version":"0.3.0","desc":"新增\n- 新增通过歌单链接打开歌单的功能\n\n优化\n- 切换到播放详情歌词界面时将阻止屏幕息屏\n\n修复\n- 修复一个导致崩溃日志写入文件前会导致APP崩溃的莫名其妙问题"},{"version":"0.2.0","desc":"新增\n- 新增竖屏下的播放详情页"},{"version":"0.1.7","desc":"优化\n- 修改歌单导入流程,添加对歌单导入错误的捕获\n\n修复\n- 修复在系统暗主题下,应用内文字输入框的字体会变成白色的问题"},{"version":"0.1.6","desc":"优化\n- 改进软件错误处理,添加对软件崩溃的错误日志记录,可在设置-其他查看错误日志历史。注:清理缓存时日志也将会被清理\n\n修复\n- 修复显示版本更新弹窗会导致应用崩溃的问题"},{"version":"0.1.5","desc":"修复\n- 修复修复协议弹窗可以被绕过的问题\n- 修复从在线列表使用稍后播放功能播放歌曲时,歌曲封面不显示的问题\n- 修复正在播放“稍后播放”的歌曲时,对“稍后播放”前播放的列表进行添加、删除操作会导致切歌的问题"},{"version":"0.1.4","desc":"修复\n- 修复获取在线列表时快速切换会导致APP闪退的问题"},{"version":"0.1.3","desc":"优化\n- 添加导入提示,兼容从PC端“全部数据”类型的备份文件中导入歌单\n- 添加全局异常错误捕获,现在一般情况下APP崩溃前会弹窗提示错误信息。"},{"version":"0.1.2","desc":"优化\n- 在搜索、歌单、排行榜列表多选音乐后点菜单中的播放将会把已选的歌曲添加到试听列表播放\n\n修复\n- 修复播放模块没拉取最新代码导致播放器存在无法从通知栏停止等问题"},{"version":"0.1.1","desc":"lx-music移动端v0.1.1版本发布 🎊 🎉"}]} From f7375c711a29c76b5875210d23b3c0a9210705a4 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Mon, 27 Jan 2025 00:54:00 +0800 Subject: [PATCH 22/26] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=9E=84=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/release.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8a0d5dd..c99ddbc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -144,7 +144,8 @@ jobs: Release: name: Release runs-on: ubuntu-latest - needs: [Android, Android_SL] + # needs: [Android, Android_SL] + needs: [Android] steps: - name: Check out git repository uses: actions/checkout@v4 @@ -161,6 +162,7 @@ jobs: cd artifacts md5sum *.apk >> ../publish/changeLog.md echo -e '```\n' >> ../publish/changeLog.md + echo -e '\n[软件安装包说明](https://lyswhut.github.io/lx-music-doc/download#%E8%BD%AF%E4%BB%B6%E5%AE%89%E8%A3%85%E5%8C%85%E8%AF%B4%E6%98%8E)\n' >> ../publish/changeLog.md - name: Get package version run: node -p -e '`PACKAGE_VERSION=${require("./package.json").version}`' >> $GITHUB_ENV From d0350a44684b6562dfbfcb0eb4cd5e06f4828683 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Tue, 4 Feb 2025 23:20:04 +0800 Subject: [PATCH 23/26] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20tx=20=E6=AD=8C?= =?UTF-8?q?=E5=8D=95=E6=90=9C=E7=B4=A2=E5=90=8D=E5=AD=97=E3=80=81=E6=8F=8F?= =?UTF-8?q?=E8=BF=B0=E5=87=BA=E7=8E=B0=E4=B9=B1=E7=A0=81=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 33 +++++++++++++- package.json | 2 + publish/changeLog.md | 55 +----------------------- src/screens/SonglistDetail/MusicList.tsx | 6 +-- src/utils/common.ts | 12 ------ src/utils/index.ts | 6 +++ src/utils/musicSdk/tx/songList.js | 8 ++-- src/utils/musicSdk/utils.js | 2 +- 8 files changed, 48 insertions(+), 76 deletions(-) diff --git a/package-lock.json b/package-lock.json index 04bd163..3944172 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,18 +1,19 @@ { "name": "lx-music-mobile", - "version": "1.7.0-beta.11", + "version": "1.7.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "lx-music-mobile", - "version": "1.7.0-beta.11", + "version": "1.7.0", "license": "Apache-2.0", "dependencies": { "@craftzdog/react-native-buffer": "^6.0.5", "@react-native-async-storage/async-storage": "^2.1.0", "@react-native-clipboard/clipboard": "^1.16.1", "@react-native-community/slider": "^4.5.5", + "he": "^1.2.0", "iconv-lite": "^0.6.3", "lrc-file-parser": "^2.4.1", "message2call": "^0.1.3", @@ -41,6 +42,7 @@ "@react-native/metro-config": "^0.74.88", "@react-native/typescript-config": "^0.74.88", "@tsconfig/react-native": "^3.0.5", + "@types/he": "^1.2.3", "@types/react": "^18.3.18", "@types/react-native": "^0.72.8", "@types/react-native-background-timer": "^2.0.2", @@ -4224,6 +4226,13 @@ "integrity": "sha512-0+pmYzHccvwWpFz2Tv5AJxp6UroLALmAy+SX34tKlwaCie1mNbtCv6uOJp7x8pKchgNA9/n6BGrx7uLQvw8p9A==", "dev": true }, + "node_modules/@types/he": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/he/-/he-1.2.3.tgz", + "integrity": "sha512-q67/qwlxblDzEDvzHhVkwc1gzVWxaNxeyHUBF4xElrvjL11O+Ytze+1fGpBHlr/H9myiBUaUXNnNPmBHxxfAcA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", @@ -7904,6 +7913,15 @@ "node": ">= 0.4" } }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, "node_modules/hermes-estree": { "version": "0.15.0", "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.15.0.tgz", @@ -16484,6 +16502,12 @@ "integrity": "sha512-0+pmYzHccvwWpFz2Tv5AJxp6UroLALmAy+SX34tKlwaCie1mNbtCv6uOJp7x8pKchgNA9/n6BGrx7uLQvw8p9A==", "dev": true }, + "@types/he": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/he/-/he-1.2.3.tgz", + "integrity": "sha512-q67/qwlxblDzEDvzHhVkwc1gzVWxaNxeyHUBF4xElrvjL11O+Ytze+1fGpBHlr/H9myiBUaUXNnNPmBHxxfAcA==", + "dev": true + }, "@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", @@ -19136,6 +19160,11 @@ "function-bind": "^1.1.2" } }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, "hermes-estree": { "version": "0.15.0", "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.15.0.tgz", diff --git a/package.json b/package.json index 9f149d6..4601755 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,7 @@ "@react-native-async-storage/async-storage": "^2.1.0", "@react-native-clipboard/clipboard": "^1.16.1", "@react-native-community/slider": "^4.5.5", + "he": "^1.2.0", "iconv-lite": "^0.6.3", "lrc-file-parser": "^2.4.1", "message2call": "^0.1.3", @@ -76,6 +77,7 @@ "@react-native/metro-config": "^0.74.88", "@react-native/typescript-config": "^0.74.88", "@tsconfig/react-native": "^3.0.5", + "@types/he": "^1.2.3", "@types/react": "^18.3.18", "@types/react-native": "^0.72.8", "@types/react-native-background-timer": "^2.0.2", diff --git a/publish/changeLog.md b/publish/changeLog.md index 7b2979c..c927dd2 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -1,56 +1,3 @@ -落雪祝大家新年快乐! - -### 关于之前提到的新项目 - -新项目我取名叫 Any Listen,希望它能像它的名字一样让我们能到处任意听歌。 -经过一年多的开发,因各种原因,实际进度比预期的慢,但还是赶在年前发布了第一个web服务预览版,第一个版本仅支持播放服务器上的歌曲,扩展功能暂时未能开放,但已趋于完成,一两个月内可以搞定。 -目前的版本仅是“能用”的状态,因时间关系,部分UI未能重新设计,但后面会继续完善。 -该项目目前的目标用户是拥有自己服务器且上面存储有歌曲的人使用。 - -项目刚发布,文档未能完善,遇到使用问题或有任何建议欢迎提 issue 交流, -项目地址: https://github.com/any-listen/any-listen - ---- - -*为了防止歌曲缓存被第三方软件当做垃圾意外清理,歌曲缓存不再存储到缓存目录。若想清理缓存,需去「设置 → 其他 → 资源缓存管理」清理。* - -*更新到该版本后首次播放歌曲时,会将之前的歌曲缓存迁移到新位置,需要等待的时间取决于你已缓存资源的大小。* - -*感谢 @3gf8jv4dv 对 LX 系列项目翻译、文档等文案的大幅修订优化。* - -### 新增 - -- 新增蓝牙歌词支持,可以通过「设置 → 播放设置 → 显示蓝牙歌词」启用(#615) -- 新增繁体中文语言(#659, @3gf8jv4dv) -- 将 LX Music 设置为「音乐应用」类,允许将 LX Music 设置为系统默认音乐播放器 -- 支持在程序外使用 LX Music 打开常见音乐文件及 `.js`、`.json`、`.lxmc` 等文件 - -### 优化 - -- 防止歌曲缓存被第三方软件当做垃圾意外清理 -- 优化正常播放结束时的下一首歌曲播放衔接度,在歌曲即将结束播放时将预获取下一首歌曲的播放链接,减少自动切歌时的等待时间 -- 优化歌曲换源机制,提升换源正确率 -- 首次使用的提示窗口可以通过点击背景或者返回键关闭(#577) -- 上移 Toast 位置避免遮挡播放模式图标(#603, @sibojia) -- 优化简体中文文案编排,大幅修订英语文案编排(#658, #660 等, @3gf8jv4dv) -- 优化应用图标质量,在高版本系统上使用矢量图标 - ### 修复 -- 修复导出文件到范围存储类型的目录时,扩展名丢失的问题 -- 修复切换列表播放歌曲时可能会出现播放的歌曲不对应的问题 -- 修复内置列表名称硬编码和语言切换显示的问题(#662) -- 修复某些情况下进播放详情页时,详情页不显示或应用界面无响应的问题 -- 修复低版本 Android 在某些情况下对 Emoji 字符编码的处理问题 - -### 变更 - -- 歌曲缓存不再存储到缓存目录 -- 不再长期缓存换源歌曲信息 - -### 其他 - -- 更新 Readme 文档,优化文案编排(#651, Thanks @3gf8jv4dv) -- 更新 Issue 模板(#652, @3gf8jv4dv) -- 更新项目文档(@3gf8jv4dv) -- 更新 React Native 到 v0.73.11 +- 修复 tx 歌单搜索名字、描述出现乱码的问题 diff --git a/src/screens/SonglistDetail/MusicList.tsx b/src/screens/SonglistDetail/MusicList.tsx index 267898e..d301139 100644 --- a/src/screens/SonglistDetail/MusicList.tsx +++ b/src/screens/SonglistDetail/MusicList.tsx @@ -31,7 +31,7 @@ export default forwardRef(({ componentId }, ref) headerRef.current?.setInfo({ name: (info.name || listDetailInfo.info.name) ?? '', // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing - desc: info.desc || listDetailInfo.info.desc || '', + desc: listDetailInfo.info.desc || info.desc || '', playCount: (info.play_count ?? listDetailInfo.info.play_count) ?? '', imgUrl: info.img ?? listDetailInfo.info.img, }) @@ -43,7 +43,7 @@ export default forwardRef(({ componentId }, ref) headerRef.current?.setInfo({ name: (info.name || listDetailInfo.info.name) ?? '', // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing - desc: info.desc || listDetailInfo.info.desc || '', + desc: listDetailInfo.info.desc || info.desc || '', playCount: (info.play_count ?? listDetailInfo.info.play_count) ?? '', imgUrl: info.img ?? listDetailInfo.info.img, }) @@ -54,7 +54,7 @@ export default forwardRef(({ componentId }, ref) headerRef.current?.setInfo({ name: (info.name || listDetailInfo.info.name) ?? '', // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing - desc: info.desc || listDetailInfo.info.desc || '', + desc: listDetailInfo.info.desc || info.desc || '', playCount: (info.play_count ?? listDetailInfo.info.play_count) ?? '', imgUrl: info.img ?? listDetailInfo.info.img, }) diff --git a/src/utils/common.ts b/src/utils/common.ts index 8649358..e40ea37 100644 --- a/src/utils/common.ts +++ b/src/utils/common.ts @@ -71,18 +71,6 @@ export const formatPlayTime2 = (time: number) => { } -const encodeNames = { - ' ': ' ', - '&': '&', - '<': '<', - '>': '>', - '"': '"', - ''': "'", - ''': "'", -} as const -export const decodeName = (str: string | null = '') => { - return str?.replace(/(?:&|<|>|"|'|'| )/gm, (s: string) => encodeNames[s as keyof typeof encodeNames]) ?? '' -} export const isUrl = (path: string) => /https?:\/\//.test(path) diff --git a/src/utils/index.ts b/src/utils/index.ts index 63fc3ed..b2c7ba1 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1,4 +1,5 @@ import { dateFormat } from './common' +import he from 'he' export { tranditionalize as langS2T } from '@/utils/simplify-chinese-main' @@ -192,3 +193,8 @@ export const formatPlayCount = (num: number): string => { if (num > 10000) return `${Math.trunc(num / 1000) / 10}万` return String(num) } + +export const decodeName = (str: string | null = '') => { + if (!str) return '' + return he.decode(str) +} diff --git a/src/utils/musicSdk/tx/songList.js b/src/utils/musicSdk/tx/songList.js index aa6c163..f118e4e 100644 --- a/src/utils/musicSdk/tx/songList.js +++ b/src/utils/musicSdk/tx/songList.js @@ -139,7 +139,7 @@ export default { img: item.cover_url_medium, // grade: item.favorcnt / 10, total: item.song_ids?.length, - desc: item.desc, + desc: decodeName(item.desc).replace(/
/g, '\n'), source: 'tx', })), total: data.total, @@ -307,13 +307,13 @@ export default { return { play_count: formatPlayCount(item.listennum), id: String(item.dissid), - author: item.creator.name, - name: item.dissname, + author: decodeName(item.creator.name), + name: decodeName(item.dissname), time: dateFormat(item.createtime, 'Y-M-D'), img: item.imgurl, // grade: item.favorcnt / 10, total: item.song_count, - desc: item.introduction, + desc: decodeName(decodeName(item.introduction)).replace(/
/g, '\n'), source: 'tx', } }), diff --git a/src/utils/musicSdk/utils.js b/src/utils/musicSdk/utils.js index 167c531..ccefff9 100644 --- a/src/utils/musicSdk/utils.js +++ b/src/utils/musicSdk/utils.js @@ -1,5 +1,5 @@ import { stringMd5 } from 'react-native-quick-md5' -import { decodeName } from '../common' +import { decodeName } from '../index' /** * 获取音乐音质 From 27aa12b00f6c1aee6f747a9f1b633f56e5bc24db Mon Sep 17 00:00:00 2001 From: lyswhut Date: Tue, 4 Feb 2025 23:29:26 +0800 Subject: [PATCH 24/26] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BE=9D=E8=B5=96&?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=8F=B7=EF=BC=881.7.1-beta.0=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 128 +++++++++++++++++++++++----------------------- package.json | 10 ++-- 2 files changed, 69 insertions(+), 69 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3944172..07041c2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16 +1,16 @@ { "name": "lx-music-mobile", - "version": "1.7.0", + "version": "1.7.1-beta.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "lx-music-mobile", - "version": "1.7.0", + "version": "1.7.1-beta.0", "license": "Apache-2.0", "dependencies": { "@craftzdog/react-native-buffer": "^6.0.5", - "@react-native-async-storage/async-storage": "^2.1.0", + "@react-native-async-storage/async-storage": "^2.1.1", "@react-native-clipboard/clipboard": "^1.16.1", "@react-native-community/slider": "^4.5.5", "he": "^1.2.0", @@ -38,9 +38,9 @@ "@babel/plugin-proposal-export-namespace-from": "^7.18.9", "@babel/preset-env": "^7.26.7", "@babel/runtime": "^7.26.7", - "@react-native/babel-preset": "^0.74.88", - "@react-native/metro-config": "^0.74.88", - "@react-native/typescript-config": "^0.74.88", + "@react-native/babel-preset": "^0.74.89", + "@react-native/metro-config": "^0.74.89", + "@react-native/typescript-config": "^0.74.89", "@tsconfig/react-native": "^3.0.5", "@types/he": "^1.2.3", "@types/react": "^18.3.18", @@ -2720,9 +2720,9 @@ } }, "node_modules/@react-native-async-storage/async-storage": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-2.1.0.tgz", - "integrity": "sha512-eAGQGPTAuFNEoIQSB5j2Jh1zm5NPyBRTfjRMfCN0W1OakC5WIB5vsDyIQhUweKN9XOE2/V07lqTMGsL0dGXNkA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-2.1.1.tgz", + "integrity": "sha512-UqlnxddwM3rlCHvteFz+HpIXjqhQM7GkBgVQ9sMvMdl8QVOJQDjG7BODCUvabysMDw+9QfMFlLiOI8U6c0VzzQ==", "license": "MIT", "dependencies": { "merge-options": "^3.0.4" @@ -3774,9 +3774,9 @@ } }, "node_modules/@react-native/babel-preset": { - "version": "0.74.88", - "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.74.88.tgz", - "integrity": "sha512-SQODiFGlyblFTvdvePUDrQ+qlSzhcOm7It/yW2CVKxw5zRUf50+Cj3DBkRFhQDqF3ri2EnWsLnJ3oNE7hqDUxg==", + "version": "0.74.89", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.74.89.tgz", + "integrity": "sha512-JVI3sjnQxOjqVhERX19XYEc2HPmf0nFFmhF3CAvnxo+11GrP/eOqa1q+mAE0sXueVy+/rVjwohOxKWgwoQqtIA==", "dev": true, "license": "MIT", "dependencies": { @@ -3820,7 +3820,7 @@ "@babel/plugin-transform-typescript": "^7.5.0", "@babel/plugin-transform-unicode-regex": "^7.0.0", "@babel/template": "^7.0.0", - "@react-native/babel-plugin-codegen": "0.74.88", + "@react-native/babel-plugin-codegen": "0.74.89", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" }, @@ -3832,22 +3832,22 @@ } }, "node_modules/@react-native/babel-preset/node_modules/@react-native/babel-plugin-codegen": { - "version": "0.74.88", - "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.88.tgz", - "integrity": "sha512-hul4gPU09q7K0amhzhZnG3EVxeCXjP2l1x/zdgtliRRB8Nq7Za8YkM7dy84X+Vv4UC9G1nzxIbibsKeLsY1N4A==", + "version": "0.74.89", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.89.tgz", + "integrity": "sha512-E1SF2eHf2AZ0JPZZC54v6xlL2ZonMoUk0wvo3NtllvMDGn6LqlO5i4rphz3QOtX5OZa6/PhvadqLd0otmKXgIg==", "dev": true, "license": "MIT", "dependencies": { - "@react-native/codegen": "0.74.88" + "@react-native/codegen": "0.74.89" }, "engines": { "node": ">=18" } }, "node_modules/@react-native/babel-preset/node_modules/@react-native/codegen": { - "version": "0.74.88", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.74.88.tgz", - "integrity": "sha512-HMk/LCrSdUof9DZFaB2bK0soKyAF6XiCg2LG7WFjEkUDXayeiB4p7IsHISJWY4bYg7cMPZ0fiZMRaBP2vXJxgg==", + "version": "0.74.89", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.74.89.tgz", + "integrity": "sha512-xbcpnvsAjHrnYWnuoLdr5782dlR4LfkaWPityka/gWmdRDrE69ByAC9m0/vijMXAcMoHv6DSMh5x7gm6gW/3mA==", "dev": true, "license": "MIT", "dependencies": { @@ -4083,14 +4083,14 @@ } }, "node_modules/@react-native/metro-config": { - "version": "0.74.88", - "resolved": "https://registry.npmjs.org/@react-native/metro-config/-/metro-config-0.74.88.tgz", - "integrity": "sha512-GYBVb+987onsGcycad7jW7P4lBpeuj2TIhuOcKJcvRSID59w3OPb54hi8P04Cn9fMWGunWDxb8IvpkAbffzlCw==", + "version": "0.74.89", + "resolved": "https://registry.npmjs.org/@react-native/metro-config/-/metro-config-0.74.89.tgz", + "integrity": "sha512-LgJXh/pjyh0+/wiJdAqI3eXjDG4PzHKHQeLNDHuFumOoULCjeNDqsVokzJva5ZXrbON/0LRsqf3PJgJljntrwg==", "dev": true, "license": "MIT", "dependencies": { - "@react-native/js-polyfills": "0.74.88", - "@react-native/metro-babel-transformer": "0.74.88", + "@react-native/js-polyfills": "0.74.89", + "@react-native/metro-babel-transformer": "0.74.89", "metro-config": "^0.80.3", "metro-runtime": "^0.80.3" }, @@ -4099,9 +4099,9 @@ } }, "node_modules/@react-native/metro-config/node_modules/@react-native/js-polyfills": { - "version": "0.74.88", - "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.74.88.tgz", - "integrity": "sha512-6KljxfNKAz2b2uXqxagKbytb3MvUujAmfvuubKOoCLAiLbs8CYKW0OV1FqVLYUEXXw5GEDhXcVzQxxFuDlMafQ==", + "version": "0.74.89", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.74.89.tgz", + "integrity": "sha512-MT609lh6SnZYWZVIFTTtL37nu5UOK4Y9CpXw9K6DoUndhkejYY/dBsJ159WNuIFv2xCOtJDYiNPNFOmnRQwYvw==", "dev": true, "license": "MIT", "engines": { @@ -4109,14 +4109,14 @@ } }, "node_modules/@react-native/metro-config/node_modules/@react-native/metro-babel-transformer": { - "version": "0.74.88", - "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.88.tgz", - "integrity": "sha512-r7Er162iLpQce3ODQzNVS+PnjglJoHZ4l0NeaVMB4w45DIgKM4hC2vI6a/fzyFm9C6N+QY4P2i2RSkwjXVuBlQ==", + "version": "0.74.89", + "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.89.tgz", + "integrity": "sha512-rGKSkXLwsYRFCfBku0ZVODqMVAI6mm2yFdYUhKu5U0qIL9bffn4Ow8lHxzdyXMiEROE0jsnN31BOP19cbVI/HA==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.20.0", - "@react-native/babel-preset": "0.74.88", + "@react-native/babel-preset": "0.74.89", "hermes-parser": "0.19.1", "nullthrows": "^1.1.1" }, @@ -4150,9 +4150,9 @@ "integrity": "sha512-bRBcb2T+I88aG74LMVHaKms2p/T8aQd8+BZ7LuuzXlRfog1bMWWn/C5i0HVuvW4RPtXQYgIlGiXVDy9Ir1So/w==" }, "node_modules/@react-native/typescript-config": { - "version": "0.74.88", - "resolved": "https://registry.npmjs.org/@react-native/typescript-config/-/typescript-config-0.74.88.tgz", - "integrity": "sha512-Rn8PxcpE/BXKIgRJ2M4APFpKJatgYXyRg9wEl87PjJIH36AQkpFgbqWMwtM0m0Rsof4PWRzKt7GlzPtUS8/fyA==", + "version": "0.74.89", + "resolved": "https://registry.npmjs.org/@react-native/typescript-config/-/typescript-config-0.74.89.tgz", + "integrity": "sha512-kEYa2b1oBRSLy4Za3yBFnHh37CxxTmdAq/CMoCL2VpAzw0o6GgLiJ9V8Izp9KtlLETmdukQw+VbhEbUKCXxTqw==", "dev": true, "license": "MIT" }, @@ -15279,9 +15279,9 @@ "peer": true }, "@react-native-async-storage/async-storage": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-2.1.0.tgz", - "integrity": "sha512-eAGQGPTAuFNEoIQSB5j2Jh1zm5NPyBRTfjRMfCN0W1OakC5WIB5vsDyIQhUweKN9XOE2/V07lqTMGsL0dGXNkA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-2.1.1.tgz", + "integrity": "sha512-UqlnxddwM3rlCHvteFz+HpIXjqhQM7GkBgVQ9sMvMdl8QVOJQDjG7BODCUvabysMDw+9QfMFlLiOI8U6c0VzzQ==", "requires": { "merge-options": "^3.0.4" } @@ -16128,9 +16128,9 @@ } }, "@react-native/babel-preset": { - "version": "0.74.88", - "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.74.88.tgz", - "integrity": "sha512-SQODiFGlyblFTvdvePUDrQ+qlSzhcOm7It/yW2CVKxw5zRUf50+Cj3DBkRFhQDqF3ri2EnWsLnJ3oNE7hqDUxg==", + "version": "0.74.89", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.74.89.tgz", + "integrity": "sha512-JVI3sjnQxOjqVhERX19XYEc2HPmf0nFFmhF3CAvnxo+11GrP/eOqa1q+mAE0sXueVy+/rVjwohOxKWgwoQqtIA==", "dev": true, "requires": { "@babel/core": "^7.20.0", @@ -16173,24 +16173,24 @@ "@babel/plugin-transform-typescript": "^7.5.0", "@babel/plugin-transform-unicode-regex": "^7.0.0", "@babel/template": "^7.0.0", - "@react-native/babel-plugin-codegen": "0.74.88", + "@react-native/babel-plugin-codegen": "0.74.89", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" }, "dependencies": { "@react-native/babel-plugin-codegen": { - "version": "0.74.88", - "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.88.tgz", - "integrity": "sha512-hul4gPU09q7K0amhzhZnG3EVxeCXjP2l1x/zdgtliRRB8Nq7Za8YkM7dy84X+Vv4UC9G1nzxIbibsKeLsY1N4A==", + "version": "0.74.89", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.89.tgz", + "integrity": "sha512-E1SF2eHf2AZ0JPZZC54v6xlL2ZonMoUk0wvo3NtllvMDGn6LqlO5i4rphz3QOtX5OZa6/PhvadqLd0otmKXgIg==", "dev": true, "requires": { - "@react-native/codegen": "0.74.88" + "@react-native/codegen": "0.74.89" } }, "@react-native/codegen": { - "version": "0.74.88", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.74.88.tgz", - "integrity": "sha512-HMk/LCrSdUof9DZFaB2bK0soKyAF6XiCg2LG7WFjEkUDXayeiB4p7IsHISJWY4bYg7cMPZ0fiZMRaBP2vXJxgg==", + "version": "0.74.89", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.74.89.tgz", + "integrity": "sha512-xbcpnvsAjHrnYWnuoLdr5782dlR4LfkaWPityka/gWmdRDrE69ByAC9m0/vijMXAcMoHv6DSMh5x7gm6gW/3mA==", "dev": true, "requires": { "@babel/parser": "^7.20.0", @@ -16384,31 +16384,31 @@ } }, "@react-native/metro-config": { - "version": "0.74.88", - "resolved": "https://registry.npmjs.org/@react-native/metro-config/-/metro-config-0.74.88.tgz", - "integrity": "sha512-GYBVb+987onsGcycad7jW7P4lBpeuj2TIhuOcKJcvRSID59w3OPb54hi8P04Cn9fMWGunWDxb8IvpkAbffzlCw==", + "version": "0.74.89", + "resolved": "https://registry.npmjs.org/@react-native/metro-config/-/metro-config-0.74.89.tgz", + "integrity": "sha512-LgJXh/pjyh0+/wiJdAqI3eXjDG4PzHKHQeLNDHuFumOoULCjeNDqsVokzJva5ZXrbON/0LRsqf3PJgJljntrwg==", "dev": true, "requires": { - "@react-native/js-polyfills": "0.74.88", - "@react-native/metro-babel-transformer": "0.74.88", + "@react-native/js-polyfills": "0.74.89", + "@react-native/metro-babel-transformer": "0.74.89", "metro-config": "^0.80.3", "metro-runtime": "^0.80.3" }, "dependencies": { "@react-native/js-polyfills": { - "version": "0.74.88", - "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.74.88.tgz", - "integrity": "sha512-6KljxfNKAz2b2uXqxagKbytb3MvUujAmfvuubKOoCLAiLbs8CYKW0OV1FqVLYUEXXw5GEDhXcVzQxxFuDlMafQ==", + "version": "0.74.89", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.74.89.tgz", + "integrity": "sha512-MT609lh6SnZYWZVIFTTtL37nu5UOK4Y9CpXw9K6DoUndhkejYY/dBsJ159WNuIFv2xCOtJDYiNPNFOmnRQwYvw==", "dev": true }, "@react-native/metro-babel-transformer": { - "version": "0.74.88", - "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.88.tgz", - "integrity": "sha512-r7Er162iLpQce3ODQzNVS+PnjglJoHZ4l0NeaVMB4w45DIgKM4hC2vI6a/fzyFm9C6N+QY4P2i2RSkwjXVuBlQ==", + "version": "0.74.89", + "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.89.tgz", + "integrity": "sha512-rGKSkXLwsYRFCfBku0ZVODqMVAI6mm2yFdYUhKu5U0qIL9bffn4Ow8lHxzdyXMiEROE0jsnN31BOP19cbVI/HA==", "dev": true, "requires": { "@babel/core": "^7.20.0", - "@react-native/babel-preset": "0.74.88", + "@react-native/babel-preset": "0.74.89", "hermes-parser": "0.19.1", "nullthrows": "^1.1.1" } @@ -16436,9 +16436,9 @@ "integrity": "sha512-bRBcb2T+I88aG74LMVHaKms2p/T8aQd8+BZ7LuuzXlRfog1bMWWn/C5i0HVuvW4RPtXQYgIlGiXVDy9Ir1So/w==" }, "@react-native/typescript-config": { - "version": "0.74.88", - "resolved": "https://registry.npmjs.org/@react-native/typescript-config/-/typescript-config-0.74.88.tgz", - "integrity": "sha512-Rn8PxcpE/BXKIgRJ2M4APFpKJatgYXyRg9wEl87PjJIH36AQkpFgbqWMwtM0m0Rsof4PWRzKt7GlzPtUS8/fyA==", + "version": "0.74.89", + "resolved": "https://registry.npmjs.org/@react-native/typescript-config/-/typescript-config-0.74.89.tgz", + "integrity": "sha512-kEYa2b1oBRSLy4Za3yBFnHh37CxxTmdAq/CMoCL2VpAzw0o6GgLiJ9V8Izp9KtlLETmdukQw+VbhEbUKCXxTqw==", "dev": true }, "@react-native/virtualized-lists": { diff --git a/package.json b/package.json index 4601755..7806c6e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lx-music-mobile", - "version": "1.7.0", + "version": "1.7.1-beta.0", "versionCode": 70, "private": true, "scripts": { @@ -45,7 +45,7 @@ "homepage": "https://github.com/lyswhut/lx-music-mobile#readme", "dependencies": { "@craftzdog/react-native-buffer": "^6.0.5", - "@react-native-async-storage/async-storage": "^2.1.0", + "@react-native-async-storage/async-storage": "^2.1.1", "@react-native-clipboard/clipboard": "^1.16.1", "@react-native-community/slider": "^4.5.5", "he": "^1.2.0", @@ -73,9 +73,9 @@ "@babel/plugin-proposal-export-namespace-from": "^7.18.9", "@babel/preset-env": "^7.26.7", "@babel/runtime": "^7.26.7", - "@react-native/babel-preset": "^0.74.88", - "@react-native/metro-config": "^0.74.88", - "@react-native/typescript-config": "^0.74.88", + "@react-native/babel-preset": "^0.74.89", + "@react-native/metro-config": "^0.74.89", + "@react-native/typescript-config": "^0.74.89", "@tsconfig/react-native": "^3.0.5", "@types/he": "^1.2.3", "@types/react": "^18.3.18", From 7fa742758c831ff8d4800f65681f5f055757015b Mon Sep 17 00:00:00 2001 From: lyswhut Date: Fri, 7 Feb 2025 12:11:19 +0800 Subject: [PATCH 25/26] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=A7=A3=E6=9E=90?= =?UTF-8?q?=E6=9F=90=E4=BA=9B=E6=9C=AC=E5=9C=B0=E6=AD=8C=E8=AF=8D=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E6=97=B6=E5=87=BA=E7=8E=B0=E4=B9=B1=E7=A0=81=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=88#694=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 12 ++++++------ package.json | 2 +- publish/changeLog.md | 1 + 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 07041c2..3386d33 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,7 +24,7 @@ "react-native-exception-handler": "^2.10.10", "react-native-file-system": "github:lyswhut/react-native-file-system#2a37b90dbb8d37c5180777d0bf0d4f160812b0c1", "react-native-fs": "^2.20.0", - "react-native-local-media-metadata": "github:lyswhut/react-native-local-media-metadata#5eac1b6c70e934a1ad7b800b3ab7122f1075f704", + "react-native-local-media-metadata": "github:lyswhut/react-native-local-media-metadata#f2d03999413fa8fc9b0a25cde07c18d1a56988f0", "react-native-navigation": "7.39.2", "react-native-pager-view": "6.7.0", "react-native-quick-base64": "^2.1.2", @@ -10766,8 +10766,8 @@ }, "node_modules/react-native-local-media-metadata": { "version": "0.1.0", - "resolved": "git+ssh://git@github.com/lyswhut/react-native-local-media-metadata.git#5eac1b6c70e934a1ad7b800b3ab7122f1075f704", - "integrity": "sha512-UgUzALEtJ7LIYc+T1RZdQWQhttMvn0D4Bpk9ECh1B0ZuQjpqYP362ixCqnzzRwYcSd7IpTCRXkMMb16HHY7aBw==", + "resolved": "git+ssh://git@github.com/lyswhut/react-native-local-media-metadata.git#f2d03999413fa8fc9b0a25cde07c18d1a56988f0", + "integrity": "sha512-sGHZzc75Ci/lOVmhjCH/ZGLa+nbc1WjIsuF/Ju1t9QGVAnjDrEsWbYReWJWn4kSAPPZE5ilkWEHsFOs7OKUmsQ==", "license": "MIT", "workspaces": [ "example" @@ -21546,9 +21546,9 @@ } }, "react-native-local-media-metadata": { - "version": "git+ssh://git@github.com/lyswhut/react-native-local-media-metadata.git#5eac1b6c70e934a1ad7b800b3ab7122f1075f704", - "integrity": "sha512-UgUzALEtJ7LIYc+T1RZdQWQhttMvn0D4Bpk9ECh1B0ZuQjpqYP362ixCqnzzRwYcSd7IpTCRXkMMb16HHY7aBw==", - "from": "react-native-local-media-metadata@github:lyswhut/react-native-local-media-metadata#5eac1b6c70e934a1ad7b800b3ab7122f1075f704", + "version": "git+ssh://git@github.com/lyswhut/react-native-local-media-metadata.git#f2d03999413fa8fc9b0a25cde07c18d1a56988f0", + "integrity": "sha512-sGHZzc75Ci/lOVmhjCH/ZGLa+nbc1WjIsuF/Ju1t9QGVAnjDrEsWbYReWJWn4kSAPPZE5ilkWEHsFOs7OKUmsQ==", + "from": "react-native-local-media-metadata@github:lyswhut/react-native-local-media-metadata#f2d03999413fa8fc9b0a25cde07c18d1a56988f0", "requires": {} }, "react-native-macos": { diff --git a/package.json b/package.json index 7806c6e..6cbf632 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "react-native-exception-handler": "^2.10.10", "react-native-file-system": "github:lyswhut/react-native-file-system#2a37b90dbb8d37c5180777d0bf0d4f160812b0c1", "react-native-fs": "^2.20.0", - "react-native-local-media-metadata": "github:lyswhut/react-native-local-media-metadata#5eac1b6c70e934a1ad7b800b3ab7122f1075f704", + "react-native-local-media-metadata": "github:lyswhut/react-native-local-media-metadata#f2d03999413fa8fc9b0a25cde07c18d1a56988f0", "react-native-navigation": "7.39.2", "react-native-pager-view": "6.7.0", "react-native-quick-base64": "^2.1.2", diff --git a/publish/changeLog.md b/publish/changeLog.md index c927dd2..312e981 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -1,3 +1,4 @@ ### 修复 - 修复 tx 歌单搜索名字、描述出现乱码的问题 +- 修复解析某些本地歌词文件时出现乱码的问题(#694) From 27fdc10e1b3684398926e1953b00d684b4b1df76 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Fri, 7 Feb 2025 12:12:19 +0800 Subject: [PATCH 26/26] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7=EF=BC=881.7.1-beta.1=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3386d33..2486d75 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "lx-music-mobile", - "version": "1.7.1-beta.0", + "version": "1.7.1-beta.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "lx-music-mobile", - "version": "1.7.1-beta.0", + "version": "1.7.1-beta.1", "license": "Apache-2.0", "dependencies": { "@craftzdog/react-native-buffer": "^6.0.5", diff --git a/package.json b/package.json index 6cbf632..1bbc109 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lx-music-mobile", - "version": "1.7.1-beta.0", + "version": "1.7.1-beta.1", "versionCode": 70, "private": true, "scripts": {