From dad00c9f9d745ab527b66c509ea845299aa4267a Mon Sep 17 00:00:00 2001 From: blinko Date: Thu, 26 Dec 2024 13:53:47 +0800 Subject: [PATCH 1/2] fix: update HeatMap color scheme for improved visibility #373 - Modified the color palette for the HeatMap component based on the theme (dark/light) to enhance visual clarity and accessibility. - Updated dark theme colors to ['#161b22', '#0e4429', '#006d32', '#26a641', '#39d353'] and light theme colors to ['#ebedf0', '#9be9a8', '#40c463', '#30a14e', '#216e39']. --- src/components/BlinkoAnalytics/HeatMap.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/BlinkoAnalytics/HeatMap.tsx b/src/components/BlinkoAnalytics/HeatMap.tsx index bd84f27..fc8e52a 100644 --- a/src/components/BlinkoAnalytics/HeatMap.tsx +++ b/src/components/BlinkoAnalytics/HeatMap.tsx @@ -81,7 +81,9 @@ export const HeatMap = ({ data, title, description }: HeatMapProps) => { color: foregroundColor }, inRange: { - color: theme === 'dark' ? ['#161b22', '#3d3000', '#806600', '#cc9900', '#ffd700'] : ['#fff7e6', '#ffe699', '#ffd24d', '#ffbf00', '#b38600'] + color: theme === 'dark' + ? ['#161b22', '#0e4429', '#006d32', '#26a641', '#39d353'] + : ['#ebedf0', '#9be9a8', '#40c463', '#30a14e', '#216e39'] } }, calendar: { From de491669c41cf4629719bcc97bf2720e37d24980 Mon Sep 17 00:00:00 2001 From: blinko Date: Thu, 26 Dec 2024 16:07:31 +0800 Subject: [PATCH 2/2] fix: support custom background - Updated PWA settings to always enable service worker and modified caching strategies for improved offline performance. - Added new translations for offline messages across multiple languages, enhancing user experience. - Introduced a glass effect for UI components and added a custom background URL feature in settings. - Refactored BlinkoCard and other components to support new glass effect and background settings. - Updated global styles to include glass effect styling. - Enhanced user settings to allow toggling of background animation and custom background URL input. --- next.config.js | 18 +- package.json | 10 +- pnpm-lock.yaml | 526 +++++++++++++++++- public/locales/ar/translation.json | 5 +- public/locales/de/translation.json | 5 +- public/locales/en/translation.json | 5 +- public/locales/es/translation.json | 5 +- public/locales/fr/translation.json | 5 +- public/locales/ja/translation.json | 5 +- public/locales/ko/translation.json | 5 +- public/locales/pt/translation.json | 5 +- public/locales/ru/translation.json | 5 +- public/locales/tr/translation.json | 5 +- public/locales/zh-TW/translation.json | 5 +- public/locales/zh/translation.json | 5 +- src/components/BlinkoCard/index.tsx | 5 +- .../BlinkoSettings/MusicSetting.tsx | 6 + .../BlinkoSettings/PerferSetting.tsx | 46 +- src/components/Common/GradientBackground.tsx | 64 +++ src/pages/share/[id].tsx | 27 +- src/pages/signin.tsx | 138 ++--- src/pages/signup.tsx | 202 +++---- src/server/types.ts | 4 + src/styles/globals.css | 14 +- tailwind.config.js | 6 +- 25 files changed, 921 insertions(+), 205 deletions(-) create mode 100644 src/components/Common/GradientBackground.tsx diff --git a/next.config.js b/next.config.js index 5916acc..40048a6 100644 --- a/next.config.js +++ b/next.config.js @@ -4,7 +4,7 @@ const withPWA = require('next-pwa')({ dest: 'public', register: true, skipWaiting: true, - disable: process.env.NODE_ENV === 'development', // process.env.NODE_ENV === 'development', + disable: false, // process.env.NODE_ENV === 'development', fallbacks: { document: '/offline' }, @@ -12,19 +12,16 @@ const withPWA = require('next-pwa')({ reloadOnOnline: true, runtimeCaching: [ { - urlPattern: ({ url, request }) => { + urlPattern: ({ url }) => { const isSameOrigin = self.origin === url.origin; - return isSameOrigin && ( - request.destination === 'script' || - url.pathname.includes('/_next/static/chunks/') - ); + return isSameOrigin; }, handler: 'NetworkFirst', options: { - cacheName: 'js-cache', + cacheName: 'pages-cache', networkTimeoutSeconds: 10, expiration: { - maxEntries: 100, + maxEntries: 50, maxAgeSeconds: 24 * 60 * 60 } } @@ -122,6 +119,11 @@ module.exports = withPWA({ path: false, }; } + config.module.rules.push({ + test: /\.(glsl|vs|fs|vert|frag)$/, + exclude: /node_modules/, + use: ['raw-loader', 'glslify-loader'], + }) return config; }, outputFileTracing: isVercel? false : true, diff --git a/package.json b/package.json index fb5c2f3..67efa8b 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,6 @@ "@langchain/openai": "^0.3.10", "@langchain/pinecone": "^0.1.1", "@langchain/textsplitters": "^0.1.0", - "@next/bundle-analyzer": "^14.1.4", "@nextui-org/dropdown": "^2.1.31", "@nextui-org/framer-utils": "^2.0.24", "@nextui-org/popover": "^2.1.29", @@ -55,6 +54,9 @@ "@prisma/client": "^5.21.1", "@radix-ui/colors": "^3.0.0", "@radix-ui/react-dialog": "^1.1.4", + "@react-spring/three": "^9.7.5", + "@react-three/fiber": "^8.17.10", + "@shadergradient/react": "^2.0.19", "@tailwindcss/line-clamp": "^0.4.4", "@tailwindcss/typography": "^0.5.15", "@trpc/client": "11.0.0-rc.553", @@ -150,6 +152,8 @@ "swagger-ui-react": "^5.17.14", "swiper": "^11.1.14", "tailwind-merge": "^1.14.0", + "three": "^0.171.0", + "three-stdlib": "^2.35.2", "trpc-to-openapi": "^2.0.2", "typed-emitter": "^2.1.0", "typeorm": "^0.3.20", @@ -162,6 +166,7 @@ }, "devDependencies": { "@headlessui/tailwindcss": "^0.1.3", + "@next/bundle-analyzer": "^14.1.4", "@semantic-release/changelog": "^6.0.3", "@semantic-release/commit-analyzer": "^13.0.0", "@semantic-release/git": "^10.0.1", @@ -174,13 +179,16 @@ "@types/react": "18.2.8", "@types/react-dom": "^18.2.4", "@types/react-grid-layout": "^1.3.2", + "@types/three": "^0.171.0", "@types/uuid": "^9.0.1", "autoprefixer": "^10.4.14", "babel-loader": "^9.2.1", "conventional-changelog-conventionalcommits": "^8.0.0", + "glslify-loader": "^2.0.0", "postcss": "^8.4.24", "postcss-nesting": "^12.0.0", "prisma": "^5.21.1", + "raw-loader": "^4.0.2", "semantic-release": "^24.2.0", "tailwindcss": "^3.3.2", "tailwindcss-animate": "^1.0.7", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d2550bd..cf6a8af 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -53,9 +53,6 @@ importers: '@langchain/textsplitters': specifier: ^0.1.0 version: 0.1.0(@langchain/core@0.3.13(openai@4.68.0(encoding@0.1.13)(zod@3.23.8))) - '@next/bundle-analyzer': - specifier: ^14.1.4 - version: 14.2.15 '@nextui-org/dropdown': specifier: ^2.1.31 version: 2.1.31(@nextui-org/system@2.4.4(@nextui-org/theme@2.4.1(tailwindcss@3.4.14(ts-node@10.9.2(@types/node@20.2.5)(typescript@5.6.3))))(framer-motion@11.11.9(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.4.1(tailwindcss@3.4.14(ts-node@10.9.2(@types/node@20.2.5)(typescript@5.6.3))))(@types/react@18.2.8)(framer-motion@11.11.9(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -80,6 +77,15 @@ importers: '@radix-ui/react-dialog': specifier: ^1.1.4 version: 1.1.4(@types/react-dom@18.3.1)(@types/react@18.2.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-spring/three': + specifier: ^9.7.5 + version: 9.7.5(@react-three/fiber@8.17.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.171.0))(react@18.3.1)(three@0.171.0) + '@react-three/fiber': + specifier: ^8.17.10 + version: 8.17.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.171.0) + '@shadergradient/react': + specifier: ^2.0.19 + version: 2.0.19(react@18.3.1) '@tailwindcss/line-clamp': specifier: ^0.4.4 version: 0.4.4(tailwindcss@3.4.14(ts-node@10.9.2(@types/node@20.2.5)(typescript@5.6.3))) @@ -365,6 +371,12 @@ importers: tailwind-merge: specifier: ^1.14.0 version: 1.14.0 + three: + specifier: ^0.171.0 + version: 0.171.0 + three-stdlib: + specifier: ^2.35.2 + version: 2.35.2(three@0.171.0) trpc-to-openapi: specifier: ^2.0.2 version: 2.0.2(@trpc/server@11.0.0-rc.553)(@types/node@20.2.5)(zod@3.23.8) @@ -396,6 +408,9 @@ importers: '@headlessui/tailwindcss': specifier: ^0.1.3 version: 0.1.3(tailwindcss@3.4.14(ts-node@10.9.2(@types/node@20.2.5)(typescript@5.6.3))) + '@next/bundle-analyzer': + specifier: ^14.1.4 + version: 14.2.15 '@semantic-release/changelog': specifier: ^6.0.3 version: 6.0.3(semantic-release@24.2.0(typescript@5.6.3)) @@ -432,6 +447,9 @@ importers: '@types/react-grid-layout': specifier: ^1.3.2 version: 1.3.5 + '@types/three': + specifier: ^0.171.0 + version: 0.171.0 '@types/uuid': specifier: ^9.0.1 version: 9.0.8 @@ -444,6 +462,9 @@ importers: conventional-changelog-conventionalcommits: specifier: ^8.0.0 version: 8.0.0 + glslify-loader: + specifier: ^2.0.0 + version: 2.0.0 postcss: specifier: ^8.4.24 version: 8.4.47 @@ -453,6 +474,9 @@ importers: prisma: specifier: ^5.21.1 version: 5.21.1 + raw-loader: + specifier: ^4.0.2 + version: 4.0.2(webpack@5.95.0) semantic-release: specifier: ^24.2.0 version: 24.2.0(typescript@5.6.3) @@ -1249,6 +1273,10 @@ packages: resolution: {integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==} engines: {node: '>=6.9.0'} + '@babel/runtime@7.26.0': + resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} + engines: {node: '>=6.9.0'} + '@babel/template@7.25.7': resolution: {integrity: sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==} engines: {node: '>=6.9.0'} @@ -1295,6 +1323,10 @@ packages: '@chevrotain/utils@11.0.3': resolution: {integrity: sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==} + '@choojs/findup@0.2.1': + resolution: {integrity: sha512-YstAqNb0MCN8PjdLCDfRsBcGVRN41f3vgLvaI0IrIcBp4AqILRSS0DeWNGkicC+f/zRIPJLc+9RURVSepwvfBw==} + hasBin: true + '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} @@ -3285,6 +3317,34 @@ packages: resolution: {integrity: sha512-J1eI7cIm2IXE6EwhHR1OyoefvobUJEn/vJWEBwOM5uW4JkkLwuVoV9vk++XJyAmKUNQ87gdWZvSWrI2LjfrSug==} engines: {node: '>=12.0.0'} + '@react-spring/animated@9.7.5': + resolution: {integrity: sha512-Tqrwz7pIlsSDITzxoLS3n/v/YCUHQdOIKtOJf4yL6kYVSDTSmVK1LI1Q3M/uu2Sx4X3pIWF3xLUhlsA6SPNTNg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + + '@react-spring/core@9.7.5': + resolution: {integrity: sha512-rmEqcxRcu7dWh7MnCcMXLvrf6/SDlSokLaLTxiPlAYi11nN3B5oiCUAblO72o+9z/87j2uzxa2Inm8UbLjXA+w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + + '@react-spring/rafz@9.7.5': + resolution: {integrity: sha512-5ZenDQMC48wjUzPAm1EtwQ5Ot3bLIAwwqP2w2owG5KoNdNHpEJV263nGhCeKKmuA3vG2zLLOdu3or6kuDjA6Aw==} + + '@react-spring/shared@9.7.5': + resolution: {integrity: sha512-wdtoJrhUeeyD/PP/zo+np2s1Z820Ohr/BbuVYv+3dVLW7WctoiN7std8rISoYoHpUXtbkpesSKuPIw/6U1w1Pw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + + '@react-spring/three@9.7.5': + resolution: {integrity: sha512-RxIsCoQfUqOS3POmhVHa1wdWS0wyHAUway73uRLp3GAL5U2iYVNdnzQsep6M2NZ994BlW8TcKuMtQHUqOsy6WA==} + peerDependencies: + '@react-three/fiber': '>=6.0' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + three: '>=0.126' + + '@react-spring/types@9.7.5': + resolution: {integrity: sha512-HVj7LrZ4ReHWBimBvu2SKND3cDVUPWKLqRTmWe/fNY6o1owGOX0cAHbdPDTMelgBlVbrTKrre6lFkhqGZErK/g==} + '@react-stately/calendar@3.6.0': resolution: {integrity: sha512-GqUtOtGnwWjtNrJud8nY/ywI4VBP5byToNVRTnxbMl+gYO1Qe/uc5NG7zjwMxhb2kqSBHZFdkF0DXVqG2Ul+BA==} peerDependencies: @@ -3448,6 +3508,31 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + '@react-three/fiber@8.17.10': + resolution: {integrity: sha512-S6bqa4DqUooEkInYv/W+Jklv2zjSYCXAhm6qKpAQyOXhTEt5gBXnA7W6aoJ0bjmp9pAeaSj/AZUoz1HCSof/uA==} + peerDependencies: + expo: '>=43.0' + expo-asset: '>=8.4' + expo-file-system: '>=11.0' + expo-gl: '>=11.0' + react: '>=18.0' + react-dom: '>=18.0' + react-native: '>=0.64' + three: '>=0.133' + peerDependenciesMeta: + expo: + optional: true + expo-asset: + optional: true + expo-file-system: + optional: true + expo-gl: + optional: true + react-dom: + optional: true + react-native: + optional: true + '@react-types/accordion@3.0.0-alpha.25': resolution: {integrity: sha512-nPTRrMA5jS4QcwQ0H8J9Tzzw7+yq+KbwsPNA1ukVIfOGIB45by/1ke/eiZAXGqXxkElxi2fQuaXuWm79BWZ8zg==} peerDependencies: @@ -3688,6 +3773,11 @@ packages: peerDependencies: semantic-release: '>=20.1.0' + '@shadergradient/react@2.0.19': + resolution: {integrity: sha512-Ey+JzIRCMvGZMUp9Q48SqiYyWuKx01B2a4bTvSgBmIkMlwkrvfHIdoVK2wXZpd0OtoGCev701dsZIsZnUMlC7g==} + peerDependencies: + react: '*' + '@sindresorhus/is@4.6.0': resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} @@ -4142,6 +4232,9 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@tweenjs/tween.js@23.1.3': + resolution: {integrity: sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==} + '@types/d3-array@3.2.1': resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==} @@ -4235,9 +4328,15 @@ packages: '@types/d3@7.4.3': resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==} + '@types/debounce@1.2.4': + resolution: {integrity: sha512-jBqiORIzKDOToaF63Fm//haOCHuwQuLa2202RK4MozpA6lh93eCBc+/8+wZn5OzjJt3ySdc+74SXWXB55Ewtyw==} + '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/draco3d@1.4.10': + resolution: {integrity: sha512-AX22jp8Y7wwaBgAixaSvkoG4M/+PlAcm3Qs4OW8yT9DM4xUpWKeFhLueTAyZF39pviAdcDdeJoACapiAceqNcw==} + '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} @@ -4304,6 +4403,9 @@ packages: '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + '@types/offscreencanvas@2019.7.3': + resolution: {integrity: sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==} + '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -4319,6 +4421,9 @@ packages: '@types/react-grid-layout@1.3.5': resolution: {integrity: sha512-WH/po1gcEcoR6y857yAnPGug+ZhkF4PaTUxgAbwfeSH/QOgVSakKHBXoPGad/sEznmkiaK3pqHk+etdWisoeBQ==} + '@types/react-reconciler@0.26.7': + resolution: {integrity: sha512-mBDYl8x+oyPX/VBb3E638N0B7xG+SPk/EAMcVPeexqus/5aTpTphQi0curhhshOqRrc9t6OPoJfEUkbymse/lQ==} + '@types/react-reconciler@0.28.8': resolution: {integrity: sha512-SN9c4kxXZonFhbX4hJrZy37yw9e7EIxcpHCxQv5JUS18wDE5ovkQKlqQEkufdJCCMfuI9BnjUJvhYeJ9x5Ra7g==} @@ -4340,6 +4445,12 @@ packages: '@types/semver@7.5.8': resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + '@types/stats.js@0.17.3': + resolution: {integrity: sha512-pXNfAD3KHOdif9EQXZ9deK82HVNaXP5ZIF5RP2QG6OQFNTaY2YIetfrE9t528vEreGQvEPRDDc8muaoYeK0SxQ==} + + '@types/three@0.171.0': + resolution: {integrity: sha512-oLuT1SAsT+CUg/wxUTFHo0K3NtJLnx9sJhZWQJp/0uXqFpzSk1hRHmvWvpaAWSfvx2db0lVKZ5/wV0I0isD2mQ==} + '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -4358,6 +4469,9 @@ packages: '@types/uuid@9.0.8': resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} + '@types/webxr@0.5.20': + resolution: {integrity: sha512-JGpU6qiIJQKUuVSKx1GtQnHJGxRjtfGIhzO2ilq43VZZS//f1h1Sgexbdk+Lq+7569a6EYhOWrUpIruR/1Enmg==} + '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} @@ -4406,6 +4520,9 @@ packages: '@webassemblyjs/wast-printer@1.12.1': resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} + '@webgpu/types@0.1.52': + resolution: {integrity: sha512-eI883Nlag2hGIkhXxAnq8s4APpqXWuPL3Gbn2ghiU12UjLvfCbVqHK4XfXl3eLRTatqcMmeK7jws7IwWsGfbzw==} + '@xmldom/xmldom@0.8.10': resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} engines: {node: '>=10.0.0'} @@ -5548,6 +5665,9 @@ packages: resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} engines: {node: '>=12'} + draco3d@1.5.7: + resolution: {integrity: sha512-m6WCKt/erDXcw+70IJXnG7M3awwQPAsZvJGX5zY7beBqpELw6RDGkYVU0W43AFxye4pDZ5i2Lbyc/NNGqwjUVQ==} + drange@1.1.1: resolution: {integrity: sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==} engines: {node: '>=4'} @@ -5804,6 +5924,12 @@ packages: fault@1.0.4: resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} + fflate@0.6.10: + resolution: {integrity: sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg==} + + fflate@0.8.2: + resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + figures@2.0.0: resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} engines: {node: '>=4'} @@ -6111,6 +6237,52 @@ packages: resolution: {integrity: sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==} engines: {node: '>=0.10.0'} + glsl-inject-defines@1.0.3: + resolution: {integrity: sha512-W49jIhuDtF6w+7wCMcClk27a2hq8znvHtlGnrYkSWEr8tHe9eA2dcnohlcAmxLYBSpSSdzOkRdyPTrx9fw49+A==} + + glsl-resolve@0.0.1: + resolution: {integrity: sha512-xxFNsfnhZTK9NBhzJjSBGX6IOqYpvBHxxmo+4vapiljyGNCY0Bekzn0firQkQrazK59c1hYxMDxYS8MDlhw4gA==} + + glsl-token-assignments@2.0.2: + resolution: {integrity: sha512-OwXrxixCyHzzA0U2g4btSNAyB2Dx8XrztY5aVUCjRSh4/D0WoJn8Qdps7Xub3sz6zE73W3szLrmWtQ7QMpeHEQ==} + + glsl-token-defines@1.0.0: + resolution: {integrity: sha512-Vb5QMVeLjmOwvvOJuPNg3vnRlffscq2/qvIuTpMzuO/7s5kT+63iL6Dfo2FYLWbzuiycWpbC0/KV0biqFwHxaQ==} + + glsl-token-depth@1.1.2: + resolution: {integrity: sha512-eQnIBLc7vFf8axF9aoi/xW37LSWd2hCQr/3sZui8aBJnksq9C7zMeUYHVJWMhFzXrBU7fgIqni4EhXVW4/krpg==} + + glsl-token-descope@1.0.2: + resolution: {integrity: sha512-kS2PTWkvi/YOeicVjXGgX5j7+8N7e56srNDEHDTVZ1dcESmbmpmgrnpjPcjxJjMxh56mSXYoFdZqb90gXkGjQw==} + + glsl-token-inject-block@1.1.0: + resolution: {integrity: sha512-q/m+ukdUBuHCOtLhSr0uFb/qYQr4/oKrPSdIK2C4TD+qLaJvqM9wfXIF/OOBjuSA3pUoYHurVRNao6LTVVUPWA==} + + glsl-token-properties@1.0.1: + resolution: {integrity: sha512-dSeW1cOIzbuUoYH0y+nxzwK9S9O3wsjttkq5ij9ZGw0OS41BirKJzzH48VLm8qLg+au6b0sINxGC0IrGwtQUcA==} + + glsl-token-scope@1.1.2: + resolution: {integrity: sha512-YKyOMk1B/tz9BwYUdfDoHvMIYTGtVv2vbDSLh94PT4+f87z21FVdou1KNKgF+nECBTo0fJ20dpm0B1vZB1Q03A==} + + glsl-token-string@1.0.1: + resolution: {integrity: sha512-1mtQ47Uxd47wrovl+T6RshKGkRRCYWhnELmkEcUAPALWGTFe2XZpH3r45XAwL2B6v+l0KNsCnoaZCSnhzKEksg==} + + glsl-token-whitespace-trim@1.0.0: + resolution: {integrity: sha512-ZJtsPut/aDaUdLUNtmBYhaCmhIjpKNg7IgZSfX5wFReMc2vnj8zok+gB/3Quqs0TsBSX/fGnqUUYZDqyuc2xLQ==} + + glsl-tokenizer@2.1.5: + resolution: {integrity: sha512-XSZEJ/i4dmz3Pmbnpsy3cKh7cotvFlBiZnDOwnj/05EwNp2XrhQ4XKJxT7/pDt4kp4YcpRSKz8eTV7S+mwV6MA==} + + glslify-bundle@5.1.1: + resolution: {integrity: sha512-plaAOQPv62M1r3OsWf2UbjN0hUYAB7Aph5bfH58VxJZJhloRNbxOL9tl/7H71K7OLJoSJ2ZqWOKk3ttQ6wy24A==} + + glslify-deps@1.3.2: + resolution: {integrity: sha512-7S7IkHWygJRjcawveXQjRXLO2FTjijPDYC7QfZyAQanY+yGLCFHYnPtsGT9bdyHiwPTw/5a1m1M9hamT2aBpag==} + + glslify-loader@2.0.0: + resolution: {integrity: sha512-oOdmTX1BSPG75o3gNZToemfbbuN5dgi4Pco/aRfjbwGxPIfflYLuok6JCf2kDBPHjP+tV+imNsj6YRJg9gKJ1A==} + engines: {node: '>=6'} + goober@2.1.16: resolution: {integrity: sha512-erjk19y1U33+XAMe1VTvIONHYoSqE4iS7BYUZfHaqeohLmnC0FdxEh7rQU+6MZ4OajItzjZFSRtVANrQwNq6/g==} peerDependencies: @@ -6634,6 +6806,9 @@ packages: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} + isarray@0.0.1: + resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} @@ -6647,6 +6822,11 @@ packages: resolution: {integrity: sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg==} engines: {node: ^18.17 || >=20.6.1} + its-fine@1.2.5: + resolution: {integrity: sha512-fXtDA0X0t0eBYAGLVM5YsgJGsJ5jEmqZEPrGbzdf5awjv0xE7nqv3TVnvtUF060Tkes15DbDAKW/I48vsb6SyA==} + peerDependencies: + react: '>=18.0' + jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} @@ -6719,6 +6899,10 @@ packages: json-schema@0.4.0: resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -6866,6 +7050,10 @@ packages: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} engines: {node: '>=6.11.5'} + loader-utils@1.4.2: + resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==} + engines: {node: '>=4.0.0'} + loader-utils@2.0.4: resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} engines: {node: '>=8.9.0'} @@ -7026,6 +7214,9 @@ packages: clsx: '>=2' react: '>=18.2' + map-limit@0.0.1: + resolution: {integrity: sha512-pJpcfLPnIF/Sk3taPW21G/RQsEEirGaFpCW3oXRwH9dnFHPHNGjNyvh++rdmC2fNqEaTw2MhYJraoJWAHx8kEg==} + markdown-it-ins@4.0.0: resolution: {integrity: sha512-sWbjK2DprrkINE4oYDhHdCijGT+MIDhEupjSHLXe5UXeVr5qmVxs/nTUVtgi0Oh/qtF+QKV0tNWDhQBEPxiMew==} @@ -7165,6 +7356,9 @@ packages: mermaid@11.4.1: resolution: {integrity: sha512-Mb01JT/x6CKDWaxigwfZYuYmDZ6xtrNwNlidKZwkSrDaY9n90tdrJTV5Umk+wP1fZscGptmKFXHsXMDEVZ+Q6A==} + meshoptimizer@0.18.1: + resolution: {integrity: sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==} + methods@1.1.2: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} @@ -7415,6 +7609,9 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + murmurhash-js@1.0.0: + resolution: {integrity: sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==} + music-metadata@10.6.4: resolution: {integrity: sha512-42ekQ5CRic4Pvw/85FfzMKegeRDHyWBpCjSSI1B9PTGqaevZ17ASA4v4W6MRq1ELC5THn5rD8S+82iPQ6gv6lw==} engines: {node: '>=16.0.0'} @@ -7728,6 +7925,9 @@ packages: ollama@0.5.10: resolution: {integrity: sha512-M5O4u6S6yZeeKFrKA7ZfGGLjK54otOVGPrOUc3N64zSTpz9J+x/nh93dmD6Py7YLgXzq9I6Nq+PDDoaqJuV3LQ==} + once@1.3.3: + resolution: {integrity: sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==} + once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -8371,6 +8571,9 @@ packages: resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} engines: {node: '>=0.10.0'} + potpack@1.0.2: + resolution: {integrity: sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==} + preact-render-to-string@5.2.6: resolution: {integrity: sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==} peerDependencies: @@ -8509,6 +8712,12 @@ packages: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} + raw-loader@4.0.2: + resolution: {integrity: sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==} + engines: {node: '>= 10.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true @@ -8696,6 +8905,12 @@ packages: react: '>=16.8.0' react-dom: '>=16.8.0' + react-reconciler@0.27.0: + resolution: {integrity: sha512-HmMDKciQjYmBRGuuhIaKA1ba/7a+UsM5FzOZsMO2JYHt9Jh8reCb7j1eDC95NOyUlKM9KRyvdx0flBuDvYSBoA==} + engines: {node: '>=0.10.0'} + peerDependencies: + react: ^18.0.0 + react-redux@7.2.9: resolution: {integrity: sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ==} peerDependencies: @@ -8829,6 +9044,9 @@ packages: resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==} engines: {node: '>=18'} + readable-stream@1.0.34: + resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==} + readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} @@ -8958,8 +9176,11 @@ packages: resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} deprecated: https://github.com/lydell/resolve-url#deprecated + resolve@0.6.3: + resolution: {integrity: sha1-3ZV5gufnNt699TtYpN2RdUV13UY=} + resolve@1.1.7: - resolution: {integrity: sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==} + resolution: {integrity: sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=} resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} @@ -9053,6 +9274,9 @@ packages: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} + scheduler@0.21.0: + resolution: {integrity: sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ==} + scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} @@ -9124,6 +9348,9 @@ packages: resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} hasBin: true + shallow-copy@0.0.1: + resolution: {integrity: sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==} + shallow-equal@3.1.0: resolution: {integrity: sha512-pfVOw8QZIXpMbhBWvzBISicvToTiM5WBF1EeAUZDDSb5Dt29yl4AYbyywbJFSEsRUMr7gJaxqCdr4L3tQf9wVg==} @@ -9320,6 +9547,9 @@ packages: resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} engines: {node: '>= 0.4'} + string_decoder@0.10.31: + resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} + string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} @@ -9437,6 +9667,11 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + suspend-react@0.1.3: + resolution: {integrity: sha512-aqldKgX9aZqpoDp3e8/BZ8Dm7x1pJl+qI3ZKxDN0i/IQTWUwBx/ManmlVJ3wowqbno6c2bmiIfs+Um6LbsjJyQ==} + peerDependencies: + react: '>=17.0' + svgo@2.8.0: resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} engines: {node: '>=10.13.0'} @@ -9553,6 +9788,17 @@ packages: resolution: {integrity: sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==} engines: {node: '>=0.2.6'} + three-stdlib@2.35.2: + resolution: {integrity: sha512-Ns9ZdiFEAsiv8JvHS28Qgxg4YRTq13Ixa4EDUQZhUovZ3j/GLTou4zE887SLSqsuRZwuy3gklttn2ha5JaJpTQ==} + peerDependencies: + three: '>=0.128.0' + + three@0.171.0: + resolution: {integrity: sha512-Y/lAXPaKZPcEdkKjh0JOAHVv8OOnv/NDJqm0wjfCzyQmfKxV7zvkwsnBgPBKTzJHToSOhRGQAGbPJObT59B/PQ==} + + through2@0.6.5: + resolution: {integrity: sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==} + through2@2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} @@ -10274,6 +10520,10 @@ packages: xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + xtend@2.2.0: + resolution: {integrity: sha512-SLt5uylT+4aoXxXuwtQp5ZnMMzhDb1Xkg4pEqc00WUJCQifPfV9Ub1VrNhp9kXkrjZD2I2Hl8WnjP37jzZLPZw==} + engines: {node: '>=0.4'} + xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} @@ -10353,6 +10603,15 @@ packages: zrender@5.6.0: resolution: {integrity: sha512-uzgraf4njmmHAbEUxMJ8Oxg+P3fT04O+9p7gY+wJRVxo8Ge+KmYv0WJev945EH4wFuc4OY2NLXz46FZrWS9xJg==} + zustand@3.7.2: + resolution: {integrity: sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==} + engines: {node: '>=12.7.0'} + peerDependencies: + react: '>=16.8' + peerDependenciesMeta: + react: + optional: true + zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -11696,6 +11955,10 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 + '@babel/runtime@7.26.0': + dependencies: + regenerator-runtime: 0.14.1 + '@babel/template@7.25.7': dependencies: '@babel/code-frame': 7.25.7 @@ -11768,6 +12031,10 @@ snapshots: '@chevrotain/utils@11.0.3': {} + '@choojs/findup@0.2.1': + dependencies: + commander: 2.20.3 + '@colors/colors@1.5.0': optional: true @@ -14386,6 +14653,39 @@ snapshots: - vue-template-compiler - webpack + '@react-spring/animated@9.7.5(react@18.3.1)': + dependencies: + '@react-spring/shared': 9.7.5(react@18.3.1) + '@react-spring/types': 9.7.5 + react: 18.3.1 + + '@react-spring/core@9.7.5(react@18.3.1)': + dependencies: + '@react-spring/animated': 9.7.5(react@18.3.1) + '@react-spring/shared': 9.7.5(react@18.3.1) + '@react-spring/types': 9.7.5 + react: 18.3.1 + + '@react-spring/rafz@9.7.5': {} + + '@react-spring/shared@9.7.5(react@18.3.1)': + dependencies: + '@react-spring/rafz': 9.7.5 + '@react-spring/types': 9.7.5 + react: 18.3.1 + + '@react-spring/three@9.7.5(@react-three/fiber@8.17.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.171.0))(react@18.3.1)(three@0.171.0)': + dependencies: + '@react-spring/animated': 9.7.5(react@18.3.1) + '@react-spring/core': 9.7.5(react@18.3.1) + '@react-spring/shared': 9.7.5(react@18.3.1) + '@react-spring/types': 9.7.5 + '@react-three/fiber': 8.17.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.171.0) + react: 18.3.1 + three: 0.171.0 + + '@react-spring/types@9.7.5': {} + '@react-stately/calendar@3.6.0(react@18.3.1)': dependencies: '@internationalized/date': 3.6.0 @@ -14647,6 +14947,25 @@ snapshots: '@swc/helpers': 0.5.13 react: 18.3.1 + '@react-three/fiber@8.17.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.171.0)': + dependencies: + '@babel/runtime': 7.25.7 + '@types/debounce': 1.2.4 + '@types/react-reconciler': 0.26.7 + '@types/webxr': 0.5.20 + base64-js: 1.5.1 + buffer: 6.0.3 + debounce: 1.2.1 + its-fine: 1.2.5(react@18.3.1) + react: 18.3.1 + react-reconciler: 0.27.0(react@18.3.1) + scheduler: 0.21.0 + suspend-react: 0.1.3(react@18.3.1) + three: 0.171.0 + zustand: 3.7.2(react@18.3.1) + optionalDependencies: + react-dom: 18.3.1(react@18.3.1) + '@react-types/accordion@3.0.0-alpha.25(react@18.3.1)': dependencies: '@react-types/shared': 3.26.0(react@18.3.1) @@ -14949,6 +15268,10 @@ snapshots: transitivePeerDependencies: - supports-color + '@shadergradient/react@2.0.19(react@18.3.1)': + dependencies: + react: 18.3.1 + '@sindresorhus/is@4.6.0': {} '@sindresorhus/merge-streams@2.3.0': {} @@ -15812,6 +16135,8 @@ snapshots: '@tsconfig/node16@1.0.4': {} + '@tweenjs/tween.js@23.1.3': {} + '@types/d3-array@3.2.1': {} '@types/d3-axis@3.0.6': @@ -15929,10 +16254,14 @@ snapshots: '@types/d3-transition': 3.0.9 '@types/d3-zoom': 3.0.8 + '@types/debounce@1.2.4': {} + '@types/debug@4.1.12': dependencies: '@types/ms': 0.7.34 + '@types/draco3d@1.4.10': {} + '@types/estree-jsx@1.0.5': dependencies: '@types/estree': 1.0.6 @@ -16000,6 +16329,8 @@ snapshots: '@types/normalize-package-data@2.4.4': {} + '@types/offscreencanvas@2019.7.3': {} + '@types/parse-json@4.0.2': {} '@types/prop-types@15.7.13': {} @@ -16016,6 +16347,10 @@ snapshots: dependencies: '@types/react': 18.2.8 + '@types/react-reconciler@0.26.7': + dependencies: + '@types/react': 18.2.8 + '@types/react-reconciler@0.28.8': dependencies: '@types/react': 18.2.8 @@ -16043,6 +16378,17 @@ snapshots: '@types/semver@7.5.8': {} + '@types/stats.js@0.17.3': {} + + '@types/three@0.171.0': + dependencies: + '@tweenjs/tween.js': 23.1.3 + '@types/stats.js': 0.17.3 + '@types/webxr': 0.5.20 + '@webgpu/types': 0.1.52 + fflate: 0.8.2 + meshoptimizer: 0.18.1 + '@types/trusted-types@2.0.7': {} '@types/unist@2.0.11': {} @@ -16055,6 +16401,8 @@ snapshots: '@types/uuid@9.0.8': {} + '@types/webxr@0.5.20': {} + '@ungap/structured-clone@1.2.0': {} '@webassemblyjs/ast@1.12.1': @@ -16133,6 +16481,8 @@ snapshots: '@webassemblyjs/ast': 1.12.1 '@xtuc/long': 4.2.2 + '@webgpu/types@0.1.52': {} + '@xmldom/xmldom@0.8.10': {} '@xtuc/ieee754@1.2.0': {} @@ -17359,6 +17709,8 @@ snapshots: dotenv@16.4.5: {} + draco3d@1.5.7: {} + drange@1.1.1: {} duck@0.1.12: @@ -17657,6 +18009,10 @@ snapshots: dependencies: format: 0.2.2 + fflate@0.6.10: {} + + fflate@0.8.2: {} + figures@2.0.0: dependencies: escape-string-regexp: 1.0.5 @@ -17980,6 +18336,77 @@ snapshots: pify: 2.3.0 pinkie-promise: 2.0.1 + glsl-inject-defines@1.0.3: + dependencies: + glsl-token-inject-block: 1.1.0 + glsl-token-string: 1.0.1 + glsl-tokenizer: 2.1.5 + + glsl-resolve@0.0.1: + dependencies: + resolve: 0.6.3 + xtend: 2.2.0 + + glsl-token-assignments@2.0.2: {} + + glsl-token-defines@1.0.0: + dependencies: + glsl-tokenizer: 2.1.5 + + glsl-token-depth@1.1.2: {} + + glsl-token-descope@1.0.2: + dependencies: + glsl-token-assignments: 2.0.2 + glsl-token-depth: 1.1.2 + glsl-token-properties: 1.0.1 + glsl-token-scope: 1.1.2 + + glsl-token-inject-block@1.1.0: {} + + glsl-token-properties@1.0.1: {} + + glsl-token-scope@1.1.2: {} + + glsl-token-string@1.0.1: {} + + glsl-token-whitespace-trim@1.0.0: {} + + glsl-tokenizer@2.1.5: + dependencies: + through2: 0.6.5 + + glslify-bundle@5.1.1: + dependencies: + glsl-inject-defines: 1.0.3 + glsl-token-defines: 1.0.0 + glsl-token-depth: 1.1.2 + glsl-token-descope: 1.0.2 + glsl-token-scope: 1.1.2 + glsl-token-string: 1.0.1 + glsl-token-whitespace-trim: 1.0.0 + glsl-tokenizer: 2.1.5 + murmurhash-js: 1.0.0 + shallow-copy: 0.0.1 + + glslify-deps@1.3.2: + dependencies: + '@choojs/findup': 0.2.1 + events: 3.3.0 + glsl-resolve: 0.0.1 + glsl-tokenizer: 2.1.5 + graceful-fs: 4.2.11 + inherits: 2.0.4 + map-limit: 0.0.1 + resolve: 1.22.8 + + glslify-loader@2.0.0: + dependencies: + glslify-bundle: 5.1.1 + glslify-deps: 1.3.2 + loader-utils: 1.4.2 + resolve: 1.22.8 + goober@2.1.16(csstype@3.1.3): dependencies: csstype: 3.1.3 @@ -18555,6 +18982,8 @@ snapshots: dependencies: is-docker: 2.2.1 + isarray@0.0.1: {} + isarray@1.0.0: {} isarray@2.0.5: {} @@ -18569,6 +18998,11 @@ snapshots: lodash.isstring: 4.0.1 lodash.uniqby: 4.7.0 + its-fine@1.2.5(react@18.3.1): + dependencies: + '@types/react-reconciler': 0.28.8 + react: 18.3.1 + jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 @@ -18661,6 +19095,10 @@ snapshots: json-schema@0.4.0: {} + json5@1.0.2: + dependencies: + minimist: 1.2.8 + json5@2.2.3: {} jsonfile@6.1.0: @@ -18795,6 +19233,12 @@ snapshots: loader-runner@4.3.0: {} + loader-utils@1.4.2: + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 1.0.2 + loader-utils@2.0.4: dependencies: big.js: 5.2.2 @@ -18964,6 +19408,10 @@ snapshots: clsx: 2.1.1 react: 18.3.1 + map-limit@0.0.1: + dependencies: + once: 1.3.3 + markdown-it-ins@4.0.0: {} markdown-it-mark@4.0.0: {} @@ -19000,7 +19448,7 @@ snapshots: markmap-common@0.17.1: dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 '@gera2ld/jsx-dom': 2.2.2 npm2url: 0.2.4 @@ -19247,6 +19695,8 @@ snapshots: transitivePeerDependencies: - supports-color + meshoptimizer@0.18.1: {} + methods@1.1.2: {} micromark-core-commonmark@2.0.1: @@ -19579,6 +20029,8 @@ snapshots: ms@2.1.3: {} + murmurhash-js@1.0.0: {} + music-metadata@10.6.4: dependencies: '@tokenizer/token': 0.3.0 @@ -19835,6 +20287,10 @@ snapshots: dependencies: whatwg-fetch: 3.6.20 + once@1.3.3: + dependencies: + wrappy: 1.0.2 + once@1.4.0: dependencies: wrappy: 1.0.2 @@ -20446,6 +20902,8 @@ snapshots: dependencies: xtend: 4.0.2 + potpack@1.0.2: {} + preact-render-to-string@5.2.6(preact@10.24.3): dependencies: preact: 10.24.3 @@ -20574,6 +21032,12 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 + raw-loader@4.0.2(webpack@5.95.0): + dependencies: + loader-utils: 2.0.4 + schema-utils: 3.3.0 + webpack: 5.95.0 + rc@1.2.8: dependencies: deep-extend: 0.6.0 @@ -20835,6 +21299,12 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + react-reconciler@0.27.0(react@18.3.1): + dependencies: + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.21.0 + react-redux@7.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.25.7 @@ -20931,7 +21401,7 @@ snapshots: react-textarea-autosize@8.5.3(@types/react@18.2.8)(react@18.3.1): dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 react: 18.3.1 use-composed-ref: 1.3.0(react@18.3.1) use-latest: 1.2.1(@types/react@18.2.8)(react@18.3.1) @@ -20983,6 +21453,13 @@ snapshots: type-fest: 4.26.1 unicorn-magic: 0.1.0 + readable-stream@1.0.34: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 0.0.1 + string_decoder: 0.10.31 + readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 @@ -21152,6 +21629,8 @@ snapshots: resolve-url@0.2.1: {} + resolve@0.6.3: {} + resolve@1.1.7: {} resolve@1.22.8: @@ -21262,6 +21741,10 @@ snapshots: xmlchars: 2.2.0 optional: true + scheduler@0.21.0: + dependencies: + loose-envify: 1.4.0 + scheduler@0.23.2: dependencies: loose-envify: 1.4.0 @@ -21374,6 +21857,8 @@ snapshots: inherits: 2.0.4 safe-buffer: 5.2.1 + shallow-copy@0.0.1: {} + shallow-equal@3.1.0: {} sharp@0.33.5: @@ -21618,6 +22103,8 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.0.0 + string_decoder@0.10.31: {} + string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 @@ -21728,6 +22215,10 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} + suspend-react@0.1.3(react@18.3.1): + dependencies: + react: 18.3.1 + svgo@2.8.0: dependencies: '@trysound/sax': 0.2.0 @@ -21922,6 +22413,23 @@ snapshots: thirty-two@1.0.2: {} + three-stdlib@2.35.2(three@0.171.0): + dependencies: + '@types/draco3d': 1.4.10 + '@types/offscreencanvas': 2019.7.3 + '@types/webxr': 0.5.20 + draco3d: 1.5.7 + fflate: 0.6.10 + potpack: 1.0.2 + three: 0.171.0 + + three@0.171.0: {} + + through2@0.6.5: + dependencies: + readable-stream: 1.0.34 + xtend: 4.0.2 + through2@2.0.5: dependencies: readable-stream: 2.3.8 @@ -22707,6 +23215,8 @@ snapshots: xmlchars@2.2.0: optional: true + xtend@2.2.0: {} + xtend@4.0.2: {} y18n@5.0.8: {} @@ -22774,4 +23284,8 @@ snapshots: dependencies: tslib: 2.3.0 + zustand@3.7.2(react@18.3.1): + optionalDependencies: + react: 18.3.1 + zwitch@2.0.4: {} diff --git a/public/locales/ar/translation.json b/public/locales/ar/translation.json index bda734e..ad785d9 100644 --- a/public/locales/ar/translation.json +++ b/public/locales/ar/translation.json @@ -395,5 +395,8 @@ "offline-description": "يرجى التحقق من اتصالك بالإنترنت والمحاولة مرة أخرى", "retry": "إعادة المحاولة", "back-to-home": "العودة إلى الصفحة الرئيسية", - "offline": "غير متصل" + "offline": "غير متصل", + "close-background-animation": "إغلاق الخلفية المتحركة", + "custom-bg-tip": "انتقل إلى https://www.shadergradient.co/ لإنشاء خلفية التدرج الخاصة بك", + "custom-background-url": "الخلفية المخصصة" } diff --git a/public/locales/de/translation.json b/public/locales/de/translation.json index 1dffdbb..effdfcf 100644 --- a/public/locales/de/translation.json +++ b/public/locales/de/translation.json @@ -381,5 +381,8 @@ "offline-description": "Bitte überprüfen Sie Ihre Internetverbindung und versuchen Sie es erneut.", "retry": "Wiederholen", "back-to-home": "Zurück zur Startseite", - "offline": "Offline" + "offline": "Offline", + "close-background-animation": "Schließen der Hintergrundanimation", + "custom-bg-tip": "Gehe zu https://www.shadergradient.co/, um deinen eigenen Verlaufshintergrund zu erstellen.", + "custom-background-url": "Benutzerdefinierten Hintergrund" } diff --git a/public/locales/en/translation.json b/public/locales/en/translation.json index 03b08f1..1bae306 100644 --- a/public/locales/en/translation.json +++ b/public/locales/en/translation.json @@ -398,5 +398,8 @@ "offline-description": "Please check your internet connection and try again", "retry": "Retry", "back-to-home": "Back to Home", - "offline": "Offline" + "offline": "Offline", + "close-background-animation": "Close Background Animation", + "custom-background-url": "Custom Background", + "custom-bg-tip": "Go to https://www.shadergradient.co/ to create your own gradient background" } diff --git a/public/locales/es/translation.json b/public/locales/es/translation.json index 6675b1c..4d12dde 100644 --- a/public/locales/es/translation.json +++ b/public/locales/es/translation.json @@ -373,5 +373,8 @@ "offline-description": "Por favor, verifica tu conexión a internet e intenta de nuevo.", "retry": "Reintentar", "back-to-home": "Volver a casa", - "offline": "Sin conexión" + "offline": "Sin conexión", + "close-background-animation": "Cerrar Animación de Fondo", + "custom-bg-tip": "Ve a https://www.shadergradient.co/ para crear tu propio fondo degradado.", + "custom-background-url": "Fondo personalizado" } diff --git a/public/locales/fr/translation.json b/public/locales/fr/translation.json index fdd8f63..93b875d 100644 --- a/public/locales/fr/translation.json +++ b/public/locales/fr/translation.json @@ -370,5 +370,8 @@ "offline-description": "Veuillez vérifier votre connexion internet et réessayer", "retry": "Réessayer", "back-to-home": "Retour à la page d'accueil", - "offline": "Hors ligne" + "offline": "Hors ligne", + "close-background-animation": "Animation d'arrière-plan proche", + "custom-bg-tip": "Allez sur https://www.shadergradient.co/ pour créer votre propre arrière-plan dégradé.", + "custom-background-url": "Arrière-plan personnalisé" } diff --git a/public/locales/ja/translation.json b/public/locales/ja/translation.json index 98ffc6e..8d69012 100644 --- a/public/locales/ja/translation.json +++ b/public/locales/ja/translation.json @@ -355,5 +355,8 @@ "offline-description": "インターネット接続をチェックし、もう一度試してください", "retry": "リトライ", "back-to-home": "ホームに戻る", - "offline": "オフライン" + "offline": "オフライン", + "close-background-animation": "背景アニメーションを閉じる", + "custom-bg-tip": "https://www.shadergradient.co/ にアクセスして、独自のグラデーション背景を作成してください。", + "custom-background-url": "カスタム背景" } diff --git a/public/locales/ko/translation.json b/public/locales/ko/translation.json index 6ca74d1..05531f2 100644 --- a/public/locales/ko/translation.json +++ b/public/locales/ko/translation.json @@ -378,5 +378,8 @@ "offline-description": "인터넷 연결을 확인하고 다시 시도해주세요.", "retry": "다시 시도하세요.", "back-to-home": "집으로 돌아가기", - "offline": "오프라인." + "offline": "오프라인.", + "close-background-animation": "배경 애니메이션 닫기", + "custom-bg-tip": "https://www.shadergradient.co/ 에 방문하여 자체 그라데이션 배경을 만드세요.", + "custom-background-url": "사용자 정의 배경" } diff --git a/public/locales/pt/translation.json b/public/locales/pt/translation.json index a85e1dc..3dacf03 100644 --- a/public/locales/pt/translation.json +++ b/public/locales/pt/translation.json @@ -306,5 +306,8 @@ "offline-description": "Por favor, verifique a sua conexão à internet e tente novamente.", "retry": "Tentar novamente", "back-to-home": "De volta para casa", - "offline": "Offline" + "offline": "Offline", + "close-background-animation": "Fechar Animação de Fundo", + "custom-bg-tip": "Acesse https://www.shadergradient.co/ para criar seu próprio fundo de gradiente.", + "custom-background-url": "Fundo Personalizado" } diff --git a/public/locales/ru/translation.json b/public/locales/ru/translation.json index 90fbfbd..1c3dde1 100644 --- a/public/locales/ru/translation.json +++ b/public/locales/ru/translation.json @@ -314,5 +314,8 @@ "offline-description": "Пожалуйста, проверьте ваше интернет-соединение и попробуйте снова", "retry": "Повторить", "back-to-home": "Назад на главную", - "offline": "Офлайн" + "offline": "Офлайн", + "close-background-animation": "Закрыть фоновую анимацию", + "custom-bg-tip": "Перейдите на https://www.shadergradient.co/, чтобы создать свой собственный градиентный фон.", + "custom-background-url": "Пользовательский фон" } diff --git a/public/locales/tr/translation.json b/public/locales/tr/translation.json index 3440c8a..2cfbf35 100644 --- a/public/locales/tr/translation.json +++ b/public/locales/tr/translation.json @@ -324,5 +324,8 @@ "offline-description": "Lütfen internet bağlantınızı kontrol edin ve tekrar deneyin.", "retry": "Tekrar dene.", "back-to-home": "Anasayfaya geri dön", - "offline": "Çevrimdışı" + "offline": "Çevrimdışı", + "close-background-animation": "Arka Plan Animasyonunu Kapat", + "custom-bg-tip": "Kendi gradyan arka planınızı oluşturmak için https://www.shadergradient.co/ adresine gidin.", + "custom-background-url": "Özel Arka Plan" } diff --git a/public/locales/zh-TW/translation.json b/public/locales/zh-TW/translation.json index 37c906a..d8a5163 100644 --- a/public/locales/zh-TW/translation.json +++ b/public/locales/zh-TW/translation.json @@ -411,5 +411,8 @@ "offline-description": "請檢查您的網際網路連接,然後再試一次。", "retry": "重試", "back-to-home": "返回首頁", - "offline": "離線" + "offline": "離線", + "close-background-animation": "關閉背景動畫", + "custom-bg-tip": "前往https://www.shadergradient.co/ 創建您自己的漸層背景。", + "custom-background-url": "自訂背景" } diff --git a/public/locales/zh/translation.json b/public/locales/zh/translation.json index 15f355f..3b288f3 100644 --- a/public/locales/zh/translation.json +++ b/public/locales/zh/translation.json @@ -401,5 +401,8 @@ "offline-description": "请检查您的互联网连接,然后重试。", "retry": "重试", "back-to-home": "返回主页", - "offline": "离线" + "offline": "离线", + "close-background-animation": "关闭背景动画", + "custom-bg-tip": "访问 https://www.shadergradient.co/ 创建您自己的渐变背景", + "custom-background-url": "自定义背景" } diff --git a/src/components/BlinkoCard/index.tsx b/src/components/BlinkoCard/index.tsx index 9c4ff79..b60970c 100644 --- a/src/components/BlinkoCard/index.tsx +++ b/src/components/BlinkoCard/index.tsx @@ -26,9 +26,10 @@ interface BlinkoCardProps { }; isShareMode?: boolean; defaultExpanded?: boolean; + glassEffect?: boolean; } -export const BlinkoCard = observer(({ blinkoItem, isShareMode = false }: BlinkoCardProps) => { +export const BlinkoCard = observer(({ blinkoItem, isShareMode = false, glassEffect = false }: BlinkoCardProps) => { const isPc = useMediaQuery('(min-width: 768px)'); const blinko = RootStore.Get(BlinkoStore); const [isExpanded, setIsExpanded] = useState(false); @@ -88,7 +89,7 @@ export const BlinkoCard = observer(({ blinkoItem, isShareMode = false }: BlinkoC onContextMenu={e => !isPc && e.stopPropagation()} shadow='none' className={` - flex flex-col p-4 bg-background transition-all group/card + flex flex-col p-4 ${glassEffect ? 'bg-transparent' : 'bg-background'} transition-all group/card ${isExpanded ? 'h-screen overflow-y-scroll rounded-none' : ''} ${isPc && !isExpanded && !blinkoItem.isShare ? 'hover:translate-y-1' : ''} ${blinkoItem.isBlog ? 'cursor-pointer' : ''} diff --git a/src/components/BlinkoSettings/MusicSetting.tsx b/src/components/BlinkoSettings/MusicSetting.tsx index 0f9eb60..64cfd05 100644 --- a/src/components/BlinkoSettings/MusicSetting.tsx +++ b/src/components/BlinkoSettings/MusicSetting.tsx @@ -7,10 +7,12 @@ import { BlinkoStore } from "@/store/blinkoStore"; import { PromiseCall } from "@/store/standard/PromiseState"; import { api } from "@/lib/trpc"; import { CollapsibleCard } from "../Common/CollapsibleCard"; +import { useMediaQuery } from "usehooks-ts"; export const MusicSetting = observer(() => { const { t } = useTranslation(); const blinko = RootStore.Get(BlinkoStore); + const isPc = useMediaQuery('(min-width: 768px)'); return ( { title={t('music-settings')} > {t('spotify-consumer-key')}} toolTipContent={t('spotify-consumer-key-tip')} />
{t('spotify-consumer-key-tip-2')}
} rightContent={ { @@ -38,10 +42,12 @@ export const MusicSetting = observer(() => { /> {t('spotify-consumer-secret')}} rightContent={ { PromiseCall(api.config.update.mutate({ diff --git a/src/components/BlinkoSettings/PerferSetting.tsx b/src/components/BlinkoSettings/PerferSetting.tsx index 6f4574a..fae542b 100644 --- a/src/components/BlinkoSettings/PerferSetting.tsx +++ b/src/components/BlinkoSettings/PerferSetting.tsx @@ -1,5 +1,5 @@ import { observer } from "mobx-react-lite"; -import { Card, DropdownItem, DropdownMenu, DropdownTrigger, Dropdown, Select, SelectItem, Switch, Button, Input } from "@nextui-org/react"; +import { Card, DropdownItem, DropdownMenu, DropdownTrigger, Dropdown, Select, SelectItem, Switch, Button, Input, Tooltip } from "@nextui-org/react"; import { useTranslation } from "react-i18next"; import { Item, ItemWithTooltip, SelectDropdown } from "./Item"; import ThemeSwitcher from "../Common/ThemeSwitcher"; @@ -12,15 +12,18 @@ import { useState, useEffect } from "react"; import { useMediaQuery } from "usehooks-ts"; import { Icon } from "@iconify/react"; import { CollapsibleCard } from "../Common/CollapsibleCard"; +import { GradientBackground } from "../Common/GradientBackground"; export const PerferSetting = observer(() => { const { t } = useTranslation() const isPc = useMediaQuery('(min-width: 768px)') const blinko = RootStore.Get(BlinkoStore) const [textLength, setTextLength] = useState(blinko.config.value?.textFoldLength?.toString() || '500'); + const [customBackgroundUrl, setCustomBackgroundUrl] = useState(blinko.config.value?.customBackgroundUrl || ''); useEffect(() => { setTextLength(blinko.config.value?.textFoldLength?.toString() || '500'); + setCustomBackgroundUrl(blinko.config.value?.customBackgroundUrl || ''); }, [blinko.config.value?.textFoldLength]); @@ -225,5 +228,46 @@ export const PerferSetting = observer(() => { }} /> } /> + + + {t('close-background-animation')}} + rightContent={ + +
+ }> + { + PromiseCall(api.config.update.mutate({ + key: 'isCloseBackgroundAnimation', + value: e.target.checked + })) + }} + /> +
+ } /> + + +
{t('custom-background-url')}
+
{t('custom-bg-tip')}
+ } + rightContent={ { + setCustomBackgroundUrl(e.target.value) + }} + onBlur={e => { + PromiseCall(api.config.update.mutate({ + key: 'customBackgroundUrl', + value: customBackgroundUrl + })) + }} />} /> +
}) \ No newline at end of file diff --git a/src/components/Common/GradientBackground.tsx b/src/components/Common/GradientBackground.tsx new file mode 100644 index 0000000..19d4114 --- /dev/null +++ b/src/components/Common/GradientBackground.tsx @@ -0,0 +1,64 @@ +import { ReactNode } from 'react'; +import { ShaderGradientCanvas, ShaderGradient } from '@shadergradient/react'; +import { RootStore } from '@/store/root'; +import { BlinkoStore } from '@/store/blinkoStore'; +import { cn } from '@nextui-org/react'; +interface GradientBackgroundProps { + children: ReactNode; + className?: string; +} + +export const GradientBackground = ({ children, className }: GradientBackgroundProps) => { + const blinko = RootStore.Get(BlinkoStore) + + return ( +
+ + { + blinko.config.value?.customBackgroundUrl ? + + : + + } + +
+ {children} +
+
+ ); +}; \ No newline at end of file diff --git a/src/pages/share/[id].tsx b/src/pages/share/[id].tsx index 19c0248..8ebb21e 100644 --- a/src/pages/share/[id].tsx +++ b/src/pages/share/[id].tsx @@ -8,7 +8,12 @@ import { useRouter } from "next/router"; import { useEffect } from "react"; import { useMediaQuery } from "usehooks-ts"; import VanillaTilt from 'vanilla-tilt'; +import dynamic from "next/dynamic"; +const GradientBackground = dynamic( + () => import('@/components/Common/GradientBackground').then((mod) => mod.GradientBackground), + { ssr: false } +); const Page = observer(() => { const isPc = useMediaQuery('(min-width: 768px)') const router = useRouter() @@ -32,19 +37,21 @@ const Page = observer(() => { VanillaTilt.init(elements as any, { max: 2, speed: 400, - glare: true, - "max-glare": 0.5, + glare: false, + "max-glare": 0 }); }, [store.shareNote?.value]); - return
- { - store.shareNote?.value && -
- -
- } -
+ return +
+ { + store.shareNote?.value && +
+ +
+ } +
+
}); export default Page \ No newline at end of file diff --git a/src/pages/signin.tsx b/src/pages/signin.tsx index 4a872a3..c5168af 100644 --- a/src/pages/signin.tsx +++ b/src/pages/signin.tsx @@ -12,7 +12,11 @@ import { ShowTwoFactorModal } from "@/components/Common/TwoFactorModal"; import { DialogStore } from "@/store/module/Dialog"; import { PromiseState } from "@/store/standard/PromiseState"; import { useTheme } from "next-themes"; -import { eventBus } from "@/lib/event"; +import dynamic from 'next/dynamic'; +const GradientBackground = dynamic( + () => import('@/components/Common/GradientBackground').then((mod) => mod.GradientBackground), + { ssr: false } +); export default function Component() { const router = useRouter() @@ -97,72 +101,74 @@ export default function Component() { } return ( -
-
-

- Login With

-
e.preventDefault()}> - setUser(e.target.value?.trim())} - /> - setIsVisible(!isVisible)}> - {isVisible ? ( - - ) : ( - - )} - - } - label={t('password')} - name="password" - placeholder={t('enter-your-password')} - type={isVisible ? "text" : "password"} - variant="bordered" - value={password} - onKeyDown={(e) => { - if (e.key === 'Enter') { - login() + +
+
+

+ Login With

+ e.preventDefault()}> + setUser(e.target.value?.trim())} + /> + setIsVisible(!isVisible)}> + {isVisible ? ( + + ) : ( + + )} + } - }} - onChange={e => setPassword(e.target.value?.trim())} - /> -
- - {t('keep-sign-in')} - -
- - - { - canRegister &&

- {t('need-to-create-an-account')}  - - {t('sign-up')} - -

- } + label={t('password')} + name="password" + placeholder={t('enter-your-password')} + type={isVisible ? "text" : "password"} + variant="bordered" + value={password} + onKeyDown={(e) => { + if (e.key === 'Enter') { + login() + } + }} + onChange={e => setPassword(e.target.value?.trim())} + /> +
+ + {t('keep-sign-in')} + +
+ + + { + canRegister &&

+ {t('need-to-create-an-account')}  + + {t('sign-up')} + +

+ } +
-
+ ); } diff --git a/src/pages/signup.tsx b/src/pages/signup.tsx index 2248e0c..39aebc1 100644 --- a/src/pages/signup.tsx +++ b/src/pages/signup.tsx @@ -6,6 +6,12 @@ import { RootStore } from "@/store/root"; import { ToastPlugin } from "@/store/module/Toast/Toast"; import { useTranslation } from "react-i18next"; import { api } from "@/lib/trpc"; +import dynamic from 'next/dynamic'; + +const GradientBackground = dynamic( + () => import('@/components/Common/GradientBackground').then((mod) => mod.GradientBackground), + { ssr: false } +); export default function Component() { const router = useRouter() @@ -20,104 +26,106 @@ export default function Component() { const [password2, setPassword2] = React.useState(""); const { t } = useTranslation() return ( -
-
-

- {t('sign-up')} - - 👋 - -

-
e.preventDefault()}> - setUser(e.target.value)} - /> - - {isVisible ? ( - - ) : ( - - )} - - } - label={t('password')} - labelPlacement="outside" - name="password" - placeholder={t('enter-your-password')} - type={isVisible ? "text" : "password"} - variant="bordered" - value={password} - onChange={e => setPassword(e.target.value)} - /> - - {isConfirmVisible ? ( - - ) : ( - - )} - - } - label={t('confirm-password')} - labelPlacement="outside" - name="confirmPassword" - placeholder={t('confirm-your-password')} - type={isConfirmVisible ? "text" : "password"} - variant="bordered" - value={password2} - onChange={e => setPassword2(e.target.value)} - /> - - -

- - {t('already-have-an-account-direct-login')} - -

+ + 👋 + +

+
e.preventDefault()}> + setUser(e.target.value)} + /> + + {isVisible ? ( + + ) : ( + + )} + + } + label={t('password')} + labelPlacement="outside" + name="password" + placeholder={t('enter-your-password')} + type={isVisible ? "text" : "password"} + variant="bordered" + value={password} + onChange={e => setPassword(e.target.value)} + /> + + {isConfirmVisible ? ( + + ) : ( + + )} + + } + label={t('confirm-password')} + labelPlacement="outside" + name="confirmPassword" + placeholder={t('confirm-your-password')} + type={isConfirmVisible ? "text" : "password"} + variant="bordered" + value={password2} + onChange={e => setPassword2(e.target.value)} + /> + + +

+ + {t('already-have-an-account-direct-login')} + +

+
-
+ ); } diff --git a/src/server/types.ts b/src/server/types.ts index f4cc1cb..fd90876 100644 --- a/src/server/types.ts +++ b/src/server/types.ts @@ -53,6 +53,8 @@ export const ZConfigKey = z.union([ z.literal('excludeEmbeddingTagId'), z.literal('spotifyConsumerKey'), z.literal('spotifyConsumerSecret'), + z.literal('isCloseBackgroundAnimation'), + z.literal('customBackgroundUrl'), ZUserPerferConfigKey ]); @@ -70,6 +72,8 @@ export const ZConfigSchema = z.object({ isHiddenMobileBar: z.boolean().optional(), toolbarVisibility: z.any().optional(), isAllowRegister: z.any().optional(), + isCloseBackgroundAnimation: z.boolean().optional(), + customBackgroundUrl: z.any().optional(), isOrderByCreateTime: z.any().optional(), timeFormat: z.any().optional(), smallDeviceCardColumns: z.any().optional(), diff --git a/src/styles/globals.css b/src/styles/globals.css index 2e5c076..d61d9a8 100644 --- a/src/styles/globals.css +++ b/src/styles/globals.css @@ -245,7 +245,19 @@ body { } } -@layer components {} +@layer components { + .glass-effect { + background: rgba(255, 255, 255, 0.85); + backdrop-filter: blur(8px); + -webkit-backdrop-filter: blur(8px); + } + + .dark .glass-effect { + background: rgba(11, 11, 12, 0.8); + backdrop-filter: blur(8px); + -webkit-backdrop-filter: blur(8px); + } +} diff --git a/tailwind.config.js b/tailwind.config.js index e635f38..e8c2769 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -166,9 +166,13 @@ module.exports = { safelist: [ { pattern: - /^(bg-(?:slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose)-(?:50|100|200|300|400|500|600|700|800|900|950))$/, + /^(bg-(?:slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose|background)-(?:50|100|200|300|400|500|600|700|800|900|950))$/, variants: ['hover', 'ui-selected'], }, + { + pattern: /^(bg-(?:background)\/[0-9]+)$/, + variants: ['hover'], + }, { pattern: /^(text-(?:slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose)-(?:50|100|200|300|400|500|600|700|800|900|950))$/,