diff --git a/package.json b/package.json index 16523a102..dd7f7d4a6 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@chakra-ui/shared-utils": "^2.0.4", "@chakra-ui/styled-system": "^2.12.0", "@chakra-ui/theme-tools": "^2.2.6", - "@codemirror/autocomplete": "^6.18.5", + "@codemirror/autocomplete": "^6.18.6", "@codemirror/lang-json": "^6.0.1", "@codemirror/language": "^6.10.8", "@codemirror/view": "^6.36.2", @@ -93,7 +93,7 @@ "nostr-typedef": "^0.11.0", "nostr-wasm": "^0.1.0", "nuka-carousel": "^8.2.0", - "prettier": "^3.5.0", + "prettier": "^3.5.1", "react": "^19.0.0", "react-chartjs-2": "^5.3.0", "react-diff-viewer-continued": "^3.4.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b85d28177..2091802e3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -40,8 +40,8 @@ importers: specifier: ^2.2.6 version: 2.2.6(@chakra-ui/styled-system@2.12.0(react@19.0.0))(react@19.0.0) '@codemirror/autocomplete': - specifier: ^6.18.5 - version: 6.18.5 + specifier: ^6.18.6 + version: 6.18.6 '@codemirror/lang-json': specifier: ^6.0.1 version: 6.0.1 @@ -95,7 +95,7 @@ importers: version: 4.23.8(@codemirror/language@6.10.8)(@codemirror/state@6.5.2)(@codemirror/view@6.36.2) '@uiw/react-codemirror': specifier: ^4.23.8 - version: 4.23.8(@babel/runtime@7.26.7)(@codemirror/autocomplete@6.18.5)(@codemirror/language@6.10.8)(@codemirror/lint@6.8.4)(@codemirror/search@6.5.8)(@codemirror/state@6.5.2)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.36.2)(codemirror@6.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 4.23.8(@babel/runtime@7.26.7)(@codemirror/autocomplete@6.18.6)(@codemirror/language@6.10.8)(@codemirror/lint@6.8.4)(@codemirror/search@6.5.9)(@codemirror/state@6.5.2)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.36.2)(codemirror@6.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@webscopeio/react-textarea-autocomplete': specifier: ^4.9.2 version: 4.9.2(prop-types@15.8.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -104,25 +104,25 @@ importers: version: 0.7.2 applesauce-accounts: specifier: next - version: 0.0.0-next-20250212001252(typescript@5.7.3) + version: 0.0.0-next-20250213173056(typescript@5.7.3) applesauce-content: specifier: next - version: 0.0.0-next-20250212001252(typescript@5.7.3) + version: 0.0.0-next-20250213173056(typescript@5.7.3) applesauce-core: specifier: next - version: 0.0.0-next-20250212001252(typescript@5.7.3) + version: 0.0.0-next-20250213173056(typescript@5.7.3) applesauce-factory: specifier: next - version: 0.0.0-next-20250212001252(typescript@5.7.3) + version: 0.0.0-next-20250213173056(typescript@5.7.3) applesauce-loaders: specifier: next - version: 0.0.0-next-20250212001252(typescript@5.7.3) + version: 0.0.0-next-20250213173056(typescript@5.7.3) applesauce-react: specifier: next - version: 0.0.0-next-20250212001252(typescript@5.7.3) + version: 0.0.0-next-20250213173056(react-dom@19.0.0(react@19.0.0))(typescript@5.7.3) applesauce-signers: specifier: next - version: 0.0.0-next-20250212001252(typescript@5.7.3) + version: 0.0.0-next-20250213173056(typescript@5.7.3) bech32: specifier: ^2.0.0 version: 2.0.0 @@ -235,8 +235,8 @@ importers: specifier: ^8.2.0 version: 8.2.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) prettier: - specifier: ^3.5.0 - version: 3.5.0 + specifier: ^3.5.1 + version: 3.5.1 react: specifier: ^19.0.0 version: 19.0.0 @@ -266,7 +266,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.13.1)(@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.13.2)(@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) @@ -354,7 +354,7 @@ importers: version: 6.0.2(@capacitor/core@6.2.0) '@capacitor/assets': specifier: ^3.0.5 - version: 3.0.5(@types/node@22.13.1)(typescript@5.7.3) + version: 3.0.5(@types/node@22.13.2)(typescript@5.7.3) '@capacitor/cli': specifier: ^6.2.0 version: 6.2.0 @@ -423,7 +423,7 @@ importers: version: 4.7.5 '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.3.4(vite@5.4.14(@types/node@22.13.1)(terser@5.38.2)) + version: 4.3.4(vite@5.4.14(@types/node@22.13.2)(terser@5.39.0)) camelcase: specifier: ^8.0.0 version: 8.0.0 @@ -438,13 +438,13 @@ importers: version: 5.7.3 vite: specifier: ^5.4.14 - version: 5.4.14(@types/node@22.13.1)(terser@5.38.2) + version: 5.4.14(@types/node@22.13.2)(terser@5.39.0) vite-plugin-pwa: specifier: ^0.21.1 - version: 0.21.1(vite@5.4.14(@types/node@22.13.1)(terser@5.38.2))(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.13.2)(terser@5.39.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.14(@types/node@22.13.1)(terser@5.38.2)) + version: 5.1.4(typescript@5.7.3)(vite@5.4.14(@types/node@22.13.2)(terser@5.39.0)) workbox-build: specifier: ^7.3.0 version: 7.3.0(@types/babel__core@7.20.5) @@ -1220,8 +1220,8 @@ packages: '@changesets/write@0.3.2': resolution: {integrity: sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==} - '@codemirror/autocomplete@6.18.5': - resolution: {integrity: sha512-1e0/GALpdgVEcM6jUIrFuhznnwaCzxJNbZ4yiOjVluS2dvz+D0r6k4nBjL+TJZeHRemnBpTUdnEnqd5f0/+D0w==} + '@codemirror/autocomplete@6.18.6': + resolution: {integrity: sha512-PHHBXFomUs5DF+9tCOM/UoW6XQ4R44lLNNhRaW9PKPTU0D7lIjRg3ElxaJnTwsl/oHiR93WSXDBrekhoUGCPtg==} '@codemirror/commands@6.8.0': resolution: {integrity: sha512-q8VPEFaEP4ikSlt6ZxjB3zW72+7osfAYW9i8Zu943uqbKuz6utc1+F170hyLUCUltXORjQXRyYQNfkckzA/bPQ==} @@ -1238,8 +1238,8 @@ packages: '@codemirror/lint@6.8.4': resolution: {integrity: sha512-u4q7PnZlJUojeRe8FJa/njJcMctISGgPQ4PnWsd9268R4ZTtU+tfFYmwkBvgcrK2+QQ8tYFVALVb5fVJykKc5A==} - '@codemirror/search@6.5.8': - resolution: {integrity: sha512-PoWtZvo7c1XFeZWmmyaOp2G0XVbOnm+fJzvghqGAktBW3cufwJUWvSCcNG0ppXiBEM05mZu6RhMtXPv2hpllig==} + '@codemirror/search@6.5.9': + resolution: {integrity: sha512-7DdQ9aaZMMxuWB1u6IIFWWuK9NocVZwvo4nG8QjJTS6oZGvteoLSiXw3EbVZVlO08Ri2ltO89JVInMpfcJxhtg==} '@codemirror/state@6.5.2': resolution: {integrity: sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==} @@ -2005,8 +2005,8 @@ packages: '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@22.13.1': - resolution: {integrity: sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==} + '@types/node@22.13.2': + resolution: {integrity: sha512-Z+r8y3XL9ZpI2EY52YYygAFmo2/oWfNSj4BCpAXE2McAexDk8VcnBMGC9Djn9gTKt4d2T/hhXqmPzo4hfIXtTg==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -2192,26 +2192,26 @@ packages: engines: {node: '>=8.0.0'} hasBin: true - applesauce-accounts@0.0.0-next-20250212001252: - resolution: {integrity: sha512-yFbgY2HTQ4iEecYUjHJkZYS0Rjzm8DGZxc3iFURZY9mZtqQLthtwrL1zHm5UhEY0gnd3B67NxabbOpjKQr7CPA==} + applesauce-accounts@0.0.0-next-20250213173056: + resolution: {integrity: sha512-5rzAdw6UPmNbCXSu4+WR86/Q075ieucSqrBmFqBFfk61uGX2j2ttfG7fHTmOyZ69b9er2V4zOOZRNl1aKYUayQ==} - applesauce-content@0.0.0-next-20250212001252: - resolution: {integrity: sha512-ysAABUtkJSsr25Qnr/el+gNG8Ed/T4m+Bx1YIBXWNjaSvRCkNh22kMyQo3a6S40TQYALHSTY4pkIIshTv+HSMg==} + applesauce-content@0.0.0-next-20250213173056: + resolution: {integrity: sha512-soxdFR4PO5sLzJ2szL2+uiaVTnPrNGDITaJMF2oqjB3jOVTO5GD+N7hNH7VONORKrmgYDO9z0o+tr1e3YCS9Xg==} - applesauce-core@0.0.0-next-20250212001252: - resolution: {integrity: sha512-Gv8qL2pH/k3gXJHumZDla5PQuKsvpTpZaoETTQwIHaEw5C/ZMaIExjhgb1nsPnVjOgHnnfhb3FGc4BIP4q/mXA==} + applesauce-core@0.0.0-next-20250213173056: + resolution: {integrity: sha512-d+j2m2ddDj174Eb9cdjCWazI30pjo9ZZa6VXSyXKoaH1oFdeLx6pgNHh3DVrgZq7hvnicsvXNsC/ZfAOgZJViQ==} - applesauce-factory@0.0.0-next-20250212001252: - resolution: {integrity: sha512-J6ZXdMkyuJuWx8tHjNI1wTCZsKbs70EHR7pAzvVowc3RsFGl/yMp4tBlv5dg239MzWJv1lhkS4NP9DSaev65Gg==} + applesauce-factory@0.0.0-next-20250213173056: + resolution: {integrity: sha512-5MfEgh+7d0eIUvhgLIu0YFWlIoMZmAH6i75KXACdWGm6eSduGyAzOg8qRJJjHgLElI1SVbCMSqAaNoRSRMOQgA==} - applesauce-loaders@0.0.0-next-20250212001252: - resolution: {integrity: sha512-OoMKYSb1UIXShYoQyXd7Zqg5TJdXZMRzhw4+Fm22WQe3UaouF5QjDuXSOTcWfejgltNuD+TuYFelcxZ2criD1A==} + applesauce-loaders@0.0.0-next-20250213173056: + resolution: {integrity: sha512-+9gh+hzqyRy/3u5wKa3zB6oOYJ7UMWrEvEwnmPmjcmwhPPV5Tbl7uU5yYs/YZx3ju4W8tbEsWOiJjix/w2WvJA==} - applesauce-react@0.0.0-next-20250212001252: - resolution: {integrity: sha512-2BkTFiJWePOgiJzo0VU+2VdcVma2453OjndHOeX6WOOzLLhAvUhTgymQZJA3xcraj7bbVVVVyCtWXZByDF5EqA==} + applesauce-react@0.0.0-next-20250213173056: + resolution: {integrity: sha512-vgThHghEd0kBDuWH/wOVtzwsg5PW6q/SLntK1pKDrGWUE93+cnQc7HpuAuVxCQf7VnJbvPTQvidD9qjT1h03fg==} - applesauce-signers@0.0.0-next-20250212001252: - resolution: {integrity: sha512-ZLH4PafDk6CbtFmxYt4qP9+y82wDxj5U/hrs+YikToHPTBvAB9pFwWyRwzhC3l9bDm90liqGzjlGj7QyBpIuMA==} + applesauce-signers@0.0.0-next-20250213173056: + resolution: {integrity: sha512-e7CWyYOJixIogepTOLcXiipNfZj3mXSp9tcQW+rDaSRaTi3ory1DwUbSl5/MB5gAQboqEdN1Q1PT778gSXoxvQ==} arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} @@ -2420,8 +2420,8 @@ packages: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} - call-bind-apply-helpers@1.0.1: - resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} call-bind@1.0.8: @@ -3027,8 +3027,8 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.5.97: - resolution: {integrity: sha512-HKLtaH02augM7ZOdYRuO19rWDeY+QSJ1VxnXFa/XDFLf07HvM90pALIJFgrO+UVaajI3+aJMMpojoUTLZyQ7JQ==} + electron-to-chromium@1.5.98: + resolution: {integrity: sha512-bI/LbtRBxU2GzK7KK5xxFd2y9Lf9XguHooPYbcXWy6wUoT8NMnffsvRhPmSeUHLSDKAEtKuTaEtK4Ms15zkIEA==} elementtree@0.1.7: resolution: {integrity: sha512-wkgGT6kugeQk/P6VZ/f4T+4HB41BVgNBq5CDIZVbQ02nvTVqAiVTbskxxu3eA/X96lMlfYOwnLQpN2v5E1zDEg==} @@ -4462,6 +4462,13 @@ packages: resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} engines: {node: '>= 0.4'} + observable-hooks@4.2.4: + resolution: {integrity: sha512-FdTQgyw1h5bG/QHCBIqctdBSnv9VARJCEilgpV6L2qlw1yeLqFIwPm4U15dMtl5kDmNN0hSt+Nl6iYbLFwEcQA==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + rxjs: '>=6.0.0' + on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} @@ -4649,8 +4656,8 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - prettier@3.5.0: - resolution: {integrity: sha512-quyMrVt6svPS7CjQ9gKb3GLEX/rl3BCL2oa/QkNcXv4YNVBC9olt3s+H7ukto06q7B1Qz46PbrKLO34PR6vXcA==} + prettier@3.5.1: + resolution: {integrity: sha512-hPpFQvHwL3Qv5AdRvBFMhnKo4tYxp0ReXiPn2bxkiohEX6mBeBwEpBSQTkD458RaaDKQMYSp4hX4UtfUTA5wDw==} engines: {node: '>=14'} hasBin: true @@ -5500,8 +5507,8 @@ packages: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} - terser@5.38.2: - resolution: {integrity: sha512-w8CXxxbFA5zfNsR/i8HZq5bvn18AK0O9jj7hyo1YqkovLxEFa0uP0LCVGZRqiRaKRFxXhELBp8SteeAjEnfeJg==} + terser@5.39.0: + resolution: {integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==} engines: {node: '>=10'} hasBin: true @@ -6844,12 +6851,12 @@ snapshots: dependencies: '@capacitor/core': 6.2.0 - '@capacitor/assets@3.0.5(@types/node@22.13.1)(typescript@5.7.3)': + '@capacitor/assets@3.0.5(@types/node@22.13.2)(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.13.1)(typescript@5.7.3) + '@trapezedev/project': 7.1.3(@types/node@22.13.2)(typescript@5.7.3) commander: 8.3.0 debug: 4.3.4 fs-extra: 10.1.0 @@ -7284,7 +7291,7 @@ snapshots: human-id: 1.0.2 prettier: 2.8.8 - '@codemirror/autocomplete@6.18.5': + '@codemirror/autocomplete@6.18.6': dependencies: '@codemirror/language': 6.10.8 '@codemirror/state': 6.5.2 @@ -7305,7 +7312,7 @@ snapshots: '@codemirror/lang-yaml@6.1.2': dependencies: - '@codemirror/autocomplete': 6.18.5 + '@codemirror/autocomplete': 6.18.6 '@codemirror/language': 6.10.8 '@codemirror/state': 6.5.2 '@lezer/common': 1.2.3 @@ -7329,7 +7336,7 @@ snapshots: '@codemirror/view': 6.36.2 crelt: 1.0.6 - '@codemirror/search@6.5.8': + '@codemirror/search@6.5.9': dependencies: '@codemirror/state': 6.5.2 '@codemirror/view': 6.36.2 @@ -7842,7 +7849,7 @@ snapshots: '@prettier/plugin-xml@2.2.0': dependencies: '@xml-tools/parser': 1.0.11 - prettier: 3.5.0 + prettier: 3.5.1 '@react-dnd/asap@5.0.2': {} @@ -7883,7 +7890,7 @@ snapshots: dependencies: serialize-javascript: 6.0.2 smob: 1.5.0 - terser: 5.38.2 + terser: 5.39.0 optionalDependencies: rollup: 2.79.2 @@ -8072,7 +8079,7 @@ snapshots: '@trapezedev/gradle-parse@7.1.3': {} - '@trapezedev/project@7.1.3(@types/node@22.13.1)(typescript@5.7.3)': + '@trapezedev/project@7.1.3(@types/node@22.13.2)(typescript@5.7.3)': dependencies: '@ionic/utils-fs': 3.1.7 '@ionic/utils-subprocess': 2.1.14 @@ -8094,7 +8101,7 @@ snapshots: replace: 1.2.2 tempy: 1.0.1 tmp: 0.2.3 - ts-node: 10.9.2(@types/node@22.13.1)(typescript@5.7.3) + ts-node: 10.9.2(@types/node@22.13.2)(typescript@5.7.3) xcode: 3.0.1 xml-js: 1.6.11 xpath: 0.0.32 @@ -8175,7 +8182,7 @@ snapshots: '@types/fs-extra@8.1.5': dependencies: - '@types/node': 22.13.1 + '@types/node': 22.13.2 '@types/gensync@1.0.4': {} @@ -8229,7 +8236,7 @@ snapshots: '@types/node@12.20.55': {} - '@types/node@22.13.1': + '@types/node@22.13.2': dependencies: undici-types: 6.20.0 @@ -8283,13 +8290,13 @@ snapshots: '@types/webxr@0.5.21': {} - '@uiw/codemirror-extensions-basic-setup@4.23.8(@codemirror/autocomplete@6.18.5)(@codemirror/commands@6.8.0)(@codemirror/language@6.10.8)(@codemirror/lint@6.8.4)(@codemirror/search@6.5.8)(@codemirror/state@6.5.2)(@codemirror/view@6.36.2)': + '@uiw/codemirror-extensions-basic-setup@4.23.8(@codemirror/autocomplete@6.18.6)(@codemirror/commands@6.8.0)(@codemirror/language@6.10.8)(@codemirror/lint@6.8.4)(@codemirror/search@6.5.9)(@codemirror/state@6.5.2)(@codemirror/view@6.36.2)': dependencies: - '@codemirror/autocomplete': 6.18.5 + '@codemirror/autocomplete': 6.18.6 '@codemirror/commands': 6.8.0 '@codemirror/language': 6.10.8 '@codemirror/lint': 6.8.4 - '@codemirror/search': 6.5.8 + '@codemirror/search': 6.5.9 '@codemirror/state': 6.5.2 '@codemirror/view': 6.36.2 @@ -8307,14 +8314,14 @@ snapshots: '@codemirror/state': 6.5.2 '@codemirror/view': 6.36.2 - '@uiw/react-codemirror@4.23.8(@babel/runtime@7.26.7)(@codemirror/autocomplete@6.18.5)(@codemirror/language@6.10.8)(@codemirror/lint@6.8.4)(@codemirror/search@6.5.8)(@codemirror/state@6.5.2)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.36.2)(codemirror@6.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@uiw/react-codemirror@4.23.8(@babel/runtime@7.26.7)(@codemirror/autocomplete@6.18.6)(@codemirror/language@6.10.8)(@codemirror/lint@6.8.4)(@codemirror/search@6.5.9)(@codemirror/state@6.5.2)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.36.2)(codemirror@6.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@babel/runtime': 7.26.7 '@codemirror/commands': 6.8.0 '@codemirror/state': 6.5.2 '@codemirror/theme-one-dark': 6.1.2 '@codemirror/view': 6.36.2 - '@uiw/codemirror-extensions-basic-setup': 4.23.8(@codemirror/autocomplete@6.18.5)(@codemirror/commands@6.8.0)(@codemirror/language@6.10.8)(@codemirror/lint@6.8.4)(@codemirror/search@6.5.8)(@codemirror/state@6.5.2)(@codemirror/view@6.36.2) + '@uiw/codemirror-extensions-basic-setup': 4.23.8(@codemirror/autocomplete@6.18.6)(@codemirror/commands@6.8.0)(@codemirror/language@6.10.8)(@codemirror/lint@6.8.4)(@codemirror/search@6.5.9)(@codemirror/state@6.5.2)(@codemirror/view@6.36.2) codemirror: 6.0.1 react: 19.0.0 react-dom: 19.0.0(react@19.0.0) @@ -8326,14 +8333,14 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-react@4.3.4(vite@5.4.14(@types/node@22.13.1)(terser@5.38.2))': + '@vitejs/plugin-react@4.3.4(vite@5.4.14(@types/node@22.13.2)(terser@5.39.0))': dependencies: '@babel/core': 7.26.8 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.8) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.8) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.4.14(@types/node@22.13.1)(terser@5.38.2) + vite: 5.4.14(@types/node@22.13.2)(terser@5.39.0) transitivePeerDependencies: - supports-color @@ -8420,10 +8427,10 @@ snapshots: dependencies: entities: 2.2.0 - applesauce-accounts@0.0.0-next-20250212001252(typescript@5.7.3): + applesauce-accounts@0.0.0-next-20250213173056(typescript@5.7.3): dependencies: '@noble/hashes': 1.7.1 - applesauce-signers: 0.0.0-next-20250212001252(typescript@5.7.3) + applesauce-signers: 0.0.0-next-20250213173056(typescript@5.7.3) nanoid: 5.0.9 nostr-tools: 2.10.4(typescript@5.7.3) rxjs: 7.8.1 @@ -8431,13 +8438,13 @@ snapshots: - supports-color - typescript - applesauce-content@0.0.0-next-20250212001252(typescript@5.7.3): + applesauce-content@0.0.0-next-20250213173056(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-20250212001252(typescript@5.7.3) + applesauce-core: 0.0.0-next-20250213173056(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 @@ -8448,7 +8455,7 @@ snapshots: - supports-color - typescript - applesauce-core@0.0.0-next-20250212001252(typescript@5.7.3): + applesauce-core@0.0.0-next-20250213173056(typescript@5.7.3): dependencies: '@scure/base': 1.2.4 debug: 4.4.0 @@ -8462,19 +8469,19 @@ snapshots: - supports-color - typescript - applesauce-factory@0.0.0-next-20250212001252(typescript@5.7.3): + applesauce-factory@0.0.0-next-20250213173056(typescript@5.7.3): dependencies: - applesauce-content: 0.0.0-next-20250212001252(typescript@5.7.3) - applesauce-core: 0.0.0-next-20250212001252(typescript@5.7.3) + applesauce-content: 0.0.0-next-20250213173056(typescript@5.7.3) + applesauce-core: 0.0.0-next-20250213173056(typescript@5.7.3) nanoid: 5.0.9 nostr-tools: 2.10.4(typescript@5.7.3) transitivePeerDependencies: - supports-color - typescript - applesauce-loaders@0.0.0-next-20250212001252(typescript@5.7.3): + applesauce-loaders@0.0.0-next-20250213173056(typescript@5.7.3): dependencies: - applesauce-core: 0.0.0-next-20250212001252(typescript@5.7.3) + applesauce-core: 0.0.0-next-20250213173056(typescript@5.7.3) nanoid: 5.0.9 nostr-tools: 2.10.4(typescript@5.7.3) rx-nostr: 3.5.0 @@ -8483,25 +8490,27 @@ snapshots: - supports-color - typescript - applesauce-react@0.0.0-next-20250212001252(typescript@5.7.3): + applesauce-react@0.0.0-next-20250213173056(react-dom@19.0.0(react@19.0.0))(typescript@5.7.3): dependencies: - applesauce-accounts: 0.0.0-next-20250212001252(typescript@5.7.3) - applesauce-content: 0.0.0-next-20250212001252(typescript@5.7.3) - applesauce-core: 0.0.0-next-20250212001252(typescript@5.7.3) - applesauce-factory: 0.0.0-next-20250212001252(typescript@5.7.3) + applesauce-accounts: 0.0.0-next-20250213173056(typescript@5.7.3) + applesauce-content: 0.0.0-next-20250213173056(typescript@5.7.3) + applesauce-core: 0.0.0-next-20250213173056(typescript@5.7.3) + applesauce-factory: 0.0.0-next-20250213173056(typescript@5.7.3) nostr-tools: 2.10.4(typescript@5.7.3) + observable-hooks: 4.2.4(react-dom@19.0.0(react@19.0.0))(react@18.3.1)(rxjs@7.8.1) react: 18.3.1 rxjs: 7.8.1 transitivePeerDependencies: + - react-dom - supports-color - typescript - applesauce-signers@0.0.0-next-20250212001252(typescript@5.7.3): + applesauce-signers@0.0.0-next-20250213173056(typescript@5.7.3): dependencies: '@noble/hashes': 1.7.1 '@noble/secp256k1': 1.7.1 '@scure/base': 1.2.4 - applesauce-core: 0.0.0-next-20250212001252(typescript@5.7.3) + applesauce-core: 0.0.0-next-20250213173056(typescript@5.7.3) debug: 4.4.0 nanoid: 5.0.9 nostr-tools: 2.10.4(typescript@5.7.3) @@ -8726,7 +8735,7 @@ snapshots: browserslist@4.24.4: dependencies: caniuse-lite: 1.0.30001699 - electron-to-chromium: 1.5.97 + electron-to-chromium: 1.5.98 node-releases: 2.0.19 update-browserslist-db: 1.1.2(browserslist@4.24.4) @@ -8746,21 +8755,21 @@ snapshots: bytes@3.1.2: {} - call-bind-apply-helpers@1.0.1: + call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 call-bind@1.0.8: dependencies: - call-bind-apply-helpers: 1.0.1 + call-bind-apply-helpers: 1.0.2 es-define-property: 1.0.1 get-intrinsic: 1.2.7 set-function-length: 1.2.2 call-bound@1.0.3: dependencies: - call-bind-apply-helpers: 1.0.1 + call-bind-apply-helpers: 1.0.2 get-intrinsic: 1.2.7 callsites@3.1.0: {} @@ -8890,7 +8899,7 @@ snapshots: shiki: 1.29.2 yaml: 2.7.0 optionalDependencies: - '@codemirror/autocomplete': 6.18.5 + '@codemirror/autocomplete': 6.18.6 '@codemirror/lang-json': 6.0.1 '@codemirror/lang-yaml': 6.1.2 codemirror-json5: 1.0.3 @@ -8915,11 +8924,11 @@ snapshots: codemirror@6.0.1: dependencies: - '@codemirror/autocomplete': 6.18.5 + '@codemirror/autocomplete': 6.18.6 '@codemirror/commands': 6.8.0 '@codemirror/language': 6.10.8 '@codemirror/lint': 6.8.4 - '@codemirror/search': 6.5.8 + '@codemirror/search': 6.5.9 '@codemirror/state': 6.5.2 '@codemirror/view': 6.36.2 @@ -9403,7 +9412,7 @@ snapshots: dunder-proto@1.0.1: dependencies: - call-bind-apply-helpers: 1.0.1 + call-bind-apply-helpers: 1.0.2 es-errors: 1.3.0 gopd: 1.2.0 @@ -9423,7 +9432,7 @@ snapshots: dependencies: jake: 10.9.2 - electron-to-chromium@1.5.97: {} + electron-to-chromium@1.5.98: {} elementtree@0.1.7: dependencies: @@ -9838,7 +9847,7 @@ snapshots: get-intrinsic@1.2.7: dependencies: - call-bind-apply-helpers: 1.0.1 + call-bind-apply-helpers: 1.0.2 es-define-property: 1.0.1 es-errors: 1.3.0 es-object-atoms: 1.1.1 @@ -11142,6 +11151,12 @@ snapshots: has-symbols: 1.1.0 object-keys: 1.1.1 + observable-hooks@4.2.4(react-dom@19.0.0(react@19.0.0))(react@18.3.1)(rxjs@7.8.1): + dependencies: + react: 18.3.1 + react-dom: 19.0.0(react@19.0.0) + rxjs: 7.8.1 + on-finished@2.4.1: dependencies: ee-first: 1.1.1 @@ -11330,7 +11345,7 @@ snapshots: prettier@2.8.8: {} - prettier@3.5.0: {} + prettier@3.5.1: {} pretty-bytes@5.6.0: {} @@ -11445,26 +11460,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.13.1)(@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.13.2)(@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.13.1)(@types/react@18.3.18)(react@19.0.0) - react-dnd-preview: 8.1.2(react-dnd@16.0.1(@types/node@22.13.1)(@types/react@18.3.18)(react@19.0.0))(react@19.0.0) + react-dnd: 16.0.1(@types/node@22.13.2)(@types/react@18.3.18)(react@19.0.0) + react-dnd-preview: 8.1.2(react-dnd@16.0.1(@types/node@22.13.2)(@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.13.1)(@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.13.2)(@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.13.1)(@types/react@18.3.18)(react@19.0.0) + react-dnd: 16.0.1(@types/node@22.13.2)(@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.13.1)(@types/react@18.3.18)(react@19.0.0): + react-dnd@16.0.1(@types/node@22.13.2)(@types/react@18.3.18)(react@19.0.0): dependencies: '@react-dnd/invariant': 4.0.2 '@react-dnd/shallowequal': 4.0.2 @@ -11473,7 +11488,7 @@ snapshots: hoist-non-react-statics: 3.3.2 react: 19.0.0 optionalDependencies: - '@types/node': 22.13.1 + '@types/node': 22.13.2 '@types/react': 18.3.18 react-dom@19.0.0(react@19.0.0): @@ -11542,7 +11557,7 @@ snapshots: transitivePeerDependencies: - supports-color - react-mosaic-component@6.1.1(@types/node@22.13.1)(@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.13.2)(@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 @@ -11550,9 +11565,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.13.1)(@types/react@18.3.18)(react@19.0.0) + react-dnd: 16.0.1(@types/node@22.13.2)(@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.13.1)(@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.13.2)(@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: @@ -12365,7 +12380,7 @@ snapshots: term-size@2.2.1: {} - terser@5.38.2: + terser@5.39.0: dependencies: '@jridgewell/source-map': 0.3.6 acorn: 8.14.0 @@ -12473,14 +12488,14 @@ snapshots: ts-easing@0.2.0: {} - ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3): + ts-node@10.9.2(@types/node@22.13.2)(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.13.1 + '@types/node': 22.13.2 acorn: 8.14.0 acorn-walk: 8.3.4 arg: 4.1.3 @@ -12695,37 +12710,37 @@ snapshots: vite-plugin-funding@0.1.0: {} - vite-plugin-pwa@0.21.1(vite@5.4.14(@types/node@22.13.1)(terser@5.38.2))(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.13.2)(terser@5.39.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.14(@types/node@22.13.1)(terser@5.38.2) + vite: 5.4.14(@types/node@22.13.2)(terser@5.39.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.14(@types/node@22.13.1)(terser@5.38.2)): + vite-tsconfig-paths@5.1.4(typescript@5.7.3)(vite@5.4.14(@types/node@22.13.2)(terser@5.39.0)): dependencies: debug: 4.4.0 globrex: 0.1.2 tsconfck: 3.1.5(typescript@5.7.3) optionalDependencies: - vite: 5.4.14(@types/node@22.13.1)(terser@5.38.2) + vite: 5.4.14(@types/node@22.13.2)(terser@5.39.0) transitivePeerDependencies: - supports-color - typescript - vite@5.4.14(@types/node@22.13.1)(terser@5.38.2): + vite@5.4.14(@types/node@22.13.2)(terser@5.39.0): dependencies: esbuild: 0.21.5 postcss: 8.5.2 rollup: 4.34.6 optionalDependencies: - '@types/node': 22.13.1 + '@types/node': 22.13.2 fsevents: 2.3.3 - terser: 5.38.2 + terser: 5.39.0 w3c-keyname@2.2.8: {} diff --git a/src/app.tsx b/src/app.tsx index fb20bc28c..faa47441d 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -1,6 +1,6 @@ import { lazy, Suspense } from "react"; import { Spinner } from "@chakra-ui/react"; -import { createBrowserRouter, Outlet, RouterProvider, ScrollRestoration, Location } from "react-router-dom"; +import { createBrowserRouter, Outlet, RouterProvider } from "react-router-dom"; import GlobalStyles from "./styles"; @@ -60,7 +60,6 @@ const RootPage = () => { return ( - ); @@ -69,7 +68,6 @@ const RootPage = () => { const NoLayoutPage = () => { return ( - ); diff --git a/src/classes/memory-relay.ts b/src/classes/memory-relay.ts index ec4d98cbc..95d948d55 100644 --- a/src/classes/memory-relay.ts +++ b/src/classes/memory-relay.ts @@ -30,7 +30,7 @@ export default class MemoryRelay implements SimpleRelay { ...options, fire: () => { if (stream) stream.unsubscribe(); - stream = this.store.stream(filters).subscribe((event) => sub.onevent?.(event)); + stream = this.store.filters(filters).subscribe((event) => sub.onevent?.(event)); if (sub.oneose) sub.oneose(); }, close: () => { diff --git a/src/components/layout/presets/contained-parent-view.tsx b/src/components/layout/presets/contained-parent-view.tsx deleted file mode 100644 index be53a39d5..000000000 --- a/src/components/layout/presets/contained-parent-view.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { PropsWithChildren, ReactNode, Suspense } from "react"; -import { Outlet, useMatch } from "react-router-dom"; -import { Flex, Spinner } from "@chakra-ui/react"; - -import { useBreakpointValue } from "../../../providers/global/breakpoint-provider"; -import SimpleHeader from "./simple-header"; -import { ErrorBoundary } from "../../error-boundary"; - -export default function ContainedParentView({ - children, - path, - title, - width = "xs", - actions, -}: PropsWithChildren<{ path: string; title?: string; width?: "xs" | "sm" | "md"; actions?: ReactNode }>) { - const match = useMatch(path); - const isMobile = useBreakpointValue({ base: true, lg: false }); - const showMenu = !isMobile || !!match; - - return ( - - {showMenu && ( - - {title && {actions}} - - {children} - - - )} - }> - - - - - - ); -} diff --git a/src/components/layout/presets/simple-parent-view.tsx b/src/components/layout/presets/simple-parent-view.tsx index d82525aac..dfa8ce2c6 100644 --- a/src/components/layout/presets/simple-parent-view.tsx +++ b/src/components/layout/presets/simple-parent-view.tsx @@ -1,6 +1,6 @@ -import { PropsWithChildren, Suspense } from "react"; +import { PropsWithChildren, ReactNode, Suspense } from "react"; import { Outlet, OutletProps, useMatch } from "react-router-dom"; -import { Box, Flex, Spinner } from "@chakra-ui/react"; +import { Flex, FlexProps, Spinner } from "@chakra-ui/react"; import { useBreakpointValue } from "../../../providers/global/breakpoint-provider"; import SimpleHeader from "./simple-header"; @@ -11,45 +11,53 @@ export default function SimpleParentView({ path, title, width = "xs", + actions, + padding = true, + scroll = true, + gap = 2, context, -}: PropsWithChildren<{ path: string; title?: string; width?: "xs" | "sm" | "md"; context?: OutletProps["context"] }>) { +}: PropsWithChildren<{ + path: string; + title?: string; + width?: "xs" | "sm" | "md"; + actions?: ReactNode; + padding?: boolean; + scroll?: boolean; + gap?: FlexProps["gap"]; + context?: OutletProps["context"]; +}>) { const match = useMatch(path); const isMobile = useBreakpointValue({ base: true, lg: false }); const showMenu = !isMobile || !!match; - const floating = useBreakpointValue({ base: false, lg: true }); - - if (showMenu) - return ( - - - - {title && } - - {children} - + return ( + + {showMenu && ( + + {title && {actions}} + {scroll ? ( + + {children} + + ) : ( + <>{children} + )} - {!isMobile && ( - }> - - - - - )} - - ); - else - return ( - }> - - - - - ); + )} + {(!isMobile || !showMenu) && ( + }> + + + + + )} + + ); } diff --git a/src/components/layout/presets/simple-view.tsx b/src/components/layout/presets/simple-view.tsx index 117eaf608..dcc518ed0 100644 --- a/src/components/layout/presets/simple-view.tsx +++ b/src/components/layout/presets/simple-view.tsx @@ -2,6 +2,7 @@ import { ReactNode } from "react"; import { Flex, FlexProps } from "@chakra-ui/react"; import SimpleHeader from "./simple-header"; +import { UNSAFE_useScrollRestoration } from "react-router-dom"; export default function SimpleView({ children, @@ -12,25 +13,44 @@ export default function SimpleView({ gap, maxW, center, + scroll = true, ...props -}: Omit & { flush?: boolean; actions?: ReactNode; title?: ReactNode; center?: boolean }) { +}: Omit & { + flush?: boolean; + actions?: ReactNode; + title?: ReactNode; + center?: boolean; + scroll?: boolean; +}) { + const content = ( + + {children} + + ); + + UNSAFE_useScrollRestoration; + return ( - + {actions} - - {children} - + {scroll ? ( + + {content} + + ) : ( + content + )} ); } diff --git a/src/components/note/timeline-note/index.tsx b/src/components/note/timeline-note/index.tsx index 1232c6e79..0541c1b0b 100644 --- a/src/components/note/timeline-note/index.tsx +++ b/src/components/note/timeline-note/index.tsx @@ -58,7 +58,7 @@ export type TimelineNoteProps = Omit & { }; export function TimelineNote({ event, - variant = "outline", + variant = "unstyled", showReplyButton, showReplyLine = true, hideDrawerButton, @@ -82,53 +82,60 @@ export function TimelineNote({ return ( - - {clickable && } - - - - - - - - - - - - - {showReplyLine && } - - - - - - {!hideZapBubbles && } - {showReactionsOnNewLine && reactionButtons} - - - {showReplyButton && ( - } aria-label="Reply" title="Reply" onClick={replyForm.onOpen} /> - )} - - - - - {!showReactionsOnNewLine && reactionButtons} - - - - - - - - - + + {clickable && } + + + + + + + + + + + + + {showReplyLine && } + + + + + + {!hideZapBubbles && } + {showReactionsOnNewLine && reactionButtons} + + + + + {showReplyButton && ( + } aria-label="Reply" title="Reply" onClick={replyForm.onOpen} /> + )} + + + + + {!showReactionsOnNewLine && reactionButtons} + + + + + + + + {replyForm.isOpen && ( ) : ( - + ); } 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 836c6616e..06ec92ec3 100644 --- a/src/components/timeline-page/generic-note-timeline/share-event.tsx +++ b/src/components/timeline-page/generic-note-timeline/share-event.tsx @@ -43,7 +43,7 @@ function ShareEvent({ event }: { event: NostrEvent }) { Shared - + {!note ? ( diff --git a/src/components/timeline-page/index.tsx b/src/components/timeline-page/index.tsx index b4dc965c3..0353e8cbd 100644 --- a/src/components/timeline-page/index.tsx +++ b/src/components/timeline-page/index.tsx @@ -62,7 +62,7 @@ export default function TimelinePage({ const maxWidth = useMaxPageWidth("6xl"); return ( - + {header} {renderTimeline()} diff --git a/src/components/vertical-page-layout.tsx b/src/components/vertical-page-layout.tsx index a6e1895ad..704e8cb07 100644 --- a/src/components/vertical-page-layout.tsx +++ b/src/components/vertical-page-layout.tsx @@ -1,10 +1,12 @@ -import { ComponentWithAs, Flex, FlexProps } from "@chakra-ui/react"; +import { Box, ComponentWithAs, Flex, FlexProps } from "@chakra-ui/react"; const VerticalPageLayout: ComponentWithAs<"div", FlexProps> = ({ children, ...props }: FlexProps) => { return ( - - {children} - + + + {children} + + ); }; diff --git a/src/hooks/use-relay-info.ts b/src/hooks/use-relay-info.ts index 0a43c5155..9bf05e39c 100644 --- a/src/hooks/use-relay-info.ts +++ b/src/hooks/use-relay-info.ts @@ -3,7 +3,7 @@ import { AbstractRelay } from "nostr-tools/abstract-relay"; import relayInfoService from "../services/relay-info"; -export function useRelayInfo(relay?: string | AbstractRelay, alwaysFetch = false) { +export function useRelayInfo(relay?: string, alwaysFetch = false) { const { value: info, loading, diff --git a/src/hooks/use-replaceable-event.ts b/src/hooks/use-replaceable-event.ts index 925f59c69..a4eb33945 100644 --- a/src/hooks/use-replaceable-event.ts +++ b/src/hooks/use-replaceable-event.ts @@ -24,7 +24,7 @@ export default function useReplaceableEvent( relays: [...readRelays, ...(parsed.relays ?? [])], force, }); - }, [parsed, readRelays.join("|"), force]); + }, [parsed?.kind, parsed?.pubkey, parsed?.identifier, readRelays.join("|"), force]); return useStoreQuery(ReplaceableQuery, parsed ? [parsed.kind, parsed.pubkey, parsed.identifier] : undefined); } diff --git a/src/hooks/use-search-relays.ts b/src/hooks/use-search-relays.ts index 7ea23eaca..32799948b 100644 --- a/src/hooks/use-search-relays.ts +++ b/src/hooks/use-search-relays.ts @@ -8,16 +8,16 @@ import { useRelayInfo } from "./use-relay-info"; import { AbstractRelay } from "nostr-tools/abstract-relay"; import WasmRelay from "../services/wasm-relay"; -export function useCacheRelaySupportsSearch() { +export function useCacheRelaySupportsSearch(): boolean { const cacheRelay = useCacheRelay(); - const { info: cacheRelayInfo } = useRelayInfo(cacheRelay instanceof AbstractRelay ? cacheRelay : undefined, true); + const { info: cacheRelayInfo } = useRelayInfo(cacheRelay instanceof AbstractRelay ? cacheRelay.url : undefined, true); return ( cacheRelay instanceof WasmRelay || (cacheRelay instanceof AbstractRelay && !!cacheRelayInfo?.supported_nips?.includes(50)) ); } -export default function useSearchRelays() { +export default function useSearchRelays(): string[] { const account = useActiveAccount(); const searchRelayList = useUserSearchRelayList(account?.pubkey); const searchRelays = searchRelayList ? getRelaysFromList(searchRelayList) : DEFAULT_SEARCH_RELAYS; diff --git a/src/hooks/use-user-contacts.ts b/src/hooks/use-user-contacts.ts index e1d1582ed..0c722875d 100644 --- a/src/hooks/use-user-contacts.ts +++ b/src/hooks/use-user-contacts.ts @@ -4,8 +4,8 @@ import { UserContactsQuery } from "applesauce-core/queries"; import useReplaceableEvent from "./use-replaceable-event"; -export default function useUserContactList(pubkey?: string, additionalRelays?: Iterable, force?: boolean) { +export default function useUserContacts(pubkey?: string, additionalRelays?: Iterable, force?: boolean) { useReplaceableEvent(pubkey && { kind: kinds.Contacts, pubkey }, additionalRelays, force); - return useStoreQuery(UserContactsQuery); + return useStoreQuery(UserContactsQuery, pubkey ? [pubkey] : undefined); } diff --git a/src/hooks/use-user-mutes.ts b/src/hooks/use-user-mutes.ts new file mode 100644 index 000000000..45d4cb405 --- /dev/null +++ b/src/hooks/use-user-mutes.ts @@ -0,0 +1,11 @@ +import { kinds } from "nostr-tools"; +import { useStoreQuery } from "applesauce-react/hooks"; +import { UserMuteQuery } from "applesauce-core/queries"; + +import useReplaceableEvent from "./use-replaceable-event"; + +export default function useUserMutes(pubkey?: string, additionalRelays?: Iterable, force?: boolean) { + useReplaceableEvent(pubkey && { kind: kinds.Mutelist, pubkey }, additionalRelays, force); + + return useStoreQuery(UserMuteQuery, pubkey ? [pubkey] : undefined); +} diff --git a/src/providers/global/web-of-trust-provider.tsx b/src/providers/global/web-of-trust-provider.tsx index fe09470af..715f9784f 100644 --- a/src/providers/global/web-of-trust-provider.tsx +++ b/src/providers/global/web-of-trust-provider.tsx @@ -73,13 +73,7 @@ export default function WebOfTrustProvider({ pubkey, children }: PropsWithChildr // load the graph when it changes useEffect(() => { if (!graph) return; - - if (import.meta.env.DEV) { - //@ts-expect-error debug - window.webOfTrust = graph; - } - - loadSocialGraph(graph, kinds.Contacts, graph.root, undefined, 1); + // loadSocialGraph(graph, kinds.Contacts, graph.root, undefined, 1); }, [graph]); return {children}; diff --git a/src/queries/dvm-responses.ts b/src/queries/dvm-responses.ts index 334ddaddf..863d59e85 100644 --- a/src/queries/dvm-responses.ts +++ b/src/queries/dvm-responses.ts @@ -6,7 +6,7 @@ export default function DVMResponsesQuery(request: NostrEvent): Query - events.stream([{ kinds: [request.kind + 1000, 7000], "#e": [request.id] }]).pipe( + events.filters([{ kinds: [request.kind + 1000, 7000], "#e": [request.id] }]).pipe( scan( (byPubkey, event) => { if (byPubkey[event.pubkey] && byPubkey[event.pubkey].created_at > event.created_at) return byPubkey; diff --git a/src/services/debug-api.ts b/src/services/debug-api.ts index e2494a9ad..a25a183ce 100644 --- a/src/services/debug-api.ts +++ b/src/services/debug-api.ts @@ -8,6 +8,8 @@ import relayInfoService from "./relay-info"; import replaceableEventLoader from "./replaceable-loader"; import timelineCacheService from "./timeline-cache"; import { userSearchDirectory } from "./username-search"; +import singleEventLoader from "./single-event-loader"; +import userSetsLoader from "./user-sets-loader"; const noStrudel = { rxNostr, @@ -28,6 +30,8 @@ const noStrudel = { // other internal services replaceableEventLoader, + singleEventLoader, + userSetsLoader, userSearchDirectory, readStatusService, relayInfoService, diff --git a/src/services/relay-info.ts b/src/services/relay-info.ts index aff1ff4cf..0283ca521 100644 --- a/src/services/relay-info.ts +++ b/src/services/relay-info.ts @@ -1,4 +1,3 @@ -import { AbstractRelay } from "nostr-tools/abstract-relay"; import { Nip11Registry } from "rx-nostr"; import db from "./db"; @@ -36,9 +35,7 @@ async function saveInfo() { await tx.done; } -async function getInfo(relay: string | AbstractRelay, alwaysFetch = false) { - relay = typeof relay === "string" ? relay : relay.url; - +async function getInfo(relay: string, alwaysFetch = false) { let info = Nip11Registry.get(relay); if (!info || alwaysFetch) { diff --git a/src/services/replaceable-loader.ts b/src/services/replaceable-loader.ts index 034817e19..54753e3ae 100644 --- a/src/services/replaceable-loader.ts +++ b/src/services/replaceable-loader.ts @@ -1,16 +1,14 @@ import { ReplaceableLoader } from "applesauce-loaders/loaders"; -import { truncateId } from "../helpers/string"; import { eventStore } from "./event-store"; import rxNostr from "./rx-nostr"; import { COMMON_CONTACT_RELAYS } from "../const"; import { cacheRequest } from "./cache-relay"; -export function getHumanReadableCoordinate(kind: number, pubkey: string, d?: string) { - return `${kind}:${truncateId(pubkey)}${d ? ":" + d : ""}`; -} - -const replaceableEventLoader = new ReplaceableLoader(rxNostr, { cacheRequest, lookupRelays: COMMON_CONTACT_RELAYS }); +const replaceableEventLoader = new ReplaceableLoader(rxNostr, { + cacheRequest, + lookupRelays: COMMON_CONTACT_RELAYS, +}); replaceableEventLoader.subscribe((packet) => eventStore.add(packet.event, packet.from)); diff --git a/src/services/username-search.ts b/src/services/username-search.ts index 4c8baad57..9ed8a99dd 100644 --- a/src/services/username-search.ts +++ b/src/services/username-search.ts @@ -20,7 +20,7 @@ const cache = db.getAll("userSearch").then((rows: { pubkey: string; names: strin return rows.reduce((dir, row) => ({ ...dir, [row.pubkey]: row.names }), {}); }); -const updates = eventStore.stream([{ kinds: [kinds.Metadata] }]).pipe( +const updates = eventStore.filters([{ kinds: [kinds.Metadata] }]).pipe( filter((event) => !isFromCache(event)), bufferTime(500), concatMap(async (events) => { diff --git a/src/styles.css b/src/styles.css index aafae6d2a..2db8a8462 100644 --- a/src/styles.css +++ b/src/styles.css @@ -2,17 +2,15 @@ html { margin: 0; height: 100%; width: 100%; - overflow-x: hidden; - overflow-y: auto; - overscroll-behavior: none; + overflow: hidden; } body { margin: 0; width: 100%; -} + height: 100%; + overflow: hidden; -body { --safe-top: env(safe-area-inset-top, 0px); --safe-bottom: env(safe-area-inset-bottom, 0px); --safe-right: env(safe-area-inset-right, 0px); @@ -29,4 +27,6 @@ body { display: flex; flex-direction: column; width: 100%; + height: 100%; + overflow: hidden; } diff --git a/src/views/channels/channel.tsx b/src/views/channels/channel.tsx index ae7156646..70fc56f86 100644 --- a/src/views/channels/channel.tsx +++ b/src/views/channels/channel.tsx @@ -23,8 +23,8 @@ import ChannelMessageForm from "./components/send-message-form"; import useParamsEventPointer from "../../hooks/use-params-event-pointer"; import { useReadRelays } from "../../hooks/use-client-relays"; import { truncateId } from "../../helpers/string"; -import ContainedSimpleView from "../../components/layout/presets/contained-simple-view"; import ChannelImage from "./components/channel-image"; +import SimpleView from "../../components/layout/presets/simple-view"; const ChannelChatLog = memo(({ channel }: { channel: NostrEvent }) => { const messages = useStoreQuery(ChannelMessagesQuery, [channel]) ?? []; @@ -80,8 +80,9 @@ function ChannelPage({ channel }: { channel: NostrEvent }) { return ( - @@ -95,11 +96,14 @@ function ChannelPage({ channel }: { channel: NostrEvent }) { } - bottom={} > - - - + + + + + + + {drawer.isOpen && } diff --git a/src/views/channels/components/channel-card.tsx b/src/views/channels/components/channel-card.tsx index 7cff039d9..e4a232cf8 100644 --- a/src/views/channels/components/channel-card.tsx +++ b/src/views/channels/components/channel-card.tsx @@ -24,7 +24,7 @@ export default function ChannelCard({ if (!channel || !metadata) return null; return ( - + diff --git a/src/views/channels/index.tsx b/src/views/channels/index.tsx index fd4285c6b..39ccd076d 100644 --- a/src/views/channels/index.tsx +++ b/src/views/channels/index.tsx @@ -3,10 +3,10 @@ import { Alert, AlertDescription, AlertIcon, AlertTitle, Box, Button, Link } fro import { ErrorBoundary } from "../../components/error-boundary"; import ChannelCard from "./components/channel-card"; import { useReadRelays } from "../../hooks/use-client-relays"; -import ContainedParentView from "../../components/layout/presets/contained-parent-view"; import useUserChannelsList from "../../hooks/use-user-channels-list"; import useSingleEvents from "../../hooks/use-single-events"; import RouterLink from "../../components/router-link"; +import SimpleParentView from "../../components/layout/presets/simple-parent-view"; export default function ChannelsHomeView() { const relays = useReadRelays(); @@ -14,7 +14,7 @@ export default function ChannelsHomeView() { const channels = useSingleEvents(pointers.map((p) => p.id)); return ( - } > - + Deprecated @@ -60,6 +60,6 @@ export default function ChannelsHomeView() { )} - + ); } diff --git a/src/views/discovery/dvm-feed/feed.tsx b/src/views/discovery/dvm-feed/feed.tsx index a1669cb60..c45e485ca 100644 --- a/src/views/discovery/dvm-feed/feed.tsx +++ b/src/views/discovery/dvm-feed/feed.tsx @@ -24,6 +24,7 @@ import { import { ChevronLeftIcon } from "@chakra-ui/icons"; import dayjs from "dayjs"; import { useNavigate } from "react-router-dom"; +import { getCoordinateFromAddressPointer } from "applesauce-core/helpers"; import { DVM_CONTENT_DISCOVERY_JOB_KIND, @@ -47,7 +48,6 @@ import useParamsAddressPointer from "../../../hooks/use-params-address-pointer"; import DVMParams from "./components/dvm-params"; import { useUserOutbox } from "../../../hooks/use-user-mailboxes"; import { usePublishEvent } from "../../../providers/global/publish-provider"; -import { getHumanReadableCoordinate } from "../../../services/replaceable-loader"; import Timestamp from "../../../components/timestamp"; function DVMFeedPage({ pointer }: { pointer: AddressPointer }) { @@ -59,16 +59,12 @@ function DVMFeedPage({ pointer }: { pointer: AddressPointer }) { const dvmRelays = useUserOutbox(pointer.pubkey); const readRelays = useReadRelays(dvmRelays); - const { loader, timeline } = useTimelineLoader( - `${getHumanReadableCoordinate(pointer.kind, pointer.pubkey, pointer.identifier)}-jobs`, - readRelays, - { - authors: [account.pubkey, pointer.pubkey], - "#p": [account.pubkey, pointer.pubkey], - kinds: [DVM_CONTENT_DISCOVERY_JOB_KIND, DVM_CONTENT_DISCOVERY_RESULT_KIND, DVM_STATUS_KIND], - since, - }, - ); + const { loader, timeline } = useTimelineLoader(`${getCoordinateFromAddressPointer(pointer)}-jobs`, readRelays, { + authors: [account.pubkey, pointer.pubkey], + "#p": [account.pubkey, pointer.pubkey], + kinds: [DVM_CONTENT_DISCOVERY_JOB_KIND, DVM_CONTENT_DISCOVERY_RESULT_KIND, DVM_STATUS_KIND], + since, + }); const jobs = groupEventsIntoJobs(timeline); const pages = chainJobs(Array.from(Object.values(jobs))); diff --git a/src/views/discovery/relays/index.tsx b/src/views/discovery/relays/index.tsx index 12a422ae0..05aff75b6 100644 --- a/src/views/discovery/relays/index.tsx +++ b/src/views/discovery/relays/index.tsx @@ -6,7 +6,6 @@ import { getEventUID } from "nostr-idb"; import { useThrottle } from "react-use"; import { createRxForwardReq } from "rx-nostr"; -import BackButton from "../../../components/router/back-button"; import RelayList from "./components/relay-list"; import useRouteStateValue from "../../../hooks/use-route-state-value"; import RelayMap from "./components/relay-map"; @@ -15,7 +14,7 @@ import { SelectedContext } from "./selected-context"; import CountyPicker from "../../../components/county-picker"; import { useBreakpointValue } from "../../../providers/global/breakpoint-provider"; import rxNostr from "../../../services/rx-nostr"; -import ContainedSimpleView from "../../../components/layout/presets/contained-simple-view"; +import SimpleView from "../../../components/layout/presets/simple-view"; export default function RelayDiscoveryView() { const showMap = useBreakpointValue({ base: false, lg: true }); @@ -82,9 +81,10 @@ export default function RelayDiscoveryView() { return ( - selectTemplate(e.target.value)} w="auto"> - {TEMPLATES.map((template) => ( - - ))} - - - - {editor.isOpen && ( - - )} - - - - - {editor.isOpen && - (editRaw.isOpen ? ( - - ) : ( - + + + + Template + + + + {editor.isOpen && ( + + )} + + - + {editor.isOpen && + (editRaw.isOpen ? ( + + ) : ( + + ))} - - - {JSON.stringify(processed, null, 2)} - + + + Variables + + setVariables(v)} /> - + + + + + + {JSON.stringify(processed, null, 2)} + + + + {finalized && ( setFinalized(undefined)} size="2xl"> @@ -253,7 +251,7 @@ function EventPublisherPage({ initDraft }: { initDraft?: LooseEventTemplate }) { )} - + ); }