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 (
-
-
+
);
}
diff --git a/src/views/groups/index.tsx b/src/views/groups/index.tsx
index 4f302b1a2..50b8a2b7d 100644
--- a/src/views/groups/index.tsx
+++ b/src/views/groups/index.tsx
@@ -1,17 +1,16 @@
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";
+import SimpleParentView from "../../components/layout/presets/simple-parent-view";
export default function ChannelsHomeView() {
const { pointers } = useUserGroupsList();
return (
-
)}
-
+
);
}
diff --git a/src/views/messages/chat.tsx b/src/views/messages/chat.tsx
index fe62d4a0d..490b07754 100644
--- a/src/views/messages/chat.tsx
+++ b/src/views/messages/chat.tsx
@@ -26,6 +26,7 @@ import UserDnsIdentityIcon from "../../components/user/user-dns-identity-icon";
import UserAvatarLink from "../../components/user/user-avatar-link";
import ContainedSimpleView from "../../components/layout/presets/contained-simple-view";
import { mergeRelaySets } from "../../helpers/relay";
+import SimpleView from "../../components/layout/presets/simple-view";
/** This is broken out from DirectMessageChatPage for performance reasons. Don't use outside of file */
const ChatLog = memo(({ messages }: { messages: NostrEvent[] }) => {
@@ -114,8 +115,7 @@ function DirectMessageChatPage({ pubkey }: { pubkey: string }) {
return (
-
@@ -138,14 +138,20 @@ function DirectMessageChatPage({ pubkey }: { pubkey: string }) {
/>
}
- bottom={}
+ scroll={false}
+ flush
>
-
-
+
+
+
+
+
+
+
{location.state?.thread && (
)}
-
+
);
diff --git a/src/views/messages/index.tsx b/src/views/messages/index.tsx
index 1181a1570..ffada360b 100644
--- a/src/views/messages/index.tsx
+++ b/src/views/messages/index.tsx
@@ -1,29 +1,30 @@
-import { useCallback, useMemo } from "react";
-import { Card, CardBody, Flex, LinkBox, LinkOverlay, Text } from "@chakra-ui/react";
+import { useCallback, useMemo, useState } from "react";
+import { Button, ButtonGroup, Flex, LinkBox, LinkOverlay, Text } from "@chakra-ui/react";
import { Link as RouterLink, useLocation } from "react-router-dom";
import { kinds, nip19 } from "nostr-tools";
+import { FixedSizeList, ListChildComponentProps } from "react-window";
+import AutoSizer from "react-virtualized-auto-sizer";
import UserAvatar from "../../components/user/user-avatar";
import RequireActiveAccount from "../../components/router/require-active-account";
import Timestamp from "../../components/timestamp";
-import PeopleListSelection from "../../components/people-list-selection/people-list-selection";
-import PeopleListProvider, { usePeopleListContext } from "../../providers/local/people-list-provider";
import { useActiveAccount } from "applesauce-react/hooks";
import { KnownConversation, groupIntoConversations, hasResponded, identifyConversation } from "../../helpers/nostr/dms";
import IntersectionObserverProvider from "../../providers/local/intersection-observer";
import { useTimelineCurserIntersectionCallback } from "../../hooks/use-timeline-cursor-intersection-callback";
-import TimelineActionAndStatus from "../../components/timeline/timeline-action-and-status";
import UserName from "../../components/user/user-name";
import { NostrEvent } from "../../types/nostr-event";
import { CheckIcon } from "../../components/icons";
import UserDnsIdentity from "../../components/user/user-dns-identity";
import useEventIntersectionRef from "../../hooks/use-event-intersection-ref";
import { useKind4Decrypt } from "../../hooks/use-kind4-decryption";
-import ContainedParentView from "../../components/layout/presets/contained-parent-view";
import { truncateId } from "../../helpers/string";
import useTimelineLoader from "../../hooks/use-timeline-loader";
import useUserMailboxes from "../../hooks/use-user-mailboxes";
import useClientSideMuteFilter from "../../hooks/use-client-side-mute-filter";
+import useUserContacts from "../../hooks/use-user-contacts";
+import useUserMutes from "../../hooks/use-user-mutes";
+import SimpleParentView from "../../components/layout/presets/simple-parent-view";
export function useDirectMessagesTimeline(pubkey?: string) {
const userMuteFilter = useClientSideMuteFilter();
@@ -60,7 +61,9 @@ function MessagePreview({ message, pubkey }: { message: NostrEvent; pubkey: stri
);
}
-function ConversationCard({ conversation }: { conversation: KnownConversation }) {
+function ConversationCard({ index, style, data }: ListChildComponentProps) {
+ const conversation = data[index];
+
const location = useLocation();
const lastReceived = conversation.messages.find((m) => m.pubkey === conversation.correspondent);
const lastMessage = conversation.messages[0];
@@ -68,62 +71,88 @@ function ConversationCard({ conversation }: { conversation: KnownConversation })
const ref = useEventIntersectionRef(lastMessage);
return (
-
-
-
-
-
-
-
-
- {hasResponded(conversation) && }
-
- {lastReceived && }
+
+
+
+
+
+
+
+ {hasResponded(conversation) && }
-
+ {lastReceived && }
+
);
}
function MessagesHomePage() {
- const { people } = usePeopleListContext();
+ const [filter, setFilter] = useState<"contacts" | "other" | "muted">("contacts");
const account = useActiveAccount()!;
+ const contacts = useUserContacts(account?.pubkey, undefined, true)?.map((p) => p.pubkey);
+ const mutes = useUserMutes(account.pubkey, undefined, true);
+
const { timeline: messages, loader } = useDirectMessagesTimeline(account.pubkey);
const conversations = useMemo(() => {
const conversations = groupIntoConversations(messages).map((c) => identifyConversation(c, account.pubkey));
- const filtered = conversations.filter((conversation) =>
- people ? people.some((p) => p.pubkey === conversation.correspondent) : true,
- );
+
+ let filtered = conversations;
+ switch (filter) {
+ case "contacts":
+ filtered = conversations.filter((c) => contacts?.includes(c.correspondent));
+ break;
+ case "muted":
+ filtered = conversations.filter((c) => mutes?.pubkeys?.has(c.correspondent));
+ break;
+ }
return filtered.sort((a, b) => b.messages[0].created_at - a.messages[0].created_at);
- }, [messages, people, account.pubkey]);
+ }, [messages, account.pubkey, contacts?.length, filter, mutes?.pubkeys]);
const callback = useTimelineCurserIntersectionCallback(loader);
return (
-
-
-
-
+
+
+
+
+
+
- {conversations.map((conversation) => (
-
- ))}
+
+
+ {({ width, height }) => (
+ data[i].myself + data[i].correspondent}
+ itemSize={64}
+ >
+ {ConversationCard}
+
+ )}
+
+
-
-
+
);
}
export default function MessagesHomeView() {
return (
-
-
-
+
);
}
diff --git a/src/views/streams/index.tsx b/src/views/streams/index.tsx
index 6145f106f..49b79b28c 100644
--- a/src/views/streams/index.tsx
+++ b/src/views/streams/index.tsx
@@ -19,6 +19,7 @@ import { useReadRelays } from "../../hooks/use-client-relays";
import { AdditionalRelayProvider, useAdditionalRelayContext } from "../../providers/local/additional-relay-context";
import useFavoriteStreams from "../../hooks/use-favorite-streams";
import { getStreamStatus, getStreamStreamingURLs } from "../../helpers/nostr/stream";
+import SimpleView from "../../components/layout/presets/simple-view";
function StreamsPage() {
useAppTitle("Streams");
@@ -61,13 +62,17 @@ function StreamsPage() {
const columns = { base: 1, md: 2, lg: 3, xl: 4, "2xl": 5 };
return (
-
-
-
-
- Show Ended
-
-
+
+
+
+ Show Ended
+
+
+ }
+ >
{favorites.length > 0 && (
<>
@@ -103,7 +108,7 @@ function StreamsPage() {
)}
-
+
);
}
export default function StreamHomeView() {
diff --git a/src/views/support/index.tsx b/src/views/support/index.tsx
index 35ad126b6..82a9e340d 100644
--- a/src/views/support/index.tsx
+++ b/src/views/support/index.tsx
@@ -68,7 +68,7 @@ export default function SupportView() {
// close the pay request when new zap is received
useEffect(() => {
if (request) {
- const sub = eventStore.stream([{ kinds: [kinds.Zap], since: unixNow() }]).subscribe((event) => {
+ const sub = eventStore.filters([{ kinds: [kinds.Zap], since: unixNow() }]).subscribe((event) => {
try {
const bont11 = getTagValue(event, "bolt11");
diff --git a/src/views/thread/components/thread-post.tsx b/src/views/thread/components/thread-post.tsx
index 3089adf94..723c93122 100644
--- a/src/views/thread/components/thread-post.tsx
+++ b/src/views/thread/components/thread-post.tsx
@@ -134,15 +134,7 @@ function ThreadPost({ post, initShowReplies, focusId, level = -1 }: ThreadItemPr
return (
<>
-
+
{header}
{expanded.isOpen && (
<>
diff --git a/src/views/tools/event-publisher/index.tsx b/src/views/tools/event-publisher/index.tsx
index 7b0bd521f..5bad84c32 100644
--- a/src/views/tools/event-publisher/index.tsx
+++ b/src/views/tools/event-publisher/index.tsx
@@ -38,6 +38,7 @@ import RequireActiveAccount from "../../../components/router/require-active-acco
import VariableEditor from "./components/variable-editor";
import EventTemplateEditor from "./components/event-template-editor";
import useRouteStateValue from "../../../hooks/use-route-state-value";
+import SimpleView from "../../../components/layout/presets/simple-view";
function EventPublisherPage({ initDraft }: { initDraft?: LooseEventTemplate }) {
const toast = useToast();
@@ -129,81 +130,78 @@ function EventPublisherPage({ initDraft }: { initDraft?: LooseEventTemplate }) {
};
return (
- <>
-
-
-
- Event Publisher
-
- Publish to Relay
-
- {customRelay.isOpen && (
- setCustomRelayURL(e.target.value)}
- />
- )}
-
- }>
- Publish
-
-
-
+
+
+
+ Publish to Relay
+
+ {customRelay.isOpen && (
+ setCustomRelayURL(e.target.value)}
+ />
+ )}
+
+ }>
+ Publish
+
+
+
-
-
-
- Template
-
-
-
- {editor.isOpen && (
-
- )}
- }
- >
- Edit
-
-
-
-
- {editor.isOpen &&
- (editRaw.isOpen ? (
-
- ) : (
-
+
+
+
+ Template
+
+
+
+ {editor.isOpen && (
+
+ )}
+ }
+ >
+ Edit
+
+
-
+ {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 }) {
)}
- >
+
);
}