diff --git a/package-lock.json b/package-lock.json index 72a4969..57d6259 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,7 @@ "@codemirror/language": "^6.12.3", "@codemirror/state": "^6.6.0", "@codemirror/view": "^6.38.2", - "@git-diff-view/react": "^0.1.1", + "@git-diff-view/react": "^0.1.5", "@replit/codemirror-indentation-markers": "^6.5.3", "brotli-wasm": "^3.0.1", "fflate": "^0.8.2", @@ -35,13 +35,13 @@ "remark-gfm": "^4.0.1" }, "devDependencies": { - "@playwright/test": "^1.58.2", + "@playwright/test": "^1.61.0", "@tailwindcss/postcss": "^4.0.6", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.0", "@testing-library/user-event": "^14.6.1", "@types/better-sqlite3": "^7.6.13", - "@types/node": "^22.13.10", + "@types/node": "^22.19.21", "@types/papaparse": "^5.3.16", "@types/react": "^19.0.10", "@types/react-dom": "^19.0.4", @@ -51,7 +51,7 @@ "tailwindcss": "^4.0.6", "tsx": "^4.21.0", "typescript": "^5.8.2", - "vitest": "^4.0.18" + "vitest": "^4.1.9" }, "engines": { "node": ">=20.10.0" @@ -1129,21 +1129,21 @@ } }, "node_modules/@git-diff-view/core": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@git-diff-view/core/-/core-0.1.1.tgz", - "integrity": "sha512-8bjNPT3oLAo7mqTRu79WEC44scIBjTtA9iXvvbqfbR2w2GM/FPZajmhPvgIre+YKe2jfTNFjhV2UcbjOarRKfA==", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@git-diff-view/core/-/core-0.1.5.tgz", + "integrity": "sha512-xvMZnD0k8BlmP3RqSocQrPVVzgUxr8KEl0wT5TTIm9c2B5tODHat69zidUvFWIoaYvHwDu4PfVcdGj4c+PrL6g==", "license": "MIT", "dependencies": { - "@git-diff-view/lowlight": "^0.1.1", + "@git-diff-view/lowlight": "^0.1.5", "fast-diff": "^1.3.0", "highlight.js": "^11.11.0", "lowlight": "^3.3.0" } }, "node_modules/@git-diff-view/lowlight": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@git-diff-view/lowlight/-/lowlight-0.1.1.tgz", - "integrity": "sha512-OXJv/EII795h/ek6sJVjge1vcTS826/3j2fw3mvmc8QGjQyncSRQhD655WQcamOq7jvEPSf7BC7zh3L36BEl8w==", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@git-diff-view/lowlight/-/lowlight-0.1.5.tgz", + "integrity": "sha512-6sxEJcGIUHzJc6Rx1kQ1TqAi0g6ABiGG8z5xhlLHWcQwDmGzB2wTISbyRxNXTwQTwJIMX5u5Cj+2xl+a84APxQ==", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -1152,17 +1152,17 @@ } }, "node_modules/@git-diff-view/react": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@git-diff-view/react/-/react-0.1.1.tgz", - "integrity": "sha512-mV1cQwBCCGURaG49J+jOBOm9Y+4iiUPrMBj02vWvJSF9MQYHk42/KynXtv7xbRjf/6AdUNphiRjOcC1b1xUWmA==", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@git-diff-view/react/-/react-0.1.5.tgz", + "integrity": "sha512-xcEr42FRtVhxR6TCkruY2zqCq+vaAOvWl3rH05aEYgDNuEbAvSZ0sOTULIE84hwHshkN3AF+sruuEjL1YC0aEg==", "license": "MIT", "dependencies": { - "@git-diff-view/core": "^0.1.1", + "@git-diff-view/core": "^0.1.5", "@types/hast": "^3.0.0", "fast-diff": "^1.3.0", "highlight.js": "^11.11.0", "lowlight": "^3.3.0", - "reactivity-store": "^0.3.12", + "reactivity-store": "^0.4.0", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { @@ -2076,14 +2076,14 @@ } }, "node_modules/@playwright/test": { - "version": "1.58.2", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.58.2.tgz", - "integrity": "sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA==", + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.61.0.tgz", + "integrity": "sha512-cKA5B6lpFEMyMGjxF54QihfYpB4FkEGH+qZhtArDEG+wezQAJY8Pq6C7T1SjWz+FFzt3TbyoXBQYk/0292TdJA==", "devOptional": true, "license": "Apache-2.0", "peer": true, "dependencies": { - "playwright": "1.58.2" + "playwright": "1.61.0" }, "bin": { "playwright": "cli.js" @@ -3286,9 +3286,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.19.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.15.tgz", - "integrity": "sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==", + "version": "22.19.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.21.tgz", + "integrity": "sha512-VMeFBSCKQKmm2swI2kW51SFusDqekC6q9trBCvJ/JliDchFSuoYYKN7yVNjPthP1HKZcx3U1gI/wTcEBjEFKTA==", "dev": true, "license": "MIT", "dependencies": { @@ -3908,31 +3908,31 @@ } }, "node_modules/@vitest/expect": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.18.tgz", - "integrity": "sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.9.tgz", + "integrity": "sha512-vl/rYsUKcBr3SnQn166+XR5ZQcgMx3DQhFWdfli/cWpLnLUmbxZvyrJZotLFUryib+LtArYMSTJ5RbQ57ZqrlA==", "dev": true, "license": "MIT", "dependencies": { - "@standard-schema/spec": "^1.0.0", + "@standard-schema/spec": "^1.1.0", "@types/chai": "^5.2.2", - "@vitest/spy": "4.0.18", - "@vitest/utils": "4.0.18", - "chai": "^6.2.1", - "tinyrainbow": "^3.0.3" + "@vitest/spy": "4.1.9", + "@vitest/utils": "4.1.9", + "chai": "^6.2.2", + "tinyrainbow": "^3.1.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/mocker": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.18.tgz", - "integrity": "sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.9.tgz", + "integrity": "sha512-EVkXzBjrPGM+cK8/ANWgBrkUCfJfb38/EfTSO8h7pWvKkyPkpWxvR7BkD2MyItMF62C97zAEoqdpUixwR/e+Rw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "4.0.18", + "@vitest/spy": "4.1.9", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, @@ -3941,7 +3941,7 @@ }, "peerDependencies": { "msw": "^2.4.9", - "vite": "^6.0.0 || ^7.0.0-0" + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "msw": { @@ -3953,26 +3953,26 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.18.tgz", - "integrity": "sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.9.tgz", + "integrity": "sha512-s0iufns3iIFitdgm+YR7g1whCAaGtXz459VS9/PqyKDEEFgYIhsHOQmXgIgDuYCt7DeQmiZT0Qe2OA2p4ZPu5A==", "dev": true, "license": "MIT", "dependencies": { - "tinyrainbow": "^3.0.3" + "tinyrainbow": "^3.1.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/runner": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.18.tgz", - "integrity": "sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.9.tgz", + "integrity": "sha512-KXLMDtc7oe70+3mJfGrPUWPesswH+3sTxAMAMl8DG7I8IUQT4XW718dY5ID3vPUcmlu27CcKfY4P3h3I29SLJg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "4.0.18", + "@vitest/utils": "4.1.9", "pathe": "^2.0.3" }, "funding": { @@ -3980,13 +3980,14 @@ } }, "node_modules/@vitest/snapshot": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.18.tgz", - "integrity": "sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.9.tgz", + "integrity": "sha512-Jc7RKGNBo8Z28WYIm0Niej4xdSPByRf6mU58VpHQkd6Zh05rlnA+twjbK5HyeIGHxrzsc3mJgS43uM0CZKzaIA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.0.18", + "@vitest/pretty-format": "4.1.9", + "@vitest/utils": "4.1.9", "magic-string": "^0.30.21", "pathe": "^2.0.3" }, @@ -3995,9 +3996,9 @@ } }, "node_modules/@vitest/spy": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.18.tgz", - "integrity": "sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.9.tgz", + "integrity": "sha512-fHpsS6mIi+PiEW+vcRVOMkX1oSaPKne3VOclSFICPcGOmfKgXPU5iAah+wcNcj2xPrCCmfq99IDGf+EojhhvhA==", "dev": true, "license": "MIT", "funding": { @@ -4005,32 +4006,33 @@ } }, "node_modules/@vitest/utils": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.18.tgz", - "integrity": "sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.9.tgz", + "integrity": "sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.0.18", - "tinyrainbow": "^3.0.3" + "@vitest/pretty-format": "4.1.9", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.1.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vue/reactivity": { - "version": "3.5.29", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.29.tgz", - "integrity": "sha512-zcrANcrRdcLtmGZETBxWqIkoQei8HaFpZWx/GHKxx79JZsiZ8j1du0VUJtu4eJjgFvU/iKL5lRXFXksVmI+5DA==", + "version": "3.5.38", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.38.tgz", + "integrity": "sha512-pG6LV/NDNRbKizcUjFFLAfjaL8mcv4DmR9avNcUw2gDHBzZneuS2TWCmp633ynzxz9YYKNeEPK2I8Wraqy2HUQ==", "license": "MIT", "dependencies": { - "@vue/shared": "3.5.29" + "@vue/shared": "3.5.38" } }, "node_modules/@vue/shared": { - "version": "3.5.29", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.29.tgz", - "integrity": "sha512-w7SR0A5zyRByL9XUkCfdLs7t9XOHUyJ67qPGQjOou3p6GvBeBW+AVjUUmlxtZ4PIYaRvE+1LmK44O4uajlZwcg==", + "version": "3.5.38", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.38.tgz", + "integrity": "sha512-FTW0AFZNaK5/mOqvGBwVfUlNLU38TiQn4+DQgIFUnrBBJQ1crMJ82yeGQLV5jyKFsO8yRukpbuP7x+nRbH6aug==", "license": "MIT" }, "node_modules/acorn": { @@ -4714,6 +4716,13 @@ "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", "license": "MIT" }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, "node_modules/cose-base": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", @@ -5722,9 +5731,9 @@ } }, "node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz", + "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==", "dev": true, "license": "MIT" }, @@ -9604,13 +9613,13 @@ } }, "node_modules/playwright": { - "version": "1.58.2", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.2.tgz", - "integrity": "sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==", + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.61.0.tgz", + "integrity": "sha512-Z+7BeeqQPRRzklHsVFP4KTGIyMxKUmfeRA4WisM6G3/XW6nwGeX6fX9qYaDa+CiUqpOkb2f6X3nar05R3kSuJQ==", "devOptional": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.58.2" + "playwright-core": "1.61.0" }, "bin": { "playwright": "cli.js" @@ -9623,9 +9632,9 @@ } }, "node_modules/playwright-core": { - "version": "1.58.2", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.2.tgz", - "integrity": "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==", + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.61.0.tgz", + "integrity": "sha512-caX7TrY3Ml6egyDX0WUcTHDxodl/b51y5wJOdCEA36QviK/s2g081hvmGs8eaE3DWb6NYZQ6BjO/QkNRPenoPA==", "devOptional": true, "license": "Apache-2.0", "bin": { @@ -9925,13 +9934,13 @@ } }, "node_modules/reactivity-store": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/reactivity-store/-/reactivity-store-0.3.12.tgz", - "integrity": "sha512-Idz9EL4dFUtQbHySZQzckWOTUfqjdYpUtNW0iOysC32mG7IjiUGB77QrsyR5eAWBkRiS9JscF6A3fuQAIy+LrQ==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/reactivity-store/-/reactivity-store-0.4.0.tgz", + "integrity": "sha512-uL9uoREOBg2o4zUa8vMU0AbvAOk0osPloizscmyZqMvJzcuuKX3ELFYYr1DX8gAcfvlhPduz4QuLZn1eChCu4Q==", "license": "MIT", "dependencies": { - "@vue/reactivity": "~3.5.22", - "@vue/shared": "~3.5.22", + "@vue/reactivity": "~3.5.30", + "@vue/shared": "~3.5.30", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { @@ -10641,9 +10650,9 @@ "license": "MIT" }, "node_modules/std-env": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", - "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.1.0.tgz", + "integrity": "sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==", "dev": true, "license": "MIT" }, @@ -11037,9 +11046,9 @@ } }, "node_modules/tinyrainbow": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.0.3.tgz", - "integrity": "sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", + "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", "dev": true, "license": "MIT", "engines": { @@ -11646,31 +11655,31 @@ } }, "node_modules/vitest": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.18.tgz", - "integrity": "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.9.tgz", + "integrity": "sha512-nE3/LEyc0z87uHYLZebqCUOaJr2hdtuPp7BQ4BosVFnfltxgAvMG08NyrSGlPpOUWvR27c5flSmYFTNr78L9GQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "4.0.18", - "@vitest/mocker": "4.0.18", - "@vitest/pretty-format": "4.0.18", - "@vitest/runner": "4.0.18", - "@vitest/snapshot": "4.0.18", - "@vitest/spy": "4.0.18", - "@vitest/utils": "4.0.18", - "es-module-lexer": "^1.7.0", - "expect-type": "^1.2.2", + "@vitest/expect": "4.1.9", + "@vitest/mocker": "4.1.9", + "@vitest/pretty-format": "4.1.9", + "@vitest/runner": "4.1.9", + "@vitest/snapshot": "4.1.9", + "@vitest/spy": "4.1.9", + "@vitest/utils": "4.1.9", + "es-module-lexer": "^2.0.0", + "expect-type": "^1.3.0", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", - "std-env": "^3.10.0", + "std-env": "^4.0.0-rc.1", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", - "tinyrainbow": "^3.0.3", - "vite": "^6.0.0 || ^7.0.0", + "tinyrainbow": "^3.1.0", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", "why-is-node-running": "^2.3.0" }, "bin": { @@ -11686,12 +11695,15 @@ "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "4.0.18", - "@vitest/browser-preview": "4.0.18", - "@vitest/browser-webdriverio": "4.0.18", - "@vitest/ui": "4.0.18", + "@vitest/browser-playwright": "4.1.9", + "@vitest/browser-preview": "4.1.9", + "@vitest/browser-webdriverio": "4.1.9", + "@vitest/coverage-istanbul": "4.1.9", + "@vitest/coverage-v8": "4.1.9", + "@vitest/ui": "4.1.9", "happy-dom": "*", - "jsdom": "*" + "jsdom": "*", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "@edge-runtime/vm": { @@ -11712,6 +11724,12 @@ "@vitest/browser-webdriverio": { "optional": true }, + "@vitest/coverage-istanbul": { + "optional": true + }, + "@vitest/coverage-v8": { + "optional": true + }, "@vitest/ui": { "optional": true }, @@ -11720,6 +11738,9 @@ }, "jsdom": { "optional": true + }, + "vite": { + "optional": false } } }, diff --git a/package.json b/package.json index 12f7b54..d9a7d5a 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "@codemirror/language": "^6.12.3", "@codemirror/state": "^6.6.0", "@codemirror/view": "^6.38.2", - "@git-diff-view/react": "^0.1.1", + "@git-diff-view/react": "^0.1.5", "@replit/codemirror-indentation-markers": "^6.5.3", "brotli-wasm": "^3.0.1", "fflate": "^0.8.2", @@ -71,13 +71,13 @@ "remark-gfm": "^4.0.1" }, "devDependencies": { - "@playwright/test": "^1.58.2", + "@playwright/test": "^1.61.0", "@tailwindcss/postcss": "^4.0.6", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.0", "@testing-library/user-event": "^14.6.1", "@types/better-sqlite3": "^7.6.13", - "@types/node": "^22.13.10", + "@types/node": "^22.19.21", "@types/papaparse": "^5.3.16", "@types/react": "^19.0.10", "@types/react-dom": "^19.0.4", @@ -87,7 +87,7 @@ "tailwindcss": "^4.0.6", "tsx": "^4.21.0", "typescript": "^5.8.2", - "vitest": "^4.0.18" + "vitest": "^4.1.9" }, "optionalDependencies": { "better-sqlite3": "^12.8.0" diff --git a/public/vendor/diff-view-pure.css b/public/vendor/diff-view-pure.css index 81032e5..9c6e072 100644 --- a/public/vendor/diff-view-pure.css +++ b/public/vendor/diff-view-pure.css @@ -1,27 +1,45 @@ +.diff-tailwindcss-wrapper .\!container { + width: 100% !important; +} .diff-tailwindcss-wrapper .container { width: 100%; } @media (min-width: 640px) { + .diff-tailwindcss-wrapper .\!container { + max-width: 640px !important; + } .diff-tailwindcss-wrapper .container { max-width: 640px; } } @media (min-width: 768px) { + .diff-tailwindcss-wrapper .\!container { + max-width: 768px !important; + } .diff-tailwindcss-wrapper .container { max-width: 768px; } } @media (min-width: 1024px) { + .diff-tailwindcss-wrapper .\!container { + max-width: 1024px !important; + } .diff-tailwindcss-wrapper .container { max-width: 1024px; } } @media (min-width: 1280px) { + .diff-tailwindcss-wrapper .\!container { + max-width: 1280px !important; + } .diff-tailwindcss-wrapper .container { max-width: 1280px; } } @media (min-width: 1536px) { + .diff-tailwindcss-wrapper .\!container { + max-width: 1536px !important; + } .diff-tailwindcss-wrapper .container { max-width: 1536px; } @@ -408,12 +426,105 @@ .diff-tailwindcss-wrapper .diff-widget-tooltip:hover::after { display: block; } +.diff-line-extend-wrapper, +.diff-line-widget-wrapper { + display: flow-root; +} .diff-line-extend-wrapper * { color: initial; } .diff-line-widget-wrapper * { color: initial; } +/* Multi-select styles for line range selection */ +.diff-tailwindcss-wrapper .diff-multi-select-active.diff-line-new-num, +.diff-tailwindcss-wrapper .diff-multi-select-active.diff-line-old-num, +.diff-tailwindcss-wrapper .diff-multi-select-active.diff-line-num { + z-index: 2; +} +.diff-tailwindcss-wrapper .diff-multi-select-active.diff-line-content, +.diff-tailwindcss-wrapper .diff-multi-select-active.diff-line-new-content, +.diff-tailwindcss-wrapper .diff-multi-select-active.diff-line-old-content { + position: relative; +} +.diff-tailwindcss-wrapper .diff-multi-select-active.diff-line-new-num::after, +.diff-tailwindcss-wrapper .diff-multi-select-active.diff-line-old-num::after, +.diff-tailwindcss-wrapper .diff-multi-select-active.diff-line-num::after { + content: ""; + position: absolute; + z-index: 1; + inset: 0; + opacity: 0.15; + background-color: var(--diff-multi-select-bg, #f0c000); + pointer-events: none; +} +.diff-tailwindcss-wrapper .diff-multi-select-active.diff-line-new-num::before, +.diff-tailwindcss-wrapper .diff-multi-select-active.diff-line-old-num::before, +.diff-tailwindcss-wrapper .diff-multi-select-active.diff-line-num::before { + content: ""; + z-index: 2; + position: absolute; + top: 0; + bottom: 0; + right: -2px; + width: 4px; + background-color: var(--diff-multi-select-border, #2588fa); +} +.diff-tailwindcss-wrapper .diff-multi-select-active.diff-line-new-content::after, +.diff-tailwindcss-wrapper .diff-multi-select-active.diff-line-old-content::after, +.diff-tailwindcss-wrapper .diff-multi-select-active.diff-line-content::after { + content: ""; + position: absolute; + z-index: 1; + inset: 0; + opacity: 0.15; + background-color: var(--diff-multi-select-bg, #f0c000); + pointer-events: none; +} +/* Multi-select: ensure proper positioning for line number cells */ +.diff-multi-selecting .diff-line-old-num, +.diff-multi-selecting .diff-line-new-num, +.diff-multi-selecting .diff-line-num { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} +.diff-multi-selecting .diff-line-old-content, +.diff-multi-selecting .diff-line-new-content, +.diff-multi-selecting .diff-line-content { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} +/* Prevent text selection during multi-line selection */ +.diff-multi-selecting { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} +.diff-multi-selecting * { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} +/* Hide addWidget button during active dragging selection */ +.diff-multi-selecting .diff-add-widget-wrapper { + display: none; +} +/* Ensure addWidget button is above selection overlay */ +.diff-multiselect-wrapper .diff-add-widget-wrapper { + z-index: 10 !important; +} +/* Line number span should not interfere with click events */ +.diff-tailwindcss-wrapper .diff-line-new-num span[data-line-num], +.diff-tailwindcss-wrapper .diff-line-old-num span[data-line-num] { + pointer-events: none; +} +.diff-multiselect-wrapper .diff-line-old-num, +.diff-multiselect-wrapper .diff-line-new-num, +.diff-multiselect-wrapper .diff-line-num { + cursor: pointer; +} .diff-tailwindcss-wrapper[data-theme="light"] .diff-line-syntax-raw pre code.hljs { display: block; overflow-x: auto; diff --git a/public/vendor/diff-view-pure.css.br b/public/vendor/diff-view-pure.css.br index 4e6954e..04cbb92 100644 Binary files a/public/vendor/diff-view-pure.css.br and b/public/vendor/diff-view-pure.css.br differ