diff --git a/.github/workflows/prettier-pr.yml b/.github/workflows/format-check.yml similarity index 52% rename from .github/workflows/prettier-pr.yml rename to .github/workflows/format-check.yml index 051b1abd51..33f61f255f 100644 --- a/.github/workflows/prettier-pr.yml +++ b/.github/workflows/format-check.yml @@ -1,19 +1,16 @@ -name: Prettier on pull requests +name: Code formatting check on pull requests on: pull_request: workflow_dispatch: jobs: - prettier: + format-check: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - # Need node to install prettier plugin(s) - uses: actions/setup-node@v4 with: node-version: 20 - run: npm ci - - run: | - echo "Prettier-ing files" - npx prettier "src/**/*.{js,jsx}" --check + - run: npx biome check diff --git a/.github/workflows/i18n-automerge.yml b/.github/workflows/i18n-automerge.yml index 45f8b9e206..47a48c11e2 100644 --- a/.github/workflows/i18n-automerge.yml +++ b/.github/workflows/i18n-automerge.yml @@ -8,7 +8,8 @@ on: jobs: run-and-merge: - if: contains(github.event.pull_request.labels.*.name, 'i18n') && + if: github.repository == 'cheeaun/phanpy' && + contains(github.event.pull_request.labels.*.name, 'i18n') && github.event.pull_request.base.ref == 'main' && github.event.pull_request.head.ref == 'l10n_main' runs-on: ubuntu-latest diff --git a/.github/workflows/i18n-update-readme.yml b/.github/workflows/i18n-update-readme.yml index 78b50c69ba..020c58d2f6 100644 --- a/.github/workflows/i18n-update-readme.yml +++ b/.github/workflows/i18n-update-readme.yml @@ -8,6 +8,7 @@ on: jobs: update-readme: + if: github.repository == 'cheeaun/phanpy' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/prodtag.yml b/.github/workflows/prodtag.yml index 8a2b4392bb..aa323d859c 100644 --- a/.github/workflows/prodtag.yml +++ b/.github/workflows/prodtag.yml @@ -7,6 +7,7 @@ on: jobs: tag: + if: github.repository == 'cheeaun/phanpy' runs-on: ubuntu-latest permissions: contents: write diff --git a/.github/workflows/update-catalogs.yml b/.github/workflows/update-catalogs.yml index 5a635c6537..42679ddb05 100644 --- a/.github/workflows/update-catalogs.yml +++ b/.github/workflows/update-catalogs.yml @@ -8,6 +8,7 @@ on: jobs: update-catalogs: + if: github.repository == 'cheeaun/phanpy' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 diff --git a/.gitignore b/.gitignore index e5b0710b35..002edddc8d 100644 --- a/.gitignore +++ b/.gitignore @@ -28,6 +28,7 @@ dist-ssr phanpy-dist.zip phanpy-dist.tar.gz sonda-report.html +.sonda # Compiled locale files src/locales/*.js diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 6063e9a9a4..0000000000 --- a/.prettierrc +++ /dev/null @@ -1,22 +0,0 @@ -{ - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "trailingComma": "all", - "plugins": ["@ianvs/prettier-plugin-sort-imports"], - "importOrder": [ - "^[^.].*.css$", - "index.css$", - ".css$", - "", - "./polyfills", - "", - "", - "", - "/assets/", - "", - "^../", - "", - "^[./]" - ] -} diff --git a/README.md b/README.md index feca1284fc..ebeaec7f73 100644 --- a/README.md +++ b/README.md @@ -366,7 +366,7 @@ Costs involved in running and developing this web app: - kaliuwu (Polish) - karlafej (Czech) - katullo11 (Italian) -- Kytta (German) +- Kytta (German) - llun (Thai) - lucsdev24 (Occitan, Portuguese, Portuguese, Brazilian) - LukeHong (Chinese Traditional) @@ -402,7 +402,7 @@ Costs involved in running and developing this web app: - tux93 (German) - uzaylul (Turkish) - Vac31. (Lithuanian) -- valtlai (Finnish) +- valtlai (Finnish) - vasiriri (Polish) - voitech (Polish) - voyagercy (Chinese Traditional) diff --git a/biome.json b/biome.json new file mode 100644 index 0000000000..867634f9df --- /dev/null +++ b/biome.json @@ -0,0 +1,59 @@ +{ + "$schema": "https://biomejs.dev/schemas/2.0.0/schema.json", + "vcs": { + "enabled": true, + "clientKind": "git", + "useIgnoreFile": true + }, + "files": { + "includes": [ + "src/**/*.{js,jsx,ts,tsx,css}", + "*.{js,jsx,ts,tsx,json,jsonc}", + "scripts/**/*.js", + "!wrangler.jsonc", + "!i18n-volunteers.json" + ] + }, + "formatter": { + "indentStyle": "space" + }, + "linter": { + "enabled": false + }, + "javascript": { + "formatter": { + "quoteStyle": "single" + } + }, + "css": { + "formatter": { + "quoteStyle": "single" + } + }, + "assist": { + "actions": { + "source": { + "organizeImports": { + "level": "on", + "options": { + "groups": [ + "**/*.css", + ":BLANK_LINE:", + "./polyfills", + ":BLANK_LINE:", + [":NODE:", ":BUN:"], + ":BLANK_LINE:", + [":PACKAGE:", ":PACKAGE_WITH_PROTOCOL:"], + ":BLANK_LINE:", + "**/assets/**", + ":BLANK_LINE:", + "../**", + ":BLANK_LINE:", + ["./**", "./"] + ] + } + } + } + } + } +} diff --git a/design/logo.afdesign b/design/logo.afdesign index b5ead1d413..ea04a085ed 100644 Binary files a/design/logo.afdesign and b/design/logo.afdesign differ diff --git a/package-lock.json b/package-lock.json index 5f67faa7e4..f9d218cbbe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,24 +44,23 @@ "tinyld": "~1.3.4", "toastify-js": "~1.12.0", "uid": "~2.0.2", - "use-debounce": "~10.0.4", + "use-debounce": "~10.0.5", "use-long-press": "~3.3.0", "use-resize-observer": "~9.1.0", "valtio": "2.1.5" }, "devDependencies": { - "@ianvs/prettier-plugin-sort-imports": "~4.4.2", + "@biomejs/biome": "2.0.0", "@lingui/babel-plugin-lingui-macro": "~5.3.2", "@lingui/cli": "~5.3.2", "@lingui/vite-plugin": "~5.3.2", - "@playwright/test": "~1.52.0", + "@playwright/test": "~1.53.0", "@preact/preset-vite": "~2.10.1", - "@types/node": "~22.15.30", - "postcss": "~8.5.4", + "@types/node": "~24.0.2", + "postcss": "~8.5.5", "postcss-dark-theme-class": "~1.3.0", - "postcss-preset-env": "~10.2.0", - "prettier": "3.5.3", - "sonda": "~0.7.1", + "postcss-preset-env": "~10.2.3", + "sonda": "~0.8.0", "twitter-text": "~3.1.0", "vite": "~6.3.5", "vite-plugin-generate-file": "~0.3.1", @@ -1604,6 +1603,169 @@ "node": ">=6.9.0" } }, + "node_modules/@biomejs/biome": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.0.0.tgz", + "integrity": "sha512-BlUoXEOI/UQTDEj/pVfnkMo8SrZw3oOWBDrXYFT43V7HTkIUDkBRY53IC5Jx1QkZbaB+0ai1wJIfYwp9+qaJTQ==", + "dev": true, + "license": "MIT OR Apache-2.0", + "bin": { + "biome": "bin/biome" + }, + "engines": { + "node": ">=14.21.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/biome" + }, + "optionalDependencies": { + "@biomejs/cli-darwin-arm64": "2.0.0", + "@biomejs/cli-darwin-x64": "2.0.0", + "@biomejs/cli-linux-arm64": "2.0.0", + "@biomejs/cli-linux-arm64-musl": "2.0.0", + "@biomejs/cli-linux-x64": "2.0.0", + "@biomejs/cli-linux-x64-musl": "2.0.0", + "@biomejs/cli-win32-arm64": "2.0.0", + "@biomejs/cli-win32-x64": "2.0.0" + } + }, + "node_modules/@biomejs/cli-darwin-arm64": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.0.0.tgz", + "integrity": "sha512-QvqWYtFFhhxdf8jMAdJzXW+Frc7X8XsnHQLY+TBM1fnT1TfeV/v9vsFI5L2J7GH6qN1+QEEJ19jHibCY2Ypplw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-darwin-x64": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.0.0.tgz", + "integrity": "sha512-5JFhls1EfmuIH4QGFPlNpxJQFC6ic3X1ltcoLN+eSRRIPr6H/lUS1ttuD0Fj7rPgPhZqopK/jfH8UVj/1hIsQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-arm64": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.0.0.tgz", + "integrity": "sha512-BAH4QVi06TzAbVchXdJPsL0Z/P87jOfes15rI+p3EX9/EGTfIjaQ9lBVlHunxcmoptaA5y1Hdb9UYojIhmnjIw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-arm64-musl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.0.0.tgz", + "integrity": "sha512-Bxsz8ki8+b3PytMnS5SgrGV+mbAWwIxI3ydChb/d1rURlJTMdxTTq5LTebUnlsUWAX6OvJuFeiVq9Gjn1YbCyA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-x64": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.0.0.tgz", + "integrity": "sha512-09PcOGYTtkopWRm6mZ/B6Mr6UHdkniUgIG/jLBv+2J8Z61ezRE+xQmpi3yNgUrFIAU4lPA9atg7mhvE/5Bo7Wg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-x64-musl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.0.0.tgz", + "integrity": "sha512-tiQ0ABxMJb9I6GlfNp0ulrTiQSFacJRJO8245FFwE3ty3bfsfxlU/miblzDIi+qNrgGsLq5wIZcVYGp4c+HXZA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-win32-arm64": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.0.0.tgz", + "integrity": "sha512-vrTtuGu91xNTEQ5ZcMJBZuDlqr32DWU1r14UfePIGndF//s2WUAmer4FmgoPgruo76rprk37e8S2A2c0psXdxw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-win32-x64": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.0.0.tgz", + "integrity": "sha512-2USVQ0hklNsph/KIR72ZdeptyXNnQ3JdzPn3NbjI4Sna34CnxeiYAaZcZzXPDl5PYNFBivV4xmvT3Z3rTmyDBg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.21.3" + } + }, "node_modules/@csstools/cascade-layer-name-parser": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.5.tgz", @@ -2104,9 +2266,9 @@ } }, "node_modules/@csstools/postcss-is-pseudo-class": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.1.tgz", - "integrity": "sha512-JLp3POui4S1auhDR0n8wHd/zTOWmMsmK3nQd3hhL6FhWPaox5W7j1se6zXOG/aP07wV2ww0lxbKYGwbBszOtfQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.3.tgz", + "integrity": "sha512-jS/TY4SpG4gszAtIg7Qnf3AS2pjcUM5SzxpApOrlndMeGhIbaTzWBzzP/IApXoNWEW7OhcjkRT48jnAUIFXhAQ==", "dev": true, "funding": [ { @@ -2118,6 +2280,7 @@ "url": "https://opencollective.com/csstools" } ], + "license": "MIT-0", "dependencies": { "@csstools/selector-specificity": "^5.0.0", "postcss-selector-parser": "^7.0.0" @@ -2656,9 +2819,9 @@ } }, "node_modules/@csstools/selector-resolve-nested": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.0.0.tgz", - "integrity": "sha512-ZoK24Yku6VJU1gS79a5PFmC8yn3wIapiKmPgun0hZgEI5AOqgH2kiPRsPz1qkGv4HL+wuDLH83yQyk6inMYrJQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.1.0.tgz", + "integrity": "sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==", "dev": true, "funding": [ { @@ -2670,6 +2833,7 @@ "url": "https://opencollective.com/csstools" } ], + "license": "MIT-0", "engines": { "node": ">=18" }, @@ -3174,41 +3338,6 @@ "dom-input-range": "^2.0.0" } }, - "node_modules/@ianvs/prettier-plugin-sort-imports": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@ianvs/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.4.2.tgz", - "integrity": "sha512-KkVFy3TLh0OFzimbZglMmORi+vL/i2OFhEs5M07R9w0IwWAGpsNNyE4CY/2u0YoMF5bawKC2+8/fUH60nnNtjw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@babel/generator": "^7.26.2", - "@babel/parser": "^7.26.2", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.26.0", - "semver": "^7.5.2" - }, - "peerDependencies": { - "@vue/compiler-sfc": "2.7.x || 3.x", - "prettier": "2 || 3 || ^4.0.0-0" - }, - "peerDependenciesMeta": { - "@vue/compiler-sfc": { - "optional": true - } - } - }, - "node_modules/@ianvs/prettier-plugin-sort-imports/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@iconify-icons/mingcute": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/@iconify-icons/mingcute/-/mingcute-1.2.9.tgz", @@ -3685,13 +3814,13 @@ } }, "node_modules/@playwright/test": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.52.0.tgz", - "integrity": "sha512-uh6W7sb55hl7D6vsAeA+V2p5JnlAqzhqFyF0VcJkKZXkgnFcVG9PziERRHQfPLfNGx1C292a4JqbWzhR8L4R1g==", + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.53.0.tgz", + "integrity": "sha512-15hjKreZDcp7t6TL/7jkAo6Df5STZN09jGiv5dbP9A6vMVncXRqE7/B2SncsyOwrkZRBH2i6/TPOL8BVmm3c7w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright": "1.52.0" + "playwright": "1.53.0" }, "bin": { "playwright": "cli.js" @@ -4178,13 +4307,13 @@ } }, "node_modules/@types/node": { - "version": "22.15.30", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.30.tgz", - "integrity": "sha512-6Q7lr06bEHdlfplU6YRbgG1SFBdlsfNC4/lX+SkhiTs0cpJkOElmWls8PxDFv4yY/xKb8Y6SO0OmSX4wgqTZbA==", + "version": "24.0.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.2.tgz", + "integrity": "sha512-Kv1shWMfCUnzbQTosAHrF2p8AzccoLODqJ0XqGPRA/mGVZR86KCk8I+fyh6B5+kcLtAKS9BquXUxVO79jU9UGg==", "devOptional": true, "license": "MIT", "dependencies": { - "undici-types": "~6.21.0" + "undici-types": "~7.8.0" } }, "node_modules/@types/parse-json": { @@ -4228,93 +4357,6 @@ "devOptional": true, "license": "MIT" }, - "node_modules/@vue/compiler-core": { - "version": "3.2.45", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.45.tgz", - "integrity": "sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/parser": "^7.16.4", - "@vue/shared": "3.2.45", - "estree-walker": "^2.0.2", - "source-map": "^0.6.1" - } - }, - "node_modules/@vue/compiler-dom": { - "version": "3.2.45", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz", - "integrity": "sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@vue/compiler-core": "3.2.45", - "@vue/shared": "3.2.45" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "3.2.45", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.45.tgz", - "integrity": "sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/parser": "^7.16.4", - "@vue/compiler-core": "3.2.45", - "@vue/compiler-dom": "3.2.45", - "@vue/compiler-ssr": "3.2.45", - "@vue/reactivity-transform": "3.2.45", - "@vue/shared": "3.2.45", - "estree-walker": "^2.0.2", - "magic-string": "^0.25.7", - "postcss": "^8.1.10", - "source-map": "^0.6.1" - } - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.2.45", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.45.tgz", - "integrity": "sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@vue/compiler-dom": "3.2.45", - "@vue/shared": "3.2.45" - } - }, - "node_modules/@vue/reactivity-transform": { - "version": "3.2.45", - "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.45.tgz", - "integrity": "sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/parser": "^7.16.4", - "@vue/compiler-core": "3.2.45", - "@vue/shared": "3.2.45", - "estree-walker": "^2.0.2", - "magic-string": "^0.25.7" - } - }, - "node_modules/@vue/shared": { - "version": "3.2.45", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.45.tgz", - "integrity": "sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/acorn": { "version": "8.12.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", @@ -4761,6 +4803,7 @@ "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", "dev": true, + "license": "MIT", "dependencies": { "run-applescript": "^7.0.0" }, @@ -5350,6 +5393,7 @@ "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", "dev": true, + "license": "MIT", "dependencies": { "bundle-name": "^4.1.0", "default-browser-id": "^5.0.0" @@ -5366,6 +5410,7 @@ "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -5407,6 +5452,7 @@ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -6599,6 +6645,7 @@ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", "dev": true, + "license": "MIT", "bin": { "is-docker": "cli.js" }, @@ -6644,6 +6691,7 @@ "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", "dev": true, + "license": "MIT", "dependencies": { "is-docker": "^3.0.0" }, @@ -6855,6 +6903,7 @@ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", "dev": true, + "license": "MIT", "dependencies": { "is-inside-container": "^1.0.0" }, @@ -7468,10 +7517,11 @@ } }, "node_modules/open": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", - "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.2.tgz", + "integrity": "sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==", "dev": true, + "license": "MIT", "dependencies": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", @@ -7774,13 +7824,13 @@ } }, "node_modules/playwright": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.52.0.tgz", - "integrity": "sha512-JAwMNMBlxJ2oD1kce4KPtMkDeKGHQstdpFPcPH3maElAXon/QZeTvtsfXmTMRyO9TslfoYOXkSsvao2nE1ilTw==", + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.53.0.tgz", + "integrity": "sha512-ghGNnIEYZC4E+YtclRn4/p6oYbdPiASELBIYkBXfaTVKreQUYbMUYQDwS12a8F0/HtIjr/CkGjtwABeFPGcS4Q==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.52.0" + "playwright-core": "1.53.0" }, "bin": { "playwright": "cli.js" @@ -7793,9 +7843,9 @@ } }, "node_modules/playwright-core": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.52.0.tgz", - "integrity": "sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==", + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.53.0.tgz", + "integrity": "sha512-mGLg8m0pm4+mmtB7M89Xw/GSqoNC+twivl8ITteqvAndachozYe2ZA7srU6uleV1vEdAHYqjq+SV8SNxRRFYBw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -7837,9 +7887,9 @@ } }, "node_modules/postcss": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.4.tgz", - "integrity": "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==", + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.5.tgz", + "integrity": "sha512-d/jtm+rdNT8tpXuHY5MMtcbJFBkhXE6593XVR9UoGCH8jSFGci7jGvMGH5RYd5PBJW+00NZQt6gf7CbagJCrhg==", "dev": true, "funding": [ { @@ -8018,9 +8068,9 @@ } }, "node_modules/postcss-custom-properties": { - "version": "14.0.5", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.5.tgz", - "integrity": "sha512-UWf/vhMapZatv+zOuqlfLmYXeOhhHLh8U8HAKGI2VJ00xLRYoAJh4xv8iX6FB6+TLXeDnm0DBLMi00E0hodbQw==", + "version": "14.0.6", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.6.tgz", + "integrity": "sha512-fTYSp3xuk4BUeVhxCSJdIPhDLpJfNakZKoiTDx7yRGCdlZrSJR7mWKVOBS4sBF+5poPQFMj2YdXx1VHItBGihQ==", "dev": true, "funding": [ { @@ -8318,9 +8368,9 @@ } }, "node_modules/postcss-nesting": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.1.tgz", - "integrity": "sha512-VbqqHkOBOt4Uu3G8Dm8n6lU5+9cJFxiuty9+4rcoyRPO9zZS1JIs6td49VIoix3qYqELHlJIn46Oih9SAKo+yQ==", + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.2.tgz", + "integrity": "sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ==", "dev": true, "funding": [ { @@ -8332,8 +8382,9 @@ "url": "https://opencollective.com/csstools" } ], + "license": "MIT-0", "dependencies": { - "@csstools/selector-resolve-nested": "^3.0.0", + "@csstools/selector-resolve-nested": "^3.1.0", "@csstools/selector-specificity": "^5.0.0", "postcss-selector-parser": "^7.0.0" }, @@ -8427,9 +8478,9 @@ } }, "node_modules/postcss-preset-env": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.2.0.tgz", - "integrity": "sha512-cl13sPBbSqo1Q7Ryb19oT5NZO5IHFolRbIMdgDq4f9w1MHYiL6uZS7uSsjXJ1KzRIcX5BMjEeyxmAevVXENa3Q==", + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.2.3.tgz", + "integrity": "sha512-zlQN1yYmA7lFeM1wzQI14z97mKoM8qGng+198w1+h6sCud/XxOjcKtApY9jWr7pXNS3yHDEafPlClSsWnkY8ow==", "dev": true, "funding": [ { @@ -8455,7 +8506,7 @@ "@csstools/postcss-hwb-function": "^4.0.10", "@csstools/postcss-ic-unit": "^4.0.2", "@csstools/postcss-initial": "^2.0.1", - "@csstools/postcss-is-pseudo-class": "^5.0.1", + "@csstools/postcss-is-pseudo-class": "^5.0.3", "@csstools/postcss-light-dark-function": "^2.0.9", "@csstools/postcss-logical-float-and-clear": "^3.0.0", "@csstools/postcss-logical-overflow": "^2.0.0", @@ -8477,7 +8528,7 @@ "@csstools/postcss-trigonometric-functions": "^4.0.9", "@csstools/postcss-unset-value": "^4.0.0", "autoprefixer": "^10.4.21", - "browserslist": "^4.24.5", + "browserslist": "^4.25.0", "css-blank-pseudo": "^7.0.1", "css-has-pseudo": "^7.0.2", "css-prefers-color-scheme": "^10.0.0", @@ -8488,7 +8539,7 @@ "postcss-color-hex-alpha": "^10.0.0", "postcss-color-rebeccapurple": "^10.0.0", "postcss-custom-media": "^11.0.6", - "postcss-custom-properties": "^14.0.5", + "postcss-custom-properties": "^14.0.6", "postcss-custom-selectors": "^8.0.5", "postcss-dir-pseudo-class": "^9.0.1", "postcss-double-position-gradients": "^6.0.2", @@ -8499,7 +8550,7 @@ "postcss-image-set-function": "^7.0.0", "postcss-lab-function": "^7.0.10", "postcss-logical": "^8.1.0", - "postcss-nesting": "^13.0.1", + "postcss-nesting": "^13.0.2", "postcss-opacity-percentage": "^3.0.0", "postcss-overflow-shorthand": "^6.0.0", "postcss-page-break": "^3.0.4", @@ -8605,22 +8656,6 @@ "url": "https://opencollective.com/preact" } }, - "node_modules/prettier": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", - "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, "node_modules/pretty-bytes": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.1.tgz", @@ -9069,6 +9104,7 @@ "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -9306,17 +9342,20 @@ } }, "node_modules/sonda": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/sonda/-/sonda-0.7.1.tgz", - "integrity": "sha512-PCdSdBvspoJXA0uY5GFeRzAolTHDP7gVnnMnr/O74IYIB8CiOFaEbTGNkEmShG6HBtmmFdQfPxdXbI+2vAgjYw==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/sonda/-/sonda-0.8.0.tgz", + "integrity": "sha512-NzQXa9lLi4gJUlrQ+GKmbhHBv2L/mFfghq2lnYcXDrpWIDrKi1qQkdykjQm5qPMvcvCTtU4dv/MykUEe3io0aQ==", "dev": true, + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.3.0", - "@jridgewell/sourcemap-codec": "^1.5.0", - "open": "^10.1.0" + "open": "^10.1.2" }, "bin": { "sonda-angular": "bin/sonda-angular.js" + }, + "engines": { + "node": ">=20.19 || >=22.12" } }, "node_modules/source-map": { @@ -9937,9 +9976,9 @@ } }, "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", + "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", "devOptional": true, "license": "MIT" }, @@ -10070,9 +10109,10 @@ } }, "node_modules/use-debounce": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/use-debounce/-/use-debounce-10.0.4.tgz", - "integrity": "sha512-6Cf7Yr7Wk7Kdv77nnJMf6de4HuDE4dTxKij+RqE9rufDsI6zsbjyAxcH5y2ueJCQAnfgKbzXbZHYlkFwmBlWkw==", + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/use-debounce/-/use-debounce-10.0.5.tgz", + "integrity": "sha512-Q76E3lnIV+4YT9AHcrHEHYmAd9LKwUAbPXDm7FlqVGDHiSOhX3RDjT8dm0AxbJup6WgOb1YEcKyCr11kBJR5KQ==", + "license": "MIT", "engines": { "node": ">= 16.0.0" }, diff --git a/package.json b/package.json index dc4b107737..0425b54571 100644 --- a/package.json +++ b/package.json @@ -52,24 +52,23 @@ "tinyld": "~1.3.4", "toastify-js": "~1.12.0", "uid": "~2.0.2", - "use-debounce": "~10.0.4", + "use-debounce": "~10.0.5", "use-long-press": "~3.3.0", "use-resize-observer": "~9.1.0", "valtio": "2.1.5" }, "devDependencies": { - "@ianvs/prettier-plugin-sort-imports": "~4.4.2", + "@biomejs/biome": "2.0.0", "@lingui/babel-plugin-lingui-macro": "~5.3.2", "@lingui/cli": "~5.3.2", "@lingui/vite-plugin": "~5.3.2", - "@playwright/test": "~1.52.0", + "@playwright/test": "~1.53.0", "@preact/preset-vite": "~2.10.1", - "@types/node": "~22.15.30", - "postcss": "~8.5.4", + "@types/node": "~24.0.2", + "postcss": "~8.5.5", "postcss-dark-theme-class": "~1.3.0", - "postcss-preset-env": "~10.2.0", - "prettier": "3.5.3", - "sonda": "~0.7.1", + "postcss-preset-env": "~10.2.3", + "sonda": "~0.8.0", "twitter-text": "~3.1.0", "vite": "~6.3.5", "vite-plugin-generate-file": "~0.3.1", diff --git a/rollbar.js b/rollbar.js index 42c9c47f59..5db6fec57e 100644 --- a/rollbar.js +++ b/rollbar.js @@ -330,7 +330,6 @@ var _rollbarConfig = { for ( var a = e.removeEventListener; a._rollbarOldRemove && a.belongsToShim; - ) a = a._rollbarOldRemove; var l = function (r, e, o) { @@ -407,7 +406,6 @@ var _rollbarConfig = { }, i = 0; (o = window._rollbarShims[i++]); - ) n || (n = o.handler), o.handler._swapAndProcessMessages(l, o.messages); diff --git a/scripts/extract-url.js b/scripts/extract-url.js index b1ab1335ba..0c955d2d5a 100644 --- a/scripts/extract-url.js +++ b/scripts/extract-url.js @@ -1,4 +1,5 @@ import fs from 'fs'; + import regexSupplant from 'twitter-text/dist/lib/regexSupplant.js'; import validDomain from 'twitter-text/dist/regexp/validDomain.js'; import validPortNumber from 'twitter-text/dist/regexp/validPortNumber.js'; diff --git a/src/app.css b/src/app.css index b5ee1c4b36..c7b085d410 100644 --- a/src/app.css +++ b/src/app.css @@ -448,8 +448,7 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { var(--line-radius), var(--line-radius); */ --curves-radius: calc(var(--curves-width) / 2); height: calc(var(--curves-width) - var(--line-width)); - background-image: - radial-gradient( + background-image: radial-gradient( circle at bottom var(--forward), transparent calc(var(--curves-radius) - var(--line-width)), var(--comment-line-color) calc(var(--curves-radius) - var(--line-width)) @@ -480,8 +479,7 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { transparent ); &.hero:not(:has(+ .thread), :first-child, :only-child, :last-child) { - background-image: - linear-gradient( + background-image: linear-gradient( var(--line-dir), transparent, transparent var(--indent-small-start), @@ -557,8 +555,10 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { + .replies .replies-summary { margin-inline-start: calc( - var(--avatar-size) + var(--avatar-margin-start) + var(--avatar-margin-end) + - (var(--line-margin-end) * (var(--comments-level) - 1)) + var(--avatar-size) + + var(--avatar-margin-start) + + var(--avatar-margin-end) + + (var(--line-margin-end) * (var(--comments-level) - 1)) ); } .timeline.contextual @@ -567,8 +567,10 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { + .replies :is(.status-link, .status-focus) { padding-inline-start: calc( - var(--avatar-size) + var(--avatar-margin-start) + var(--avatar-margin-end) + - (var(--line-margin-end) * (var(--comments-level) - 1)) + var(--avatar-size) + + var(--avatar-margin-start) + + var(--avatar-margin-end) + + (var(--line-margin-end) * (var(--comments-level) - 1)) ); } .timeline.contextual @@ -577,7 +579,9 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { + .replies .replies-summary { margin-inline-start: calc( - var(--thread-start) + var(--line-margin-end) * var(--comments-level) + var(--thread-start) + + var(--line-margin-end) * + var(--comments-level) ); } .timeline.contextual @@ -586,7 +590,9 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { + .replies :is(.status-link, .status-focus) { padding-inline-start: calc( - var(--thread-start) + var(--line-margin-end) * var(--comments-level) + var(--thread-start) + + var(--line-margin-end) * + var(--comments-level) ); } .timeline.contextual > li.descendant:not(.thread):before { @@ -611,7 +617,9 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { } .timeline.contextual > li.ancestor .replies-link { margin-inline-start: calc( - var(--avatar-size) + var(--avatar-margin-start) + var(--avatar-margin-end) + var(--avatar-size) + + var(--avatar-margin-start) + + var(--avatar-margin-end) ); } .timeline.contextual @@ -619,7 +627,9 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { > :is(.status-link, .status-focus) .replies-link { margin-inline-start: calc( - var(--avatar-size) + var(--avatar-margin-start) + var(--avatar-margin-end) + var(--avatar-size) + + var(--avatar-margin-start) + + var(--avatar-margin-end) ); } .timeline.contextual > li .replies-link * { @@ -774,7 +784,9 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { } .timeline.contextual > li .replies li:not(.content li) { --line-start: calc( - var(--thread-start) + var(--line-margin-end) * var(--comments-level) + var(--thread-start) + + var(--line-margin-end) * + var(--comments-level) ); --line-end: calc(var(--line-start) + var(--line-width)); background-image: linear-gradient( @@ -796,8 +808,10 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { } */ .timeline.contextual > li.thread .replies li:not(.content li) { --line-start: calc( - var(--avatar-size) + var(--avatar-margin-start) + var(--avatar-margin-end) + - (var(--line-margin-end) * (var(--comments-level) - 1)) + var(--avatar-size) + + var(--avatar-margin-start) + + var(--avatar-margin-end) + + (var(--line-margin-end) * (var(--comments-level) - 1)) ); } /* .timeline.contextual > li.thread .replies .replies li { @@ -840,8 +854,10 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { } */ .timeline.contextual > li.thread .replies li:not(.content li):before { --line-start: calc( - var(--avatar-size) + var(--avatar-margin-start) + var(--avatar-margin-end) + - (var(--line-margin-end) * (var(--comments-level) - 1)) + var(--avatar-size) + + var(--avatar-margin-start) + + var(--avatar-margin-end) + + (var(--line-margin-end) * (var(--comments-level) - 1)) ); } /* .timeline.contextual > li.thread .replies .replies li:before { @@ -976,9 +992,7 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { } .timeline .show-more { - padding-inline-start: calc( - var(--line-end) + var(--line-margin-end) - ) !important; + padding-inline-start: calc(var(--line-end) + var(--line-margin-end)) !important; text-align: start; background-color: transparent !important; backdrop-filter: none !important; @@ -1069,13 +1083,11 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { position: absolute; inset: 0; pointer-events: none; - background-image: - radial-gradient( + background-image: radial-gradient( ellipse 50% 32px at bottom center, var(--carousel-faded-color), transparent - ), - linear-gradient(to top, var(--bg-color) 8px, transparent 64px); + ), linear-gradient(to top, var(--bg-color) 8px, transparent 64px); background-repeat: no-repeat; background-position: bottom center; } @@ -1708,6 +1720,12 @@ body:has(.media-modal-container + .status-deck) .media-post-link { #app[data-shortcuts-view-mode='tab-menu-bar'] #compose-button { bottom: calc(16px + 52px); bottom: calc(16px + env(safe-area-inset-bottom) + 52px); + + body.exp-tab-bar-v2 & { + --inset-inline-end: max(16px, var(--inset-new), var(--sai-inline-end)); + inset-inline-end: var(--inset-inline-end); + bottom: max(16px, var(--inset-new)); + } } } #compose-button { @@ -2340,8 +2358,7 @@ body > .szh-menu-container { var(--bg-color) var(--middle-circle-radius), transparent var(--middle-circle-radius) ); - background-image: - var(--middle-circle), + background-image: var(--middle-circle), conic-gradient(var(--color) var(--fill), var(--outline-color) 0); transform: scale(0.7); &:dir(rtl) { @@ -2684,14 +2701,17 @@ ul.link-list li a .icon { } #columns { /* Any buttons except nav menu button on first header-side, on 1st column */ - .deck-container:first-of-type - .header-grid + .deck-container:first-of-type .header-grid .header-side:first-of-type > *:not(.nav-menu-button), /* Any buttons on last header-side, on 1st column */ - .deck-container:first-of-type .header-grid .header-side:last-of-type > *, + .deck-container:first-of-type .header-grid + .header-side:last-of-type + > *, /* Any buttons on any header-side, on columns after 1st */ - .deck-container:not(:first-of-type) .header-grid .header-side > * { + .deck-container:not(:first-of-type) .header-grid + .header-side + > * { display: none; } } diff --git a/src/app.jsx b/src/app.jsx index 4310d53cd3..7021c1b9e0 100644 --- a/src/app.jsx +++ b/src/app.jsx @@ -359,6 +359,15 @@ if (import.meta.env.DEV) { }); } +{ + // Temporary Experiments + // May be removed in the future + document.body.classList.toggle( + 'exp-tab-bar-v2', + store.local.get('experiments-tabBarV2') ?? false, + ); +} + function App() { const [isLoggedIn, setIsLoggedIn] = useState(false); const [uiState, setUIState] = useState('loading'); diff --git a/src/components/account-info.css b/src/components/account-info.css index 69627edd81..72ada8b9da 100644 --- a/src/components/account-info.css +++ b/src/components/account-info.css @@ -749,9 +749,9 @@ --shadow-spread: calc(var(--shadow-blur) * -0.75); box-shadow: calc(var(--shadow-offset) * -1) var(--shadow-offset) var(--shadow-blur) - var(--shadow-spread) var(--header-color-1, var(--drop-shadow-color)), + var(--shadow-spread) var(--header-color-1, var(--drop-shadow-color)), var(--shadow-offset) var(--shadow-offset) var(--shadow-blur) - var(--shadow-spread) var(--header-color-2, var(--drop-shadow-color)); + var(--shadow-spread) var(--header-color-2, var(--drop-shadow-color)); } /* .timeline-start .account-container .header-banner { margin-bottom: -77px; @@ -845,9 +845,11 @@ overflow: hidden; border: 1px solid var(--outline-color); /* checkerboard background */ - background-image: - linear-gradient(45deg, var(--img-bg-color) 25%, transparent 25%), - linear-gradient(-45deg, var(--img-bg-color) 25%, transparent 25%), + background-image: linear-gradient( + 45deg, + var(--img-bg-color) 25%, + transparent 25% + ), linear-gradient(-45deg, var(--img-bg-color) 25%, transparent 25%), linear-gradient(45deg, transparent 75%, var(--img-bg-color) 75%), linear-gradient(-45deg, transparent 75%, var(--img-bg-color) 75%); background-size: 10px 10px; @@ -1046,11 +1048,7 @@ .account-block-content { min-width: 0; - mask-image: linear-gradient( - var(--to-backward), - transparent, - black 16px - ); + mask-image: linear-gradient(var(--to-backward), transparent, black 16px); } .account-block-stats { diff --git a/src/components/avatar.css b/src/components/avatar.css index 413258173a..e9953f6fd7 100644 --- a/src/components/avatar.css +++ b/src/components/avatar.css @@ -1,7 +1,7 @@ .avatar { display: inline-block; line-height: 0; - aspect-ratio: 1/1; + aspect-ratio: 1 / 1; border-radius: 50%; overflow: hidden; background-color: var(--bg-faded-color); diff --git a/src/components/compose.css b/src/components/compose.css index 93de66f23b..9c6ca2212d 100644 --- a/src/components/compose.css +++ b/src/components/compose.css @@ -417,9 +417,11 @@ width: 80px; height: 80px; /* checkerboard background */ - background-image: - linear-gradient(45deg, var(--img-bg-color) 25%, transparent 25%), - linear-gradient(-45deg, var(--img-bg-color) 25%, transparent 25%), + background-image: linear-gradient( + 45deg, + var(--img-bg-color) 25%, + transparent 25% + ), linear-gradient(-45deg, var(--img-bg-color) 25%, transparent 25%), linear-gradient(45deg, transparent 75%, var(--img-bg-color) 75%), linear-gradient(-45deg, transparent 75%, var(--img-bg-color) 75%); background-size: 10px 10px; @@ -685,9 +687,11 @@ overflow: hidden; box-shadow: 0 2px 16px var(--img-bg-color); /* checkerboard background */ - background-image: - linear-gradient(45deg, var(--img-bg-color) 25%, transparent 25%), - linear-gradient(-45deg, var(--img-bg-color) 25%, transparent 25%), + background-image: linear-gradient( + 45deg, + var(--img-bg-color) 25%, + transparent 25% + ), linear-gradient(-45deg, var(--img-bg-color) 25%, transparent 25%), linear-gradient(45deg, transparent 75%, var(--img-bg-color) 75%), linear-gradient(-45deg, transparent 75%, var(--img-bg-color) 75%); background-size: 20px 20px; diff --git a/src/components/compose.jsx b/src/components/compose.jsx index 20435145a4..15636315c8 100644 --- a/src/components/compose.jsx +++ b/src/components/compose.jsx @@ -1621,8 +1621,10 @@ function Compose({