diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 00000000..e536c8db --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,18 @@ +module.exports = { + extends: ["next/core-web-vitals", "plugin:import/recommended"], + root: true, + settings: { + "import/resolver": { + node: { extensions: [".js", ".mjs", ".ts", ".d.ts"] }, + }, + }, + plugins: ["unused-imports"], + rules: { + "no-unused-vars": "off", + "@typescript-eslint/no-unused-vars": "off", + "unused-imports/no-unused-imports": "error", + "import/named": "off", + "import/no-anonymous-default-export": "off", + "import/no-named-as-default": "off", + }, +} diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index bffb357a..00000000 --- a/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "next/core-web-vitals" -} diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index f4d0aacb..00000000 --- a/.prettierrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "singleQuote": false, - "semi": false, - "trailingComma": "all", - "endOfLine": "lf" -} diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 00000000..4fcb0cb8 --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,26 @@ +module.exports = { + singleQuote: false, + semi: false, + trailingComma: "all", + endOfLine: "lf", + plugins: [ + require.resolve("prettier-package-json"), + require.resolve("@trivago/prettier-plugin-sort-imports"), + ], + + importOrderParserPlugins: [ + "classProperties", + "decorators-legacy", + "typescript", + "jsx", + ], + importOrder: [ + "", + "^@(.*)/(.*)$", + "^~/(.*)$", + "^@/(.*)$", + "^[./]", + ], + importOrderSeparation: true, + importOrderSortSpecifiers: true, +} diff --git a/.prettierrc.json b/.prettierrc.json deleted file mode 100644 index 0967ef42..00000000 --- a/.prettierrc.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/package.json b/package.json index 1984ac2e..cfb98ab8 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,10 @@ "analyze": "NODE_ENV=production ANALYZE=true BUNDLE_ANALYZE=browser next build" }, "lint-staged": { - "**/*": "prettier --write --ignore-unknown" + "*.{js,jsx,ts,tsx}": [ + "eslint --cache --fix", + "prettier --ignore-unknown --ignore-path ./.gitignore --write " + ] }, "dependencies": { "@codemirror/commands": "6.2.2", @@ -138,6 +141,7 @@ "devDependencies": { "@next/bundle-analyzer": "13.3.0", "@playwright/test": "1.32.3", + "@trivago/prettier-plugin-sort-imports": "4.1.1", "@types/canvas-confetti": "^1.6.0", "@types/chroma-js": "^2.4.0", "@types/cookie": "0.5.1", @@ -162,13 +166,16 @@ "cspell": "^6.31.1", "esbuild": "0.17.16", "esbuild-register": "3.4.2", - "eslint": "8.38.0", + "eslint": "8.29.0", "eslint-config-next": "13.3.0", + "eslint-plugin-import": "2.27.5", + "eslint-plugin-unused-imports": "2.0.0", "husky": "8.0.3", "lint-staged": "13.2.1", "next-pwa": "^5.6.0", "postcss-import": "15.1.0", "prettier": "2.8.7", + "prettier-package-json": "2.8.0", "prisma": "^4.12.0", "tailwindcss": "3.3.1", "typescript": "5.0.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0f339891..5ad54fed 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -333,6 +333,9 @@ devDependencies: '@playwright/test': specifier: 1.32.3 version: 1.32.3 + '@trivago/prettier-plugin-sort-imports': + specifier: 4.1.1 + version: 4.1.1(prettier@2.8.7) '@types/canvas-confetti': specifier: ^1.6.0 version: 1.6.0 @@ -406,11 +409,17 @@ devDependencies: specifier: 3.4.2 version: 3.4.2(esbuild@0.17.16) eslint: - specifier: 8.38.0 - version: 8.38.0 + specifier: 8.29.0 + version: 8.29.0 eslint-config-next: specifier: 13.3.0 - version: 13.3.0(eslint@8.38.0)(typescript@5.0.4) + version: 13.3.0(eslint@8.29.0)(typescript@5.0.4) + eslint-plugin-import: + specifier: 2.27.5 + version: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.29.0) + eslint-plugin-unused-imports: + specifier: 2.0.0 + version: 2.0.0(eslint@8.29.0) husky: specifier: 8.0.3 version: 8.0.3 @@ -426,6 +435,9 @@ devDependencies: prettier: specifier: 2.8.7 version: 2.8.7 + prettier-package-json: + specifier: 2.8.0 + version: 2.8.0 prisma: specifier: ^4.12.0 version: 4.12.0 @@ -530,6 +542,15 @@ packages: transitivePeerDependencies: - supports-color + /@babel/generator@7.17.7: + resolution: {integrity: sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.21.4 + jsesc: 2.5.2 + source-map: 0.5.7 + dev: true + /@babel/generator@7.21.4: resolution: {integrity: sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==} engines: {node: '>=6.9.0'} @@ -1632,6 +1653,24 @@ packages: '@babel/parser': 7.21.4 '@babel/types': 7.21.4 + /@babel/traverse@7.17.3: + resolution: {integrity: sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.21.4 + '@babel/generator': 7.21.4 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.21.0 + '@babel/helper-hoist-variables': 7.18.6 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/parser': 7.21.4 + '@babel/types': 7.21.4 + debug: 4.3.4(supports-color@8.1.1) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/traverse@7.21.4: resolution: {integrity: sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==} engines: {node: '>=6.9.0'} @@ -1649,6 +1688,14 @@ packages: transitivePeerDependencies: - supports-color + /@babel/types@7.17.0: + resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.19.1 + to-fast-properties: 2.0.0 + dev: true + /@babel/types@7.21.4: resolution: {integrity: sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==} engines: {node: '>=6.9.0'} @@ -2717,23 +2764,8 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.38.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 8.38.0 - eslint-visitor-keys: 3.4.0 - dev: true - - /@eslint-community/regexpp@4.5.0: - resolution: {integrity: sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true - - /@eslint/eslintrc@2.0.2: - resolution: {integrity: sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==} + /@eslint/eslintrc@1.4.1: + resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 @@ -2749,11 +2781,6 @@ packages: - supports-color dev: true - /@eslint/js@8.38.0: - resolution: {integrity: sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - /@ethersproject/abi@5.7.0: resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==} dependencies: @@ -4379,6 +4406,26 @@ packages: resolution: {integrity: sha512-qi2jjgO6Tn3KNPGnm6B7p6QTEPvY95NFsIAaJuwbulur8iJUEenp1OnoUfiDaC/g2WPPEFkcfXpmnu8XEMFo2A==} dev: false + /@trivago/prettier-plugin-sort-imports@4.1.1(prettier@2.8.7): + resolution: {integrity: sha512-dQ2r2uzNr1x6pJsuh/8x0IRA3CBUB+pWEW3J/7N98axqt7SQSm+2fy0FLNXvXGg77xEDC7KHxJlHfLYyi7PDcw==} + peerDependencies: + '@vue/compiler-sfc': 3.x + prettier: 2.x + peerDependenciesMeta: + '@vue/compiler-sfc': + optional: true + dependencies: + '@babel/generator': 7.17.7 + '@babel/parser': 7.21.4 + '@babel/traverse': 7.17.3 + '@babel/types': 7.17.0 + javascript-natural-sort: 0.7.1 + lodash: 4.17.21 + prettier: 2.8.7 + transitivePeerDependencies: + - supports-color + dev: true + /@tsconfig/node10@1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} dev: false @@ -4543,9 +4590,12 @@ packages: resolution: {integrity: sha512-1cYJrqq9GezNFPsWTZpFut/d4CjpZqA0vhqDUPFWYKF1oIyBz5qnoYMzR+0C/T96t3ebLAC1SSnwrVOm5/j74A==} dev: false + /@types/parse-author@2.0.1: + resolution: {integrity: sha512-2RNXvvDY+7ITl/Q3znDpW9DxyAckKgLCXpoiBHN9BeLH1aV7z/W657P2+PK3wVUgGWXtc99ZQy3LkJTGlxLsvA==} + dev: true + /@types/parse-json@4.0.0: resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} - dev: false /@types/parse5@6.0.3: resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} @@ -4630,7 +4680,7 @@ packages: '@types/node': 18.15.11 dev: false - /@typescript-eslint/parser@5.58.0(eslint@8.38.0)(typescript@5.0.4): + /@typescript-eslint/parser@5.58.0(eslint@8.29.0)(typescript@5.0.4): resolution: {integrity: sha512-ixaM3gRtlfrKzP8N6lRhBbjTow1t6ztfBvQNGuRM8qH1bjFFXIJ35XY+FC0RRBKn3C6cT+7VW1y8tNm7DwPHDQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -4644,7 +4694,7 @@ packages: '@typescript-eslint/types': 5.58.0 '@typescript-eslint/typescript-estree': 5.58.0(typescript@5.0.4) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.38.0 + eslint: 8.29.0 typescript: 5.0.4 transitivePeerDependencies: - supports-color @@ -5975,6 +6025,11 @@ packages: engines: {node: '>=4'} dev: false + /author-regex@1.0.0: + resolution: {integrity: sha512-KbWgR8wOYRAPekEmMXrYYdc7BRyhn2Ftk7KWfMUnQ43hFdojWEFRxhhRUm3/OFEdPa1r0KAvTTg9YQK57xTe0g==} + engines: {node: '>=0.8'} + dev: true + /autoprefixer@10.4.14(postcss@8.4.22): resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} engines: {node: ^10 || ^12 || >=14} @@ -6780,7 +6835,6 @@ packages: parse-json: 5.2.0 path-type: 4.0.0 yaml: 1.10.2 - dev: false /cosmiconfig@8.0.0: resolution: {integrity: sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==} @@ -7840,7 +7894,7 @@ packages: engines: {node: '>=12'} dev: false - /eslint-config-next@13.3.0(eslint@8.38.0)(typescript@5.0.4): + /eslint-config-next@13.3.0(eslint@8.29.0)(typescript@5.0.4): resolution: {integrity: sha512-6YEwmFBX0VjBd3ODGW9df0Is0FLaRFdMN8eAahQG9CN6LjQ28J8AFr19ngxqMSg7Qv6Uca/3VeeBosJh1bzu0w==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 @@ -7851,14 +7905,14 @@ packages: dependencies: '@next/eslint-plugin-next': 13.3.0 '@rushstack/eslint-patch': 1.2.0 - '@typescript-eslint/parser': 5.58.0(eslint@8.38.0)(typescript@5.0.4) - eslint: 8.38.0 + '@typescript-eslint/parser': 5.58.0(eslint@8.29.0)(typescript@5.0.4) + eslint: 8.29.0 eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.38.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) - eslint-plugin-jsx-a11y: 6.7.1(eslint@8.38.0) - eslint-plugin-react: 7.32.2(eslint@8.38.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.38.0) + eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.29.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.29.0) + eslint-plugin-jsx-a11y: 6.7.1(eslint@8.29.0) + eslint-plugin-react: 7.32.2(eslint@8.29.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.29.0) typescript: 5.0.4 transitivePeerDependencies: - eslint-import-resolver-webpack @@ -7875,7 +7929,7 @@ packages: - supports-color dev: true - /eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.38.0): + /eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.29.0): resolution: {integrity: sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -7884,9 +7938,9 @@ packages: dependencies: debug: 4.3.4(supports-color@8.1.1) enhanced-resolve: 5.12.0 - eslint: 8.38.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) + eslint: 8.29.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.29.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.29.0) get-tsconfig: 4.5.0 globby: 13.1.4 is-core-module: 2.12.0 @@ -7899,7 +7953,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.29.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -7920,16 +7974,16 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.58.0(eslint@8.38.0)(typescript@5.0.4) + '@typescript-eslint/parser': 5.58.0(eslint@8.29.0)(typescript@5.0.4) debug: 3.2.7 - eslint: 8.38.0 + eslint: 8.29.0 eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.38.0) + eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.29.0) transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0): + /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.29.0): resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} peerDependencies: @@ -7939,15 +7993,15 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.58.0(eslint@8.38.0)(typescript@5.0.4) + '@typescript-eslint/parser': 5.58.0(eslint@8.29.0)(typescript@5.0.4) array-includes: 3.1.6 array.prototype.flat: 1.3.1 array.prototype.flatmap: 1.3.1 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.38.0 + eslint: 8.29.0 eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.29.0) has: 1.0.3 is-core-module: 2.12.0 is-glob: 4.0.3 @@ -7962,7 +8016,7 @@ packages: - supports-color dev: true - /eslint-plugin-jsx-a11y@6.7.1(eslint@8.38.0): + /eslint-plugin-jsx-a11y@6.7.1(eslint@8.29.0): resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} engines: {node: '>=4.0'} peerDependencies: @@ -7977,7 +8031,7 @@ packages: axobject-query: 3.1.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 8.38.0 + eslint: 8.29.0 has: 1.0.3 jsx-ast-utils: 3.3.3 language-tags: 1.0.5 @@ -7987,16 +8041,16 @@ packages: semver: 6.3.0 dev: true - /eslint-plugin-react-hooks@4.6.0(eslint@8.38.0): + /eslint-plugin-react-hooks@4.6.0(eslint@8.29.0): resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: - eslint: 8.38.0 + eslint: 8.29.0 dev: true - /eslint-plugin-react@7.32.2(eslint@8.38.0): + /eslint-plugin-react@7.32.2(eslint@8.29.0): resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==} engines: {node: '>=4'} peerDependencies: @@ -8006,7 +8060,7 @@ packages: array.prototype.flatmap: 1.3.1 array.prototype.tosorted: 1.1.1 doctrine: 2.1.0 - eslint: 8.38.0 + eslint: 8.29.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.3 minimatch: 3.1.2 @@ -8020,6 +8074,25 @@ packages: string.prototype.matchall: 4.0.8 dev: true + /eslint-plugin-unused-imports@2.0.0(eslint@8.29.0): + resolution: {integrity: sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^5.0.0 + eslint: ^8.0.0 + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + dependencies: + eslint: 8.29.0 + eslint-rule-composer: 0.3.0 + dev: true + + /eslint-rule-composer@0.3.0: + resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==} + engines: {node: '>=4.0.0'} + dev: true + /eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} @@ -8036,20 +8109,32 @@ packages: estraverse: 5.3.0 dev: true + /eslint-utils@3.0.0(eslint@8.29.0): + resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} + engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} + peerDependencies: + eslint: '>=5' + dependencies: + eslint: 8.29.0 + eslint-visitor-keys: 2.1.0 + dev: true + + /eslint-visitor-keys@2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} + dev: true + /eslint-visitor-keys@3.4.0: resolution: {integrity: sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.38.0: - resolution: {integrity: sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg==} + /eslint@8.29.0: + resolution: {integrity: sha512-isQ4EEiyUjZFbEKvEGJKKGBwXtvXX+zJbkVKCgTuB9t/+jUBcy8avhkEwWJecI15BkRkOYmvIM5ynbhRjEkoeg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.38.0) - '@eslint-community/regexpp': 4.5.0 - '@eslint/eslintrc': 2.0.2 - '@eslint/js': 8.38.0 + '@eslint/eslintrc': 1.4.1 '@humanwhocodes/config-array': 0.11.8 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 @@ -8060,6 +8145,7 @@ packages: doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.0 + eslint-utils: 3.0.0(eslint@8.29.0) eslint-visitor-keys: 3.4.0 espree: 9.5.1 esquery: 1.5.0 @@ -8083,6 +8169,7 @@ packages: minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.1 + regexpp: 3.2.0 strip-ansi: 6.0.1 strip-json-comments: 3.1.1 text-table: 0.2.0 @@ -8525,6 +8612,15 @@ packages: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} dev: false + /fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: true + /fs-extra@9.1.0: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} engines: {node: '>=10'} @@ -9542,6 +9638,10 @@ packages: minimatch: 3.1.2 dev: true + /javascript-natural-sort@0.7.1: + resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==} + dev: true + /jayson@3.7.0: resolution: {integrity: sha512-tfy39KJMrrXJ+mFcMpxwBvFDetS8LAID93+rycFglIQM4kl3uNR3W4lBLE/FFhsoUCEox5Dt2adVpDm/XtebbQ==} engines: {node: '>=8'} @@ -11384,6 +11484,13 @@ packages: callsites: 3.1.0 dev: true + /parse-author@2.0.0: + resolution: {integrity: sha512-yx5DfvkN8JsHL2xk2Os9oTia467qnvRgey4ahSm2X8epehBLx/gWLcy5KI+Y36ful5DzGbCS6RazqZGgy1gHNw==} + engines: {node: '>=0.10.0'} + dependencies: + author-regex: 1.0.0 + dev: true + /parse-entities@4.0.1: resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} dependencies: @@ -11696,6 +11803,21 @@ packages: engines: {node: '>= 0.8.0'} dev: true + /prettier-package-json@2.8.0: + resolution: {integrity: sha512-WxtodH/wWavfw3MR7yK/GrS4pASEQ+iSTkdtSxPJWvqzG55ir5nvbLt9rw5AOiEcqqPCRM92WCtR1rk3TG3JSQ==} + hasBin: true + dependencies: + '@types/parse-author': 2.0.1 + commander: 4.1.1 + cosmiconfig: 7.1.0 + fs-extra: 10.1.0 + glob: 7.2.3 + minimatch: 3.1.2 + parse-author: 2.0.0 + sort-object-keys: 1.1.3 + sort-order: 1.0.1 + dev: true + /prettier@2.8.7: resolution: {integrity: sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==} engines: {node: '>=10.13.0'} @@ -12188,6 +12310,11 @@ packages: functions-have-names: 1.2.3 dev: true + /regexpp@3.2.0: + resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} + engines: {node: '>=8'} + dev: true + /regexpu-core@5.3.2: resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} engines: {node: '>=4'} @@ -12858,6 +12985,14 @@ packages: atomic-sleep: 1.0.0 dev: false + /sort-object-keys@1.1.3: + resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} + dev: true + + /sort-order@1.0.1: + resolution: {integrity: sha512-BiExT7C1IVF4DNd5dttR/dEq3wunGOHpy4phvqFUQA1pY6j2ye8WWEAV8LhRbfdF0EWDX12FfyPPf9P71eT+cA==} + dev: true + /sortablejs@1.15.0: resolution: {integrity: sha512-bv9qgVMjUMf89wAvM6AxVvS/4MX3sPeN0+agqShejLU5z5GX4C75ow1O2e5k4L6XItUyAK3gH6AxSbXrOM5e8w==} dev: false @@ -12880,7 +13015,6 @@ packages: /source-map@0.5.7: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} - dev: false /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} diff --git a/src/components/common/AchievementItem.tsx b/src/components/common/AchievementItem.tsx index 377d2506..a2493411 100644 --- a/src/components/common/AchievementItem.tsx +++ b/src/components/common/AchievementItem.tsx @@ -1,10 +1,12 @@ -import type { AchievementSection } from "~/models/site.model" -import { Image } from "~/components/ui/Image" -import { AchievementModal } from "~/components/common/AchievementModal" -import { useState } from "react" -import { Indicator } from "@mantine/core" -import { useDate } from "~/hooks/useDate" import { useTranslation } from "next-i18next" +import { useState } from "react" + +import { Indicator } from "@mantine/core" + +import { AchievementModal } from "~/components/common/AchievementModal" +import { Image } from "~/components/ui/Image" +import { useDate } from "~/hooks/useDate" +import type { AchievementSection } from "~/models/site.model" export const Badge = ({ media, diff --git a/src/components/common/AchievementModal.tsx b/src/components/common/AchievementModal.tsx index 15e358b6..bb400692 100644 --- a/src/components/common/AchievementModal.tsx +++ b/src/components/common/AchievementModal.tsx @@ -1,14 +1,16 @@ -import { Modal, Stepper } from "@mantine/core" -import type { AchievementSection } from "~/models/site.model" -import { Image } from "~/components/ui/Image" -import Tilt from "react-parallax-tilt" -import { Badge } from "~/components/common/AchievementItem" -import { Button } from "~/components/ui/Button" -import { useMintAchievement } from "~/queries/site" -import { BlockchainIcon } from "~/components/icons/BlockchainIcon" -import { useDate } from "~/hooks/useDate" import { useTranslation } from "next-i18next" +import Tilt from "react-parallax-tilt" + +import { Modal, Stepper } from "@mantine/core" + +import { Badge } from "~/components/common/AchievementItem" +import { BlockchainIcon } from "~/components/icons/BlockchainIcon" +import { Button } from "~/components/ui/Button" +import { Image } from "~/components/ui/Image" +import { useDate } from "~/hooks/useDate" import { cn } from "~/lib/utils" +import type { AchievementSection } from "~/models/site.model" +import { useMintAchievement } from "~/queries/site" export const AchievementModal: React.FC<{ opened: boolean diff --git a/src/components/common/BlockchainInfo.tsx b/src/components/common/BlockchainInfo.tsx index f35794da..b5c128fd 100644 --- a/src/components/common/BlockchainInfo.tsx +++ b/src/components/common/BlockchainInfo.tsx @@ -1,10 +1,11 @@ -import { CSB_IO, CSB_SCAN } from "~/lib/env" -import { Profile, Note } from "~/lib/types" -import { Disclosure } from "@headlessui/react" -import { BlockchainIcon } from "~/components/icons/BlockchainIcon" -import { toIPFS, toGateway } from "~/lib/ipfs-parser" -import { IPFS_GATEWAY } from "~/lib/env" import { useTranslation } from "next-i18next" + +import { Disclosure } from "@headlessui/react" + +import { BlockchainIcon } from "~/components/icons/BlockchainIcon" +import { CSB_IO, CSB_SCAN, IPFS_GATEWAY } from "~/lib/env" +import { toGateway, toIPFS } from "~/lib/ipfs-parser" +import { Note, Profile } from "~/lib/types" import { cn } from "~/lib/utils" export const BlockchainInfo: React.FC<{ diff --git a/src/components/common/CharacterCard.tsx b/src/components/common/CharacterCard.tsx index 41f11c5a..903c8b5a 100644 --- a/src/components/common/CharacterCard.tsx +++ b/src/components/common/CharacterCard.tsx @@ -1,13 +1,14 @@ +import { useTranslation } from "next-i18next" import { useEffect, useState } from "react" -import { Avatar } from "~/components/ui/Avatar" + import { FollowingButton } from "~/components/common/FollowingButton" import { FollowingCount } from "~/components/common/FollowingCount" -import * as siteModel from "~/models/site.model" +import { Titles } from "~/components/common/Titles" +import { Avatar } from "~/components/ui/Avatar" +import { useDate } from "~/hooks/useDate" import type { Profile } from "~/lib/types" import { cn } from "~/lib/utils" -import { useDate } from "~/hooks/useDate" -import { useTranslation } from "next-i18next" -import { Titles } from "~/components/common/Titles" +import * as siteModel from "~/models/site.model" export const CharacterCard: React.FC<{ siteId?: string diff --git a/src/components/common/CharacterFloatCard.tsx b/src/components/common/CharacterFloatCard.tsx index 4d4b5bfa..217a2797 100644 --- a/src/components/common/CharacterFloatCard.tsx +++ b/src/components/common/CharacterFloatCard.tsx @@ -1,17 +1,18 @@ import { useState } from "react" + import { - offset, - flip, - shift, autoUpdate, - useFloating, - useInteractions, - useHover, - useFocus, - useRole, + flip, + offset, + shift, useDismiss, + useFloating, + useHover, + useInteractions, + useRole, useTransitionStyles, } from "@floating-ui/react" + import { CharacterCard } from "~/components/common/CharacterCard" export const CharacterFloatCard: React.FC<{ diff --git a/src/components/common/CharacterList.tsx b/src/components/common/CharacterList.tsx index be84f711..d1f9fc4b 100644 --- a/src/components/common/CharacterList.tsx +++ b/src/components/common/CharacterList.tsx @@ -1,13 +1,15 @@ -import { Modal } from "~/components/ui/Modal" +import { useTranslation } from "next-i18next" import InfiniteScroll from "react-infinite-scroller" + +import { CharacterFloatCard } from "~/components/common/CharacterFloatCard" +import { BlockchainIcon } from "~/components/icons/BlockchainIcon" +import { Modal } from "~/components/ui/Modal" +import { CSB_SCAN } from "~/lib/env" +import { getSiteLink } from "~/lib/helpers" + +import { Avatar } from "../ui/Avatar" import { Button } from "../ui/Button" import { UniLink } from "../ui/UniLink" -import { CSB_SCAN } from "~/lib/env" -import { Avatar } from "../ui/Avatar" -import { BlockchainIcon } from "~/components/icons/BlockchainIcon" -import { getSiteLink } from "~/lib/helpers" -import { CharacterFloatCard } from "~/components/common/CharacterFloatCard" -import { useTranslation } from "next-i18next" export const CharacterList: React.FC<{ open: boolean diff --git a/src/components/common/Comment.tsx b/src/components/common/Comment.tsx index f38b0bcb..ced59998 100644 --- a/src/components/common/Comment.tsx +++ b/src/components/common/Comment.tsx @@ -1,11 +1,12 @@ -import { cn } from "~/lib/utils" -import { Note } from "~/lib/types" -import { useGetComments } from "~/queries/page" -import { CommentItem } from "~/components/common/CommentItem" -import { CommentInput } from "~/components/common/CommentInput" import { useTranslation } from "next-i18next" import InfiniteScroll from "react-infinite-scroller" +import { CommentInput } from "~/components/common/CommentInput" +import { CommentItem } from "~/components/common/CommentItem" +import { Note } from "~/lib/types" +import { cn } from "~/lib/utils" +import { useGetComments } from "~/queries/page" + export const Comment: React.FC<{ page?: Note | null className?: string diff --git a/src/components/common/CommentInput.tsx b/src/components/common/CommentInput.tsx index 18b8fc91..2cb5e252 100644 --- a/src/components/common/CommentInput.tsx +++ b/src/components/common/CommentInput.tsx @@ -1,17 +1,20 @@ -import { Profile } from "~/lib/types" -import { useAccountSites } from "~/queries/site" -import { Avatar } from "~/components/ui/Avatar" -import { Input } from "~/components/ui/Input" -import { Button } from "~/components/ui/Button" -import { useForm } from "react-hook-form" -import { useAccountState } from "@crossbell/connect-kit" -import { useState, useEffect } from "react" -import { useCommentPage, useUpdateComment } from "~/queries/page" -import { useRouter } from "next/router" -import { EmojiPicker } from "./EmojiPicker" -import { Popover } from "@headlessui/react" +import { CharacterEntity, NoteEntity } from "crossbell.js" import { useTranslation } from "next-i18next" -import { NoteEntity, CharacterEntity } from "crossbell.js" +import { useRouter } from "next/router" +import { useEffect, useState } from "react" +import { useForm } from "react-hook-form" + +import { useAccountState } from "@crossbell/connect-kit" +import { Popover } from "@headlessui/react" + +import { Avatar } from "~/components/ui/Avatar" +import { Button } from "~/components/ui/Button" +import { Input } from "~/components/ui/Input" +import { Profile } from "~/lib/types" +import { useCommentPage, useUpdateComment } from "~/queries/page" +import { useAccountSites } from "~/queries/site" + +import { EmojiPicker } from "./EmojiPicker" export const CommentInput: React.FC<{ pageId?: string diff --git a/src/components/common/CommentItem.tsx b/src/components/common/CommentItem.tsx index cec6d9b1..2d1bcb28 100644 --- a/src/components/common/CommentItem.tsx +++ b/src/components/common/CommentItem.tsx @@ -1,19 +1,21 @@ -import { Avatar } from "~/components/ui/Avatar" -import { UniLink } from "~/components/ui/UniLink" +import { CharacterEntity, NoteEntity } from "crossbell.js" +import { useTranslation } from "next-i18next" +import { useState } from "react" + +import { useAccountState } from "@crossbell/connect-kit" + +import { CharacterFloatCard } from "~/components/common/CharacterFloatCard" +import { CommentInput } from "~/components/common/CommentInput" +import { PageContent } from "~/components/common/PageContent" +import { Reactions } from "~/components/common/Reactions" +import { Titles } from "~/components/common/Titles" import { BlockchainIcon } from "~/components/icons/BlockchainIcon" +import { Avatar } from "~/components/ui/Avatar" +import { Button } from "~/components/ui/Button" +import { UniLink } from "~/components/ui/UniLink" +import { useDate } from "~/hooks/useDate" import { CSB_SCAN } from "~/lib/env" import { getSiteLink } from "~/lib/helpers" -import { PageContent } from "~/components/common/PageContent" -import { NoteEntity, CharacterEntity } from "crossbell.js" -import { Button } from "~/components/ui/Button" -import { Reactions } from "~/components/common/Reactions" -import { useState } from "react" -import { CommentInput } from "~/components/common/CommentInput" -import { CharacterFloatCard } from "~/components/common/CharacterFloatCard" -import { useTranslation } from "next-i18next" -import { useDate } from "~/hooks/useDate" -import { useAccountState } from "@crossbell/connect-kit" -import { Titles } from "~/components/common/Titles" export const CommentItem: React.FC<{ comment: NoteEntity & { diff --git a/src/components/common/ConnectButton.tsx b/src/components/common/ConnectButton.tsx index 9efb97ef..03371caf 100644 --- a/src/components/common/ConnectButton.tsx +++ b/src/components/common/ConnectButton.tsx @@ -1,36 +1,39 @@ +import { useTranslation } from "next-i18next" +import { useEffect, useState } from "react" + import { - useConnectModal, - useAccountState, - useDisconnectModal, GeneralAccount, + useAccountBalance, + useAccountState, + useConnectModal, useCsbDetailModal, + useDisconnectModal, useIsOpSignEnabled, useOpSignSettingsModal, - useUpgradeAccountModal, useSelectCharactersModal, - useAccountBalance, + useUpgradeAccountModal, } from "@crossbell/connect-kit" -import { useAccountSites } from "~/queries/site" -import { Avatar } from "~/components/ui/Avatar" -import { Button, type VariantColor, type Variant } from "~/components/ui/Button" -import { UniLink } from "../ui/UniLink" -import { useEffect, useState } from "react" +import { + useNotifications, + useShowNotificationModal, +} from "@crossbell/notification" +import { useRefCallback } from "@crossbell/util-hooks" import { BellIcon, FaceFrownIcon, FaceSmileIcon, } from "@heroicons/react/24/outline" import { BellAlertIcon } from "@heroicons/react/24/solid" -import { SITE_URL } from "~/lib/env" -import { useRefCallback } from "@crossbell/util-hooks" -import { - useShowNotificationModal, - useNotifications, -} from "@crossbell/notification" + +import { Avatar } from "~/components/ui/Avatar" +import { Button, type Variant, type VariantColor } from "~/components/ui/Button" import { Menu } from "~/components/ui/Menu" -import { useTranslation } from "next-i18next" -import { cn } from "~/lib/utils" +import { SITE_URL } from "~/lib/env" import { getSiteLink } from "~/lib/helpers" +import { cn } from "~/lib/utils" +import { useAccountSites } from "~/queries/site" + +import { UniLink } from "../ui/UniLink" type HeaderLinkType = { icon?: React.ReactNode diff --git a/src/components/common/DarkModeSwitch.tsx b/src/components/common/DarkModeSwitch.tsx index e0b2558e..251c3482 100644 --- a/src/components/common/DarkModeSwitch.tsx +++ b/src/components/common/DarkModeSwitch.tsx @@ -1,4 +1,5 @@ import { Switch } from "@headlessui/react" + import { useDarkModeSwitch, useIsDark } from "~/hooks/useDarkMode" export const DarkModeSwitch = () => { diff --git a/src/components/common/EmojiPicker.tsx b/src/components/common/EmojiPicker.tsx index 9f94ce24..4d4c90e6 100644 --- a/src/components/common/EmojiPicker.tsx +++ b/src/components/common/EmojiPicker.tsx @@ -1,5 +1,6 @@ import { useEffect, useRef } from "react" import { useTranslation } from "react-i18next" + import { useIsDark } from "~/hooks/useDarkMode" export const EmojiPicker: React.FC<{ diff --git a/src/components/common/FollowingButton.tsx b/src/components/common/FollowingButton.tsx index 34970dc4..cc654196 100644 --- a/src/components/common/FollowingButton.tsx +++ b/src/components/common/FollowingButton.tsx @@ -1,19 +1,21 @@ +import { Trans, useTranslation } from "next-i18next" +import { useEffect } from "react" +import { toast } from "react-hot-toast" + +import { useConnectedAction } from "@crossbell/connect-kit" + import { Button } from "~/components/ui/Button" import type { Variant } from "~/components/ui/Button" -import { useEffect } from "react" +import { UniLink } from "~/components/ui/UniLink" +import { SITE_URL } from "~/lib/env" +import { Profile } from "~/lib/types" +import { cn } from "~/lib/utils" import { + useAccountSites, useGetSubscription, useSubscribeToSite, useUnsubscribeFromSite, - useAccountSites, } from "~/queries/site" -import { useConnectedAction } from "@crossbell/connect-kit" -import { cn } from "~/lib/utils" -import { Profile } from "~/lib/types" -import { Trans, useTranslation } from "next-i18next" -import { toast } from "react-hot-toast" -import { UniLink } from "~/components/ui/UniLink" -import { SITE_URL } from "~/lib/env" export const FollowingButton: React.FC<{ site: Profile | undefined | null diff --git a/src/components/common/FollowingCount.tsx b/src/components/common/FollowingCount.tsx index 11ca49a8..db847932 100644 --- a/src/components/common/FollowingCount.tsx +++ b/src/components/common/FollowingCount.tsx @@ -1,11 +1,12 @@ +import { useTranslation } from "next-i18next" import { useState } from "react" + import { CharacterList } from "~/components/common/CharacterList" +import { Button } from "~/components/ui/Button" import { useGetSiteSubscriptions, useGetSiteToSubscriptions, } from "~/queries/site" -import { useTranslation } from "next-i18next" -import { Button } from "~/components/ui/Button" export const FollowingCount: React.FC<{ siteId?: string diff --git a/src/components/common/Logo.tsx b/src/components/common/Logo.tsx index 559f36ea..5771a165 100644 --- a/src/components/common/Logo.tsx +++ b/src/components/common/Logo.tsx @@ -1,8 +1,10 @@ -import React, { useRef } from "react" import Lottie, { type LottieRefCurrentProps } from "lottie-react" -import LogoLottieJSON from "../../../public/assets/logo.json" +import React, { useRef } from "react" + import { Image } from "~/components/ui/Image" +import LogoLottieJSON from "../../../public/assets/logo.json" + export const Logo: React.FC<{ type: "svg" | "png" | "lottie" width?: number diff --git a/src/components/common/Monaco/index.tsx b/src/components/common/Monaco/index.tsx index 4d2e4ff1..a397c2d5 100644 --- a/src/components/common/Monaco/index.tsx +++ b/src/components/common/Monaco/index.tsx @@ -1,7 +1,9 @@ import Editor, { EditorProps } from "@monaco-editor/react" -import { useMonacoTheme } from "./use-theme" + import { useIsDark } from "~/hooks/useDarkMode" +import { useMonacoTheme } from "./use-theme" + export function MonacoEditor(props: EditorProps) { const isDark = useIsDark() useMonacoTheme(isDark) diff --git a/src/components/common/Monaco/use-theme.ts b/src/components/common/Monaco/use-theme.ts index bf522c23..8f0e4af7 100644 --- a/src/components/common/Monaco/use-theme.ts +++ b/src/components/common/Monaco/use-theme.ts @@ -1,5 +1,7 @@ -import { useMonaco } from "@monaco-editor/react" import { useEffect } from "react" + +import { useMonaco } from "@monaco-editor/react" + import Dark from "./theme/dark.json" import Light from "./theme/light.json" diff --git a/src/components/common/PageContent.tsx b/src/components/common/PageContent.tsx index 3aa4853c..048d6f50 100644 --- a/src/components/common/PageContent.tsx +++ b/src/components/common/PageContent.tsx @@ -1,10 +1,11 @@ -import { cn } from "~/lib/utils" -import { useCodeCopy } from "~/hooks/useCodeCopy" -import { renderPageContent } from "~/markdown" -import { PostToc } from "~/components/site/PostToc" import { MutableRefObject, useEffect, useMemo } from "react" import { scroller } from "react-scroll" +import { PostToc } from "~/components/site/PostToc" +import { useCodeCopy } from "~/hooks/useCodeCopy" +import { cn } from "~/lib/utils" +import { renderPageContent } from "~/markdown" + export const PageContent: React.FC<{ content?: string className?: string diff --git a/src/components/common/PatronButton.tsx b/src/components/common/PatronButton.tsx index 8f1a5a6f..92945b3f 100644 --- a/src/components/common/PatronButton.tsx +++ b/src/components/common/PatronButton.tsx @@ -1,9 +1,10 @@ +import { useTranslation } from "next-i18next" +import { useState } from "react" + +import { PatronModal } from "~/components/common/PatronModal" import { Button } from "~/components/ui/Button" import { Profile } from "~/lib/types" -import { useTranslation } from "next-i18next" import { cn } from "~/lib/utils" -import { useState } from "react" -import { PatronModal } from "~/components/common/PatronModal" export const PatronButton: React.FC<{ site: Profile | undefined | null diff --git a/src/components/common/PatronModal.tsx b/src/components/common/PatronModal.tsx index 0df22263..54f03cb9 100644 --- a/src/components/common/PatronModal.tsx +++ b/src/components/common/PatronModal.tsx @@ -1,20 +1,23 @@ -import { Button } from "~/components/ui/Button" -import { Note, Profile } from "~/lib/types" -import { useTranslation } from "next-i18next" -import { Modal } from "~/components/ui/Modal" -import { useEffect, useRef, useState } from "react" -import { BoxRadio } from "~/components/ui/BoxRadio" -import { Tabs } from "../ui/Tabs" -import { useTipCharacter, useGetTips } from "~/queries/site" -import { useAccountState, useConnectModal } from "@crossbell/connect-kit" -import { toast } from "react-hot-toast" import confetti from "canvas-confetti" +import { useTranslation } from "next-i18next" +import { useEffect, useRef, useState } from "react" +import { toast } from "react-hot-toast" + +import { useAccountState, useConnectModal } from "@crossbell/connect-kit" + import { Avatar } from "~/components/ui/Avatar" -import { CharacterFloatCard } from "./CharacterFloatCard" -import { UniLink } from "../ui/UniLink" -import { getSiteLink } from "~/lib/helpers" +import { BoxRadio } from "~/components/ui/BoxRadio" +import { Button } from "~/components/ui/Button" +import { Modal } from "~/components/ui/Modal" import { CSB_SCAN, MIRA_LINK } from "~/lib/env" +import { getSiteLink } from "~/lib/helpers" +import { Note, Profile } from "~/lib/types" import { parsePageId } from "~/models/page.model" +import { useGetTips, useTipCharacter } from "~/queries/site" + +import { Tabs } from "../ui/Tabs" +import { UniLink } from "../ui/UniLink" +import { CharacterFloatCard } from "./CharacterFloatCard" export const PatronModal: React.FC<{ site: Profile | undefined | null diff --git a/src/components/common/Reactions.tsx b/src/components/common/Reactions.tsx index a19ed635..1dd8a705 100644 --- a/src/components/common/Reactions.tsx +++ b/src/components/common/Reactions.tsx @@ -1,29 +1,32 @@ -import { - useMintPage, - useGetLikes, - useCheckLike, - useGetMints, - useCheckMint, - useToggleLikePage, - useGetLikeCounts, -} from "~/queries/page" -import { useGetTips } from "~/queries/site" -import { useState, useEffect, useRef } from "react" -import { Button } from "../ui/Button" -import { CSB_SCAN, CSB_XCHAR } from "~/lib/env" -import { UniLink } from "~/components/ui/UniLink" -import { Modal } from "~/components/ui/Modal" -import { Avatar } from "../ui/Avatar" -import { MintIcon } from "~/components/icons/MintIcon" -import { parsePageId } from "~/models/page.model" -import { CharacterList } from "~/components/common/CharacterList" -import { cn } from "~/lib/utils" -import { Tooltip } from "~/components/ui/Tooltip" import confetti from "canvas-confetti" import { Trans, useTranslation } from "next-i18next" -import { Note, Profile } from "~/lib/types" +import { useEffect, useRef, useState } from "react" + import { useAccountState } from "@crossbell/connect-kit" + +import { CharacterList } from "~/components/common/CharacterList" import { PatronModal } from "~/components/common/PatronModal" +import { MintIcon } from "~/components/icons/MintIcon" +import { Modal } from "~/components/ui/Modal" +import { Tooltip } from "~/components/ui/Tooltip" +import { UniLink } from "~/components/ui/UniLink" +import { CSB_SCAN, CSB_XCHAR } from "~/lib/env" +import { Note, Profile } from "~/lib/types" +import { cn } from "~/lib/utils" +import { parsePageId } from "~/models/page.model" +import { + useCheckLike, + useCheckMint, + useGetLikeCounts, + useGetLikes, + useGetMints, + useMintPage, + useToggleLikePage, +} from "~/queries/page" +import { useGetTips } from "~/queries/site" + +import { Avatar } from "../ui/Avatar" +import { Button } from "../ui/Button" export const Reactions: React.FC<{ className?: string diff --git a/src/components/common/SEOHead.tsx b/src/components/common/SEOHead.tsx index 07d25a97..efd7176d 100644 --- a/src/components/common/SEOHead.tsx +++ b/src/components/common/SEOHead.tsx @@ -1,4 +1,5 @@ import Head from "next/head" + import { SITE_URL } from "~/lib/env" export const SEOHead: React.FC<{ diff --git a/src/components/common/SearchInput.tsx b/src/components/common/SearchInput.tsx index a2a2b8c5..006cf772 100644 --- a/src/components/common/SearchInput.tsx +++ b/src/components/common/SearchInput.tsx @@ -1,6 +1,7 @@ -import { useForm } from "react-hook-form" -import { useRouter } from "next/router" import { useTranslation } from "next-i18next" +import { useRouter } from "next/router" +import { useForm } from "react-hook-form" + import { cn } from "~/lib/utils" export const SearchInput: React.FC<{ diff --git a/src/components/common/Titles.tsx b/src/components/common/Titles.tsx index 1893444c..89651fe1 100644 --- a/src/components/common/Titles.tsx +++ b/src/components/common/Titles.tsx @@ -1,4 +1,5 @@ import { cn } from "~/lib/utils" + import data from "../../../data/titles.json" import { Tooltip } from "../ui/Tooltip" import { UniLink } from "../ui/UniLink" diff --git a/src/components/dashboard/DashboardLayout.server.tsx b/src/components/dashboard/DashboardLayout.server.tsx index 5b63b54d..3632e720 100644 --- a/src/components/dashboard/DashboardLayout.server.tsx +++ b/src/components/dashboard/DashboardLayout.server.tsx @@ -1,4 +1,5 @@ import { serverSideTranslations } from "next-i18next/serverSideTranslations" + import { languageDetector } from "~/lib/language-detector" export const getServerSideProps = async (ctx: any) => { diff --git a/src/components/dashboard/DashboardLayout.tsx b/src/components/dashboard/DashboardLayout.tsx index fee24ae4..11dd815a 100644 --- a/src/components/dashboard/DashboardLayout.tsx +++ b/src/components/dashboard/DashboardLayout.tsx @@ -1,29 +1,30 @@ -import { cn } from "~/lib/utils" import { useRouter } from "next/router" import React, { useEffect } from "react" +import { useTranslation } from "react-i18next" -import { DISCORD_LINK, APP_NAME } from "~/lib/env" +import { useAccountState, useConnectModal } from "@crossbell/connect-kit" +import { + useNotifications, + useShowNotificationModal, +} from "@crossbell/notification" + +import { ConnectButton } from "~/components/common/ConnectButton" +import { Logo } from "~/components/common/Logo" +import { Avatar } from "~/components/ui/Avatar" +import { useIsMobileLayout } from "~/hooks/useMobileLayout" +import { useUserRole } from "~/hooks/useUserRole" +import { APP_NAME, DISCORD_LINK } from "~/lib/env" import { getSiteLink } from "~/lib/helpers" +import { toGateway } from "~/lib/ipfs-parser" +import { getStorage } from "~/lib/storage" +import { cn } from "~/lib/utils" +import { useGetPagesBySite } from "~/queries/page" +import { useAccountSites, useGetSite } from "~/queries/site" + import { SEOHead } from "../common/SEOHead" import { UniLink } from "../ui/UniLink" import { DashboardSidebar } from "./DashboardSidebar" -import { useAccountSites } from "~/queries/site" -import { ConnectButton } from "~/components/common/ConnectButton" -import { useGetSite } from "~/queries/site" -import { toGateway } from "~/lib/ipfs-parser" -import { Avatar } from "~/components/ui/Avatar" -import { - useShowNotificationModal, - useNotifications, -} from "@crossbell/notification" -import { useUserRole } from "~/hooks/useUserRole" -import { useAccountState, useConnectModal } from "@crossbell/connect-kit" -import { useTranslation } from "react-i18next" -import { Logo } from "~/components/common/Logo" -import { getStorage } from "~/lib/storage" -import { useGetPagesBySite } from "~/queries/page" import { DashboardTopbar } from "./DashboardTopbar" -import { useIsMobileLayout } from "~/hooks/useMobileLayout" export function DashboardLayout({ children, diff --git a/src/components/dashboard/DashboardMain.tsx b/src/components/dashboard/DashboardMain.tsx index 32a0a0fd..5b72c644 100644 --- a/src/components/dashboard/DashboardMain.tsx +++ b/src/components/dashboard/DashboardMain.tsx @@ -1,6 +1,7 @@ -import { cn } from "~/lib/utils" import { useTranslation } from "next-i18next" + import { useIsMobileLayout } from "~/hooks/useMobileLayout" +import { cn } from "~/lib/utils" export const DashboardMain: React.FC<{ children: React.ReactNode diff --git a/src/components/dashboard/DashboardSidebar.tsx b/src/components/dashboard/DashboardSidebar.tsx index 014c2e02..ec89a975 100644 --- a/src/components/dashboard/DashboardSidebar.tsx +++ b/src/components/dashboard/DashboardSidebar.tsx @@ -1,5 +1,6 @@ -import { useState, useEffect, useMemo } from "react" -import { setStorage, getStorage } from "~/lib/storage" +import { useEffect, useState } from "react" + +import { getStorage, setStorage } from "~/lib/storage" export const DashboardSidebar: React.FC<{ children: (isOpen: boolean) => React.ReactNode diff --git a/src/components/dashboard/DashboardTopbar.tsx b/src/components/dashboard/DashboardTopbar.tsx index 1fecffe4..f25425b1 100644 --- a/src/components/dashboard/DashboardTopbar.tsx +++ b/src/components/dashboard/DashboardTopbar.tsx @@ -1,9 +1,9 @@ -import { useState, useEffect, useMemo, Fragment } from "react" -import { setStorage, getStorage } from "~/lib/storage" +import { Fragment, useState } from "react" -import { Bars3Icon, ChevronDownIcon } from "@heroicons/react/24/outline" -import { Logo } from "../common/Logo" import { Popover, Transition } from "@headlessui/react" +import { Bars3Icon } from "@heroicons/react/24/outline" + +import { Logo } from "../common/Logo" export const DashboardTopbar: React.FC<{ children: (open: boolean) => React.ReactNode diff --git a/src/components/dashboard/DeleteConfirmationModal.tsx b/src/components/dashboard/DeleteConfirmationModal.tsx index db40b2d2..c7dbddf1 100644 --- a/src/components/dashboard/DeleteConfirmationModal.tsx +++ b/src/components/dashboard/DeleteConfirmationModal.tsx @@ -1,6 +1,7 @@ import { useTranslation } from "react-i18next" -import { Modal } from "../ui/Modal" + import { Button } from "../ui/Button" +import { Modal } from "../ui/Modal" export const DeleteConfirmationModal: React.FC<{ open: boolean diff --git a/src/components/dashboard/ImportPreview.tsx b/src/components/dashboard/ImportPreview.tsx index 44b496de..6f3934eb 100644 --- a/src/components/dashboard/ImportPreview.tsx +++ b/src/components/dashboard/ImportPreview.tsx @@ -1,9 +1,10 @@ import type { NoteMetadata } from "crossbell.js" -import { useState } from "react" -import { useDate } from "~/hooks/useDate" -import { PageContent } from "../common/PageContent" - import { useTranslation } from "next-i18next" +import { useState } from "react" + +import { useDate } from "~/hooks/useDate" + +import { PageContent } from "../common/PageContent" export const ImportPreview: React.FC<{ note: NoteMetadata diff --git a/src/components/dashboard/OptionsButton.tsx b/src/components/dashboard/OptionsButton.tsx index 603c0298..4a6b1b58 100644 --- a/src/components/dashboard/OptionsButton.tsx +++ b/src/components/dashboard/OptionsButton.tsx @@ -1,8 +1,11 @@ -import { Menu, Popover, Transition } from "@headlessui/react" import { Dispatch, Fragment, SetStateAction, useState } from "react" import { useTranslation } from "react-i18next" + +import { Menu, Popover, Transition } from "@headlessui/react" + import { PageVisibilityEnum } from "~/lib/types" import { cn } from "~/lib/utils" + import { DeleteConfirmationModal } from "./DeleteConfirmationModal" export const OptionsButton: React.FC<{ diff --git a/src/components/dashboard/PagesManager.tsx b/src/components/dashboard/PagesManager.tsx index 3dd6ab76..1f7b8f28 100644 --- a/src/components/dashboard/PagesManager.tsx +++ b/src/components/dashboard/PagesManager.tsx @@ -1,23 +1,26 @@ -import { Fragment, useMemo } from "react" -import { getPageVisibility } from "~/lib/page-helpers" -import { useDate } from "~/hooks/useDate" -import { TabItem, Tabs } from "../ui/Tabs" -import { Menu } from "@headlessui/react" -import { cn } from "~/lib/utils" -import { PageVisibilityEnum } from "~/lib/types" -import { DashboardMain } from "./DashboardMain" -import { useRouter } from "next/router" -import Link from "next/link" -import { EmptyState } from "../ui/EmptyState" -import { useGetPagesBySite } from "~/queries/page" -import { setStorage } from "~/lib/storage" -import { useQueryClient } from "@tanstack/react-query" -import { Button } from "../ui/Button" -import { UniLink } from "../ui/UniLink" import { nanoid } from "nanoid" -import { Tooltip } from "../ui/Tooltip" import { Trans, useTranslation } from "next-i18next" +import Link from "next/link" +import { useRouter } from "next/router" +import { Fragment, useMemo } from "react" + +import { Menu } from "@headlessui/react" +import { useQueryClient } from "@tanstack/react-query" + +import { useDate } from "~/hooks/useDate" +import { getPageVisibility } from "~/lib/page-helpers" import { readFiles } from "~/lib/read-files" +import { setStorage } from "~/lib/storage" +import { PageVisibilityEnum } from "~/lib/types" +import { cn } from "~/lib/utils" +import { useGetPagesBySite } from "~/queries/page" + +import { Button } from "../ui/Button" +import { EmptyState } from "../ui/EmptyState" +import { TabItem, Tabs } from "../ui/Tabs" +import { Tooltip } from "../ui/Tooltip" +import { UniLink } from "../ui/UniLink" +import { DashboardMain } from "./DashboardMain" import { PagesManagerMenu } from "./PagesManagerMenu" export const PagesManager: React.FC<{ diff --git a/src/components/dashboard/PagesManagerMenu.tsx b/src/components/dashboard/PagesManagerMenu.tsx index 2f52064b..d982f479 100644 --- a/src/components/dashboard/PagesManagerMenu.tsx +++ b/src/components/dashboard/PagesManagerMenu.tsx @@ -1,15 +1,17 @@ -import { FC, useEffect, useState } from "react" -import { Menu } from "@headlessui/react" +import { useTranslation } from "next-i18next" import { useRouter } from "next/router" +import { FC, useEffect, useState } from "react" import toast from "react-hot-toast" import type { Note } from "unidata.js" -import { useDeletePage, useCreateOrUpdatePage } from "~/queries/page" -import { delStorage, getStorage, setStorage } from "~/lib/storage" + +import { Menu } from "@headlessui/react" import { useQueryClient } from "@tanstack/react-query" -import { APP_NAME } from "~/lib/env" -import { useTranslation } from "next-i18next" + import { useGetState } from "~/hooks/useGetState" +import { APP_NAME } from "~/lib/env" import { getNoteSlugFromNote, getSiteLink } from "~/lib/helpers" +import { delStorage, getStorage, setStorage } from "~/lib/storage" +import { useCreateOrUpdatePage, useDeletePage } from "~/queries/page" import { useGetSite } from "~/queries/site" const usePageEditLink = (page: { id: string }, isPost: boolean) => { diff --git a/src/components/dashboard/PublishButton.tsx b/src/components/dashboard/PublishButton.tsx index e5f2bbd2..b2045b73 100644 --- a/src/components/dashboard/PublishButton.tsx +++ b/src/components/dashboard/PublishButton.tsx @@ -1,8 +1,8 @@ +import { useTranslation } from "next-i18next" import { useEffect, useRef, useState } from "react" import useOnClickOutside from "use-onclickoutside" import { Button, ButtonGroup } from "../ui/Button" -import { useTranslation } from "next-i18next" export const PublishButton: React.FC<{ save: (published: boolean) => void diff --git a/src/components/dashboard/SettingsLayout.tsx b/src/components/dashboard/SettingsLayout.tsx index 81d8bdb7..3a3f0336 100644 --- a/src/components/dashboard/SettingsLayout.tsx +++ b/src/components/dashboard/SettingsLayout.tsx @@ -1,9 +1,9 @@ +import { useTranslation } from "next-i18next" import { useRouter } from "next/router" import React from "react" import { type TabItem, Tabs } from "../ui/Tabs" import { DashboardMain } from "./DashboardMain" -import { useTranslation } from "next-i18next" export const SettingsLayout: React.FC<{ title: string diff --git a/src/components/icons/BlockchainIcon.tsx b/src/components/icons/BlockchainIcon.tsx index 50f92bf7..8522e46e 100644 --- a/src/components/icons/BlockchainIcon.tsx +++ b/src/components/icons/BlockchainIcon.tsx @@ -1,4 +1,5 @@ import React from "react" + import { cn } from "~/lib/utils" export const BlockchainIcon = ({ className }: { className?: string }) => { diff --git a/src/components/main/MainFeed.tsx b/src/components/main/MainFeed.tsx index 9e6d0ed8..648aadc8 100644 --- a/src/components/main/MainFeed.tsx +++ b/src/components/main/MainFeed.tsx @@ -1,23 +1,26 @@ -import Link from "next/link" -import { useDate } from "~/hooks/useDate" -import { EmptyState } from "../ui/EmptyState" -import { useRouter } from "next/router" -import { Image } from "~/components/ui/Image" import { useTranslation } from "next-i18next" -import { useGetFeed } from "~/queries/home" -import type { FeedType, SearchType } from "~/models/home.model" -import { CharacterFloatCard } from "~/components/common/CharacterFloatCard" -import { useAccountState } from "@crossbell/connect-kit" -import InfiniteScroll from "react-infinite-scroller" -import { ExpandedNote } from "~/lib/types" +import Link from "next/link" +import { useRouter } from "next/router" import { useEffect, useState } from "react" -import { Switch } from "@headlessui/react" -import { setStorage, getStorage } from "~/lib/storage" -import { Tooltip } from "~/components/ui/Tooltip" -import { Titles } from "~/components/common/Titles" -import { Tabs } from "~/components/ui/Tabs" +import InfiniteScroll from "react-infinite-scroller" import reactStringReplace from "react-string-replace" +import { useAccountState } from "@crossbell/connect-kit" +import { Switch } from "@headlessui/react" + +import { CharacterFloatCard } from "~/components/common/CharacterFloatCard" +import { Titles } from "~/components/common/Titles" +import { Image } from "~/components/ui/Image" +import { Tabs } from "~/components/ui/Tabs" +import { Tooltip } from "~/components/ui/Tooltip" +import { useDate } from "~/hooks/useDate" +import { getStorage, setStorage } from "~/lib/storage" +import { ExpandedNote } from "~/lib/types" +import type { FeedType, SearchType } from "~/models/home.model" +import { useGetFeed } from "~/queries/home" + +import { EmptyState } from "../ui/EmptyState" + const Post = ({ post, filtering, diff --git a/src/components/main/MainLayout.tsx b/src/components/main/MainLayout.tsx index 411e695f..e6617af8 100644 --- a/src/components/main/MainLayout.tsx +++ b/src/components/main/MainLayout.tsx @@ -1,20 +1,22 @@ +import { useTranslation } from "next-i18next" +import { useRouter } from "next/router" + +import { Logo } from "~/components/common/Logo" import { APP_DESCRIPTION, APP_NAME, - GITHUB_LINK, DISCORD_LINK, + GITHUB_LINK, TWITTER_LINK, } from "~/lib/env" -import { SEOHead } from "../common/SEOHead" -import { UniLink } from "../ui/UniLink" -import { ConnectButton } from "../common/ConnectButton" import { getSiteLink } from "~/lib/helpers" -import { useTranslation } from "next-i18next" -import { Logo } from "~/components/common/Logo" -import { useRouter } from "next/router" import { cn } from "~/lib/utils" -import { Image } from "../ui/Image" + +import { ConnectButton } from "../common/ConnectButton" import { DarkModeSwitch } from "../common/DarkModeSwitch" +import { SEOHead } from "../common/SEOHead" +import { Image } from "../ui/Image" +import { UniLink } from "../ui/UniLink" const tabs = [ { diff --git a/src/components/main/MainSidebar.tsx b/src/components/main/MainSidebar.tsx index 0ab9b026..f2216643 100644 --- a/src/components/main/MainSidebar.tsx +++ b/src/components/main/MainSidebar.tsx @@ -1,17 +1,23 @@ +import { useTranslation } from "next-i18next" import { useState } from "react" -import { UniLink } from "~/components/ui/UniLink" -import { Button } from "~/components/ui/Button" + import { useConnectedAction } from "@crossbell/connect-kit" import { useRefCallback } from "@crossbell/util-hooks" -import { getSiteLink } from "~/lib/helpers" -import { Image } from "~/components/ui/Image" -import { useGetSites } from "~/queries/site" -import showcase from "../../../data/showcase.json" + import { CharacterFloatCard } from "~/components/common/CharacterFloatCard" -import { useAccountSites, useSubscribeToSites } from "~/queries/site" -import { useTranslation } from "next-i18next" -import topics from "../../../data/topics.json" import { SearchInput } from "~/components/common/SearchInput" +import { Button } from "~/components/ui/Button" +import { Image } from "~/components/ui/Image" +import { UniLink } from "~/components/ui/UniLink" +import { getSiteLink } from "~/lib/helpers" +import { + useAccountSites, + useGetSites, + useSubscribeToSites, +} from "~/queries/site" + +import showcase from "../../../data/showcase.json" +import topics from "../../../data/topics.json" export function MainSidebar({ hideSearch }: { hideSearch?: boolean }) { const showcaseSites = useGetSites(showcase) diff --git a/src/components/site/Platform.tsx b/src/components/site/Platform.tsx index 1cfed372..16138d01 100644 --- a/src/components/site/Platform.tsx +++ b/src/components/site/Platform.tsx @@ -1,6 +1,6 @@ import { Image } from "~/components/ui/Image" -import { UniLink } from "~/components/ui/UniLink" import { Tooltip } from "~/components/ui/Tooltip" +import { UniLink } from "~/components/ui/UniLink" import { cn } from "~/lib/utils" const syncMap: { diff --git a/src/components/site/PostFooter.tsx b/src/components/site/PostFooter.tsx index bfa4d20d..3bce9653 100644 --- a/src/components/site/PostFooter.tsx +++ b/src/components/site/PostFooter.tsx @@ -1,6 +1,6 @@ -import { Note, Profile } from "~/lib/types" import { Comment } from "~/components/common/Comment" import { Reactions } from "~/components/common/Reactions" +import { Note, Profile } from "~/lib/types" export const PostFooter: React.FC<{ page?: Note | null diff --git a/src/components/site/PostMeta.tsx b/src/components/site/PostMeta.tsx index 1b2d7760..0bc1a464 100644 --- a/src/components/site/PostMeta.tsx +++ b/src/components/site/PostMeta.tsx @@ -1,16 +1,17 @@ -import { BlockchainIcon } from "~/components/icons/BlockchainIcon" -import { UniLink } from "~/components/ui/UniLink" -import { Note, Profile } from "~/lib/types" -import { CSB_SCAN, SITE_URL } from "~/lib/env" -import { useEffect, useState } from "react" -import { CharacterFloatCard } from "~/components/common/CharacterFloatCard" -import { getSiteLink } from "~/lib/helpers" -import { Avatar } from "~/components/ui/Avatar" -import { useUserRole } from "~/hooks/useUserRole" import { useTranslation } from "next-i18next" +import { useEffect, useState } from "react" + +import { CharacterFloatCard } from "~/components/common/CharacterFloatCard" +import { BlockchainIcon } from "~/components/icons/BlockchainIcon" +import { Avatar } from "~/components/ui/Avatar" +import { UniLink } from "~/components/ui/UniLink" import { useDate } from "~/hooks/useDate" -import { useGetSummary } from "~/queries/page" +import { useUserRole } from "~/hooks/useUserRole" +import { CSB_SCAN, SITE_URL } from "~/lib/env" +import { getSiteLink } from "~/lib/helpers" import { toCid } from "~/lib/ipfs-parser" +import { Note, Profile } from "~/lib/types" +import { useGetSummary } from "~/queries/page" export const PostMeta: React.FC<{ page: Note diff --git a/src/components/site/PostToc.tsx b/src/components/site/PostToc.tsx index 94678034..bb2e124e 100644 --- a/src/components/site/PostToc.tsx +++ b/src/components/site/PostToc.tsx @@ -1,5 +1,5 @@ -import React, { useEffect, useState, useRef } from "react" import type { Result as TocResult } from "mdast-util-toc" +import React, { useEffect, useRef, useState } from "react" import { Link } from "react-scroll" function getIds(items: TocResult["map"]) { diff --git a/src/components/site/SiteArchives.tsx b/src/components/site/SiteArchives.tsx index c0db4207..34531852 100644 --- a/src/components/site/SiteArchives.tsx +++ b/src/components/site/SiteArchives.tsx @@ -1,11 +1,13 @@ +import { useTranslation } from "next-i18next" import Link from "next/link" import { useMemo } from "react" -import { EmptyState } from "../ui/EmptyState" -import { Notes, Note } from "~/lib/types" -import { UniLink } from "../ui/UniLink" + import { Button } from "~/components/ui/Button" import { useDate } from "~/hooks/useDate" -import { useTranslation } from "next-i18next" +import { Note, Notes } from "~/lib/types" + +import { EmptyState } from "../ui/EmptyState" +import { UniLink } from "../ui/UniLink" export const SiteArchives: React.FC<{ title?: string diff --git a/src/components/site/SiteFooter.tsx b/src/components/site/SiteFooter.tsx index 24fad672..99035841 100644 --- a/src/components/site/SiteFooter.tsx +++ b/src/components/site/SiteFooter.tsx @@ -1,12 +1,14 @@ -import { SITE_URL } from "~/lib/env" -import { UniLink } from "../ui/UniLink" -import { Profile, Note } from "~/lib/types" -import Script from "next/script" -import { Platform } from "~/components/site/Platform" import { Trans } from "next-i18next" -import { Logo } from "~/components/common/Logo" +import Script from "next/script" import { useEffect, useState } from "react" + +import { Logo } from "~/components/common/Logo" +import { Platform } from "~/components/site/Platform" +import { SITE_URL } from "~/lib/env" +import { Note, Profile } from "~/lib/types" + import { DarkModeSwitch } from "../common/DarkModeSwitch" +import { UniLink } from "../ui/UniLink" export const SiteFooter: React.FC<{ site?: Profile | null diff --git a/src/components/site/SiteHeader.tsx b/src/components/site/SiteHeader.tsx index f9260c17..1c893499 100644 --- a/src/components/site/SiteHeader.tsx +++ b/src/components/site/SiteHeader.tsx @@ -1,28 +1,31 @@ -import { cn } from "~/lib/utils" +import chroma from "chroma-js" +import { FastAverageColor } from "fast-average-color" +import { useTranslation } from "next-i18next" import { useRouter } from "next/router" -import { CSB_SCAN, CSB_IO, CSB_XCHAR } from "~/lib/env" +import { MutableRefObject, RefObject, useEffect, useRef, useState } from "react" + +import { XCharLogo, XFeedLogo } from "@crossbell/ui" +import { RssIcon } from "@heroicons/react/24/solid" + +import { FollowingButton } from "~/components/common/FollowingButton" +import { FollowingCount } from "~/components/common/FollowingCount" +import { PatronButton } from "~/components/common/PatronButton" +import { SearchInput } from "~/components/common/SearchInput" +import { BlockchainIcon } from "~/components/icons/BlockchainIcon" +import { Image } from "~/components/ui/Image" +import { Menu } from "~/components/ui/Menu" +import { Modal } from "~/components/ui/Modal" +import { Tooltip } from "~/components/ui/Tooltip" +import { useIsDark } from "~/hooks/useDarkMode" +import { CSB_IO, CSB_SCAN, CSB_XCHAR } from "~/lib/env" +import { Profile } from "~/lib/types" import { getUserContentsUrl } from "~/lib/user-contents" +import { cn } from "~/lib/utils" + +import { ConnectButton } from "../common/ConnectButton" import { Avatar } from "../ui/Avatar" import { Button } from "../ui/Button" import { UniLink } from "../ui/UniLink" -import { Profile } from "~/lib/types" -import { ConnectButton } from "../common/ConnectButton" -import { BlockchainIcon } from "~/components/icons/BlockchainIcon" -import { Image } from "~/components/ui/Image" -import { FollowingButton } from "~/components/common/FollowingButton" -import { FollowingCount } from "~/components/common/FollowingCount" -import { RssIcon } from "@heroicons/react/24/solid" -import { XCharLogo, XFeedLogo } from "@crossbell/ui" -import { FastAverageColor } from "fast-average-color" -import { useState, useRef, useEffect, RefObject, MutableRefObject } from "react" -import chroma from "chroma-js" -import { Menu } from "~/components/ui/Menu" -import { useTranslation } from "next-i18next" -import { Tooltip } from "~/components/ui/Tooltip" -import { PatronButton } from "~/components/common/PatronButton" -import { Modal } from "~/components/ui/Modal" -import { SearchInput } from "~/components/common/SearchInput" -import { useIsDark } from "~/hooks/useDarkMode" type HeaderLinkType = { icon?: React.ReactNode diff --git a/src/components/site/SiteHome.tsx b/src/components/site/SiteHome.tsx index 501afd83..901e0bfc 100644 --- a/src/components/site/SiteHome.tsx +++ b/src/components/site/SiteHome.tsx @@ -1,12 +1,14 @@ +import { useTranslation } from "next-i18next" import Link from "next/link" +import { useRouter } from "next/router" +import { useEffect, useState } from "react" + +import { Button } from "~/components/ui/Button" +import { Image } from "~/components/ui/Image" import { useDate } from "~/hooks/useDate" import { Notes } from "~/lib/types" + import { EmptyState } from "../ui/EmptyState" -import { useRouter } from "next/router" -import { Image } from "~/components/ui/Image" -import { Button } from "~/components/ui/Button" -import { useTranslation } from "next-i18next" -import { useEffect, useState } from "react" export const SiteHome: React.FC<{ postPages?: Notes[] diff --git a/src/components/site/SiteLayout.server.tsx b/src/components/site/SiteLayout.server.tsx index 7ce40bbf..dbd5336a 100644 --- a/src/components/site/SiteLayout.server.tsx +++ b/src/components/site/SiteLayout.server.tsx @@ -1,15 +1,16 @@ +import { serverSideTranslations } from "next-i18next/serverSideTranslations" + +import { QueryClient, dehydrate } from "@tanstack/react-query" + +import { languageDetector } from "~/lib/language-detector" +import { notFound } from "~/lib/server-side-props" +import { PageVisibilityEnum } from "~/lib/types" +import { fetchGetPage, prefetchGetPagesBySite } from "~/queries/page.server" import { prefetchGetSite, prefetchGetSiteSubscriptions, prefetchGetSiteToSubscriptions, } from "~/queries/site.server" -import { prefetchGetPagesBySite } from "~/queries/page.server" -import { PageVisibilityEnum } from "~/lib/types" -import { dehydrate, QueryClient } from "@tanstack/react-query" -import { fetchGetPage } from "~/queries/page.server" -import { notFound } from "~/lib/server-side-props" -import { serverSideTranslations } from "next-i18next/serverSideTranslations" -import { languageDetector } from "~/lib/language-detector" export const getServerSideProps = async ( ctx: any, diff --git a/src/components/site/SiteLayout.tsx b/src/components/site/SiteLayout.tsx index 4a59403a..85d831e4 100644 --- a/src/components/site/SiteLayout.tsx +++ b/src/components/site/SiteLayout.tsx @@ -1,6 +1,8 @@ -import { useAccountState } from "@crossbell/connect-kit" import { useRouter } from "next/router" import React, { useEffect } from "react" + +import { useAccountState } from "@crossbell/connect-kit" + import { BlockchainInfo } from "~/components/common/BlockchainInfo" import { useUserRole } from "~/hooks/useUserRole" import { IS_PROD } from "~/lib/constants" @@ -10,6 +12,7 @@ import { getUserContentsUrl } from "~/lib/user-contents" import { cn } from "~/lib/utils" import { useCheckLike, useCheckMint, useGetPage } from "~/queries/page" import { useGetSite, useGetSubscription } from "~/queries/site" + import { SEOHead } from "../common/SEOHead" import { SiteFooter } from "./SiteFooter" import { SiteHeader } from "./SiteHeader" diff --git a/src/components/site/SitePage.tsx b/src/components/site/SitePage.tsx index abdcb1ae..8d8d8e99 100644 --- a/src/components/site/SitePage.tsx +++ b/src/components/site/SitePage.tsx @@ -1,10 +1,12 @@ -import { PageContent } from "../common/PageContent" -import { PostMeta } from "./PostMeta" -import { PostFooter } from "./PostFooter" -import { Note, Profile } from "~/lib/types" -import Head from "next/head" -import { getSiteLink } from "~/lib/helpers" import { useTranslation } from "next-i18next" +import Head from "next/head" + +import { getSiteLink } from "~/lib/helpers" +import { Note, Profile } from "~/lib/types" + +import { PageContent } from "../common/PageContent" +import { PostFooter } from "./PostFooter" +import { PostMeta } from "./PostMeta" export const SitePage: React.FC<{ page?: Note | null diff --git a/src/components/site/SiteSearch.tsx b/src/components/site/SiteSearch.tsx index 95743b05..8a973c46 100644 --- a/src/components/site/SiteSearch.tsx +++ b/src/components/site/SiteSearch.tsx @@ -1,14 +1,16 @@ -import Link from "next/link" -import { useDate } from "~/hooks/useDate" -import { ExpandedNote, Notes } from "~/lib/types" -import { EmptyState } from "../ui/EmptyState" -import { useRouter } from "next/router" -import { Image } from "~/components/ui/Image" -import { Button } from "~/components/ui/Button" import { useTranslation } from "next-i18next" +import Link from "next/link" +import { useRouter } from "next/router" import { useEffect, useState } from "react" import reactStringReplace from "react-string-replace" +import { Button } from "~/components/ui/Button" +import { Image } from "~/components/ui/Image" +import { useDate } from "~/hooks/useDate" +import { ExpandedNote } from "~/lib/types" + +import { EmptyState } from "../ui/EmptyState" + export const SiteSearch: React.FC<{ postPages?: { list: ExpandedNote[] diff --git a/src/components/ui/APlayer.tsx b/src/components/ui/APlayer.tsx index 5795d21a..496059aa 100644 --- a/src/components/ui/APlayer.tsx +++ b/src/components/ui/APlayer.tsx @@ -1,4 +1,5 @@ import { APlayer as AplayerReact } from "aplayer-react" + import { toGateway } from "~/lib/ipfs-parser" export const APlayer: React.FC< diff --git a/src/components/ui/Avatar.tsx b/src/components/ui/Avatar.tsx index 7e22c286..4059f606 100644 --- a/src/components/ui/Avatar.tsx +++ b/src/components/ui/Avatar.tsx @@ -1,7 +1,8 @@ -import { cn } from "~/lib/utils" import React, { useMemo } from "react" -import { toGateway } from "~/lib/ipfs-parser" + import { Image } from "~/components/ui/Image" +import { toGateway } from "~/lib/ipfs-parser" +import { cn } from "~/lib/utils" export const Avatar: React.FC< { diff --git a/src/components/ui/Badge.tsx b/src/components/ui/Badge.tsx index 03c01884..606365b7 100644 --- a/src/components/ui/Badge.tsx +++ b/src/components/ui/Badge.tsx @@ -1,6 +1,7 @@ -import { cn } from "~/lib/utils" import React from "react" +import { cn } from "~/lib/utils" + export const Badge: React.FC<{ children: React.ReactNode className?: string diff --git a/src/components/ui/BoxRadio.tsx b/src/components/ui/BoxRadio.tsx index c808ce2c..c86fe09c 100644 --- a/src/components/ui/BoxRadio.tsx +++ b/src/components/ui/BoxRadio.tsx @@ -1,16 +1,16 @@ -import { cn } from "~/lib/utils" +import { nanoid } from "nanoid" +import { useTranslation } from "next-i18next" import React, { ChangeEvent, - FocusEvent, Dispatch, + FocusEvent, SetStateAction, useMemo, useState, } from "react" -import { UniLink } from "./UniLink" -import { useTranslation } from "next-i18next" -import { nanoid } from "nanoid" + import { Input } from "~/components/ui/Input" +import { cn } from "~/lib/utils" export type RadioItem = { text: string diff --git a/src/components/ui/Button.tsx b/src/components/ui/Button.tsx index fc593477..0420f3d6 100644 --- a/src/components/ui/Button.tsx +++ b/src/components/ui/Button.tsx @@ -1,4 +1,5 @@ import React, { memo } from "react" + import { cn } from "~/lib/utils" export const ButtonGroup: React.FC<{ children: React.ReactNode }> = ({ diff --git a/src/components/ui/CodeMirror.tsx b/src/components/ui/CodeMirror.tsx index 67c7a779..5c3c1e7b 100644 --- a/src/components/ui/CodeMirror.tsx +++ b/src/components/ui/CodeMirror.tsx @@ -1,9 +1,3 @@ -import type { EditorState } from "@codemirror/state" -import { Annotation } from "@codemirror/state" - -import { HighlightStyle } from "@codemirror/language" -import { EditorView, KeyBinding, ViewUpdate } from "@codemirror/view" -import { tags } from "@lezer/highlight" import { Suspense, forwardRef, @@ -13,6 +7,13 @@ import { useState, } from "react" import { useTranslation } from "react-i18next" + +import { HighlightStyle } from "@codemirror/language" +import type { EditorState } from "@codemirror/state" +import { Annotation } from "@codemirror/state" +import { EditorView, KeyBinding, ViewUpdate } from "@codemirror/view" +import { tags } from "@lezer/highlight" + import { monospaceFonts, useCodeMirrorAutoToggleTheme, diff --git a/src/components/ui/EditorToolbar.tsx b/src/components/ui/EditorToolbar.tsx index d4fb6daa..579a4058 100644 --- a/src/components/ui/EditorToolbar.tsx +++ b/src/components/ui/EditorToolbar.tsx @@ -1,11 +1,14 @@ -import { EditorView } from "@codemirror/view" -import { FC, memo, useCallback, useState } from "react" -import { ICommand } from "~/editor" -import { Tooltip } from "./Tooltip" import { useTranslation } from "next-i18next" -import { Popover } from "@headlessui/react" +import { FC, memo, useCallback, useState } from "react" import { usePopper } from "react-popper" +import { EditorView } from "@codemirror/view" +import { Popover } from "@headlessui/react" + +import { ICommand } from "~/editor" + +import { Tooltip } from "./Tooltip" + export interface EditorToolbarProps { view?: EditorView toolbars: ICommand[] diff --git a/src/components/ui/Image.tsx b/src/components/ui/Image.tsx index ce6d6d89..4ec7e3d1 100644 --- a/src/components/ui/Image.tsx +++ b/src/components/ui/Image.tsx @@ -1,8 +1,9 @@ +import { ImageProps, default as NextImage } from "next/image" import React, { useEffect } from "react" -import { default as NextImage, ImageProps } from "next/image" -import { toGateway, toIPFS } from "~/lib/ipfs-parser" -import { useIsMobileLayout } from "~/hooks/useMobileLayout" + import { useGetState } from "~/hooks/useGetState" +import { useIsMobileLayout } from "~/hooks/useMobileLayout" +import { toGateway, toIPFS } from "~/lib/ipfs-parser" type TImageProps = { className?: string diff --git a/src/components/ui/ImageUploader.tsx b/src/components/ui/ImageUploader.tsx index 680f8eb7..0ffcb70a 100644 --- a/src/components/ui/ImageUploader.tsx +++ b/src/components/ui/ImageUploader.tsx @@ -1,10 +1,11 @@ -import { cn } from "~/lib/utils" -import React, { ChangeEvent, forwardRef, useEffect } from "react" -import { useState } from "react" +import React, { ChangeEvent, forwardRef, useEffect, useState } from "react" + +import { XMarkIcon } from "@heroicons/react/20/solid" + +import { Image } from "~/components/ui/Image" import { useUploadFile } from "~/hooks/useUploadFile" import { toGateway } from "~/lib/ipfs-parser" -import { Image } from "~/components/ui/Image" -import { XMarkIcon } from "@heroicons/react/20/solid" +import { cn } from "~/lib/utils" const getBase64 = (img: File, callback: (url: string) => void) => { const reader = new FileReader() diff --git a/src/components/ui/Input.tsx b/src/components/ui/Input.tsx index 8f47f31c..2060c6b7 100644 --- a/src/components/ui/Input.tsx +++ b/src/components/ui/Input.tsx @@ -1,5 +1,7 @@ -import { cn } from "~/lib/utils" import { forwardRef } from "react" + +import { cn } from "~/lib/utils" + import { FieldLabel } from "./FieldLabel" type InputProps = { diff --git a/src/components/ui/Mention.tsx b/src/components/ui/Mention.tsx index 86fb4ac6..05dfca2e 100644 --- a/src/components/ui/Mention.tsx +++ b/src/components/ui/Mention.tsx @@ -1,9 +1,11 @@ import React from "react" -import { CharacterFloatCard } from "../common/CharacterFloatCard" -import { UniLink } from "./UniLink" + import { getSiteLink } from "~/lib/helpers" import { useGetSite } from "~/queries/site" +import { CharacterFloatCard } from "../common/CharacterFloatCard" +import { UniLink } from "./UniLink" + export const Mention: React.FC<{ id: string children?: any diff --git a/src/components/ui/Menu.tsx b/src/components/ui/Menu.tsx index e9ef1f70..ebdc00b2 100644 --- a/src/components/ui/Menu.tsx +++ b/src/components/ui/Menu.tsx @@ -1,16 +1,17 @@ import { useState } from "react" + import { - offset, - flip, - shift, + Placement, autoUpdate, + flip, + offset, + shift, + useClick, + useDismiss, useFloating, useInteractions, - useClick, useRole, - useDismiss, useTransitionStyles, - Placement, } from "@floating-ui/react" export const Menu: React.FC<{ diff --git a/src/components/ui/Mermaid.tsx b/src/components/ui/Mermaid.tsx index fe84b716..8c7a85b8 100644 --- a/src/components/ui/Mermaid.tsx +++ b/src/components/ui/Mermaid.tsx @@ -1,7 +1,8 @@ +import { nanoid } from "nanoid" import { FC, useEffect, useState } from "react" + import { useIsDark } from "~/hooks/useDarkMode" import { useIsUnmounted } from "~/hooks/useLifecycle" -import { nanoid } from "nanoid" export const Mermaid: FC<{ children: [string] diff --git a/src/components/ui/Modal.tsx b/src/components/ui/Modal.tsx index aac7f4cc..bb7a25b9 100644 --- a/src/components/ui/Modal.tsx +++ b/src/components/ui/Modal.tsx @@ -1,7 +1,9 @@ -import { Dialog } from "@headlessui/react" -import { cn } from "~/lib/utils" import React from "react" +import { Dialog } from "@headlessui/react" + +import { cn } from "~/lib/utils" + export const Modal: React.FC<{ open: boolean setOpen: (open: boolean) => void diff --git a/src/components/ui/Tabs.tsx b/src/components/ui/Tabs.tsx index c1ff0353..0771cec1 100644 --- a/src/components/ui/Tabs.tsx +++ b/src/components/ui/Tabs.tsx @@ -1,8 +1,10 @@ -import { cn } from "~/lib/utils" -import React from "react" -import { UniLink } from "./UniLink" import { useTranslation } from "next-i18next" +import React from "react" + import { Tooltip } from "~/components/ui/Tooltip" +import { cn } from "~/lib/utils" + +import { UniLink } from "./UniLink" export type TabItem = { text: string diff --git a/src/components/ui/Tooltip.tsx b/src/components/ui/Tooltip.tsx index f6f30def..a3523446 100644 --- a/src/components/ui/Tooltip.tsx +++ b/src/components/ui/Tooltip.tsx @@ -1,18 +1,20 @@ -import { cloneElement, useState } from "react" +import { useState } from "react" + import { Placement, - offset, - flip, - shift, autoUpdate, - useFloating, - useInteractions, - useHover, - useFocus, - useRole, + flip, + offset, + shift, useDismiss, + useFloating, + useFocus, + useHover, + useInteractions, + useRole, useTransitionStyles, } from "@floating-ui/react" + import { cn } from "~/lib/utils" interface Props { diff --git a/src/components/ui/UniMedia.tsx b/src/components/ui/UniMedia.tsx index b634b073..95fa8ace 100644 --- a/src/components/ui/UniMedia.tsx +++ b/src/components/ui/UniMedia.tsx @@ -1,6 +1,7 @@ -import React, { useState } from "react" -import { Image } from "~/components/ui/Image" import axios from "axios" +import React, { useState } from "react" + +import { Image } from "~/components/ui/Image" import { IPFS_GATEWAY } from "~/lib/env" export const UniMedia: React.FC<{ diff --git a/src/editor/Code.tsx b/src/editor/Code.tsx index b5e85caf..e7ec4a60 100644 --- a/src/editor/Code.tsx +++ b/src/editor/Code.tsx @@ -1,4 +1,3 @@ -import { EditorSelection } from "@codemirror/state" import { ICommand, wrapExecute } from "." export const Code: ICommand = { diff --git a/src/editor/Emoji.tsx b/src/editor/Emoji.tsx index 339785ee..24eafdd7 100644 --- a/src/editor/Emoji.tsx +++ b/src/editor/Emoji.tsx @@ -1,5 +1,6 @@ import { EmojiPicker } from "~/components/common/EmojiPicker" -import { ICommand, prependExecute, wrapExecute } from "." + +import { ICommand, wrapExecute } from "." export const Emoji: ICommand = { name: "emoji", diff --git a/src/editor/Help.tsx b/src/editor/Help.tsx index 5a93a6d9..b7a14ad6 100644 --- a/src/editor/Help.tsx +++ b/src/editor/Help.tsx @@ -1,4 +1,5 @@ import { getSiteLink } from "~/lib/helpers" + import { ICommand } from "." export const Help: ICommand = { diff --git a/src/editor/Image.tsx b/src/editor/Image.tsx index d5798a7a..fb356284 100644 --- a/src/editor/Image.tsx +++ b/src/editor/Image.tsx @@ -1,8 +1,9 @@ -import { EditorSelection } from "@codemirror/state" -import { ICommand, prependExecute, wrapExecute } from "." -import { UploadFile } from "~/lib/upload-file" import toast from "react-hot-toast" +import { UploadFile } from "~/lib/upload-file" + +import { ICommand, wrapExecute } from "." + export const Image: ICommand = { name: "upload-image", label: "Upload Image", diff --git a/src/editor/Link.tsx b/src/editor/Link.tsx index 2d5f7eb5..a69807e7 100644 --- a/src/editor/Link.tsx +++ b/src/editor/Link.tsx @@ -1,5 +1,4 @@ -import { EditorSelection } from "@codemirror/state" -import { ICommand, prependExecute, wrapExecute } from "." +import { ICommand, wrapExecute } from "." export const Link: ICommand = { name: "link", diff --git a/src/editor/ListOrdered.tsx b/src/editor/ListOrdered.tsx index 026bc802..6bba0714 100644 --- a/src/editor/ListOrdered.tsx +++ b/src/editor/ListOrdered.tsx @@ -1,4 +1,3 @@ -import { EditorSelection } from "@codemirror/state" import { ICommand, wrapExecute } from "." export const ListOrdered: ICommand = { diff --git a/src/editor/index.tsx b/src/editor/index.tsx index fb80b7ae..53d7e55a 100644 --- a/src/editor/index.tsx +++ b/src/editor/index.tsx @@ -1,21 +1,23 @@ +import { Dispatch, SetStateAction } from "react" + import { EditorSelection } from "@codemirror/state" import { EditorView } from "@codemirror/view" -import { Dispatch, SetStateAction } from "react" + import { Bold } from "./Bold" import { Code } from "./Code" import { CodeBlock } from "./CodeBlock" +import { Emoji } from "./Emoji" import { Heading } from "./Heading" +import { Help } from "./Help" import { Image } from "./Image" import { Italic } from "./Italic" import { Link } from "./Link" import { ListOrdered } from "./ListOrdered" import { ListUnordered } from "./ListUnordered" +import { Mention } from "./Mention" import { Quote } from "./Quote" import { Strikethrough } from "./Strikethrough" import { Underline } from "./Underline" -import { Mention } from "./Mention" -import { Emoji } from "./Emoji" -import { Help } from "./Help" export type ICommand

= { icon: string diff --git a/src/hooks/useCodeCopy.ts b/src/hooks/useCodeCopy.ts index ff9089ce..0941fe2c 100644 --- a/src/hooks/useCodeCopy.ts +++ b/src/hooks/useCodeCopy.ts @@ -1,4 +1,5 @@ import { useEffect } from "react" + import { clipboardCopy } from "~/lib/copy.client" export const useCodeCopy = () => { diff --git a/src/hooks/useCodemirrorTheme.ts b/src/hooks/useCodemirrorTheme.ts index 7027bcf8..da7ab439 100644 --- a/src/hooks/useCodemirrorTheme.ts +++ b/src/hooks/useCodemirrorTheme.ts @@ -1,15 +1,16 @@ -import type { Extension } from "@codemirror/state" -import { Compartment } from "@codemirror/state" -import { EditorView } from "@codemirror/view" import { useEffect, useRef } from "react" -export const monospaceFonts = `"OperatorMonoSSmLig Nerd Font","Cascadia Code PL","FantasqueSansMono Nerd Font","operator mono","Fira code Retina","Fira code","Consolas", Monaco, "Hannotate SC", monospace, -apple-system` - +import type { Extension } from "@codemirror/state" +import { Compartment } from "@codemirror/state" import { oneDark } from "@codemirror/theme-one-dark" +import { EditorView } from "@codemirror/view" import { githubLight } from "@ddietr/codemirror-themes/theme/github-light" + import { useIsUnmounted } from "./useLifecycle" import { useIsMobileLayout } from "./useMobileLayout" +export const monospaceFonts = `"OperatorMonoSSmLig Nerd Font","Cascadia Code PL","FantasqueSansMono Nerd Font","operator mono","Fira code Retina","Fira code","Consolas", Monaco, "Hannotate SC", monospace, -apple-system` + const extensionMap = { theme: new Compartment(), style: new Compartment(), diff --git a/src/hooks/useDarkMode.ts b/src/hooks/useDarkMode.ts index 6e26152d..c3f4b25e 100644 --- a/src/hooks/useDarkMode.ts +++ b/src/hooks/useDarkMode.ts @@ -1,6 +1,8 @@ import { useEffect, useRef, useState } from "react" import { create } from "zustand" -import { getStorage, setStorage, delStorage } from "~/lib/storage" + +import { delStorage, getStorage, setStorage } from "~/lib/storage" + import { useGetState } from "./useGetState" interface IMediaStore { diff --git a/src/hooks/useDate.ts b/src/hooks/useDate.ts index 0b73f7e7..4fab0eb3 100644 --- a/src/hooks/useDate.ts +++ b/src/hooks/useDate.ts @@ -1,15 +1,14 @@ import dayjs from "dayjs" - -import utc from "dayjs/plugin/utc" -import tz from "dayjs/plugin/timezone" -import localizedFormat from "dayjs/plugin/localizedFormat" -import duration from "dayjs/plugin/duration" -import relativeTime from "dayjs/plugin/relativeTime" -import { useTranslation } from "next-i18next" import "dayjs/locale/en" +import "dayjs/locale/ja" import "dayjs/locale/zh" import "dayjs/locale/zh-tw" -import "dayjs/locale/ja" +import duration from "dayjs/plugin/duration" +import localizedFormat from "dayjs/plugin/localizedFormat" +import relativeTime from "dayjs/plugin/relativeTime" +import tz from "dayjs/plugin/timezone" +import utc from "dayjs/plugin/utc" +import { useTranslation } from "next-i18next" import { useMemo } from "react" dayjs.extend(localizedFormat) diff --git a/src/hooks/useUploadFile.ts b/src/hooks/useUploadFile.ts index 80aca9d0..9c3de3dd 100644 --- a/src/hooks/useUploadFile.ts +++ b/src/hooks/useUploadFile.ts @@ -1,4 +1,5 @@ import { useCallback } from "react" + import { UploadFile } from "../lib/upload-file" export const useUploadFile = () => { diff --git a/src/hooks/useUserRole.ts b/src/hooks/useUserRole.ts index cd1caf06..62145291 100644 --- a/src/hooks/useUserRole.ts +++ b/src/hooks/useUserRole.ts @@ -1,7 +1,7 @@ -import { useAccountSites } from "~/queries/site" -import { useGetSite, useIsOperators } from "~/queries/site" import { useAccountState } from "@crossbell/connect-kit" +import { useAccountSites, useGetSite, useIsOperators } from "~/queries/site" + export function useUserRole(subdomain?: string) { const site = useGetSite(subdomain) diff --git a/src/lib/expand-unit.ts b/src/lib/expand-unit.ts index 759be7a9..f4890c29 100644 --- a/src/lib/expand-unit.ts +++ b/src/lib/expand-unit.ts @@ -1,9 +1,8 @@ -import { Note, Profile } from "~/lib/types" import { nanoid } from "nanoid" -import { toGateway } from "~/lib/ipfs-parser" -import { SITE_URL, SCORE_API_DOMAIN } from "~/lib/env" -import { toCid } from "~/lib/ipfs-parser" -import { ExpandedNote } from "~/lib/types" + +import { SCORE_API_DOMAIN, SITE_URL } from "~/lib/env" +import { toCid, toGateway } from "~/lib/ipfs-parser" +import { ExpandedNote, Note, Profile } from "~/lib/types" export const expandUnidataNote = async (page: Note, useStat?: boolean) => { if (page.body?.content && page.body?.mime_type === "text/markdown") { diff --git a/src/lib/helpers.ts b/src/lib/helpers.ts index b85ac1c3..00892d77 100644 --- a/src/lib/helpers.ts +++ b/src/lib/helpers.ts @@ -1,8 +1,8 @@ import { NoteEntity } from "crossbell.js" +import { Note } from "unidata.js" import { IS_PROD } from "./constants" import { OUR_DOMAIN } from "./env" -import { Note } from "unidata.js" export const getSiteLink = ({ domain, diff --git a/src/lib/json-feed.ts b/src/lib/json-feed.ts index c03724ea..e3beb199 100644 --- a/src/lib/json-feed.ts +++ b/src/lib/json-feed.ts @@ -1,9 +1,10 @@ -import { fetchGetSite } from "~/queries/site.server" -import { fetchGetPagesBySite } from "~/queries/page.server" -import { PageVisibilityEnum } from "~/lib/types" -import { getSiteLink } from "~/lib/helpers" import { QueryClient } from "@tanstack/react-query" + +import { getSiteLink } from "~/lib/helpers" +import { PageVisibilityEnum } from "~/lib/types" import { renderPageContent } from "~/markdown" +import { fetchGetPagesBySite } from "~/queries/page.server" +import { fetchGetSite } from "~/queries/site.server" export const getJsonFeed = async (domainOrSubdomain: string, path: string) => { const queryClient = new QueryClient() diff --git a/src/lib/page-helpers.ts b/src/lib/page-helpers.ts index d87b3df7..bd76ec64 100644 --- a/src/lib/page-helpers.ts +++ b/src/lib/page-helpers.ts @@ -1,4 +1,5 @@ import dayjs from "dayjs" + import { PageVisibilityEnum } from "./types" export const getPageVisibility = ({ diff --git a/src/lib/persister.client.ts b/src/lib/persister.client.ts index 30c9a0ec..2ab0f7eb 100644 --- a/src/lib/persister.client.ts +++ b/src/lib/persister.client.ts @@ -1,4 +1,5 @@ -import { get, set, del } from "idb-keyval" +import { del, get, set } from "idb-keyval" + import { PersistedClient, Persister, diff --git a/src/lib/read-files.ts b/src/lib/read-files.ts index 39e2fcb7..c8e6a088 100644 --- a/src/lib/read-files.ts +++ b/src/lib/read-files.ts @@ -1,5 +1,5 @@ -import { renderPageContent } from "~/markdown" import { getDefaultSlug } from "~/lib/default-slug" +import { renderPageContent } from "~/markdown" const makeArray = (value: any) => { if (Array.isArray(value)) { diff --git a/src/lib/redis.server.ts b/src/lib/redis.server.ts index 838b95ab..e5a0bc26 100644 --- a/src/lib/redis.server.ts +++ b/src/lib/redis.server.ts @@ -1,5 +1,6 @@ import Redis from "ioredis" -import { REDIS_URL, REDIS_EXPIRE, REDIS_REFRESH } from "~/lib/env.server" + +import { REDIS_EXPIRE, REDIS_REFRESH, REDIS_URL } from "~/lib/env.server" if (!REDIS_URL) { console.error("REDIS_URL not set") diff --git a/src/lib/server-side-props.ts b/src/lib/server-side-props.ts index 7eda3cec..eedec027 100644 --- a/src/lib/server-side-props.ts +++ b/src/lib/server-side-props.ts @@ -1,8 +1,4 @@ -import { - GetServerSidePropsContext, - GetServerSideProps, - GetServerSidePropsResult, -} from "next" +import { GetServerSidePropsContext, GetServerSidePropsResult } from "next" class Redirect extends Error { constructor(public url: string) { diff --git a/src/lib/types.ts b/src/lib/types.ts index 26fd7996..b9bbdb55 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -1,6 +1,6 @@ -import type { Note as UniNote, Profile as UniProfile } from "unidata.js" -import { ReactElement } from "react" import { NoteEntity } from "crossbell.js" +import { ReactElement } from "react" +import type { Note as UniNote, Profile as UniProfile } from "unidata.js" export type Site = { id: string diff --git a/src/lib/url-composer.ts b/src/lib/url-composer.ts index be38c38e..fa8188c5 100644 --- a/src/lib/url-composer.ts +++ b/src/lib/url-composer.ts @@ -1,7 +1,7 @@ import { ConnectKitProviderProps } from "@crossbell/connect-kit" -import { getNoteSlug, getSiteLink } from "~/lib/helpers" import { CSB_IO } from "~/lib/env" +import { getNoteSlug, getSiteLink } from "~/lib/helpers" export const urlComposer: ConnectKitProviderProps["urlComposer"] = { characterUrl: ({ handle }) => getSiteLink({ subdomain: handle }), diff --git a/src/markdown/index.test.ts b/src/markdown/index.test.ts index cdee7a55..d9d00aaf 100644 --- a/src/markdown/index.test.ts +++ b/src/markdown/index.test.ts @@ -1,4 +1,5 @@ -import { test, describe, expect } from "vitest" +import { describe, expect, test } from "vitest" + import { renderPageContent } from "./index" describe("html", () => { diff --git a/src/markdown/index.ts b/src/markdown/index.ts index 17d56cb9..157db2fa 100644 --- a/src/markdown/index.ts +++ b/src/markdown/index.ts @@ -1,42 +1,43 @@ -import { unified } from "unified" -import remarkParse from "remark-parse" -import remarkRehype from "remark-rehype" -import remarkFrontmatter from "remark-frontmatter" -import rehypeStringify from "rehype-stringify" -import remarkGfm from "remark-gfm" -import rehypeSanitize from "rehype-sanitize" -import rehypeRaw from "rehype-raw" -import { refractor } from "refractor" -import rehypePrismGenerator from "rehype-prism-plus/generator" -import { rehypeImage } from "./rehype-image" -import { rehypeAudio } from "./rehype-audio" -import { rehypeTable } from "./rehype-table" -import { remarkCallout } from "./remark-callout" -import { rehypeExternalLink } from "./rehyper-external-link" -import { rehypeWrapCode } from "./rehype-wrap-code" +import type { Root } from "hast" import jsYaml from "js-yaml" +import { Result as TocResult, toc } from "mdast-util-toc" +import { ReactElement, createElement } from "react" +import { Element } from "react-scroll" +import { refractor } from "refractor" +import rehypeAutolinkHeadings from "rehype-autolink-headings" +import rehypeInferDescriptionMeta from "rehype-infer-description-meta" +import rehypeKatex from "rehype-katex" +import rehypePrismGenerator from "rehype-prism-plus/generator" +import rehypeRaw from "rehype-raw" import rehypeReact from "rehype-react" -import { createElement, ReactElement } from "react" -import { ZoomedImage } from "~/components/ui/Image" +import rehypeRewrite from "rehype-rewrite" +import rehypeSanitize from "rehype-sanitize" +import rehypeSlug from "rehype-slug" +import rehypeStringify from "rehype-stringify" +import remarkBreaks from "remark-breaks" import remarkDirective from "remark-directive" import remarkDirectiveRehype from "remark-directive-rehype" +import remarkFrontmatter from "remark-frontmatter" +import remarkGfm from "remark-gfm" +import remarkMath from "remark-math" +import remarkParse from "remark-parse" +import remarkRehype from "remark-rehype" +import { unified } from "unified" + +import { APlayer } from "~/components/ui/APlayer" +import { ZoomedImage } from "~/components/ui/Image" +import { Mention } from "~/components/ui/Mention" +import { Mermaid } from "~/components/ui/Mermaid" + +import { rehypeAudio } from "./rehype-audio" +import { rehypeImage } from "./rehype-image" +import { rehypeTable } from "./rehype-table" +import { rehypeWrapCode } from "./rehype-wrap-code" +import { rehypeExternalLink } from "./rehyper-external-link" +import { remarkCallout } from "./remark-callout" +import { remarkMermaid } from "./remark-mermaid" import { remarkYoutube } from "./remark-youtube" import sanitizeScheme from "./sanitize-schema" -import rehypeSlug from "rehype-slug" -import rehypeAutolinkHeadings from "rehype-autolink-headings" -import { toc, Result as TocResult } from "mdast-util-toc" -import { Element } from "react-scroll" -import type { Root } from "hast" -import { Mention } from "~/components/ui/Mention" -import remarkMath from "remark-math" -import rehypeKatex from "rehype-katex" -import rehypeInferDescriptionMeta from "rehype-infer-description-meta" -import remarkBreaks from "remark-breaks" -import { remarkMermaid } from "./remark-mermaid" -import { Mermaid } from "~/components/ui/Mermaid" -import rehypeRewrite from "rehype-rewrite" -import { toText } from "hast-util-to-text" -import { APlayer } from "~/components/ui/APlayer" export type MarkdownEnv = { excerpt: string diff --git a/src/markdown/rehype-audio.ts b/src/markdown/rehype-audio.ts index f72b9577..c01035de 100644 --- a/src/markdown/rehype-audio.ts +++ b/src/markdown/rehype-audio.ts @@ -1,6 +1,7 @@ import { Root } from "rehype-raw" import { Plugin } from "unified" import { visit } from "unist-util-visit" + import { toGateway } from "~/lib/ipfs-parser" export const rehypeAudio: Plugin, Root> = () => { diff --git a/src/markdown/rehype-image.ts b/src/markdown/rehype-image.ts index 2e0cf4e7..b4e7797f 100644 --- a/src/markdown/rehype-image.ts +++ b/src/markdown/rehype-image.ts @@ -1,10 +1,12 @@ import { Root } from "rehype-raw" import { Plugin } from "unified" import { visit } from "unist-util-visit" -import { getUserContentsUrl } from "~/lib/user-contents" -import { toGateway } from "~/lib/ipfs-parser" -import { MarkdownEnv } from "." + import { IS_PROD } from "~/lib/constants" +import { toGateway } from "~/lib/ipfs-parser" +import { getUserContentsUrl } from "~/lib/user-contents" + +import { MarkdownEnv } from "." const isExternLink = (url: string) => /^https?:\/\//.test(url) diff --git a/src/markdown/rehype-table.ts b/src/markdown/rehype-table.ts index 0de77b73..febfbe3e 100644 --- a/src/markdown/rehype-table.ts +++ b/src/markdown/rehype-table.ts @@ -1,5 +1,5 @@ -import { Plugin } from "unified" import { Root } from "rehype-raw" +import { Plugin } from "unified" import { visit } from "unist-util-visit" export const rehypeTable: Plugin, Root> = () => (tree) => { diff --git a/src/markdown/rehyper-external-link.ts b/src/markdown/rehyper-external-link.ts index 1f6664c5..5cf40484 100644 --- a/src/markdown/rehyper-external-link.ts +++ b/src/markdown/rehyper-external-link.ts @@ -1,6 +1,7 @@ import { Root } from "rehype-raw" import { Plugin } from "unified" import { visit } from "unist-util-visit" + import { toGateway } from "~/lib/ipfs-parser" const isExternLink = (url: string) => /^https?:\/\//.test(url) diff --git a/src/markdown/remark-callout.ts b/src/markdown/remark-callout.ts index ca01609d..59ca963b 100644 --- a/src/markdown/remark-callout.ts +++ b/src/markdown/remark-callout.ts @@ -1,5 +1,5 @@ -import { Plugin } from "unified" import { Root } from "remark-gfm" +import { Plugin } from "unified" import { visit } from "unist-util-visit" const CALLOUT_RE = /^(TIP|WARN|SUCCESS|DANGER):(\n|$)/ diff --git a/src/markdown/remark-mermaid.ts b/src/markdown/remark-mermaid.ts index 3d3a2514..340a1665 100644 --- a/src/markdown/remark-mermaid.ts +++ b/src/markdown/remark-mermaid.ts @@ -1,5 +1,5 @@ -import { Plugin } from "unified" import { Root } from "remark-gfm" +import { Plugin } from "unified" import { visit } from "unist-util-visit" export const remarkMermaid: Plugin, Root> = () => (tree, file) => { diff --git a/src/markdown/remark-youtube.ts b/src/markdown/remark-youtube.ts index 433ee24b..59b4a90a 100644 --- a/src/markdown/remark-youtube.ts +++ b/src/markdown/remark-youtube.ts @@ -1,5 +1,5 @@ -import { Plugin } from "unified" import { Root } from "remark-gfm" +import { Plugin } from "unified" import { visit } from "unist-util-visit" export const remarkYoutube: Plugin, Root> = () => (tree, file) => { diff --git a/src/markdown/sanitize-schema.ts b/src/markdown/sanitize-schema.ts index 8a45626d..2ac13587 100644 --- a/src/markdown/sanitize-schema.ts +++ b/src/markdown/sanitize-schema.ts @@ -1,4 +1,5 @@ import { defaultSchema } from "rehype-sanitize" + import { allowedBlockquoteAttrs } from "./remark-callout" const scheme = { diff --git a/src/middleware.ts b/src/middleware.ts index 24a04d19..864d3d32 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -1,6 +1,7 @@ import { NextRequest, NextResponse } from "next/server" + import { IS_PROD } from "~/lib/constants" -import { DISCORD_LINK, IPFS_GATEWAY } from "~/lib/env" +import { DISCORD_LINK } from "~/lib/env" export default async function middleware(req: NextRequest) { const { pathname } = req.nextUrl diff --git a/src/models/home.model.ts b/src/models/home.model.ts index 047f19cc..71523a65 100644 --- a/src/models/home.model.ts +++ b/src/models/home.model.ts @@ -1,8 +1,10 @@ -import { ExpandedNote } from "~/lib/types" -import { indexer } from "@crossbell/indexer" -import { createClient, cacheExchange, fetchExchange } from "@urql/core" import dayjs from "dayjs" + +import { indexer } from "@crossbell/indexer" +import { cacheExchange, createClient, fetchExchange } from "@urql/core" + import { expandCrossbellNote } from "~/lib/expand-unit" +import { ExpandedNote } from "~/lib/types" export type FeedType = "latest" | "following" | "topic" | "hot" | "search" export type SearchType = "latest" | "hot" diff --git a/src/models/page.model.ts b/src/models/page.model.ts index 520778ab..db7bdc97 100644 --- a/src/models/page.model.ts +++ b/src/models/page.model.ts @@ -1,15 +1,17 @@ -import { notFound } from "~/lib/server-side-props" -import { PageVisibilityEnum, Notes, Note, ExpandedNote } from "~/lib/types" -import unidata from "~/queries/unidata.server" -import { indexer } from "@crossbell/indexer" -import { NoteMetadata } from "crossbell.js" -import { getStorage, getKeys } from "~/lib/storage" import axios from "axios" -import type Unidata from "unidata.js" +import { NoteMetadata } from "crossbell.js" import type { Contract } from "crossbell.js" -import { checkSlugReservedWords } from "~/lib/slug-reserved-words" +import type Unidata from "unidata.js" + import { GeneralAccount } from "@crossbell/connect-kit" -import { expandUnidataNote, expandCrossbellNote } from "~/lib/expand-unit" +import { indexer } from "@crossbell/indexer" + +import { expandCrossbellNote, expandUnidataNote } from "~/lib/expand-unit" +import { notFound } from "~/lib/server-side-props" +import { checkSlugReservedWords } from "~/lib/slug-reserved-words" +import { getKeys, getStorage } from "~/lib/storage" +import { ExpandedNote, Note, Notes, PageVisibilityEnum } from "~/lib/types" +import unidata from "~/queries/unidata.server" export async function checkPageSlug( input: { @@ -438,7 +440,7 @@ export async function getLikes({ ) if (includeCharacter) { res.list?.forEach((item) => { - ;(item).character = item.fromCharacter + ;(item as any).character = item.fromCharacter }) } diff --git a/src/models/site.model.ts b/src/models/site.model.ts index 78744952..5c353829 100644 --- a/src/models/site.model.ts +++ b/src/models/site.model.ts @@ -1,14 +1,15 @@ -import { SiteNavigationItem, Profile } from "~/lib/types" +import { CharacterOperatorPermission, Indexer } from "crossbell.js" +import dayjs from "dayjs" import { nanoid } from "nanoid" -import unidata from "~/queries/unidata.server" import type Unidata from "unidata.js" import type { Profiles as UniProfiles } from "unidata.js" -import { createClient, cacheExchange, fetchExchange } from "@urql/core" -import { Indexer } from "crossbell.js" -import { CharacterOperatorPermission } from "crossbell.js" + import type { useContract } from "@crossbell/contract" -import dayjs from "dayjs" +import { cacheExchange, createClient, fetchExchange } from "@urql/core" + import { expandUnidataProfile } from "~/lib/expand-unit" +import { Profile, SiteNavigationItem } from "~/lib/types" +import unidata from "~/queries/unidata.server" type Contract = ReturnType diff --git a/src/pages/404.tsx b/src/pages/404.tsx index 309715a8..b1766644 100644 --- a/src/pages/404.tsx +++ b/src/pages/404.tsx @@ -1,7 +1,8 @@ +import { useState } from "react" + +import { SiteLayout } from "~/components/site/SiteLayout" import { SitePage } from "~/components/site/SitePage" import { SITE_URL } from "~/lib/env" -import { SiteLayout } from "~/components/site/SiteLayout" -import { useState } from "react" export default function Custom404() { const [siteId, setSiteId] = useState("") diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index f614fea9..1fe5ee36 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -1,27 +1,27 @@ -import "~/css/main.css" -import "~/generated/uno.css" import "aplayer/dist/APlayer.min.css" - +import { Network } from "crossbell.js" +import { appWithTranslation } from "next-i18next" +import NextNProgress from "nextjs-progressbar" import { Toaster } from "react-hot-toast" -import { createClient, WagmiConfig } from "wagmi" -import { Hydrate, QueryClient } from "@tanstack/react-query" -import { PersistQueryClientProvider } from "@tanstack/react-query-persist-client" +import { AppPropsWithLayout } from "types/next" +import { WagmiConfig, createClient } from "wagmi" + import { ConnectKitProvider, getDefaultClientConfig, } from "@crossbell/connect-kit" import { NotificationModal } from "@crossbell/notification" -import NextNProgress from "nextjs-progressbar" -import { Network } from "crossbell.js" -import { appWithTranslation } from "next-i18next" +import { Hydrate, QueryClient } from "@tanstack/react-query" +import { PersistQueryClientProvider } from "@tanstack/react-query-persist-client" +import "~/css/main.css" +import "~/generated/uno.css" +import { useDarkMode } from "~/hooks/useDarkMode" +import { useMobileLayout } from "~/hooks/useMobileLayout" import { APP_NAME, IPFS_GATEWAY } from "~/lib/env" import { toGateway } from "~/lib/ipfs-parser" import { createIDBPersister } from "~/lib/persister.client" import { urlComposer } from "~/lib/url-composer" -import { AppPropsWithLayout } from "types/next" -import { useDarkMode } from "~/hooks/useDarkMode" -import { useMobileLayout } from "~/hooks/useMobileLayout" Network.setIpfsGateway(IPFS_GATEWAY) diff --git a/src/pages/_site/[site]/[page].tsx b/src/pages/_site/[site]/[page].tsx index b09ab056..78344558 100644 --- a/src/pages/_site/[site]/[page].tsx +++ b/src/pages/_site/[site]/[page].tsx @@ -1,6 +1,8 @@ -import { QueryClient } from "@tanstack/react-query" import { GetServerSideProps } from "next" import { ReactElement } from "react" + +import { QueryClient } from "@tanstack/react-query" + import { SiteLayout } from "~/components/site/SiteLayout" import { getServerSideProps as getLayoutServerSideProps } from "~/components/site/SiteLayout.server" import { SitePage } from "~/components/site/SitePage" diff --git a/src/pages/_site/[site]/archives.tsx b/src/pages/_site/[site]/archives.tsx index ef3935ad..3ff3856f 100644 --- a/src/pages/_site/[site]/archives.tsx +++ b/src/pages/_site/[site]/archives.tsx @@ -1,13 +1,14 @@ import { GetServerSideProps } from "next" +import type { ReactElement } from "react" + +import { QueryClient } from "@tanstack/react-query" + +import { SiteArchives } from "~/components/site/SiteArchives" import { SiteLayout } from "~/components/site/SiteLayout" import { getServerSideProps as getLayoutServerSideProps } from "~/components/site/SiteLayout.server" import { serverSidePropsHandler } from "~/lib/server-side-props" -import { SiteArchives } from "~/components/site/SiteArchives" -import { Profile, Notes } from "~/lib/types" -import { QueryClient } from "@tanstack/react-query" +import { Notes, PageVisibilityEnum, Profile } from "~/lib/types" import { useGetPagesBySiteLite } from "~/queries/page" -import { PageVisibilityEnum } from "~/lib/types" -import type { ReactElement } from "react" export const getServerSideProps: GetServerSideProps = serverSidePropsHandler( async (ctx) => { diff --git a/src/pages/_site/[site]/feed/index.tsx b/src/pages/_site/[site]/feed/index.tsx index 200354f2..f23a77ee 100644 --- a/src/pages/_site/[site]/feed/index.tsx +++ b/src/pages/_site/[site]/feed/index.tsx @@ -1,4 +1,5 @@ import { GetServerSideProps } from "next" + import { getJsonFeed } from "~/lib/json-feed" export const getServerSideProps: GetServerSideProps = async (ctx) => { diff --git a/src/pages/_site/[site]/feed/xml.tsx b/src/pages/_site/[site]/feed/xml.tsx index 22a9f3d1..717cd2fc 100644 --- a/src/pages/_site/[site]/feed/xml.tsx +++ b/src/pages/_site/[site]/feed/xml.tsx @@ -1,6 +1,7 @@ -import { GetServerSideProps } from "next" // @ts-ignore import jsonfeedToRSS from "jsonfeed-to-rss" +import { GetServerSideProps } from "next" + import { getJsonFeed } from "~/lib/json-feed" export const getServerSideProps: GetServerSideProps = async (ctx) => { diff --git a/src/pages/_site/[site]/index.tsx b/src/pages/_site/[site]/index.tsx index aa872569..2af4f04d 100644 --- a/src/pages/_site/[site]/index.tsx +++ b/src/pages/_site/[site]/index.tsx @@ -1,11 +1,13 @@ import { GetServerSideProps } from "next" +import type { ReactElement } from "react" + +import { QueryClient } from "@tanstack/react-query" + import { SiteHome } from "~/components/site/SiteHome" import { SiteLayout } from "~/components/site/SiteLayout" import { getServerSideProps as getLayoutServerSideProps } from "~/components/site/SiteLayout.server" -import { QueryClient } from "@tanstack/react-query" -import { useGetPagesBySiteLite } from "~/queries/page" import { PageVisibilityEnum } from "~/lib/types" -import type { ReactElement } from "react" +import { useGetPagesBySiteLite } from "~/queries/page" export const getServerSideProps: GetServerSideProps = async (ctx) => { const queryClient = new QueryClient() diff --git a/src/pages/_site/[site]/manifest.json.tsx b/src/pages/_site/[site]/manifest.json.tsx index 149ec3c2..6e84069c 100644 --- a/src/pages/_site/[site]/manifest.json.tsx +++ b/src/pages/_site/[site]/manifest.json.tsx @@ -1,7 +1,9 @@ import { GetServerSideProps } from "next" -import { fetchGetSite } from "~/queries/site.server" + import { QueryClient } from "@tanstack/react-query" +import { fetchGetSite } from "~/queries/site.server" + export const getServerSideProps: GetServerSideProps = async (ctx) => { ctx.res.setHeader("Content-Type", "application/json") diff --git a/src/pages/_site/[site]/nft.tsx b/src/pages/_site/[site]/nft.tsx index ce89161b..91d253fe 100644 --- a/src/pages/_site/[site]/nft.tsx +++ b/src/pages/_site/[site]/nft.tsx @@ -1,14 +1,16 @@ import { GetServerSideProps } from "next" -import { SiteLayout } from "~/components/site/SiteLayout" -import { getServerSideProps as getLayoutServerSideProps } from "~/components/site/SiteLayout.server" -import { QueryClient } from "@tanstack/react-query" -import { useGetSite, useGetNFTs } from "~/queries/site" +import { useTranslation } from "next-i18next" +import Script from "next/script" import { ReactElement, useEffect, useState } from "react" import type { Asset } from "unidata.js" -import Script from "next/script" -import { UniMedia } from "~/components/ui/UniMedia" + +import { QueryClient } from "@tanstack/react-query" + +import { SiteLayout } from "~/components/site/SiteLayout" +import { getServerSideProps as getLayoutServerSideProps } from "~/components/site/SiteLayout.server" import { UniLink } from "~/components/ui/UniLink" -import { useTranslation } from "next-i18next" +import { UniMedia } from "~/components/ui/UniMedia" +import { useGetNFTs, useGetSite } from "~/queries/site" export const getServerSideProps: GetServerSideProps = async (ctx) => { const queryClient = new QueryClient() diff --git a/src/pages/_site/[site]/preview/[page].tsx b/src/pages/_site/[site]/preview/[page].tsx index e0762468..44fa2152 100644 --- a/src/pages/_site/[site]/preview/[page].tsx +++ b/src/pages/_site/[site]/preview/[page].tsx @@ -1,16 +1,18 @@ -import { SiteLayout } from "~/components/site/SiteLayout" -import { SitePage } from "~/components/site/SitePage" -import { useGetPage } from "~/queries/page" -import type { ReactElement } from "react" -import { useRouter } from "next/router" -import { useGetSite } from "~/queries/site" import { GetServerSideProps } from "next" -import { getServerSideProps as getLayoutServerSideProps } from "~/components/site/SiteLayout.server" -import { serverSidePropsHandler } from "~/lib/server-side-props" +import { useRouter } from "next/router" +import type { ReactElement } from "react" + import { QueryClient } from "@tanstack/react-query" + +import { SiteLayout } from "~/components/site/SiteLayout" +import { getServerSideProps as getLayoutServerSideProps } from "~/components/site/SiteLayout.server" +import { SitePage } from "~/components/site/SitePage" import { useUserRole } from "~/hooks/useUserRole" -import { getSiteLink } from "~/lib/helpers" import { getDefaultSlug } from "~/lib/default-slug" +import { getSiteLink } from "~/lib/helpers" +import { serverSidePropsHandler } from "~/lib/server-side-props" +import { useGetPage } from "~/queries/page" +import { useGetSite } from "~/queries/site" export const getServerSideProps: GetServerSideProps = serverSidePropsHandler( async (ctx) => { diff --git a/src/pages/_site/[site]/search.tsx b/src/pages/_site/[site]/search.tsx index f4ff375d..b380fca4 100644 --- a/src/pages/_site/[site]/search.tsx +++ b/src/pages/_site/[site]/search.tsx @@ -1,14 +1,16 @@ import { GetServerSideProps } from "next" -import { SiteSearch } from "~/components/site/SiteSearch" +import { useTranslation } from "next-i18next" +import { useRouter } from "next/router" +import type { ReactElement } from "react" + +import { QueryClient } from "@tanstack/react-query" + +import { SearchInput } from "~/components/common/SearchInput" import { SiteLayout } from "~/components/site/SiteLayout" import { getServerSideProps as getLayoutServerSideProps } from "~/components/site/SiteLayout.server" -import { QueryClient } from "@tanstack/react-query" +import { SiteSearch } from "~/components/site/SiteSearch" import { useGetSearchPagesBySite } from "~/queries/page" -import type { ReactElement } from "react" import { useGetSite } from "~/queries/site" -import { useRouter } from "next/router" -import { SearchInput } from "~/components/common/SearchInput" -import { useTranslation } from "next-i18next" export const getServerSideProps: GetServerSideProps = async (ctx) => { const queryClient = new QueryClient() diff --git a/src/pages/_site/[site]/sitemap.xml.tsx b/src/pages/_site/[site]/sitemap.xml.tsx index b2f7a852..5cfec566 100644 --- a/src/pages/_site/[site]/sitemap.xml.tsx +++ b/src/pages/_site/[site]/sitemap.xml.tsx @@ -1,10 +1,12 @@ -import { GetServerSideProps } from "next" -import { fetchGetSite } from "~/queries/site.server" -import { fetchGetPagesBySite } from "~/queries/page.server" -import { PageVisibilityEnum } from "~/lib/types" -import { getSiteLink } from "~/lib/helpers" -import { QueryClient } from "@tanstack/react-query" import dayjs from "dayjs" +import { GetServerSideProps } from "next" + +import { QueryClient } from "@tanstack/react-query" + +import { getSiteLink } from "~/lib/helpers" +import { PageVisibilityEnum } from "~/lib/types" +import { fetchGetPagesBySite } from "~/queries/page.server" +import { fetchGetSite } from "~/queries/site.server" export const getServerSideProps: GetServerSideProps = async (ctx) => { const queryClient = new QueryClient() diff --git a/src/pages/_site/[site]/tag/[tag].tsx b/src/pages/_site/[site]/tag/[tag].tsx index 10ca3fe4..e40c1314 100644 --- a/src/pages/_site/[site]/tag/[tag].tsx +++ b/src/pages/_site/[site]/tag/[tag].tsx @@ -1,13 +1,14 @@ import { GetServerSideProps } from "next" +import type { ReactElement } from "react" + +import { QueryClient } from "@tanstack/react-query" + +import { SiteArchives } from "~/components/site/SiteArchives" import { SiteLayout } from "~/components/site/SiteLayout" import { getServerSideProps as getLayoutServerSideProps } from "~/components/site/SiteLayout.server" import { serverSidePropsHandler } from "~/lib/server-side-props" -import { SiteArchives } from "~/components/site/SiteArchives" -import { Profile, Notes } from "~/lib/types" -import { QueryClient } from "@tanstack/react-query" +import { Notes, PageVisibilityEnum, Profile } from "~/lib/types" import { useGetPagesBySiteLite } from "~/queries/page" -import { PageVisibilityEnum } from "~/lib/types" -import type { ReactElement } from "react" export const getServerSideProps: GetServerSideProps = serverSidePropsHandler( async (ctx) => { diff --git a/src/pages/activities.tsx b/src/pages/activities.tsx index 588a66bc..8dee9788 100644 --- a/src/pages/activities.tsx +++ b/src/pages/activities.tsx @@ -1,17 +1,20 @@ import { GetServerSideProps } from "next" -import { ReactElement, useState } from "react" -import { MainLayout } from "~/components/main/MainLayout" -import { useAccountState, useConnectModal } from "@crossbell/connect-kit" -import { dehydrate, QueryClient } from "@tanstack/react-query" -import { prefetchGetSites } from "~/queries/site.server" -import showcase from "../../data/showcase.json" -import type { FeedType } from "~/models/home.model" import { serverSideTranslations } from "next-i18next/serverSideTranslations" -import { languageDetector } from "~/lib/language-detector" +import { ReactElement, useState } from "react" + +import { useAccountState, useConnectModal } from "@crossbell/connect-kit" +import { QueryClient, dehydrate } from "@tanstack/react-query" + import { MainFeed } from "~/components/main/MainFeed" -import { Tabs } from "~/components/ui/Tabs" +import { MainLayout } from "~/components/main/MainLayout" import { MainSidebar } from "~/components/main/MainSidebar" +import { Tabs } from "~/components/ui/Tabs" +import { languageDetector } from "~/lib/language-detector" +import type { FeedType } from "~/models/home.model" import { prefetchGetFeed } from "~/queries/home.server" +import { prefetchGetSites } from "~/queries/site.server" + +import showcase from "../../data/showcase.json" export const getServerSideProps: GetServerSideProps = async (ctx) => { const queryClient = new QueryClient() diff --git a/src/pages/api/check-domain.tsx b/src/pages/api/check-domain.tsx index 17c9cca1..64229d33 100644 --- a/src/pages/api/check-domain.tsx +++ b/src/pages/api/check-domain.tsx @@ -1,4 +1,5 @@ import { NextApiRequest, NextApiResponse } from "next" + import { checkDomainServer } from "~/models/site.model" export default async function handler( diff --git a/src/pages/api/host2handle.ts b/src/pages/api/host2handle.ts index 3bc9148b..f97d02a9 100644 --- a/src/pages/api/host2handle.ts +++ b/src/pages/api/host2handle.ts @@ -1,4 +1,5 @@ import { NextApiRequest, NextApiResponse } from "next" + import { OUR_DOMAIN } from "~/lib/env" import { cacheGet } from "~/lib/redis.server" import { checkDomainServer, fetchTenant } from "~/models/site.model" diff --git a/src/pages/api/nfts.ts b/src/pages/api/nfts.ts index 089c7f83..298b3ff7 100644 --- a/src/pages/api/nfts.ts +++ b/src/pages/api/nfts.ts @@ -1,8 +1,9 @@ import { NextApiRequest, NextApiResponse } from "next" -import { getNFTs } from "~/models/site.model" -import { getRedis, cacheGet } from "~/lib/redis.server" import { Asset } from "unidata.js" + import { IPFS_GATEWAY } from "~/lib/env" +import { cacheGet, getRedis } from "~/lib/redis.server" +import { getNFTs } from "~/models/site.model" export default async function handler( req: NextApiRequest, diff --git a/src/pages/api/pages.ts b/src/pages/api/pages.ts index 49b38cd5..d7c1d03f 100644 --- a/src/pages/api/pages.ts +++ b/src/pages/api/pages.ts @@ -1,6 +1,7 @@ import { NextApiRequest, NextApiResponse } from "next" -import { getPagesBySite } from "~/models/page.model" + import { PageVisibilityEnum } from "~/lib/types" +import { getPagesBySite } from "~/models/page.model" export default async function handler( req: NextApiRequest, diff --git a/src/pages/api/redirection.tsx b/src/pages/api/redirection.tsx index fe761211..9c0003a3 100644 --- a/src/pages/api/redirection.tsx +++ b/src/pages/api/redirection.tsx @@ -1,6 +1,7 @@ import { NextApiRequest, NextApiResponse } from "next" -import { getSiteLink } from "~/lib/helpers" + import { getDefaultSlug } from "~/lib/default-slug" +import { getSiteLink } from "~/lib/helpers" import { checkDomainServer } from "~/models/site.model" export default async function handler( diff --git a/src/pages/api/slug2id.ts b/src/pages/api/slug2id.ts index f9dcb744..286b3ed7 100644 --- a/src/pages/api/slug2id.ts +++ b/src/pages/api/slug2id.ts @@ -1,7 +1,7 @@ import { NextApiRequest, NextApiResponse } from "next" -import { cacheGet, cacheDelete } from "~/lib/redis.server" import { getNoteSlug } from "~/lib/helpers" +import { cacheDelete, cacheGet } from "~/lib/redis.server" export async function getIdBySlug(slug: string, handle: string) { slug = (slug as string)?.toLowerCase?.() diff --git a/src/pages/api/summary.ts b/src/pages/api/summary.ts index 9dcc6ad7..54a43e41 100644 --- a/src/pages/api/summary.ts +++ b/src/pages/api/summary.ts @@ -1,13 +1,12 @@ +import { OpenAI } from "langchain" +import { AnalyzeDocumentChain, loadSummarizationChain } from "langchain/chains" +import { PromptTemplate } from "langchain/prompts" import { NextApiRequest, NextApiResponse } from "next" -import { OpenAI } from "langchain" -import { loadSummarizationChain } from "langchain/chains" -import { PromptTemplate } from "langchain/prompts" -import { AnalyzeDocumentChain } from "langchain/chains" +import { Metadata } from "@prisma/client" import { toGateway } from "~/lib/ipfs-parser" import prisma from "~/lib/prisma.server" -import { Metadata } from "@prisma/client" import { cacheGet } from "~/lib/redis.server" const model = new OpenAI({ diff --git a/src/pages/dashboard/[subdomain]/achievements.tsx b/src/pages/dashboard/[subdomain]/achievements.tsx index 0cb1e129..9feb7aae 100644 --- a/src/pages/dashboard/[subdomain]/achievements.tsx +++ b/src/pages/dashboard/[subdomain]/achievements.tsx @@ -1,13 +1,13 @@ -import { DashboardLayout } from "~/components/dashboard/DashboardLayout" -import { DashboardMain } from "~/components/dashboard/DashboardMain" -import type { ReactElement } from "react" -import { useGetAchievements, useGetSite } from "~/queries/site" -import { getServerSideProps as getLayoutServerSideProps } from "~/components/dashboard/DashboardLayout.server" import { GetServerSideProps } from "next" -import { serverSidePropsHandler } from "~/lib/server-side-props" -import { useAccountState } from "@crossbell/connect-kit" -import { AchievementItem } from "~/components/common/AchievementItem" import { useRouter } from "next/router" +import type { ReactElement } from "react" + +import { AchievementItem } from "~/components/common/AchievementItem" +import { DashboardLayout } from "~/components/dashboard/DashboardLayout" +import { getServerSideProps as getLayoutServerSideProps } from "~/components/dashboard/DashboardLayout.server" +import { DashboardMain } from "~/components/dashboard/DashboardMain" +import { serverSidePropsHandler } from "~/lib/server-side-props" +import { useGetAchievements, useGetSite } from "~/queries/site" export const getServerSideProps: GetServerSideProps = serverSidePropsHandler( async (ctx) => { diff --git a/src/pages/dashboard/[subdomain]/editor.tsx b/src/pages/dashboard/[subdomain]/editor.tsx index e51a3d8b..78b675a7 100644 --- a/src/pages/dashboard/[subdomain]/editor.tsx +++ b/src/pages/dashboard/[subdomain]/editor.tsx @@ -1,52 +1,53 @@ -import { cn } from "~/lib/utils" -import { useDate } from "~/hooks/useDate" -import { useRouter } from "next/router" import { useDebounceEffect } from "ahooks" +import type { Root } from "hast" +import { nanoid } from "nanoid" +import { GetServerSideProps } from "next" +import { useTranslation } from "next-i18next" +import { useRouter } from "next/router" +import NodeID3 from "node-id3" import { ChangeEvent, useCallback, useEffect, - useState, - useRef, useMemo, + useRef, + useState, } from "react" +import type { ReactElement } from "react" import toast from "react-hot-toast" -import { toolbars } from "~/editor" + +import type { EditorView } from "@codemirror/view" +import { useQueryClient } from "@tanstack/react-query" + +import { PageContent } from "~/components/common/PageContent" import { DashboardLayout } from "~/components/dashboard/DashboardLayout" +import { getServerSideProps as getLayoutServerSideProps } from "~/components/dashboard/DashboardLayout.server" import { DashboardMain } from "~/components/dashboard/DashboardMain" +import { OptionsButton } from "~/components/dashboard/OptionsButton" import { PublishButton } from "~/components/dashboard/PublishButton" +import { Button } from "~/components/ui/Button" +import { CodeMirrorEditor } from "~/components/ui/CodeMirror" import { EditorToolbar } from "~/components/ui/EditorToolbar" import { Input } from "~/components/ui/Input" +import { Modal } from "~/components/ui/Modal" import { UniLink } from "~/components/ui/UniLink" +import { toolbars } from "~/editor" +import { useDate } from "~/hooks/useDate" +import { useIsMobileLayout } from "~/hooks/useMobileLayout" import { useUploadFile } from "~/hooks/useUploadFile" +import { showConfetti } from "~/lib/confetti" +import { getDefaultSlug } from "~/lib/default-slug" +import { CSB_SCAN } from "~/lib/env" import { getSiteLink } from "~/lib/helpers" import { getPageVisibility } from "~/lib/page-helpers" -import { PageVisibilityEnum } from "~/lib/types" -import { useGetPage, useCreateOrUpdatePage } from "~/queries/page" -import { checkPageSlug } from "~/models/page.model" -import { useGetSite } from "~/queries/site" -import { setStorage, delStorage } from "~/lib/storage" -import { nanoid } from "nanoid" -import { useQueryClient } from "@tanstack/react-query" -import { PageContent } from "~/components/common/PageContent" -import type { Root } from "hast" -import type { EditorView } from "@codemirror/view" - -import { Rendered, renderPageContent } from "~/markdown" -import { Button } from "~/components/ui/Button" -import { Modal } from "~/components/ui/Modal" -import { CSB_SCAN } from "~/lib/env" -import { showConfetti } from "~/lib/confetti" -import type { ReactElement } from "react" -import { useTranslation } from "next-i18next" -import { getServerSideProps as getLayoutServerSideProps } from "~/components/dashboard/DashboardLayout.server" -import { GetServerSideProps } from "next" import { serverSidePropsHandler } from "~/lib/server-side-props" -import { getDefaultSlug } from "~/lib/default-slug" -import { useIsMobileLayout } from "~/hooks/useMobileLayout" -import { OptionsButton } from "~/components/dashboard/OptionsButton" -import NodeID3 from "node-id3" -import { CodeMirrorEditor } from "~/components/ui/CodeMirror" +import { delStorage, setStorage } from "~/lib/storage" +import { PageVisibilityEnum } from "~/lib/types" +import { cn } from "~/lib/utils" +import { Rendered, renderPageContent } from "~/markdown" +import { checkPageSlug } from "~/models/page.model" +import { useCreateOrUpdatePage, useGetPage } from "~/queries/page" +import { useGetSite } from "~/queries/site" export const getServerSideProps: GetServerSideProps = serverSidePropsHandler( async (ctx) => { diff --git a/src/pages/dashboard/[subdomain]/events.tsx b/src/pages/dashboard/[subdomain]/events.tsx index 4650cc38..f7e7f602 100644 --- a/src/pages/dashboard/[subdomain]/events.tsx +++ b/src/pages/dashboard/[subdomain]/events.tsx @@ -1,21 +1,22 @@ -import { DashboardLayout } from "~/components/dashboard/DashboardLayout" -import { DashboardMain } from "~/components/dashboard/DashboardMain" -import { UniLink } from "~/components/ui/UniLink" -import { Image } from "~/components/ui/Image" -import type { ReactElement } from "react" -import { useGetSite } from "~/queries/site" -import { useDate } from "~/hooks/useDate" -import { useTranslation } from "next-i18next" -import { getServerSideProps as getLayoutServerSideProps } from "~/components/dashboard/DashboardLayout.server" import { GetServerSideProps } from "next" -import { serverSidePropsHandler } from "~/lib/server-side-props" -import { useGetPagesBySite } from "~/queries/page" -import { CharacterFloatCard } from "~/components/common/CharacterFloatCard" +import { useTranslation } from "next-i18next" +import type { ReactElement } from "react" import { useEffect, useState } from "react" + +import { CharacterFloatCard } from "~/components/common/CharacterFloatCard" +import { DashboardLayout } from "~/components/dashboard/DashboardLayout" +import { getServerSideProps as getLayoutServerSideProps } from "~/components/dashboard/DashboardLayout.server" +import { DashboardMain } from "~/components/dashboard/DashboardMain" import { Avatar } from "~/components/ui/Avatar" -import { cn } from "~/lib/utils" +import { Image } from "~/components/ui/Image" +import { UniLink } from "~/components/ui/UniLink" +import { useDate } from "~/hooks/useDate" import { getSiteLink } from "~/lib/helpers" +import { serverSidePropsHandler } from "~/lib/server-side-props" import { getStorage, setStorage } from "~/lib/storage" +import { cn } from "~/lib/utils" +import { useGetPagesBySite } from "~/queries/page" +import { useGetSite } from "~/queries/site" export const getServerSideProps: GetServerSideProps = serverSidePropsHandler( async (ctx) => { diff --git a/src/pages/dashboard/[subdomain]/import/index.tsx b/src/pages/dashboard/[subdomain]/import/index.tsx index ea3391a9..8a2be418 100644 --- a/src/pages/dashboard/[subdomain]/import/index.tsx +++ b/src/pages/dashboard/[subdomain]/import/index.tsx @@ -1,14 +1,15 @@ -import { useRouter } from "next/router" -import { DashboardLayout } from "~/components/dashboard/DashboardLayout" -import { DashboardMain } from "~/components/dashboard/DashboardMain" -import { UniLink } from "~/components/ui/UniLink" -import type { ReactElement } from "react" -import { useGetSite, useGetStat } from "~/queries/site" -import { useTranslation, Trans } from "next-i18next" -import { getServerSideProps as getLayoutServerSideProps } from "~/components/dashboard/DashboardLayout.server" import { GetServerSideProps } from "next" -import { serverSidePropsHandler } from "~/lib/server-side-props" +import { useTranslation } from "next-i18next" +import { useRouter } from "next/router" +import type { ReactElement } from "react" + +import { DashboardLayout } from "~/components/dashboard/DashboardLayout" +import { getServerSideProps as getLayoutServerSideProps } from "~/components/dashboard/DashboardLayout.server" +import { DashboardMain } from "~/components/dashboard/DashboardMain" import { Image } from "~/components/ui/Image" +import { UniLink } from "~/components/ui/UniLink" +import { serverSidePropsHandler } from "~/lib/server-side-props" +import { useGetSite } from "~/queries/site" export const getServerSideProps: GetServerSideProps = serverSidePropsHandler( async (ctx) => { diff --git a/src/pages/dashboard/[subdomain]/import/markdown.tsx b/src/pages/dashboard/[subdomain]/import/markdown.tsx index fa8520fd..5ab46389 100644 --- a/src/pages/dashboard/[subdomain]/import/markdown.tsx +++ b/src/pages/dashboard/[subdomain]/import/markdown.tsx @@ -1,22 +1,23 @@ -import { useRouter } from "next/router" -import { DashboardLayout } from "~/components/dashboard/DashboardLayout" -import { DashboardMain } from "~/components/dashboard/DashboardMain" -import { ReactElement, useEffect, useState } from "react" -import { useGetSite } from "~/queries/site" -import { useTranslation } from "next-i18next" -import { getServerSideProps as getLayoutServerSideProps } from "~/components/dashboard/DashboardLayout.server" -import { GetServerSideProps } from "next" -import { serverSidePropsHandler } from "~/lib/server-side-props" -import { useForm } from "react-hook-form" -import { Input } from "~/components/ui/Input" -import { Button } from "~/components/ui/Button" -import { readFiles } from "~/lib/read-files" -import { getSiteLink } from "~/lib/helpers" import type { NoteMetadata } from "crossbell.js" -import { ImportPreview } from "~/components/dashboard/ImportPreview" -import { usePostNotes } from "~/queries/page" +import { GetServerSideProps } from "next" +import { useTranslation } from "next-i18next" +import { useRouter } from "next/router" +import { ReactElement, useEffect, useState } from "react" +import { useForm } from "react-hook-form" import { toast } from "react-hot-toast" +import { DashboardLayout } from "~/components/dashboard/DashboardLayout" +import { getServerSideProps as getLayoutServerSideProps } from "~/components/dashboard/DashboardLayout.server" +import { DashboardMain } from "~/components/dashboard/DashboardMain" +import { ImportPreview } from "~/components/dashboard/ImportPreview" +import { Button } from "~/components/ui/Button" +import { Input } from "~/components/ui/Input" +import { getSiteLink } from "~/lib/helpers" +import { readFiles } from "~/lib/read-files" +import { serverSidePropsHandler } from "~/lib/server-side-props" +import { usePostNotes } from "~/queries/page" +import { useGetSite } from "~/queries/site" + export const getServerSideProps: GetServerSideProps = serverSidePropsHandler( async (ctx) => { const { props: layoutProps } = await getLayoutServerSideProps(ctx) diff --git a/src/pages/dashboard/[subdomain]/import/mirror.tsx b/src/pages/dashboard/[subdomain]/import/mirror.tsx index 8a9c9783..229cafe2 100644 --- a/src/pages/dashboard/[subdomain]/import/mirror.tsx +++ b/src/pages/dashboard/[subdomain]/import/mirror.tsx @@ -1,20 +1,20 @@ -import { useRouter } from "next/router" -import { DashboardLayout } from "~/components/dashboard/DashboardLayout" -import { DashboardMain } from "~/components/dashboard/DashboardMain" -import { ReactElement, useEffect, useState } from "react" -import { useGetSite } from "~/queries/site" -import { useTranslation } from "next-i18next" -import { getServerSideProps as getLayoutServerSideProps } from "~/components/dashboard/DashboardLayout.server" +import type { NoteMetadata } from "crossbell.js" import { GetServerSideProps } from "next" -import { serverSidePropsHandler } from "~/lib/server-side-props" +import { useTranslation } from "next-i18next" +import { useRouter } from "next/router" +import { ReactElement, useEffect } from "react" import { useForm } from "react-hook-form" +import { toast } from "react-hot-toast" + +import { DashboardLayout } from "~/components/dashboard/DashboardLayout" +import { getServerSideProps as getLayoutServerSideProps } from "~/components/dashboard/DashboardLayout.server" +import { DashboardMain } from "~/components/dashboard/DashboardMain" +import { ImportPreview } from "~/components/dashboard/ImportPreview" import { Button } from "~/components/ui/Button" import { getSiteLink } from "~/lib/helpers" -import type { NoteMetadata } from "crossbell.js" -import { ImportPreview } from "~/components/dashboard/ImportPreview" -import { usePostNotes } from "~/queries/page" -import { toast } from "react-hot-toast" -import { useGetMirrorXyz, useCheckMirror } from "~/queries/page" +import { serverSidePropsHandler } from "~/lib/server-side-props" +import { useCheckMirror, useGetMirrorXyz, usePostNotes } from "~/queries/page" +import { useGetSite } from "~/queries/site" export const getServerSideProps: GetServerSideProps = serverSidePropsHandler( async (ctx) => { diff --git a/src/pages/dashboard/[subdomain]/index.tsx b/src/pages/dashboard/[subdomain]/index.tsx index 1f4a7922..5086d70d 100644 --- a/src/pages/dashboard/[subdomain]/index.tsx +++ b/src/pages/dashboard/[subdomain]/index.tsx @@ -1,21 +1,22 @@ -import { useRouter } from "next/router" -import { DashboardLayout } from "~/components/dashboard/DashboardLayout" -import { DashboardMain } from "~/components/dashboard/DashboardMain" -import { UniLink } from "~/components/ui/UniLink" -import { Image } from "~/components/ui/Image" -import { DISCORD_LINK, TWITTER_LINK, GITHUB_LINK } from "~/lib/env" -import { getSiteLink } from "~/lib/helpers" -import type { ReactElement } from "react" -import { useGetSite, useGetStat } from "~/queries/site" -import { useDate } from "~/hooks/useDate" -import { useTranslation, Trans } from "next-i18next" -import { getServerSideProps as getLayoutServerSideProps } from "~/components/dashboard/DashboardLayout.server" import { GetServerSideProps } from "next" +import { Trans, useTranslation } from "next-i18next" +import { useRouter } from "next/router" +import type { ReactElement } from "react" + +import { CharacterFloatCard } from "~/components/common/CharacterFloatCard" +import { DashboardLayout } from "~/components/dashboard/DashboardLayout" +import { getServerSideProps as getLayoutServerSideProps } from "~/components/dashboard/DashboardLayout.server" +import { DashboardMain } from "~/components/dashboard/DashboardMain" +import { Image } from "~/components/ui/Image" +import { UniLink } from "~/components/ui/UniLink" +import { useDate } from "~/hooks/useDate" +import { DISCORD_LINK, GITHUB_LINK, TWITTER_LINK } from "~/lib/env" +import { getSiteLink } from "~/lib/helpers" import { serverSidePropsHandler } from "~/lib/server-side-props" import { useGetPagesBySite } from "~/queries/page" +import { useGetSite, useGetSites, useGetStat } from "~/queries/site" + import showcase from "../../../../data/showcase.json" -import { useGetSites } from "~/queries/site" -import { CharacterFloatCard } from "~/components/common/CharacterFloatCard" export const getServerSideProps: GetServerSideProps = serverSidePropsHandler( async (ctx) => { diff --git a/src/pages/dashboard/[subdomain]/pages.tsx b/src/pages/dashboard/[subdomain]/pages.tsx index e989e160..8012a44a 100644 --- a/src/pages/dashboard/[subdomain]/pages.tsx +++ b/src/pages/dashboard/[subdomain]/pages.tsx @@ -1,9 +1,9 @@ -import { DashboardLayout } from "~/components/dashboard/DashboardLayout" -import { PagesManager } from "~/components/dashboard/PagesManager" -import type { ReactElement } from "react" -import { useTranslation } from "next-i18next" -import { getServerSideProps as getLayoutServerSideProps } from "~/components/dashboard/DashboardLayout.server" import { GetServerSideProps } from "next" +import type { ReactElement } from "react" + +import { DashboardLayout } from "~/components/dashboard/DashboardLayout" +import { getServerSideProps as getLayoutServerSideProps } from "~/components/dashboard/DashboardLayout.server" +import { PagesManager } from "~/components/dashboard/PagesManager" import { serverSidePropsHandler } from "~/lib/server-side-props" export const getServerSideProps: GetServerSideProps = serverSidePropsHandler( diff --git a/src/pages/dashboard/[subdomain]/posts.tsx b/src/pages/dashboard/[subdomain]/posts.tsx index 3648ff09..ae09d358 100644 --- a/src/pages/dashboard/[subdomain]/posts.tsx +++ b/src/pages/dashboard/[subdomain]/posts.tsx @@ -1,5 +1,6 @@ import { GetServerSideProps } from "next" import type { ReactElement } from "react" + import { DashboardLayout } from "~/components/dashboard/DashboardLayout" import { getServerSideProps as getLayoutServerSideProps } from "~/components/dashboard/DashboardLayout.server" import { PagesManager } from "~/components/dashboard/PagesManager" diff --git a/src/pages/dashboard/[subdomain]/settings/css.tsx b/src/pages/dashboard/[subdomain]/settings/css.tsx index 4dbac4af..dadbc08f 100644 --- a/src/pages/dashboard/[subdomain]/settings/css.tsx +++ b/src/pages/dashboard/[subdomain]/settings/css.tsx @@ -1,18 +1,18 @@ +import { GetServerSideProps } from "next" +import { useTranslation } from "next-i18next" import { useRouter } from "next/router" import { useEffect, useState } from "react" +import type { ReactElement } from "react" import toast from "react-hot-toast" + +import { MonacoEditor } from "~/components/common/Monaco" import { DashboardLayout } from "~/components/dashboard/DashboardLayout" +import { getServerSideProps as getLayoutServerSideProps } from "~/components/dashboard/DashboardLayout.server" import { SettingsLayout } from "~/components/dashboard/SettingsLayout" import { Button } from "~/components/ui/Button" -import { useGetSite, useUpdateSite } from "~/queries/site" - import { FieldLabel } from "~/components/ui/FieldLabel" -import type { ReactElement } from "react" -import { useTranslation } from "next-i18next" -import { getServerSideProps as getLayoutServerSideProps } from "~/components/dashboard/DashboardLayout.server" -import { GetServerSideProps } from "next" import { serverSidePropsHandler } from "~/lib/server-side-props" -import { MonacoEditor } from "~/components/common/Monaco" +import { useGetSite, useUpdateSite } from "~/queries/site" export const getServerSideProps: GetServerSideProps = serverSidePropsHandler( async (ctx) => { diff --git a/src/pages/dashboard/[subdomain]/settings/domains.tsx b/src/pages/dashboard/[subdomain]/settings/domains.tsx index 694de805..e1b44180 100644 --- a/src/pages/dashboard/[subdomain]/settings/domains.tsx +++ b/src/pages/dashboard/[subdomain]/settings/domains.tsx @@ -1,23 +1,25 @@ +import { GetServerSideProps } from "next" +import { useTranslation } from "next-i18next" import { useRouter } from "next/router" -import { useCallback, useEffect, useState } from "react" +import { useEffect, useState } from "react" +import type { ReactElement } from "react" import { useForm } from "react-hook-form" import toast from "react-hot-toast" + +import { useAccountState, useUpgradeAccountModal } from "@crossbell/connect-kit" + import { DashboardLayout } from "~/components/dashboard/DashboardLayout" +import { getServerSideProps as getLayoutServerSideProps } from "~/components/dashboard/DashboardLayout.server" import { SettingsLayout } from "~/components/dashboard/SettingsLayout" import { Button } from "~/components/ui/Button" import { Input } from "~/components/ui/Input" -import { OUR_DOMAIN, APP_NAME } from "~/lib/env" -import { useGetSite, useUpdateSite } from "~/queries/site" -import { useAccountState, useUpgradeAccountModal } from "@crossbell/connect-kit" import { UniLink } from "~/components/ui/UniLink" -import { getSiteLink } from "~/lib/helpers" -import type { ReactElement } from "react" import { useUserRole } from "~/hooks/useUserRole" -import { useTranslation } from "next-i18next" -import { getServerSideProps as getLayoutServerSideProps } from "~/components/dashboard/DashboardLayout.server" -import { GetServerSideProps } from "next" +import { OUR_DOMAIN } from "~/lib/env" +import { getSiteLink } from "~/lib/helpers" import { serverSidePropsHandler } from "~/lib/server-side-props" import { checkDomain } from "~/models/site.model" +import { useGetSite, useUpdateSite } from "~/queries/site" export const getServerSideProps: GetServerSideProps = serverSidePropsHandler( async (ctx) => { diff --git a/src/pages/dashboard/[subdomain]/settings/general.tsx b/src/pages/dashboard/[subdomain]/settings/general.tsx index 97e2669e..9b72d4d5 100644 --- a/src/pages/dashboard/[subdomain]/settings/general.tsx +++ b/src/pages/dashboard/[subdomain]/settings/general.tsx @@ -1,20 +1,21 @@ -import { Button } from "~/components/ui/Button" -import { Input } from "~/components/ui/Input" -import { useEffect, useState } from "react" -import toast from "react-hot-toast" -import { SettingsLayout } from "~/components/dashboard/SettingsLayout" -import { useRouter } from "next/router" -import { DashboardLayout } from "~/components/dashboard/DashboardLayout" -import { useForm, Controller } from "react-hook-form" -import { useGetSite, useUpdateSite } from "~/queries/site" -import { UniLink } from "~/components/ui/UniLink" -import { ImageUploader } from "~/components/ui/ImageUploader" -import { toIPFS } from "~/lib/ipfs-parser" -import type { ReactElement } from "react" -import { useTranslation, Trans } from "next-i18next" -import { getServerSideProps as getLayoutServerSideProps } from "~/components/dashboard/DashboardLayout.server" import { GetServerSideProps } from "next" +import { Trans, useTranslation } from "next-i18next" +import { useRouter } from "next/router" +import { useEffect, useState } from "react" +import type { ReactElement } from "react" +import { Controller, useForm } from "react-hook-form" +import toast from "react-hot-toast" + +import { DashboardLayout } from "~/components/dashboard/DashboardLayout" +import { getServerSideProps as getLayoutServerSideProps } from "~/components/dashboard/DashboardLayout.server" +import { SettingsLayout } from "~/components/dashboard/SettingsLayout" +import { Button } from "~/components/ui/Button" +import { ImageUploader } from "~/components/ui/ImageUploader" +import { Input } from "~/components/ui/Input" +import { UniLink } from "~/components/ui/UniLink" +import { toIPFS } from "~/lib/ipfs-parser" import { serverSidePropsHandler } from "~/lib/server-side-props" +import { useGetSite, useUpdateSite } from "~/queries/site" export const getServerSideProps: GetServerSideProps = serverSidePropsHandler( async (ctx) => { diff --git a/src/pages/dashboard/[subdomain]/settings/navigation.tsx b/src/pages/dashboard/[subdomain]/settings/navigation.tsx index 3de6dbdd..ca04997b 100644 --- a/src/pages/dashboard/[subdomain]/settings/navigation.tsx +++ b/src/pages/dashboard/[subdomain]/settings/navigation.tsx @@ -1,20 +1,21 @@ +import equal from "fast-deep-equal" +import { nanoid } from "nanoid" +import { GetServerSideProps } from "next" +import { useTranslation } from "next-i18next" +import { useRouter } from "next/router" +import { ChangeEvent, FormEvent, useEffect, useMemo, useState } from "react" +import type { ReactElement } from "react" +import toast from "react-hot-toast" +import { ReactSortable } from "react-sortablejs" + +import { DashboardLayout } from "~/components/dashboard/DashboardLayout" +import { getServerSideProps as getLayoutServerSideProps } from "~/components/dashboard/DashboardLayout.server" +import { SettingsLayout } from "~/components/dashboard/SettingsLayout" import { Button } from "~/components/ui/Button" import { Input } from "~/components/ui/Input" -import { ChangeEvent, FormEvent, useEffect, useMemo, useState } from "react" -import toast from "react-hot-toast" -import { SettingsLayout } from "~/components/dashboard/SettingsLayout" -import { useRouter } from "next/router" -import { DashboardLayout } from "~/components/dashboard/DashboardLayout" -import { SiteNavigationItem } from "~/lib/types" -import { nanoid } from "nanoid" -import { ReactSortable } from "react-sortablejs" -import equal from "fast-deep-equal" -import { useGetSite, useUpdateSite } from "~/queries/site" -import type { ReactElement } from "react" -import { useTranslation } from "next-i18next" -import { getServerSideProps as getLayoutServerSideProps } from "~/components/dashboard/DashboardLayout.server" -import { GetServerSideProps } from "next" import { serverSidePropsHandler } from "~/lib/server-side-props" +import { SiteNavigationItem } from "~/lib/types" +import { useGetSite, useUpdateSite } from "~/queries/site" export const getServerSideProps: GetServerSideProps = serverSidePropsHandler( async (ctx) => { diff --git a/src/pages/dashboard/[subdomain]/settings/operator.tsx b/src/pages/dashboard/[subdomain]/settings/operator.tsx index 570583ff..0487361f 100644 --- a/src/pages/dashboard/[subdomain]/settings/operator.tsx +++ b/src/pages/dashboard/[subdomain]/settings/operator.tsx @@ -1,27 +1,29 @@ +import { GetServerSideProps } from "next" +import { useTranslation } from "next-i18next" +import { useRouter } from "next/router" +import { useEffect, useState } from "react" +import type { ReactElement } from "react" +import toast from "react-hot-toast" + +import { useAccountState, useUpgradeAccountModal } from "@crossbell/connect-kit" +import { Dialog } from "@headlessui/react" + +import { CharacterCard } from "~/components/common/CharacterCard" +import { DashboardLayout } from "~/components/dashboard/DashboardLayout" +import { getServerSideProps as getLayoutServerSideProps } from "~/components/dashboard/DashboardLayout.server" +import { SettingsLayout } from "~/components/dashboard/SettingsLayout" import { Button } from "~/components/ui/Button" import { Input } from "~/components/ui/Input" -import { useEffect, useState } from "react" -import toast from "react-hot-toast" -import { SettingsLayout } from "~/components/dashboard/SettingsLayout" -import { useRouter } from "next/router" -import { DashboardLayout } from "~/components/dashboard/DashboardLayout" +import { UniLink } from "~/components/ui/UniLink" +import { useUserRole } from "~/hooks/useUserRole" +import { getSiteLink } from "~/lib/helpers" +import { serverSidePropsHandler } from "~/lib/server-side-props" import { - useGetSite, - useGetOperators, useAddOperator, + useGetOperators, + useGetSite, useRemoveOperator, } from "~/queries/site" -import { Dialog } from "@headlessui/react" -import { CharacterCard } from "~/components/common/CharacterCard" -import { useAccountState, useUpgradeAccountModal } from "@crossbell/connect-kit" -import { UniLink } from "~/components/ui/UniLink" -import { getSiteLink } from "~/lib/helpers" -import type { ReactElement } from "react" -import { useUserRole } from "~/hooks/useUserRole" -import { useTranslation } from "next-i18next" -import { getServerSideProps as getLayoutServerSideProps } from "~/components/dashboard/DashboardLayout.server" -import { GetServerSideProps } from "next" -import { serverSidePropsHandler } from "~/lib/server-side-props" export const getServerSideProps: GetServerSideProps = serverSidePropsHandler( async (ctx) => { diff --git a/src/pages/dashboard/[subdomain]/settings/social-platforms.tsx b/src/pages/dashboard/[subdomain]/settings/social-platforms.tsx index 4fa6468b..886f8053 100644 --- a/src/pages/dashboard/[subdomain]/settings/social-platforms.tsx +++ b/src/pages/dashboard/[subdomain]/settings/social-platforms.tsx @@ -1,22 +1,23 @@ +import equal from "fast-deep-equal" +import { nanoid } from "nanoid" +import { GetServerSideProps } from "next" +import { Trans, useTranslation } from "next-i18next" +import { useRouter } from "next/router" +import { ChangeEvent, FormEvent, useEffect, useMemo, useState } from "react" +import type { ReactElement } from "react" +import toast from "react-hot-toast" +import { ReactSortable } from "react-sortablejs" + +import { DashboardLayout } from "~/components/dashboard/DashboardLayout" +import { getServerSideProps as getLayoutServerSideProps } from "~/components/dashboard/DashboardLayout.server" +import { SettingsLayout } from "~/components/dashboard/SettingsLayout" +import { Platform } from "~/components/site/Platform" import { Button } from "~/components/ui/Button" import { Input } from "~/components/ui/Input" -import { ChangeEvent, FormEvent, useEffect, useMemo, useState } from "react" -import toast from "react-hot-toast" -import { SettingsLayout } from "~/components/dashboard/SettingsLayout" -import { useRouter } from "next/router" -import { DashboardLayout } from "~/components/dashboard/DashboardLayout" -import { Profile } from "~/lib/types" -import { nanoid } from "nanoid" -import { ReactSortable } from "react-sortablejs" -import equal from "fast-deep-equal" -import { useGetSite, useUpdateSite } from "~/queries/site" -import type { ReactElement } from "react" import { UniLink } from "~/components/ui/UniLink" -import { Platform } from "~/components/site/Platform" -import { useTranslation, Trans } from "next-i18next" -import { getServerSideProps as getLayoutServerSideProps } from "~/components/dashboard/DashboardLayout.server" -import { GetServerSideProps } from "next" import { serverSidePropsHandler } from "~/lib/server-side-props" +import { Profile } from "~/lib/types" +import { useGetSite, useUpdateSite } from "~/queries/site" export const getServerSideProps: GetServerSideProps = serverSidePropsHandler( async (ctx) => { diff --git a/src/pages/dashboard/[subdomain]/tokens.tsx b/src/pages/dashboard/[subdomain]/tokens.tsx index c0e58864..0932dece 100644 --- a/src/pages/dashboard/[subdomain]/tokens.tsx +++ b/src/pages/dashboard/[subdomain]/tokens.tsx @@ -1,24 +1,23 @@ -import { DashboardLayout } from "~/components/dashboard/DashboardLayout" -import { DashboardMain } from "~/components/dashboard/DashboardMain" -import type { ReactElement } from "react" -import { useDate } from "~/hooks/useDate" -import { useTranslation } from "next-i18next" -import { getServerSideProps as getLayoutServerSideProps } from "~/components/dashboard/DashboardLayout.server" import { GetServerSideProps } from "next" -import { serverSidePropsHandler } from "~/lib/server-side-props" -import { - useAccountState, - useAccountBalance, - useWalletClaimCSBModal, - useClaimCSBStatus, -} from "@crossbell/connect-kit" -import { useGetMiraBalance, useGetSite } from "~/queries/site" -import { Button } from "~/components/ui/Button" -import { MIRA_LINK } from "~/lib/env" -import { UniLink } from "~/components/ui/UniLink" +import { useTranslation } from "next-i18next" import { useRouter } from "next/router" +import type { ReactElement } from "react" + +import { + useAccountBalance, + useClaimCSBStatus, + useWalletClaimCSBModal, +} from "@crossbell/connect-kit" + +import { DashboardLayout } from "~/components/dashboard/DashboardLayout" +import { getServerSideProps as getLayoutServerSideProps } from "~/components/dashboard/DashboardLayout.server" +import { DashboardMain } from "~/components/dashboard/DashboardMain" +import { Button } from "~/components/ui/Button" +import { UniLink } from "~/components/ui/UniLink" +import { MIRA_LINK } from "~/lib/env" import { getSiteLink } from "~/lib/helpers" -import { Tooltip } from "~/components/ui/Tooltip" +import { serverSidePropsHandler } from "~/lib/server-side-props" +import { useGetMiraBalance, useGetSite } from "~/queries/site" export const getServerSideProps: GetServerSideProps = serverSidePropsHandler( async (ctx) => { diff --git a/src/pages/dashboard/index.tsx b/src/pages/dashboard/index.tsx index 89d577e9..61ef438a 100644 --- a/src/pages/dashboard/index.tsx +++ b/src/pages/dashboard/index.tsx @@ -1,12 +1,14 @@ -import { useAccountSites } from "~/queries/site" -import { useEffect } from "react" import { useRouter } from "next/router" +import { useEffect } from "react" + import { useAccountState, - useWalletMintNewCharacterModal, useConnectModal, + useWalletMintNewCharacterModal, } from "@crossbell/connect-kit" +import { useAccountSites } from "~/queries/site" + export default function Dashboard() { const router = useRouter() const userSites = useAccountSites() diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 9f9b4bf4..7191e399 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,34 +1,40 @@ import { GetServerSideProps } from "next" -import { ReactElement, useState } from "react" -import { MainLayout } from "~/components/main/MainLayout" -import { UniLink } from "~/components/ui/UniLink" -import { Button } from "~/components/ui/Button" -import { useAccountState, useConnectedAction } from "@crossbell/connect-kit" -import { useRefCallback } from "@crossbell/util-hooks" +import { Trans, useTranslation } from "next-i18next" +import { serverSideTranslations } from "next-i18next/serverSideTranslations" import { useRouter } from "next/router" -import { GITHUB_LINK, CSB_SCAN } from "~/lib/env" -import { getSiteLink } from "~/lib/helpers" -import { Link, Element } from "react-scroll" -import { Image } from "~/components/ui/Image" -import { dehydrate, QueryClient } from "@tanstack/react-query" -import { prefetchGetSites } from "~/queries/site.server" -import { useGetSites } from "~/queries/site" -import showcase from "../../data/showcase.json" -import { CharacterFloatCard } from "~/components/common/CharacterFloatCard" -import { useAccountSites, useSubscribeToSites } from "~/queries/site" -import { RssIcon } from "@heroicons/react/24/outline" -import { Tooltip } from "~/components/ui/Tooltip" +import { ReactElement, useState } from "react" +import { Element, Link } from "react-scroll" + +import { useAccountState, useConnectedAction } from "@crossbell/connect-kit" import { + CrossbellChainLogo, XCharLogo, XFeedLogo, - XSyncLogo, XShopLogo, - CrossbellChainLogo, + XSyncLogo, } from "@crossbell/ui" -import { useTranslation, Trans } from "next-i18next" -import { serverSideTranslations } from "next-i18next/serverSideTranslations" -import { languageDetector } from "~/lib/language-detector" +import { useRefCallback } from "@crossbell/util-hooks" +import { RssIcon } from "@heroicons/react/24/outline" +import { QueryClient, dehydrate } from "@tanstack/react-query" + +import { CharacterFloatCard } from "~/components/common/CharacterFloatCard" import { Logo } from "~/components/common/Logo" +import { MainLayout } from "~/components/main/MainLayout" +import { Button } from "~/components/ui/Button" +import { Image } from "~/components/ui/Image" +import { Tooltip } from "~/components/ui/Tooltip" +import { UniLink } from "~/components/ui/UniLink" +import { CSB_SCAN, GITHUB_LINK } from "~/lib/env" +import { getSiteLink } from "~/lib/helpers" +import { languageDetector } from "~/lib/language-detector" +import { + useAccountSites, + useGetSites, + useSubscribeToSites, +} from "~/queries/site" +import { prefetchGetSites } from "~/queries/site.server" + +import showcase from "../../data/showcase.json" export const getServerSideProps: GetServerSideProps = async (ctx) => { const queryClient = new QueryClient() diff --git a/src/pages/search.tsx b/src/pages/search.tsx index 0eb1a186..bbb7d27f 100644 --- a/src/pages/search.tsx +++ b/src/pages/search.tsx @@ -1,16 +1,18 @@ import { GetServerSideProps } from "next" -import { ReactElement, useState } from "react" -import { MainLayout } from "~/components/main/MainLayout" -import { dehydrate, QueryClient } from "@tanstack/react-query" -import { prefetchGetSites } from "~/queries/site.server" -import showcase from "../../data/showcase.json" -import topics from "../../data/topics.json" import { serverSideTranslations } from "next-i18next/serverSideTranslations" -import { languageDetector } from "~/lib/language-detector" -import { MainFeed } from "~/components/main/MainFeed" -import { MainSidebar } from "~/components/main/MainSidebar" import { useRouter } from "next/router" +import { ReactElement } from "react" + +import { QueryClient, dehydrate } from "@tanstack/react-query" + import { SearchInput } from "~/components/common/SearchInput" +import { MainFeed } from "~/components/main/MainFeed" +import { MainLayout } from "~/components/main/MainLayout" +import { MainSidebar } from "~/components/main/MainSidebar" +import { languageDetector } from "~/lib/language-detector" +import { prefetchGetSites } from "~/queries/site.server" + +import showcase from "../../data/showcase.json" export const getServerSideProps: GetServerSideProps = async (ctx) => { const queryClient = new QueryClient() diff --git a/src/pages/topic/[topic].tsx b/src/pages/topic/[topic].tsx index 636fe815..7a963be9 100644 --- a/src/pages/topic/[topic].tsx +++ b/src/pages/topic/[topic].tsx @@ -1,15 +1,18 @@ import { GetServerSideProps } from "next" -import { ReactElement, useState } from "react" +import { serverSideTranslations } from "next-i18next/serverSideTranslations" +import { useRouter } from "next/router" +import { ReactElement } from "react" + +import { QueryClient, dehydrate } from "@tanstack/react-query" + +import { MainFeed } from "~/components/main/MainFeed" import { MainLayout } from "~/components/main/MainLayout" -import { dehydrate, QueryClient } from "@tanstack/react-query" +import { MainSidebar } from "~/components/main/MainSidebar" +import { languageDetector } from "~/lib/language-detector" import { prefetchGetSites } from "~/queries/site.server" + import showcase from "../../../data/showcase.json" import topics from "../../../data/topics.json" -import { serverSideTranslations } from "next-i18next/serverSideTranslations" -import { languageDetector } from "~/lib/language-detector" -import { MainFeed } from "~/components/main/MainFeed" -import { MainSidebar } from "~/components/main/MainSidebar" -import { useRouter } from "next/router" export const getServerSideProps: GetServerSideProps = async (ctx) => { const queryClient = new QueryClient() diff --git a/src/queries/home.server.ts b/src/queries/home.server.ts index 370a1f2f..a28250f1 100644 --- a/src/queries/home.server.ts +++ b/src/queries/home.server.ts @@ -1,6 +1,6 @@ import { QueryClient } from "@tanstack/react-query" -import { cacheGet } from "~/lib/redis.server" +import { cacheGet } from "~/lib/redis.server" import * as homeModel from "~/models/home.model" export const prefetchGetFeed = async ( diff --git a/src/queries/home.ts b/src/queries/home.ts index 9ac6d9a4..4728f803 100644 --- a/src/queries/home.ts +++ b/src/queries/home.ts @@ -1,4 +1,4 @@ -import { useInfiniteQuery, useQuery } from "@tanstack/react-query" +import { useInfiniteQuery } from "@tanstack/react-query" import * as homeModel from "~/models/home.model" diff --git a/src/queries/page.server.ts b/src/queries/page.server.ts index 0daa3c54..1af28f51 100644 --- a/src/queries/page.server.ts +++ b/src/queries/page.server.ts @@ -1,6 +1,7 @@ -import * as pageModel from "~/models/page.model" import { QueryClient } from "@tanstack/react-query" + import { cacheGet } from "~/lib/redis.server" +import * as pageModel from "~/models/page.model" import { getIdBySlug } from "~/pages/api/slug2id" import { getSummary } from "~/pages/api/summary" diff --git a/src/queries/page.ts b/src/queries/page.ts index 290b0fa5..8914b6e1 100644 --- a/src/queries/page.ts +++ b/src/queries/page.ts @@ -1,20 +1,20 @@ -import { - useQuery, - useMutation, - useQueryClient, - useInfiniteQuery, -} from "@tanstack/react-query" import { useAccountState, - usePostNoteForNote, - useMintNote, - useToggleLikeNote, useIsNoteLiked, - useNoteLikeList, + useMintNote, useNoteLikeCount, + useNoteLikeList, + usePostNoteForNote, + useToggleLikeNote, } from "@crossbell/connect-kit" -import { useRefCallback } from "@crossbell/util-hooks" import { useContract } from "@crossbell/contract" +import { useRefCallback } from "@crossbell/util-hooks" +import { + useInfiniteQuery, + useMutation, + useQuery, + useQueryClient, +} from "@tanstack/react-query" import * as pageModel from "~/models/page.model" diff --git a/src/queries/site.server.ts b/src/queries/site.server.ts index ed9b2fd5..017d0e30 100644 --- a/src/queries/site.server.ts +++ b/src/queries/site.server.ts @@ -1,6 +1,7 @@ -import * as siteModel from "~/models/site.model" import { QueryClient } from "@tanstack/react-query" + import { cacheGet } from "~/lib/redis.server" +import * as siteModel from "~/models/site.model" export const prefetchGetSite = async ( input: string, diff --git a/src/queries/site.ts b/src/queries/site.ts index 42c0821e..105f7c45 100644 --- a/src/queries/site.ts +++ b/src/queries/site.ts @@ -1,18 +1,19 @@ -import { - useQuery, - useMutation, - useQueryClient, - useInfiniteQuery, -} from "@tanstack/react-query" -import { useContract } from "@crossbell/contract" import { useAccountState, useFollowCharacter, useFollowCharacters, useUnfollowCharacter, } from "@crossbell/connect-kit" +import { useContract } from "@crossbell/contract" +import { + useInfiniteQuery, + useMutation, + useQuery, + useQueryClient, +} from "@tanstack/react-query" import * as siteModel from "~/models/site.model" + import { useUnidata } from "./unidata" export const useAccountSites = () => { diff --git a/src/queries/unidata.server.ts b/src/queries/unidata.server.ts index f690c46b..b673aed6 100644 --- a/src/queries/unidata.server.ts +++ b/src/queries/unidata.server.ts @@ -1,9 +1,10 @@ import Unidata from "unidata.js" + import { IPFS_GATEWAY } from "../lib/env" import { - MORALIS_WEB3_API_KEY, ALCHEMY_ETHEREUM_API_KEY, ALCHEMY_POLYGON_API_KEY, + MORALIS_WEB3_API_KEY, NFTSCAN_API_KEY, OPENSEA_API_KEY, POAP_API_KEY, diff --git a/src/queries/unidata.ts b/src/queries/unidata.ts index 75c17d1b..8082e82c 100644 --- a/src/queries/unidata.ts +++ b/src/queries/unidata.ts @@ -1,5 +1,6 @@ import Unidata from "unidata.js" import { useAccount } from "wagmi" + import { IPFS_GATEWAY } from "../lib/env" let unidata: Unidata