mobile: minor bug fixes

This commit is contained in:
Ammar Ahmed
2024-03-26 08:57:04 +05:00
parent e007f2592c
commit 9e7c302693
25 changed files with 470 additions and 250 deletions

View File

@@ -110,6 +110,7 @@
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.2.tgz", "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.2.tgz",
"integrity": "sha512-eFZVFoRXb3GFGd7Ak7W4+6jBl9wBtiZ4AaYOse97ej6mKj5tkyO0dUnUChs1IhJZtx1BENo4/p4WUTXpi6vT+g==", "integrity": "sha512-eFZVFoRXb3GFGd7Ak7W4+6jBl9wBtiZ4AaYOse97ej6mKj5tkyO0dUnUChs1IhJZtx1BENo4/p4WUTXpi6vT+g==",
"dev": true,
"dependencies": { "dependencies": {
"debug": "^4.1.1", "debug": "^4.1.1",
"env-paths": "^2.2.0", "env-paths": "^2.2.0",
@@ -130,6 +131,7 @@
"version": "8.1.0", "version": "8.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
"integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
"dev": true,
"dependencies": { "dependencies": {
"graceful-fs": "^4.2.0", "graceful-fs": "^4.2.0",
"jsonfile": "^4.0.0", "jsonfile": "^4.0.0",
@@ -143,6 +145,7 @@
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
"integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
"dev": true,
"optionalDependencies": { "optionalDependencies": {
"graceful-fs": "^4.1.6" "graceful-fs": "^4.1.6"
} }
@@ -151,6 +154,7 @@
"version": "6.3.0", "version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"dev": true,
"bin": { "bin": {
"semver": "bin/semver.js" "semver": "bin/semver.js"
} }
@@ -159,6 +163,7 @@
"version": "0.1.2", "version": "0.1.2",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
"dev": true,
"engines": { "engines": {
"node": ">= 4.0.0" "node": ">= 4.0.0"
} }
@@ -717,6 +722,7 @@
"version": "4.6.0", "version": "4.6.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz",
"integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==",
"dev": true,
"engines": { "engines": {
"node": ">=10" "node": ">=10"
}, },
@@ -728,6 +734,7 @@
"version": "4.0.6", "version": "4.0.6",
"resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz",
"integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==",
"dev": true,
"dependencies": { "dependencies": {
"defer-to-connect": "^2.0.0" "defer-to-connect": "^2.0.0"
}, },
@@ -772,6 +779,7 @@
"version": "6.0.3", "version": "6.0.3",
"resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz",
"integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==",
"dev": true,
"dependencies": { "dependencies": {
"@types/http-cache-semantics": "*", "@types/http-cache-semantics": "*",
"@types/keyv": "^3.1.4", "@types/keyv": "^3.1.4",
@@ -800,12 +808,14 @@
"node_modules/@types/http-cache-semantics": { "node_modules/@types/http-cache-semantics": {
"version": "4.0.1", "version": "4.0.1",
"resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz",
"integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==",
"dev": true
}, },
"node_modules/@types/keyv": { "node_modules/@types/keyv": {
"version": "3.1.4", "version": "3.1.4",
"resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz",
"integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==",
"dev": true,
"dependencies": { "dependencies": {
"@types/node": "*" "@types/node": "*"
} }
@@ -819,7 +829,8 @@
"node_modules/@types/node": { "node_modules/@types/node": {
"version": "18.16.1", "version": "18.16.1",
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.1.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.1.tgz",
"integrity": "sha512-DZxSZWXxFfOlx7k7Rv4LAyiMroaxa3Ly/7OOzZO8cBNho0YzAi4qlbrx8W27JGqG57IgR/6J7r+nOJWw6kcvZA==" "integrity": "sha512-DZxSZWXxFfOlx7k7Rv4LAyiMroaxa3Ly/7OOzZO8cBNho0YzAi4qlbrx8W27JGqG57IgR/6J7r+nOJWw6kcvZA==",
"devOptional": true
}, },
"node_modules/@types/plist": { "node_modules/@types/plist": {
"version": "3.0.2", "version": "3.0.2",
@@ -835,6 +846,7 @@
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz",
"integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==",
"dev": true,
"dependencies": { "dependencies": {
"@types/node": "*" "@types/node": "*"
} }
@@ -864,6 +876,7 @@
"version": "2.10.0", "version": "2.10.0",
"resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz",
"integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==",
"dev": true,
"optional": true, "optional": true,
"dependencies": { "dependencies": {
"@types/node": "*" "@types/node": "*"
@@ -1144,6 +1157,7 @@
"version": "3.2.0", "version": "3.2.0",
"resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz",
"integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==",
"dev": true,
"optional": true "optional": true
}, },
"node_modules/brace-expansion": { "node_modules/brace-expansion": {
@@ -1194,6 +1208,7 @@
"version": "0.2.13", "version": "0.2.13",
"resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
"integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
"dev": true,
"engines": { "engines": {
"node": "*" "node": "*"
} }
@@ -1269,6 +1284,7 @@
"version": "5.0.4", "version": "5.0.4",
"resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
"integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==",
"dev": true,
"engines": { "engines": {
"node": ">=10.6.0" "node": ">=10.6.0"
} }
@@ -1277,6 +1293,7 @@
"version": "7.0.4", "version": "7.0.4",
"resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz",
"integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==",
"dev": true,
"dependencies": { "dependencies": {
"clone-response": "^1.0.2", "clone-response": "^1.0.2",
"get-stream": "^5.1.0", "get-stream": "^5.1.0",
@@ -1396,6 +1413,7 @@
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz",
"integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==",
"dev": true,
"dependencies": { "dependencies": {
"mimic-response": "^1.0.0" "mimic-response": "^1.0.0"
}, },
@@ -1572,6 +1590,7 @@
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz",
"integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==",
"dev": true,
"engines": { "engines": {
"node": ">=10" "node": ">=10"
} }
@@ -1580,6 +1599,7 @@
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
"integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
"dev": true,
"optional": true, "optional": true,
"dependencies": { "dependencies": {
"has-property-descriptors": "^1.0.0", "has-property-descriptors": "^1.0.0",
@@ -1613,6 +1633,7 @@
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz",
"integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==",
"dev": true,
"optional": true "optional": true
}, },
"node_modules/dir-compare": { "node_modules/dir-compare": {
@@ -1727,6 +1748,7 @@
"version": "28.2.1", "version": "28.2.1",
"resolved": "https://registry.npmjs.org/electron/-/electron-28.2.1.tgz", "resolved": "https://registry.npmjs.org/electron/-/electron-28.2.1.tgz",
"integrity": "sha512-wlzXf+OvOiVlBf9dcSeMMf7Q+N6DG+wtgFbMK0sA/JpIJcdosRbLMQwLg/LTwNVKIbmayqFLDp4FmmFkEMhbYA==", "integrity": "sha512-wlzXf+OvOiVlBf9dcSeMMf7Q+N6DG+wtgFbMK0sA/JpIJcdosRbLMQwLg/LTwNVKIbmayqFLDp4FmmFkEMhbYA==",
"dev": true,
"hasInstallScript": true, "hasInstallScript": true,
"dependencies": { "dependencies": {
"@electron/get": "^2.0.0", "@electron/get": "^2.0.0",
@@ -1852,6 +1874,7 @@
"version": "2.2.1", "version": "2.2.1",
"resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
"integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
"dev": true,
"engines": { "engines": {
"node": ">=6" "node": ">=6"
} }
@@ -1866,6 +1889,7 @@
"version": "4.1.1", "version": "4.1.1",
"resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
"integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
"dev": true,
"optional": true "optional": true
}, },
"node_modules/esbuild": { "node_modules/esbuild": {
@@ -1918,6 +1942,7 @@
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
"dev": true,
"optional": true, "optional": true,
"engines": { "engines": {
"node": ">=10" "node": ">=10"
@@ -1938,6 +1963,7 @@
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
"integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
"dev": true,
"dependencies": { "dependencies": {
"debug": "^4.1.1", "debug": "^4.1.1",
"get-stream": "^5.1.0", "get-stream": "^5.1.0",
@@ -1978,6 +2004,7 @@
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
"integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
"dev": true,
"dependencies": { "dependencies": {
"pend": "~1.2.0" "pend": "~1.2.0"
} }
@@ -2104,6 +2131,7 @@
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
"dev": true,
"optional": true "optional": true
}, },
"node_modules/get-caller-file": { "node_modules/get-caller-file": {
@@ -2118,6 +2146,7 @@
"version": "1.2.1", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
"integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
"dev": true,
"optional": true, "optional": true,
"dependencies": { "dependencies": {
"function-bind": "^1.1.1", "function-bind": "^1.1.1",
@@ -2133,6 +2162,7 @@
"version": "5.2.0", "version": "5.2.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
"integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
"dev": true,
"dependencies": { "dependencies": {
"pump": "^3.0.0" "pump": "^3.0.0"
}, },
@@ -2206,6 +2236,7 @@
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz",
"integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==",
"dev": true,
"optional": true, "optional": true,
"dependencies": { "dependencies": {
"boolean": "^3.0.1", "boolean": "^3.0.1",
@@ -2223,6 +2254,7 @@
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
"integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
"dev": true,
"optional": true, "optional": true,
"dependencies": { "dependencies": {
"define-properties": "^1.1.3" "define-properties": "^1.1.3"
@@ -2238,6 +2270,7 @@
"version": "11.8.6", "version": "11.8.6",
"resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz",
"integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==",
"dev": true,
"dependencies": { "dependencies": {
"@sindresorhus/is": "^4.0.0", "@sindresorhus/is": "^4.0.0",
"@szmarczak/http-timer": "^4.0.5", "@szmarczak/http-timer": "^4.0.5",
@@ -2267,6 +2300,7 @@
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"dev": true,
"optional": true, "optional": true,
"dependencies": { "dependencies": {
"function-bind": "^1.1.1" "function-bind": "^1.1.1"
@@ -2288,6 +2322,7 @@
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
"integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
"dev": true,
"optional": true, "optional": true,
"dependencies": { "dependencies": {
"get-intrinsic": "^1.1.1" "get-intrinsic": "^1.1.1"
@@ -2300,6 +2335,7 @@
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
"integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
"dev": true,
"optional": true, "optional": true,
"engines": { "engines": {
"node": ">= 0.4" "node": ">= 0.4"
@@ -2312,6 +2348,7 @@
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
"dev": true,
"optional": true, "optional": true,
"engines": { "engines": {
"node": ">= 0.4" "node": ">= 0.4"
@@ -2335,7 +2372,8 @@
"node_modules/http-cache-semantics": { "node_modules/http-cache-semantics": {
"version": "4.1.1", "version": "4.1.1",
"resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
"integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==",
"dev": true
}, },
"node_modules/http-proxy-agent": { "node_modules/http-proxy-agent": {
"version": "5.0.0", "version": "5.0.0",
@@ -2355,6 +2393,7 @@
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz",
"integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==",
"dev": true,
"dependencies": { "dependencies": {
"quick-lru": "^5.1.1", "quick-lru": "^5.1.1",
"resolve-alpn": "^1.0.0" "resolve-alpn": "^1.0.0"
@@ -2598,7 +2637,8 @@
"node_modules/json-buffer": { "node_modules/json-buffer": {
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
"integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
"dev": true
}, },
"node_modules/json-schema-traverse": { "node_modules/json-schema-traverse": {
"version": "0.4.1", "version": "0.4.1",
@@ -2610,6 +2650,7 @@
"version": "5.0.1", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==",
"dev": true,
"optional": true "optional": true
}, },
"node_modules/json5": { "node_modules/json5": {
@@ -2639,6 +2680,7 @@
"version": "4.5.2", "version": "4.5.2",
"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz",
"integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==",
"dev": true,
"dependencies": { "dependencies": {
"json-buffer": "3.0.1" "json-buffer": "3.0.1"
} }
@@ -2668,6 +2710,7 @@
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
"integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
"dev": true,
"engines": { "engines": {
"node": ">=8" "node": ">=8"
} }
@@ -2687,6 +2730,7 @@
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz",
"integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==",
"dev": true,
"optional": true, "optional": true,
"dependencies": { "dependencies": {
"escape-string-regexp": "^4.0.0" "escape-string-regexp": "^4.0.0"
@@ -2732,6 +2776,7 @@
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
"integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
"dev": true,
"engines": { "engines": {
"node": ">=4" "node": ">=4"
} }
@@ -2857,6 +2902,7 @@
"version": "6.1.0", "version": "6.1.0",
"resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
"integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==",
"dev": true,
"engines": { "engines": {
"node": ">=10" "node": ">=10"
}, },
@@ -2868,6 +2914,7 @@
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
"dev": true,
"optional": true, "optional": true,
"engines": { "engines": {
"node": ">= 0.4" "node": ">= 0.4"
@@ -2885,6 +2932,7 @@
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz",
"integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==",
"dev": true,
"engines": { "engines": {
"node": ">=8" "node": ">=8"
} }
@@ -2922,7 +2970,8 @@
"node_modules/pend": { "node_modules/pend": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
"integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
"dev": true
}, },
"node_modules/picomatch": { "node_modules/picomatch": {
"version": "2.3.1", "version": "2.3.1",
@@ -2986,6 +3035,7 @@
"version": "2.0.3", "version": "2.0.3",
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
"integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
"dev": true,
"engines": { "engines": {
"node": ">=0.4.0" "node": ">=0.4.0"
} }
@@ -3025,6 +3075,7 @@
"version": "5.1.1", "version": "5.1.1",
"resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
"integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
"dev": true,
"engines": { "engines": {
"node": ">=10" "node": ">=10"
}, },
@@ -3123,12 +3174,14 @@
"node_modules/resolve-alpn": { "node_modules/resolve-alpn": {
"version": "1.2.1", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
"integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==",
"dev": true
}, },
"node_modules/responselike": { "node_modules/responselike": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz",
"integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==",
"dev": true,
"dependencies": { "dependencies": {
"lowercase-keys": "^2.0.0" "lowercase-keys": "^2.0.0"
}, },
@@ -3164,6 +3217,7 @@
"version": "2.15.4", "version": "2.15.4",
"resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz",
"integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==",
"dev": true,
"optional": true, "optional": true,
"dependencies": { "dependencies": {
"boolean": "^3.0.1", "boolean": "^3.0.1",
@@ -3243,12 +3297,14 @@
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
"integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==",
"dev": true,
"optional": true "optional": true
}, },
"node_modules/serialize-error": { "node_modules/serialize-error": {
"version": "7.0.1", "version": "7.0.1",
"resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz",
"integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==",
"dev": true,
"optional": true, "optional": true,
"dependencies": { "dependencies": {
"type-fest": "^0.13.1" "type-fest": "^0.13.1"
@@ -3264,6 +3320,7 @@
"version": "0.13.1", "version": "0.13.1",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz",
"integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==",
"dev": true,
"optional": true, "optional": true,
"engines": { "engines": {
"node": ">=10" "node": ">=10"
@@ -3404,6 +3461,7 @@
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
"integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==",
"dev": true,
"optional": true "optional": true
}, },
"node_modules/stat-mode": { "node_modules/stat-mode": {
@@ -3475,6 +3533,7 @@
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz",
"integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==",
"dev": true,
"dependencies": { "dependencies": {
"debug": "^4.1.0" "debug": "^4.1.0"
}, },
@@ -3808,6 +3867,7 @@
"version": "2.10.0", "version": "2.10.0",
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
"integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
"dev": true,
"dependencies": { "dependencies": {
"buffer-crc32": "~0.2.3", "buffer-crc32": "~0.2.3",
"fd-slicer": "~1.1.0" "fd-slicer": "~1.1.0"

View File

@@ -28,7 +28,7 @@ export const Container = ({ children }: PropsWithChildren) => {
const [height, setHeight] = useState(0); const [height, setHeight] = useState(0);
const windowHeightRef = useRef(Dimensions.get("window").height); const windowHeightRef = useRef(Dimensions.get("window").height);
const { height: windowHeight } = useWindowDimensions(); const { height: windowHeight } = useWindowDimensions();
const timerRef = useRef<NodeJS.Timeout>();
useEffect(() => { useEffect(() => {
if (windowHeight !== windowHeightRef.current) { if (windowHeight !== windowHeightRef.current) {
setHeight(0); setHeight(0);
@@ -46,9 +46,13 @@ export const Container = ({ children }: PropsWithChildren) => {
width: "100%" width: "100%"
}} }}
onLayout={(event) => { onLayout={(event) => {
if (!keyboard.keyboardShown) { const height = event.nativeEvent.layout.height;
setHeight(event.nativeEvent.layout.height); clearTimeout(timerRef.current);
} timerRef.current = setTimeout(() => {
if (!keyboard.keyboardShown) {
setHeight(height);
}
}, 500);
}} }}
> >
{children} {children}

View File

@@ -75,7 +75,7 @@ const ColorPicker = ({
style={{ style={{
width: "100%", width: "100%",
height: 250, height: 250,
backgroundColor: selectedColor, backgroundColor: colors.primary.background,
borderRadius: 10 borderRadius: 10
}} }}
> >
@@ -170,7 +170,6 @@ const ColorPicker = ({
return ToastManager.error( return ToastManager.error(
new Error(`Color #${selectedColor} already exists`) new Error(`Color #${selectedColor} already exists`)
); );
const id = await db.colors.add({ const id = await db.colors.add({
title: title.current, title: title.current,
colorCode: selectedColor colorCode: selectedColor

View File

@@ -23,9 +23,9 @@ import { FlatList, StyleSheet, View } from "react-native";
import { import {
DraxList, DraxList,
DraxListProps, DraxListProps,
DraxListRenderItemContent, DraxListRenderItemContent
DraxProvider
} from "react-native-drax"; } from "react-native-drax";
import { tabBarRef } from "../../utils/global-refs"; import { tabBarRef } from "../../utils/global-refs";
import { SIZE } from "../../utils/size"; import { SIZE } from "../../utils/size";
import { useSideBarDraggingStore } from "../side-menu/dragging-store"; import { useSideBarDraggingStore } from "../side-menu/dragging-store";
@@ -74,6 +74,7 @@ function ReorderableList<T extends { id: string }>({
const renderItemContent: DraxListRenderItemContent<T> = React.useCallback( const renderItemContent: DraxListRenderItemContent<T> = React.useCallback(
(info, props) => { (info, props) => {
const isHidden = hiddenItemsState.indexOf(info?.item?.id) > -1; const isHidden = hiddenItemsState.indexOf(info?.item?.id) > -1;
return isHidden && !dragging ? null : ( return isHidden && !dragging ? null : (
<View <View
style={{ style={{
@@ -136,53 +137,49 @@ function ReorderableList<T extends { id: string }>({
} }
return ( return (
<DraxProvider> <View style={styles.container}>
<View style={styles.container}> <DraxList
<DraxList {...restProps}
{...restProps} ref={listRef}
ref={listRef} data={getOrderedItems()}
data={getOrderedItems()} renderItemContent={renderItemContent}
renderItemContent={renderItemContent} itemStyles={{
itemStyles={{ hoverDragReleasedStyle: {
hoverDragReleasedStyle: { display: "none"
display: "none" },
}, hoverDraggingWithoutReceiverStyle: {
hoverDraggingWithoutReceiverStyle: { opacity: 0.5
opacity: 0.5 },
}, dragReleasedStyle: {
dragReleasedStyle: { opacity: 1
opacity: 1 },
}, hoverDraggingStyle: {
hoverDraggingStyle: { backgroundColor: colors.secondary.background
backgroundColor: colors.secondary.background
}
}}
longPressDelay={500}
onItemDragStart={() =>
useSideBarDraggingStore.setState({
dragging: true
})
} }
itemsDraggable={disableDefaultDrag ? dragging : true} }}
lockItemDragsToMainAxis longPressDelay={500}
onItemReorder={({ fromIndex, fromItem, toIndex, toItem }) => { onItemDragStart={() =>
const newOrder = getOrderedItems().map((item) => item.id); useSideBarDraggingStore.setState({
const element = newOrder.splice(fromIndex, 1)[0]; dragging: true
if (toIndex === 0) { })
newOrder.unshift(element); }
} else { disableVirtualization
newOrder.splice(toIndex, 0, element); itemsDraggable={disableDefaultDrag ? dragging : true}
} lockItemDragsToMainAxis
setItemsOrder(newOrder); onItemReorder={({ fromIndex, fromItem, toIndex, toItem }) => {
onListOrderChanged?.(newOrder); const newOrder = getOrderedItems().map((item) => item.id);
}} const element = newOrder.splice(fromIndex, 1)[0];
onItemDragEnd={(e) => { if (toIndex === 0) {
console.log(e.receiver?.receiveOffset); newOrder.unshift(element);
}} } else {
keyExtractor={(item) => (item as any).id} newOrder.splice(toIndex, 0, element);
/> }
</View> setItemsOrder(newOrder);
</DraxProvider> onListOrderChanged?.(newOrder);
}}
keyExtractor={(item) => (item as any).id}
/>
</View>
); );
} }

View File

@@ -111,6 +111,7 @@ export const ColorTags = ({ item }: { item: Note }) => {
visible={visible} visible={visible}
setVisible={setVisible} setVisible={setVisible}
onColorAdded={async (color) => { onColorAdded={async (color) => {
await db.relations.to(note, "color").unlink();
await db.relations.add(color, note); await db.relations.add(color, note);
useRelationStore.getState().update(); useRelationStore.getState().update();
useMenuStore.getState().setColorNotes(); useMenuStore.getState().setColorNotes();

View File

@@ -83,7 +83,6 @@ const TabItemComponent = (props: {
onPress={() => { onPress={() => {
if (!props.isFocused) { if (!props.isFocused) {
useTabStore.getState().focusTab(props.tab.id); useTabStore.getState().focusTab(props.tab.id);
props.close?.();
if (props.tab.locked) { if (props.tab.locked) {
eSendEvent(eUnlockNote); eSendEvent(eUnlockNote);
} }
@@ -94,6 +93,7 @@ const TabItemComponent = (props: {
}, 300); }, 300);
} }
} }
props.close?.();
}} }}
onLongPress={() => { onLongPress={() => {
useTabStore.getState().updateTab(props.tab.id, { useTabStore.getState().updateTab(props.tab.id, {

View File

@@ -105,7 +105,7 @@ export const MoveNotes = ({
<DialogHeader <DialogHeader
title={`Add notes to ${currentNotebook.title}`} title={`Add notes to ${currentNotebook.title}`}
paragraph={"Select the topic in which you would like to move notes."} paragraph={"Select the notes you want to move to this Notebook."}
/> />
<Seperator /> <Seperator />

View File

@@ -205,7 +205,7 @@ export const NotebookSheet = () => {
style={{ style={{
position: "absolute", position: "absolute",
right: 12, right: 12,
marginTop: -80 marginTop: -90
}} }}
> >
<Pressable <Pressable

View File

@@ -19,7 +19,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
import { useThemeColors } from "@notesnook/theme"; import { useThemeColors } from "@notesnook/theme";
import React, { useCallback } from "react"; import React, { useCallback } from "react";
import { FlatList, View } from "react-native"; import { View } from "react-native";
import { DraxProvider, DraxScrollView } from "react-native-drax";
import { notesnook } from "../../../e2e/test.ids"; import { notesnook } from "../../../e2e/test.ids";
import { db } from "../../common/database"; import { db } from "../../common/database";
import useGlobalSafeAreaInsets from "../../hooks/use-global-safe-area-insets"; import useGlobalSafeAreaInsets from "../../hooks/use-global-safe-area-insets";
@@ -134,16 +135,12 @@ export const SideMenu = React.memo(
paddingTop: insets.top paddingTop: insets.top
}} }}
> >
<FlatList <DraxProvider>
alwaysBounceVertical={false} <DraxScrollView nestedScrollEnabled={false}>
contentContainerStyle={{ {renderItem()}
flexGrow: 1 </DraxScrollView>
}} </DraxProvider>
showsVerticalScrollIndicator={false}
data={[0]}
keyExtractor={() => "mainMenuView"}
renderItem={renderItem}
/>
<View <View
style={{ style={{
paddingHorizontal: 12 paddingHorizontal: 12

View File

@@ -524,8 +524,10 @@ const onChangeTab = async (obj) => {
if ( if (
useTabStore.getState().getTab(useTabStore.getState().currentTab).locked useTabStore.getState().getTab(useTabStore.getState().currentTab).locked
) { ) {
console.log("Unlocking note....");
eSendEvent(eUnlockNote); eSendEvent(eUnlockNote);
} else {
editorState().currentlyEditing = true;
eSendEvent(eOnLoadNote);
} }
} }
} else { } else {

View File

@@ -19,7 +19,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* eslint-disable @typescript-eslint/no-var-requires */ /* eslint-disable @typescript-eslint/no-var-requires */
import { useThemeColors } from "@notesnook/theme";
import React, { import React, {
forwardRef, forwardRef,
useCallback, useCallback,
@@ -33,17 +32,12 @@ import WebView from "react-native-webview";
import { ShouldStartLoadRequest } from "react-native-webview/lib/WebViewTypes"; import { ShouldStartLoadRequest } from "react-native-webview/lib/WebViewTypes";
import { notesnook } from "../../../e2e/test.ids"; import { notesnook } from "../../../e2e/test.ids";
import { db } from "../../common/database"; import { db } from "../../common/database";
import { IconButton } from "../../components/ui/icon-button";
import { useDBItem } from "../../hooks/use-db-item";
import useKeyboard from "../../hooks/use-keyboard";
import BiometicService from "../../services/biometrics"; import BiometicService from "../../services/biometrics";
import { import {
ToastManager, ToastManager,
eSendEvent, eSendEvent,
eSubscribeEvent eSubscribeEvent
} from "../../services/event-manager"; } from "../../services/event-manager";
import { useSettingStore } from "../../stores/use-setting-store";
import { getElevationStyle } from "../../utils/elevation";
import { import {
eOnLoadNote, eOnLoadNote,
eUnlockNote, eUnlockNote,
@@ -51,13 +45,13 @@ import {
eUnlockWithPassword eUnlockWithPassword
} from "../../utils/events"; } from "../../utils/events";
import { openLinkInBrowser } from "../../utils/functions"; import { openLinkInBrowser } from "../../utils/functions";
import EditorOverlay from "./loading";
import { EDITOR_URI } from "./source"; import { EDITOR_URI } from "./source";
import { EditorProps, useEditorType } from "./tiptap/types"; import { EditorProps, useEditorType } from "./tiptap/types";
import { useEditor } from "./tiptap/use-editor"; import { useEditor } from "./tiptap/use-editor";
import { useEditorEvents } from "./tiptap/use-editor-events"; import { useEditorEvents } from "./tiptap/use-editor-events";
import { syncTabs, useTabStore } from "./tiptap/use-tab-store"; import { syncTabs, useTabStore } from "./tiptap/use-tab-store";
import { editorController, editorState } from "./tiptap/utils"; import { editorController, editorState } from "./tiptap/utils";
import EditorOverlay from "./loading";
const style: ViewStyle = { const style: ViewStyle = {
height: "100%", height: "100%",
@@ -105,6 +99,7 @@ const Editor = React.memo(
useImperativeHandle(ref, () => ({ useImperativeHandle(ref, () => ({
get: () => editor get: () => editor
})); }));
useLockedNoteHandler();
const onError = useCallback(() => { const onError = useCallback(() => {
renderKey.current = renderKey.current =
@@ -178,7 +173,6 @@ const Editor = React.memo(
onMessage={onMessage || undefined} onMessage={onMessage || undefined}
/> />
<EditorOverlay editor={editor} editorId={editorId} /> <EditorOverlay editor={editor} editorId={editorId} />
<LockOverlay />
</> </>
); );
} }
@@ -188,12 +182,8 @@ const Editor = React.memo(
export default Editor; export default Editor;
const LockOverlay = () => { const useLockedNoteHandler = () => {
const tab = useTabStore((state) => const tab = useTabStore((state) => state.getTab(state.currentTab));
state.tabs.find((t) => t.id === state.currentTab)
);
const isAppLoading = useSettingStore((state) => state.isAppLoading);
const [item] = useDBItem(isAppLoading ? undefined : tab?.noteId, "note");
const tabRef = useRef(tab); const tabRef = useRef(tab);
tabRef.current = tab; tabRef.current = tab;
@@ -201,8 +191,8 @@ const LockOverlay = () => {
for (const tab of useTabStore.getState().tabs) { for (const tab of useTabStore.getState().tabs) {
const noteId = useTabStore.getState().getTab(tab.id)?.noteId; const noteId = useTabStore.getState().getTab(tab.id)?.noteId;
if (!noteId) continue; if (!noteId) continue;
if (tab.noteLocked) { if (tabRef.current && tabRef.current.noteLocked) {
useTabStore.getState().updateTab(tab.id, { useTabStore.getState().updateTab(tabRef.current.id, {
locked: true locked: true
}); });
} }
@@ -224,15 +214,18 @@ const LockOverlay = () => {
useEffect(() => { useEffect(() => {
const unlockWithBiometrics = async () => { const unlockWithBiometrics = async () => {
try { try {
if (!item || !tabRef.current) return; if (!tabRef.current?.noteLocked || !tabRef.current) return;
console.log("Trying to unlock with biometrics..."); console.log("Trying to unlock with biometrics...");
const credentials = await BiometicService.getCredentials( const credentials = await BiometicService.getCredentials(
"Unlock note", "Unlock note",
"Unlock note to open it in editor. If biometrics are not working, you can enter device pin to unlock vault." "Unlock note to open it in editor. If biometrics are not working, you can enter device pin to unlock vault."
); );
if (credentials && credentials?.password) { if (credentials && credentials?.password && tabRef.current.noteId) {
const note = await db.vault.open(item.id, credentials?.password); const note = await db.vault.open(
tabRef.current.noteId,
credentials?.password
);
eSendEvent(eOnLoadNote, { eSendEvent(eOnLoadNote, {
item: note item: note
}); });
@@ -253,7 +246,7 @@ const LockOverlay = () => {
password: string; password: string;
biometrics?: boolean; biometrics?: boolean;
}) => { }) => {
if (!item || !tabRef.current) return; if (!tabRef.current?.noteId || !tabRef.current) return;
if (!password || password.trim().length === 0) { if (!password || password.trim().length === 0) {
ToastManager.show({ ToastManager.show({
heading: "Password not entered", heading: "Password not entered",
@@ -264,7 +257,7 @@ const LockOverlay = () => {
} }
try { try {
const note = await db.vault.open(item.id, password); const note = await db.vault.open(tabRef.current?.noteId, password);
if (enrollBiometrics) { if (enrollBiometrics) {
try { try {
await db.vault.unlock(password); await db.vault.unlock(password);
@@ -343,7 +336,7 @@ const LockOverlay = () => {
return () => { return () => {
subs.map((s) => s?.unsubscribe()); subs.map((s) => s?.unsubscribe());
}; };
}, [item]); }, [tab?.id]);
return null; return null;
}; };

View File

@@ -124,12 +124,13 @@ const statusBar = statusBars[${tabId}];
if (typeof editor !== "undefined") { if (typeof editor !== "undefined") {
editor.commands.blur(); editor.commands.blur();
editor.commands.clearContent(false);
} }
typeof editorTitle !== "undefined" && editorTitle.current && editorTitle.current?.blur(); typeof editorTitle !== "undefined" && editorTitle.current && editorTitle.current?.blur();
if (typeof editorController.content !== undefined) editorController.content.current = null; if (typeof editorController.content !== undefined) editorController.content.current = '';
editorController.onUpdate(); editorController.onUpdate();
editorController.setTitle(null); editorController.setTitle('');
if (typeof statusBar !== "undefined") { if (typeof statusBar !== "undefined") {
statusBar.current.resetWords(); statusBar.current.resetWords();
statusBar.current.set({date:"",saved:""}); statusBar.current.set({date:"",saved:""});

View File

@@ -47,5 +47,6 @@ export const EventTypes = {
unlock: "editor-events:unlock", unlock: "editor-events:unlock",
unlockWithBiometrics: "editor-events:unlock-biometrics", unlockWithBiometrics: "editor-events:unlock-biometrics",
disableReadonlyMode: "editor-events:disable-readonly-mode", disableReadonlyMode: "editor-events:disable-readonly-mode",
readonlyEditorLoaded: "readonlyEditorLoaded" readonlyEditorLoaded: "readonlyEditorLoaded",
error: "editorError"
}; };

View File

@@ -24,7 +24,7 @@ import { ItemReference } from "@notesnook/core/dist/types";
import type { Attachment } from "@notesnook/editor/dist/extensions/attachment/index"; import type { Attachment } from "@notesnook/editor/dist/extensions/attachment/index";
import { getDefaultPresets } from "@notesnook/editor/dist/toolbar/tool-definitions"; import { getDefaultPresets } from "@notesnook/editor/dist/toolbar/tool-definitions";
import Clipboard from "@react-native-clipboard/clipboard"; import Clipboard from "@react-native-clipboard/clipboard";
import { useCallback, useEffect, useRef } from "react"; import React, { useCallback, useEffect, useRef } from "react";
import { import {
BackHandler, BackHandler,
InteractionManager, InteractionManager,
@@ -47,7 +47,8 @@ import {
ToastManager, ToastManager,
eSendEvent, eSendEvent,
eSubscribeEvent, eSubscribeEvent,
eUnSubscribeEvent eUnSubscribeEvent,
presentSheet
} from "../../../services/event-manager"; } from "../../../services/event-manager";
import Navigation from "../../../services/navigation"; import Navigation from "../../../services/navigation";
import SettingsService from "../../../services/settings"; import SettingsService from "../../../services/settings";
@@ -74,6 +75,7 @@ import { EventTypes } from "./editor-events";
import { EditorMessage, EditorProps, useEditorType } from "./types"; import { EditorMessage, EditorProps, useEditorType } from "./types";
import { useTabStore } from "./use-tab-store"; import { useTabStore } from "./use-tab-store";
import { EditorEvents, editorState } from "./utils"; import { EditorEvents, editorState } from "./utils";
import { Issue } from "../../../components/sheets/github/issue";
const publishNote = async () => { const publishNote = async () => {
const user = useUserStore.getState().user; const user = useUserStore.getState().user;
@@ -274,6 +276,7 @@ export const useEditorEvents = (
}, [onBackPress]); }, [onBackPress]);
const onLoadNote = useCallback(async () => { const onLoadNote = useCallback(async () => {
console.log("Loading...");
InteractionManager.runAfterInteractions(() => { InteractionManager.runAfterInteractions(() => {
if (!DDS.isTab) { if (!DDS.isTab) {
handleBack.current = BackHandler.addEventListener( handleBack.current = BackHandler.addEventListener(
@@ -574,6 +577,18 @@ export const useEditorEvents = (
EditorTabs.present(); EditorTabs.present();
break; break;
} }
case EventTypes.error: {
presentSheet({
component: (
<Issue
defaultBody={editorMessage.value.stack}
defaultTitle={editorMessage.value.message}
issueTitle={editorMessage.value.message}
/>
)
});
break;
}
case EventTypes.tabFocused: { case EventTypes.tabFocused: {
console.log( console.log(
"Focused tab", "Focused tab",

View File

@@ -367,6 +367,9 @@ export const useEditor = (
blockId?: string; blockId?: string;
presistTab?: boolean; presistTab?: boolean;
}) => { }) => {
if (!event) return;
console.log(event.item?.id, event?.item?.title, "loading note...");
if (event.blockId) { if (event.blockId) {
blockIdRef.current = event.blockId; blockIdRef.current = event.blockId;
} }
@@ -401,10 +404,11 @@ export const useEditor = (
if (currentTab?.previewTab && item.id !== currentTab.noteId) { if (currentTab?.previewTab && item.id !== currentTab.noteId) {
await commands.setLoading(true, useTabStore.getState().currentTab); await commands.setLoading(true, useTabStore.getState().currentTab);
} }
const isLockedNote = await db.vaults.itemExists(
const noteIsLocked = event.item as ItemReference
(await db.vaults.itemExists(event.item as ItemReference)) && );
!(event.item as NoteWithContent).content; const tabLocked =
isLockedNote && !(event.item as NoteWithContent).content;
// If note was already opened in a tab, focus that tab. // If note was already opened in a tab, focus that tab.
if (typeof event.tabId !== "number") { if (typeof event.tabId !== "number") {
@@ -413,8 +417,8 @@ export const useEditor = (
if (typeof tabId === "number") { if (typeof tabId === "number") {
useTabStore.getState().updateTab(tabId, { useTabStore.getState().updateTab(tabId, {
readonly: event.item.readonly || readonly, readonly: event.item.readonly || readonly,
locked: noteIsLocked, locked: tabLocked,
noteLocked: noteIsLocked noteLocked: isLockedNote
}); });
useTabStore.getState().focusTab(tabId); useTabStore.getState().focusTab(tabId);
setTimeout(() => { setTimeout(() => {
@@ -431,8 +435,8 @@ export const useEditor = (
// Open note in new tab. // Open note in new tab.
useTabStore.getState().newTab({ useTabStore.getState().newTab({
readonly: event.item.readonly || readonly, readonly: event.item.readonly || readonly,
locked: noteIsLocked, locked: tabLocked,
noteLocked: noteIsLocked, noteLocked: isLockedNote,
noteId: event.item.id, noteId: event.item.id,
previewTab: false previewTab: false
}); });
@@ -442,8 +446,8 @@ export const useEditor = (
// Otherwise we focus the preview tab or create one to open the note in. // Otherwise we focus the preview tab or create one to open the note in.
useTabStore.getState().focusPreviewTab(event.item.id, { useTabStore.getState().focusPreviewTab(event.item.id, {
readonly: event.item.readonly || readonly, readonly: event.item.readonly || readonly,
locked: noteIsLocked, locked: tabLocked,
noteLocked: noteIsLocked noteLocked: isLockedNote
}); });
} }
} }
@@ -467,7 +471,7 @@ export const useEditor = (
state.current.movedAway = false; state.current.movedAway = false;
state.current.currentlyEditing = true; state.current.currentlyEditing = true;
if (!noteIsLocked) { if (!tabLocked) {
await loadContent(item); await loadContent(item);
} }
@@ -530,6 +534,7 @@ export const useEditor = (
} }
}, 300); }, 300);
} }
postMessage(EditorEvents.theme, theme);
}, },
[ [
commands, commands,
@@ -538,7 +543,8 @@ export const useEditor = (
overlay, overlay,
postMessage, postMessage,
readonly, readonly,
reset reset,
theme
] ]
); );
@@ -554,6 +560,8 @@ export const useEditor = (
if (isDeleted(data) || isTrashItem(data)) { if (isDeleted(data) || isTrashItem(data)) {
const tabId = useTabStore.getState().getTabForNote(data.id); const tabId = useTabStore.getState().getTabForNote(data.id);
if (tabId !== undefined) { if (tabId !== undefined) {
console.log("Removing tab");
await commands.clearContent(tabId);
useTabStore.getState().removeTab(tabId); useTabStore.getState().removeTab(tabId);
} }
return; return;
@@ -781,7 +789,9 @@ export const useEditor = (
const onLoad = useCallback(async () => { const onLoad = useCallback(async () => {
if (currentNotes.current) overlay(true); if (currentNotes.current) overlay(true);
postMessage(EditorEvents.theme, theme); setTimeout(() => {
postMessage(EditorEvents.theme, theme);
});
commands.setInsets( commands.setInsets(
isDefaultEditor ? insets : { top: 0, left: 0, right: 0, bottom: 0 } isDefaultEditor ? insets : { top: 0, left: 0, right: 0, bottom: 0 }
); );

View File

@@ -44,7 +44,7 @@ export const getTimeLeft = (t2) => {
}; };
}; };
const ProfilePicPlaceholder = () => { const ProfilePicPlaceholder = (props) => {
const { colors } = useThemeColors(); const { colors } = useThemeColors();
return ( return (
<TouchableOpacity <TouchableOpacity
@@ -52,37 +52,7 @@ const ProfilePicPlaceholder = () => {
alignItems: "center" alignItems: "center"
}} }}
activeOpacity={0.9} activeOpacity={0.9}
onPress={() => { onPress={props?.onChangePicture}
const theme =
useThemeStore.getState().colorScheme === "dark"
? useThemeStore.getState().darkTheme
: useThemeStore.getState().lightTheme;
ImagePicker.openPicker({
compressImageMaxWidth: 256,
compressImageMaxHeight: 256,
compressImageQuality: 0.8,
avoidEmptySpaceAroundImage: true,
cropping: true,
cropperCircleOverlay: true,
mediaType: "photo",
forceJpg: true,
includeBase64: true,
writeTempFile: false,
cropperToolbarColor: theme.scopes.base.primary.background,
cropperToolbarTitle: "Edit profile picture",
cropperActiveWidgetColor: theme.scopes.base.primary.accent,
cropperToolbarWidgetColor: theme.scopes.base.primary.icon
}).then(async (image) => {
if (!image.data) return;
await db.settings.setProfile({
profilePicture: "data:image/jpeg;base64," + image.data
});
useUserStore.setState({
profile: db.settings.getProfile()
});
});
}}
> >
<View <View
style={{ style={{
@@ -100,6 +70,38 @@ const ProfilePicPlaceholder = () => {
); );
}; };
const onChangePicture = () => {
const theme =
useThemeStore.getState().colorScheme === "dark"
? useThemeStore.getState().darkTheme
: useThemeStore.getState().lightTheme;
ImagePicker.openPicker({
compressImageMaxWidth: 256,
compressImageMaxHeight: 256,
compressImageQuality: 0.8,
avoidEmptySpaceAroundImage: true,
cropping: true,
cropperCircleOverlay: true,
mediaType: "photo",
forceJpg: true,
includeBase64: true,
writeTempFile: false,
cropperToolbarColor: theme.scopes.base.primary.background,
cropperToolbarTitle: "Edit profile picture",
cropperActiveWidgetColor: theme.scopes.base.primary.accent,
cropperToolbarWidgetColor: theme.scopes.base.primary.icon
}).then(async (image) => {
if (!image.data) return;
await db.settings.setProfile({
profilePicture: "data:image/jpeg;base64," + image.data
});
useUserStore.setState({
profile: db.settings.getProfile()
});
});
};
const SettingsUserSection = ({ item }) => { const SettingsUserSection = ({ item }) => {
const { colors } = useThemeColors(); const { colors } = useThemeColors();
const user = useUserStore((state) => state.user); const user = useUserStore((state) => state.user);
@@ -145,18 +147,23 @@ const SettingsUserSection = ({ item }) => {
}} }}
> >
{userProfile?.profilePicture ? ( {userProfile?.profilePicture ? (
<Image <TouchableOpacity
source={{ onPress={onChangePicture}
uri: userProfile?.profilePicture activeOpacity={1}
}} >
style={{ <Image
width: 100, source={{
height: 100, uri: userProfile?.profilePicture
borderRadius: 100 }}
}} style={{
/> width: 100,
height: 100,
borderRadius: 100
}}
/>
</TouchableOpacity>
) : ( ) : (
<ProfilePicPlaceholder /> <ProfilePicPlaceholder onChangePicture={onChangePicture} />
)} )}
</View> </View>

View File

@@ -977,7 +977,7 @@
}, },
"../web": { "../web": {
"name": "@notesnook/web", "name": "@notesnook/web",
"version": "3.0.7-beta", "version": "3.0.10-beta",
"hasInstallScript": true, "hasInstallScript": true,
"license": "GPL-3.0-or-later", "license": "GPL-3.0-or-later",
"dependencies": { "dependencies": {

View File

@@ -42,38 +42,37 @@
"@notesnook/theme": "file:../theme", "@notesnook/theme": "file:../theme",
"@notesnook/ui": "file:../ui", "@notesnook/ui": "file:../ui",
"@social-embed/lib": "^0.0.2-next.1", "@social-embed/lib": "^0.0.2-next.1",
"@tiptap/core": "2.1.12", "@tiptap/core": "2.2.4",
"@tiptap/extension-character-count": "2.1.12", "@tiptap/extension-character-count": "2.2.4",
"@tiptap/extension-color": "2.1.12", "@tiptap/extension-color": "2.2.4",
"@tiptap/extension-font-family": "2.1.12", "@tiptap/extension-font-family": "2.2.4",
"@tiptap/extension-history": "2.1.12", "@tiptap/extension-history": "2.2.4",
"@tiptap/extension-horizontal-rule": "2.1.12", "@tiptap/extension-horizontal-rule": "2.2.4",
"@tiptap/extension-link": "^2.1.16", "@tiptap/extension-list-keymap": "2.2.4",
"@tiptap/extension-list-keymap": "2.1.12", "@tiptap/extension-placeholder": "2.2.4",
"@tiptap/extension-placeholder": "2.1.12", "@tiptap/extension-subscript": "2.2.4",
"@tiptap/extension-subscript": "2.1.12", "@tiptap/extension-superscript": "2.2.4",
"@tiptap/extension-superscript": "2.1.12", "@tiptap/extension-table": "2.2.4",
"@tiptap/extension-table": "2.1.12", "@tiptap/extension-table-cell": "2.2.4",
"@tiptap/extension-table-cell": "2.1.12", "@tiptap/extension-table-header": "2.2.4",
"@tiptap/extension-table-header": "2.1.12", "@tiptap/extension-table-row": "2.2.4",
"@tiptap/extension-table-row": "2.1.12", "@tiptap/extension-task-item": "2.2.4",
"@tiptap/extension-task-item": "2.1.12", "@tiptap/extension-task-list": "2.2.4",
"@tiptap/extension-task-list": "2.1.12", "@tiptap/extension-text-align": "2.2.4",
"@tiptap/extension-text-align": "2.1.12", "@tiptap/extension-text-style": "2.2.4",
"@tiptap/extension-text-style": "2.1.12", "@tiptap/extension-underline": "2.2.4",
"@tiptap/extension-underline": "2.1.12", "@tiptap/pm": "2.2.4",
"@tiptap/pm": "2.1.12", "@tiptap/starter-kit": "2.2.4",
"@tiptap/starter-kit": "2.1.12",
"async-mutex": "^0.4.0", "async-mutex": "^0.4.0",
"clipboard-polyfill": "4.0.0", "clipboard-polyfill": "4.0.0",
"detect-indent": "^7.0.0", "detect-indent": "^7.0.0",
"entities": "^4.5.0", "entities": "^4.5.0",
"katex": "0.16.4", "katex": "0.16.9",
"linkifyjs": "^4.1.3", "linkifyjs": "^4.1.3",
"nanoid": "^4.0.1", "nanoid": "^4.0.1",
"prism-themes": "^1.9.0", "prism-themes": "^1.9.0",
"prosemirror-codemark": "^0.4.2", "prosemirror-codemark": "^0.4.2",
"prosemirror-view": "1.32.2", "prosemirror-view": "1.33.1",
"re-resizable": "^6.9.11", "re-resizable": "^6.9.11",
"react-colorful": "^5.6.1", "react-colorful": "^5.6.1",
"redent": "^4.0.0", "redent": "^4.0.0",

View File

@@ -23,7 +23,7 @@ import {
themeToCSS, themeToCSS,
useThemeEngineStore useThemeEngineStore
} from "@notesnook/theme"; } from "@notesnook/theme";
import { useMemo } from "react"; import React, { useMemo } from "react";
import { Freeze } from "react-freeze"; import { Freeze } from "react-freeze";
import "./App.css"; import "./App.css";
import Tiptap from "./components/editor"; import Tiptap from "./components/editor";
@@ -31,15 +31,131 @@ import { TabContext, useTabStore } from "./hooks/useTabStore";
import { EmotionEditorTheme } from "./theme-factory"; import { EmotionEditorTheme } from "./theme-factory";
import { getTheme } from "./utils"; import { getTheme } from "./utils";
import { ReadonlyEditorProvider } from "./components/readonly-editor"; import { ReadonlyEditorProvider } from "./components/readonly-editor";
import { error } from "console";
const currentTheme = getTheme(); const currentTheme = getTheme();
if (currentTheme) { if (currentTheme) {
useThemeEngineStore.getState().setTheme(currentTheme); useThemeEngineStore.getState().setTheme(currentTheme);
} }
class ExceptionHandler extends React.Component<{
children: React.ReactNode;
component: string;
}> {
state: {
error: Error | null;
hasError: boolean;
} = {
hasError: false,
error: null
};
static getDerivedStateFromError(error: Error) {
return { hasError: true, error: error };
}
componentDidCatch(_error: Error) {
// A custom error logging function
post("editorError", {
message: "Editor crashed: " + _error.message,
stack: _error.stack
});
}
render() {
return this.state.hasError ? (
<div
style={{
color: "red",
fontSize: 18,
width: "100%",
display: "flex",
padding: "50px 25px",
flexDirection: "column",
justifyContent: "center",
alignItems: "center",
gap: 10
}}
>
<h3
style={{
marginBottom: 0
}}
>
An error occurred.
</h3>
<button
style={{
borderRadius: 5,
boxSizing: "border-box",
border: "none",
backgroundColor: "red",
width: 300,
fontSize: "0.9em",
height: 45,
display: "flex",
alignItems: "center",
justifyContent: "center",
columnGap: 5,
userSelect: "none"
}}
onClick={() => {
if (!this.state.error) return;
post("editorError", {
message: "Editor crashed: " + this.state.error.message,
stack: this.state.error.stack
});
}}
>
<p
style={{
userSelect: "none",
color: "white"
}}
>
Report error
</p>
</button>
<button
style={{
borderRadius: 5,
boxSizing: "border-box",
border: "none",
backgroundColor: "red",
width: 300,
fontSize: "0.9em",
height: 45,
display: "flex",
alignItems: "center",
justifyContent: "center",
columnGap: 5,
userSelect: "none"
}}
onClick={() => {
window.location.reload();
}}
>
<p
style={{
userSelect: "none",
color: "white"
}}
>
Reload editor
</p>
</button>
</div>
) : (
this.props.children
);
}
}
function App(): JSX.Element { function App(): JSX.Element {
const tabs = useTabStore((state) => state.tabs); const tabs = useTabStore((state) => state.tabs);
const currentTab = useTabStore((state) => state.currentTab); const currentTab = useTabStore((state) => state.currentTab);
return ( return (
<ScopedThemeProvider value="base"> <ScopedThemeProvider value="base">
<EmotionEditorTheme> <EmotionEditorTheme>
@@ -61,7 +177,17 @@ function App(): JSX.Element {
); );
} }
export default App; export const withErrorBoundry = (Element: React.ElementType, name: string) => {
return function ErrorBoundary() {
return (
<ExceptionHandler component={name}>
<Element />
</ExceptionHandler>
);
};
};
export default withErrorBoundry(App, "Editor");
function GlobalStyles() { function GlobalStyles() {
const theme = useThemeEngineStore((store) => store.theme); const theme = useThemeEngineStore((store) => store.theme);

View File

@@ -158,6 +158,27 @@ const Tiptap = ({
}, 500); }, 500);
} }
}, },
onCreate() {
setTimeout(() => {
const noteState = tabRef.current.noteId
? useTabStore.getState().noteState[tabRef.current.noteId]
: undefined;
const top = noteState?.top;
logger("info", tabRef.current.noteId, noteState?.top);
if (noteState?.to || noteState?.from) {
editors[tabRef.current.id]?.chain().setTextSelection({
to: noteState.to,
from: noteState.from
});
}
containerRef.current?.scrollTo({
left: 0,
top: top || 0,
behavior: "auto"
});
}, 32);
},
downloadOptions: { downloadOptions: {
corsHost: settings.corsProxy corsHost: settings.corsProxy
}, },
@@ -182,28 +203,8 @@ const Tiptap = ({
const update = useCallback(() => { const update = useCallback(() => {
logger("info", "LOADING NOTE..."); logger("info", "LOADING NOTE...");
_editor.commands.setTextSelection(0); editors[tabRef.current.id]?.commands.setTextSelection(0);
setTick((tick) => tick + 1); setTick((tick) => tick + 1);
setTimeout(() => {
const noteState = tabRef.current.noteId
? useTabStore.getState().noteState[tabRef.current.noteId]
: undefined;
const top = noteState?.top;
if (noteState?.to || noteState?.from) {
editors[tabRef.current.id]?.chain().setTextSelection({
to: noteState.to,
from: noteState.from
});
}
containerRef.current?.scrollTo({
left: 0,
top: top || 0,
behavior: "auto"
});
}, 32);
globalThis.editorControllers[tabRef.current.id]?.setTitlePlaceholder( globalThis.editorControllers[tabRef.current.id]?.setTitlePlaceholder(
"Note title" "Note title"
); );
@@ -256,6 +257,12 @@ const Tiptap = ({
from: noteState.from from: noteState.from
}); });
} }
} else {
containerRef.current?.scrollTo({
left: 0,
top: 0,
behavior: "auto"
});
} }
if ( if (
@@ -284,6 +291,7 @@ const Tiptap = ({
} }
if (state.currentTab === prevState.currentTab) return; if (state.currentTab === prevState.currentTab) return;
updateScrollPosition(state); updateScrollPosition(state);
logger("info", "updating scroll position");
}); });
logger("info", tabRef.current.id, "active"); logger("info", tabRef.current.id, "active");
return () => { return () => {
@@ -436,7 +444,7 @@ const Tiptap = ({
userSelect: "none" userSelect: "none"
}} }}
> >
{controller.title} ajklsdksa jdlksaj dksljk jdalkjskldj {controller.title}
</p> </p>
<p <p
style={{ style={{
@@ -673,13 +681,21 @@ const Tiptap = ({
</div> </div>
) : null} ) : null}
<div ref={contentPlaceholderRef} className="theme-scope-editor" /> <div
style={{
display: tab.locked ? "none" : "block"
}}
ref={contentPlaceholderRef}
className="theme-scope-editor"
/>
<div <div
onClick={(e) => { onClick={(e) => {
if (tab.locked) return;
onClickBottomArea(); onClickBottomArea();
}} }}
onMouseDown={(e) => { onMouseDown={(e) => {
if (tab.locked) return;
if (globalThis.keyboardShown) { if (globalThis.keyboardShown) {
e.preventDefault(); e.preventDefault();
} }
@@ -687,7 +703,7 @@ const Tiptap = ({
style={{ style={{
flexGrow: 1, flexGrow: 1,
width: "100%", width: "100%",
minHeight: 250 minHeight: 300
}} }}
/> />
</div> </div>
@@ -730,7 +746,6 @@ const TiptapProvider = (): JSX.Element => {
editorContainer.style.cursor = "text"; editorContainer.style.cursor = "text";
editorContainer.style.padding = "0px 12px"; editorContainer.style.padding = "0px 12px";
editorContainer.style.color = colors.primary.paragraph; editorContainer.style.color = colors.primary.paragraph;
editorContainer.style.paddingBottom = `150px`;
editorContainer.style.fontSize = `${settings.fontSize}px`; editorContainer.style.fontSize = `${settings.fontSize}px`;
editorContainer.style.fontFamily = editorContainer.style.fontFamily =
getFontById(settings.fontFamily)?.font || "sans-serif"; getFontById(settings.fontFamily)?.font || "sans-serif";

View File

@@ -75,6 +75,14 @@ function Title({
}; };
}, [tab.id, titleRef]); }, [tab.id, titleRef]);
useEffect(() => {
if (!loading) {
setTimeout(() => {
resizeTextarea();
});
}
}, [loading, resizeTextarea]);
return loading ? null : ( return loading ? null : (
<> <>
<div <div

View File

@@ -154,9 +154,7 @@ export function useEditorController({
if (typeof timers.current.wordCounter === "number") if (typeof timers.current.wordCounter === "number")
clearTimeout(timers.current.wordCounter); clearTimeout(timers.current.wordCounter);
timers.current.wordCounter = setTimeout(() => { timers.current.wordCounter = setTimeout(() => {
console.time("wordCounter");
statusBars[tab.id]?.current?.updateWords(); statusBars[tab.id]?.current?.updateWords();
console.timeEnd("wordCounter");
}, ms); }, ms);
}, },
[tab.id] [tab.id]
@@ -168,6 +166,7 @@ export function useEditorController({
const contentChange = useCallback( const contentChange = useCallback(
(editor: Editor, ignoreEdit?: boolean) => { (editor: Editor, ignoreEdit?: boolean) => {
if (editorControllers[tab.id]?.loading) return;
const currentSessionId = globalThis.sessionId; const currentSessionId = globalThis.sessionId;
post(EventTypes.contentchange, undefined, tab.id, tab.noteId); post(EventTypes.contentchange, undefined, tab.id, tab.noteId);
if (!editor) return; if (!editor) return;
@@ -195,20 +194,31 @@ export function useEditorController({
const scroll = useCallback( const scroll = useCallback(
(_event: React.UIEvent<HTMLDivElement, UIEvent>) => { (_event: React.UIEvent<HTMLDivElement, UIEvent>) => {
if (!tab) return; const noteId = useTabStore
if (tab.noteId) { .getState()
useTabStore.getState().setNoteState(tab.noteId, { .getNoteIdForTab(useTabStore.getState().currentTab);
if (noteId) {
useTabStore.getState().setNoteState(noteId, {
top: _event.currentTarget.scrollTop top: _event.currentTarget.scrollTop
}); });
} }
}, },
[tab] []
); );
const onUpdate = useCallback(() => { const onUpdate = useCallback(() => {
update(); update();
logger("info", "Updating content...");
}, [update]); }, [update]);
useEffect(() => {
if (tab.locked) {
htmlContentRef.current = "";
setLoading(true);
onUpdate();
}
}, [tab.locked, onUpdate]);
const onMessage = useCallback( const onMessage = useCallback(
(event: Event & { data?: string }) => { (event: Event & { data?: string }) => {
if (event?.data?.[0] !== "{") return; if (event?.data?.[0] !== "{") return;

View File

@@ -191,7 +191,8 @@ export const EventTypes = {
unlock: "editor-events:unlock", unlock: "editor-events:unlock",
unlockWithBiometrics: "editor-events:unlock-biometrics", unlockWithBiometrics: "editor-events:unlock-biometrics",
disableReadonlyMode: "editor-events:disable-readonly-mode", disableReadonlyMode: "editor-events:disable-readonly-mode",
readonlyEditorLoaded: "readonlyEditorLoaded" readonlyEditorLoaded: "readonlyEditorLoaded",
error: "editorError"
} as const; } as const;
export function randId(prefix: string) { export function randId(prefix: string) {

View File

@@ -976,22 +976,6 @@
"@styled-system/css": "^5.1.5" "@styled-system/css": "^5.1.5"
} }
}, },
"node_modules/@theme-ui/color-modes": {
"version": "0.16.2",
"resolved": "https://registry.npmjs.org/@theme-ui/color-modes/-/color-modes-0.16.2.tgz",
"integrity": "sha512-jWEWx53lxNgWCT38i/kwLV2rsvJz8lVZgi5oImnVwYba9VejXD23q1ckbNFJHosQ8KKXY87ht0KPC6BQFIiHtQ==",
"dev": true,
"peer": true,
"dependencies": {
"@theme-ui/core": "^0.16.2",
"@theme-ui/css": "^0.16.2",
"deepmerge": "^4.2.2"
},
"peerDependencies": {
"@emotion/react": "^11.11.1",
"react": ">=18"
}
},
"node_modules/@theme-ui/components": { "node_modules/@theme-ui/components": {
"version": "0.16.1", "version": "0.16.1",
"resolved": "https://registry.npmjs.org/@theme-ui/components/-/components-0.16.1.tgz", "resolved": "https://registry.npmjs.org/@theme-ui/components/-/components-0.16.1.tgz",
@@ -1037,22 +1021,6 @@
"@emotion/react": "^11.11.1" "@emotion/react": "^11.11.1"
} }
}, },
"node_modules/@theme-ui/theme-provider": {
"version": "0.16.2",
"resolved": "https://registry.npmjs.org/@theme-ui/theme-provider/-/theme-provider-0.16.2.tgz",
"integrity": "sha512-LRnVevODcGqO0JyLJ3wht+PV3ZoZcJ7XXLJAJWDoGeII4vZcPQKwVy4Lpz/juHsZppQxKcB3U+sQDGBnP25irQ==",
"dev": true,
"peer": true,
"dependencies": {
"@theme-ui/color-modes": "^0.16.2",
"@theme-ui/core": "^0.16.2",
"@theme-ui/css": "^0.16.2"
},
"peerDependencies": {
"@emotion/react": "^11.11.1",
"react": ">=18"
}
},
"node_modules/@tiptap/core": { "node_modules/@tiptap/core": {
"version": "2.2.4", "version": "2.2.4",
"resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.2.4.tgz", "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.2.4.tgz",
@@ -2527,7 +2495,8 @@
"node_modules/js-tokens": { "node_modules/js-tokens": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
"dev": true
}, },
"node_modules/json-parse-even-better-errors": { "node_modules/json-parse-even-better-errors": {
"version": "2.3.1", "version": "2.3.1",
@@ -2591,6 +2560,7 @@
"version": "1.4.0", "version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
"integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
"dev": true,
"dependencies": { "dependencies": {
"js-tokens": "^3.0.0 || ^4.0.0" "js-tokens": "^3.0.0 || ^4.0.0"
}, },
@@ -3164,6 +3134,7 @@
"version": "18.2.0", "version": "18.2.0",
"resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
"integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
"dev": true,
"dependencies": { "dependencies": {
"loose-envify": "^1.1.0" "loose-envify": "^1.1.0"
}, },
@@ -3184,6 +3155,7 @@
"version": "18.2.0", "version": "18.2.0",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
"integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
"dev": true,
"dependencies": { "dependencies": {
"loose-envify": "^1.1.0", "loose-envify": "^1.1.0",
"scheduler": "^0.23.0" "scheduler": "^0.23.0"
@@ -3315,6 +3287,7 @@
"version": "0.23.0", "version": "0.23.0",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
"integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
"dev": true,
"dependencies": { "dependencies": {
"loose-envify": "^1.1.0" "loose-envify": "^1.1.0"
} }

View File

@@ -74,6 +74,7 @@ export const useEditor = (
}) })
); );
if (oldIsFocused && !editor.isFocused) editor.commands.focus(); if (oldIsFocused && !editor.isFocused) editor.commands.focus();
options.onCreate?.({ editor: editor });
} }
editor.options = { ...editor.options, ...options }; editor.options = { ...editor.options, ...options };