diff --git a/package.json b/package.json index 094a421a..09d965cc 100644 --- a/package.json +++ b/package.json @@ -80,8 +80,8 @@ "@tailwindcss/typography": "^0.5.9", "@trivago/prettier-plugin-sort-imports": "^4.2.0", "@types/html-to-text": "^9.0.1", - "@types/node": "^20.5.2", - "@types/react": "^18.2.20", + "@types/node": "^20.5.3", + "@types/react": "^18.2.21", "@types/react-dom": "^18.2.7", "@types/youtube-player": "^5.5.7", "@typescript-eslint/eslint-plugin": "^6.4.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d1d25ef7..2985082b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,22 +15,22 @@ dependencies: version: 0.12.2(@nostr-dev-kit/ndk@0.8.21)(nostr-fetch@0.12.2) '@radix-ui/react-alert-dialog': specifier: ^1.0.4 - version: 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-collapsible': specifier: ^1.0.3 - version: 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-dialog': specifier: ^1.0.4 - version: 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-dropdown-menu': specifier: ^2.0.5 - version: 2.0.5(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + version: 2.0.5(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-popover': specifier: ^1.0.6 - version: 1.0.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.6(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-tooltip': specifier: ^1.0.6 - version: 1.0.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.6(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) '@tanstack/react-query': specifier: ^4.33.0 version: 4.33.0(react-dom@18.2.0)(react@18.2.0) @@ -156,7 +156,7 @@ dependencies: version: 4.4.1(react-dom@18.2.0)(react@18.2.0) react-markdown: specifier: ^8.0.7 - version: 8.0.7(@types/react@18.2.20)(react@18.2.0) + version: 8.0.7(@types/react@18.2.21)(react@18.2.0) react-player: specifier: ^2.12.0 version: 2.12.0(react@18.2.0) @@ -174,7 +174,7 @@ dependencies: version: 6.3.7 zustand: specifier: ^4.4.1 - version: 4.4.1(@types/react@18.2.20)(react@18.2.0) + version: 4.4.1(@types/react@18.2.21)(react@18.2.0) devDependencies: '@tailwindcss/typography': @@ -187,11 +187,11 @@ devDependencies: specifier: ^9.0.1 version: 9.0.1 '@types/node': - specifier: ^20.5.2 - version: 20.5.2 + specifier: ^20.5.3 + version: 20.5.3 '@types/react': - specifier: ^18.2.20 - version: 18.2.20 + specifier: ^18.2.21 + version: 18.2.21 '@types/react-dom': specifier: ^18.2.7 version: 18.2.7 @@ -266,7 +266,7 @@ devDependencies: version: 5.1.6 vite: specifier: ^4.4.9 - version: 4.4.9(@types/node@20.5.2) + version: 4.4.9(@types/node@20.5.3) vite-tsconfig-paths: specifier: ^4.2.0 version: 4.2.0(typescript@5.1.6)(vite@4.4.9) @@ -1029,7 +1029,7 @@ packages: '@babel/runtime': 7.22.10 dev: false - /@radix-ui/react-alert-dialog@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-alert-dialog@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-jbfBCRlKYlhbitueOAv7z74PXYeIQmWpKwm3jllsdkw7fGWNkxqP3v0nY9WmOzcPqpQuoorNtvViBgL46n5gVg==} peerDependencies: '@types/react': '*' @@ -1044,18 +1044,18 @@ packages: dependencies: '@babel/runtime': 7.22.10 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-dialog': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.20)(react@18.2.0) - '@types/react': 18.2.20 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-dialog': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.21)(react@18.2.0) + '@types/react': 18.2.21 '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} peerDependencies: '@types/react': '*' @@ -1069,14 +1069,14 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.10 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.20 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.21 '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-collapsible@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-collapsible@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg==} peerDependencies: '@types/react': '*' @@ -1091,20 +1091,20 @@ packages: dependencies: '@babel/runtime': 7.22.10 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@types/react': 18.2.20 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@types/react': 18.2.21 '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} peerDependencies: '@types/react': '*' @@ -1118,17 +1118,17 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.10 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.20)(react@18.2.0) - '@types/react': 18.2.20 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.21)(react@18.2.0) + '@types/react': 18.2.21 '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.20)(react@18.2.0): + /@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.21)(react@18.2.0): resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} peerDependencies: '@types/react': '*' @@ -1138,11 +1138,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.10 - '@types/react': 18.2.20 + '@types/react': 18.2.21 react: 18.2.0 dev: false - /@radix-ui/react-context@1.0.1(@types/react@18.2.20)(react@18.2.0): + /@radix-ui/react-context@1.0.1(@types/react@18.2.21)(react@18.2.0): resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} peerDependencies: '@types/react': '*' @@ -1152,11 +1152,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.10 - '@types/react': 18.2.20 + '@types/react': 18.2.21 react: 18.2.0 dev: false - /@radix-ui/react-dialog@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-dialog@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-hJtRy/jPULGQZceSAP2Re6/4NpKo8im6V8P2hUqZsdFiSL8l35kYsw3qbRI6Ay5mQd2+wlLqje770eq+RJ3yZg==} peerDependencies: '@types/react': '*' @@ -1171,26 +1171,26 @@ packages: dependencies: '@babel/runtime': 7.22.10 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@types/react': 18.2.20 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@types/react': 18.2.21 '@types/react-dom': 18.2.7 aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.5.5(@types/react@18.2.20)(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.2.21)(react@18.2.0) dev: false - /@radix-ui/react-direction@1.0.1(@types/react@18.2.20)(react@18.2.0): + /@radix-ui/react-direction@1.0.1(@types/react@18.2.21)(react@18.2.0): resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} peerDependencies: '@types/react': '*' @@ -1200,11 +1200,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.10 - '@types/react': 18.2.20 + '@types/react': 18.2.21 react: 18.2.0 dev: false - /@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==} peerDependencies: '@types/react': '*' @@ -1219,17 +1219,17 @@ packages: dependencies: '@babel/runtime': 7.22.10 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.20)(react@18.2.0) - '@types/react': 18.2.20 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.21)(react@18.2.0) + '@types/react': 18.2.21 '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-dropdown-menu@2.0.5(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-dropdown-menu@2.0.5(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-xdOrZzOTocqqkCkYo8yRPCib5OkTkqN7lqNCdxwPOdE466DOaNl4N8PkUIlsXthQvW5Wwkd+aEmWpfWlBoDPEw==} peerDependencies: '@types/react': '*' @@ -1244,19 +1244,19 @@ packages: dependencies: '@babel/runtime': 7.22.10 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-menu': 2.0.5(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@types/react': 18.2.20 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-menu': 2.0.5(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@types/react': 18.2.21 '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-focus-guards@1.0.1(@types/react@18.2.20)(react@18.2.0): + /@radix-ui/react-focus-guards@1.0.1(@types/react@18.2.21)(react@18.2.0): resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} peerDependencies: '@types/react': '*' @@ -1266,11 +1266,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.10 - '@types/react': 18.2.20 + '@types/react': 18.2.21 react: 18.2.0 dev: false - /@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==} peerDependencies: '@types/react': '*' @@ -1284,16 +1284,16 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.10 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@types/react': 18.2.20 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@types/react': 18.2.21 '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-id@1.0.1(@types/react@18.2.20)(react@18.2.0): + /@radix-ui/react-id@1.0.1(@types/react@18.2.21)(react@18.2.0): resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} peerDependencies: '@types/react': '*' @@ -1303,12 +1303,12 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.10 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@types/react': 18.2.20 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@types/react': 18.2.21 react: 18.2.0 dev: false - /@radix-ui/react-menu@2.0.5(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-menu@2.0.5(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-Gw4f9pwdH+w5w+49k0gLjN0PfRDHvxmAgG16AbyJZ7zhwZ6PBHKtWohvnSwfusfnK3L68dpBREHpVkj8wEM7ZA==} peerDependencies: '@types/react': '*' @@ -1323,30 +1323,30 @@ packages: dependencies: '@babel/runtime': 7.22.10 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@types/react': 18.2.20 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@types/react': 18.2.21 '@types/react-dom': 18.2.7 aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.5.5(@types/react@18.2.20)(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.2.21)(react@18.2.0) dev: false - /@radix-ui/react-popover@1.0.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-popover@1.0.6(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-cZ4defGpkZ0qTRtlIBzJLSzL6ht7ofhhW4i1+pkemjV1IKXm0wgCRnee154qlV6r9Ttunmh2TNZhMfV2bavUyA==} peerDependencies: '@types/react': '*' @@ -1361,27 +1361,27 @@ packages: dependencies: '@babel/runtime': 7.22.10 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@types/react': 18.2.20 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@types/react': 18.2.21 '@types/react-dom': 18.2.7 aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.5.5(@types/react@18.2.20)(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.2.21)(react@18.2.0) dev: false - /@radix-ui/react-popper@1.1.2(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-popper@1.1.2(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==} peerDependencies: '@types/react': '*' @@ -1396,22 +1396,22 @@ packages: dependencies: '@babel/runtime': 7.22.10 '@floating-ui/react-dom': 2.0.1(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-use-rect': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.20)(react@18.2.0) + '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-use-rect': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.21)(react@18.2.0) '@radix-ui/rect': 1.0.1 - '@types/react': 18.2.20 + '@types/react': 18.2.21 '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-portal@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-portal@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==} peerDependencies: '@types/react': '*' @@ -1425,14 +1425,14 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.10 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.20 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.21 '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} peerDependencies: '@types/react': '*' @@ -1446,15 +1446,15 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.10 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@types/react': 18.2.20 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@types/react': 18.2.21 '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} peerDependencies: '@types/react': '*' @@ -1468,14 +1468,14 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.10 - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.20)(react@18.2.0) - '@types/react': 18.2.20 + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.21)(react@18.2.0) + '@types/react': 18.2.21 '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} peerDependencies: '@types/react': '*' @@ -1490,21 +1490,21 @@ packages: dependencies: '@babel/runtime': 7.22.10 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@types/react': 18.2.20 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@types/react': 18.2.21 '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-slot@1.0.2(@types/react@18.2.20)(react@18.2.0): + /@radix-ui/react-slot@1.0.2(@types/react@18.2.21)(react@18.2.0): resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} peerDependencies: '@types/react': '*' @@ -1514,12 +1514,12 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.10 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@types/react': 18.2.20 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@types/react': 18.2.21 react: 18.2.0 dev: false - /@radix-ui/react-tooltip@1.0.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-tooltip@1.0.6(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-DmNFOiwEc2UDigsYj6clJENma58OelxD24O4IODoZ+3sQc3Zb+L8w1EP+y9laTuKCLAysPw4fD6/v0j4KNV8rg==} peerDependencies: '@types/react': '*' @@ -1534,24 +1534,24 @@ packages: dependencies: '@babel/runtime': 7.22.10 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.20 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.21 '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.20)(react@18.2.0): + /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.21)(react@18.2.0): resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} peerDependencies: '@types/react': '*' @@ -1561,11 +1561,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.10 - '@types/react': 18.2.20 + '@types/react': 18.2.21 react: 18.2.0 dev: false - /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.20)(react@18.2.0): + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.21)(react@18.2.0): resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} peerDependencies: '@types/react': '*' @@ -1575,12 +1575,12 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.10 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@types/react': 18.2.20 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@types/react': 18.2.21 react: 18.2.0 dev: false - /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.20)(react@18.2.0): + /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.21)(react@18.2.0): resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} peerDependencies: '@types/react': '*' @@ -1590,12 +1590,12 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.10 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@types/react': 18.2.20 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@types/react': 18.2.21 react: 18.2.0 dev: false - /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.20)(react@18.2.0): + /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.21)(react@18.2.0): resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} peerDependencies: '@types/react': '*' @@ -1605,11 +1605,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.10 - '@types/react': 18.2.20 + '@types/react': 18.2.21 react: 18.2.0 dev: false - /@radix-ui/react-use-rect@1.0.1(@types/react@18.2.20)(react@18.2.0): + /@radix-ui/react-use-rect@1.0.1(@types/react@18.2.21)(react@18.2.0): resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} peerDependencies: '@types/react': '*' @@ -1620,11 +1620,11 @@ packages: dependencies: '@babel/runtime': 7.22.10 '@radix-ui/rect': 1.0.1 - '@types/react': 18.2.20 + '@types/react': 18.2.21 react: 18.2.0 dev: false - /@radix-ui/react-use-size@1.0.1(@types/react@18.2.20)(react@18.2.0): + /@radix-ui/react-use-size@1.0.1(@types/react@18.2.21)(react@18.2.0): resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} peerDependencies: '@types/react': '*' @@ -1634,12 +1634,12 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.10 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@types/react': 18.2.20 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@types/react': 18.2.21 react: 18.2.0 dev: false - /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} peerDependencies: '@types/react': '*' @@ -1653,8 +1653,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.10 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.20 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.21 '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -2361,8 +2361,8 @@ packages: resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} dev: false - /@types/node@20.5.2: - resolution: {integrity: sha512-5j/lXt7unfPOUlrKC34HIaedONleyLtwkKggiD/0uuMfT8gg2EOpg0dz4lCD15Ga7muC+1WzJZAjIB9simWd6Q==} + /@types/node@20.5.3: + resolution: {integrity: sha512-ITI7rbWczR8a/S6qjAW7DMqxqFMjjTo61qZVWJ1ubPvbIQsL5D/TvwjYEalM8Kthpe3hTzOGrF2TGbAu2uyqeA==} dev: true /@types/normalize-package-data@2.4.1: @@ -2383,10 +2383,10 @@ packages: /@types/react-dom@18.2.7: resolution: {integrity: sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==} dependencies: - '@types/react': 18.2.20 + '@types/react': 18.2.21 - /@types/react@18.2.20: - resolution: {integrity: sha512-WKNtmsLWJM/3D5mG4U84cysVY31ivmyw85dE84fOCk5Hx78wezB/XEjVPWl2JTZ5FkEeaTJf+VgUAUn3PE7Isw==} + /@types/react@18.2.21: + resolution: {integrity: sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA==} dependencies: '@types/prop-types': 15.7.5 '@types/scheduler': 0.16.3 @@ -2677,7 +2677,7 @@ packages: vite: ^4 dependencies: '@swc/core': 1.3.78 - vite: 4.4.9(@types/node@20.5.2) + vite: 4.4.9(@types/node@20.5.3) transitivePeerDependencies: - '@swc/helpers' dev: true @@ -2931,7 +2931,7 @@ packages: hasBin: true dependencies: caniuse-lite: 1.0.30001522 - electron-to-chromium: 1.4.498 + electron-to-chromium: 1.4.499 node-releases: 2.0.13 update-browserslist-db: 1.0.11(browserslist@4.21.10) dev: true @@ -3316,8 +3316,8 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /electron-to-chromium@1.4.498: - resolution: {integrity: sha512-4LODxAzKGVy7CJyhhN5mebwe7U2L29P+0G+HUriHnabm0d7LSff8Yn7t+Wq+2/9ze2Fu1dhX7mww090xfv7qXQ==} + /electron-to-chromium@1.4.499: + resolution: {integrity: sha512-0NmjlYBLKVHva4GABWAaHuPJolnDuL0AhV3h1hES6rcLCWEIbRL6/8TghfsVwkx6TEroQVdliX7+aLysUpKvjw==} dev: true /emoji-regex@8.0.0: @@ -5947,7 +5947,7 @@ packages: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: false - /react-markdown@8.0.7(@types/react@18.2.20)(react@18.2.0): + /react-markdown@8.0.7(@types/react@18.2.21)(react@18.2.0): resolution: {integrity: sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==} peerDependencies: '@types/react': '>=16' @@ -5955,7 +5955,7 @@ packages: dependencies: '@types/hast': 2.3.5 '@types/prop-types': 15.7.5 - '@types/react': 18.2.20 + '@types/react': 18.2.21 '@types/unist': 2.0.7 comma-separated-tokens: 2.0.3 hast-util-whitespace: 2.0.1 @@ -5987,7 +5987,7 @@ packages: react-fast-compare: 3.2.2 dev: false - /react-remove-scroll-bar@2.3.4(@types/react@18.2.20)(react@18.2.0): + /react-remove-scroll-bar@2.3.4(@types/react@18.2.21)(react@18.2.0): resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} engines: {node: '>=10'} peerDependencies: @@ -5997,13 +5997,13 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.20 + '@types/react': 18.2.21 react: 18.2.0 - react-style-singleton: 2.2.1(@types/react@18.2.20)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.2.21)(react@18.2.0) tslib: 2.6.2 dev: false - /react-remove-scroll@2.5.5(@types/react@18.2.20)(react@18.2.0): + /react-remove-scroll@2.5.5(@types/react@18.2.21)(react@18.2.0): resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} engines: {node: '>=10'} peerDependencies: @@ -6013,13 +6013,13 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.20 + '@types/react': 18.2.21 react: 18.2.0 - react-remove-scroll-bar: 2.3.4(@types/react@18.2.20)(react@18.2.0) - react-style-singleton: 2.2.1(@types/react@18.2.20)(react@18.2.0) + react-remove-scroll-bar: 2.3.4(@types/react@18.2.21)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.2.21)(react@18.2.0) tslib: 2.6.2 - use-callback-ref: 1.3.0(@types/react@18.2.20)(react@18.2.0) - use-sidecar: 1.1.2(@types/react@18.2.20)(react@18.2.0) + use-callback-ref: 1.3.0(@types/react@18.2.21)(react@18.2.0) + use-sidecar: 1.1.2(@types/react@18.2.21)(react@18.2.0) dev: false /react-router-dom@6.15.0(react-dom@18.2.0)(react@18.2.0): @@ -6045,7 +6045,7 @@ packages: react: 18.2.0 dev: false - /react-style-singleton@2.2.1(@types/react@18.2.20)(react@18.2.0): + /react-style-singleton@2.2.1(@types/react@18.2.21)(react@18.2.0): resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} engines: {node: '>=10'} peerDependencies: @@ -6055,7 +6055,7 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.20 + '@types/react': 18.2.21 get-nonce: 1.0.1 invariant: 2.2.4 react: 18.2.0 @@ -6892,7 +6892,7 @@ packages: tlds: 1.242.0 dev: false - /use-callback-ref@1.3.0(@types/react@18.2.20)(react@18.2.0): + /use-callback-ref@1.3.0(@types/react@18.2.21)(react@18.2.0): resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==} engines: {node: '>=10'} peerDependencies: @@ -6902,12 +6902,12 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.20 + '@types/react': 18.2.21 react: 18.2.0 tslib: 2.6.2 dev: false - /use-sidecar@1.1.2(@types/react@18.2.20)(react@18.2.0): + /use-sidecar@1.1.2(@types/react@18.2.21)(react@18.2.0): resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} engines: {node: '>=10'} peerDependencies: @@ -6917,7 +6917,7 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.20 + '@types/react': 18.2.21 detect-node-es: 1.1.0 react: 18.2.0 tslib: 2.6.2 @@ -6993,13 +6993,13 @@ packages: debug: 4.3.4 globrex: 0.1.2 tsconfck: 2.1.2(typescript@5.1.6) - vite: 4.4.9(@types/node@20.5.2) + vite: 4.4.9(@types/node@20.5.3) transitivePeerDependencies: - supports-color - typescript dev: true - /vite@4.4.9(@types/node@20.5.2): + /vite@4.4.9(@types/node@20.5.3): resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -7027,7 +7027,7 @@ packages: terser: optional: true dependencies: - '@types/node': 20.5.2 + '@types/node': 20.5.3 esbuild: 0.18.20 postcss: 8.4.28 rollup: 3.28.1 @@ -7161,7 +7161,7 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - /zustand@4.4.1(@types/react@18.2.20)(react@18.2.0): + /zustand@4.4.1(@types/react@18.2.21)(react@18.2.0): resolution: {integrity: sha512-QCPfstAS4EBiTQzlaGP1gmorkh/UL1Leaj2tdj+zZCZ/9bm0WS7sI2wnfD5lpOszFqWJ1DcPnGoY8RDL61uokw==} engines: {node: '>=12.7.0'} peerDependencies: @@ -7176,7 +7176,7 @@ packages: react: optional: true dependencies: - '@types/react': 18.2.20 + '@types/react': 18.2.21 react: 18.2.0 use-sync-external-store: 1.2.0(react@18.2.0) dev: false diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 2ef6314b..0867aca0 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "addr2line" -version = "0.20.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" dependencies = [ "gimli", ] @@ -412,9 +412,9 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.68" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" dependencies = [ "addr2line", "cc", @@ -1889,9 +1889,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.27.3" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" +checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" [[package]] name = "gio" @@ -2724,9 +2724,9 @@ checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" [[package]] name = "mac-notification-sys" -version = "0.5.9" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9402858e87f85f88bf518bd2e68450640df1c99b1ddb3ea28c4d5d823bb54cdd" +checksum = "51fca4d74ff9dbaac16a01b924bc3693fa2bba0862c2c633abc73f9a8ea21f64" dependencies = [ "cc", "dirs-next", @@ -2973,9 +2973,9 @@ dependencies = [ [[package]] name = "notify-rust" -version = "4.8.0" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bfa211d18e360f08e36c364308f394b5eb23a6629150690e109a916dc6f610e" +checksum = "6d7b75c8958cb2eab3451538b32db8a7b74006abc33eb2e6a9a56d21e4775c2b" dependencies = [ "log", "mac-notification-sys", @@ -3125,9 +3125,9 @@ dependencies = [ [[package]] name = "object" -version = "0.31.1" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1" +checksum = "77ac5bbd07aea88c60a577a1ce218075ffd59208b2d7ca97adf9bfc5aeb21ebe" dependencies = [ "memchr", ] @@ -4129,18 +4129,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.171" +version = "1.0.185" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30e27d1e4fd7659406c492fd6cfaf2066ba8773de45ca75e855590f856dc34a9" +checksum = "be9b6f69f1dfd54c3b568ffa45c310d6973a5e5148fd40cf515acaf38cf5bc31" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.171" +version = "1.0.185" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389894603bd18c46fa56231694f8d827779c0951a667087194cf9de94ed24682" +checksum = "dc59dfdcbad1437773485e0367fea4b090a2e0a16d9ffc46af47764536a298ec" dependencies = [ "proc-macro2", "quote", @@ -4348,9 +4348,9 @@ checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" [[package]] name = "slab" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] @@ -5463,9 +5463,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a79d09ac6b08c1ab3906a2f7cc2e81a0e27c7ae89c63812df75e52bef0751e07" +checksum = "0bb39ee79a6d8de55f48f2293a830e040392f1c5f16e336bdd1788cd0aadce07" dependencies = [ "deranged", "itoa 1.0.9", @@ -5482,9 +5482,9 @@ checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" [[package]] name = "time-macros" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75c65469ed6b3a4809d987a41eb1dc918e9bc1d92211cbad7ae82931846f7451" +checksum = "733d258752e9303d392b94b75230d07b0b9c489350c69b851fc6c065fde3e8f9" dependencies = [ "time-core", ] diff --git a/src/app/events/index.tsx b/src/app/events/index.tsx index b6806f0e..96a43c37 100644 --- a/src/app/events/index.tsx +++ b/src/app/events/index.tsx @@ -1,13 +1,17 @@ +import { NDKEvent, NDKKind } from '@nostr-dev-kit/ndk'; import { useParams } from 'react-router-dom'; import { useStorage } from '@libs/storage/provider'; import { + ArticleNote, + FileNote, NoteActions, - NoteContent, NoteReplyForm, NoteStats, + TextNote, ThreadUser, + UnknownNote, } from '@shared/notes'; import { RepliesList } from '@shared/notes/replies/list'; import { NoteSkeleton } from '@shared/notes/skeleton'; @@ -19,6 +23,19 @@ export function EventScreen() { const { db } = useStorage(); const { status, data } = useEvent(id); + const renderKind = (event: NDKEvent) => { + switch (event.kind) { + case NDKKind.Text: + return ; + case NDKKind.Article: + return ; + case 1063: + return ; + default: + return ; + } + }; + return (
@@ -31,12 +48,10 @@ export function EventScreen() { ) : (
- -
- -
+ +
{renderKind(data)}
- +
diff --git a/src/app/space/components/button.tsx b/src/app/space/components/button.tsx index dee8532e..642167a8 100644 --- a/src/app/space/components/button.tsx +++ b/src/app/space/components/button.tsx @@ -36,7 +36,7 @@ export function AddWidgetButton() { const setArticleWidget = () => { setWidget(db, { kind: WidgetKinds.article, - title: 'Blogs', + title: 'Articles', content: '', }); }; diff --git a/src/app/space/components/widgets/article.tsx b/src/app/space/components/widgets/article.tsx index 53e0e1ec..808047bf 100644 --- a/src/app/space/components/widgets/article.tsx +++ b/src/app/space/components/widgets/article.tsx @@ -1,24 +1,21 @@ -import { NDKEvent } from '@nostr-dev-kit/ndk'; +import { NDKEvent, NDKKind } from '@nostr-dev-kit/ndk'; import { useQuery } from '@tanstack/react-query'; import { useVirtualizer } from '@tanstack/react-virtual'; import { useCallback, useRef } from 'react'; import { useNDK } from '@libs/ndk/provider'; -import { NoteKind_1, NoteSkeleton, Repost } from '@shared/notes'; -import { NoteKindUnsupport } from '@shared/notes/kinds/unsupport'; +import { ArticleNote, NoteSkeleton, NoteWrapper } from '@shared/notes'; import { TitleBar } from '@shared/titleBar'; -import { nHoursAgo } from '@utils/date'; import { Widget } from '@utils/types'; export function ArticleWidget({ params }: { params: Widget }) { const { ndk } = useNDK(); const { status, data } = useQuery(['article-widget', params.content], async () => { const events = await ndk.fetchEvents({ - kinds: [30023], - '#t': [params.content], - since: nHoursAgo(48), + kinds: [NDKKind.Article], + limit: 100, }); return [...events] as unknown as NDKEvent[]; }); @@ -38,41 +35,20 @@ export function ArticleWidget({ params }: { params: Widget }) { const event: NDKEvent = data[index]; if (!event) return; - switch (event.kind) { - case 1: - return ( -
- -
- ); - case 6: - return ( -
- -
- ); - default: - return ( -
- -
- ); - } + return ( +
+ + + +
+ ); }, [data] ); return (
- +
{status === 'loading' ? (
@@ -85,7 +61,7 @@ export function ArticleWidget({ params }: { params: Widget }) {

- No new postrs about this hashtag in 24 hours ago + There have been no new articles in the last 24 hours.

diff --git a/src/app/space/components/widgets/feed.tsx b/src/app/space/components/widgets/feed.tsx index 47b5e930..95a7c3c6 100644 --- a/src/app/space/components/widgets/feed.tsx +++ b/src/app/space/components/widgets/feed.tsx @@ -1,4 +1,4 @@ -import { NDKEvent } from '@nostr-dev-kit/ndk'; +import { NDKEvent, NDKKind } from '@nostr-dev-kit/ndk'; import { useInfiniteQuery } from '@tanstack/react-query'; import { useVirtualizer } from '@tanstack/react-virtual'; import { useCallback, useMemo, useRef } from 'react'; @@ -6,8 +6,14 @@ import { useCallback, useMemo, useRef } from 'react'; import { useStorage } from '@libs/storage/provider'; import { ArrowRightCircleIcon, LoaderIcon } from '@shared/icons'; -import { NoteKind_1, NoteKind_1063, NoteThread, Repost } from '@shared/notes'; -import { NoteKindUnsupport } from '@shared/notes/kinds/unsupport'; +import { + ArticleNote, + FileNote, + NoteWrapper, + Repost, + TextNote, + UnknownNote, +} from '@shared/notes'; import { NoteSkeleton } from '@shared/notes/skeleton'; import { TitleBar } from '@shared/titleBar'; @@ -45,36 +51,20 @@ export function FeedWidget({ params }: { params: Widget }) { if (!dbEvent) return; const event: NDKEvent = JSON.parse(dbEvent.event as string); - switch (event.kind) { - case 1: { - if (dbEvent.root_id || dbEvent.reply_id) { - return ( -
- -
- ); - } else { - return ( -
- -
- ); - } - } - case 6: + case NDKKind.Text: + return ( +
+ + + +
+ ); + case NDKKind.Repost: return (
- + + + +
+ ); + case NDKKind.Article: + return ( +
+ + +
); default: @@ -101,7 +105,9 @@ export function FeedWidget({ params }: { params: Widget }) { data-index={index} ref={virtualizer.measureElement} > - + + +
); } @@ -124,7 +130,7 @@ export function FeedWidget({ params }: { params: Widget }) {

- Not found any postrs from last 48 hours + There have been no new postrs.

diff --git a/src/app/space/components/widgets/hashtag.tsx b/src/app/space/components/widgets/hashtag.tsx index 5dd1e017..b82532cb 100644 --- a/src/app/space/components/widgets/hashtag.tsx +++ b/src/app/space/components/widgets/hashtag.tsx @@ -1,12 +1,19 @@ -import { NDKEvent } from '@nostr-dev-kit/ndk'; +import { NDKEvent, NDKKind } from '@nostr-dev-kit/ndk'; import { useQuery } from '@tanstack/react-query'; import { useVirtualizer } from '@tanstack/react-virtual'; import { useCallback, useRef } from 'react'; import { useNDK } from '@libs/ndk/provider'; -import { NoteKind_1, NoteSkeleton, Repost } from '@shared/notes'; -import { NoteKindUnsupport } from '@shared/notes/kinds/unsupport'; +import { + ArticleNote, + FileNote, + NoteSkeleton, + NoteWrapper, + Repost, + TextNote, + UnknownNote, +} from '@shared/notes'; import { TitleBar } from '@shared/titleBar'; import { nHoursAgo } from '@utils/date'; @@ -16,7 +23,6 @@ export function HashtagWidget({ params }: { params: Widget }) { const { ndk } = useNDK(); const { status, data } = useQuery(['hashtag-widget', params.content], async () => { const events = await ndk.fetchEvents({ - kinds: [1], '#t': [params.content], since: nHoursAgo(24), }); @@ -39,13 +45,19 @@ export function HashtagWidget({ params }: { params: Widget }) { if (!event) return; switch (event.kind) { - case 1: + case NDKKind.Text: return ( -
- +
+ + +
); - case 6: + case NDKKind.Repost: return (
); + case 1063: + return ( +
+ + + +
+ ); + case NDKKind.Article: + return ( +
+ + + +
+ ); default: return (
- + + +
); } @@ -85,7 +123,7 @@ export function HashtagWidget({ params }: { params: Widget }) {

- No new postrs about this hashtag in 24 hours ago + There have been no new postrs with this hashtag in the last 24 hours.

diff --git a/src/app/space/components/widgets/network.tsx b/src/app/space/components/widgets/network.tsx index a981c9ea..8a3e6c47 100644 --- a/src/app/space/components/widgets/network.tsx +++ b/src/app/space/components/widgets/network.tsx @@ -1,15 +1,20 @@ -import { NDKEvent, NDKFilter } from '@nostr-dev-kit/ndk'; +import { NDKEvent, NDKFilter, NDKKind } from '@nostr-dev-kit/ndk'; import { useInfiniteQuery } from '@tanstack/react-query'; import { useVirtualizer } from '@tanstack/react-virtual'; import { destr } from 'destr'; import { useCallback, useEffect, useMemo, useRef } from 'react'; -import { Link } from 'react-router-dom'; import { useStorage } from '@libs/storage/provider'; import { ArrowRightCircleIcon, LoaderIcon } from '@shared/icons'; -import { NoteKind_1, NoteKind_1063, NoteThread, Repost } from '@shared/notes'; -import { NoteKindUnsupport } from '@shared/notes/kinds/unsupport'; +import { + ArticleNote, + FileNote, + NoteWrapper, + Repost, + TextNote, + UnknownNote, +} from '@shared/notes'; import { NoteSkeleton } from '@shared/notes/skeleton'; import { TitleBar } from '@shared/titleBar'; @@ -23,7 +28,7 @@ export function NetworkWidget() { useInfiniteQuery({ queryKey: ['network-widget'], queryFn: async ({ pageParam = 0 }) => { - return await db.getAllEvents(20, pageParam); + return await db.getAllEvents(30, pageParam); }, getNextPageParam: (lastPage) => lastPage.nextCursor, refetchOnWindowFocus: false, @@ -51,36 +56,20 @@ export function NetworkWidget() { if (!dbEvent) return; const event: NDKEvent = JSON.parse(dbEvent.event as string); - switch (event.kind) { - case 1: { - if (dbEvent.root_id || dbEvent.reply_id) { - return ( -
- -
- ); - } else { - return ( -
- -
- ); - } - } - case 6: + case NDKKind.Text: + return ( +
+ + + +
+ ); + case NDKKind.Repost: return (
- + + + +
+ ); + case NDKKind.Article: + return ( +
+ + +
); default: @@ -107,7 +110,9 @@ export function NetworkWidget() { data-index={index} ref={virtualizer.measureElement} > - + + +
); } @@ -168,12 +173,6 @@ export function NetworkWidget() {
Follow more people to have more fun.

- - Trending users -
diff --git a/src/app/space/components/widgets/thread.tsx b/src/app/space/components/widgets/thread.tsx index ce571728..d07c32a8 100644 --- a/src/app/space/components/widgets/thread.tsx +++ b/src/app/space/components/widgets/thread.tsx @@ -1,11 +1,17 @@ +import { NDKEvent, NDKKind } from '@nostr-dev-kit/ndk'; +import { useCallback } from 'react'; + import { useStorage } from '@libs/storage/provider'; import { + ArticleNote, + FileNote, NoteActions, - NoteContent, NoteReplyForm, NoteStats, + TextNote, ThreadUser, + UnknownNote, } from '@shared/notes'; import { RepliesList } from '@shared/notes/replies/list'; import { NoteSkeleton } from '@shared/notes/skeleton'; @@ -18,6 +24,22 @@ export function ThreadBlock({ params }: { params: Widget }) { const { db } = useStorage(); const { status, data } = useEvent(params.content); + const renderKind = useCallback( + (event: NDKEvent) => { + switch (event.kind) { + case NDKKind.Text: + return ; + case NDKKind.Article: + return ; + case 1063: + return ; + default: + return ; + } + }, + [data] + ); + return (
@@ -31,18 +53,10 @@ export function ThreadBlock({ params }: { params: Widget }) { ) : (
- -
- -
-
- - -
+ +
{renderKind(data)}
+ +
)} diff --git a/src/app/space/components/widgets/trendingNotes.tsx b/src/app/space/components/widgets/trendingNotes.tsx index f0dfd48e..3710c698 100644 --- a/src/app/space/components/widgets/trendingNotes.tsx +++ b/src/app/space/components/widgets/trendingNotes.tsx @@ -1,8 +1,7 @@ import { NDKEvent } from '@nostr-dev-kit/ndk'; import { useQuery } from '@tanstack/react-query'; -import { NoteKind_1 } from '@shared/notes'; -import { NoteSkeleton } from '@shared/notes/skeleton'; +import { NoteSkeleton, NoteWrapper, TextNote } from '@shared/notes'; import { TitleBar } from '@shared/titleBar'; import { Widget } from '@utils/types'; @@ -52,7 +51,9 @@ export function TrendingNotesWidget({ params }: { params: Widget }) { ) : (
{data.map((item) => ( - + + + ))}
)} diff --git a/src/app/space/components/widgets/user.tsx b/src/app/space/components/widgets/user.tsx index 35bfb723..25970558 100644 --- a/src/app/space/components/widgets/user.tsx +++ b/src/app/space/components/widgets/user.tsx @@ -1,12 +1,19 @@ -import { NDKEvent } from '@nostr-dev-kit/ndk'; +import { NDKEvent, NDKKind } from '@nostr-dev-kit/ndk'; import { useQuery } from '@tanstack/react-query'; import { useVirtualizer } from '@tanstack/react-virtual'; import { useCallback, useRef } from 'react'; import { useNDK } from '@libs/ndk/provider'; -import { NoteKind_1, NoteSkeleton, Repost } from '@shared/notes'; -import { NoteKindUnsupport } from '@shared/notes/kinds/unsupport'; +import { + ArticleNote, + FileNote, + NoteSkeleton, + NoteWrapper, + Repost, + TextNote, + UnknownNote, +} from '@shared/notes'; import { TitleBar } from '@shared/titleBar'; import { UserProfile } from '@shared/userProfile'; @@ -49,13 +56,19 @@ export function UserWidget({ params }: { params: Widget }) { if (!event) return; switch (event.kind) { - case 1: + case NDKKind.Text: return ( -
- +
+ + +
); - case 6: + case NDKKind.Repost: return (
); + case 1063: + return ( +
+ + + +
+ ); + case NDKKind.Article: + return ( +
+ + + +
+ ); default: return (
- + + +
); } diff --git a/src/app/space/index.tsx b/src/app/space/index.tsx index 7f56fc88..06fb9ac2 100644 --- a/src/app/space/index.tsx +++ b/src/app/space/index.tsx @@ -3,6 +3,7 @@ import { useCallback, useEffect } from 'react'; import { AddWidgetButton } from '@app/space/components/button'; import { FeedWidgetForm } from '@app/space/components/forms/feed'; import { HashTagWidgetForm } from '@app/space/components/forms/hashtag'; +import { ArticleWidget } from '@app/space/components/widgets/article'; import { FeedWidget } from '@app/space/components/widgets/feed'; import { HashtagWidget } from '@app/space/components/widgets/hashtag'; import { NetworkWidget } from '@app/space/components/widgets/network'; @@ -45,6 +46,8 @@ export function SpaceScreen() { return ; case WidgetKinds.network: return ; + case WidgetKinds.article: + return ; case WidgetKinds.xhashtag: return ; case WidgetKinds.xfeed: diff --git a/src/app/users/components/feed.tsx b/src/app/users/components/feed.tsx index 57814896..9f23e997 100644 --- a/src/app/users/components/feed.tsx +++ b/src/app/users/components/feed.tsx @@ -4,7 +4,7 @@ import { useRef } from 'react'; import { useNDK } from '@libs/ndk/provider'; -import { NoteKind_1, NoteSkeleton } from '@shared/notes'; +import { NoteSkeleton, TextNote } from '@shared/notes'; import { nHoursAgo } from '@utils/date'; import { LumeEvent } from '@utils/types'; @@ -73,7 +73,7 @@ export function UserFeed({ pubkey }: { pubkey: string }) { data-index={virtualRow.index} ref={rowVirtualizer.measureElement} > - +
))}
diff --git a/src/app/users/index.tsx b/src/app/users/index.tsx index 19fef911..201a8fa1 100644 --- a/src/app/users/index.tsx +++ b/src/app/users/index.tsx @@ -5,7 +5,7 @@ import { useParams } from 'react-router-dom'; import { useNDK } from '@libs/ndk/provider'; -import { NoteKind_1, NoteSkeleton } from '@shared/notes'; +import { NoteSkeleton, TextNote } from '@shared/notes'; import { nHoursAgo } from '@utils/date'; import { LumeEvent } from '@utils/types'; @@ -84,7 +84,7 @@ export function UserScreen() { data-index={virtualRow.index} ref={rowVirtualizer.measureElement} > - +
))}
diff --git a/src/shared/notes/kinds/sub.tsx b/src/shared/notes/child.tsx similarity index 55% rename from src/shared/notes/kinds/sub.tsx rename to src/shared/notes/child.tsx index 0cd760a0..44e42c86 100644 --- a/src/shared/notes/kinds/sub.tsx +++ b/src/shared/notes/child.tsx @@ -1,9 +1,18 @@ -import { NoteActions, NoteContent, NoteSkeleton } from '@shared/notes'; +import { NDKEvent, NDKKind } from '@nostr-dev-kit/ndk'; + +import { + ArticleNote, + FileNote, + NoteActions, + NoteSkeleton, + TextNote, + UnknownNote, +} from '@shared/notes'; import { User } from '@shared/user'; import { useEvent } from '@utils/hooks/useEvent'; -export function SubNote({ id, root }: { id: string; root?: string }) { +export function ChildNote({ id, root }: { id: string; root?: string }) { const { status, data } = useEvent(id); if (status === 'loading') { @@ -22,16 +31,29 @@ export function SubNote({ id, root }: { id: string; root?: string }) { ); } + const renderKind = (event: NDKEvent) => { + switch (event.kind) { + case NDKKind.Text: + return ; + case NDKKind.Article: + return ; + case 1063: + return ; + default: + return ; + } + }; + return ( <>
- +
- - + {renderKind(data)} +
diff --git a/src/shared/notes/index.tsx b/src/shared/notes/index.tsx index e23d89b1..f56b704e 100644 --- a/src/shared/notes/index.tsx +++ b/src/shared/notes/index.tsx @@ -11,17 +11,19 @@ export * from './replies/form'; export * from './replies/item'; export * from './replies/list'; export * from './replies/sub'; -export * from './kinds/kind1'; -export * from './kinds/kind1063'; +export * from './kinds/text'; +export * from './kinds/file'; +export * from './kinds/article'; +export * from './kinds/unknown'; export * from './metadata'; export * from './users/mini'; export * from './users/repost'; export * from './users/thread'; -export * from './kinds/thread'; export * from './kinds/repost'; -export * from './kinds/sub'; +export * from './child'; export * from './skeleton'; export * from './actions'; export * from './content'; export * from './mentions/hashtag'; export * from './stats'; +export * from './wrapper'; diff --git a/src/shared/notes/kinds/article.tsx b/src/shared/notes/kinds/article.tsx new file mode 100644 index 00000000..9d1b4422 --- /dev/null +++ b/src/shared/notes/kinds/article.tsx @@ -0,0 +1,52 @@ +import { NDKEvent } from '@nostr-dev-kit/ndk'; +import { useMemo } from 'react'; + +import { Image } from '@shared/image'; + +export function ArticleNote({ event }: { event: NDKEvent }) { + const metadata = useMemo(() => { + const title = event.tags.find((tag) => tag[0] === 'title')?.[1]; + const image = event.tags.find((tag) => tag[0] === 'image')?.[1]; + const summary = event.tags.find((tag) => tag[0] === 'summary')?.[1]; + + let publishedAt: Date | string | number = event.tags.find( + (tag) => tag[0] === 'published_at' + )?.[1]; + if (publishedAt) { + publishedAt = new Date(parseInt(publishedAt)).toLocaleDateString('en-US'); + } else { + publishedAt = new Date(event.created_at * 1000).toLocaleDateString('en-US'); + } + + return { + title, + image, + publishedAt, + summary, + }; + }, [event.id]); + + return ( +
+
+ {metadata.title} +
+
+ {metadata.title} +
+

+ {metadata.summary} +

+ + + {metadata.publishedAt.toString()} + +
+
+
+ ); +} diff --git a/src/shared/notes/kinds/kind1063.tsx b/src/shared/notes/kinds/file.tsx similarity index 89% rename from src/shared/notes/kinds/kind1063.tsx rename to src/shared/notes/kinds/file.tsx index 90ef1cb7..d530db94 100644 --- a/src/shared/notes/kinds/kind1063.tsx +++ b/src/shared/notes/kinds/file.tsx @@ -6,7 +6,7 @@ import { User } from '@shared/user'; import { isImage } from '@utils/isImage'; -export function NoteKind_1063({ event }: { event: NDKEvent }) { +export function FileNote({ event }: { event: NDKEvent }) { const url = event.tags.find((el) => el[0] === 'url')[1]; return ( @@ -20,7 +20,6 @@ export function NoteKind_1063({ event }: { event: NDKEvent }) { {isImage(url) && ( image diff --git a/src/shared/notes/kinds/kind1.tsx b/src/shared/notes/kinds/kind1.tsx deleted file mode 100644 index 365f600e..00000000 --- a/src/shared/notes/kinds/kind1.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { NDKEvent } from '@nostr-dev-kit/ndk'; -import { useMemo } from 'react'; - -import { NoteActions, NoteContent, NoteMetadata } from '@shared/notes'; -import { User } from '@shared/user'; - -import { parser } from '@utils/parser'; - -export function NoteKind_1({ - event, - skipMetadata = false, -}: { - event: NDKEvent; - skipMetadata?: boolean; -}) { - const content = useMemo(() => parser(event), [event.id]); - - return ( -
-
-
- -
-
-
- - -
-
- {!skipMetadata ? ( - - ) : ( -
- )} -
-
-
- ); -} diff --git a/src/shared/notes/kinds/repost.tsx b/src/shared/notes/kinds/repost.tsx index 94dc2a0b..96d12368 100644 --- a/src/shared/notes/kinds/repost.tsx +++ b/src/shared/notes/kinds/repost.tsx @@ -1,11 +1,14 @@ -import { NDKEvent } from '@nostr-dev-kit/ndk'; +import { NDKEvent, NDKKind } from '@nostr-dev-kit/ndk'; import { + ArticleNote, + FileNote, NoteActions, - NoteContent, NoteMetadata, NoteSkeleton, RepostUser, + TextNote, + UnknownNote, } from '@shared/notes'; import { User } from '@shared/user'; @@ -40,23 +43,32 @@ export function Repost({ event }: { event: NDKEvent }) { ); } + const renderKind = (event: NDKEvent) => { + switch (event.kind) { + case NDKKind.Text: + return ; + case NDKKind.Article: + return ; + case 1063: + return ; + default: + return ; + } + }; + return (
- +
- - + {renderKind(data)} +
diff --git a/src/shared/notes/kinds/text.tsx b/src/shared/notes/kinds/text.tsx new file mode 100644 index 00000000..20f3890a --- /dev/null +++ b/src/shared/notes/kinds/text.tsx @@ -0,0 +1,43 @@ +import { NDKEvent } from '@nostr-dev-kit/ndk'; +import { useMemo } from 'react'; +import ReactMarkdown from 'react-markdown'; +import remarkGfm from 'remark-gfm'; + +import { + Hashtag, + ImagePreview, + LinkPreview, + MentionNote, + MentionUser, + VideoPreview, +} from '@shared/notes'; + +import { parser } from '@utils/parser'; + +export function TextNote({ event }: { event: NDKEvent }) { + const content = useMemo(() => parser(event), [event.id]); + + return ( +
+ { + const key = children[0] as string; + if (key.startsWith('pub') && key.length > 50 && key.length < 100) + return ; + if (key.startsWith('tag')) return ; + }, + }} + > + {content?.parsed} + + {content?.images?.length > 0 && } + {content?.videos?.length > 0 && } + {content?.links?.length > 0 && } + {content?.notes?.length > 0 && + content?.notes.map((note: string) => )} +
+ ); +} diff --git a/src/shared/notes/kinds/unknown.tsx b/src/shared/notes/kinds/unknown.tsx new file mode 100644 index 00000000..9b157c1c --- /dev/null +++ b/src/shared/notes/kinds/unknown.tsx @@ -0,0 +1,19 @@ +import { NDKEvent } from '@nostr-dev-kit/ndk'; + +export function UnknownNote({ event }: { event: NDKEvent }) { + return ( +
+
+ + Unknown kind: {event.kind} + +

+ Lume isn't fully support this kind +

+
+
+

{event.content.toString()}

+
+
+ ); +} diff --git a/src/shared/notes/kinds/unsupport.tsx b/src/shared/notes/kinds/unsupport.tsx deleted file mode 100644 index 81f98964..00000000 --- a/src/shared/notes/kinds/unsupport.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { NDKEvent } from '@nostr-dev-kit/ndk'; - -import { NoteActions, NoteMetadata } from '@shared/notes'; -import { User } from '@shared/user'; - -export function NoteKindUnsupport({ event }: { event: NDKEvent }) { - return ( -
-
-
- -
-
-
-
-
- - Kind: {event.kind} - -

- Lume isn't fully support this kind -

-
-
-

{event.content.toString()}

-
-
- -
-
- -
-
-
- ); -} diff --git a/src/shared/notes/mentions/note.tsx b/src/shared/notes/mentions/note.tsx index 265173e1..e8c5c080 100644 --- a/src/shared/notes/mentions/note.tsx +++ b/src/shared/notes/mentions/note.tsx @@ -1,21 +1,24 @@ -import { memo, useCallback } from 'react'; -import ReactMarkdown from 'react-markdown'; -import remarkGfm from 'remark-gfm'; +import { NDKEvent, NDKKind } from '@nostr-dev-kit/ndk'; +import { memo } from 'react'; import { useStorage } from '@libs/storage/provider'; -import { Image } from '@shared/image'; -import { MentionUser, NoteSkeleton } from '@shared/notes'; +import { + ArticleNote, + FileNote, + NoteSkeleton, + TextNote, + UnknownNote, +} from '@shared/notes'; import { User } from '@shared/user'; import { WidgetKinds, useWidgets } from '@stores/widgets'; import { useEvent } from '@utils/hooks/useEvent'; -import { isImage } from '@utils/isImage'; export const MentionNote = memo(function MentionNote({ id }: { id: string }) { const { db } = useStorage(); - const { status, data, error } = useEvent(id); + const { status, data } = useEvent(id); const setWidget = useWidgets((state) => state.setWidget); @@ -28,55 +31,6 @@ export const MentionNote = memo(function MentionNote({ id }: { id: string }) { } }; - const renderItem = useCallback(() => { - if (!data) return; - switch (data.event.kind) { - case 1: { - return ( - { - const key = children[0] as string; - if (key.startsWith('pub')) return ; - if (key.startsWith('tag')) - return ( - - ); - }, - }} - > - {data.richContent.parsed.length > 160 - ? data.richContent.parsed.substring(0, 160) + '...' - : data.richContent.parsed} - - ); - } - case 1063: { - const url = data.event.tags.find((el) => el[0] === 'url')[1]; - return ( -
- {isImage(url) && ( - image - )} -
- ); - } - default: - break; - } - }, [data]); - if (status === 'loading') { return (
@@ -85,7 +39,7 @@ export const MentionNote = memo(function MentionNote({ id }: { id: string }) { ); } - if (error) { + if (status === 'error') { return (

Can't get event from relay

@@ -93,6 +47,19 @@ export const MentionNote = memo(function MentionNote({ id }: { id: string }) { ); } + const renderKind = (event: NDKEvent) => { + switch (event.kind) { + case NDKKind.Text: + return ; + case NDKKind.Article: + return ; + case 1063: + return ; + default: + return ; + } + }; + return (
openThread(e, id)} @@ -101,8 +68,8 @@ export const MentionNote = memo(function MentionNote({ id }: { id: string }) { tabIndex={0} className="mb-2 mt-3 cursor-default rounded-lg bg-white/10 px-3 py-3" > - -
{renderItem()}
+ +
{renderKind(data)}
); }); diff --git a/src/shared/notes/replies/form.tsx b/src/shared/notes/replies/form.tsx index b913074d..7f7cbfb5 100644 --- a/src/shared/notes/replies/form.tsx +++ b/src/shared/notes/replies/form.tsx @@ -3,8 +3,6 @@ import { useState } from 'react'; import { Button } from '@shared/button'; import { Image } from '@shared/image'; -import { FULL_RELAYS } from '@stores/constants'; - import { useNostr } from '@utils/hooks/useNostr'; import { useProfile } from '@utils/hooks/useProfile'; import { displayNpub } from '@utils/shortenKey'; @@ -16,7 +14,7 @@ export function NoteReplyForm({ id, pubkey }: { id: string; pubkey: string }) { const [value, setValue] = useState(''); const submit = () => { - const tags = [['e', id, FULL_RELAYS[0], 'reply']]; + const tags = [['e', id, '', 'reply']]; // publish event publish({ content: value, kind: 1, tags }); diff --git a/src/shared/notes/replies/item.tsx b/src/shared/notes/replies/item.tsx index fbeef981..a84acfdc 100644 --- a/src/shared/notes/replies/item.tsx +++ b/src/shared/notes/replies/item.tsx @@ -4,9 +4,9 @@ import { NoteActions, NoteContent, SubReply } from '@shared/notes'; import { User } from '@shared/user'; import { parser } from '@utils/parser'; -import { LumeEvent } from '@utils/types'; +import { NDKEventWithReplies } from '@utils/types'; -export function Reply({ event, root }: { event: LumeEvent; root?: string }) { +export function Reply({ event, root }: { event: NDKEventWithReplies; root?: string }) { const content = useMemo(() => parser(event), [event]); return ( diff --git a/src/shared/notes/replies/list.tsx b/src/shared/notes/replies/list.tsx index 681af5fe..9543c3fe 100644 --- a/src/shared/notes/replies/list.tsx +++ b/src/shared/notes/replies/list.tsx @@ -1,23 +1,20 @@ -import { NDKEvent } from '@nostr-dev-kit/ndk'; import { useQuery } from '@tanstack/react-query'; import { useNDK } from '@libs/ndk/provider'; import { NoteSkeleton, Reply } from '@shared/notes'; -interface ReplyEvent extends NDKEvent { - replies: Array; -} +import { NDKEventWithReplies } from '@utils/types'; export function RepliesList({ id }: { id: string }) { const { ndk } = useNDK(); - const { status, data } = useQuery(['thread', id], async () => { + const { status, data } = useQuery(['note-replies', id], async () => { const events = await ndk.fetchEvents({ kinds: [1], '#e': [id], }); - const array = [...events] as unknown as ReplyEvent[]; + const array = [...events] as unknown as NDKEventWithReplies[]; if (array.length > 0) { const replies = new Set(); @@ -74,7 +71,9 @@ export function RepliesList({ id }: { id: string }) { ) : ( data .reverse() - .map((event: NDKEvent) => ) + .map((event: NDKEventWithReplies) => ( + + )) )}
diff --git a/src/shared/notes/replies/sub.tsx b/src/shared/notes/replies/sub.tsx index 0e680d3b..89ebbc19 100644 --- a/src/shared/notes/replies/sub.tsx +++ b/src/shared/notes/replies/sub.tsx @@ -1,12 +1,12 @@ +import { NDKEvent } from '@nostr-dev-kit/ndk'; import { useMemo } from 'react'; import { NoteActions, NoteContent } from '@shared/notes'; import { User } from '@shared/user'; import { parser } from '@utils/parser'; -import { LumeEvent } from '@utils/types'; -export function SubReply({ event }: { event: LumeEvent }) { +export function SubReply({ event }: { event: NDKEvent }) { const content = useMemo(() => parser(event), [event]); return ( diff --git a/src/shared/notes/kinds/thread.tsx b/src/shared/notes/wrapper.tsx similarity index 50% rename from src/shared/notes/kinds/thread.tsx rename to src/shared/notes/wrapper.tsx index 5a0493e2..78fed294 100644 --- a/src/shared/notes/kinds/thread.tsx +++ b/src/shared/notes/wrapper.tsx @@ -1,37 +1,38 @@ import { NDKEvent } from '@nostr-dev-kit/ndk'; -import { useMemo } from 'react'; +import { ReactNode } from 'react'; -import { NoteActions, NoteContent, NoteMetadata, SubNote } from '@shared/notes'; +import { ChildNote, NoteActions, NoteMetadata } from '@shared/notes'; import { User } from '@shared/user'; -import { parser } from '@utils/parser'; - -export function NoteThread({ +export function NoteWrapper({ event, + children, + meta = true, root, reply, }: { event: NDKEvent; - root: string; - reply: string; + children: ReactNode; + repost?: boolean; + meta?: boolean; + root?: string; + reply?: string; }) { - const content = useMemo(() => parser(event), [event.id]); - return (
-
-
{root && }
-
{reply && }
+
+
{root && }
+
{reply && }
- + {children}
- + {meta ? :
}
diff --git a/src/utils/hooks/useEvent.tsx b/src/utils/hooks/useEvent.tsx index 55ddaa59..43ca0574 100644 --- a/src/utils/hooks/useEvent.tsx +++ b/src/utils/hooks/useEvent.tsx @@ -4,39 +4,26 @@ import { useQuery } from '@tanstack/react-query'; import { useNDK } from '@libs/ndk/provider'; import { useStorage } from '@libs/storage/provider'; -import { parser } from '@utils/parser'; -import { RichContent } from '@utils/types'; - export function useEvent(id: string, embed?: string) { const { db } = useStorage(); const { ndk } = useNDK(); - const { status, data, error } = useQuery( + const { status, data } = useQuery( ['event', id], async () => { - let richContent: RichContent; // return embed event (nostr.band api) if (embed) { const event: NDKEvent = JSON.parse(embed); - if (event.kind === 1) richContent = parser(event); - - return { event: event, richContent: richContent }; + return event; } - // get event from db const dbEvent = await db.getEventByID(id); if (dbEvent) { - if (dbEvent.kind === 1) richContent = parser(dbEvent); - return { event: dbEvent, richContent: richContent }; + return dbEvent; } else { // get event from relay if event in db not present const event = await ndk.fetchEvent(id); - if (!event) throw new Error(`Event not found: ${id}`); - if (event.kind === 1) { - richContent = parser(event); - } - - return { event: event, richContent: richContent }; + return event; } }, { @@ -48,5 +35,5 @@ export function useEvent(id: string, embed?: string) { } ); - return { status, data, error }; + return { status, data }; } diff --git a/src/utils/types.d.ts b/src/utils/types.d.ts index 461e43a1..91d9f7ff 100644 --- a/src/utils/types.d.ts +++ b/src/utils/types.d.ts @@ -74,3 +74,7 @@ export interface Opengraph { description?: string; image?: string; } + +export interface NDKEventWithReplies extends NDKEvent { + replies: Array; +}