From 88eef8d01944882aade2a496471617a1343b7b90 Mon Sep 17 00:00:00 2001 From: master1lan <278457198@qq.com> Date: Tue, 10 Jan 2023 20:06:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E7=9A=84=E6=96=87=E4=BB=B6=E7=BB=93?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 1 + package.json | 5 + pnpm-lock.yaml | 348 +++++++++++++++++- src/components/image/index.tsx | 16 +- src/main.tsx | 7 +- src/routers/layout/header.tsx | 4 +- src/routers/layout/layout.module.less | 74 +--- src/routers/layout/{nav.tsx => nav/index.tsx} | 9 +- src/routers/layout/nav/nav.module.less | 66 ++++ src/routers/video/item/icon.tsx | 14 + src/routers/video/item/index.tsx | 59 +++ src/routers/video/item/item.module.less | 143 +++++++ src/routers/video/item/videodata.tsx | 31 ++ src/routers/video/item/videoinfo.tsx | 71 ++++ src/routers/video/masonry.tsx | 24 +- src/routers/video/masonryItem.tsx | 156 -------- src/routers/video/video.module.less | 146 +------- vite.config.ts | 20 +- 18 files changed, 776 insertions(+), 418 deletions(-) rename src/routers/layout/{nav.tsx => nav/index.tsx} (96%) create mode 100644 src/routers/layout/nav/nav.module.less create mode 100644 src/routers/video/item/icon.tsx create mode 100644 src/routers/video/item/index.tsx create mode 100644 src/routers/video/item/item.module.less create mode 100644 src/routers/video/item/videodata.tsx create mode 100644 src/routers/video/item/videoinfo.tsx delete mode 100644 src/routers/video/masonryItem.tsx diff --git a/index.html b/index.html index b67c4e2..69dec79 100644 --- a/index.html +++ b/index.html @@ -6,6 +6,7 @@ + eoefans-web diff --git a/package.json b/package.json index efebc9e..3dd129b 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "version": "0.0.0", "type": "module", "scripts": { + "postinstall": "patch-package", "dev": "vite", "build": "tsc && vite build", "preview": "vite preview", @@ -21,9 +22,11 @@ "dayjs": "^1.11.7", "imagesloaded": "^5.0.0", "intersection-observer": "^0.12.2", + "loading-attribute-polyfill": "^2.1.0", "masonic": "^3.7.0", "nanoid": "^4.0.0", "normalize.css": "^8.0.1", + "patch-package": "^6.5.1", "react": "^18.2.0", "react-dom": "^18.2.0", "react-flip-toolkit": "^7.0.17", @@ -40,9 +43,11 @@ "@types/react": "^18.0.26", "@types/react-dom": "^18.0.9", "@types/react-lazy-load-image-component": "^1.5.2", + "@vitejs/plugin-legacy": "^3.0.1", "@vitejs/plugin-react-swc": "^3.0.0", "less": "^4.1.3", "rollup-plugin-visualizer": "^5.9.0", + "terser": ">=5.4.0 <6.0.0", "typescript": "^4.9.3", "vite": "^4.0.0", "vite-plugin-compression": "^0.5.1" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 10bd8fc..eec62c1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,14 +17,17 @@ specifiers: '@types/react': ^18.0.26 '@types/react-dom': ^18.0.9 '@types/react-lazy-load-image-component': ^1.5.2 + '@vitejs/plugin-legacy': ^3.0.1 '@vitejs/plugin-react-swc': ^3.0.0 dayjs: ^1.11.7 imagesloaded: ^5.0.0 intersection-observer: ^0.12.2 less: ^4.1.3 + loading-attribute-polyfill: ^2.1.0 masonic: ^3.7.0 nanoid: ^4.0.0 normalize.css: ^8.0.1 + patch-package: ^6.5.1 react: ^18.2.0 react-dom: ^18.2.0 react-flip-toolkit: ^7.0.17 @@ -33,6 +36,7 @@ specifiers: react-router-dom: ^6.6.1 react-use: ^17.4.0 rollup-plugin-visualizer: ^5.9.0 + terser: '>=5.4.0 <6.0.0' typescript: ^4.9.3 vite: ^4.0.0 vite-plugin-compression: ^0.5.1 @@ -50,9 +54,11 @@ dependencies: dayjs: 1.11.7 imagesloaded: 5.0.0 intersection-observer: 0.12.2 + loading-attribute-polyfill: 2.1.0 masonic: 3.7.0_react@18.2.0 nanoid: 4.0.0 normalize.css: 8.0.1 + patch-package: 6.5.1 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 react-flip-toolkit: 7.0.17_biqbaboplfbrettd7655fr4n2y @@ -69,11 +75,13 @@ devDependencies: '@types/react': 18.0.26 '@types/react-dom': 18.0.10 '@types/react-lazy-load-image-component': 1.5.2 + '@vitejs/plugin-legacy': 3.0.1_terser@5.16.1+vite@4.0.3 '@vitejs/plugin-react-swc': 3.0.1_vite@4.0.3 less: 4.1.3 rollup-plugin-visualizer: 5.9.0 + terser: 5.16.1 typescript: 4.9.4 - vite: 4.0.3_dprl76twtlijnqpm3fdjsbkzqm + vite: 4.0.3_25ccpcpgpj6lg6lpj5keiqybuq vite-plugin-compression: 0.5.1_vite@4.0.3 packages: @@ -247,6 +255,11 @@ packages: regenerator-runtime: 0.13.11 dev: false + /@babel/standalone/7.20.12: + resolution: {integrity: sha512-hK/X+m1il3w1tYS4H8LDaGCEdiT47SVqEXY8RiEAgou26BystipSU8ZL6EvBR6t5l7lTv0ilBiChXWblKJ5iUA==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/template/7.20.7: resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} engines: {node: '>=6.9.0'} @@ -707,6 +720,13 @@ packages: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} + /@jridgewell/source-map/0.3.2: + resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==} + dependencies: + '@jridgewell/gen-mapping': 0.3.2 + '@jridgewell/trace-mapping': 0.3.17 + dev: true + /@jridgewell/sourcemap-codec/1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} @@ -1183,19 +1203,45 @@ packages: resolution: {integrity: sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==} dev: true + /@vitejs/plugin-legacy/3.0.1_terser@5.16.1+vite@4.0.3: + resolution: {integrity: sha512-XCtEjxoR3rmy000ujYRBp5kggWqzHz9+F20/yIMUWOzbvu0+KW1e14Fvb8h7SpNn+bfjGW1RiAs1Vrgb7Js+iQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + terser: ^5.4.0 + vite: ^4.0.0 + dependencies: + '@babel/standalone': 7.20.12 + core-js: 3.27.1 + magic-string: 0.27.0 + regenerator-runtime: 0.13.11 + systemjs: 6.13.0 + terser: 5.16.1 + vite: 4.0.3_25ccpcpgpj6lg6lpj5keiqybuq + dev: true + /@vitejs/plugin-react-swc/3.0.1_vite@4.0.3: resolution: {integrity: sha512-3GQ2oruZO9j8dSHcI0MUeOZQBhjYyDQsF/pKY4Px+CJxn0M16OhgFeEzUjeuwci4zhhjoNIDE9aFNaV5GMQ09g==} peerDependencies: vite: ^4 dependencies: '@swc/core': 1.3.24 - vite: 4.0.3_dprl76twtlijnqpm3fdjsbkzqm + vite: 4.0.3_25ccpcpgpj6lg6lpj5keiqybuq dev: true /@xobotyi/scrollbar-width/1.9.5: resolution: {integrity: sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==} dev: false + /@yarnpkg/lockfile/1.1.0: + resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} + dev: false + + /acorn/8.8.1: + resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + /ansi-regex/5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -1212,7 +1258,11 @@ packages: engines: {node: '>=8'} dependencies: color-convert: 2.0.1 - dev: true + + /at-least-node/1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + dev: false /babel-plugin-macros/3.1.0: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} @@ -1223,6 +1273,24 @@ packages: resolve: 1.22.1 dev: false + /balanced-match/1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: false + + /brace-expansion/1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: false + + /braces/3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: false + /browserslist/4.21.4: resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -1233,6 +1301,10 @@ packages: node-releases: 2.0.8 update-browserslist-db: 1.0.10_browserslist@4.21.4 + /buffer-from/1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: true + /callsites/3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -1255,7 +1327,10 @@ packages: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true + + /ci-info/2.0.0: + resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} + dev: false /cliui/8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} @@ -1281,15 +1356,21 @@ packages: engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 - dev: true /color-name/1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} /color-name/1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + /commander/2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: true + /concat-map/0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: false + /convert-source-map/1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} @@ -1305,6 +1386,11 @@ packages: toggle-selection: 1.0.6 dev: false + /core-js/3.27.1: + resolution: {integrity: sha512-GutwJLBChfGCpwwhbYoqfv03LAfmiz7e7D/BNxzeMxwQf10GRSzqiOjx7AmtEk+heiD/JWmBuyBPgFtx0Sg1ww==} + requiresBuild: true + dev: true + /cosmiconfig/7.1.0: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} engines: {node: '>=10'} @@ -1316,6 +1402,17 @@ packages: yaml: 1.10.2 dev: false + /cross-spawn/6.0.5: + resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} + engines: {node: '>=4.8'} + dependencies: + nice-try: 1.0.5 + path-key: 2.0.1 + semver: 5.7.1 + shebang-command: 1.2.0 + which: 1.3.1 + dev: false + /css-in-js-utils/3.1.0: resolution: {integrity: sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==} dependencies: @@ -1463,10 +1560,23 @@ packages: resolution: {integrity: sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==} dev: false + /fill-range/7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: false + /find-root/1.1.0: resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} dev: false + /find-yarn-workspace-root/2.0.0: + resolution: {integrity: sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==} + dependencies: + micromatch: 4.0.5 + dev: false + /flip-toolkit/7.0.17: resolution: {integrity: sha512-bybUdLNbC80F0+v+t3TBfxEAMVGhvXLi3pZ+qTtr4aCu/Y/5YQimMij0xJKT1qtz4SO31V4zftIgaTJdCCFiHA==} engines: {node: '>=8', npm: '>=5'} @@ -1483,6 +1593,20 @@ packages: universalify: 2.0.0 dev: true + /fs-extra/9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.10 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: false + + /fs.realpath/1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: false + /fsevents/2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -1503,6 +1627,17 @@ packages: engines: {node: 6.* || 8.* || >= 10.*} dev: true + /glob/7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: false + /globals/11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} @@ -1510,7 +1645,6 @@ packages: /graceful-fs/4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} requiresBuild: true - dev: true /has-flag/3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} @@ -1519,7 +1653,6 @@ packages: /has-flag/4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - dev: true /has/1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} @@ -1567,6 +1700,17 @@ packages: resolve-from: 4.0.0 dev: false + /inflight/1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: false + + /inherits/2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: false + /inline-style-prefixer/6.0.4: resolution: {integrity: sha512-FwXmZC2zbeeS7NzGjJ6pAiqRhXR0ugUShSNb6GApMl6da0/XGc4MOJsoWAywia52EEWbXNSy0pzkwz/+Y+swSg==} dependencies: @@ -1582,6 +1726,13 @@ packages: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: false + /is-ci/2.0.0: + resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} + hasBin: true + dependencies: + ci-info: 2.0.0 + dev: false + /is-core-module/2.11.0: resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} dependencies: @@ -1591,13 +1742,17 @@ packages: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} hasBin: true - dev: true /is-fullwidth-code-point/3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} dev: true + /is-number/7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: false + /is-what/3.14.1: resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} dev: true @@ -1607,7 +1762,10 @@ packages: engines: {node: '>=8'} dependencies: is-docker: 2.2.1 - dev: true + + /isexe/2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: false /js-cookie/2.2.1: resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==} @@ -1636,7 +1794,12 @@ packages: universalify: 2.0.0 optionalDependencies: graceful-fs: 4.2.10 - dev: true + + /klaw-sync/6.0.0: + resolution: {integrity: sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==} + dependencies: + graceful-fs: 4.2.10 + dev: false /less/4.1.3: resolution: {integrity: sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==} @@ -1662,6 +1825,10 @@ packages: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: false + /loading-attribute-polyfill/2.1.0: + resolution: {integrity: sha512-TB2bt+g+L85zg4TVdKr3DIfVx6L1h62FvgvnfZ2mNlOtFtG5zq5BCS81HVCyhMFE0en/U4lieob8tRDziWtRhA==} + dev: false + /loose-envify/1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -1674,6 +1841,13 @@ packages: dependencies: yallist: 3.1.1 + /magic-string/0.27.0: + resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + /make-dir/2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} engines: {node: '>=6'} @@ -1709,6 +1883,14 @@ packages: resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} dev: false + /micromatch/4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: false + /mime/1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} @@ -1717,6 +1899,16 @@ packages: dev: true optional: true + /minimatch/3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: false + + /minimist/1.2.7: + resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} + dev: false + /ms/2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} @@ -1769,6 +1961,10 @@ packages: dev: true optional: true + /nice-try/1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + dev: false + /node-releases/2.0.8: resolution: {integrity: sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==} @@ -1781,6 +1977,20 @@ packages: engines: {node: '>=0.10.0'} dev: false + /once/1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: false + + /open/7.4.2: + resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + is-wsl: 2.2.0 + dev: false + /open/8.4.0: resolution: {integrity: sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==} engines: {node: '>=12'} @@ -1790,6 +2000,11 @@ packages: is-wsl: 2.2.0 dev: true + /os-tmpdir/1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + dev: false + /parent-module/1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -1812,6 +2027,37 @@ packages: engines: {node: '>= 0.10'} dev: true + /patch-package/6.5.1: + resolution: {integrity: sha512-I/4Zsalfhc6bphmJTlrLoOcAF87jcxko4q0qsv4bGcurbr8IskEOtdnt9iCmsQVGL1B+iUhSQqweyTLJfCF9rA==} + engines: {node: '>=10', npm: '>5'} + hasBin: true + dependencies: + '@yarnpkg/lockfile': 1.1.0 + chalk: 4.1.2 + cross-spawn: 6.0.5 + find-yarn-workspace-root: 2.0.0 + fs-extra: 9.1.0 + is-ci: 2.0.0 + klaw-sync: 6.0.0 + minimist: 1.2.7 + open: 7.4.2 + rimraf: 2.7.1 + semver: 5.7.1 + slash: 2.0.0 + tmp: 0.0.33 + yaml: 1.10.2 + dev: false + + /path-is-absolute/1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: false + + /path-key/2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + dev: false + /path-parse/1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -1826,7 +2072,6 @@ packages: /picomatch/2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - dev: true /pify/4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} @@ -1989,7 +2234,6 @@ packages: /regenerator-runtime/0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} - dev: false /rematrix/0.2.2: resolution: {integrity: sha512-agFFS3RzrLXJl5LY5xg/xYyXvUuVAnkhgKO7RaO9J1Ssth6yvbO+PIiV67V59MB5NCdAK2flvGvNT4mdKVniFA==} @@ -2017,6 +2261,13 @@ packages: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + /rimraf/2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: false + /rollup-plugin-visualizer/5.9.0: resolution: {integrity: sha512-bbDOv47+Bw4C/cgs0czZqfm8L82xOZssk4ayZjG40y9zbXclNk7YikrZTDao6p7+HDiGxrN0b65SgZiVm9k1Cg==} engines: {node: '>=14'} @@ -2071,8 +2322,6 @@ packages: /semver/5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} hasBin: true - dev: true - optional: true /semver/6.3.0: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} @@ -2083,11 +2332,35 @@ packages: engines: {node: '>=6.9'} dev: false + /shebang-command/1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + dependencies: + shebang-regex: 1.0.0 + dev: false + + /shebang-regex/1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + dev: false + + /slash/2.0.0: + resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==} + engines: {node: '>=6'} + dev: false + /source-map-js/1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} dev: true + /source-map-support/0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: true + /source-map/0.5.6: resolution: {integrity: sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==} engines: {node: '>=0.10.0'} @@ -2169,21 +2442,49 @@ packages: engines: {node: '>=8'} dependencies: has-flag: 4.0.0 - dev: true /supports-preserve-symlinks-flag/1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + /systemjs/6.13.0: + resolution: {integrity: sha512-P3cgh2bpaPvAO2NE3uRp/n6hmk4xPX4DQf+UzTlCAycssKdqhp6hjw+ENWe+aUS7TogKRFtptMosTSFeC6R55g==} + dev: true + + /terser/5.16.1: + resolution: {integrity: sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==} + engines: {node: '>=10'} + hasBin: true + dependencies: + '@jridgewell/source-map': 0.3.2 + acorn: 8.8.1 + commander: 2.20.3 + source-map-support: 0.5.21 + dev: true + /throttle-debounce/3.0.1: resolution: {integrity: sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==} engines: {node: '>=10'} dev: false + /tmp/0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + dependencies: + os-tmpdir: 1.0.2 + dev: false + /to-fast-properties/2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} + /to-regex-range/5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: false + /toggle-selection/1.0.6: resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} dev: false @@ -2208,7 +2509,6 @@ packages: /universalify/2.0.0: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} - dev: true /update-browserslist-db/1.0.10_browserslist@4.21.4: resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} @@ -2228,12 +2528,12 @@ packages: chalk: 4.1.2 debug: 4.3.4 fs-extra: 10.1.0 - vite: 4.0.3_dprl76twtlijnqpm3fdjsbkzqm + vite: 4.0.3_25ccpcpgpj6lg6lpj5keiqybuq transitivePeerDependencies: - supports-color dev: true - /vite/4.0.3_dprl76twtlijnqpm3fdjsbkzqm: + /vite/4.0.3_25ccpcpgpj6lg6lpj5keiqybuq: resolution: {integrity: sha512-HvuNv1RdE7deIfQb8mPk51UKjqptO/4RXZ5yXSAvurd5xOckwS/gg8h9Tky3uSbnjYTgUm0hVCet1cyhKd73ZA==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -2264,10 +2564,18 @@ packages: postcss: 8.4.20 resolve: 1.22.1 rollup: 3.8.1 + terser: 5.16.1 optionalDependencies: fsevents: 2.3.2 dev: true + /which/1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: false + /wrap-ansi/7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -2277,6 +2585,10 @@ packages: strip-ansi: 6.0.1 dev: true + /wrappy/1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: false + /y18n/5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} diff --git a/src/components/image/index.tsx b/src/components/image/index.tsx index 6b258ea..5def04a 100644 --- a/src/components/image/index.tsx +++ b/src/components/image/index.tsx @@ -65,6 +65,7 @@ export default memo(function Image({ opacity: isLoaded ? 1.0 : 0.09, }} alt='' + loading='lazy' /> <>{observer && inView && once_callback(inView)} {children} @@ -76,14 +77,12 @@ export default memo(function Image({ export function ImageBasic({ url, - fallbackUrl = DefaultFallbackUrl, observer, callback, children, }: Omit & { children?: ReactElement; }) { - const real_fallback_url = fallbackUrl || DefaultFallbackUrl; const once_callback = useCallback(Once(callback!!), []); const { md } = useScreenSize(); return ( @@ -91,15 +90,16 @@ export function ImageBasic({ {({ inView, ref, entry }) => (
<>{observer && inView && once_callback(inView)} {children} diff --git a/src/main.tsx b/src/main.tsx index c135d60..9d0e1a7 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -3,8 +3,6 @@ import ReactDOM from "react-dom/client"; import { createBrowserRouter, RouterProvider } from "react-router-dom"; import VideoPage from "./routers/video"; import "./index.less"; -import "intersection-observer"; -import "./normalize.css"; import ReadPage from "./routers/read"; import Layout from "./routers/layout"; import PhotoPage from "./routers/photo"; @@ -14,6 +12,11 @@ import ScreenProview from "@components/proview/screenSize"; // Layout = lazy(() => import("./routers/layout")), // PhotoPage = lazy(() => import("./routers/photo")), // ErrorPage = lazy(() => import("./routers/error")); + +//ployfill +import "intersection-observer"; +import "./normalize.css"; +import "loading-attribute-polyfill"; const router = createBrowserRouter([ { path: "/", diff --git a/src/routers/layout/header.tsx b/src/routers/layout/header.tsx index 6fcd69a..2910be6 100644 --- a/src/routers/layout/header.tsx +++ b/src/routers/layout/header.tsx @@ -13,9 +13,9 @@ import styles from "./layout.module.less"; import { useFocus } from "./hooks"; export default function Header() { return ( -
+
- {/* */} +
); diff --git a/src/routers/layout/layout.module.less b/src/routers/layout/layout.module.less index 0a37ea9..e0bd230 100644 --- a/src/routers/layout/layout.module.less +++ b/src/routers/layout/layout.module.less @@ -1,3 +1,8 @@ +.header { + // transition: height 1s linear; +} + + .search-box { position: relative; margin: 0 8px; @@ -74,73 +79,4 @@ background-color: #f1f2f3; } } -} - - - -.nav { - position: relative; - overflow: hidden; - margin: 10px; - background-color: aquamarine; - - .navstack { - overflow-x: auto; - scrollbar-width: none; - -ms-overflow-style: none; - - &::-webkit-scrollbar { - display: none; - } - - @itemWidth: 80px; - @itemMarginHalfWidth: 8px; - @itemMarginHalfHeight: 4px; - // grid布局 - grid-template-columns: repeat(auto-fit, minmax(@itemWidth+2*@itemMarginHalfWidth, 1fr)); - - &>* { - margin: @itemMarginHalfHeight @itemMarginHalfWidth; - } - - &[data-showed=true] { - &>span:nth-last-child(2) { - display: none; - } - - &>div:last-child { - position: relative; - } - } - - &-filter-tag { - width: @itemWidth; - flex: 0 0 @itemWidth; - } - - .navlink { - text-decoration: none; - - &-active>div { - // background-color: ; - } - } - } - - &-right-show-btn { - justify-content: center; - margin: 0 !important; - position: absolute; - right: 0; - bottom: 0; - height: 40px; - display: flex; - justify-items: center; - align-items: center; - overflow: hidden; - background-color: #fff; - box-shadow: rgb(255 255 255) -11px 0px 12px 0px; - z-index: 1; - cursor: pointer; - } } \ No newline at end of file diff --git a/src/routers/layout/nav.tsx b/src/routers/layout/nav/index.tsx similarity index 96% rename from src/routers/layout/nav.tsx rename to src/routers/layout/nav/index.tsx index f925319..66726ee 100644 --- a/src/routers/layout/nav.tsx +++ b/src/routers/layout/nav/index.tsx @@ -19,7 +19,7 @@ import { restrictToParentElement, } from "@dnd-kit/modifiers"; import { nanoid } from "nanoid"; -import styles from "./layout.module.less"; +import styles from "./nav.module.less"; import { FC, useState, useEffect, useMemo, memo } from "react"; import { Pick } from "@utils/index"; import { Flipped, Flipper } from "react-flip-toolkit"; @@ -84,7 +84,8 @@ export default function Header_Nav() { alignItems='center' className={`${styles["navstack"]}`} style={{ - display: showed ? "grid" : "flex", + // display: showed ? "grid" : "flex", + flexWrap: showed ? "wrap" : "nowrap", }} data-showed={showed} > @@ -132,11 +133,11 @@ const NavItem: FC = memo((props) => { const { attributes, listeners, setNodeRef, transform, transition } = useSortable({ id: props.id }); const style = { - transform: CSS.Transform.toString(transform), + transform: CSS.Translate.toString(transform), transition, }; return ( - +
{props.type === "router" ? ( * { + margin: @itemMarginHalfHeight @itemMarginHalfWidth; + } + + &[data-showed=true] { + &>span:nth-last-child(2) { + display: none; + } + + &>div:last-child { + position: relative; + } + } + + &-filter-tag { + // width: @itemWidth; + // flex: 0 0 @itemWidth; + } + + .navlink { + text-decoration: none; + + &-active>div { + // background-color: ; + } + } + } + + &-right-show-btn { + justify-content: center; + margin: 0 !important; + position: absolute; + right: 0; + bottom: 0; + height: 40px; + display: flex; + justify-items: center; + align-items: center; + overflow: hidden; + background-color: #fff; + box-shadow: rgb(255 255 255) -11px 0px 12px 0px; + z-index: 1; + cursor: pointer; + } +} \ No newline at end of file diff --git a/src/routers/video/item/icon.tsx b/src/routers/video/item/icon.tsx new file mode 100644 index 0000000..03350ab --- /dev/null +++ b/src/routers/video/item/icon.tsx @@ -0,0 +1,14 @@ +import { FC } from "react"; +export const CoinIcon: FC<{ + height: number | string; + width?: number | string; +}> = ({ height, width = height }) => ( + + + +); diff --git a/src/routers/video/item/index.tsx b/src/routers/video/item/index.tsx new file mode 100644 index 0000000..230e5ea --- /dev/null +++ b/src/routers/video/item/index.tsx @@ -0,0 +1,59 @@ +import { ImageBasic } from "@components/image"; +import { FC } from "react"; +import { Link } from "@mui/material"; +import { VideoRouterImageCardType } from "../videotype"; +import styles from "./item.module.less"; +import { Omit, Pick } from "@utils/index"; +import { VideoData } from "./videodata"; +import { VideoInfo } from "./videoinfo"; + +export const VideoRouterImageCard: FC<{ data: VideoRouterImageCardType }> = ({ + data, +}) => { + const { pic, bvid } = data; + return ( +
+ + + + + + +
+ ); +}; diff --git a/src/routers/video/item/item.module.less b/src/routers/video/item/item.module.less new file mode 100644 index 0000000..cca42b8 --- /dev/null +++ b/src/routers/video/item/item.module.less @@ -0,0 +1,143 @@ +.video-section { + height: 100%; + display: flex; + flex-flow: column nowrap; + + &>:first-child { + flex: 1; + } + + .video-data { + transition: opacity .3s linear; + + *:hover+& { + opacity: 0; + } + + position: absolute; + left: 0; + bottom: 0; + width: 100%; + box-sizing: border-box; + padding: 16px 8px 6px; + border-bottom-left-radius: 8px; + border-bottom-right-radius: 8px; + display: flex; + justify-content: space-between; + align-items: center; + color: #fff; + font-size: 13px; + font-weight: 400; + background-image: linear-gradient(180deg, + rgba(0, 0, 0, 0) 0%, + rgba(0, 0, 0, .8) 100%); + + &-left { + flex: 1; + display: flex; + align-items: center; + + &>span { + font-size: 13px; + display: flex; + align-items: center; + + } + + &>span:not(:last-of-type) { + margin-right: 12px; + } + } + } + + .video-info { + + &>*:not(:first-child) { + margin-top: 5px; + } + + &>p { + color: #18191c; + // font-size: 15px; + cursor: pointer; + transition: color .2s linear; + height: 40px; + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + text-overflow: ellipsis; + line-break: anywhere; + -webkit-line-clamp: 2; + word-wrap: break-all; + + &:hover, + &:active { + color: #00aeec; + } + + &>a { + line-height: 1.25; + } + } + + .video-up { + display: flex; + align-items: stretch; + + &>*:not(:first-child) { + margin-left: 5px; + } + + &-desc { + font-size: 13px; + display: flex; + flex-flow: column nowrap; + justify-content: space-between; + cursor: default; + + &-data { + display: flex; + flex-flow: row nowrap; + overflow: hidden; + text-overflow: ellipsis; + + &>span { + white-space: nowrap; + display: flex; + align-items: center; + + &:not(:first-of-type) { + margin-left: 10px; + } + } + } + + + a { + + color: rgb(148, 153, 160); + cursor: pointer; + transition: color .2s linear; + + &:hover, + &:active { + color: #00aeec; + } + + &>span { + overflow: hidden; + text-overflow: ellipsis; + word-break: break-all; + + &:not(:first-of-type)::before { + content: '·'; + margin: 0 4px; + } + + } + } + } + + } + } +} \ No newline at end of file diff --git a/src/routers/video/item/videodata.tsx b/src/routers/video/item/videodata.tsx new file mode 100644 index 0000000..e946dd8 --- /dev/null +++ b/src/routers/video/item/videodata.tsx @@ -0,0 +1,31 @@ +import { useScreenSize } from "@components/proview/screenSize"; +import SlowMotionVideoSharpIcon from "@mui/icons-material/SlowMotionVideoSharp"; +import SubjectSharpIcon from "@mui/icons-material/SubjectSharp"; +import getFixedNumber from "@utils/number"; +import { getVideoTime } from "@utils/time"; +import { FC } from "react"; +import { VideoRouterImageCardType } from "../videotype"; +import styles from "./item.module.less"; +export const VideoData: FC< + Pick +> = (props) => { + const { view, danmaku, duration } = props; + const { sm } = useScreenSize(); + return ( +
+
+ + + {getFixedNumber(view)} + + {sm && ( + + + {getFixedNumber(danmaku)} + + )} +
+ {getVideoTime(duration)} +
+ ); +}; diff --git a/src/routers/video/item/videoinfo.tsx b/src/routers/video/item/videoinfo.tsx new file mode 100644 index 0000000..824ceb0 --- /dev/null +++ b/src/routers/video/item/videoinfo.tsx @@ -0,0 +1,71 @@ +import { Avatar, Link, styled } from "@mui/material"; +import ThumbUpSharpIcon from "@mui/icons-material/ThumbUpSharp"; +import FavoriteSharpIcon from "@mui/icons-material/FavoriteSharp"; +import { useScreenMatchSize } from "@utils/hooks/match"; +import getFixedNumber from "@utils/number"; +import getrealtiveTime from "@utils/time"; +import { FC } from "react"; +import { VideoRouterImageCardType } from "../videotype"; +import { CoinIcon } from "./icon"; +import styles from "./item.module.less"; +export const VideoInfo: FC< + Pick< + VideoRouterImageCardType, + | "title" + | "name" + | "updated_at" + | "bvid" + | "coin" + | "favorite" + | "like" + | "face" + > +> = (props) => { + const { title, name, bvid, updated_at, coin, like, favorite, face } = props; + const matchsmSize = useScreenMatchSize("sm"); + return ( +
+ + + {title} + + +
+ {matchsmSize && } +
+ + {name} + {matchsmSize && {getrealtiveTime(updated_at * 1000)}} + + {matchsmSize && ( +
+ + {" "} + {getFixedNumber(like)} + + + {getFixedNumber(coin)} + + + {" "} + {getFixedNumber(favorite)} + +
+ )} +
+
+
+ ); +}; + +const DataP = styled("p")(({ theme }) => ({ + fontSize: "15px", + [theme.breakpoints.down("sm")]: { + fontSize: "13px", + }, +})); diff --git a/src/routers/video/masonry.tsx b/src/routers/video/masonry.tsx index f95a9af..09ba61f 100644 --- a/src/routers/video/masonry.tsx +++ b/src/routers/video/masonry.tsx @@ -2,13 +2,12 @@ import { fetchVideos } from "@utils/fetch"; import { concurrencyRequest, Pick } from "@utils/index"; import { useState, useEffect, FC, memo } from "react"; import { VideoRouterImageCardType, VideoRouterMasonryType } from "./videotype"; -import { getImageSize } from "@components/image/tool"; -import Grid from "@mui/material/Unstable_Grid2"; +import { Unstable_Grid2 as Grid } from "@mui/material"; import ImageShouldResizeProview from "@components/proview/imageSize"; -import { VideoRouterImageCard } from "./masonryItem"; +import { VideoRouterImageCard } from "./item"; import { Skeleton } from "@mui/material"; import { nanoid } from "nanoid"; -import { useScreenSize } from "../../components/proview/screenSize"; +import styles from "./video.module.less"; /** * @description 该组件负责渲染视频图片的瀑布流 */ @@ -117,27 +116,18 @@ const LoadingSkeleton: FC<{ num: number }> = ({ num = 0 }) => { -
+
-
+
@@ -147,5 +137,3 @@ const LoadingSkeleton: FC<{ num: number }> = ({ num = 0 }) => { ); }; - -//todo:修改获取数据的方式 diff --git a/src/routers/video/masonryItem.tsx b/src/routers/video/masonryItem.tsx deleted file mode 100644 index 9fe05c6..0000000 --- a/src/routers/video/masonryItem.tsx +++ /dev/null @@ -1,156 +0,0 @@ -import { ImageBasic } from "@components/image"; -import { FC } from "react"; -import SlowMotionVideoSharpIcon from "@mui/icons-material/SlowMotionVideoSharp"; -import SubjectSharpIcon from "@mui/icons-material/SubjectSharp"; -import ThumbUpSharpIcon from "@mui/icons-material/ThumbUpSharp"; -import FavoriteSharpIcon from "@mui/icons-material/FavoriteSharp"; -import { Link, Avatar } from "@mui/material"; -import { VideoRouterImageCardType } from "./videotype"; -import getrealtiveTime, { getVideoTime } from "@utils/time"; -import styles from "./video.module.less"; -import { Omit, Pick } from "@utils/index"; -import getFixedNumber from "../../utils/number/index"; -import { useScreenMatchSize } from "@utils/hooks/match"; -import { useScreenSize } from "@components/proview/screenSize"; - -export const VideoRouterImageCard: FC<{ data: VideoRouterImageCardType }> = ({ - data, -}) => { - const { pic, bvid } = data; - return ( -
- - - - - - -
- ); -}; -const VideoData: FC< - Pick -> = (props) => { - const { view, danmaku, duration } = props; - const { sm } = useScreenSize(); - return ( -
-
- - - {getFixedNumber(view)} - - {sm && ( - - - {getFixedNumber(danmaku)} - - )} -
- {getVideoTime(duration)} -
- ); -}; -const VideoInfo: FC< - Pick< - VideoRouterImageCardType, - | "title" - | "name" - | "updated_at" - | "bvid" - | "coin" - | "favorite" - | "like" - | "face" - > -> = (props) => { - const { title, name, bvid, updated_at, coin, like, favorite, face } = props; - const matchsmSize = useScreenMatchSize("sm"); - return ( -
-

- - {title} - -

-
- {matchsmSize && } -
- - {name} - {matchsmSize && {getrealtiveTime(updated_at * 1000)}} - - {matchsmSize && ( -
- - {" "} - {getFixedNumber(like)} - - - {getFixedNumber(coin)} - - - {" "} - {getFixedNumber(favorite)} - -
- )} -
-
-
- ); -}; - -export const CoinIcon: FC<{ - height: number | string; - width?: number | string; -}> = ({ height, width = height }) => ( - - - -); diff --git a/src/routers/video/video.module.less b/src/routers/video/video.module.less index 29f8010..b30f277 100644 --- a/src/routers/video/video.module.less +++ b/src/routers/video/video.module.less @@ -1,143 +1,13 @@ -.video-section { - height: 100%; +.skeleton-img { + aspect-ratio: 16/9; + max-width: 100%; + height: auto !important; +} + +.skeleton-content { display: flex; - flex-flow: column nowrap; - &>:first-child { + .skeleton-info { flex: 1; } - - .video-data { - transition: opacity .3s linear; - - *:hover+& { - opacity: 0; - } - - position: absolute; - left: 0; - bottom: 0; - width: 100%; - box-sizing: border-box; - padding: 16px 8px 6px; - border-bottom-left-radius: 8px; - border-bottom-right-radius: 8px; - display: flex; - justify-content: space-between; - align-items: center; - color: #fff; - font-size: 13px; - font-weight: 400; - background-image: linear-gradient(180deg, - rgba(0, 0, 0, 0) 0%, - rgba(0, 0, 0, .8) 100%); - - &-left { - flex: 1; - display: flex; - align-items: center; - - &>span { - font-size: 13px; - display: flex; - align-items: center; - - } - - &>span:not(:last-of-type) { - margin-right: 12px; - } - } - } - - .video-info { - - &>*:not(:first-child) { - margin-top: 5px; - } - - &>p { - color: #18191c; - font-size: 15px; - cursor: pointer; - transition: color .2s linear; - height: 40px; - overflow: hidden; - display: -webkit-box; - -webkit-box-orient: vertical; - text-overflow: ellipsis; - line-break: anywhere; - -webkit-line-clamp: 2; - word-wrap: break-all; - - &:hover, - &:active { - color: #00aeec; - } - - &>a { - line-height: 1.25; - } - } - - .video-up { - display: flex; - align-items: stretch; - - &>*:not(:first-child) { - margin-left: 5px; - } - - &-desc { - font-size: 13px; - display: flex; - flex-flow: column nowrap; - justify-content: space-between; - cursor: default; - - &-data { - display: flex; - flex-flow: row nowrap; - overflow: hidden; - text-overflow: ellipsis; - - &>span { - white-space: nowrap; - display: flex; - align-items: center; - - &:not(:first-of-type) { - margin-left: 10px; - } - } - } - - - a { - - color: rgb(148, 153, 160); - cursor: pointer; - transition: color .2s linear; - - &:hover, - &:active { - color: #00aeec; - } - - &>span { - overflow: hidden; - text-overflow: ellipsis; - word-break: break-all; - - &:not(:first-of-type)::before { - content: '·'; - margin: 0 4px; - } - - } - } - } - - } - } } \ No newline at end of file diff --git a/vite.config.ts b/vite.config.ts index 40ef216..d68ac50 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,10 +1,12 @@ -import { defineConfig } from "vite"; +import { defineConfig, splitVendorChunkPlugin } from "vite"; import path from "path"; import react from "@vitejs/plugin-react-swc"; // 可视化打包文件 import { visualizer } from "rollup-plugin-visualizer"; // gzip import viteCompression from "vite-plugin-compression"; +// polyfill +import legacy from "@vitejs/plugin-legacy"; // https://vitejs.dev/config/ export default defineConfig({ resolve: { @@ -15,9 +17,21 @@ export default defineConfig({ "@routers": path.resolve(__dirname, "src/routers"), }, }, - plugins: [react(), visualizer(), viteCompression()], + plugins: [ + react(), + visualizer(), + viteCompression(), + legacy({ + // 设置目标浏览器,browserslist 配置语法 + targets: [ + "defaults", + "iOS >= 9, Android >= 4.4, last 2 versions, > 0.2%, not dead", + ], + }), + splitVendorChunkPlugin(), + ], build: { - target: "es2015", + // target: "es2015", minify: "esbuild", rollupOptions: { output: {