From ffc9c6decf9280d1c63d2dde893403d5701da058 Mon Sep 17 00:00:00 2001 From: senshinya <155552943+senshinya@users.noreply.github.com> Date: Sun, 20 Jul 2025 01:00:26 +0800 Subject: [PATCH] Revert "feat: upgrade tailwindcss v4" --- .commitlintrc.json | 22 - .eslintrc.js | 84 ++++ .eslintrc.json | 68 ---- .gitignore | 4 +- .prettierrc.js | 4 +- Dockerfile | 4 +- README.md | 2 +- commitlint.config.js | 30 +- jest.config.cjs => jest.config.js | 16 +- jest.setup.js | 4 +- next.config.js | 27 +- package.json | 13 +- pnpm-lock.yaml | 556 ++++++++++++-------------- postcss.config.js | 5 +- scripts/convert-config.js | 32 +- scripts/generate-manifest.js | 64 ++- src/app/admin/page.tsx | 14 +- src/app/douban/page.tsx | 2 +- src/app/globals.css | 32 +- src/app/login/page.tsx | 8 +- src/app/page.tsx | 14 +- src/app/play/page.tsx | 34 +- src/app/search/page.tsx | 4 +- src/components/CapsuleSwitch.tsx | 2 +- src/components/ContinueWatching.tsx | 6 +- src/components/DoubanCardSkeleton.tsx | 4 +- src/components/DoubanSelector.tsx | 4 +- src/components/EpisodeSelector.tsx | 20 +- src/components/MobileBottomNav.tsx | 4 +- src/components/MobileHeader.tsx | 2 +- src/components/ScrollableRow.tsx | 4 +- src/components/SettingsButton.tsx | 10 +- src/components/VideoCard.tsx | 10 +- src/styles/colors.css | 550 +++++++++++++++++++++++++ src/styles/globals.css | 118 ++++++ start.cjs => start.js | 36 +- tailwind.config.ts | 93 ++--- tsconfig.json | 9 +- 38 files changed, 1246 insertions(+), 669 deletions(-) delete mode 100644 .commitlintrc.json create mode 100644 .eslintrc.js delete mode 100644 .eslintrc.json rename jest.config.cjs => jest.config.js (67%) create mode 100644 src/styles/colors.css create mode 100644 src/styles/globals.css rename start.cjs => start.js (67%) diff --git a/.commitlintrc.json b/.commitlintrc.json deleted file mode 100644 index 99ffd9a..0000000 --- a/.commitlintrc.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "extends": ["@commitlint/config-conventional"], - "rules": { - "type-enum": [ - 2, - "always", - [ - "feat", - "fix", - "docs", - "chore", - "style", - "refactor", - "ci", - "test", - "perf", - "revert", - "vercel" - ] - ] - } -} diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..241cdcb --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,84 @@ +module.exports = { + env: { + browser: true, + es2021: true, + node: true, + }, + plugins: ['@typescript-eslint', 'simple-import-sort', 'unused-imports'], + extends: [ + 'eslint:recommended', + 'next', + 'next/core-web-vitals', + 'plugin:@typescript-eslint/recommended', + 'prettier', + ], + rules: { + 'no-unused-vars': 'off', + 'no-console': 'warn', + '@typescript-eslint/explicit-module-boundary-types': 'off', + 'react/no-unescaped-entities': 'off', + + 'react/display-name': 'off', + 'react/jsx-curly-brace-presence': [ + 'warn', + { props: 'never', children: 'never' }, + ], + + //#region //*=========== Unused Import =========== + '@typescript-eslint/no-unused-vars': 'off', + 'unused-imports/no-unused-imports': 'warn', + 'unused-imports/no-unused-vars': [ + 'warn', + { + vars: 'all', + varsIgnorePattern: '^_', + args: 'after-used', + argsIgnorePattern: '^_', + }, + ], + //#endregion //*======== Unused Import =========== + + //#region //*=========== Import Sort =========== + 'simple-import-sort/exports': 'warn', + 'simple-import-sort/imports': [ + 'warn', + { + groups: [ + // ext library & side effect imports + ['^@?\\w', '^\\u0000'], + // {s}css files + ['^.+\\.s?css$'], + // Lib and hooks + ['^@/lib', '^@/hooks'], + // static data + ['^@/data'], + // components + ['^@/components', '^@/container'], + // zustand store + ['^@/store'], + // Other imports + ['^@/'], + // relative paths up until 3 level + [ + '^\\./?$', + '^\\.(?!/?$)', + '^\\.\\./?$', + '^\\.\\.(?!/?$)', + '^\\.\\./\\.\\./?$', + '^\\.\\./\\.\\.(?!/?$)', + '^\\.\\./\\.\\./\\.\\./?$', + '^\\.\\./\\.\\./\\.\\.(?!/?$)', + ], + ['^@/types'], + // other that didnt fit in + ['^'], + ], + }, + ], + //#endregion //*======== Import Sort =========== + }, + globals: { + React: true, + JSX: true, + }, +}; diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index df45a00..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "env": { - "browser": true, - "es2021": true, - "node": true - }, - "plugins": ["@typescript-eslint", "simple-import-sort", "unused-imports"], - "extends": [ - "eslint:recommended", - "next", - "next/core-web-vitals", - "plugin:@typescript-eslint/recommended", - "prettier" - ], - "rules": { - "no-unused-vars": "off", - "no-console": "warn", - "@typescript-eslint/explicit-module-boundary-types": "off", - "react/no-unescaped-entities": "off", - "react/display-name": "off", - "react/jsx-curly-brace-presence": [ - "warn", - { "props": "never", "children": "never" } - ], - "@typescript-eslint/no-unused-vars": "off", - "unused-imports/no-unused-imports": "warn", - "unused-imports/no-unused-vars": [ - "warn", - { - "vars": "all", - "varsIgnorePattern": "^_", - "args": "after-used", - "argsIgnorePattern": "^_" - } - ], - "simple-import-sort/exports": "warn", - "simple-import-sort/imports": [ - "warn", - { - "groups": [ - ["^@?\\w", "^\\u0000"], - ["^.+\\.s?css$"], - ["^@/lib", "^@/hooks"], - ["^@/data"], - ["^@/components", "^@/container"], - ["^@/store"], - ["^@/"], - [ - "^\\./?$", - "^\\.(?!/?$)", - "^\\.\\./?$", - "^\\.\\.(?!/?$)", - "^\\.\\./\\.\\./?$", - "^\\.\\./\\.\\.(?!/?$)", - "^\\.\\./\\.\\./\\.\\./?$", - "^\\.\\./\\.\\./\\.\\.(?!/?$)" - ], - ["^@/types"], - ["^"] - ] - } - ] - }, - "globals": { - "React": true, - "JSX": true - } -} diff --git a/.gitignore b/.gitignore index 8d74858..d2a80c9 100644 --- a/.gitignore +++ b/.gitignore @@ -42,6 +42,4 @@ sitemap-*.xml # generated files src/lib/runtime.ts -public/manifest.json -public/sw.js -public/workbox-*.js \ No newline at end of file +public/manifest.json \ No newline at end of file diff --git a/.prettierrc.js b/.prettierrc.js index 84b9a8f..5c34464 100644 --- a/.prettierrc.js +++ b/.prettierrc.js @@ -1,5 +1,5 @@ -export default { - arrowParens: "always", +module.exports = { + arrowParens: 'always', singleQuote: true, jsxSingleQuote: true, tabWidth: 2, diff --git a/Dockerfile b/Dockerfile index 96c20fa..82c9788 100644 --- a/Dockerfile +++ b/Dockerfile @@ -51,7 +51,7 @@ COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ # 从构建器中复制 scripts 目录 COPY --from=builder --chown=nextjs:nodejs /app/scripts ./scripts # 从构建器中复制 start.js -COPY --from=builder --chown=nextjs:nodejs /app/start.cjs ./start.cjs +COPY --from=builder --chown=nextjs:nodejs /app/start.js ./start.js # 从构建器中复制 public 和 .next/static 目录 COPY --from=builder --chown=nextjs:nodejs /app/public ./public COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static @@ -63,4 +63,4 @@ USER nextjs EXPOSE 3000 # 使用自定义启动脚本,先预加载配置再启动服务器 -CMD ["node", "start.cjs"] \ No newline at end of file +CMD ["node", "start.js"] \ No newline at end of file diff --git a/README.md b/README.md index 8c72b00..f031d58 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ | 分类 | 主要依赖 | | --------- | ----------------------------------------------------------------------------------------------------- | | 前端框架 | [Next.js 14](https://nextjs.org/) · App Router | -| UI & 样式 | [Tailwind CSS 4](https://tailwindcss.com/) | +| UI & 样式 | [Tailwind CSS 3](https://tailwindcss.com/) | | 语言 | TypeScript 4 | | 播放器 | [ArtPlayer](https://github.com/zhw2590582/ArtPlayer) · [HLS.js](https://github.com/video-dev/hls.js/) | | 代码质量 | ESLint · Prettier · Jest | diff --git a/commitlint.config.js b/commitlint.config.js index 52f78b3..3bf488d 100644 --- a/commitlint.config.js +++ b/commitlint.config.js @@ -1,23 +1,23 @@ -export default { - extends: ["@commitlint/config-conventional"], +module.exports = { + extends: ['@commitlint/config-conventional'], rules: { // TODO Add Scope Enum Here // 'scope-enum': [2, 'always', ['yourscope', 'yourscope']], - "type-enum": [ + 'type-enum': [ 2, - "always", + 'always', [ - "feat", - "fix", - "docs", - "chore", - "style", - "refactor", - "ci", - "test", - "perf", - "revert", - "vercel", + 'feat', + 'fix', + 'docs', + 'chore', + 'style', + 'refactor', + 'ci', + 'test', + 'perf', + 'revert', + 'vercel', ], ], }, diff --git a/jest.config.cjs b/jest.config.js similarity index 67% rename from jest.config.cjs rename to jest.config.js index aaa191a..10886cb 100644 --- a/jest.config.cjs +++ b/jest.config.js @@ -1,28 +1,28 @@ // eslint-disable-next-line @typescript-eslint/no-var-requires -const nextJest = require("next/jest"); +const nextJest = require('next/jest'); const createJestConfig = nextJest({ // Provide the path to your Next.js app to load next.config.js and .env files in your test environment - dir: "./", + dir: './', }); // Add any custom config to be passed to Jest const customJestConfig = { // Add more setup options before each test is run - setupFilesAfterEnv: ["/jest.setup.js"], + setupFilesAfterEnv: ['/jest.setup.js'], // if using TypeScript with a baseUrl set to the root directory then you need the below for alias' to work - moduleDirectories: ["node_modules", "/"], + moduleDirectories: ['node_modules', '/'], - testEnvironment: "jest-environment-jsdom", + testEnvironment: 'jest-environment-jsdom', /** * Absolute imports and Module Path Aliases */ moduleNameMapper: { - "^@/(.*)$": "/src/$1", - "^~/(.*)$": "/public/$1", - "^.+\\.(svg)$": "/src/__mocks__/svg.tsx", + '^@/(.*)$': '/src/$1', + '^~/(.*)$': '/public/$1', + '^.+\\.(svg)$': '/src/__mocks__/svg.tsx', }, }; diff --git a/jest.setup.js b/jest.setup.js index 7a9bf91..3f1e9e1 100644 --- a/jest.setup.js +++ b/jest.setup.js @@ -1,5 +1,5 @@ -import "@testing-library/jest-dom/extend-expect"; +import '@testing-library/jest-dom/extend-expect'; // Allow router mocks. // eslint-disable-next-line no-undef -jest.mock("next/router", () => require("next-router-mock")); +jest.mock('next/router', () => require('next-router-mock')); diff --git a/next.config.js b/next.config.js index 5261a53..db8e508 100644 --- a/next.config.js +++ b/next.config.js @@ -1,10 +1,9 @@ /** @type {import('next').NextConfig} */ -import withPWA from "next-pwa"; - +/* eslint-disable @typescript-eslint/no-var-requires */ const nextConfig = { - output: "standalone", + output: 'standalone', eslint: { - dirs: ["src"], + dirs: ['src'], }, reactStrictMode: false, @@ -15,12 +14,12 @@ const nextConfig = { unoptimized: true, remotePatterns: [ { - protocol: "https", - hostname: "**", + protocol: 'https', + hostname: '**', }, { - protocol: "http", - hostname: "**", + protocol: 'http', + hostname: '**', }, ], }, @@ -28,7 +27,7 @@ const nextConfig = { webpack(config) { // Grab the existing rule that handles SVG imports const fileLoaderRule = config.module.rules.find((rule) => - rule.test?.test?.(".svg") + rule.test?.test?.('.svg') ); config.module.rules.push( @@ -43,7 +42,7 @@ const nextConfig = { test: /\.svg$/i, issuer: { not: /\.(css|scss|sass)$/ }, resourceQuery: { not: /url/ }, // exclude if *.svg?url - loader: "@svgr/webpack", + loader: '@svgr/webpack', options: { dimensions: false, titleProp: true, @@ -65,11 +64,11 @@ const nextConfig = { }, }; -const pwaConfig = withPWA({ - dest: "public", - disable: process.env.NODE_ENV === "development", +const withPWA = require('next-pwa')({ + dest: 'public', + disable: process.env.NODE_ENV === 'development', register: true, skipWaiting: true, }); -export default pwaConfig(nextConfig); +module.exports = withPWA(nextConfig); diff --git a/package.json b/package.json index 516ac91..03d919b 100644 --- a/package.json +++ b/package.json @@ -2,14 +2,13 @@ "name": "moontv", "version": "0.1.0", "private": true, - "type": "module", "scripts": { "dev": "pnpm gen:runtime && pnpm gen:manifest && next dev -H 0.0.0.0", "build": "pnpm gen:runtime && pnpm gen:manifest && next build", "start": "next start", "lint": "next lint", "lint:fix": "eslint src --fix && pnpm format", - "lint:strict": "eslint --max-warnings=10 src", + "lint:strict": "eslint --max-warnings=0 src", "typecheck": "tsc --noEmit --incremental false", "test:watch": "jest --watch", "test": "jest", @@ -55,7 +54,6 @@ "@commitlint/config-conventional": "^16.2.4", "@svgr/webpack": "^8.1.0", "@tailwindcss/forms": "^0.5.10", - "@tailwindcss/postcss": "^4.1.11", "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^15.0.7", "@types/node": "24.0.3", @@ -64,6 +62,7 @@ "@types/testing-library__jest-dom": "^5.14.9", "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", + "autoprefixer": "^10.4.20", "eslint": "^8.57.1", "eslint-config-next": "^14.2.23", "eslint-config-prettier": "^8.10.0", @@ -75,13 +74,13 @@ "next-router-mock": "^0.9.0", "postcss": "^8.5.1", "prettier": "^2.8.8", - "prettier-plugin-tailwindcss": "^0.6.14", - "tailwindcss": "^4.1.11", + "prettier-plugin-tailwindcss": "^0.5.0", + "tailwindcss": "^3.4.17", "typescript": "^4.9.5" }, "lint-staged": { "**/*.{js,jsx,ts,tsx}": [ - "eslint --max-warnings=10", + "eslint --max-warnings=0", "prettier -w" ], "**/*.{json,css,scss,md,webmanifest}": [ @@ -89,4 +88,4 @@ ] }, "packageManager": "pnpm@10.12.4+sha512.5ea8b0deed94ed68691c9bad4c955492705c5eeb8a87ef86bc62c74a26b037b08ff9570f108b2e4dbd1dd1a9186fea925e527f141c648e85af45631074680184" -} +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4b8c8bb..20569b3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -101,10 +101,7 @@ importers: version: 8.1.0(typescript@4.9.5) '@tailwindcss/forms': specifier: ^0.5.10 - version: 0.5.10(tailwindcss@4.1.11) - '@tailwindcss/postcss': - specifier: ^4.1.11 - version: 4.1.11 + version: 0.5.10(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@24.0.3)(typescript@4.9.5))) '@testing-library/jest-dom': specifier: ^5.17.0 version: 5.17.0 @@ -129,6 +126,9 @@ importers: '@typescript-eslint/parser': specifier: ^5.62.0 version: 5.62.0(eslint@8.57.1)(typescript@4.9.5) + autoprefixer: + specifier: ^10.4.20 + version: 10.4.21(postcss@8.5.6) eslint: specifier: ^8.57.1 version: 8.57.1 @@ -163,11 +163,11 @@ importers: specifier: ^2.8.8 version: 2.8.8 prettier-plugin-tailwindcss: - specifier: ^0.6.14 - version: 0.6.14(prettier@2.8.8) + specifier: ^0.5.0 + version: 0.5.14(prettier@2.8.8) tailwindcss: - specifier: ^4.1.11 - version: 4.1.11 + specifier: ^3.4.17 + version: 3.4.17(ts-node@10.9.2(@types/node@24.0.3)(typescript@4.9.5)) typescript: specifier: ^4.9.5 version: 4.9.5 @@ -1783,94 +1783,6 @@ packages: peerDependencies: tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1' - '@tailwindcss/node@4.1.11': - resolution: {integrity: sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==} - - '@tailwindcss/oxide-android-arm64@4.1.11': - resolution: {integrity: sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [android] - - '@tailwindcss/oxide-darwin-arm64@4.1.11': - resolution: {integrity: sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - - '@tailwindcss/oxide-darwin-x64@4.1.11': - resolution: {integrity: sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - - '@tailwindcss/oxide-freebsd-x64@4.1.11': - resolution: {integrity: sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [freebsd] - - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11': - resolution: {integrity: sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==} - engines: {node: '>= 10'} - cpu: [arm] - os: [linux] - - '@tailwindcss/oxide-linux-arm64-gnu@4.1.11': - resolution: {integrity: sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@tailwindcss/oxide-linux-arm64-musl@4.1.11': - resolution: {integrity: sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@tailwindcss/oxide-linux-x64-gnu@4.1.11': - resolution: {integrity: sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@tailwindcss/oxide-linux-x64-musl@4.1.11': - resolution: {integrity: sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@tailwindcss/oxide-wasm32-wasi@4.1.11': - resolution: {integrity: sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - bundledDependencies: - - '@napi-rs/wasm-runtime' - - '@emnapi/core' - - '@emnapi/runtime' - - '@tybys/wasm-util' - - '@emnapi/wasi-threads' - - tslib - - '@tailwindcss/oxide-win32-arm64-msvc@4.1.11': - resolution: {integrity: sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - - '@tailwindcss/oxide-win32-x64-msvc@4.1.11': - resolution: {integrity: sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - - '@tailwindcss/oxide@4.1.11': - resolution: {integrity: sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==} - engines: {node: '>= 10'} - - '@tailwindcss/postcss@4.1.11': - resolution: {integrity: sha512-q/EAIIpF6WpLhKEuQSEVMZNMIY8KhWoAemZ9eylNAih9jxMGAYPPWBn3I9QL/2jZ+e7OEz/tZkX5HwbBR4HohA==} - '@tanstack/react-virtual@3.13.10': resolution: {integrity: sha512-nvrzk4E9mWB4124YdJ7/yzwou7IfHxlSef6ugCFcBfRmsnsma3heciiiV97sBNxyc3VuwtZvmwXd0aB5BpucVw==} peerDependencies: @@ -2441,6 +2353,9 @@ packages: arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} @@ -2553,6 +2468,13 @@ packages: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} + autoprefixer@10.4.21: + resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} @@ -2686,6 +2608,10 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + camelcase-keys@6.2.2: resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} engines: {node: '>=8'} @@ -2829,6 +2755,10 @@ packages: commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + commander@7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} @@ -2942,6 +2872,11 @@ packages: css.escape@1.5.1: resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + csso@5.0.5: resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} @@ -3067,6 +3002,9 @@ packages: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + diff-sequences@27.5.1: resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -3079,6 +3017,9 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} @@ -3737,6 +3678,9 @@ packages: resolution: {integrity: sha512-q5YBMeWy6E2Un0nMGWMgI65MAKtaylxfNJGJxpGh45YDciZB4epbWpaAfImil6CPAPTYB4sh0URQNDRIZG5F2w==} engines: {node: '>= 6'} + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + framer-motion@12.18.1: resolution: {integrity: sha512-6o4EDuRPLk4LSZ1kRnnEOurbQ86MklVk+Y1rFBUKiF+d2pCdvMjWVu0ZkyMVCTwl5UyTH2n/zJEJx+jvTYuxow==} peerDependencies: @@ -4407,8 +4351,8 @@ packages: node-notifier: optional: true - jiti@2.4.2: - resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + jiti@1.21.7: + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true jose@5.9.6: @@ -4515,74 +4459,14 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lightningcss-darwin-arm64@1.30.1: - resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [darwin] - - lightningcss-darwin-x64@1.30.1: - resolution: {integrity: sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [darwin] - - lightningcss-freebsd-x64@1.30.1: - resolution: {integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [freebsd] - - lightningcss-linux-arm-gnueabihf@1.30.1: - resolution: {integrity: sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==} - engines: {node: '>= 12.0.0'} - cpu: [arm] - os: [linux] - - lightningcss-linux-arm64-gnu@1.30.1: - resolution: {integrity: sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - - lightningcss-linux-arm64-musl@1.30.1: - resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - - lightningcss-linux-x64-gnu@1.30.1: - resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - - lightningcss-linux-x64-musl@1.30.1: - resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - - lightningcss-win32-arm64-msvc@1.30.1: - resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [win32] - - lightningcss-win32-x64-msvc@1.30.1: - resolution: {integrity: sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [win32] - - lightningcss@1.30.1: - resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==} - engines: {node: '>= 12.0.0'} - lilconfig@2.0.5: resolution: {integrity: sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==} engines: {node: '>=10'} + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -4661,9 +4545,6 @@ packages: magic-string@0.25.9: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} - magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} - make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} @@ -4838,6 +4719,9 @@ packages: resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} hasBin: true + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -4948,6 +4832,10 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -4962,6 +4850,10 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + object-inspect@1.13.4: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} @@ -5087,6 +4979,7 @@ packages: path-match@1.2.4: resolution: {integrity: sha512-UWlehEdqu36jmh4h5CWJ7tARp1OEVKGHKm6+dg9qMq5RKUTV5WJrGgaZ3dN2m7WFAXDbjlHzvJvL/IUpy84Ktw==} + deprecated: This package is archived and no longer maintained. For support, visit https://github.com/expressjs/express/discussions path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -5164,6 +5057,43 @@ packages: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} + postcss-import@15.1.0: + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.0.1: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + + postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + postcss@8.4.31: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} @@ -5176,24 +5106,21 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier-plugin-tailwindcss@0.6.14: - resolution: {integrity: sha512-pi2e/+ZygeIqntN+vC573BcW5Cve8zUB0SSAGxqpB4f96boZF4M3phPVoOFCeypwkpRYdi7+jQ5YJJUwrkGUAg==} + prettier-plugin-tailwindcss@0.5.14: + resolution: {integrity: sha512-Puaz+wPUAhFp8Lo9HuciYKM2Y2XExESjeT+9NQoVFXZsPPnc9VYss2SpxdQ6vbatmt8/4+SN0oe0I1cPDABg9Q==} engines: {node: '>=14.21.3'} peerDependencies: '@ianvs/prettier-plugin-sort-imports': '*' - '@prettier/plugin-hermes': '*' - '@prettier/plugin-oxc': '*' '@prettier/plugin-pug': '*' '@shopify/prettier-plugin-liquid': '*' '@trivago/prettier-plugin-sort-imports': '*' - '@zackad/prettier-plugin-twig': '*' + '@zackad/prettier-plugin-twig-melody': '*' prettier: ^3.0 prettier-plugin-astro: '*' prettier-plugin-css-order: '*' prettier-plugin-import-sort: '*' prettier-plugin-jsdoc: '*' prettier-plugin-marko: '*' - prettier-plugin-multiline-arrays: '*' prettier-plugin-organize-attributes: '*' prettier-plugin-organize-imports: '*' prettier-plugin-sort-imports: '*' @@ -5202,17 +5129,13 @@ packages: peerDependenciesMeta: '@ianvs/prettier-plugin-sort-imports': optional: true - '@prettier/plugin-hermes': - optional: true - '@prettier/plugin-oxc': - optional: true '@prettier/plugin-pug': optional: true '@shopify/prettier-plugin-liquid': optional: true '@trivago/prettier-plugin-sort-imports': optional: true - '@zackad/prettier-plugin-twig': + '@zackad/prettier-plugin-twig-melody': optional: true prettier-plugin-astro: optional: true @@ -5224,8 +5147,6 @@ packages: optional: true prettier-plugin-marko: optional: true - prettier-plugin-multiline-arrays: - optional: true prettier-plugin-organize-attributes: optional: true prettier-plugin-organize-imports: @@ -5326,6 +5247,9 @@ packages: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} @@ -5781,6 +5705,11 @@ packages: babel-plugin-macros: optional: true + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -5825,8 +5754,10 @@ packages: tailwind-merge@2.6.0: resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} - tailwindcss@4.1.11: - resolution: {integrity: sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==} + tailwindcss@3.4.17: + resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} + engines: {node: '>=14.0.0'} + hasBin: true tapable@2.2.2: resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==} @@ -5884,6 +5815,13 @@ packages: text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + throat@6.0.2: resolution: {integrity: sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==} @@ -5941,6 +5879,9 @@ packages: resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} engines: {node: '>=8'} + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + ts-morph@12.0.0: resolution: {integrity: sha512-VHC8XgU2fFW7yO1f/b3mxKDje1vmyzFXHWzOYmKEkCEwcLjDtbdLgBQviqj4ZwP4MJkQtRo6Ha2I29lq/B+VxA==} @@ -6396,6 +6337,11 @@ packages: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} + yaml@2.8.0: + resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==} + engines: {node: '>= 14.6'} + hasBin: true + yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} @@ -8245,82 +8191,10 @@ snapshots: '@swc/counter': 0.1.3 tslib: 2.8.1 - '@tailwindcss/forms@0.5.10(tailwindcss@4.1.11)': + '@tailwindcss/forms@0.5.10(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@24.0.3)(typescript@4.9.5)))': dependencies: mini-svg-data-uri: 1.4.4 - tailwindcss: 4.1.11 - - '@tailwindcss/node@4.1.11': - dependencies: - '@ampproject/remapping': 2.3.0 - enhanced-resolve: 5.18.2 - jiti: 2.4.2 - lightningcss: 1.30.1 - magic-string: 0.30.17 - source-map-js: 1.2.1 - tailwindcss: 4.1.11 - - '@tailwindcss/oxide-android-arm64@4.1.11': - optional: true - - '@tailwindcss/oxide-darwin-arm64@4.1.11': - optional: true - - '@tailwindcss/oxide-darwin-x64@4.1.11': - optional: true - - '@tailwindcss/oxide-freebsd-x64@4.1.11': - optional: true - - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11': - optional: true - - '@tailwindcss/oxide-linux-arm64-gnu@4.1.11': - optional: true - - '@tailwindcss/oxide-linux-arm64-musl@4.1.11': - optional: true - - '@tailwindcss/oxide-linux-x64-gnu@4.1.11': - optional: true - - '@tailwindcss/oxide-linux-x64-musl@4.1.11': - optional: true - - '@tailwindcss/oxide-wasm32-wasi@4.1.11': - optional: true - - '@tailwindcss/oxide-win32-arm64-msvc@4.1.11': - optional: true - - '@tailwindcss/oxide-win32-x64-msvc@4.1.11': - optional: true - - '@tailwindcss/oxide@4.1.11': - dependencies: - detect-libc: 2.0.4 - tar: 7.4.3 - optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.1.11 - '@tailwindcss/oxide-darwin-arm64': 4.1.11 - '@tailwindcss/oxide-darwin-x64': 4.1.11 - '@tailwindcss/oxide-freebsd-x64': 4.1.11 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.11 - '@tailwindcss/oxide-linux-arm64-gnu': 4.1.11 - '@tailwindcss/oxide-linux-arm64-musl': 4.1.11 - '@tailwindcss/oxide-linux-x64-gnu': 4.1.11 - '@tailwindcss/oxide-linux-x64-musl': 4.1.11 - '@tailwindcss/oxide-wasm32-wasi': 4.1.11 - '@tailwindcss/oxide-win32-arm64-msvc': 4.1.11 - '@tailwindcss/oxide-win32-x64-msvc': 4.1.11 - - '@tailwindcss/postcss@4.1.11': - dependencies: - '@alloc/quick-lru': 5.2.0 - '@tailwindcss/node': 4.1.11 - '@tailwindcss/oxide': 4.1.11 - postcss: 8.5.6 - tailwindcss: 4.1.11 + tailwindcss: 3.4.17(ts-node@10.9.2(@types/node@24.0.3)(typescript@4.9.5)) '@tanstack/react-virtual@3.13.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: @@ -9008,6 +8882,8 @@ snapshots: arg@4.1.3: {} + arg@5.0.2: {} + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 @@ -9135,6 +9011,16 @@ snapshots: at-least-node@1.0.0: {} + autoprefixer@10.4.21(postcss@8.5.6): + dependencies: + browserslist: 4.25.0 + caniuse-lite: 1.0.30001723 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.1.0 @@ -9303,6 +9189,8 @@ snapshots: callsites@3.1.0: {} + camelcase-css@2.0.1: {} + camelcase-keys@6.2.2: dependencies: camelcase: 5.3.1 @@ -9430,6 +9318,8 @@ snapshots: commander@2.20.3: {} + commander@4.1.1: {} + commander@7.2.0: {} commander@9.5.0: {} @@ -9542,6 +9432,8 @@ snapshots: css.escape@1.5.1: {} + cssesc@3.0.0: {} + csso@5.0.5: dependencies: css-tree: 2.2.1 @@ -9649,6 +9541,8 @@ snapshots: detect-newline@3.1.0: {} + didyoumean@1.2.2: {} + diff-sequences@27.5.1: {} diff@4.0.2: {} @@ -9657,6 +9551,8 @@ snapshots: dependencies: path-type: 4.0.0 + dlv@1.1.3: {} + doctrine@2.1.0: dependencies: esutils: 2.0.3 @@ -10414,6 +10310,8 @@ snapshots: es-set-tostringtag: 2.1.0 mime-types: 2.1.35 + fraction.js@4.3.7: {} + framer-motion@12.18.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: motion-dom: 12.18.1 @@ -11343,7 +11241,7 @@ snapshots: - ts-node - utf-8-validate - jiti@2.4.2: {} + jiti@1.21.7: {} jose@5.9.6: {} @@ -11457,53 +11355,10 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - lightningcss-darwin-arm64@1.30.1: - optional: true - - lightningcss-darwin-x64@1.30.1: - optional: true - - lightningcss-freebsd-x64@1.30.1: - optional: true - - lightningcss-linux-arm-gnueabihf@1.30.1: - optional: true - - lightningcss-linux-arm64-gnu@1.30.1: - optional: true - - lightningcss-linux-arm64-musl@1.30.1: - optional: true - - lightningcss-linux-x64-gnu@1.30.1: - optional: true - - lightningcss-linux-x64-musl@1.30.1: - optional: true - - lightningcss-win32-arm64-msvc@1.30.1: - optional: true - - lightningcss-win32-x64-msvc@1.30.1: - optional: true - - lightningcss@1.30.1: - dependencies: - detect-libc: 2.0.4 - optionalDependencies: - lightningcss-darwin-arm64: 1.30.1 - lightningcss-darwin-x64: 1.30.1 - lightningcss-freebsd-x64: 1.30.1 - lightningcss-linux-arm-gnueabihf: 1.30.1 - lightningcss-linux-arm64-gnu: 1.30.1 - lightningcss-linux-arm64-musl: 1.30.1 - lightningcss-linux-x64-gnu: 1.30.1 - lightningcss-linux-x64-musl: 1.30.1 - lightningcss-win32-arm64-msvc: 1.30.1 - lightningcss-win32-x64-msvc: 1.30.1 - lilconfig@2.0.5: {} + lilconfig@3.1.3: {} + lines-and-columns@1.2.4: {} lint-staged@12.5.0: @@ -11595,10 +11450,6 @@ snapshots: dependencies: sourcemap-codec: 1.4.8 - magic-string@0.30.17: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 - make-dir@3.1.0: dependencies: semver: 6.3.1 @@ -11769,6 +11620,12 @@ snapshots: mustache@4.2.0: {} + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + nanoid@3.3.11: {} napi-postinstall@0.2.4: {} @@ -11875,6 +11732,8 @@ snapshots: normalize-path@3.0.0: {} + normalize-range@0.1.2: {} + npm-run-path@4.0.1: dependencies: path-key: 3.1.1 @@ -11887,6 +11746,8 @@ snapshots: object-assign@4.1.1: {} + object-hash@3.0.0: {} + object-inspect@1.13.4: {} object-keys@1.1.1: {} @@ -12074,6 +11935,38 @@ snapshots: possible-typed-array-names@1.1.0: {} + postcss-import@15.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.10 + + postcss-js@4.0.1(postcss@8.5.6): + dependencies: + camelcase-css: 2.0.1 + postcss: 8.5.6 + + postcss-load-config@4.0.2(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.0.3)(typescript@4.9.5)): + dependencies: + lilconfig: 3.1.3 + yaml: 2.8.0 + optionalDependencies: + postcss: 8.5.6 + ts-node: 10.9.2(@types/node@24.0.3)(typescript@4.9.5) + + postcss-nested@6.2.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-selector-parser: 6.1.2 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-value-parser@4.2.0: {} + postcss@8.4.31: dependencies: nanoid: 3.3.11 @@ -12088,7 +11981,7 @@ snapshots: prelude-ls@1.2.1: {} - prettier-plugin-tailwindcss@0.6.14(prettier@2.8.8): + prettier-plugin-tailwindcss@0.5.14(prettier@2.8.8): dependencies: prettier: 2.8.8 @@ -12172,6 +12065,10 @@ snapshots: dependencies: loose-envify: 1.4.0 + read-cache@1.0.0: + dependencies: + pify: 2.3.0 + read-pkg-up@7.0.1: dependencies: find-up: 4.1.0 @@ -12698,6 +12595,16 @@ snapshots: optionalDependencies: '@babel/core': 7.27.4 + sucrase@3.35.0: + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + commander: 4.1.1 + glob: 10.4.5 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.7 + ts-interface-checker: 0.1.13 + supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -12737,7 +12644,32 @@ snapshots: tailwind-merge@2.6.0: {} - tailwindcss@4.1.11: {} + tailwindcss@3.4.17(ts-node@10.9.2(@types/node@24.0.3)(typescript@4.9.5)): + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.3 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.7 + lilconfig: 3.1.3 + micromatch: 4.0.8 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.1.1 + postcss: 8.5.6 + postcss-import: 15.1.0(postcss@8.5.6) + postcss-js: 4.0.1(postcss@8.5.6) + postcss-load-config: 4.0.2(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.0.3)(typescript@4.9.5)) + postcss-nested: 6.2.0(postcss@8.5.6) + postcss-selector-parser: 6.1.2 + resolve: 1.22.10 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node tapable@2.2.2: {} @@ -12799,6 +12731,14 @@ snapshots: text-table@0.2.0: {} + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + throat@6.0.2: {} throttleit@2.1.0: {} @@ -12849,6 +12789,8 @@ snapshots: trim-newlines@3.0.1: {} + ts-interface-checker@0.1.13: {} + ts-morph@12.0.0: dependencies: '@ts-morph/common': 0.11.1 @@ -13453,6 +13395,8 @@ snapshots: yaml@1.10.2: {} + yaml@2.8.0: {} + yargs-parser@20.2.9: {} yargs-parser@21.1.1: {} diff --git a/postcss.config.js b/postcss.config.js index c2ddf74..12a703d 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -1,5 +1,6 @@ -export default { +module.exports = { plugins: { - "@tailwindcss/postcss": {}, + tailwindcss: {}, + autoprefixer: {}, }, }; diff --git a/scripts/convert-config.js b/scripts/convert-config.js index 7181fe9..de31e22 100644 --- a/scripts/convert-config.js +++ b/scripts/convert-config.js @@ -3,34 +3,28 @@ // AUTO-GENERATED SCRIPT: Converts config.json to TypeScript definition. // Usage: node scripts/convert-config.js -import fs from "fs"; -import path from "path"; -import { fileURLToPath } from "url"; -import { dirname } from "path"; - -// Get __dirname equivalent for ES modules -const __filename = fileURLToPath(import.meta.url); -const __dirname = dirname(__filename); +const fs = require('fs'); +const path = require('path'); // Resolve project root (one level up from scripts folder) -const projectRoot = path.resolve(__dirname, ".."); +const projectRoot = path.resolve(__dirname, '..'); // Paths -const configPath = path.join(projectRoot, "config.json"); -const libDir = path.join(projectRoot, "src", "lib"); -const oldRuntimePath = path.join(libDir, "runtime.ts"); -const newRuntimePath = path.join(libDir, "runtime.ts"); +const configPath = path.join(projectRoot, 'config.json'); +const libDir = path.join(projectRoot, 'src', 'lib'); +const oldRuntimePath = path.join(libDir, 'runtime.ts'); +const newRuntimePath = path.join(libDir, 'runtime.ts'); // Delete the old runtime.ts file if it exists if (fs.existsSync(oldRuntimePath)) { fs.unlinkSync(oldRuntimePath); - console.log("旧的 runtime.ts 已删除"); + console.log('旧的 runtime.ts 已删除'); } // Read and parse config.json let rawConfig; try { - rawConfig = fs.readFileSync(configPath, "utf8"); + rawConfig = fs.readFileSync(configPath, 'utf8'); } catch (err) { console.error(`无法读取 ${configPath}:`, err); process.exit(1); @@ -40,7 +34,7 @@ let config; try { config = JSON.parse(rawConfig); } catch (err) { - console.error("config.json 不是有效的 JSON:", err); + console.error('config.json 不是有效的 JSON:', err); process.exit(1); } @@ -59,9 +53,9 @@ if (!fs.existsSync(libDir)) { // Write to runtime.ts try { - fs.writeFileSync(newRuntimePath, tsContent, "utf8"); - console.log("已生成 src/lib/runtime.ts"); + fs.writeFileSync(newRuntimePath, tsContent, 'utf8'); + console.log('已生成 src/lib/runtime.ts'); } catch (err) { - console.error("写入 runtime.ts 失败:", err); + console.error('写入 runtime.ts 失败:', err); process.exit(1); } diff --git a/scripts/generate-manifest.js b/scripts/generate-manifest.js index 8d70c09..8d6db2b 100644 --- a/scripts/generate-manifest.js +++ b/scripts/generate-manifest.js @@ -2,56 +2,50 @@ /* eslint-disable */ // 根据 SITE_NAME 动态生成 manifest.json -import fs from "fs"; -import path from "path"; -import { fileURLToPath } from "url"; -import { dirname } from "path"; - -// Get __dirname equivalent for ES modules -const __filename = fileURLToPath(import.meta.url); -const __dirname = dirname(__filename); +const fs = require('fs'); +const path = require('path'); // 获取项目根目录 -const projectRoot = path.resolve(__dirname, ".."); -const publicDir = path.join(projectRoot, "public"); -const manifestPath = path.join(publicDir, "manifest.json"); +const projectRoot = path.resolve(__dirname, '..'); +const publicDir = path.join(projectRoot, 'public'); +const manifestPath = path.join(publicDir, 'manifest.json'); // 从环境变量获取站点名称 -const siteName = process.env.SITE_NAME || "MoonTV"; +const siteName = process.env.SITE_NAME || 'MoonTV'; // manifest.json 模板 const manifestTemplate = { - name: siteName, - short_name: siteName, - description: "影视聚合", - start_url: "/", - scope: "/", - display: "standalone", - background_color: "#000000", + "name": siteName, + "short_name": siteName, + "description": "影视聚合", + "start_url": "/", + "scope": "/", + "display": "standalone", + "background_color": "#000000", "apple-mobile-web-app-capable": "yes", "apple-mobile-web-app-status-bar-style": "black", - icons: [ + "icons": [ { - src: "/icons/icon-192x192.png", - sizes: "192x192", - type: "image/png", + "src": "/icons/icon-192x192.png", + "sizes": "192x192", + "type": "image/png" }, { - src: "/icons/icon-256x256.png", - sizes: "256x256", - type: "image/png", + "src": "/icons/icon-256x256.png", + "sizes": "256x256", + "type": "image/png" }, { - src: "/icons/icon-384x384.png", - sizes: "384x384", - type: "image/png", + "src": "/icons/icon-384x384.png", + "sizes": "384x384", + "type": "image/png" }, { - src: "/icons/icon-512x512.png", - sizes: "512x512", - type: "image/png", - }, - ], + "src": "/icons/icon-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ] }; try { @@ -64,6 +58,6 @@ try { fs.writeFileSync(manifestPath, JSON.stringify(manifestTemplate, null, 2)); console.log(`✅ Generated manifest.json with site name: ${siteName}`); } catch (error) { - console.error("❌ Error generating manifest.json:", error); + console.error('❌ Error generating manifest.json:', error); process.exit(1); } diff --git a/src/app/admin/page.tsx b/src/app/admin/page.tsx index ea09757..5ca82f1 100644 --- a/src/app/admin/page.tsx +++ b/src/app/admin/page.tsx @@ -80,7 +80,7 @@ const CollapsibleTab = ({ children, }: CollapsibleTabProps) => { return ( -
+