diff --git a/package.json b/package.json index 5eed8f11e..08b264e4e 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "applesauce-factory": "next", "applesauce-lists": "next", "applesauce-loaders": "next", - "applesauce-net": "next", + "applesauce-net": "^0.10.0", "applesauce-react": "next", "applesauce-signer": "next", "bech32": "^2.0.0", @@ -75,7 +75,7 @@ "framer-motion": "^10.18.0", "gif-picker-react": "^1.4.0", "handlebars": "^4.7.8", - "hls.js": "^1.5.19", + "hls.js": "^1.5.20", "i18n-iso-countries": "^7.13.0", "idb": "^8.0.1", "identicon.js": "^2.3.3", @@ -164,7 +164,7 @@ "camelcase": "^8.0.0", "eventemitter3": "^5.0.1", "typescript": "^5.7.3", - "vite": "^5.4.12", + "vite": "^5.4.14", "vite-plugin-pwa": "^0.21.1", "vite-tsconfig-paths": "^5.1.4", "workbox-build": "^7.3.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c985c98ef..4e8a37418 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -104,31 +104,31 @@ importers: version: 0.7.2 applesauce-channel: specifier: next - version: 0.0.0-next-20250120191411(typescript@5.7.3) + version: 0.0.0-next-20250123215242(typescript@5.7.3) applesauce-content: specifier: next - version: 0.0.0-next-20250120191411(typescript@5.7.3) + version: 0.0.0-next-20250123215242(typescript@5.7.3) applesauce-core: specifier: next - version: 0.0.0-next-20250120191411(typescript@5.7.3) + version: 0.0.0-next-20250123215242(typescript@5.7.3) applesauce-factory: specifier: next - version: 0.0.0-next-20250120191411(typescript@5.7.3) + version: 0.0.0-next-20250123215242(typescript@5.7.3) applesauce-lists: specifier: next - version: 0.0.0-next-20250120191411(typescript@5.7.3) + version: 0.0.0-next-20250123215242(typescript@5.7.3) applesauce-loaders: specifier: next - version: 0.0.0-next-20250120191411(typescript@5.7.3) + version: 0.0.0-next-20250123215242(typescript@5.7.3) applesauce-net: - specifier: next - version: 0.0.0-next-20250120191411(typescript@5.7.3) + specifier: ^0.10.0 + version: 0.10.0(typescript@5.7.3) applesauce-react: specifier: next - version: 0.0.0-next-20250120191411(typescript@5.7.3) + version: 0.0.0-next-20250123215242(typescript@5.7.3) applesauce-signer: specifier: next - version: 0.0.0-next-20250120191411(typescript@5.7.3) + version: 0.0.0-next-20250123215242(typescript@5.7.3) bech32: specifier: ^2.0.0 version: 2.0.0 @@ -181,8 +181,8 @@ importers: specifier: ^4.7.8 version: 4.7.8 hls.js: - specifier: ^1.5.19 - version: 1.5.19 + specifier: ^1.5.20 + version: 1.5.20 i18n-iso-countries: specifier: ^7.13.0 version: 7.13.0 @@ -269,7 +269,7 @@ importers: version: 9.0.3(@types/react@18.3.18)(react@19.0.0) react-mosaic-component: specifier: ^6.1.1 - version: 6.1.1(@types/node@22.10.7)(@types/react@18.3.18)(dnd-core@16.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 6.1.1(@types/node@22.10.10)(@types/react@18.3.18)(dnd-core@16.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react-photo-album: specifier: ^2.4.1 version: 2.4.1(react@19.0.0) @@ -363,7 +363,7 @@ importers: version: 6.0.2(@capacitor/core@6.2.0) '@capacitor/assets': specifier: ^3.0.5 - version: 3.0.5(@types/node@22.10.7)(typescript@5.7.3) + version: 3.0.5(@types/node@22.10.10)(typescript@5.7.3) '@capacitor/cli': specifier: ^6.2.0 version: 6.2.0 @@ -432,7 +432,7 @@ importers: version: 0.8.7 '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.3.4(vite@5.4.12(@types/node@22.10.7)(terser@5.37.0)) + version: 4.3.4(vite@5.4.14(@types/node@22.10.10)(terser@5.37.0)) camelcase: specifier: ^8.0.0 version: 8.0.0 @@ -443,14 +443,14 @@ importers: specifier: ^5.7.3 version: 5.7.3 vite: - specifier: ^5.4.12 - version: 5.4.12(@types/node@22.10.7)(terser@5.37.0) + specifier: ^5.4.14 + version: 5.4.14(@types/node@22.10.10)(terser@5.37.0) vite-plugin-pwa: specifier: ^0.21.1 - version: 0.21.1(vite@5.4.12(@types/node@22.10.7)(terser@5.37.0))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0) + version: 0.21.1(vite@5.4.14(@types/node@22.10.10)(terser@5.37.0))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.7.3)(vite@5.4.12(@types/node@22.10.7)(terser@5.37.0)) + version: 5.1.4(typescript@5.7.3)(vite@5.4.14(@types/node@22.10.10)(terser@5.37.0)) workbox-build: specifier: ^7.3.0 version: 7.3.0(@types/babel__core@7.20.5) @@ -1954,8 +1954,8 @@ packages: '@types/fs-extra@8.1.5': resolution: {integrity: sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==} - '@types/geojson@7946.0.15': - resolution: {integrity: sha512-9oSxFzDCT2Rj6DfcHF8G++jxBKS7mBqXl5xrRW+Kbvjry6Uduya2iiwqHPhVXpasAVMBYKkEPGgKhd3+/HZ6xA==} + '@types/geojson@7946.0.16': + resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} @@ -2005,8 +2005,8 @@ packages: '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@22.10.7': - resolution: {integrity: sha512-V09KvXxFiutGp6B7XkpaDXlNadZxrzajcY50EuoLIpQ6WWYCSvf19lVIazzfIzQvhUN2HjX12spLojTnhuKlGg==} + '@types/node@22.10.10': + resolution: {integrity: sha512-X47y/mPNzxviAGY5TcYPtYL8JsY3kAq2n8fMmKoRCxq/c4v4pyGNCzM2R6+M5/umG4ZfHuT+sgqDYqWc9rJ6ww==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -2096,8 +2096,8 @@ packages: react: '>=16.8.0' react-dom: '>=16.8.0' - '@ungap/structured-clone@1.2.1': - resolution: {integrity: sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==} + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} '@vitejs/plugin-react@4.3.4': resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==} @@ -2195,32 +2195,35 @@ packages: engines: {node: '>=8.0.0'} hasBin: true - applesauce-channel@0.0.0-next-20250120191411: - resolution: {integrity: sha512-EhMC195fKq8Tez16Zl/ck1Pl+jhfkjyJNxyD5N3SQQkBjlKeI6W1gQiOi6mEqjVtnfRoHyhva7GLnuZvTYiOMA==} + applesauce-channel@0.0.0-next-20250123215242: + resolution: {integrity: sha512-Hnad4rOAZOBknAwbe+D3NgmOwHiaDs0bb0753uWapg4hCoJdxJnkGVv1cO5afDsOjJKXSmxtzh9A0n/JEAr7uA==} - applesauce-content@0.0.0-next-20250120191411: - resolution: {integrity: sha512-3ecwZCk35xttSi8M5GN8r6AWqSUF4RqkrSCnxH2i/Mk5L97q1PJdjRaBlQNGkKzmacZRUasFuiCuNqvKFh2+aQ==} + applesauce-content@0.0.0-next-20250123215242: + resolution: {integrity: sha512-OKzIlcuSim6vHzw/4yJpAhcIIy2hHEo58GP50btmn4BhWDf0cLNHw/X3GRRep3+5GHnYIFcNXmne/ngySwW9QA==} - applesauce-core@0.0.0-next-20250120191411: - resolution: {integrity: sha512-fgqqYpaBWBudk6jdPLNKkAtCVETkcsdFwerjPCcc6+CKcGktP/JO/xhyQUo2uuY+6ED9p840Efor0dzRoBTVAQ==} + applesauce-core@0.0.0-next-20250123215242: + resolution: {integrity: sha512-k7407vczwk6vcYJcr/d/32HWT4MGEZ4aDR57s79kkRg5SDcUyiksroZvn+u1YTldsQ57Ap9v2fuN1HlsJmNDOA==} - applesauce-factory@0.0.0-next-20250120191411: - resolution: {integrity: sha512-MOd2fdpdmehgH3XqxUvWnm0cc1DRjRpHXnBvfG0L5t4/3u/WyzJOAXWV+IOrb3JuyBsYq9jFPI54KJE6kgTNow==} + applesauce-core@0.10.0: + resolution: {integrity: sha512-QMhUh4FIARcqY5soCB4Z8DIu+py0rYb28IgWT4gP9DLBGpDrY8lStXk7W1/46TLjEH97y0hbiXFK7kMCZ31oOQ==} - applesauce-lists@0.0.0-next-20250120191411: - resolution: {integrity: sha512-b7z4mYilwUySHPKOYbjpWbYAorbbZw38LjGD7iBMfMdigMiOIzW1daeU+hYLj4aJtGwMqchQKvOfIFTqqXcSYQ==} + applesauce-factory@0.0.0-next-20250123215242: + resolution: {integrity: sha512-kTk1yz/iFHgtkFA/0/EicfWG2yVv7UsZN/AKKp7FZPVXOWZVpVVWeXAvwayMsb8UnY4jpfAHYfBOYzj2Uo3ZEg==} - applesauce-loaders@0.0.0-next-20250120191411: - resolution: {integrity: sha512-i6kV1r2yNCygS6fSV7U0AR97tR3b/IszEIjFzYDI0U6ZwZPe5Efoh15NsFZBVdofCewrwr/iidaCyvBj/3ZJZA==} + applesauce-lists@0.0.0-next-20250123215242: + resolution: {integrity: sha512-zqf1bhOlBVp+X9RRAhe4A/O6IUkxjh3aL8INviXIVEC9sj9+mtWTOY4sg2EToc9cyh0ub+uZyzKWQWgHVYHV1A==} - applesauce-net@0.0.0-next-20250120191411: - resolution: {integrity: sha512-B2fGuXKdOXEuHca0aIhtS9hTZd6aeEnqnfHGVidMFq8dOEUo+eYauI/0RsrdWHiK/ADqawrViOACZplqS73M5A==} + applesauce-loaders@0.0.0-next-20250123215242: + resolution: {integrity: sha512-gcXV5IebXr55ovgqoF3FHvsE5HmWrmlDJiuWuIFB4vPLEafe1xY6GvpLVKCYIFgUxvtRdJjMyH4g2IvfMbW/xw==} - applesauce-react@0.0.0-next-20250120191411: - resolution: {integrity: sha512-+e+DNw+4KjUuW7q3wKD1R/evcjFXaEC6BRDJaFuL5yRkV6yCAFkgX/X6gduyggRKfJbtXVbnorC5eazAtyoQfA==} + applesauce-net@0.10.0: + resolution: {integrity: sha512-ZsAs/MkeGHiPZ2/a8lwP8lx/Eh+5Dot0qG4BLTAqjg4emP/RsiqW+hyc6v6QcVbdvuR0+hP1gka3+wWtiy/cTA==} - applesauce-signer@0.0.0-next-20250120191411: - resolution: {integrity: sha512-B/2fb96BYB7mZf4XzE916qMy63dXlVsVewEZu80Y4XDD400xV+0+ZfjTnBvCg2ruCOMcqV23KQoqbNOvVnqZjg==} + applesauce-react@0.0.0-next-20250123215242: + resolution: {integrity: sha512-ekf0EqJEGunNvmExzXuCBe4SqowBZZ0u61cDg1NS8vgjvYKyan4QsGYPCtLvmR9M/3g3nd03xhTTMmXkx9+Iiw==} + + applesauce-signer@0.0.0-next-20250123215242: + resolution: {integrity: sha512-YuqOsW35mr1cwqudjw9+Pkti0MdmsJawmIT9zluPoUk8PcGv/sOwRZCi2DrG6U+VUmfwMC+OU4L77QITyG2nwQ==} arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} @@ -2264,6 +2267,10 @@ packages: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + async@3.2.6: resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} @@ -3032,8 +3039,8 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.5.84: - resolution: {integrity: sha512-I+DQ8xgafao9Ha6y0qjHHvpZ9OfyA1qKlkHkjywxzniORU2awxyz7f/iVJcULmrF2yrM3nHQf+iDjJtbbexd/g==} + electron-to-chromium@1.5.87: + resolution: {integrity: sha512-mPFwmEWmRivw2F8x3w3l2m6htAUN97Gy0kwpO++2m9iT1Gt8RCFVUfv9U/sIbHJ6rY4P6/ooqFL/eL7ock+pPg==} elementtree@0.1.7: resolution: {integrity: sha512-wkgGT6kugeQk/P6VZ/f4T+4HB41BVgNBq5CDIZVbQ02nvTVqAiVTbskxxu3eA/X96lMlfYOwnLQpN2v5E1zDEg==} @@ -3207,8 +3214,8 @@ packages: fast-shallow-equal@1.0.0: resolution: {integrity: sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==} - fast-uri@3.0.5: - resolution: {integrity: sha512-5JnBCWpFlMo0a3ciDy/JckMzzv1U9coZrIhedq+HXxxUfDTAiS0LA8OKVao4G9BxmCVck/jtA5r3KAtRWEyD8Q==} + fast-uri@3.0.6: + resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} fast-xml-parser@4.5.1: resolution: {integrity: sha512-y655CeyUQ+jj7KBbYMc4FG01V8ZQqjN+gDYGJ50RtfsUB8iG9AmwmwoAgeKLJdmueKKMrH1RJ7yXHTSoczdv5w==} @@ -3513,8 +3520,8 @@ packages: resolution: {integrity: sha512-qlspKUK7IlSQv2o+5I7yhUd7TxlOG2Vr5LTa3ve2XSNVKAL/n/u/7KLvKmFNimomDIKvZFXWHv0T12mv7rT8Aw==} engines: {node: '>=8'} - hls.js@1.5.19: - resolution: {integrity: sha512-C020dKWEJcyvLnrqsFKW4q6D/6IEzKWdhktIS5bgoyEFE8lHgrFBq4RIngdy113abJOlIruhv8qjg7UX8hwxOw==} + hls.js@1.5.20: + resolution: {integrity: sha512-uu0VXUK52JhihhnN/MVVo1lvqNNuhoxkonqgO3IpjvQiGpJBdIXMGkofjQb/j9zvV7a1SW8U9g1FslWx/1HOiQ==} hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} @@ -3657,8 +3664,8 @@ packages: is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - is-async-function@2.1.0: - resolution: {integrity: sha512-GExz9MtyhlZyXYLxzlJRj5WUCE661zhDa1Yna52CN57AJsymh+DvXXjyveSioqSRdxvUrdKdvqB1b5cVKsNpWQ==} + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} engines: {node: '>= 0.4'} is-bigint@1.1.0: @@ -4210,8 +4217,8 @@ packages: micromark-util-sanitize-uri@2.0.1: resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} - micromark-util-subtokenize@2.0.3: - resolution: {integrity: sha512-VXJJuNxYWSoYL6AJ6OQECCFGhIU2GGHMw8tahogePBrjkG8aCCas3ibkp7RnVOSTClg2is05/R7maAhF1XyQMg==} + micromark-util-subtokenize@2.0.4: + resolution: {integrity: sha512-N6hXjrin2GTJDe3MVjf5FuXpm12PGm80BrUAeub9XFXca8JZbP+oIwY4LJSVwFUCL1IPm/WwSVUN7goFHmSGGQ==} micromark-util-symbol@2.0.1: resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} @@ -4341,8 +4348,8 @@ packages: engines: {node: ^18 || >=20} hasBin: true - napi-build-utils@1.0.2: - resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} + napi-build-utils@2.0.0: + resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} native-run@2.0.1: resolution: {integrity: sha512-XfG1FBZLM50J10xH9361whJRC9SHZ0Bub4iNRhhI61C8Jv0e1ud19muex6sNKB51ibQNUJNuYn25MuYET/rE6w==} @@ -4470,8 +4477,8 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - oniguruma-to-es@2.2.0: - resolution: {integrity: sha512-EEsso27ri0sf+t4uRFEj5C5gvXQj0d0w1Y2qq06b+hDLBnvzO1rWTwEW4C7ytan6nhg4WPwE26eLoiPhHUbvKg==} + oniguruma-to-es@2.3.0: + resolution: {integrity: sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g==} open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} @@ -4640,8 +4647,8 @@ packages: preact@10.25.4: resolution: {integrity: sha512-jLdZDb+Q+odkHJ+MpW/9U5cODzqnB+fy2EiHSZES7ldV5LK7yjlVzTp7R8Xy6W6y75kfK8iWYtFVH7lvjwrCMA==} - prebuild-install@7.1.2: - resolution: {integrity: sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==} + prebuild-install@7.1.3: + resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} engines: {node: '>=10'} hasBin: true @@ -4884,8 +4891,8 @@ packages: '@types/react': optional: true - react-remove-scroll@2.6.2: - resolution: {integrity: sha512-KmONPx5fnlXYJQqC62Q+lwIeAk64ws/cUw6omIumRzMRPqgnYqhSSti99nbj0Ry13bv7dF+BKn7NB+OqkdZGTw==} + react-remove-scroll@2.6.3: + resolution: {integrity: sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==} engines: {node: '>=10'} peerDependencies: '@types/react': ^18.2.22 @@ -5525,8 +5532,8 @@ packages: peerDependencies: three: '>=0.118.3' - three-render-objects@1.37.0: - resolution: {integrity: sha512-k/OBwmjVyUwAMJGjvqGI9ISXaR7uWopuwLPZW3thi/w/97Rd4ZgcnioAPn6OD3wfN6P6Mm12ioEGdJjBJzDg9Q==} + three-render-objects@1.38.1: + resolution: {integrity: sha512-w51UYkIXnyULX9b7m8fJCDHy9HSviCbubYFIpI4Ox5gluAXRlKDvYg2E9ZKhBf4SXr1ieCpPLVfqLwWfo+ceRA==} engines: {node: '>=12'} peerDependencies: three: '>=0.168' @@ -5870,8 +5877,8 @@ packages: vite: optional: true - vite@5.4.12: - resolution: {integrity: sha512-KwUaKB27TvWwDJr1GjjWthLMATbGEbeWYZIbGZ5qFIsgPP3vWzLu4cVooqhm5/Z2SPDUMjyPVjTztm5tYKwQxA==} + vite@5.4.14: + resolution: {integrity: sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -6168,7 +6175,7 @@ snapshots: kapsule: 1.16.0 three: 0.170.0 three-forcegraph: 1.42.12(three@0.170.0) - three-render-objects: 1.37.0(three@0.170.0) + three-render-objects: 1.38.1(three@0.170.0) '@ampproject/remapping@2.3.0': dependencies: @@ -6854,12 +6861,12 @@ snapshots: dependencies: '@capacitor/core': 6.2.0 - '@capacitor/assets@3.0.5(@types/node@22.10.7)(typescript@5.7.3)': + '@capacitor/assets@3.0.5(@types/node@22.10.10)(typescript@5.7.3)': dependencies: '@capacitor/cli': 5.7.8 '@ionic/utils-array': 2.1.6 '@ionic/utils-fs': 3.1.7 - '@trapezedev/project': 7.1.3(@types/node@22.10.7)(typescript@5.7.3) + '@trapezedev/project': 7.1.3(@types/node@22.10.10)(typescript@5.7.3) commander: 8.3.0 debug: 4.3.4 fs-extra: 10.1.0 @@ -7045,7 +7052,7 @@ snapshots: react-dom: 19.0.0(react@19.0.0) react-fast-compare: 3.2.2 react-focus-lock: 2.13.5(@types/react@18.3.18)(react@19.0.0) - react-remove-scroll: 2.6.2(@types/react@18.3.18)(react@19.0.0) + react-remove-scroll: 2.6.3(@types/react@18.3.18)(react@19.0.0) transitivePeerDependencies: - '@types/react' @@ -8039,7 +8046,7 @@ snapshots: dependencies: '@shikijs/types': 1.29.1 '@shikijs/vscode-textmate': 10.0.1 - oniguruma-to-es: 2.2.0 + oniguruma-to-es: 2.3.0 '@shikijs/engine-oniguruma@1.29.1': dependencies: @@ -8083,7 +8090,7 @@ snapshots: '@trapezedev/gradle-parse@7.1.3': {} - '@trapezedev/project@7.1.3(@types/node@22.10.7)(typescript@5.7.3)': + '@trapezedev/project@7.1.3(@types/node@22.10.10)(typescript@5.7.3)': dependencies: '@ionic/utils-fs': 3.1.7 '@ionic/utils-subprocess': 2.1.14 @@ -8105,7 +8112,7 @@ snapshots: replace: 1.2.2 tempy: 1.0.1 tmp: 0.2.3 - ts-node: 10.9.2(@types/node@22.10.7)(typescript@5.7.3) + ts-node: 10.9.2(@types/node@22.10.10)(typescript@5.7.3) xcode: 3.0.1 xml-js: 1.6.11 xpath: 0.0.32 @@ -8186,9 +8193,9 @@ snapshots: '@types/fs-extra@8.1.5': dependencies: - '@types/node': 22.10.7 + '@types/node': 22.10.10 - '@types/geojson@7946.0.15': {} + '@types/geojson@7946.0.16': {} '@types/hast@3.0.4': dependencies: @@ -8206,7 +8213,7 @@ snapshots: '@types/leaflet@1.9.16': dependencies: - '@types/geojson': 7946.0.15 + '@types/geojson': 7946.0.16 '@types/lodash.mergewith@4.6.7': dependencies: @@ -8236,7 +8243,7 @@ snapshots: '@types/node@12.20.55': {} - '@types/node@22.10.7': + '@types/node@22.10.10': dependencies: undici-types: 6.20.0 @@ -8333,16 +8340,16 @@ snapshots: - '@codemirror/lint' - '@codemirror/search' - '@ungap/structured-clone@1.2.1': {} + '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-react@4.3.4(vite@5.4.12(@types/node@22.10.7)(terser@5.37.0))': + '@vitejs/plugin-react@4.3.4(vite@5.4.14(@types/node@22.10.10)(terser@5.37.0))': dependencies: '@babel/core': 7.26.0 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.4.12(@types/node@22.10.7)(terser@5.37.0) + vite: 5.4.14(@types/node@22.10.10)(terser@5.37.0) transitivePeerDependencies: - supports-color @@ -8409,7 +8416,7 @@ snapshots: ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.0.5 + fast-uri: 3.0.6 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -8429,23 +8436,23 @@ snapshots: dependencies: entities: 2.2.0 - applesauce-channel@0.0.0-next-20250120191411(typescript@5.7.3): + applesauce-channel@0.0.0-next-20250123215242(typescript@5.7.3): dependencies: - applesauce-core: 0.0.0-next-20250120191411(typescript@5.7.3) - applesauce-factory: 0.0.0-next-20250120191411(typescript@5.7.3) + applesauce-core: 0.0.0-next-20250123215242(typescript@5.7.3) + applesauce-factory: 0.0.0-next-20250123215242(typescript@5.7.3) nostr-tools: 2.10.4(typescript@5.7.3) rxjs: 7.8.1 transitivePeerDependencies: - supports-color - typescript - applesauce-content@0.0.0-next-20250120191411(typescript@5.7.3): + applesauce-content@0.0.0-next-20250123215242(typescript@5.7.3): dependencies: '@cashu/cashu-ts': 2.0.0-rc1 '@types/hast': 3.0.4 '@types/mdast': 4.0.4 '@types/unist': 3.0.3 - applesauce-core: 0.0.0-next-20250120191411(typescript@5.7.3) + applesauce-core: 0.0.0-next-20250123215242(typescript@5.7.3) mdast-util-find-and-replace: 3.0.2 nostr-tools: 2.10.4(typescript@5.7.3) remark: 15.0.1 @@ -8456,7 +8463,7 @@ snapshots: - supports-color - typescript - applesauce-core@0.0.0-next-20250120191411(typescript@5.7.3): + applesauce-core@0.0.0-next-20250123215242(typescript@5.7.3): dependencies: '@scure/base': 1.2.4 debug: 4.4.0 @@ -8470,23 +8477,37 @@ snapshots: - supports-color - typescript - applesauce-factory@0.0.0-next-20250120191411(typescript@5.7.3): + applesauce-core@0.10.0(typescript@5.7.3): dependencies: - applesauce-content: 0.0.0-next-20250120191411(typescript@5.7.3) - applesauce-core: 0.0.0-next-20250120191411(typescript@5.7.3) + '@scure/base': 1.2.4 + debug: 4.4.0 + fast-deep-equal: 3.1.3 + hash-sum: 2.0.0 + light-bolt11-decoder: 3.2.0 + nanoid: 5.0.9 + nostr-tools: 2.10.4(typescript@5.7.3) + rxjs: 7.8.1 + transitivePeerDependencies: + - supports-color + - typescript + + applesauce-factory@0.0.0-next-20250123215242(typescript@5.7.3): + dependencies: + applesauce-content: 0.0.0-next-20250123215242(typescript@5.7.3) + applesauce-core: 0.0.0-next-20250123215242(typescript@5.7.3) nostr-tools: 2.10.4(typescript@5.7.3) transitivePeerDependencies: - supports-color - typescript - applesauce-lists@0.0.0-next-20250120191411(typescript@5.7.3): + applesauce-lists@0.0.0-next-20250123215242(typescript@5.7.3): dependencies: '@noble/hashes': 1.7.1 '@noble/secp256k1': 1.7.1 '@scure/base': 1.2.4 '@types/dom-serial': 1.0.6 - applesauce-core: 0.0.0-next-20250120191411(typescript@5.7.3) - applesauce-factory: 0.0.0-next-20250120191411(typescript@5.7.3) + applesauce-core: 0.0.0-next-20250123215242(typescript@5.7.3) + applesauce-factory: 0.0.0-next-20250123215242(typescript@5.7.3) debug: 4.4.0 nostr-tools: 2.10.4(typescript@5.7.3) rxjs: 7.8.1 @@ -8494,9 +8515,9 @@ snapshots: - supports-color - typescript - applesauce-loaders@0.0.0-next-20250120191411(typescript@5.7.3): + applesauce-loaders@0.0.0-next-20250123215242(typescript@5.7.3): dependencies: - applesauce-core: 0.0.0-next-20250120191411(typescript@5.7.3) + applesauce-core: 0.0.0-next-20250123215242(typescript@5.7.3) nanoid: 5.0.9 nostr-tools: 2.10.4(typescript@5.7.3) rx-nostr: 3.5.0 @@ -8505,9 +8526,9 @@ snapshots: - supports-color - typescript - applesauce-net@0.0.0-next-20250120191411(typescript@5.7.3): + applesauce-net@0.10.0(typescript@5.7.3): dependencies: - applesauce-core: 0.0.0-next-20250120191411(typescript@5.7.3) + applesauce-core: 0.10.0(typescript@5.7.3) nanoid: 5.0.9 nostr-tools: 2.10.4(typescript@5.7.3) rxjs: 7.8.1 @@ -8515,11 +8536,11 @@ snapshots: - supports-color - typescript - applesauce-react@0.0.0-next-20250120191411(typescript@5.7.3): + applesauce-react@0.0.0-next-20250123215242(typescript@5.7.3): dependencies: - applesauce-content: 0.0.0-next-20250120191411(typescript@5.7.3) - applesauce-core: 0.0.0-next-20250120191411(typescript@5.7.3) - applesauce-factory: 0.0.0-next-20250120191411(typescript@5.7.3) + applesauce-content: 0.0.0-next-20250123215242(typescript@5.7.3) + applesauce-core: 0.0.0-next-20250123215242(typescript@5.7.3) + applesauce-factory: 0.0.0-next-20250123215242(typescript@5.7.3) nostr-tools: 2.10.4(typescript@5.7.3) react: 18.3.1 rxjs: 7.8.1 @@ -8527,13 +8548,13 @@ snapshots: - supports-color - typescript - applesauce-signer@0.0.0-next-20250120191411(typescript@5.7.3): + applesauce-signer@0.0.0-next-20250123215242(typescript@5.7.3): dependencies: '@noble/hashes': 1.7.1 '@noble/secp256k1': 1.7.1 '@scure/base': 1.2.4 '@types/dom-serial': 1.0.6 - applesauce-core: 0.0.0-next-20250120191411(typescript@5.7.3) + applesauce-core: 0.0.0-next-20250123215242(typescript@5.7.3) debug: 4.4.0 nanoid: 5.0.9 nostr-tools: 2.10.4(typescript@5.7.3) @@ -8580,6 +8601,8 @@ snapshots: astral-regex@2.0.0: {} + async-function@1.0.0: {} + async@3.2.6: {} at-least-node@1.0.0: {} @@ -8664,7 +8687,7 @@ snapshots: better-sqlite3@11.8.1: dependencies: bindings: 1.5.0 - prebuild-install: 7.1.2 + prebuild-install: 7.1.3 bezier-js@6.1.4: {} @@ -8756,7 +8779,7 @@ snapshots: browserslist@4.24.4: dependencies: caniuse-lite: 1.0.30001695 - electron-to-chromium: 1.5.84 + electron-to-chromium: 1.5.87 node-releases: 2.0.19 update-browserslist-db: 1.1.2(browserslist@4.24.4) @@ -9453,7 +9476,7 @@ snapshots: dependencies: jake: 10.9.2 - electron-to-chromium@1.5.84: {} + electron-to-chromium@1.5.87: {} elementtree@0.1.7: dependencies: @@ -9696,7 +9719,7 @@ snapshots: fast-shallow-equal@1.0.0: {} - fast-uri@3.0.5: {} + fast-uri@3.0.6: {} fast-xml-parser@4.5.1: dependencies: @@ -10055,7 +10078,7 @@ snapshots: hexoid@2.0.0: {} - hls.js@1.5.19: {} + hls.js@1.5.20: {} hoist-non-react-statics@3.3.2: dependencies: @@ -10185,8 +10208,9 @@ snapshots: is-arrayish@0.3.2: {} - is-async-function@2.1.0: + is-async-function@2.1.1: dependencies: + async-function: 1.0.0 call-bound: 1.0.3 get-proto: 1.0.1 has-tostringtag: 1.0.2 @@ -10645,7 +10669,7 @@ snapshots: dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 - '@ungap/structured-clone': 1.2.1 + '@ungap/structured-clone': 1.3.0 devlop: 1.1.0 micromark-util-sanitize-uri: 2.0.1 trim-lines: 3.0.1 @@ -10738,7 +10762,7 @@ snapshots: micromark-util-html-tag-name: 2.0.1 micromark-util-normalize-identifier: 2.0.1 micromark-util-resolve-all: 2.0.1 - micromark-util-subtokenize: 2.0.3 + micromark-util-subtokenize: 2.0.4 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.1 @@ -10885,7 +10909,7 @@ snapshots: micromark-util-encode: 2.0.1 micromark-util-symbol: 2.0.1 - micromark-util-subtokenize@2.0.3: + micromark-util-subtokenize@2.0.4: dependencies: devlop: 1.1.0 micromark-util-chunked: 2.0.1 @@ -10912,7 +10936,7 @@ snapshots: micromark-util-normalize-identifier: 2.0.1 micromark-util-resolve-all: 2.0.1 micromark-util-sanitize-uri: 2.0.1 - micromark-util-subtokenize: 2.0.3 + micromark-util-subtokenize: 2.0.4 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.1 transitivePeerDependencies: @@ -11026,7 +11050,7 @@ snapshots: nanoid@5.0.9: {} - napi-build-utils@1.0.2: {} + napi-build-utils@2.0.0: {} native-run@2.0.1: dependencies: @@ -11177,7 +11201,7 @@ snapshots: dependencies: wrappy: 1.0.2 - oniguruma-to-es@2.2.0: + oniguruma-to-es@2.3.0: dependencies: emoji-regex-xs: 1.0.0 regex: 5.1.1 @@ -11340,14 +11364,14 @@ snapshots: preact@10.25.4: {} - prebuild-install@7.1.2: + prebuild-install@7.1.3: dependencies: detect-libc: 2.0.3 expand-template: 2.0.3 github-from-package: 0.0.0 minimist: 1.2.8 mkdirp-classic: 0.5.3 - napi-build-utils: 1.0.2 + napi-build-utils: 2.0.0 node-abi: 3.73.0 pump: 3.0.2 rc: 1.2.8 @@ -11474,26 +11498,26 @@ snapshots: dependencies: dnd-core: 16.0.1 - react-dnd-multi-backend@8.1.2(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.10.7)(@types/react@18.3.18)(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + react-dnd-multi-backend@8.1.2(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.10.10)(@types/react@18.3.18)(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: dnd-core: 16.0.1 dnd-multi-backend: 8.1.2(dnd-core@16.0.1) react: 19.0.0 - react-dnd: 16.0.1(@types/node@22.10.7)(@types/react@18.3.18)(react@19.0.0) - react-dnd-preview: 8.1.2(react-dnd@16.0.1(@types/node@22.10.7)(@types/react@18.3.18)(react@19.0.0))(react@19.0.0) + react-dnd: 16.0.1(@types/node@22.10.10)(@types/react@18.3.18)(react@19.0.0) + react-dnd-preview: 8.1.2(react-dnd@16.0.1(@types/node@22.10.10)(@types/react@18.3.18)(react@19.0.0))(react@19.0.0) react-dom: 19.0.0(react@19.0.0) - react-dnd-preview@8.1.2(react-dnd@16.0.1(@types/node@22.10.7)(@types/react@18.3.18)(react@19.0.0))(react@19.0.0): + react-dnd-preview@8.1.2(react-dnd@16.0.1(@types/node@22.10.10)(@types/react@18.3.18)(react@19.0.0))(react@19.0.0): dependencies: react: 19.0.0 - react-dnd: 16.0.1(@types/node@22.10.7)(@types/react@18.3.18)(react@19.0.0) + react-dnd: 16.0.1(@types/node@22.10.10)(@types/react@18.3.18)(react@19.0.0) react-dnd-touch-backend@16.0.1: dependencies: '@react-dnd/invariant': 4.0.2 dnd-core: 16.0.1 - react-dnd@16.0.1(@types/node@22.10.7)(@types/react@18.3.18)(react@19.0.0): + react-dnd@16.0.1(@types/node@22.10.10)(@types/react@18.3.18)(react@19.0.0): dependencies: '@react-dnd/invariant': 4.0.2 '@react-dnd/shallowequal': 4.0.2 @@ -11502,7 +11526,7 @@ snapshots: hoist-non-react-statics: 3.3.2 react: 19.0.0 optionalDependencies: - '@types/node': 22.10.7 + '@types/node': 22.10.10 '@types/react': 18.3.18 react-dom@19.0.0(react@19.0.0): @@ -11571,7 +11595,7 @@ snapshots: transitivePeerDependencies: - supports-color - react-mosaic-component@6.1.1(@types/node@22.10.7)(@types/react@18.3.18)(dnd-core@16.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + react-mosaic-component@6.1.1(@types/node@22.10.10)(@types/react@18.3.18)(dnd-core@16.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: classnames: 2.5.1 immutability-helper: 3.1.1 @@ -11579,9 +11603,9 @@ snapshots: prop-types: 15.8.1 rdndmb-html5-to-touch: 8.1.2(dnd-core@16.0.1) react: 19.0.0 - react-dnd: 16.0.1(@types/node@22.10.7)(@types/react@18.3.18)(react@19.0.0) + react-dnd: 16.0.1(@types/node@22.10.10)(@types/react@18.3.18)(react@19.0.0) react-dnd-html5-backend: 16.0.1 - react-dnd-multi-backend: 8.1.2(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.10.7)(@types/react@18.3.18)(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react-dnd-multi-backend: 8.1.2(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.10.10)(@types/react@18.3.18)(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react-dnd-touch-backend: 16.0.1 uuid: 9.0.1 transitivePeerDependencies: @@ -11613,7 +11637,7 @@ snapshots: optionalDependencies: '@types/react': 18.3.18 - react-remove-scroll@2.6.2(@types/react@18.3.18)(react@19.0.0): + react-remove-scroll@2.6.3(@types/react@18.3.18)(react@19.0.0): dependencies: react: 19.0.0 react-remove-scroll-bar: 2.3.8(@types/react@18.3.18)(react@19.0.0) @@ -12058,7 +12082,7 @@ snapshots: color: 4.2.3 detect-libc: 2.0.3 node-addon-api: 6.1.0 - prebuild-install: 7.1.2 + prebuild-install: 7.1.3 semver: 7.6.3 simple-get: 4.0.1 tar-fs: 3.0.8 @@ -12424,7 +12448,7 @@ snapshots: three: 0.170.0 tinycolor2: 1.6.0 - three-render-objects@1.37.0(three@0.170.0): + three-render-objects@1.38.1(three@0.170.0): dependencies: '@tweenjs/tween.js': 25.0.0 accessor-fn: 1.5.1 @@ -12505,14 +12529,14 @@ snapshots: ts-easing@0.2.0: {} - ts-node@10.9.2(@types/node@22.10.7)(typescript@5.7.3): + ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 22.10.7 + '@types/node': 22.10.10 acorn: 8.14.0 acorn-walk: 8.3.4 arg: 4.1.3 @@ -12727,35 +12751,35 @@ snapshots: vite-plugin-funding@0.1.0: {} - vite-plugin-pwa@0.21.1(vite@5.4.12(@types/node@22.10.7)(terser@5.37.0))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0): + vite-plugin-pwa@0.21.1(vite@5.4.14(@types/node@22.10.10)(terser@5.37.0))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0): dependencies: debug: 4.4.0 pretty-bytes: 6.1.1 tinyglobby: 0.2.10 - vite: 5.4.12(@types/node@22.10.7)(terser@5.37.0) + vite: 5.4.14(@types/node@22.10.10)(terser@5.37.0) workbox-build: 7.3.0(@types/babel__core@7.20.5) workbox-window: 7.3.0 transitivePeerDependencies: - supports-color - vite-tsconfig-paths@5.1.4(typescript@5.7.3)(vite@5.4.12(@types/node@22.10.7)(terser@5.37.0)): + vite-tsconfig-paths@5.1.4(typescript@5.7.3)(vite@5.4.14(@types/node@22.10.10)(terser@5.37.0)): dependencies: debug: 4.4.0 globrex: 0.1.2 tsconfck: 3.1.4(typescript@5.7.3) optionalDependencies: - vite: 5.4.12(@types/node@22.10.7)(terser@5.37.0) + vite: 5.4.14(@types/node@22.10.10)(terser@5.37.0) transitivePeerDependencies: - supports-color - typescript - vite@5.4.12(@types/node@22.10.7)(terser@5.37.0): + vite@5.4.14(@types/node@22.10.10)(terser@5.37.0): dependencies: esbuild: 0.21.5 postcss: 8.5.1 rollup: 4.31.0 optionalDependencies: - '@types/node': 22.10.7 + '@types/node': 22.10.10 fsevents: 2.3.3 terser: 5.37.0 @@ -12805,7 +12829,7 @@ snapshots: call-bound: 1.0.3 function.prototype.name: 1.1.8 has-tostringtag: 1.0.2 - is-async-function: 2.1.0 + is-async-function: 2.1.1 is-date-object: 1.1.0 is-finalizationregistry: 1.1.1 is-generator-function: 1.1.0 diff --git a/src/app.tsx b/src/app.tsx index ebd60f5f6..7928615b3 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -47,6 +47,7 @@ import bookmarksRoutes from "./views/bookmarks/routes"; import articlesRoutes from "./views/articles/routes"; import torrentsRoutes from "./views/torrents/routes"; import channelsRoutes from "./views/channels/routes"; +import groupsRoutes from "./views/groups/routes"; import goalsRoutes from "./views/goals/routes"; import badgesRoutes from "./views/badges/routes"; import emojisRoutes from "./views/emojis/routes"; @@ -108,6 +109,7 @@ const router = createBrowserRouter( { path: "notifications", Component: NotificationsView }, { path: "media", children: mediaRoutes }, { path: "streams", children: streamsRoutes }, + { path: "groups", children: groupsRoutes }, { path: "tools", children: toolsRoutes }, { path: "discovery", children: discoveryRoutes }, { path: "wiki", children: wikiRoutes }, diff --git a/src/components/media-post/media-slides.tsx b/src/components/media-post/media-slides.tsx index 6b5ed33e0..da9c4e381 100644 --- a/src/components/media-post/media-slides.tsx +++ b/src/components/media-post/media-slides.tsx @@ -1,6 +1,6 @@ import { Box, Flex, FlexProps, IconButton, Spacer } from "@chakra-ui/react"; import { NostrEvent } from "nostr-tools"; -import { getMediaAttachments, MediaAttachment } from "applesauce-core/helpers/media-attachment"; +import { getMediaAttachments, MediaAttachment } from "applesauce-core/helpers/file-metadata"; import { Carousel, useCarousel } from "nuka-carousel"; import styled from "@emotion/styled"; diff --git a/src/components/navigation/apps.ts b/src/components/navigation/apps.ts index d82348e51..045144dc5 100644 --- a/src/components/navigation/apps.ts +++ b/src/components/navigation/apps.ts @@ -29,6 +29,7 @@ import Users03 from "../icons/users-03"; import FileAttachment01 from "../icons/file-attachment-01"; import Rocket02 from "../icons/rocket-02"; import PuzzlePiece01 from "../icons/puzzle-piece-01"; +import Users02 from "../icons/users-02"; export type App = { icon?: ComponentWithAs<"svg", IconProps>; @@ -66,6 +67,13 @@ export const internalApps: App[] = [ id: "streams", to: "/streams", }, + { + title: "Groups", + description: "Simple relay based groups", + icon: Users02, + id: "groups", + to: "/groups", + }, { title: "Media", description: "Browser media posts", diff --git a/src/components/timeline-page/generic-note-timeline/share-event.tsx b/src/components/timeline-page/generic-note-timeline/share-event.tsx index 0064d9a82..836c6616e 100644 --- a/src/components/timeline-page/generic-note-timeline/share-event.tsx +++ b/src/components/timeline-page/generic-note-timeline/share-event.tsx @@ -1,5 +1,6 @@ -import { memo } from "react"; +import { memo, useEffect } from "react"; import { Flex, Heading, Text } from "@chakra-ui/react"; +import { parseSharedEvent } from "applesauce-core/helpers/share"; import { kinds, nip18 } from "nostr-tools"; import { NostrEvent } from "../../../types/nostr-event"; @@ -11,14 +12,18 @@ import { TrustProvider } from "../../../providers/local/trust-provider"; import useSingleEvent from "../../../hooks/use-single-event"; import { EmbedEvent } from "../../embed-event"; import useUserMuteFilter from "../../../hooks/use-user-mute-filter"; -import { parseHardcodedNoteContent } from "../../../helpers/nostr/event"; import LoadingNostrLink from "../../loading-nostr-link"; import NoteMenu from "../../note/note-menu"; import useEventIntersectionRef from "../../../hooks/use-event-intersection-ref"; +import { eventStore } from "../../../services/event-store"; function ShareEvent({ event }: { event: NostrEvent }) { const muteFilter = useUserMuteFilter(); - const hardCodedNote = parseHardcodedNoteContent(event); + const hardCodedNote = parseSharedEvent(event); + + useEffect(() => { + if (hardCodedNote) eventStore.add(hardCodedNote); + }, [hardCodedNote]); const pointer = nip18.getRepostedEventPointer(event); const loadedNote = useSingleEvent(pointer?.id, pointer?.relays); diff --git a/src/helpers/nostr/event.ts b/src/helpers/nostr/event.ts index 2c2259c50..235d0f1ab 100644 --- a/src/helpers/nostr/event.ts +++ b/src/helpers/nostr/event.ts @@ -1,20 +1,14 @@ -import { EventTemplate, kinds, validateEvent } from "nostr-tools"; +import { EventTemplate, kinds } from "nostr-tools"; import { getEventUID } from "nostr-idb"; import dayjs from "dayjs"; import { nanoid } from "nanoid"; -import { - getAddressPointerFromATag, - getEventPointerFromETag, - getNip10References, - parseCoordinate, -} from "applesauce-core/helpers"; +import { getAddressPointerFromATag, getEventPointerFromETag, getNip10References } from "applesauce-core/helpers"; import { ATag, ETag, isDTag, isETag, isPTag, NostrEvent, Tag } from "../../types/nostr-event"; import { getMatchNostrLink } from "../regexp"; import { AddressPointer, DecodeResult, EventPointer } from "nostr-tools/nip19"; -import { safeJson } from "../parse"; import { safeDecode } from "../nip19"; -import { safeRelayUrl, safeRelayUrls } from "../relay"; +import { safeRelayUrl } from "../relay"; import RelaySet from "../../classes/relay-set"; import { truncateId } from "../string"; import { createATagFromAddressPointer, createETagFromEventPointer } from "applesauce-factory/helpers"; @@ -170,18 +164,6 @@ export type CustomAddressPointer = Omit & { export { parseCoordinate } from "applesauce-core/helpers/pointers"; -export function parseHardcodedNoteContent(event: NostrEvent) { - const json = safeJson(event.content); - if (!json) return null; - - // ensure the note has tags - json.tags = json.tags || []; - - validateEvent(json); - - return (json as NostrEvent) ?? null; -} - export function sortByDate(a: NostrEvent, b: NostrEvent) { return b.created_at - a.created_at; } diff --git a/src/helpers/nostr/lists.ts b/src/helpers/nostr/lists.ts index f06bcedcf..e4ff01a16 100644 --- a/src/helpers/nostr/lists.ts +++ b/src/helpers/nostr/lists.ts @@ -7,6 +7,8 @@ import { getEventCoordinate, replaceOrAddSimpleTag } from "./event"; import { getRelayVariations, safeRelayUrls } from "../relay"; import { isAddressPointerInList, isEventPointerInList, isProfilePointerInList } from "applesauce-lists/helpers"; +export const USER_GROUPS_LIST_KIND = 10009; + export const LIST_KINDS = [ kinds.Mutelist, kinds.Pinlist, @@ -19,6 +21,7 @@ export const LIST_KINDS = [ kinds.InterestsList, kinds.UserEmojiList, kinds.DirectMessageRelaysList, + USER_GROUPS_LIST_KIND, ]; export const SET_KINDS = [ kinds.Followsets, diff --git a/src/hooks/use-user-groups-list.ts b/src/hooks/use-user-groups-list.ts new file mode 100644 index 000000000..0f0371d3c --- /dev/null +++ b/src/hooks/use-user-groups-list.ts @@ -0,0 +1,15 @@ +import { getPublicGroups } from "applesauce-lists/helpers/groups"; + +import useCurrentAccount from "./use-current-account"; +import useReplaceableEvent from "./use-replaceable-event"; +import { USER_GROUPS_LIST_KIND } from "../helpers/nostr/lists"; + +export default function useUserGroupsList(pubkey?: string, relays: string[] = [], force?: boolean) { + const account = useCurrentAccount(); + const key = pubkey ?? account?.pubkey; + + const list = useReplaceableEvent(key ? { kind: USER_GROUPS_LIST_KIND, pubkey: key } : undefined, relays, force); + const pointers = list ? getPublicGroups(list) : []; + + return { list, pointers }; +} diff --git a/src/views/groups/explore.tsx b/src/views/groups/explore.tsx new file mode 100644 index 000000000..b394d7fea --- /dev/null +++ b/src/views/groups/explore.tsx @@ -0,0 +1,24 @@ +import { Alert, AlertDescription, AlertIcon, AlertTitle, Box, Text } from "@chakra-ui/react"; + +import PeopleListProvider from "../../providers/local/people-list-provider"; +import PeopleListSelection from "../../components/people-list-selection/people-list-selection"; +import ContainedSimpleView from "../../components/layout/presets/contained-simple-view"; + +function GroupsExplorePage() { + return ( + }> + + + Work in progress + + + ); +} + +export default function GroupsExploreView() { + return ( + + + + ); +} diff --git a/src/views/groups/group.tsx b/src/views/groups/group.tsx new file mode 100644 index 000000000..2985c5cae --- /dev/null +++ b/src/views/groups/group.tsx @@ -0,0 +1,20 @@ +import { decodeGroupPointer } from "applesauce-core/helpers/groups"; +import { Navigate, useParams } from "react-router-dom"; +import ContainedSimpleView from "../../components/layout/presets/contained-simple-view"; +import { Alert, AlertIcon, AlertTitle } from "@chakra-ui/react"; + +export default function GroupView() { + const { identifier } = useParams(); + if (!identifier) return ; + + const pointer = decodeGroupPointer(identifier); + + return ( + + + + Work in progress + + + ); +} diff --git a/src/views/groups/index.tsx b/src/views/groups/index.tsx new file mode 100644 index 000000000..4f302b1a2 --- /dev/null +++ b/src/views/groups/index.tsx @@ -0,0 +1,51 @@ +import { Alert, AlertDescription, AlertIcon, AlertTitle, Button } from "@chakra-ui/react"; + +import { ErrorBoundary } from "../../components/error-boundary"; +import ContainedParentView from "../../components/layout/presets/contained-parent-view"; +import RouterLink from "../../components/router-link"; +import useUserGroupsList from "../../hooks/use-user-groups-list"; +import { encodeGroupPointer } from "applesauce-core/helpers/groups"; +import SimpleNavItem from "../../components/layout/presets/simple-nav-item"; + +export default function ChannelsHomeView() { + const { pointers } = useUserGroupsList(); + + return ( + + Explore + + } + > + {pointers?.map((pointer) => ( + + {encodeGroupPointer(pointer)} + + ))} + + {pointers.length === 0 && ( + + + + No groups + + Looks like you have not joined any groups. + + + )} + + ); +} diff --git a/src/views/groups/routes.tsx b/src/views/groups/routes.tsx new file mode 100644 index 000000000..1c8919f01 --- /dev/null +++ b/src/views/groups/routes.tsx @@ -0,0 +1,17 @@ +import { lazy } from "react"; +import { RouteObject } from "react-router-dom"; + +const ChannelsHomeView = lazy(() => import(".")); +const GroupView = lazy(() => import("./group")); +const GroupsExploreView = lazy(() => import("./explore")); + +export default [ + { + Component: ChannelsHomeView, + children: [ + { index: true, Component: GroupsExploreView }, + { path: "explore", Component: GroupsExploreView }, + { path: ":identifier", Component: GroupView }, + ], + }, +] satisfies RouteObject[]; diff --git a/src/views/user/about/index.tsx b/src/views/user/about/index.tsx index febcbe7d5..aa7f27727 100644 --- a/src/views/user/about/index.tsx +++ b/src/views/user/about/index.tsx @@ -44,13 +44,14 @@ import { useSharableProfileId } from "../../../hooks/use-shareable-profile-id"; import UserProfileBadges from "./user-profile-badges"; import UserPinnedEvents from "./user-pinned-events"; import UserStatsAccordion from "./user-stats-accordion"; -import UserJoinedChanneled from "./user-joined-channels"; +import UserJoinedChannels from "./user-joined-channels"; import { getTextColor } from "../../../helpers/color"; import UserName from "../../../components/user/user-name"; import { useUserDNSIdentity } from "../../../hooks/use-user-dns-identity"; import UserAboutContent from "../../../components/user/user-about-content"; import UserRecentEvents from "./user-recent-events"; import useAppSettings, { useUserAppSettings } from "../../../hooks/use-user-app-settings"; +import UserJoinedGroups from "./user-joined-groups"; function DNSIdentityWarning({ pubkey }: { pubkey: string }) { const metadata = useUserProfile(pubkey); @@ -264,7 +265,8 @@ export default function UserAboutTab() { Nostree page - + + diff --git a/src/views/user/about/user-joined-channels.tsx b/src/views/user/about/user-joined-channels.tsx index e885372d9..d60159dfa 100644 --- a/src/views/user/about/user-joined-channels.tsx +++ b/src/views/user/about/user-joined-channels.tsx @@ -6,7 +6,7 @@ import { useBreakpointValue } from "../../../providers/global/breakpoint-provide import useUserChannelsList from "../../../hooks/use-user-channels-list"; import { PointerChannelCard } from "../../channels/components/channel-card"; -export default function UserJoinedChanneled({ pubkey }: { pubkey: string }) { +export default function UserJoinedChannels({ pubkey }: { pubkey: string }) { const contextRelays = useAdditionalRelayContext(); const { pointers: channels } = useUserChannelsList(pubkey, contextRelays, true); const columns = useBreakpointValue({ base: 1, lg: 2, xl: 3 }) ?? 1; diff --git a/src/views/user/about/user-joined-groups.tsx b/src/views/user/about/user-joined-groups.tsx new file mode 100644 index 000000000..909d90cab --- /dev/null +++ b/src/views/user/about/user-joined-groups.tsx @@ -0,0 +1,39 @@ +import { Button, Flex, Heading, SimpleGrid, useDisclosure } from "@chakra-ui/react"; +import { encodeGroupPointer } from "applesauce-core/helpers/groups"; + +import { useAdditionalRelayContext } from "../../../providers/local/additional-relay-context"; +import { ErrorBoundary } from "../../../components/error-boundary"; +import { useBreakpointValue } from "../../../providers/global/breakpoint-provider"; +import useUserGroupsList from "../../../hooks/use-user-groups-list"; +import RouterLink from "../../../components/router-link"; + +export default function UserJoinedGroups({ pubkey }: { pubkey: string }) { + const contextRelays = useAdditionalRelayContext(); + const { list, pointers: groups } = useUserGroupsList(pubkey, contextRelays, true); + const columns = useBreakpointValue({ base: 1, lg: 2, xl: 3 }) ?? 1; + const showAll = useDisclosure(); + + if (groups.length === 0) return null; + + return ( + + + Joined Groups ({groups.length}) + + + {(showAll.isOpen ? groups : groups.slice(0, columns * 2)).map((pointer) => ( + + + + ))} + + {!showAll.isOpen && groups.length > columns * 2 && ( + + )} + + ); +}