diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 79540c57..5a13eaba 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,7 +14,7 @@ jobs: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 with: - node-version: 24.11.0 + node-version: 24.11.1 cache: npm - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 id: node_modules_cache_id diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 73843e2c..899246bc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -20,7 +20,7 @@ jobs: VERSION=$(jq -r '.version' dist/manifest.json) echo "VERSION=$VERSION" >> $GITHUB_ENV - name: Create tag and release note - uses: softprops/action-gh-release@6da8fa9354ddfdc4aeace5fc48d7f679b5214090 # v2.4.1 + uses: softprops/action-gh-release@5be0e66d93ac7ed76da52eca8bb058f665c3a5fe # v2.4.2 with: target_commitish: main name: ${{ env.VERSION }} @@ -34,7 +34,7 @@ jobs: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 with: - node-version: 24.11.0 + node-version: 24.11.1 cache: npm - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 id: node_modules_cache_id diff --git a/biome.json b/biome.json index a1c67fbc..78134579 100644 --- a/biome.json +++ b/biome.json @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/2.3.1/schema.json", + "$schema": "https://biomejs.dev/schemas/2.3.5/schema.json", "assist": { "actions": { "source": { "organizeImports": "on" } } }, "files": { "ignoreUnknown": false, diff --git a/dist/manifest.json b/dist/manifest.json index ebc56ade..57a59839 100644 --- a/dist/manifest.json +++ b/dist/manifest.json @@ -4,7 +4,7 @@ "short_name": "__MSG_app_name_short__", "description": "__MSG_app_desc__", "default_locale": "en", - "version": "2.38.5", + "version": "2.38.6", "action": { "default_title": "TabTabTab", "default_icon": { diff --git a/package-lock.json b/package-lock.json index 84eed1db..51e51775 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,23 +11,23 @@ "@dnd-kit/sortable": "^10.0.0", "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.1", - "@mui/icons-material": "^7.3.4", - "@mui/material": "^7.3.4", + "@mui/icons-material": "^7.3.5", + "@mui/material": "^7.3.5", "react": "^19.2.0", "react-dom": "^19.2.0", "tldts": "^7.0.17" }, "devDependencies": { - "@biomejs/biome": "^2.3.2", - "@types/chrome": "^0.1.27", - "@types/node": "^24.9.2", - "@types/react": "^19.2.2", - "@types/react-dom": "^19.2.2", - "@vitejs/plugin-react": "^5.1.0", + "@biomejs/biome": "^2.3.5", + "@types/chrome": "^0.1.29", + "@types/node": "^24.10.1", + "@types/react": "^19.2.5", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^5.1.1", "chromex-locale-lint": "^0.1.0", "typescript": "^5.9.3", - "vite": "^7.1.12", - "vitest": "^4.0.6" + "vite": "^7.2.2", + "vitest": "^4.0.9" } }, "node_modules/@babel/code-frame": { @@ -320,9 +320,9 @@ } }, "node_modules/@biomejs/biome": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.3.2.tgz", - "integrity": "sha512-8e9tzamuDycx7fdrcJ/F/GDZ8SYukc5ud6tDicjjFqURKYFSWMl0H0iXNXZEGmcmNUmABgGuHThPykcM41INgg==", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.3.5.tgz", + "integrity": "sha512-HvLhNlIlBIbAV77VysRIBEwp55oM/QAjQEin74QQX9Xb259/XP/D5AGGnZMOyF1el4zcvlNYYR3AyTMUV3ILhg==", "dev": true, "license": "MIT OR Apache-2.0", "bin": { @@ -336,20 +336,20 @@ "url": "https://opencollective.com/biome" }, "optionalDependencies": { - "@biomejs/cli-darwin-arm64": "2.3.2", - "@biomejs/cli-darwin-x64": "2.3.2", - "@biomejs/cli-linux-arm64": "2.3.2", - "@biomejs/cli-linux-arm64-musl": "2.3.2", - "@biomejs/cli-linux-x64": "2.3.2", - "@biomejs/cli-linux-x64-musl": "2.3.2", - "@biomejs/cli-win32-arm64": "2.3.2", - "@biomejs/cli-win32-x64": "2.3.2" + "@biomejs/cli-darwin-arm64": "2.3.5", + "@biomejs/cli-darwin-x64": "2.3.5", + "@biomejs/cli-linux-arm64": "2.3.5", + "@biomejs/cli-linux-arm64-musl": "2.3.5", + "@biomejs/cli-linux-x64": "2.3.5", + "@biomejs/cli-linux-x64-musl": "2.3.5", + "@biomejs/cli-win32-arm64": "2.3.5", + "@biomejs/cli-win32-x64": "2.3.5" } }, "node_modules/@biomejs/cli-darwin-arm64": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.3.2.tgz", - "integrity": "sha512-4LECm4kc3If0JISai4c3KWQzukoUdpxy4fRzlrPcrdMSRFksR9ZoXK7JBcPuLBmd2SoT4/d7CQS33VnZpgBjew==", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.3.5.tgz", + "integrity": "sha512-fLdTur8cJU33HxHUUsii3GLx/TR0BsfQx8FkeqIiW33cGMtUD56fAtrh+2Fx1uhiCsVZlFh6iLKUU3pniZREQw==", "cpu": [ "arm64" ], @@ -364,9 +364,9 @@ } }, "node_modules/@biomejs/cli-darwin-x64": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.3.2.tgz", - "integrity": "sha512-jNMnfwHT4N3wi+ypRfMTjLGnDmKYGzxVr1EYAPBcauRcDnICFXN81wD6wxJcSUrLynoyyYCdfW6vJHS/IAoTDA==", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.3.5.tgz", + "integrity": "sha512-qpT8XDqeUlzrOW8zb4k3tjhT7rmvVRumhi2657I2aGcY4B+Ft5fNwDdZGACzn8zj7/K1fdWjgwYE3i2mSZ+vOA==", "cpu": [ "x64" ], @@ -381,9 +381,9 @@ } }, "node_modules/@biomejs/cli-linux-arm64": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.3.2.tgz", - "integrity": "sha512-amnqvk+gWybbQleRRq8TMe0rIv7GHss8mFJEaGuEZYWg1Tw14YKOkeo8h6pf1c+d3qR+JU4iT9KXnBKGON4klw==", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.3.5.tgz", + "integrity": "sha512-u/pybjTBPGBHB66ku4pK1gj+Dxgx7/+Z0jAriZISPX1ocTO8aHh8x8e7Kb1rB4Ms0nA/SzjtNOVJ4exVavQBCw==", "cpu": [ "arm64" ], @@ -398,9 +398,9 @@ } }, "node_modules/@biomejs/cli-linux-arm64-musl": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.3.2.tgz", - "integrity": "sha512-2Zz4usDG1GTTPQnliIeNx6eVGGP2ry5vE/v39nT73a3cKN6t5H5XxjcEoZZh62uVZvED7hXXikclvI64vZkYqw==", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.3.5.tgz", + "integrity": "sha512-eGUG7+hcLgGnMNl1KHVZUYxahYAhC462jF/wQolqu4qso2MSk32Q+QrpN7eN4jAHAg7FUMIo897muIhK4hXhqg==", "cpu": [ "arm64" ], @@ -415,9 +415,9 @@ } }, "node_modules/@biomejs/cli-linux-x64": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.3.2.tgz", - "integrity": "sha512-8BG/vRAhFz1pmuyd24FQPhNeueLqPtwvZk6yblABY2gzL2H8fLQAF/Z2OPIc+BPIVPld+8cSiKY/KFh6k81xfA==", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.3.5.tgz", + "integrity": "sha512-XrIVi9YAW6ye0CGQ+yax0gLfx+BFOtKaNX74n+xHWla6Cl6huUmcKNO7HPx7BiKnJUzrxXY1qYlm7xMvi08X4g==", "cpu": [ "x64" ], @@ -432,9 +432,9 @@ } }, "node_modules/@biomejs/cli-linux-x64-musl": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.3.2.tgz", - "integrity": "sha512-gzB19MpRdTuOuLtPpFBGrV3Lq424gHyq2lFj8wfX9tvLMLdmA/R9C7k/mqBp/spcbWuHeIEKgEs3RviOPcWGBA==", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.3.5.tgz", + "integrity": "sha512-awVuycTPpVTH/+WDVnEEYSf6nbCBHf/4wB3lquwT7puhNg8R4XvonWNZzUsfHZrCkjkLhFH/vCZK5jHatD9FEg==", "cpu": [ "x64" ], @@ -449,9 +449,9 @@ } }, "node_modules/@biomejs/cli-win32-arm64": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.3.2.tgz", - "integrity": "sha512-lCruqQlfWjhMlOdyf5pDHOxoNm4WoyY2vZ4YN33/nuZBRstVDuqPPjS0yBkbUlLEte11FbpW+wWSlfnZfSIZvg==", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.3.5.tgz", + "integrity": "sha512-DlBiMlBZZ9eIq4H7RimDSGsYcOtfOIfZOaI5CqsWiSlbTfqbPVfWtCf92wNzx8GNMbu1s7/g3ZZESr6+GwM/SA==", "cpu": [ "arm64" ], @@ -466,9 +466,9 @@ } }, "node_modules/@biomejs/cli-win32-x64": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.3.2.tgz", - "integrity": "sha512-6Ee9P26DTb4D8sN9nXxgbi9Dw5vSOfH98M7UlmkjKB2vtUbrRqCbZiNfryGiwnPIpd6YUoTl7rLVD2/x1CyEHQ==", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.3.5.tgz", + "integrity": "sha512-nUmR8gb6yvrKhtRgzwo/gDimPwnO5a4sCydf8ZS2kHIJhEmSmk+STsusr1LHTuM//wXppBawvSQi2xFXJCdgKQ==", "cpu": [ "x64" ], @@ -1171,9 +1171,9 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.3.4.tgz", - "integrity": "sha512-BIktMapG3r4iXwIhYNpvk97ZfYWTreBBQTWjQKbNbzI64+ULHfYavQEX2w99aSWHS58DvXESWIgbD9adKcUOBw==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.3.5.tgz", + "integrity": "sha512-kOLwlcDPnVz2QMhiBv0OQ8le8hTCqKM9cRXlfVPL91l3RGeOsxrIhNRsUt3Xb8wb+pTVUolW+JXKym93vRKxCw==", "license": "MIT", "funding": { "type": "opencollective", @@ -1181,9 +1181,9 @@ } }, "node_modules/@mui/icons-material": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-7.3.4.tgz", - "integrity": "sha512-9n6Xcq7molXWYb680N2Qx+FRW8oT6j/LXF5PZFH3ph9X/Rct0B/BlLAsFI7iL9ySI6LVLuQIVtrLiPT82R7OZw==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-7.3.5.tgz", + "integrity": "sha512-LciL1GLMZ+VlzyHAALSVAR22t8IST4LCXmljcUSx2NOutgO2XnxdIp8ilFbeNf9wpo0iUFbAuoQcB7h+HHIf3A==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.28.4" @@ -1196,7 +1196,7 @@ "url": "https://opencollective.com/mui-org" }, "peerDependencies": { - "@mui/material": "^7.3.4", + "@mui/material": "^7.3.5", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, @@ -1207,23 +1207,23 @@ } }, "node_modules/@mui/material": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-7.3.4.tgz", - "integrity": "sha512-gEQL9pbJZZHT7lYJBKQCS723v1MGys2IFc94COXbUIyCTWa+qC77a7hUax4Yjd5ggEm35dk4AyYABpKKWC4MLw==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-7.3.5.tgz", + "integrity": "sha512-8VVxFmp1GIm9PpmnQoCoYo0UWHoOrdA57tDL62vkpzEgvb/d71Wsbv4FRg7r1Gyx7PuSo0tflH34cdl/NvfHNQ==", "license": "MIT", "peer": true, "dependencies": { "@babel/runtime": "^7.28.4", - "@mui/core-downloads-tracker": "^7.3.4", - "@mui/system": "^7.3.3", - "@mui/types": "^7.4.7", - "@mui/utils": "^7.3.3", + "@mui/core-downloads-tracker": "^7.3.5", + "@mui/system": "^7.3.5", + "@mui/types": "^7.4.8", + "@mui/utils": "^7.3.5", "@popperjs/core": "^2.11.8", "@types/react-transition-group": "^4.4.12", "clsx": "^2.1.1", "csstype": "^3.1.3", "prop-types": "^15.8.1", - "react-is": "^19.1.1", + "react-is": "^19.2.0", "react-transition-group": "^4.4.5" }, "engines": { @@ -1236,7 +1236,7 @@ "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", - "@mui/material-pigment-css": "^7.3.3", + "@mui/material-pigment-css": "^7.3.5", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" @@ -1257,13 +1257,13 @@ } }, "node_modules/@mui/private-theming": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.3.3.tgz", - "integrity": "sha512-OJM+9nj5JIyPUvsZ5ZjaeC9PfktmK+W5YaVLToLR8L0lB/DGmv1gcKE43ssNLSvpoW71Hct0necfade6+kW3zQ==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.3.5.tgz", + "integrity": "sha512-cTx584W2qrLonwhZLbEN7P5pAUu0nZblg8cLBlTrZQ4sIiw8Fbvg7GvuphQaSHxPxrCpa7FDwJKtXdbl2TSmrA==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.28.4", - "@mui/utils": "^7.3.3", + "@mui/utils": "^7.3.5", "prop-types": "^15.8.1" }, "engines": { @@ -1284,9 +1284,9 @@ } }, "node_modules/@mui/styled-engine": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.3.3.tgz", - "integrity": "sha512-CmFxvRJIBCEaWdilhXMw/5wFJ1+FT9f3xt+m2pPXhHPeVIbBg9MnMvNSJjdALvnQJMPw8jLhrUtXmN7QAZV2fw==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.3.5.tgz", + "integrity": "sha512-zbsZ0uYYPndFCCPp2+V3RLcAN6+fv4C8pdwRx6OS3BwDkRCN8WBehqks7hWyF3vj1kdQLIWrpdv/5Y0jHRxYXQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.28.4", @@ -1318,16 +1318,16 @@ } }, "node_modules/@mui/system": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-7.3.3.tgz", - "integrity": "sha512-Lqq3emZr5IzRLKaHPuMaLBDVaGvxoh6z7HMWd1RPKawBM5uMRaQ4ImsmmgXWtwJdfZux5eugfDhXJUo2mliS8Q==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-7.3.5.tgz", + "integrity": "sha512-yPaf5+gY3v80HNkJcPi6WT+r9ebeM4eJzrREXPxMt7pNTV/1eahyODO4fbH3Qvd8irNxDFYn5RQ3idHW55rA6g==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.28.4", - "@mui/private-theming": "^7.3.3", - "@mui/styled-engine": "^7.3.3", - "@mui/types": "^7.4.7", - "@mui/utils": "^7.3.3", + "@mui/private-theming": "^7.3.5", + "@mui/styled-engine": "^7.3.5", + "@mui/types": "^7.4.8", + "@mui/utils": "^7.3.5", "clsx": "^2.1.1", "csstype": "^3.1.3", "prop-types": "^15.8.1" @@ -1358,9 +1358,9 @@ } }, "node_modules/@mui/types": { - "version": "7.4.7", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.7.tgz", - "integrity": "sha512-8vVje9rdEr1rY8oIkYgP+Su5Kwl6ik7O3jQ0wl78JGSmiZhRHV+vkjooGdKD8pbtZbutXFVTWQYshu2b3sG9zw==", + "version": "7.4.8", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.8.tgz", + "integrity": "sha512-ZNXLBjkPV6ftLCmmRCafak3XmSn8YV0tKE/ZOhzKys7TZXUiE0mZxlH8zKDo6j6TTUaDnuij68gIG+0Ucm7Xhw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.28.4" @@ -1375,17 +1375,17 @@ } }, "node_modules/@mui/utils": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-7.3.3.tgz", - "integrity": "sha512-kwNAUh7bLZ7mRz9JZ+6qfRnnxbE4Zuc+RzXnhSpRSxjTlSTj7b4JxRLXpG+MVtPVtqks5k/XC8No1Vs3x4Z2gg==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-7.3.5.tgz", + "integrity": "sha512-jisvFsEC3sgjUjcPnR4mYfhzjCDIudttSGSbe1o/IXFNu0kZuR+7vqQI0jg8qtcVZBHWrwTfvAZj9MNMumcq1g==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.28.4", - "@mui/types": "^7.4.7", + "@mui/types": "^7.4.8", "@types/prop-types": "^15.7.15", "clsx": "^2.1.1", "prop-types": "^15.8.1", - "react-is": "^19.1.1" + "react-is": "^19.2.0" }, "engines": { "node": ">=14.0.0" @@ -1415,9 +1415,9 @@ } }, "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.43", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.43.tgz", - "integrity": "sha512-5Uxg7fQUCmfhax7FJke2+8B6cqgeUJUD9o2uXIKXhD+mG0mL6NObmVoi9wXEU1tY89mZKgAYA6fTbftx3q2ZPQ==", + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.47.tgz", + "integrity": "sha512-8QagwMH3kNCuzD8EWL8R2YPW5e4OrHNSAHRFDdmFqEwEaD/KcNKjVoumo+gP2vW5eKB2UPbM6vTYiGZX0ixLnw==", "dev": true, "license": "MIT" }, @@ -1789,9 +1789,9 @@ } }, "node_modules/@types/chrome": { - "version": "0.1.27", - "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.1.27.tgz", - "integrity": "sha512-pkkCb0Ft8X+Igi751POzT+YqchSxUCtB6s4Gs6ttgSj8qzJga/qlJMgSW1mKxuQTW4i0sTqQbqVtzXDS5AU+4A==", + "version": "0.1.29", + "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.1.29.tgz", + "integrity": "sha512-AMEjLNCFjLWEqXJNbSgZk9+kaC8SX0FOCd46ZZqE2IaCzmeRGbFEhCEbhoV6kzale+WqSeiiqjHgA7Q31shdoA==", "dev": true, "license": "MIT", "dependencies": { @@ -1835,9 +1835,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "24.9.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.2.tgz", - "integrity": "sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==", + "version": "24.10.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", + "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", "dev": true, "license": "MIT", "peer": true, @@ -1857,9 +1857,9 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "19.2.2", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.2.tgz", - "integrity": "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==", + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.5.tgz", + "integrity": "sha512-keKxkZMqnDicuvFoJbzrhbtdLSPhj/rZThDlKWCDbgXmUg0rEUFtRssDXKYmtXluZlIqiC5VqkCgRwzuyLHKHw==", "license": "MIT", "peer": true, "dependencies": { @@ -1867,9 +1867,9 @@ } }, "node_modules/@types/react-dom": { - "version": "19.2.2", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.2.tgz", - "integrity": "sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==", + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -1886,16 +1886,16 @@ } }, "node_modules/@vitejs/plugin-react": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.0.tgz", - "integrity": "sha512-4LuWrg7EKWgQaMJfnN+wcmbAW+VSsCmqGohftWjuct47bv8uE4n/nPpq4XjJPsxgq00GGG5J8dvBczp8uxScew==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.1.tgz", + "integrity": "sha512-WQfkSw0QbQ5aJ2CHYw23ZGkqnRwqKHD/KYsMeTkZzPT4Jcf0DcBxBtwMJxnu6E7oxw5+JC6ZAiePgh28uJ1HBA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.28.4", + "@babel/core": "^7.28.5", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", - "@rolldown/pluginutils": "1.0.0-beta.43", + "@rolldown/pluginutils": "1.0.0-beta.47", "@types/babel__core": "^7.20.5", "react-refresh": "^0.18.0" }, @@ -1907,17 +1907,17 @@ } }, "node_modules/@vitest/expect": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.6.tgz", - "integrity": "sha512-5j8UUlBVhOjhj4lR2Nt9sEV8b4WtbcYh8vnfhTNA2Kn5+smtevzjNq+xlBuVhnFGXiyPPNzGrOVvmyHWkS5QGg==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.9.tgz", + "integrity": "sha512-C2vyXf5/Jfj1vl4DQYxjib3jzyuswMi/KHHVN2z+H4v16hdJ7jMZ0OGe3uOVIt6LyJsAofDdaJNIFEpQcrSTFw==", "dev": true, "license": "MIT", "dependencies": { "@standard-schema/spec": "^1.0.0", "@types/chai": "^5.2.2", - "@vitest/spy": "4.0.6", - "@vitest/utils": "4.0.6", - "chai": "^6.0.1", + "@vitest/spy": "4.0.9", + "@vitest/utils": "4.0.9", + "chai": "^6.2.0", "tinyrainbow": "^3.0.3" }, "funding": { @@ -1925,15 +1925,15 @@ } }, "node_modules/@vitest/mocker": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.6.tgz", - "integrity": "sha512-3COEIew5HqdzBFEYN9+u0dT3i/NCwppLnO1HkjGfAP1Vs3vti1Hxm/MvcbC4DAn3Szo1M7M3otiAaT83jvqIjA==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.9.tgz", + "integrity": "sha512-PUyaowQFHW+9FKb4dsvvBM4o025rWMlEDXdWRxIOilGaHREYTi5Q2Rt9VCgXgPy/hHZu1LeuXtrA/GdzOatP2g==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "4.0.6", + "@vitest/spy": "4.0.9", "estree-walker": "^3.0.3", - "magic-string": "^0.30.19" + "magic-string": "^0.30.21" }, "funding": { "url": "https://opencollective.com/vitest" @@ -1952,9 +1952,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.6.tgz", - "integrity": "sha512-4vptgNkLIA1W1Nn5X4x8rLJBzPiJwnPc+awKtfBE5hNMVsoAl/JCCPPzNrbf+L4NKgklsis5Yp2gYa+XAS442g==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.9.tgz", + "integrity": "sha512-Hor0IBTwEi/uZqB7pvGepyElaM8J75pYjrrqbC8ZYMB9/4n5QA63KC15xhT+sqHpdGWfdnPo96E8lQUxs2YzSQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1965,13 +1965,13 @@ } }, "node_modules/@vitest/runner": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.6.tgz", - "integrity": "sha512-trPk5qpd7Jj+AiLZbV/e+KiiaGXZ8ECsRxtnPnCrJr9OW2mLB72Cb824IXgxVz/mVU3Aj4VebY+tDTPn++j1Og==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.9.tgz", + "integrity": "sha512-aF77tsXdEvIJRkj9uJZnHtovsVIx22Ambft9HudC+XuG/on1NY/bf5dlDti1N35eJT+QZLb4RF/5dTIG18s98w==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "4.0.6", + "@vitest/utils": "4.0.9", "pathe": "^2.0.3" }, "funding": { @@ -1979,14 +1979,14 @@ } }, "node_modules/@vitest/snapshot": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.6.tgz", - "integrity": "sha512-PaYLt7n2YzuvxhulDDu6c9EosiRuIE+FI2ECKs6yvHyhoga+2TBWI8dwBjs+IeuQaMtZTfioa9tj3uZb7nev1g==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.9.tgz", + "integrity": "sha512-r1qR4oYstPbnOjg0Vgd3E8ADJbi4ditCzqr+Z9foUrRhIy778BleNyZMeAJ2EjV+r4ASAaDsdciC9ryMy8xMMg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.0.6", - "magic-string": "^0.30.19", + "@vitest/pretty-format": "4.0.9", + "magic-string": "^0.30.21", "pathe": "^2.0.3" }, "funding": { @@ -1994,9 +1994,9 @@ } }, "node_modules/@vitest/spy": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.6.tgz", - "integrity": "sha512-g9jTUYPV1LtRPRCQfhbMintW7BTQz1n6WXYQYRQ25qkyffA4bjVXjkROokZnv7t07OqfaFKw1lPzqKGk1hmNuQ==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.9.tgz", + "integrity": "sha512-J9Ttsq0hDXmxmT8CUOWUr1cqqAj2FJRGTdyEjSR+NjoOGKEqkEWj+09yC0HhI8t1W6t4Ctqawl1onHgipJve1A==", "dev": true, "license": "MIT", "funding": { @@ -2004,13 +2004,13 @@ } }, "node_modules/@vitest/utils": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.6.tgz", - "integrity": "sha512-bG43VS3iYKrMIZXBo+y8Pti0O7uNju3KvNn6DrQWhQQKcLavMB+0NZfO1/QBAEbq0MaQ3QjNsnnXlGQvsh0Z6A==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.9.tgz", + "integrity": "sha512-cEol6ygTzY4rUPvNZM19sDf7zGa35IYTm9wfzkHoT/f5jX10IOY7QleWSOh5T0e3I3WVozwK5Asom79qW8DiuQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.0.6", + "@vitest/pretty-format": "4.0.9", "tinyrainbow": "^3.0.3" }, "funding": { @@ -3051,9 +3051,9 @@ } }, "node_modules/vite": { - "version": "7.1.12", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.12.tgz", - "integrity": "sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.2.tgz", + "integrity": "sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==", "dev": true, "license": "MIT", "peer": true, @@ -3127,26 +3127,26 @@ } }, "node_modules/vitest": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.6.tgz", - "integrity": "sha512-gR7INfiVRwnEOkCk47faros/9McCZMp5LM+OMNWGLaDBSvJxIzwjgNFufkuePBNaesGRnLmNfW+ddbUJRZn0nQ==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.9.tgz", + "integrity": "sha512-E0Ja2AX4th+CG33yAFRC+d1wFx2pzU5r6HtG6LiPSE04flaE0qB6YyjSw9ZcpJAtVPfsvZGtJlKWZpuW7EHRxg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "4.0.6", - "@vitest/mocker": "4.0.6", - "@vitest/pretty-format": "4.0.6", - "@vitest/runner": "4.0.6", - "@vitest/snapshot": "4.0.6", - "@vitest/spy": "4.0.6", - "@vitest/utils": "4.0.6", + "@vitest/expect": "4.0.9", + "@vitest/mocker": "4.0.9", + "@vitest/pretty-format": "4.0.9", + "@vitest/runner": "4.0.9", + "@vitest/snapshot": "4.0.9", + "@vitest/spy": "4.0.9", + "@vitest/utils": "4.0.9", "debug": "^4.4.3", "es-module-lexer": "^1.7.0", "expect-type": "^1.2.2", - "magic-string": "^0.30.19", + "magic-string": "^0.30.21", "pathe": "^2.0.3", "picomatch": "^4.0.3", - "std-env": "^3.9.0", + "std-env": "^3.10.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.15", @@ -3167,10 +3167,10 @@ "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "4.0.6", - "@vitest/browser-preview": "4.0.6", - "@vitest/browser-webdriverio": "4.0.6", - "@vitest/ui": "4.0.6", + "@vitest/browser-playwright": "4.0.9", + "@vitest/browser-preview": "4.0.9", + "@vitest/browser-webdriverio": "4.0.9", + "@vitest/ui": "4.0.9", "happy-dom": "*", "jsdom": "*" }, diff --git a/package.json b/package.json index 4c69a097..b3083137 100755 --- a/package.json +++ b/package.json @@ -20,22 +20,22 @@ "@dnd-kit/sortable": "^10.0.0", "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.1", - "@mui/icons-material": "^7.3.4", - "@mui/material": "^7.3.4", + "@mui/icons-material": "^7.3.5", + "@mui/material": "^7.3.5", "react": "^19.2.0", "react-dom": "^19.2.0", "tldts": "^7.0.17" }, "devDependencies": { - "@biomejs/biome": "^2.3.2", - "@types/chrome": "^0.1.27", - "@types/node": "^24.9.2", - "@types/react": "^19.2.2", - "@types/react-dom": "^19.2.2", - "@vitejs/plugin-react": "^5.1.0", + "@biomejs/biome": "^2.3.5", + "@types/chrome": "^0.1.29", + "@types/node": "^24.10.1", + "@types/react": "^19.2.5", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^5.1.1", "chromex-locale-lint": "^0.1.0", "typescript": "^5.9.3", - "vite": "^7.1.12", - "vitest": "^4.0.6" + "vite": "^7.2.2", + "vitest": "^4.0.9" } } diff --git a/src/background/index.ts b/src/background/index.ts deleted file mode 100644 index 81914cd4..00000000 --- a/src/background/index.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { addTabGroupingListeners } from "./AutoTabGrouping"; -import { addTabAccessesListener } from "./TabActivityTracker"; -import { activateTabCleanerScheduler } from "./TabCleanerScheduler"; -import { addToolBarActions } from "./ToolBarAction"; - -if (import.meta.env.DEV) { - chrome.action.setBadgeText({ text: "DEV" }); -} - -// TabActivityTracker -addTabAccessesListener(); - -// TabCleanerScheduler -activateTabCleanerScheduler(); - -// AutoTabGrouping -addTabGroupingListeners(); - -// ToolBarAction -addToolBarActions(); diff --git a/src/entrypoints/background.ts b/src/entrypoints/background.ts new file mode 100644 index 00000000..81788bfe --- /dev/null +++ b/src/entrypoints/background.ts @@ -0,0 +1,20 @@ +import { addTabGroupingListeners } from "../platform/background/AutoTabGrouping"; +import { addTabAccessesListener } from "../platform/background/TabActivityTracker"; +import { activateTabCleanerScheduler } from "../platform/background/TabCleanerScheduler"; +import { addToolBarActions } from "../platform/background/ToolBarAction"; + +if (import.meta.env.DEV) { + chrome.action.setBadgeText({ text: "DEV" }); +} + +// TabActivityTracker +addTabAccessesListener(); + +// TabCleanerScheduler +activateTabCleanerScheduler(); + +// AutoTabGrouping +addTabGroupingListeners(); + +// ToolBarAction +addToolBarActions(); diff --git a/src/presentation/views/options/index.tsx b/src/entrypoints/options.tsx similarity index 63% rename from src/presentation/views/options/index.tsx rename to src/entrypoints/options.tsx index c75c2291..0f17ec14 100644 --- a/src/presentation/views/options/index.tsx +++ b/src/entrypoints/options.tsx @@ -1,7 +1,7 @@ import { createRoot } from "react-dom/client"; -import App from "./App"; +import OptionsApp from "../ui/OptionsApp"; const app = document.getElementById("app"); const root = createRoot(app); -root.render(); +root.render(); diff --git a/src/presentation/views/popup/index.tsx b/src/entrypoints/popup.tsx similarity index 64% rename from src/presentation/views/popup/index.tsx rename to src/entrypoints/popup.tsx index c75c2291..0023399e 100644 --- a/src/presentation/views/popup/index.tsx +++ b/src/entrypoints/popup.tsx @@ -1,7 +1,6 @@ import { createRoot } from "react-dom/client"; - -import App from "./App"; +import PopupApp from "../ui/PopupApp"; const app = document.getElementById("app"); const root = createRoot(app); -root.render(); +root.render(); diff --git a/src/presentation/views/sidePanel/index.tsx b/src/entrypoints/sidePanel.tsx similarity index 61% rename from src/presentation/views/sidePanel/index.tsx rename to src/entrypoints/sidePanel.tsx index 66f538bb..ff6cf864 100644 --- a/src/presentation/views/sidePanel/index.tsx +++ b/src/entrypoints/sidePanel.tsx @@ -1,6 +1,6 @@ import { createRoot } from "react-dom/client"; -import App from "../popup/App"; +import PopupApp from "../ui/PopupApp"; const app = document.getElementById("app"); const root = createRoot(app); -root.render(); +root.render(); diff --git a/src/background/AutoTabGrouping.ts b/src/platform/background/AutoTabGrouping.ts similarity index 97% rename from src/background/AutoTabGrouping.ts rename to src/platform/background/AutoTabGrouping.ts index c2babea6..c208fdcb 100644 --- a/src/background/AutoTabGrouping.ts +++ b/src/platform/background/AutoTabGrouping.ts @@ -1,7 +1,7 @@ import { parse } from "tldts"; -import { sortGroupsAlphabetically } from "../data/repository/TabGroupRepository"; -import { getTabGroupSetting } from "../data/repository/TabGroupSettingRepository"; -import type { TabGroupSetting } from "../model/TabGroupSetting"; +import type { TabGroupSetting } from "../../model/TabGroupSetting"; +import { sortGroupsAlphabetically } from "../repository/TabGroupRepository"; +import { getTabGroupSetting } from "../repository/TabGroupSettingRepository"; export const addTabGroupingListeners = () => { chrome.tabs.onUpdated.addListener(onTabUpdated); diff --git a/src/background/TabActivityTracker.ts b/src/platform/background/TabActivityTracker.ts similarity index 93% rename from src/background/TabActivityTracker.ts rename to src/platform/background/TabActivityTracker.ts index 1dee72f8..3cd1c8c1 100644 --- a/src/background/TabActivityTracker.ts +++ b/src/platform/background/TabActivityTracker.ts @@ -2,7 +2,7 @@ import { cleanupTabLastActivatedAt, updateRecentActiveTabs, updateTabLastActivatedAt, -} from "../data/repository/TabsRepository"; +} from "../repository/TabsRepository"; export const addTabAccessesListener = () => { chrome.tabs.onCreated.addListener((tab) => { diff --git a/src/background/TabCleanerScheduler.ts b/src/platform/background/TabCleanerScheduler.ts similarity index 68% rename from src/background/TabCleanerScheduler.ts rename to src/platform/background/TabCleanerScheduler.ts index 746def0b..3884e7bc 100644 --- a/src/background/TabCleanerScheduler.ts +++ b/src/platform/background/TabCleanerScheduler.ts @@ -1,8 +1,8 @@ -import { getTabCleanerSetting } from "../data/repository/TabCleanerRepository"; -import { closeTab } from "../data/repository/TabsRepository"; -import { getWindows } from "../data/repository/WindowsRepository"; -import { shouldCleanUp } from "../model/TabCleaner"; -import { flatTabsInWindows } from "../model/Window"; +import { shouldCleanUp } from "../../model/TabCleaner"; +import { flatTabsInWindows } from "../../model/Window"; +import { getTabCleanerSetting } from "../repository/TabCleanerRepository"; +import { closeTab } from "../repository/TabsRepository"; +import { getWindows } from "../repository/WindowsRepository"; export const activateTabCleanerScheduler = async () => { const tabCleanerAlarmName = "tabCleanerAlarm"; diff --git a/src/background/ToolBarAction.ts b/src/platform/background/ToolBarAction.ts similarity index 80% rename from src/background/ToolBarAction.ts rename to src/platform/background/ToolBarAction.ts index 0a6ae3dc..2d35e44f 100644 --- a/src/background/ToolBarAction.ts +++ b/src/platform/background/ToolBarAction.ts @@ -1,14 +1,14 @@ +import t from "../../i18n/Translations"; import { getToolbarSetting, navigateToOptionsPage, -} from "../data/repository/SettingsRepository"; +} from "../repository/SettingsRepository"; import { getTabGroupSetting, groupTabsBySetting, -} from "../data/repository/TabGroupSettingRepository"; -import { setToolbarIconBehavior } from "../data/repository/ToolbarRepository"; -import { getWindows, saveWindow } from "../data/repository/WindowsRepository"; -import t from "../i18n/Translations"; +} from "../repository/TabGroupSettingRepository"; +import { setToolbarIconBehavior } from "../repository/ToolbarRepository"; +import { getWindows, saveWindow } from "../repository/WindowsRepository"; const saveCurrentWindowId = "saveCurrentWindow"; const groupTabsNowId = "groupTabsNow"; diff --git a/src/data/repository/SettingsRepository.ts b/src/platform/repository/SettingsRepository.ts similarity index 100% rename from src/data/repository/SettingsRepository.ts rename to src/platform/repository/SettingsRepository.ts diff --git a/src/data/repository/TabCleanerRepository.ts b/src/platform/repository/TabCleanerRepository.ts similarity index 100% rename from src/data/repository/TabCleanerRepository.ts rename to src/platform/repository/TabCleanerRepository.ts diff --git a/src/data/repository/TabGroupRepository.ts b/src/platform/repository/TabGroupRepository.ts similarity index 100% rename from src/data/repository/TabGroupRepository.ts rename to src/platform/repository/TabGroupRepository.ts diff --git a/src/data/repository/TabGroupSettingRepository.ts b/src/platform/repository/TabGroupSettingRepository.ts similarity index 100% rename from src/data/repository/TabGroupSettingRepository.ts rename to src/platform/repository/TabGroupSettingRepository.ts diff --git a/src/data/repository/TabsRepository.ts b/src/platform/repository/TabsRepository.ts similarity index 100% rename from src/data/repository/TabsRepository.ts rename to src/platform/repository/TabsRepository.ts diff --git a/src/data/repository/ThemeRepository.ts b/src/platform/repository/ThemeRepository.ts similarity index 100% rename from src/data/repository/ThemeRepository.ts rename to src/platform/repository/ThemeRepository.ts diff --git a/src/data/repository/ToolbarRepository.ts b/src/platform/repository/ToolbarRepository.ts similarity index 100% rename from src/data/repository/ToolbarRepository.ts rename to src/platform/repository/ToolbarRepository.ts diff --git a/src/data/repository/WindowsRepository.ts b/src/platform/repository/WindowsRepository.ts similarity index 100% rename from src/data/repository/WindowsRepository.ts rename to src/platform/repository/WindowsRepository.ts diff --git a/src/data/storage/ChromeLocalStorage.ts b/src/platform/storage/ChromeLocalStorage.ts similarity index 100% rename from src/data/storage/ChromeLocalStorage.ts rename to src/platform/storage/ChromeLocalStorage.ts diff --git a/src/data/storage/ChromeSessionStorage.ts b/src/platform/storage/ChromeSessionStorage.ts similarity index 100% rename from src/data/storage/ChromeSessionStorage.ts rename to src/platform/storage/ChromeSessionStorage.ts diff --git a/src/presentation/views/shared/components/TidyTabsPage/index.tsx b/src/presentation/views/shared/components/TidyTabsPage/index.tsx deleted file mode 100644 index add1af2e..00000000 --- a/src/presentation/views/shared/components/TidyTabsPage/index.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import Stack from "@mui/material/Stack"; -import TabCleanerSettingForm from "./TabCleanerForm"; -import TabGroupingForm from "./TabGroupingForm"; - -type TidyTabsPageProps = { - dense?: boolean; -}; - -const TidyTabsPage = (props: TidyTabsPageProps) => { - const { dense = false } = props; - - return ( - - - - - ); -}; - -export default TidyTabsPage; diff --git a/src/presentation/views/options/App.tsx b/src/ui/OptionsApp.tsx similarity index 73% rename from src/presentation/views/options/App.tsx rename to src/ui/OptionsApp.tsx index 4d370b42..810972b0 100644 --- a/src/presentation/views/options/App.tsx +++ b/src/ui/OptionsApp.tsx @@ -4,16 +4,16 @@ import { createTheme } from "@mui/material/styles"; import useMediaQuery from "@mui/material/useMediaQuery"; import type React from "react"; import { useContext } from "react"; -import { ModeContext, ModeProvider } from "../../contexts/ModeContext"; +import { ModeContext, ModeProvider } from "./contexts/ModeContext"; import { ThemeColorContext, ThemeColorProvider, -} from "../../contexts/ThemeColorContext"; -import { WindowsProvider } from "../../contexts/WindowsContext"; -import { tabGroupColorPalette } from "../shared/resources/tabGroupColorPalette"; -import { themeColorPaletteBy } from "../shared/resources/themeColorPalette"; -import Header from "./Header"; -import Overview from "./Overview"; +} from "./contexts/ThemeColorContext"; +import { WindowsProvider } from "./contexts/WindowsContext"; +import Header from "./options/Header"; +import Overview from "./options/Overview"; +import { tabGroupColorPalette } from "./resources/tabGroupColorPalette"; +import { themeColorPaletteBy } from "./resources/themeColorPalette"; const MuiThemeProvider = ({ children }: { children: React.ReactNode }) => { const { mode } = useContext(ModeContext); @@ -32,7 +32,7 @@ const MuiThemeProvider = ({ children }: { children: React.ReactNode }) => { return {children}; }; -const App = () => { +const OptionsApp = () => { return ( @@ -49,4 +49,4 @@ const App = () => { ); }; -export default App; +export default OptionsApp; diff --git a/src/presentation/views/popup/App.tsx b/src/ui/PopupApp.tsx similarity index 68% rename from src/presentation/views/popup/App.tsx rename to src/ui/PopupApp.tsx index 9438c37e..6433442f 100644 --- a/src/presentation/views/popup/App.tsx +++ b/src/ui/PopupApp.tsx @@ -1,12 +1,12 @@ import CssBaseline from "@mui/material/CssBaseline"; import { useEffect } from "react"; -import { ModeProvider } from "../../contexts/ModeContext"; -import { ThemeColorProvider } from "../../contexts/ThemeColorContext"; -import { WindowsProvider } from "../../contexts/WindowsContext"; -import Home from "./components/Home"; -import MuiThemeProvider from "./components/MuiThemeProvider"; +import { ModeProvider } from "./contexts/ModeContext"; +import { ThemeColorProvider } from "./contexts/ThemeColorContext"; +import { WindowsProvider } from "./contexts/WindowsContext"; +import Home from "./popup/Home"; +import MuiThemeProvider from "./popup/MuiThemeProvider"; -const App = ({ sidePanel = false }) => { +const PopupApp = ({ sidePanel = false }) => { useEffect(() => { if (sidePanel) return; @@ -35,4 +35,4 @@ const App = ({ sidePanel = false }) => { ); }; -export default App; +export default PopupApp; diff --git a/src/presentation/views/shared/components/ActionMenu.tsx b/src/ui/components/ActionMenu.tsx similarity index 96% rename from src/presentation/views/shared/components/ActionMenu.tsx rename to src/ui/components/ActionMenu.tsx index 39dd194a..017912d9 100644 --- a/src/presentation/views/shared/components/ActionMenu.tsx +++ b/src/ui/components/ActionMenu.tsx @@ -24,17 +24,25 @@ import Menu from "@mui/material/Menu"; import MenuItem from "@mui/material/MenuItem"; import SvgIcon from "@mui/material/SvgIcon"; import type React from "react"; +import t from "../../i18n/Translations"; +import type { Tab } from "../../model/Tab"; +import type { + Pinned, + StoredTabGroup, + TabGroup, +} from "../../model/TabContainer"; +import type { StoredWindow, Window } from "../../model/Window"; import { navigateToOptionsPage, openSidePanel, -} from "../../../../data/repository/SettingsRepository"; +} from "../../platform/repository/SettingsRepository"; import { closeTabGroup, removeStoredTabGroup, restoreTabGroup, saveTabGroup, ungroup, -} from "../../../../data/repository/TabGroupRepository"; +} from "../../platform/repository/TabGroupRepository"; import { addTabToNewGroup, closeTabs, @@ -48,23 +56,15 @@ import { screenshotVisibleArea, unpinAllTabs, unpinTab, -} from "../../../../data/repository/TabsRepository"; +} from "../../platform/repository/TabsRepository"; import { closeWindow, removeStoredWindow, restoreWindow, saveWindow, saveWindows, -} from "../../../../data/repository/WindowsRepository"; -import t from "../../../../i18n/Translations"; -import type { Tab } from "../../../../model/Tab"; -import type { - Pinned, - StoredTabGroup, - TabGroup, -} from "../../../../model/TabContainer"; -import type { StoredWindow, Window } from "../../../../model/Window"; -import mergeWindow from "../../../functions/mergeWindow"; +} from "../../platform/repository/WindowsRepository"; +import mergeWindow from "../functions/mergeWindow"; type ActionMenuItemAttrs = | { diff --git a/src/presentation/views/shared/components/DragAndDropContext.tsx b/src/ui/components/DragAndDropContext.tsx similarity index 96% rename from src/presentation/views/shared/components/DragAndDropContext.tsx rename to src/ui/components/DragAndDropContext.tsx index a7c21b21..0cd74f76 100644 --- a/src/presentation/views/shared/components/DragAndDropContext.tsx +++ b/src/ui/components/DragAndDropContext.tsx @@ -20,22 +20,7 @@ import type { RectMap } from "@dnd-kit/core/dist/store/types"; import type { Coordinates } from "@dnd-kit/core/dist/types"; import type { SortableData } from "@dnd-kit/sortable"; import { useCallback, useContext, useMemo, useRef, useState } from "react"; -import { - addTabToTabGroup, - moveTabGroup, - moveTabGroupToOtherWindow, -} from "../../../../data/repository/TabGroupRepository"; -import { - moveTab, - moveTabOutOfGroup, - moveTabToOtherWindow, - unpinTab, -} from "../../../../data/repository/TabsRepository"; -import { - addWindowWithTab, - addWindowWithTabGroup, -} from "../../../../data/repository/WindowsRepository"; -import type { Tab } from "../../../../model/Tab"; +import type { Tab } from "../../model/Tab"; import { isPinned, isPinnedId, @@ -43,7 +28,7 @@ import { isTabContainer, isTabGroup, type TabGroup, -} from "../../../../model/TabContainer"; +} from "../../model/TabContainer"; import { findParentContainer, findWindow, @@ -51,10 +36,25 @@ import { indexOfWindowChild, moveTabOrTabGroup, type Window, -} from "../../../../model/Window"; -import { WindowsContext } from "../../../contexts/WindowsContext"; -import moveTabFromPinnedToPinned from "../../../functions/moveTabFromPinnedToPinned"; -import moveTabFromRootToPinned from "../../../functions/moveTabFromRootToPinned"; +} from "../../model/Window"; +import { + addTabToTabGroup, + moveTabGroup, + moveTabGroupToOtherWindow, +} from "../../platform/repository/TabGroupRepository"; +import { + moveTab, + moveTabOutOfGroup, + moveTabToOtherWindow, + unpinTab, +} from "../../platform/repository/TabsRepository"; +import { + addWindowWithTab, + addWindowWithTabGroup, +} from "../../platform/repository/WindowsRepository"; +import { WindowsContext } from "../contexts/WindowsContext"; +import moveTabFromPinnedToPinned from "../functions/moveTabFromPinnedToPinned"; +import moveTabFromRootToPinned from "../functions/moveTabFromRootToPinned"; import TabGroupContainer from "./TabGroupContainer"; import TabItem from "./TabItem"; diff --git a/src/presentation/views/shared/components/PaperWithHeader.tsx b/src/ui/components/PaperWithHeader.tsx similarity index 100% rename from src/presentation/views/shared/components/PaperWithHeader.tsx rename to src/ui/components/PaperWithHeader.tsx diff --git a/src/presentation/views/shared/components/PinnedContainer.tsx b/src/ui/components/PinnedContainer.tsx similarity index 95% rename from src/presentation/views/shared/components/PinnedContainer.tsx rename to src/ui/components/PinnedContainer.tsx index e87bd300..4ce7a993 100644 --- a/src/presentation/views/shared/components/PinnedContainer.tsx +++ b/src/ui/components/PinnedContainer.tsx @@ -15,14 +15,14 @@ import ListItemText from "@mui/material/ListItemText"; import Stack from "@mui/material/Stack"; import Typography from "@mui/material/Typography"; import { useContext, useState } from "react"; -import t from "../../../../i18n/Translations"; +import t from "../../i18n/Translations"; import { adjacentToTabContainerAfter, adjacentToTabContainerBefore, type Pinned, -} from "../../../../model/TabContainer"; -import type { WindowId } from "../../../../model/Window"; -import { WindowsContext } from "../../../contexts/WindowsContext"; +} from "../../model/TabContainer"; +import type { WindowId } from "../../model/Window"; +import { WindowsContext } from "../contexts/WindowsContext"; import { PinnedActionMenu } from "./ActionMenu"; type PinnedContainerProps = { diff --git a/src/presentation/views/shared/components/SortableItem.tsx b/src/ui/components/SortableItem.tsx similarity index 94% rename from src/presentation/views/shared/components/SortableItem.tsx rename to src/ui/components/SortableItem.tsx index 9b578568..508ddf2f 100644 --- a/src/presentation/views/shared/components/SortableItem.tsx +++ b/src/ui/components/SortableItem.tsx @@ -1,6 +1,6 @@ import { useSortable } from "@dnd-kit/sortable"; import { CSS } from "@dnd-kit/utilities"; -import type { WindowId } from "../../../../model/Window"; +import type { WindowId } from "../../model/Window"; type SortableItemProps = { id: string; diff --git a/src/presentation/views/shared/components/SortableTabs.tsx b/src/ui/components/SortableTabs.tsx similarity index 94% rename from src/presentation/views/shared/components/SortableTabs.tsx rename to src/ui/components/SortableTabs.tsx index 5aac04ce..da7dace2 100644 --- a/src/presentation/views/shared/components/SortableTabs.tsx +++ b/src/ui/components/SortableTabs.tsx @@ -2,7 +2,7 @@ import { SortableContext, verticalListSortingStrategy, } from "@dnd-kit/sortable"; -import type { Tab } from "../../../../model/Tab"; +import type { Tab } from "../../model/Tab"; import SortableItem from "./SortableItem"; import TabItem from "./TabItem"; diff --git a/src/presentation/views/shared/components/TabFavicon.tsx b/src/ui/components/TabFavicon.tsx similarity index 100% rename from src/presentation/views/shared/components/TabFavicon.tsx rename to src/ui/components/TabFavicon.tsx diff --git a/src/presentation/views/shared/components/TabGroupColorRadio.tsx b/src/ui/components/TabGroupColorRadio.tsx similarity index 92% rename from src/presentation/views/shared/components/TabGroupColorRadio.tsx rename to src/ui/components/TabGroupColorRadio.tsx index ac10c913..5199a32c 100644 --- a/src/presentation/views/shared/components/TabGroupColorRadio.tsx +++ b/src/ui/components/TabGroupColorRadio.tsx @@ -1,7 +1,7 @@ import CircleIcon from "@mui/icons-material/Circle"; import Radio from "@mui/material/Radio"; import { useTheme } from "@mui/material/styles"; -import type { TabGroupColor } from "../../../../model/TabContainer"; +import type { TabGroupColor } from "../../model/TabContainer"; type TabGroupColorRadioProps = { color: TabGroupColor; diff --git a/src/presentation/views/shared/components/TabGroupContainer.tsx b/src/ui/components/TabGroupContainer.tsx similarity index 98% rename from src/presentation/views/shared/components/TabGroupContainer.tsx rename to src/ui/components/TabGroupContainer.tsx index 3ab378ee..ec3790d1 100644 --- a/src/presentation/views/shared/components/TabGroupContainer.tsx +++ b/src/ui/components/TabGroupContainer.tsx @@ -16,19 +16,19 @@ import { useTheme } from "@mui/material/styles"; import TextField from "@mui/material/TextField"; import Typography from "@mui/material/Typography"; import { useContext, useEffect, useRef, useState } from "react"; -import { - collapseTabGroup, - expandTabGroup, - updateTabGroupColor, - updateTabGroupTitle, -} from "../../../../data/repository/TabGroupRepository"; import { adjacentToTabContainerAfter, adjacentToTabContainerBefore, type TabGroup, tabGroupColors, -} from "../../../../model/TabContainer"; -import { WindowsContext } from "../../../contexts/WindowsContext"; +} from "../../model/TabContainer"; +import { + collapseTabGroup, + expandTabGroup, + updateTabGroupColor, + updateTabGroupTitle, +} from "../../platform/repository/TabGroupRepository"; +import { WindowsContext } from "../contexts/WindowsContext"; import { TabGroupActionMenu } from "./ActionMenu"; import TabGroupColorRadio from "./TabGroupColorRadio"; diff --git a/src/presentation/views/shared/components/TabItem.tsx b/src/ui/components/TabItem.tsx similarity index 95% rename from src/presentation/views/shared/components/TabItem.tsx rename to src/ui/components/TabItem.tsx index 3cb601af..682546c2 100644 --- a/src/presentation/views/shared/components/TabItem.tsx +++ b/src/ui/components/TabItem.tsx @@ -15,22 +15,22 @@ import Stack from "@mui/material/Stack"; import { useTheme } from "@mui/material/styles"; import Typography from "@mui/material/Typography"; import { forwardRef, useContext, useState } from "react"; -import { closeTab, focusTab } from "../../../../data/repository/TabsRepository"; -import t from "../../../../i18n/Translations"; -import { durationSinceLastActivatedAt, type Tab } from "../../../../model/Tab"; +import t from "../../i18n/Translations"; +import { durationSinceLastActivatedAt, type Tab } from "../../model/Tab"; import { isPinned, isTabGroup, type TabContainer, -} from "../../../../model/TabContainer"; +} from "../../model/TabContainer"; import { findParentContainer, findTabGroup, hasDuplicatedTabs, type Window, -} from "../../../../model/Window"; -import { WindowsContext } from "../../../contexts/WindowsContext"; -import resolveDuplicatedTabs from "../../../functions/resolveDuplicatedTabs"; +} from "../../model/Window"; +import { closeTab, focusTab } from "../../platform/repository/TabsRepository"; +import { WindowsContext } from "../contexts/WindowsContext"; +import resolveDuplicatedTabs from "../functions/resolveDuplicatedTabs"; import { TabItemActionMenu } from "./ActionMenu"; import TabFavicon from "./TabFavicon"; diff --git a/src/presentation/views/shared/components/TabList.tsx b/src/ui/components/TabList.tsx similarity index 91% rename from src/presentation/views/shared/components/TabList.tsx rename to src/ui/components/TabList.tsx index 78418f33..ff0824c7 100644 --- a/src/presentation/views/shared/components/TabList.tsx +++ b/src/ui/components/TabList.tsx @@ -4,10 +4,10 @@ import { } from "@dnd-kit/sortable"; import List from "@mui/material/List"; import { memo, useContext, useState } from "react"; -import type { Tab } from "../../../../model/Tab"; -import { isPinned, isTabGroup } from "../../../../model/TabContainer"; -import type { WindowChild } from "../../../../model/Window"; -import { WindowsContext } from "../../../contexts/WindowsContext"; +import type { Tab } from "../../model/Tab"; +import { isPinned, isTabGroup } from "../../model/TabContainer"; +import type { WindowChild } from "../../model/Window"; +import { WindowsContext } from "../contexts/WindowsContext"; import PinnedContainer from "./PinnedContainer"; import SortableItem from "./SortableItem"; import SortableTabs from "./SortableTabs"; diff --git a/src/presentation/contexts/ModeContext.tsx b/src/ui/contexts/ModeContext.tsx similarity index 94% rename from src/presentation/contexts/ModeContext.tsx rename to src/ui/contexts/ModeContext.tsx index 3b3229ab..1b42a069 100644 --- a/src/presentation/contexts/ModeContext.tsx +++ b/src/ui/contexts/ModeContext.tsx @@ -1,10 +1,10 @@ import { createContext, useEffect, useState } from "react"; +import type { Mode } from "../../model/Theme"; import { addListenerOnChangeMode, getMode, removeListenerOnChangeMode, -} from "../../data/repository/ThemeRepository"; -import type { Mode } from "../../model/Theme"; +} from "../../platform/repository/ThemeRepository"; type ModeContextType = { mode: Mode; diff --git a/src/presentation/contexts/StoredTabGroupsContext.tsx b/src/ui/contexts/StoredTabGroupsContext.tsx similarity index 95% rename from src/presentation/contexts/StoredTabGroupsContext.tsx rename to src/ui/contexts/StoredTabGroupsContext.tsx index e7c6bc84..6a88a40f 100644 --- a/src/presentation/contexts/StoredTabGroupsContext.tsx +++ b/src/ui/contexts/StoredTabGroupsContext.tsx @@ -1,11 +1,11 @@ import { createContext, useEffect, useState } from "react"; +import { type AsyncState, initialState } from "../../model/AsyncState"; +import type { StoredTabGroup } from "../../model/TabContainer"; import { addListenerOnChangeStoredTabGroups, getStoredTabGroups, removeListenerOnChangeStoredTabGroups, -} from "../../data/repository/TabGroupRepository"; -import { type AsyncState, initialState } from "../../model/AsyncState"; -import type { StoredTabGroup } from "../../model/TabContainer"; +} from "../../platform/repository/TabGroupRepository"; import useAsync from "../hooks/useAsync"; export const StoredTabGroupsContext = diff --git a/src/presentation/contexts/StoredWindowsContext.tsx b/src/ui/contexts/StoredWindowsContext.tsx similarity index 95% rename from src/presentation/contexts/StoredWindowsContext.tsx rename to src/ui/contexts/StoredWindowsContext.tsx index 0b880f91..f91607b8 100644 --- a/src/presentation/contexts/StoredWindowsContext.tsx +++ b/src/ui/contexts/StoredWindowsContext.tsx @@ -1,11 +1,11 @@ import { createContext, useEffect, useState } from "react"; +import { type AsyncState, initialState } from "../../model/AsyncState"; +import type { StoredWindow } from "../../model/Window"; import { addListenerOnChangeStoredWindows, getStoredWindows, removeListenerOnChangeStoredWindows, -} from "../../data/repository/WindowsRepository"; -import { type AsyncState, initialState } from "../../model/AsyncState"; -import type { StoredWindow } from "../../model/Window"; +} from "../../platform/repository/WindowsRepository"; import useAsync from "../hooks/useAsync"; export const StoredWindowsContext = diff --git a/src/presentation/contexts/ThemeColorContext.tsx b/src/ui/contexts/ThemeColorContext.tsx similarity index 95% rename from src/presentation/contexts/ThemeColorContext.tsx rename to src/ui/contexts/ThemeColorContext.tsx index 993fe0fc..0e2ca885 100644 --- a/src/presentation/contexts/ThemeColorContext.tsx +++ b/src/ui/contexts/ThemeColorContext.tsx @@ -1,10 +1,10 @@ import { createContext, useEffect, useState } from "react"; +import { defaultThemeColor, type ThemeColor } from "../../model/Theme"; import { addListenerOnChangeThemeColor, getThemeColor, removeListenerOnChangeThemeColor, -} from "../../data/repository/ThemeRepository"; -import { defaultThemeColor, type ThemeColor } from "../../model/Theme"; +} from "../../platform/repository/ThemeRepository"; type ThemeColorContextType = { themeColor: ThemeColor; diff --git a/src/presentation/contexts/WindowsContext.tsx b/src/ui/contexts/WindowsContext.tsx similarity index 91% rename from src/presentation/contexts/WindowsContext.tsx rename to src/ui/contexts/WindowsContext.tsx index 328ff243..fe47e11f 100644 --- a/src/presentation/contexts/WindowsContext.tsx +++ b/src/ui/contexts/WindowsContext.tsx @@ -1,10 +1,10 @@ import { createContext, useCallback, useEffect, useState } from "react"; +import type { Window } from "../../model/Window"; import { addListenerOnChangeTabs, removeListenerOnChangeTabs, -} from "../../data/repository/TabsRepository"; -import { getWindows } from "../../data/repository/WindowsRepository"; -import type { Window } from "../../model/Window"; +} from "../../platform/repository/TabsRepository"; +import { getWindows } from "../../platform/repository/WindowsRepository"; type WindowsContextType = { windows: Window[]; diff --git a/src/presentation/functions/groupTabsBySearchKeyword.ts b/src/ui/functions/groupTabsBySearchKeyword.ts similarity index 80% rename from src/presentation/functions/groupTabsBySearchKeyword.ts rename to src/ui/functions/groupTabsBySearchKeyword.ts index 2982b7a3..e293eaa1 100644 --- a/src/presentation/functions/groupTabsBySearchKeyword.ts +++ b/src/ui/functions/groupTabsBySearchKeyword.ts @@ -1,10 +1,10 @@ -import { createGroupWithTabs } from "../../data/repository/TabGroupRepository"; -import { addTabsToGroup } from "../../data/repository/TabsRepository"; import { findGroupsByName, flatTabsInWindows, type Window, } from "../../model/Window"; +import { createGroupWithTabs } from "../../platform/repository/TabGroupRepository"; +import { addTabsToGroup } from "../../platform/repository/TabsRepository"; const groupTabsBySearchKeyword = async ( keyword: string, diff --git a/src/presentation/functions/mergeWindow.ts b/src/ui/functions/mergeWindow.ts similarity index 80% rename from src/presentation/functions/mergeWindow.ts rename to src/ui/functions/mergeWindow.ts index 74eddebb..8ab84a7b 100644 --- a/src/presentation/functions/mergeWindow.ts +++ b/src/ui/functions/mergeWindow.ts @@ -1,7 +1,7 @@ -import { moveTabGroup } from "../../data/repository/TabGroupRepository"; -import { moveTab, pinTab } from "../../data/repository/TabsRepository"; import { isPinned, isTab, isTabGroup } from "../../model/TabContainer"; import type { Window } from "../../model/Window"; +import { moveTabGroup } from "../../platform/repository/TabGroupRepository"; +import { moveTab, pinTab } from "../../platform/repository/TabsRepository"; const mergeWindow = async (destWindowId: number, sourceWindow: Window) => { for (const child of sourceWindow.children) { diff --git a/src/presentation/functions/moveTabFromPinnedToPinned.ts b/src/ui/functions/moveTabFromPinnedToPinned.ts similarity index 84% rename from src/presentation/functions/moveTabFromPinnedToPinned.ts rename to src/ui/functions/moveTabFromPinnedToPinned.ts index b59e30f0..cd733cb1 100644 --- a/src/presentation/functions/moveTabFromPinnedToPinned.ts +++ b/src/ui/functions/moveTabFromPinnedToPinned.ts @@ -1,4 +1,4 @@ -import { moveTab, pinTab } from "../../data/repository/TabsRepository"; +import { moveTab, pinTab } from "../../platform/repository/TabsRepository"; const moveTabFromPinnedToPinned = async ( tabId: number, diff --git a/src/presentation/functions/moveTabFromRootToPinned.ts b/src/ui/functions/moveTabFromRootToPinned.ts similarity index 76% rename from src/presentation/functions/moveTabFromRootToPinned.ts rename to src/ui/functions/moveTabFromRootToPinned.ts index 71e4e97d..91b2097c 100644 --- a/src/presentation/functions/moveTabFromRootToPinned.ts +++ b/src/ui/functions/moveTabFromRootToPinned.ts @@ -1,4 +1,4 @@ -import { moveTab, pinTab } from "../../data/repository/TabsRepository"; +import { moveTab, pinTab } from "../../platform/repository/TabsRepository"; const moveTabFromRootToPinned = async ( tabId: number, diff --git a/src/presentation/functions/resolveDuplicatedTabs.ts b/src/ui/functions/resolveDuplicatedTabs.ts similarity index 87% rename from src/presentation/functions/resolveDuplicatedTabs.ts rename to src/ui/functions/resolveDuplicatedTabs.ts index 28ddd40f..37e55b4b 100644 --- a/src/presentation/functions/resolveDuplicatedTabs.ts +++ b/src/ui/functions/resolveDuplicatedTabs.ts @@ -1,6 +1,6 @@ -import { closeTabs } from "../../data/repository/TabsRepository"; import { isSamePageTabs, type Tab } from "../../model/Tab"; import { flatTabsInWindows, type Window } from "../../model/Window"; +import { closeTabs } from "../../platform/repository/TabsRepository"; const resolveDuplicatedTabs = async (windows: Window[], targetTab: Tab) => { const allTabs = flatTabsInWindows(windows); diff --git a/src/presentation/hooks/useAsync.ts b/src/ui/hooks/useAsync.ts similarity index 100% rename from src/presentation/hooks/useAsync.ts rename to src/ui/hooks/useAsync.ts diff --git a/src/presentation/hooks/useDebounce.ts b/src/ui/hooks/useDebounce.ts similarity index 100% rename from src/presentation/hooks/useDebounce.ts rename to src/ui/hooks/useDebounce.ts diff --git a/src/presentation/views/options/Header.tsx b/src/ui/options/Header.tsx similarity index 100% rename from src/presentation/views/options/Header.tsx rename to src/ui/options/Header.tsx diff --git a/src/presentation/views/options/Overview.tsx b/src/ui/options/Overview.tsx similarity index 90% rename from src/presentation/views/options/Overview.tsx rename to src/ui/options/Overview.tsx index b8ceb1a7..ca434dac 100644 --- a/src/presentation/views/options/Overview.tsx +++ b/src/ui/options/Overview.tsx @@ -11,16 +11,16 @@ import Stack from "@mui/material/Stack"; import { alpha, useTheme } from "@mui/material/styles"; import Typography from "@mui/material/Typography"; import { useContext, useState } from "react"; -import { addWindow } from "../../../data/repository/WindowsRepository"; -import t from "../../../i18n/Translations"; -import { flatTabsInWindow, type Window } from "../../../model/Window"; -import { WindowsContext } from "../../contexts/WindowsContext"; -import { WindowActionMenu } from "../shared/components/ActionMenu"; +import t from "../../i18n/Translations"; +import { flatTabsInWindow, type Window } from "../../model/Window"; +import { addWindow } from "../../platform/repository/WindowsRepository"; +import { WindowActionMenu } from "../components/ActionMenu"; import DragAndDropContext, { DROPPABLE_EMPTY_WINDOW_COLUMN_ID, DROPPABLE_WINDOW_COLUMN_ID_PREFIX, -} from "../shared/components/DragAndDropContext"; -import TabList from "../shared/components/TabList"; +} from "../components/DragAndDropContext"; +import TabList from "../components/TabList"; +import { WindowsContext } from "../contexts/WindowsContext"; type WindowColumnProps = { windows: Window[]; diff --git a/src/presentation/views/options/TabSearchForm.tsx b/src/ui/options/TabSearchForm.tsx similarity index 97% rename from src/presentation/views/options/TabSearchForm.tsx rename to src/ui/options/TabSearchForm.tsx index 958a38ad..3362bd30 100644 --- a/src/presentation/views/options/TabSearchForm.tsx +++ b/src/ui/options/TabSearchForm.tsx @@ -18,16 +18,16 @@ import TextField from "@mui/material/TextField"; import Tooltip from "@mui/material/Tooltip"; import Typography from "@mui/material/Typography"; import { useCallback, useContext, useEffect, useRef, useState } from "react"; +import t from "../../i18n/Translations"; +import type { Tab } from "../../model/Tab"; +import { findTabsByTitleOrUrl } from "../../model/Window"; import { focusTab, getRecentActiveTabs, -} from "../../../data/repository/TabsRepository"; -import t from "../../../i18n/Translations"; -import type { Tab } from "../../../model/Tab"; -import { findTabsByTitleOrUrl } from "../../../model/Window"; -import { WindowsContext, WindowsProvider } from "../../contexts/WindowsContext"; -import groupTabsBySearchKeyword from "../../functions/groupTabsBySearchKeyword"; -import TabItem from "../shared/components/TabItem"; +} from "../../platform/repository/TabsRepository"; +import TabItem from "../components/TabItem"; +import { WindowsContext, WindowsProvider } from "../contexts/WindowsContext"; +import groupTabsBySearchKeyword from "../functions/groupTabsBySearchKeyword"; const smoothScrollTo = (container: HTMLElement, targetScrollTop: number) => { const startScrollTop = container.scrollTop; diff --git a/src/presentation/views/popup/components/Header.tsx b/src/ui/popup/Header.tsx similarity index 95% rename from src/presentation/views/popup/components/Header.tsx rename to src/ui/popup/Header.tsx index 4dcbfdeb..fa902fad 100644 --- a/src/presentation/views/popup/components/Header.tsx +++ b/src/ui/popup/Header.tsx @@ -13,8 +13,8 @@ import { alpha, styled } from "@mui/material/styles"; import Toolbar from "@mui/material/Toolbar"; import Typography from "@mui/material/Typography"; import { useState } from "react"; -import t from "../../../../i18n/Translations"; -import { PopupHeaderActionMenu } from "../../shared/components/ActionMenu"; +import t from "../../i18n/Translations"; +import { PopupHeaderActionMenu } from "../components/ActionMenu"; import type { PopupPage } from "./Home"; type HeaderProps = { @@ -38,7 +38,7 @@ const Search = styled("div")(({ theme }) => ({ })); const SearchIconWrapper = styled("div")(({ theme }) => ({ - padding: theme.spacing(0, 2), + padding: theme.spacing(0, 1), height: "100%", position: "absolute", pointerEvents: "none", @@ -51,7 +51,7 @@ const StyledInputBase = styled(InputBase)(({ theme }) => ({ color: "inherit", "& .MuiInputBase-input": { padding: theme.spacing(1, 1, 1, 0), - paddingLeft: `calc(1em + ${theme.spacing(4)})`, + paddingLeft: `calc(1em + ${theme.spacing(3)})`, transition: theme.transitions.create("width"), width: "100%", }, diff --git a/src/presentation/views/popup/components/Home.tsx b/src/ui/popup/Home.tsx similarity index 80% rename from src/presentation/views/popup/components/Home.tsx rename to src/ui/popup/Home.tsx index c0ba3f85..2b72fc79 100644 --- a/src/presentation/views/popup/components/Home.tsx +++ b/src/ui/popup/Home.tsx @@ -1,12 +1,12 @@ import Box from "@mui/material/Box"; import { useEffect, useState } from "react"; -import { getPopupSizeSetting } from "../../../../data/repository/SettingsRepository"; -import { defaultPopupSize, type PopupSize } from "../../../../model/PopupSize"; -import SaveAndRestorePage from "../../shared/components/SaveAndRestorePage"; -import SettingsPage from "../../shared/components/SettingsPage"; -import TidyTabsPage from "../../shared/components/TidyTabsPage"; +import { defaultPopupSize, type PopupSize } from "../../model/PopupSize"; +import { getPopupSizeSetting } from "../../platform/repository/SettingsRepository"; import Header from "./Header"; +import SaveAndRestorePage from "./SaveAndRestorePage"; import SearchResult from "./SearchResult"; +import SettingsPage from "./SettingsPage"; +import TidyTabsPage from "./TidyTabsPage"; import WindowsContainer from "./WindowsContainer"; export type PopupPage = "root" | "saveAndRestore" | "tidyTabs" | "settings"; @@ -55,12 +55,12 @@ const Home = (props: HomeProps) => { )} {searchText.length === 0 && currentPage === "saveAndRestore" && ( - + )} {searchText.length === 0 && currentPage === "tidyTabs" && ( - + )} {searchText.length === 0 && currentPage === "settings" && ( diff --git a/src/presentation/views/popup/components/MuiThemeProvider.tsx b/src/ui/popup/MuiThemeProvider.tsx similarity index 84% rename from src/presentation/views/popup/components/MuiThemeProvider.tsx rename to src/ui/popup/MuiThemeProvider.tsx index e9867531..5853ec7b 100644 --- a/src/presentation/views/popup/components/MuiThemeProvider.tsx +++ b/src/ui/popup/MuiThemeProvider.tsx @@ -2,10 +2,10 @@ import { ThemeProvider } from "@emotion/react"; import { createTheme } from "@mui/material/styles"; import useMediaQuery from "@mui/material/useMediaQuery"; import { useContext, useMemo } from "react"; -import { ModeContext } from "../../../contexts/ModeContext"; -import { ThemeColorContext } from "../../../contexts/ThemeColorContext"; -import { tabGroupColorPalette } from "../../shared/resources/tabGroupColorPalette"; -import { themeColorPaletteBy } from "../../shared/resources/themeColorPalette"; +import { ModeContext } from "../contexts/ModeContext"; +import { ThemeColorContext } from "../contexts/ThemeColorContext"; +import { tabGroupColorPalette } from "../resources/tabGroupColorPalette"; +import { themeColorPaletteBy } from "../resources/themeColorPalette"; type MuiThemeProviderProps = { children: React.ReactNode; @@ -56,7 +56,8 @@ const MuiThemeProvider = (props: MuiThemeProviderProps) => { MuiToolbar: { styleOverrides: { root: { - minHeight: 42, + minHeight: 48, + padding: 8, }, }, }, diff --git a/src/presentation/views/shared/components/SaveAndRestorePage/AddTabFrom.tsx b/src/ui/popup/SaveAndRestorePage/AddTabFrom.tsx similarity index 96% rename from src/presentation/views/shared/components/SaveAndRestorePage/AddTabFrom.tsx rename to src/ui/popup/SaveAndRestorePage/AddTabFrom.tsx index 6ec4b2ed..e3b34514 100644 --- a/src/presentation/views/shared/components/SaveAndRestorePage/AddTabFrom.tsx +++ b/src/ui/popup/SaveAndRestorePage/AddTabFrom.tsx @@ -3,9 +3,9 @@ import CircularProgress from "@mui/material/CircularProgress"; import Stack from "@mui/material/Stack"; import TextField from "@mui/material/TextField"; import { forwardRef, useCallback, useEffect, useState } from "react"; -import t from "../../../../../i18n/Translations"; -import useDebounce from "../../../../hooks/useDebounce"; -import TabFavicon from "../TabFavicon"; +import t from "../../../i18n/Translations"; +import TabFavicon from "../../components/TabFavicon"; +import useDebounce from "../../hooks/useDebounce"; type AddTabFormProps = { onComplete: (data: { diff --git a/src/presentation/views/shared/components/SaveAndRestorePage/StoredTabGroups.tsx b/src/ui/popup/SaveAndRestorePage/StoredTabGroups.tsx similarity index 93% rename from src/presentation/views/shared/components/SaveAndRestorePage/StoredTabGroups.tsx rename to src/ui/popup/SaveAndRestorePage/StoredTabGroups.tsx index 436ad657..5bfd8c37 100644 --- a/src/presentation/views/shared/components/SaveAndRestorePage/StoredTabGroups.tsx +++ b/src/ui/popup/SaveAndRestorePage/StoredTabGroups.tsx @@ -17,31 +17,27 @@ import { alpha, styled, useTheme } from "@mui/material/styles"; import TextField from "@mui/material/TextField"; import Typography from "@mui/material/Typography"; import { useContext, useEffect, useRef, useState } from "react"; +import t from "../../../i18n/Translations"; +import { isLoading } from "../../../model/AsyncState"; +import { + type StoredTabGroup, + tabGroupColors, +} from "../../../model/TabContainer"; import { addTabToSavedGroup, removeTabFromStoredTabGroup, updateStoredTabGroupColor, updateStoredTabGroupName, -} from "../../../../../data/repository/TabGroupRepository"; -import t from "../../../../../i18n/Translations"; -import { isLoading } from "../../../../../model/AsyncState"; -import { - type StoredTabGroup, - tabGroupColors, -} from "../../../../../model/TabContainer"; -import { StoredTabGroupsContext } from "../../../../contexts/StoredTabGroupsContext"; -import { StoredTabGroupActionMenu } from "../ActionMenu"; -import TabGroupColorRadio from "../TabGroupColorRadio"; +} from "../../../platform/repository/TabGroupRepository"; +import { StoredTabGroupActionMenu } from "../../components/ActionMenu"; +import TabGroupColorRadio from "../../components/TabGroupColorRadio"; +import { StoredTabGroupsContext } from "../../contexts/StoredTabGroupsContext"; import AddTabForm from "./AddTabFrom"; import StoredTabItem from "./StoredTabItem"; -type StoredTabGroupsProps = { - dense: boolean; -}; type StoredTabGroupAccordionProps = { group: StoredTabGroup; index: number; - dense: boolean; }; const OutlinedAccordion = styled((props: AccordionProps) => ( @@ -68,7 +64,7 @@ const AccordionDetails = styled(MuiAccordionDetails)(({ theme }) => ({ })); const StoredTabGroupAccordion = (props: StoredTabGroupAccordionProps) => { - const { group, index, dense } = props; + const { group, index } = props; const theme = useTheme(); const editTabGroupFormRef = useRef(null); const editButtonRef = useRef(null); @@ -141,7 +137,7 @@ const StoredTabGroupAccordion = (props: StoredTabGroupAccordionProps) => { { ); }; -const StoredTabGroups = (props: StoredTabGroupsProps) => { - const { dense } = props; +const StoredTabGroups = () => { const state = useContext(StoredTabGroupsContext); const sortedGroups = state.value?.sort((a, b) => a.storedAt > b.storedAt ? -1 : 1, @@ -310,7 +305,6 @@ const StoredTabGroups = (props: StoredTabGroupsProps) => { key={group.internalUid} group={group} index={index} - dense={dense} /> ))} diff --git a/src/presentation/views/shared/components/SaveAndRestorePage/StoredTabItem.tsx b/src/ui/popup/SaveAndRestorePage/StoredTabItem.tsx similarity index 89% rename from src/presentation/views/shared/components/SaveAndRestorePage/StoredTabItem.tsx rename to src/ui/popup/SaveAndRestorePage/StoredTabItem.tsx index b8a8cf8a..acdc7693 100644 --- a/src/presentation/views/shared/components/SaveAndRestorePage/StoredTabItem.tsx +++ b/src/ui/popup/SaveAndRestorePage/StoredTabItem.tsx @@ -4,9 +4,9 @@ import ListItem from "@mui/material/ListItem"; import ListItemButton from "@mui/material/ListItemButton"; import ListItemText from "@mui/material/ListItemText"; import { useState } from "react"; -import { createNewTab } from "../../../../../data/repository/TabsRepository"; -import type { StoredTab } from "../../../../../model/Tab"; -import TabFavicon from "../TabFavicon"; +import type { StoredTab } from "../../../model/Tab"; +import { createNewTab } from "../../../platform/repository/TabsRepository"; +import TabFavicon from "../../components/TabFavicon"; type StoredGridTabItemProps = { tab: StoredTab; diff --git a/src/presentation/views/shared/components/SaveAndRestorePage/StoredTabItemContainer.tsx b/src/ui/popup/SaveAndRestorePage/StoredTabItemContainer.tsx similarity index 96% rename from src/presentation/views/shared/components/SaveAndRestorePage/StoredTabItemContainer.tsx rename to src/ui/popup/SaveAndRestorePage/StoredTabItemContainer.tsx index 4228bebb..634d7d15 100644 --- a/src/presentation/views/shared/components/SaveAndRestorePage/StoredTabItemContainer.tsx +++ b/src/ui/popup/SaveAndRestorePage/StoredTabItemContainer.tsx @@ -15,19 +15,19 @@ import Stack from "@mui/material/Stack"; import { useTheme } from "@mui/material/styles"; import Typography from "@mui/material/Typography"; import { useState } from "react"; -import { - restorePinned, - restoreTabGroup, -} from "../../../../../data/repository/TabGroupRepository"; -import t from "../../../../../i18n/Translations"; +import t from "../../../i18n/Translations"; import { adjacentToStoredTabContainerAfter, adjacentToStoredTabContainerBefore, isStoredPinned, isStoredTabGroup, type StoredTabContainer, -} from "../../../../../model/TabContainer"; -import type { StoredWindow } from "../../../../../model/Window"; +} from "../../../model/TabContainer"; +import type { StoredWindow } from "../../../model/Window"; +import { + restorePinned, + restoreTabGroup, +} from "../../../platform/repository/TabGroupRepository"; import StoredTabItem from "./StoredTabItem"; type StoredTabItemContainerProps = { diff --git a/src/presentation/views/shared/components/SaveAndRestorePage/StoredWindows.tsx b/src/ui/popup/SaveAndRestorePage/StoredWindows.tsx similarity index 93% rename from src/presentation/views/shared/components/SaveAndRestorePage/StoredWindows.tsx rename to src/ui/popup/SaveAndRestorePage/StoredWindows.tsx index 5530ed39..13648b38 100644 --- a/src/presentation/views/shared/components/SaveAndRestorePage/StoredWindows.tsx +++ b/src/ui/popup/SaveAndRestorePage/StoredWindows.tsx @@ -18,29 +18,25 @@ import { alpha, styled } from "@mui/material/styles"; import TextField from "@mui/material/TextField"; import Typography from "@mui/material/Typography"; import { useContext, useEffect, useRef, useState } from "react"; +import t from "../../../i18n/Translations"; +import { isLoading } from "../../../model/AsyncState"; +import type { StoredWindow } from "../../../model/Window"; import { addTabToStoredWindow, removeItemFromStoredWindow, saveWindow, updateStoredWindowName, -} from "../../../../../data/repository/WindowsRepository"; -import t from "../../../../../i18n/Translations"; -import { isLoading } from "../../../../../model/AsyncState"; -import type { StoredWindow } from "../../../../../model/Window"; -import { StoredWindowsContext } from "../../../../contexts/StoredWindowsContext"; -import { WindowsContext } from "../../../../contexts/WindowsContext"; -import { StoredWindowActionMenu } from "../ActionMenu"; +} from "../../../platform/repository/WindowsRepository"; +import { StoredWindowActionMenu } from "../../components/ActionMenu"; +import { StoredWindowsContext } from "../../contexts/StoredWindowsContext"; +import { WindowsContext } from "../../contexts/WindowsContext"; import AddTabForm from "./AddTabFrom"; import StoredTabItem from "./StoredTabItem"; import { StoredTabItemContainer } from "./StoredTabItemContainer"; -type StoredWindowsProps = { - dense?: boolean; -}; type StoredWindowAccordionProps = { window: StoredWindow; index: number; - dense: boolean; }; const OutlinedAccordion = styled((props: AccordionProps) => ( @@ -67,7 +63,7 @@ const AccordionDetails = styled(MuiAccordionDetails)(({ theme }) => ({ })); const StoredWindowAccordion = (props: StoredWindowAccordionProps) => { - const { window, index, dense } = props; + const { window, index } = props; const editWindowNameFormRef = useRef(null); const editButtonRef = useRef(null); const addTabFormRef = useRef(null); @@ -142,7 +138,7 @@ const StoredWindowAccordion = (props: StoredWindowAccordionProps) => { { ); }; -const StoredWindows = (props: StoredWindowsProps) => { - const { dense } = props; +const StoredWindows = () => { const state = useContext(StoredWindowsContext); const sortedWindows = state.value?.sort((a, b) => a.storedAt > b.storedAt ? -1 : 1, @@ -284,7 +279,6 @@ const StoredWindows = (props: StoredWindowsProps) => { key={window.internalUid} window={window} index={index} - dense={dense} /> ))} diff --git a/src/presentation/views/shared/components/SaveAndRestorePage/index.tsx b/src/ui/popup/SaveAndRestorePage/index.tsx similarity index 72% rename from src/presentation/views/shared/components/SaveAndRestorePage/index.tsx rename to src/ui/popup/SaveAndRestorePage/index.tsx index bbb46239..630ca3d4 100644 --- a/src/presentation/views/shared/components/SaveAndRestorePage/index.tsx +++ b/src/ui/popup/SaveAndRestorePage/index.tsx @@ -2,20 +2,15 @@ import Stack from "@mui/material/Stack"; import ToggleButton from "@mui/material/ToggleButton"; import ToggleButtonGroup from "@mui/material/ToggleButtonGroup"; import { useState } from "react"; -import t from "../../../../../i18n/Translations"; -import { StoredTabGroupsProvider } from "../../../../contexts/StoredTabGroupsContext"; -import { StoredWindowsProvider } from "../../../../contexts/StoredWindowsContext"; +import t from "../../../i18n/Translations"; +import { StoredTabGroupsProvider } from "../../contexts/StoredTabGroupsContext"; +import { StoredWindowsProvider } from "../../contexts/StoredWindowsContext"; import StoredTabGroups from "./StoredTabGroups"; import StoredWindows from "./StoredWindows"; type Page = "window" | "tabGroup"; -type SaveAndRestorePageProps = { - dense?: boolean; -}; - -const SaveAndRestorePage = (props: SaveAndRestorePageProps) => { - const { dense = false } = props; +const SaveAndRestorePage = () => { const [currentPage, setCurrentPage] = useState("window"); const pages = [ { @@ -34,7 +29,7 @@ const SaveAndRestorePage = (props: SaveAndRestorePageProps) => { }; return ( - + { {currentPage === "window" && ( - + )} {currentPage === "tabGroup" && ( - + )} diff --git a/src/presentation/views/popup/components/SearchResult.tsx b/src/ui/popup/SearchResult.tsx similarity index 92% rename from src/presentation/views/popup/components/SearchResult.tsx rename to src/ui/popup/SearchResult.tsx index 582e23b9..90e46ca7 100644 --- a/src/presentation/views/popup/components/SearchResult.tsx +++ b/src/ui/popup/SearchResult.tsx @@ -8,16 +8,16 @@ import Stack from "@mui/material/Stack"; import Tooltip from "@mui/material/Tooltip"; import Typography from "@mui/material/Typography"; import { useContext, useEffect, useRef, useState } from "react"; +import t from "../../i18n/Translations"; +import type { Tab } from "../../model/Tab"; +import { findTabsByTitleOrUrl } from "../../model/Window"; import { focusTab, getRecentActiveTabs, -} from "../../../../data/repository/TabsRepository"; -import t from "../../../../i18n/Translations"; -import type { Tab } from "../../../../model/Tab"; -import { findTabsByTitleOrUrl } from "../../../../model/Window"; -import { WindowsContext } from "../../../contexts/WindowsContext"; -import groupTabsBySearchKeyword from "../../../functions/groupTabsBySearchKeyword"; -import TabItem from "../../shared/components/TabItem"; +} from "../../platform/repository/TabsRepository"; +import TabItem from "../components/TabItem"; +import { WindowsContext } from "../contexts/WindowsContext"; +import groupTabsBySearchKeyword from "../functions/groupTabsBySearchKeyword"; type SearchResultProps = { searchText: string; diff --git a/src/presentation/views/shared/components/SettingsPage/ModeSettingForm.tsx b/src/ui/popup/SettingsPage/ModeSettingForm.tsx similarity index 82% rename from src/presentation/views/shared/components/SettingsPage/ModeSettingForm.tsx rename to src/ui/popup/SettingsPage/ModeSettingForm.tsx index e73e65d3..6a8ac06d 100644 --- a/src/presentation/views/shared/components/SettingsPage/ModeSettingForm.tsx +++ b/src/ui/popup/SettingsPage/ModeSettingForm.tsx @@ -4,11 +4,11 @@ import SettingsBrightnessIcon from "@mui/icons-material/SettingsBrightness"; import ToggleButton from "@mui/material/ToggleButton"; import ToggleButtonGroup from "@mui/material/ToggleButtonGroup"; import { useContext } from "react"; -import { updateMode } from "../../../../../data/repository/ThemeRepository"; -import t from "../../../../../i18n/Translations"; -import type { Mode } from "../../../../../model/Theme"; -import { ModeContext } from "../../../../contexts/ModeContext"; -import PaperWithHeader from "../PaperWithHeader"; +import t from "../../../i18n/Translations"; +import type { Mode } from "../../../model/Theme"; +import { updateMode } from "../../../platform/repository/ThemeRepository"; +import PaperWithHeader from "../../components/PaperWithHeader"; +import { ModeContext } from "../../contexts/ModeContext"; const ModeSettingForm = () => { const { mode } = useContext(ModeContext); diff --git a/src/presentation/views/shared/components/SettingsPage/PopupSizeSettingForm.tsx b/src/ui/popup/SettingsPage/PopupSizeSettingForm.tsx similarity index 97% rename from src/presentation/views/shared/components/SettingsPage/PopupSizeSettingForm.tsx rename to src/ui/popup/SettingsPage/PopupSizeSettingForm.tsx index d934b8cc..892003e1 100644 --- a/src/presentation/views/shared/components/SettingsPage/PopupSizeSettingForm.tsx +++ b/src/ui/popup/SettingsPage/PopupSizeSettingForm.tsx @@ -10,13 +10,12 @@ import Stack from "@mui/material/Stack"; import TextField from "@mui/material/TextField"; import Typography from "@mui/material/Typography"; import { useEffect, useState } from "react"; - +import t from "../../../i18n/Translations"; import { getPopupSizeSetting, updatePopupSizeSetting, -} from "../../../../../data/repository/SettingsRepository"; -import t from "../../../../../i18n/Translations"; -import PaperWithHeader from "../PaperWithHeader"; +} from "../../../platform/repository/SettingsRepository"; +import PaperWithHeader from "../../components/PaperWithHeader"; type SettingForm = { height: string; diff --git a/src/presentation/views/shared/components/SettingsPage/ThemeColorSettingForm.tsx b/src/ui/popup/SettingsPage/ThemeColorSettingForm.tsx similarity index 64% rename from src/presentation/views/shared/components/SettingsPage/ThemeColorSettingForm.tsx rename to src/ui/popup/SettingsPage/ThemeColorSettingForm.tsx index 92c736a3..2ffe90b6 100644 --- a/src/presentation/views/shared/components/SettingsPage/ThemeColorSettingForm.tsx +++ b/src/ui/popup/SettingsPage/ThemeColorSettingForm.tsx @@ -1,11 +1,11 @@ import Stack from "@mui/material/Stack"; import { useContext } from "react"; -import { updateThemeColor } from "../../../../../data/repository/ThemeRepository"; -import t from "../../../../../i18n/Translations"; -import { themeColors } from "../../../../../model/Theme"; -import { ThemeColorContext } from "../../../../contexts/ThemeColorContext"; -import PaperWithHeader from "../PaperWithHeader"; -import TabGroupColorRadio from "../TabGroupColorRadio"; +import t from "../../../i18n/Translations"; +import { themeColors } from "../../../model/Theme"; +import { updateThemeColor } from "../../../platform/repository/ThemeRepository"; +import PaperWithHeader from "../../components/PaperWithHeader"; +import TabGroupColorRadio from "../../components/TabGroupColorRadio"; +import { ThemeColorContext } from "../../contexts/ThemeColorContext"; const ThemeColorSetting = () => { const { themeColor } = useContext(ThemeColorContext); diff --git a/src/presentation/views/shared/components/SettingsPage/ToolbarSettingForm.tsx b/src/ui/popup/SettingsPage/ToolbarSettingForm.tsx similarity index 84% rename from src/presentation/views/shared/components/SettingsPage/ToolbarSettingForm.tsx rename to src/ui/popup/SettingsPage/ToolbarSettingForm.tsx index 402d448d..1deaaf1c 100644 --- a/src/presentation/views/shared/components/SettingsPage/ToolbarSettingForm.tsx +++ b/src/ui/popup/SettingsPage/ToolbarSettingForm.tsx @@ -4,14 +4,14 @@ import ListItemText from "@mui/material/ListItemText"; import MenuItem from "@mui/material/MenuItem"; import Select, { type SelectChangeEvent } from "@mui/material/Select"; import { useEffect, useState } from "react"; -import { getToolbarSetting } from "../../../../../data/repository/SettingsRepository"; -import { setToolbarIconClickOpenView } from "../../../../../data/repository/ToolbarRepository"; -import t from "../../../../../i18n/Translations"; +import t from "../../../i18n/Translations"; import { isValidIconClickOpenView, type ToolbarSetting, -} from "../../../../../model/ToolbarSetting"; -import PaperWithHeader from "../PaperWithHeader"; +} from "../../../model/ToolbarSetting"; +import { getToolbarSetting } from "../../../platform/repository/SettingsRepository"; +import { setToolbarIconClickOpenView } from "../../../platform/repository/ToolbarRepository"; +import PaperWithHeader from "../../components/PaperWithHeader"; const ToolbarSettingForm = () => { const [settingState, setSettingState] = useState(null); diff --git a/src/presentation/views/shared/components/SettingsPage/index.tsx b/src/ui/popup/SettingsPage/index.tsx similarity index 100% rename from src/presentation/views/shared/components/SettingsPage/index.tsx rename to src/ui/popup/SettingsPage/index.tsx diff --git a/src/presentation/views/shared/components/TidyTabsPage/TabCleanerForm.tsx b/src/ui/popup/TidyTabsPage/TabCleanerForm.tsx similarity index 90% rename from src/presentation/views/shared/components/TidyTabsPage/TabCleanerForm.tsx rename to src/ui/popup/TidyTabsPage/TabCleanerForm.tsx index ca3ce45e..24f4927b 100644 --- a/src/presentation/views/shared/components/TidyTabsPage/TabCleanerForm.tsx +++ b/src/ui/popup/TidyTabsPage/TabCleanerForm.tsx @@ -10,26 +10,22 @@ import Stack from "@mui/material/Stack"; import Switch from "@mui/material/Switch"; import TextField from "@mui/material/TextField"; import { useEffect, useState } from "react"; +import t from "../../../i18n/Translations"; +import type { DurationUnit, TabCleaner } from "../../../model/TabCleaner"; import { addListenerOnChangeTabCleanerSetting, getTabCleanerSetting, updateTabCleanerSetting, -} from "../../../../../data/repository/TabCleanerRepository"; -import { removeListenerOnChangeTabGroupSetting } from "../../../../../data/repository/TabGroupSettingRepository"; -import t from "../../../../../i18n/Translations"; -import type { DurationUnit, TabCleaner } from "../../../../../model/TabCleaner"; -import PaperWithHeader from "../PaperWithHeader"; +} from "../../../platform/repository/TabCleanerRepository"; +import { removeListenerOnChangeTabGroupSetting } from "../../../platform/repository/TabGroupSettingRepository"; +import PaperWithHeader from "../../components/PaperWithHeader"; -type TabCleanerFormProps = { - dense: boolean; -}; type DurationErrorState = { isError: boolean; errorMessage: string; }; -const TabCleanerForm = (props: TabCleanerFormProps) => { - const { dense } = props; +const TabCleanerForm = () => { const [setting, setSetting] = useState(null); const [inputDuration, setInputDuration] = useState(""); const [durationError, setDurationError] = useState({ @@ -89,7 +85,7 @@ const TabCleanerForm = (props: TabCleanerFormProps) => { return ( {setting && ( - + { - const { dense } = props; +const TabGroupingForm = () => { const [setting, setSetting] = useState(null); useEffect(() => { @@ -70,7 +65,7 @@ const TabGroupingForm = (props: TabGroupingFormProps) => { {setting && ( <> - +