From 013687223cc9314533d5d019c46522b3258c03bd Mon Sep 17 00:00:00 2001 From: shan <47271333+shanimal08@users.noreply.github.com> Date: Tue, 25 Feb 2025 16:38:21 +0200 Subject: [PATCH 1/4] chore: clean up dead code (in FE) (#1508) Description --- - adds [`knip`](https://knip.dev/) as a dev dependency & includes it in our lint script - removed: unused files, non-imported (elsewhere) exports, unused dependencies Motivation and Context --- - reduce bundle size + cleaner code - [Why are unused dependencies a problem?](https://knip.dev/typescript/unused-dependencies#why-are-unused-dependencies-a-problem) - [Why are unused exports a problem?](https://knip.dev/typescript/unused-exports#why-are-unused-exports-a-problem) How Has This Been Tested? --- - locally:D ## Summary by CodeRabbit - **New Features** - Introduced an enhanced linting and configuration setup for improved development quality. - **Refactor** - Streamlined various UI components, including removal of outdated logos and legacy panels, leading to a cleaner interface. - Improved error reporting within the app for unsupported features. - Updated visibility of several interfaces and constants to enhance modularity. - Removed several unused components and constants to simplify the codebase. - **Chores** - Updated dependencies and tooling scripts for better performance and maintainability. - **Style** - Refined styling rules and simplified padding declarations for a more consistent visual experience. - Adjusted box-shadow properties for improved visual consistency. - Removed unused styled components to clean up the styling structure. - Simplified syntax for various styled components. --- knip.ts | 18 + package-lock.json | 486 +++++++++++++----- package.json | 9 +- src/App/App.tsx | 3 +- src/App/sentryIgnore.ts | 1 - src/assets/tari-logo.tsx | 56 -- src/assets/universe-logo.tsx | 39 -- .../FieldErrorMessage.component.tsx | 23 - .../FieldErrorMessage.constants.ts | 8 - .../FieldErrorMessage.types.ts | 5 - src/components/FieldErrorMessage/index.ts | 2 - .../NumberInput/NumberInput.component.tsx | 98 ---- .../NumberInput/NumberInput.constants.ts | 3 - .../NumberInput/NumberInput.styles.tsx | 9 - .../NumberInput/NumberInput.types.ts | 26 - src/components/NumberInput/index.ts | 2 - src/components/ToastStack/Toast/Toast.tsx | 6 +- src/components/ToastStack/useToastStore.tsx | 4 - src/components/elements/Tabs.styles.ts | 36 -- src/components/elements/Tabs.tsx | 30 -- src/components/elements/Typography.tsx | 2 +- .../elements/buttons/IconButton.tsx | 2 +- .../elements/buttons/SquaredButton.tsx | 10 +- .../elements/buttons/TextButton.tsx | 4 +- .../elements/buttons/button.types.ts | 4 +- .../elements/dialog/Dialog.styles.ts | 5 - src/components/elements/dialog/Dialog.tsx | 10 +- src/components/elements/inputs/Input.tsx | 2 +- .../AutoUpdateDialog/UpdatedStatus.tsx | 2 +- .../floating/Error/ErrorSnackbar.styles.ts | 40 -- .../floating/Error/ErrorSnackbar.tsx | 106 ---- .../sections/QRCodeSection/QRCodeSection.tsx | 4 - .../sections/QRCodeSection/styles.ts | 7 +- .../floating/PaperWalletModal/styles.ts | 16 +- .../floating/Settings/SettingsModal.styles.ts | 23 - .../Settings/components/Card.component.tsx | 2 +- .../sections/experimental/P2poolMarkup.tsx | 2 +- .../Settings/sections/releaseNotes/styles.ts | 11 +- .../wallet/SeedWordsMarkup/SeedWordsEdit.tsx | 12 +- .../sections/wallet/SeedWordsMarkup/index.ts | 1 - .../floating/ShareRewardModal/styles.ts | 22 +- .../main/Dashboard/TribesView/TribesView.tsx | 15 - .../main/Dashboard/components/VisualMode.tsx | 2 +- .../CustomPowerLevels/RangeInput.styles.ts | 4 +- .../main/SideBar/Miner/components/Tile.tsx | 2 +- .../OrphanChainAlert/OrphanChainAlert.tsx | 6 +- src/containers/main/SideBar/index.ts | 1 - .../stateHelpers/useAirdropTokensRefresh.ts | 2 +- .../stateHelpers/useGetReferralQuestPoints.ts | 2 +- src/hooks/helpers/index.ts | 1 - src/hooks/helpers/useKeyboardEvent.ts | 23 - src/store/useAirdropStore.ts | 11 +- src/store/useShellOfSecretsStore.ts | 2 +- src/store/useUIStore.ts | 6 +- src/theme/palettes/colorsAlpha.ts | 2 - src/theme/types.ts | 14 +- src/types/app-status.ts | 30 +- src/types/{invoke.ts => invoke.d.ts} | 0 src/types/ws.ts | 10 +- src/utils/debounce.ts | 8 - vite.config.ts | 12 +- 61 files changed, 475 insertions(+), 829 deletions(-) create mode 100644 knip.ts delete mode 100644 src/assets/tari-logo.tsx delete mode 100644 src/assets/universe-logo.tsx delete mode 100644 src/components/FieldErrorMessage/FieldErrorMessage.component.tsx delete mode 100644 src/components/FieldErrorMessage/FieldErrorMessage.constants.ts delete mode 100644 src/components/FieldErrorMessage/FieldErrorMessage.types.ts delete mode 100644 src/components/FieldErrorMessage/index.ts delete mode 100644 src/components/NumberInput/NumberInput.component.tsx delete mode 100644 src/components/NumberInput/NumberInput.constants.ts delete mode 100644 src/components/NumberInput/NumberInput.styles.tsx delete mode 100644 src/components/NumberInput/NumberInput.types.ts delete mode 100644 src/components/NumberInput/index.ts delete mode 100644 src/components/elements/Tabs.styles.ts delete mode 100644 src/components/elements/Tabs.tsx delete mode 100644 src/containers/floating/Error/ErrorSnackbar.styles.ts delete mode 100644 src/containers/floating/Error/ErrorSnackbar.tsx delete mode 100644 src/containers/floating/Settings/sections/wallet/SeedWordsMarkup/index.ts delete mode 100644 src/containers/main/Dashboard/TribesView/TribesView.tsx delete mode 100644 src/containers/main/SideBar/index.ts delete mode 100644 src/hooks/helpers/useKeyboardEvent.ts rename src/types/{invoke.ts => invoke.d.ts} (100%) delete mode 100644 src/utils/debounce.ts diff --git a/knip.ts b/knip.ts new file mode 100644 index 000000000..c7dab798d --- /dev/null +++ b/knip.ts @@ -0,0 +1,18 @@ +import type { KnipConfig } from 'knip'; + +const config: KnipConfig = { + project: ['src/**/*.{js,ts,tsx}', 'scripts/**/*.{js,ts}'], + rules: { + files: 'error', + dependencies: 'warn', + unlisted: 'warn', + exports: 'warn', + types: 'warn', + duplicates: 'error', + }, + ignoreBinaries: ['commitlint'], + ignoreDependencies: ['prettier-eslint', 'babel-plugin-styled-components'], // needed by plugins + ignoreExportsUsedInFile: true, +}; + +export default config; diff --git a/package-lock.json b/package-lock.json index 34171abd1..5174b73b1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,13 +10,10 @@ "dependencies": { "@floating-ui/react": "^0.27.4", "@lottiefiles/dotlottie-react": "^0.13.0", - "@sentry/react": "^8.48.0", "@tauri-apps/api": "^2.2.0", "@tauri-apps/plugin-clipboard-manager": "^2.2.0", "@tauri-apps/plugin-os": "^2.2.0", - "@tauri-apps/plugin-process": "^2.2.0", "@tauri-apps/plugin-shell": "^2.2.0", - "@tauri-apps/plugin-updater": "^2.3.1", "emoji-regex": "^10.4.0", "globals": "^15.15.0", "i18next": "^24.2.2", @@ -57,6 +54,7 @@ "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-react": "^7.37.3", "eslint-plugin-react-hooks": "^5.1.0", + "knip": "^5.44.0", "prettier": "^3.5.2", "prettier-eslint": "^16.3.0", "react-qr-code": "^2.0.15", @@ -1621,105 +1619,31 @@ "win32" ] }, - "node_modules/@sentry-internal/browser-utils": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.54.0.tgz", - "integrity": "sha512-DKWCqb4YQosKn6aD45fhKyzhkdG7N6goGFDeyTaJFREJDFVDXiNDsYZu30nJ6BxMM7uQIaARhPAC5BXfoED3pQ==", - "license": "MIT", - "dependencies": { - "@sentry/core": "8.54.0" - }, - "engines": { - "node": ">=14.18" - } - }, - "node_modules/@sentry-internal/feedback": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.54.0.tgz", - "integrity": "sha512-nQqRacOXoElpE0L0ADxUUII0I3A94niqG9Z4Fmsw6057QvyrV/LvTiMQBop6r5qLjwMqK+T33iR4/NQI5RhsXQ==", - "license": "MIT", - "dependencies": { - "@sentry/core": "8.54.0" - }, - "engines": { - "node": ">=14.18" - } - }, - "node_modules/@sentry-internal/replay": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.54.0.tgz", - "integrity": "sha512-8xuBe06IaYIGJec53wUC12tY2q4z2Z0RPS2s1sLtbA00EvK1YDGuXp96IDD+HB9mnDMrQ/jW5f97g9TvPsPQUg==", - "license": "MIT", - "dependencies": { - "@sentry-internal/browser-utils": "8.54.0", - "@sentry/core": "8.54.0" - }, - "engines": { - "node": ">=14.18" - } - }, - "node_modules/@sentry-internal/replay-canvas": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.54.0.tgz", - "integrity": "sha512-K/On3OAUBeq/TV2n+1EvObKC+WMV9npVXpVyJqCCyn8HYMm8FUGzuxeajzm0mlW4wDTPCQor6mK9/IgOquUzCw==", - "license": "MIT", - "dependencies": { - "@sentry-internal/replay": "8.54.0", - "@sentry/core": "8.54.0" - }, - "engines": { - "node": ">=14.18" - } + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true, + "license": "MIT" }, - "node_modules/@sentry/browser": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.54.0.tgz", - "integrity": "sha512-BgUtvxFHin0fS0CmJVKTLXXZcke0Av729IVfi+2fJ4COX8HO7/HAP02RKaSQGmL2HmvWYTfNZ7529AnUtrM4Rg==", + "node_modules/@snyk/github-codeowners": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@snyk/github-codeowners/-/github-codeowners-1.1.0.tgz", + "integrity": "sha512-lGFf08pbkEac0NYgVf4hdANpAgApRjNByLXB+WBip3qj1iendOIyAwP2GKkKbQMNVy2r1xxDf0ssfWscoiC+Vw==", + "dev": true, "license": "MIT", "dependencies": { - "@sentry-internal/browser-utils": "8.54.0", - "@sentry-internal/feedback": "8.54.0", - "@sentry-internal/replay": "8.54.0", - "@sentry-internal/replay-canvas": "8.54.0", - "@sentry/core": "8.54.0" + "commander": "^4.1.1", + "ignore": "^5.1.8", + "p-map": "^4.0.0" }, - "engines": { - "node": ">=14.18" - } - }, - "node_modules/@sentry/core": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.54.0.tgz", - "integrity": "sha512-03bWf+D1j28unOocY/5FDB6bUHtYlm6m6ollVejhg45ZmK9iPjdtxNWbrLsjT1WRym0Tjzowu+A3p+eebYEv0Q==", - "license": "MIT", - "engines": { - "node": ">=14.18" - } - }, - "node_modules/@sentry/react": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@sentry/react/-/react-8.54.0.tgz", - "integrity": "sha512-42T/fp8snYN19Fy/2P0Mwotu4gcdy+1Lx+uYCNcYP1o7wNGigJ7qb27sW7W34GyCCHjoCCfQgeOqDQsyY8LC9w==", - "license": "MIT", - "dependencies": { - "@sentry/browser": "8.54.0", - "@sentry/core": "8.54.0", - "hoist-non-react-statics": "^3.3.2" + "bin": { + "github-codeowners": "dist/cli.js" }, "engines": { - "node": ">=14.18" - }, - "peerDependencies": { - "react": "^16.14.0 || 17.x || 18.x || 19.x" + "node": ">=8.10" } }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true, - "license": "MIT" - }, "node_modules/@socket.io/component-emitter": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", @@ -1963,15 +1887,6 @@ "@tauri-apps/api": "^2.0.0" } }, - "node_modules/@tauri-apps/plugin-process": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-process/-/plugin-process-2.2.0.tgz", - "integrity": "sha512-uypN2Crmyop9z+KRJr3zl71OyVFgTuvHFjsJ0UxxQ/J5212jVa5w4nPEYjIewcn8bUEXacRebwE6F7owgrbhSw==", - "license": "MIT OR Apache-2.0", - "dependencies": { - "@tauri-apps/api": "^2.0.0" - } - }, "node_modules/@tauri-apps/plugin-shell": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-shell/-/plugin-shell-2.2.0.tgz", @@ -1981,15 +1896,6 @@ "@tauri-apps/api": "^2.0.0" } }, - "node_modules/@tauri-apps/plugin-updater": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-updater/-/plugin-updater-2.5.0.tgz", - "integrity": "sha512-CWpwrkgpMESDPgJ0EuXgQTI/U9zeZQ9NLUvMyuWVrsuRez7tJ/3c7y73LAkvkI6+ekUxVaRJrxYrSfd8W+DRvQ==", - "license": "MIT OR Apache-2.0", - "dependencies": { - "@tauri-apps/api": "^2.0.0" - } - }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -2408,6 +2314,20 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -2877,6 +2797,27 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.8" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -2907,6 +2848,16 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, "node_modules/common-tags": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", @@ -3072,6 +3023,20 @@ "dev": true, "license": "MIT" }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -3178,6 +3143,29 @@ "node": ">= 0.4" } }, + "node_modules/easy-table": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz", + "integrity": "sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "optionalDependencies": { + "wcwidth": "^1.0.1" + } + }, + "node_modules/easy-table/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/electron-to-chromium": { "version": "1.5.92", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.92.tgz", @@ -3230,6 +3218,20 @@ "node": ">=10.0.0" } }, + "node_modules/enhanced-resolve": { + "version": "5.18.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", + "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/es-abstract": { "version": "1.23.9", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", @@ -4174,6 +4176,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -4328,15 +4337,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "license": "BSD-3-Clause", - "dependencies": { - "react-is": "^16.7.0" - } - }, "node_modules/html-parse-stringify": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", @@ -4968,6 +4968,16 @@ "node": ">= 0.4" } }, + "node_modules/jiti": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -5060,6 +5070,120 @@ "json-buffer": "3.0.1" } }, + "node_modules/knip": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/knip/-/knip-5.44.0.tgz", + "integrity": "sha512-j39v3LYCmU6P6HN/TG14bc0Dlthl12g6NogdEZHQdhlVS6BqfnGGS3ospYYwLill6Sdc68eptwGtThunqq7lxA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/webpro" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/knip" + }, + { + "type": "polar", + "url": "https://polar.sh/webpro-nl" + } + ], + "license": "ISC", + "dependencies": { + "@nodelib/fs.walk": "3.0.1", + "@snyk/github-codeowners": "1.1.0", + "easy-table": "1.2.0", + "enhanced-resolve": "^5.18.0", + "fast-glob": "^3.3.3", + "jiti": "^2.4.2", + "js-yaml": "^4.1.0", + "minimist": "^1.2.8", + "picocolors": "^1.1.0", + "picomatch": "^4.0.1", + "pretty-ms": "^9.0.0", + "smol-toml": "^1.3.1", + "strip-json-comments": "5.0.1", + "summary": "2.1.0", + "zod": "^3.22.4", + "zod-validation-error": "^3.0.3" + }, + "bin": { + "knip": "bin/knip.js", + "knip-bun": "bin/knip-bun.js" + }, + "engines": { + "node": ">=18.18.0" + }, + "peerDependencies": { + "@types/node": ">=18", + "typescript": ">=5.0.4" + } + }, + "node_modules/knip/node_modules/@nodelib/fs.scandir": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-4.0.1.tgz", + "integrity": "sha512-vAkI715yhnmiPupY+dq+xenu5Tdf2TBQ66jLvBIcCddtz+5Q8LbMKaf9CIJJreez8fQ8fgaY+RaywQx8RJIWpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "4.0.0", + "run-parallel": "^1.2.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/knip/node_modules/@nodelib/fs.stat": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-4.0.0.tgz", + "integrity": "sha512-ctr6bByzksKRCV0bavi8WoQevU6plSp2IkllIsEqaiKe2mwNNnaluhnRhcsgGZHrrHk57B3lf95MkLMO3STYcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/knip/node_modules/@nodelib/fs.walk": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-3.0.1.tgz", + "integrity": "sha512-nIh/M6Kh3ZtOmlY00DaUYB4xeeV6F3/ts1l29iwl3/cfyY/OuCfUx+v08zgx8TKPTifXRcjjqVQ4KB2zOYSbyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "4.0.1", + "fastq": "^1.15.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/knip/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/knip/node_modules/strip-json-comments": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.1.tgz", + "integrity": "sha512-0fk9zBqO67Nq5M/m45qHCJxylV/DhBlIOVExqgOMiCCrzrhU6tCibRXNqE3jwJLftzE9SNuZtYbpzcO+i9FiKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -5870,6 +5994,16 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/motion": { "version": "12.4.7", "resolved": "https://registry.npmjs.org/motion/-/motion-12.4.7.tgz", @@ -6154,6 +6288,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -6192,6 +6342,19 @@ "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", "license": "MIT" }, + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -6829,6 +6992,22 @@ "dev": true, "license": "MIT" }, + "node_modules/pretty-ms": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.2.0.tgz", + "integrity": "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -6977,6 +7156,7 @@ "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, "license": "MIT" }, "node_modules/react-markdown": { @@ -7533,6 +7713,19 @@ "node": ">=8" } }, + "node_modules/smol-toml": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.3.1.tgz", + "integrity": "sha512-tEYNll18pPKHroYSmLLrksq233j021G0giwW7P3D24jC54pQ5W5BXMsQ/Mvw1OJCmEYDgY+lrzT+3nNUtoNfXQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/cyyynthia" + } + }, "node_modules/socket.io-client": { "version": "4.8.1", "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.1.tgz", @@ -7801,6 +7994,13 @@ "integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==", "license": "MIT" }, + "node_modules/summary": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/summary/-/summary-2.1.0.tgz", + "integrity": "sha512-nMIjMrd5Z2nuB2RZCKJfFMjgS3fygbeyGk9PxPPaJR1RIcyN9yn4A63Isovzm3ZtQuEkLBVgMdPup8UeLH7aQw==", + "dev": true, + "license": "MIT" + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -7850,6 +8050,16 @@ "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", "license": "MIT" }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -8504,6 +8714,17 @@ "node": ">=10" } }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -8690,6 +8911,29 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/zod": { + "version": "3.24.1", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.1.tgz", + "integrity": "sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-validation-error": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-3.4.0.tgz", + "integrity": "sha512-ZOPR9SVY6Pb2qqO5XHt+MkkTRxGXb4EVtnjc9JpXUOtUB1T9Ru7mZOT361AN3MsetVe7R0a1KZshJDZdgp9miQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.18.0" + } + }, "node_modules/zustand": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.3.tgz", diff --git a/package.json b/package.json index d902d00cd..7ce9e1a4c 100644 --- a/package.json +++ b/package.json @@ -8,21 +8,19 @@ "build": "tsc && vite build", "preview": "vite preview", "tauri": "tauri", - "lint": "eslint src/", + "lint": "knip && eslint src/", "lint:fix": "eslint src/ --fix", "lint:taplo": "taplo format --check", - "translate": "node ./scripts/translator.js" + "translate": "node ./scripts/translator.js", + "knip": "knip" }, "dependencies": { "@floating-ui/react": "^0.27.4", "@lottiefiles/dotlottie-react": "^0.13.0", - "@sentry/react": "^8.48.0", "@tauri-apps/api": "^2.2.0", "@tauri-apps/plugin-clipboard-manager": "^2.2.0", "@tauri-apps/plugin-os": "^2.2.0", - "@tauri-apps/plugin-process": "^2.2.0", "@tauri-apps/plugin-shell": "^2.2.0", - "@tauri-apps/plugin-updater": "^2.3.1", "emoji-regex": "^10.4.0", "globals": "^15.15.0", "i18next": "^24.2.2", @@ -63,6 +61,7 @@ "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-react": "^7.37.3", "eslint-plugin-react-hooks": "^5.1.0", + "knip": "^5.44.0", "prettier": "^3.5.2", "prettier-eslint": "^16.3.0", "react-qr-code": "^2.0.15", diff --git a/src/App/App.tsx b/src/App/App.tsx index 47f07f77c..6efaf1827 100644 --- a/src/App/App.tsx +++ b/src/App/App.tsx @@ -1,4 +1,3 @@ -import * as Sentry from '@sentry/react'; import { memo, useMemo } from 'react'; import { AppContentContainer } from '@app/App/App.styles'; import { useShuttingDown } from '@app/hooks'; @@ -69,7 +68,7 @@ export default function App() { const { t } = useTranslation('common', { useSuspense: false }); if (!window.WebGL2RenderingContext && !window.WebGLRenderingContext) { - Sentry.captureMessage('WebGL not supported by the browser', { extra: { userAgent: navigator.userAgent } }); + console.error(`WebGL not supported by the browser - userAgent: ${navigator.userAgent}`); setIsWebglNotSupported(true); setError(t('webgl-not-supported')); } diff --git a/src/App/sentryIgnore.ts b/src/App/sentryIgnore.ts index 87ba43f68..a1d5cc204 100644 --- a/src/App/sentryIgnore.ts +++ b/src/App/sentryIgnore.ts @@ -7,4 +7,3 @@ export const ALREADY_FETCHING = { METRICS, BALANCE, }; -export const IGNORE_FETCHING = Object.values(ALREADY_FETCHING); diff --git a/src/assets/tari-logo.tsx b/src/assets/tari-logo.tsx deleted file mode 100644 index b86f96ca9..000000000 --- a/src/assets/tari-logo.tsx +++ /dev/null @@ -1,56 +0,0 @@ -const TariLogo = () => ( - - - - - - - - - - - - - - - - -); - -export default TariLogo; diff --git a/src/assets/universe-logo.tsx b/src/assets/universe-logo.tsx deleted file mode 100644 index 7241f6a5e..000000000 --- a/src/assets/universe-logo.tsx +++ /dev/null @@ -1,39 +0,0 @@ -const UniverseLogo = () => ( - - - - - - - - - - - -); - -export default UniverseLogo; diff --git a/src/components/FieldErrorMessage/FieldErrorMessage.component.tsx b/src/components/FieldErrorMessage/FieldErrorMessage.component.tsx deleted file mode 100644 index 3a98ce6f8..000000000 --- a/src/components/FieldErrorMessage/FieldErrorMessage.component.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import type { FieldError } from 'react-hook-form'; - -import { FieldsErrors } from './FieldErrorMessage.constants'; -import type { FieldErrorMessageProps } from './FieldErrorMessage.types'; -import { Typography } from '@app/components/elements/Typography.tsx'; -import { useTranslation } from 'react-i18next'; -import { TFunction } from 'i18next'; - -export const getFieldError = (error: FieldError | undefined, t: TFunction<'translation', undefined>) => { - if (!error) return; - - const messageByType = FieldsErrors[error.type as keyof typeof FieldsErrors]; - if (messageByType) return t(messageByType); - - if (error.message) return error.message; - - return t('field-error-message.invalid'); -}; - -export const FieldErrorMessage = ({ error }: FieldErrorMessageProps) => { - const { t } = useTranslation('components', { useSuspense: false }); - return {getFieldError(error, t)}; -}; diff --git a/src/components/FieldErrorMessage/FieldErrorMessage.constants.ts b/src/components/FieldErrorMessage/FieldErrorMessage.constants.ts deleted file mode 100644 index d46f20b00..000000000 --- a/src/components/FieldErrorMessage/FieldErrorMessage.constants.ts +++ /dev/null @@ -1,8 +0,0 @@ -export const FieldsErrors = { - Required: 'field-error-message.required', - PasswordTooShort: 'field-error-message.password-too-short', - InvalidUrl: 'field-error-message.invalid-url', - InvalidEmail: 'field-error-message.invalid-email', - InvalidDate: 'field-error-message.invalid-date', - IntegersOnly: 'field-error-message.integers-only', -}; diff --git a/src/components/FieldErrorMessage/FieldErrorMessage.types.ts b/src/components/FieldErrorMessage/FieldErrorMessage.types.ts deleted file mode 100644 index eba9d4c96..000000000 --- a/src/components/FieldErrorMessage/FieldErrorMessage.types.ts +++ /dev/null @@ -1,5 +0,0 @@ -import type { FieldError } from 'react-hook-form'; - -export interface FieldErrorMessageProps { - error?: FieldError; -} diff --git a/src/components/FieldErrorMessage/index.ts b/src/components/FieldErrorMessage/index.ts deleted file mode 100644 index 5ec33337e..000000000 --- a/src/components/FieldErrorMessage/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { FieldErrorMessage } from './FieldErrorMessage.component'; -export type { FieldErrorMessageProps } from './FieldErrorMessage.types'; diff --git a/src/components/NumberInput/NumberInput.component.tsx b/src/components/NumberInput/NumberInput.component.tsx deleted file mode 100644 index d97645249..000000000 --- a/src/components/NumberInput/NumberInput.component.tsx +++ /dev/null @@ -1,98 +0,0 @@ -import { Control, Controller, FieldValues } from 'react-hook-form'; - -import { FieldErrorMessage } from '../FieldErrorMessage/FieldErrorMessage.component'; - -import { decimalRegex, integerRegex, percentageRegex } from './NumberInput.constants'; -import { NumberInputTypography } from './NumberInput.styles'; -import type { ControlledNumberInputProps, NumberInputProps, NumberInputType } from './NumberInput.types'; -import { Stack } from '@app/components/elements/Stack.tsx'; -import { Input } from '@app/components/elements/inputs/Input.tsx'; -import { ChangeEvent, ReactNode } from 'react'; -const valueParses: Record = { - int: integerRegex, - float: decimalRegex, - percentage: percentageRegex, -}; - -function InputAdornment({ children, onClick }: { children?: ReactNode; onClick?: () => void }) { - return ( -
- {children} -
- ); -} - -export const NumberInput = ({ - title, - value, - onChange, - error, - symbol = '$', - type = 'float', - maximum, - ...inputProps -}: NumberInputProps) => { - const validateChange = (event: ChangeEvent) => { - const newValue = event.target.value; - - if (onChange && (valueParses[type].test(newValue) || newValue === '')) onChange(event); - }; - return ( - - {title && ( - - {title} - - )} - - - validateChange({ - target: { value: String(maximum) }, - } as ChangeEvent) - } - > - MAX - - ) : ( - symbol && {symbol} - ) - } - {...inputProps} - /> - {error ? : null} - - - ); -}; -export const ControlledNumberInput = ({ - name, - rules, - control, - type = 'float', - ...inputProps -}: ControlledNumberInputProps) => ( - ( - { - onChange(Number(event.target.value)); - inputProps.onChange?.(event); - }} - error={error} - value={value} - type={type} - /> - )} - name={name} - control={control as Control} - rules={rules} - /> -); diff --git a/src/components/NumberInput/NumberInput.constants.ts b/src/components/NumberInput/NumberInput.constants.ts deleted file mode 100644 index d669842ad..000000000 --- a/src/components/NumberInput/NumberInput.constants.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const decimalRegex = /^\d*\.?\d*$/; -export const integerRegex = /^\d+$/; -export const percentageRegex = /(^100([.]0{1,2})?)$|(^\d{1,2}([.]\d{1,2})?)$/; diff --git a/src/components/NumberInput/NumberInput.styles.tsx b/src/components/NumberInput/NumberInput.styles.tsx deleted file mode 100644 index 864b241d9..000000000 --- a/src/components/NumberInput/NumberInput.styles.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { Typography } from '@app/components/elements/Typography.tsx'; -import styled from 'styled-components'; - -export const NumberInputTypography = styled(Typography)<{ component: string }>` - margin-bottom: 10px; - line-height: 135%; - display: inline-block; - color: ${({ theme }) => theme.palette.text.primary}; -`; diff --git a/src/components/NumberInput/NumberInput.types.ts b/src/components/NumberInput/NumberInput.types.ts deleted file mode 100644 index 6f132e6f6..000000000 --- a/src/components/NumberInput/NumberInput.types.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { ChangeEvent } from 'react'; -import type { Control, ControllerProps, FieldError, FieldPath, FieldValues } from 'react-hook-form'; -import { InputProps } from '@app/components/elements/inputs/Input.tsx'; - -export type NumberInputType = 'float' | 'int' | 'percentage'; - -export interface ControlledInputType { - name: FieldPath; - control: Control; - rules?: ControllerProps['rules']; - type?: NumberInputType; -} - -export type NumberInputProps = Partial> & { - title?: string; - error?: FieldError; - - onChange?: (event: ChangeEvent) => void; - symbol?: string; - maximum?: number; - type?: NumberInputType; -}; - -export interface ControlledNumberInputProps - extends ControlledInputType, - Omit {} diff --git a/src/components/NumberInput/index.ts b/src/components/NumberInput/index.ts deleted file mode 100644 index b64245253..000000000 --- a/src/components/NumberInput/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { NumberInput, ControlledNumberInput } from './NumberInput.component'; -export type { NumberInputProps, ControlledNumberInputProps } from './NumberInput.types'; diff --git a/src/components/ToastStack/Toast/Toast.tsx b/src/components/ToastStack/Toast/Toast.tsx index da96209aa..8a1a3652f 100644 --- a/src/components/ToastStack/Toast/Toast.tsx +++ b/src/components/ToastStack/Toast/Toast.tsx @@ -6,7 +6,7 @@ import { ToastType, useToastStore } from '../useToastStore'; import { Wrapper, CloseButton, ToastContent, ProgressCircle, Title, Text } from './styles'; import { useMotionValue } from 'motion/react'; -export interface Props { +interface ToastProps { id?: number | string; index?: number; title: string; @@ -16,14 +16,14 @@ export interface Props { type?: ToastType; } -export const Toast = ({ id, index, title, text, timeout = 4500, isHovered = false, type = 'default' }: Props) => { +export const Toast = ({ id, index, title, text, timeout = 4500, isHovered = false, type = 'default' }: ToastProps) => { const [show, setShow] = useState(false); const [positionVariant, setPositionVariant] = useState('hidden'); const progress = useMotionValue(0); const progressInterval = useRef(); const elapsedTimeRef = useRef(0); const lastUpdateRef = useRef(Date.now()); - const { removeToast } = useToastStore(); + const removeToast = useToastStore((s) => s.removeToast); const [finished, setFinished] = useState(false); const handleHide = useCallback((id: number | string = 0) => { diff --git a/src/components/ToastStack/useToastStore.tsx b/src/components/ToastStack/useToastStore.tsx index ab678bf6f..7889464c8 100644 --- a/src/components/ToastStack/useToastStore.tsx +++ b/src/components/ToastStack/useToastStore.tsx @@ -45,7 +45,3 @@ export const useToastStore = create()( export function addToast(toast: Toast) { return useToastStore.getState().addToast(toast); } - -export function removeToast(id: number | string) { - return useToastStore.getState().removeToast(id); -} diff --git a/src/components/elements/Tabs.styles.ts b/src/components/elements/Tabs.styles.ts deleted file mode 100644 index cd238b802..000000000 --- a/src/components/elements/Tabs.styles.ts +++ /dev/null @@ -1,36 +0,0 @@ -import styled from 'styled-components'; - -interface TabHeaderProps { - $active: boolean; -} - -export const TabsContainer = styled.div` - width: 800px; - height: 600px; -`; - -export const TabHeaders = styled.div` - display: flex; - justify-content: space-around; -`; - -export const TabHeader = styled.div` - padding: 10px 20px; - cursor: pointer; - font-weight: ${({ $active }) => ($active ? 'bold' : 'normal')}; - border-bottom: ${({ theme, $active }) => ($active ? `2px solid ${theme.palette.primary.main}` : 'none')}; - color: ${({ theme, $active }) => ($active ? theme.palette.primary.main : theme.palette.text.primary)}; - width: 100%; - text-align: center; - font-family: Poppins, sans-serif; - font-size: 15px; - - &:hover { - background-color: ${({ theme }) => theme.palette.action.hover}; - } -`; - -export const TabContent = styled.div` - border-top: 1px solid ${({ theme }) => theme.palette.divider}; - padding: 20px 0; -`; diff --git a/src/components/elements/Tabs.tsx b/src/components/elements/Tabs.tsx deleted file mode 100644 index e751369ae..000000000 --- a/src/components/elements/Tabs.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import React, { useState } from 'react'; -import { TabsContainer, TabHeaders, TabHeader, TabContent } from './Tabs.styles'; - -interface Tab { - label: string; - content: React.ReactNode; -} - -interface TabsProps { - tabs: Tab[]; -} - -const SettingsTabs: React.FC = ({ tabs }) => { - const [activeTab, setActiveTab] = useState(0); - - return ( - - - {tabs.map((tab, index) => ( - setActiveTab(index)}> - {tab.label} - - ))} - - {tabs[activeTab].content} - - ); -}; - -export { SettingsTabs }; diff --git a/src/components/elements/Typography.tsx b/src/components/elements/Typography.tsx index 1b718404e..0cfd36efb 100644 --- a/src/components/elements/Typography.tsx +++ b/src/components/elements/Typography.tsx @@ -4,7 +4,7 @@ import { DynamicTypography } from './styled'; export type TagVariants = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'span'; -export interface TypographyProps extends HTMLAttributes { +interface TypographyProps extends HTMLAttributes { variant?: TagVariants; children: ReactNode; fontFamily?: string; diff --git a/src/components/elements/buttons/IconButton.tsx b/src/components/elements/buttons/IconButton.tsx index 434739899..672aa7783 100644 --- a/src/components/elements/buttons/IconButton.tsx +++ b/src/components/elements/buttons/IconButton.tsx @@ -2,7 +2,7 @@ import { ButtonHTMLAttributes } from 'react'; import styled, { css } from 'styled-components'; import { ButtonSize } from './button.types.ts'; -export interface IconButtonProps extends ButtonHTMLAttributes { +interface IconButtonProps extends ButtonHTMLAttributes { size?: ButtonSize; } interface StyleProps { diff --git a/src/components/elements/buttons/SquaredButton.tsx b/src/components/elements/buttons/SquaredButton.tsx index 37eecaef2..853846b26 100644 --- a/src/components/elements/buttons/SquaredButton.tsx +++ b/src/components/elements/buttons/SquaredButton.tsx @@ -1,9 +1,13 @@ import { ButtonSquared } from './ExtendedButton.styles.ts'; import { ExtendedButtonProps } from './button.types.ts'; -export type SquaredButtonProps = ExtendedButtonProps; - -export const SquaredButton = ({ children, variant, color = 'grey', size = 'medium', ...props }: SquaredButtonProps) => { +export const SquaredButton = ({ + children, + variant, + color = 'grey', + size = 'medium', + ...props +}: ExtendedButtonProps) => { return ( {children} diff --git a/src/components/elements/buttons/TextButton.tsx b/src/components/elements/buttons/TextButton.tsx index 2bf63cfa8..821b7adff 100644 --- a/src/components/elements/buttons/TextButton.tsx +++ b/src/components/elements/buttons/TextButton.tsx @@ -1,8 +1,6 @@ import { StyledTextButton } from './ExtendedButton.styles.ts'; import { ExtendedButtonProps } from './button.types.ts'; -export type TextButtonProps = ExtendedButtonProps; - export const TextButton = ({ children, variant, @@ -10,7 +8,7 @@ export const TextButton = ({ colorIntensity, size = 'medium', ...props -}: TextButtonProps) => { +}: ExtendedButtonProps) => { return ( {children} diff --git a/src/components/elements/buttons/button.types.ts b/src/components/elements/buttons/button.types.ts index 20ea0a0a6..50dc17165 100644 --- a/src/components/elements/buttons/button.types.ts +++ b/src/components/elements/buttons/button.types.ts @@ -1,9 +1,9 @@ import { ButtonHTMLAttributes, ReactNode } from 'react'; import { ThemeColourGroup } from '@app/theme/palettes/colors.ts'; -export type ButtonVariant = 'primary' | 'secondary' | 'outlined' | 'gradient'; +type ButtonVariant = 'primary' | 'secondary' | 'outlined' | 'gradient'; +type ButtonColor = 'transparent' | 'primary' | 'secondary' | 'gradient' | 'error' | 'warning' | 'info' | 'grey'; export type ButtonSize = 'xs' | 'small' | 'medium' | 'large'; -export type ButtonColor = 'transparent' | 'primary' | 'secondary' | 'gradient' | 'error' | 'warning' | 'info' | 'grey'; export type IconPosition = 'end' | 'start' | 'hug'; diff --git a/src/components/elements/dialog/Dialog.styles.ts b/src/components/elements/dialog/Dialog.styles.ts index b1430fa19..d8749d321 100644 --- a/src/components/elements/dialog/Dialog.styles.ts +++ b/src/components/elements/dialog/Dialog.styles.ts @@ -2,11 +2,6 @@ import styled from 'styled-components'; import { FloatingOverlay } from '@floating-ui/react'; import { colorsAll } from '@app/theme/palettes/colors.ts'; -export const Wrapper = styled.div` - display: flex; - align-items: center; - justify-content: center; -`; export const ContentWrapper = styled.div<{ $unPadded?: boolean }>` background-color: ${({ theme }) => theme.palette.background.paper}; border-radius: ${({ theme }) => theme.shape.borderRadius.dialog}; diff --git a/src/components/elements/dialog/Dialog.tsx b/src/components/elements/dialog/Dialog.tsx index 966d79bb9..dbe731fd9 100644 --- a/src/components/elements/dialog/Dialog.tsx +++ b/src/components/elements/dialog/Dialog.tsx @@ -21,8 +21,8 @@ import { useMergeRefs, useRole, } from '@floating-ui/react'; -import { ContentWrapper, Overlay } from '@app/components/elements/dialog/Dialog.styles.ts'; import { useAppStateStore } from '@app/store/appStateStore.ts'; +import { ContentWrapper, Overlay } from './Dialog.styles.ts'; interface DialogOptions { open: boolean; @@ -30,11 +30,7 @@ interface DialogOptions { disableClose?: boolean; } -export function useDialog({ - open: controlledOpen, - onOpenChange: setControlledOpen, - disableClose = false, -}: DialogOptions) { +function useDialog({ open: controlledOpen, onOpenChange: setControlledOpen, disableClose = false }: DialogOptions) { const [labelId, setLabelId] = useState(); const [descriptionId, setDescriptionId] = useState(); const nodeId = useFloatingNodeId(); @@ -86,7 +82,7 @@ type ContextType = const DialogContext = createContext(null); -export const useDialogContext = () => { +const useDialogContext = () => { const context = useContext(DialogContext); if (context == null) { diff --git a/src/components/elements/inputs/Input.tsx b/src/components/elements/inputs/Input.tsx index 2ac93aa78..bb4538d6f 100644 --- a/src/components/elements/inputs/Input.tsx +++ b/src/components/elements/inputs/Input.tsx @@ -1,7 +1,7 @@ import { InputHTMLAttributes, ReactNode, useCallback, useState } from 'react'; import { InputWrapper, StyledInput, StyledInputLabel } from './Input.styles.ts'; -export interface InputProps extends InputHTMLAttributes { +interface InputProps extends InputHTMLAttributes { subIcon?: ReactNode; labelText?: string; endAdornment?: ReactNode; diff --git a/src/containers/floating/AutoUpdateDialog/UpdatedStatus.tsx b/src/containers/floating/AutoUpdateDialog/UpdatedStatus.tsx index f93d8f4b8..05eafeea5 100644 --- a/src/containers/floating/AutoUpdateDialog/UpdatedStatus.tsx +++ b/src/containers/floating/AutoUpdateDialog/UpdatedStatus.tsx @@ -3,7 +3,7 @@ import { Stack } from '@app/components/elements/Stack'; import { Typography } from '@app/components/elements/Typography.tsx'; import { ProgressWrapper } from '@app/containers/main/Dashboard/styles.ts'; -export interface UpdatedStatusProps { +interface UpdatedStatusProps { contentLength: number; downloaded: number; } diff --git a/src/containers/floating/Error/ErrorSnackbar.styles.ts b/src/containers/floating/Error/ErrorSnackbar.styles.ts deleted file mode 100644 index 0c1007150..000000000 --- a/src/containers/floating/Error/ErrorSnackbar.styles.ts +++ /dev/null @@ -1,40 +0,0 @@ -import styled from 'styled-components'; -import * as m from 'motion/react-m'; - -export const Wrapper = styled(m.div)` - position: fixed; - bottom: 20px; - display: flex; - align-items: center; - justify-content: center; - width: 100%; - z-index: 1000; -`; - -export const SnackWrapper = styled.div` - border-radius: ${({ theme }) => theme.shape.borderRadius.app}; - background-color: ${({ theme }) => theme.palette.error.main}; - max-width: 420px; - min-width: 300px; - width: auto; - max-height: 90px; - position: relative; - padding: 20px; - display: flex; -`; -export const ContentWrapper = styled.div` - display: flex; - color: ${({ theme }) => theme.palette.text.contrast}; - justify-content: space-between; - width: 100%; - font-size: 14px; - position: relative; - white-space: pre-wrap; -`; - -export const ButtonWrapper = styled.div` - position: absolute; - top: 4px; - color: ${({ theme }) => theme.palette.text.contrast}; - right: 4px; -`; diff --git a/src/containers/floating/Error/ErrorSnackbar.tsx b/src/containers/floating/Error/ErrorSnackbar.tsx deleted file mode 100644 index 6fb40385e..000000000 --- a/src/containers/floating/Error/ErrorSnackbar.tsx +++ /dev/null @@ -1,106 +0,0 @@ -import { useAppStateStore } from '@app/store/appStateStore'; -import { useCallback, useEffect, useState, MouseEvent } from 'react'; -import { IoClose } from 'react-icons/io5'; - -import { ButtonWrapper, ContentWrapper, SnackWrapper, Wrapper } from './ErrorSnackbar.styles.ts'; -import { AnimatePresence, easeIn, Variants } from 'motion/react'; -import { IconButton } from '@app/components/elements/buttons/IconButton.tsx'; -import { Typography } from '@app/components/elements/Typography.tsx'; - -import { - FloatingNode, - FloatingPortal, - useDismiss, - useFloating, - useFloatingNodeId, - useInteractions, - useRole, -} from '@floating-ui/react'; - -const transition = { - duration: 0.3, - ease: easeIn, -}; -const variants: Variants = { - hidden: { - y: 200, - opacity: 0, - ...transition, - }, - visible: { - y: 0, - opacity: 1, - ...transition, - }, -}; - -const AUTO_CLOSE_TIMEOUT = 5000; -export default function ErrorSnackbar() { - const [show, setShow] = useState(false); - const error = useAppStateStore((s) => s.error); - const setError = useAppStateStore((s) => s.setError); - const nodeId = useFloatingNodeId(); - const { context, refs } = useFloating({ - nodeId, - open: show, - onOpenChange: setShow, - }); - - const dismiss = useDismiss(context, { outsidePress: false, bubbles: false }); - const role = useRole(context); - - const { getFloatingProps } = useInteractions([dismiss, role]); - - const handleClose = useCallback((e?: MouseEvent) => { - e?.preventDefault(); - e?.stopPropagation(); - setError(undefined); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - - useEffect(() => { - setShow(Boolean(error && error?.length)); - }, [error]); - - useEffect(() => { - if (show) { - const closeTimeout = setTimeout(() => { - handleClose(); - }, AUTO_CLOSE_TIMEOUT); - - return () => { - clearTimeout(closeTimeout); - }; - } - }, [handleClose, show]); - - return ( - - - {show && ( - - - - - - - - - - {error} - - - - - )} - - - ); -} diff --git a/src/containers/floating/PaperWalletModal/sections/QRCodeSection/QRCodeSection.tsx b/src/containers/floating/PaperWalletModal/sections/QRCodeSection/QRCodeSection.tsx index 7d183b11a..8b90edaed 100644 --- a/src/containers/floating/PaperWalletModal/sections/QRCodeSection/QRCodeSection.tsx +++ b/src/containers/floating/PaperWalletModal/sections/QRCodeSection/QRCodeSection.tsx @@ -92,10 +92,6 @@ export default function QRCodeSection({ onDoneClick }: Props) { {t('qrcode.blackButton')} - - { - // {t('qrcode.textButton')} - } ); diff --git a/src/containers/floating/PaperWalletModal/sections/QRCodeSection/styles.ts b/src/containers/floating/PaperWalletModal/sections/QRCodeSection/styles.ts index f3baa5e11..346f8c57e 100644 --- a/src/containers/floating/PaperWalletModal/sections/QRCodeSection/styles.ts +++ b/src/containers/floating/PaperWalletModal/sections/QRCodeSection/styles.ts @@ -36,11 +36,6 @@ export const QRCodeWrapper = styled('div')` } `; -export const QRCodeImage = styled('img')` - display: block; - width: 150px; -`; - export const QRContentWrapper = styled('div')` display: flex; flex-direction: column; @@ -52,7 +47,7 @@ export const WarningText = styled('div')` font-weight: 600; height: 23px; - padding: 0px 12px 0px 10px; + padding: 0 12px 0 10px; display: flex; justify-content: center; diff --git a/src/containers/floating/PaperWalletModal/styles.ts b/src/containers/floating/PaperWalletModal/styles.ts index 251ab72c0..83886c713 100644 --- a/src/containers/floating/PaperWalletModal/styles.ts +++ b/src/containers/floating/PaperWalletModal/styles.ts @@ -1,7 +1,5 @@ import styled from 'styled-components'; -export const Wrapper = styled('div')``; - export const BlackButton = styled('button')` color: #c9eb00; text-align: center; @@ -13,7 +11,7 @@ export const BlackButton = styled('button')` font-weight: 800; border-radius: 49px; background: #000; - box-shadow: 28px 28px 77px 0px rgba(0, 0, 0, 0.1); + box-shadow: 28px 28px 77px 0 rgba(0, 0, 0, 0.1); width: 100%; height: 81px; transition: opacity 0.2s ease; @@ -39,15 +37,3 @@ export const BlackButton = styled('button')` pointer-events: none; } `; - -export const TextButton = styled('button')` - color: rgba(0, 0, 0, 0.75); - text-align: center; - font-size: 14px; - font-weight: 600; - line-height: 122%; - - &:hover { - text-decoration: underline; - } -`; diff --git a/src/containers/floating/Settings/SettingsModal.styles.ts b/src/containers/floating/Settings/SettingsModal.styles.ts index 6bead39e3..57a0b48c2 100644 --- a/src/containers/floating/Settings/SettingsModal.styles.ts +++ b/src/containers/floating/Settings/SettingsModal.styles.ts @@ -38,29 +38,6 @@ export const ContentContainer = styled.div` position: relative; `; -const transition = { - ease: 'linear', - duration: 0.25, -}; - -export const variants = { - initial: { - x: -15, - opacity: 0, - transition, - }, - exit: { - x: 20, - opacity: 0, - transition, - }, - visible: { - x: 0, - opacity: 1, - transition, - }, -}; - export const SectionWrapper = styled.div` max-width: 100%; display: flex; diff --git a/src/containers/floating/Settings/components/Card.component.tsx b/src/containers/floating/Settings/components/Card.component.tsx index fb3ffa220..e7db9d5df 100644 --- a/src/containers/floating/Settings/components/Card.component.tsx +++ b/src/containers/floating/Settings/components/Card.component.tsx @@ -2,7 +2,7 @@ import { ReactNode } from 'react'; import { CardItem, CardItemLabel, CardItemLabelValue, CardItemLabelWrapper, CardItemTitle } from './Settings.styles'; import { truncateMiddle } from '@app/utils/truncateString.ts'; -export interface CardComponentProps { +interface CardComponentProps { heading?: string; labels: { labelText: ReactNode; labelValue: string | number }[]; } diff --git a/src/containers/floating/Settings/sections/experimental/P2poolMarkup.tsx b/src/containers/floating/Settings/sections/experimental/P2poolMarkup.tsx index 3d162d3e7..aa3f60cb0 100644 --- a/src/containers/floating/Settings/sections/experimental/P2poolMarkup.tsx +++ b/src/containers/floating/Settings/sections/experimental/P2poolMarkup.tsx @@ -18,7 +18,7 @@ import { } from '../../components/SettingsGroup.styles'; import { invoke } from '@tauri-apps/api/core'; -export const ErrorTypography = styled(Typography)(({ theme }) => ({ +const ErrorTypography = styled(Typography)(({ theme }) => ({ color: theme.palette.error.main, // Prevent jumping when the error message appears minHeight: '14px', diff --git a/src/containers/floating/Settings/sections/releaseNotes/styles.ts b/src/containers/floating/Settings/sections/releaseNotes/styles.ts index a0e2d762f..1f991fe08 100644 --- a/src/containers/floating/Settings/sections/releaseNotes/styles.ts +++ b/src/containers/floating/Settings/sections/releaseNotes/styles.ts @@ -46,7 +46,7 @@ export const MarkdownWrapper = styled('div')<{ $showScrollBars?: boolean }>` overflow: hidden; overflow-y: auto; height: calc(70vh - 210px); - padding: 0px 0px 60px 0; + padding: 0 0 60px 0; @media (min-width: 1200px) { height: calc(80vh - 210px); @@ -125,15 +125,6 @@ export const MarkdownWrapper = styled('div')<{ $showScrollBars?: boolean }>` `} `; -export const LoadingText = styled('div')` - color: ${({ theme }) => theme.palette.text.secondary}; - font-size: 12px; - font-weight: 500; - line-height: 116.667%; - - padding: 20px 0; -`; - export const UpgradeButton = styled('button')` flex-shrink: 0; diff --git a/src/containers/floating/Settings/sections/wallet/SeedWordsMarkup/SeedWordsEdit.tsx b/src/containers/floating/Settings/sections/wallet/SeedWordsMarkup/SeedWordsEdit.tsx index 5428db9bd..9788f634c 100644 --- a/src/containers/floating/Settings/sections/wallet/SeedWordsMarkup/SeedWordsEdit.tsx +++ b/src/containers/floating/Settings/sections/wallet/SeedWordsMarkup/SeedWordsEdit.tsx @@ -14,20 +14,20 @@ import { Stack } from '@app/components/elements/Stack'; import { useTranslation } from 'react-i18next'; import { IconButton } from '@app/components/elements/buttons/IconButton.tsx'; -export interface SeedWordsEditProps { +interface SeedWordsEditProps { toggleEdit: () => Promise; seedWords: string[]; seedWordsFetching: boolean; } -export const WrapperForm = styled.form(() => ({ +const WrapperForm = styled.form(() => ({ display: 'flex', alignItems: 'flex-start', justifyContent: 'space-between', gap: '10px', })); -export const StyledTextArea = styled(TextArea)<{ $hasError: boolean }>(({ $hasError, theme }) => ({ +const StyledTextArea = styled(TextArea)<{ $hasError: boolean }>(({ $hasError, theme }) => ({ backgroundColor: theme.palette.background.default, width: '100%', borderRadius: '10px', @@ -37,16 +37,16 @@ export const StyledTextArea = styled(TextArea)<{ $hasError: boolean }>(({ $hasEr lineHeight: theme.typography.h6.lineHeight, })); -export const IconContainer = styled.div(({ theme }) => ({ +const IconContainer = styled.div(({ theme }) => ({ color: theme.palette.text.primary, })); -export const ErrorTypography = styled(Typography)(({ theme }) => ({ +const ErrorTypography = styled(Typography)(({ theme }) => ({ color: theme.palette.error.main, height: '14px', })); -export const GreyTypography = styled(Typography)(({ theme }) => ({ +const GreyTypography = styled(Typography)(({ theme }) => ({ color: theme.palette.text.secondary, height: '14px', })); diff --git a/src/containers/floating/Settings/sections/wallet/SeedWordsMarkup/index.ts b/src/containers/floating/Settings/sections/wallet/SeedWordsMarkup/index.ts deleted file mode 100644 index 4d22e3f5f..000000000 --- a/src/containers/floating/Settings/sections/wallet/SeedWordsMarkup/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './SeedWordsMarkup'; diff --git a/src/containers/floating/ShareRewardModal/styles.ts b/src/containers/floating/ShareRewardModal/styles.ts index f3ba9457f..76880c3f3 100644 --- a/src/containers/floating/ShareRewardModal/styles.ts +++ b/src/containers/floating/ShareRewardModal/styles.ts @@ -1,8 +1,6 @@ import * as m from 'motion/react-m'; import styled from 'styled-components'; -export const Wrapper = styled('div')``; - export const HeroImage = styled('img')` position: absolute; top: -66px; @@ -50,7 +48,7 @@ export const WinnerPill = styled('div')` border-radius: 131px; background: rgba(0, 0, 0, 0.1); - padding: 0px 12px; + padding: 0 12px; height: 28px; display: flex; @@ -61,7 +59,7 @@ export const WinnerPill = styled('div')` export const BlackButton = styled('button')` border-radius: 49px; background: #000; - box-shadow: 28px 28px 77px 0px rgba(0, 0, 0, 0.1); + box-shadow: 28px 28px 77px 0 rgba(0, 0, 0, 0.1); width: 100%; height: 81px; @@ -99,21 +97,8 @@ export const Copied = styled(m.div)` justify-content: center; `; -export const Text = styled('div')` - color: #000; - text-align: center; - font-size: 16.8px; - font-weight: 500; - line-height: 99.7%; - text-transform: uppercase; - - strong { - font-weight: 700; - } -`; - export const RewardWrapper = styled('div')` - padding: px 30px; + padding: 0 30px; display: flex; flex-direction: column; @@ -170,7 +155,6 @@ export const GemPill = styled('div')` right: 20px; transform: translateY(-50%); - color: #000; font-size: 17px; font-weight: 600; font-family: Poppins, sans-serif; diff --git a/src/containers/main/Dashboard/TribesView/TribesView.tsx b/src/containers/main/Dashboard/TribesView/TribesView.tsx deleted file mode 100644 index 11e4a9999..000000000 --- a/src/containers/main/Dashboard/TribesView/TribesView.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { useTranslation } from 'react-i18next'; -import VisualMode from '../components/VisualMode'; - -function TribesView() { - const { t } = useTranslation('tribes-view', { useSuspense: false }); - - return ( - <> -
{t('title')}
- - - ); -} - -export default TribesView; diff --git a/src/containers/main/Dashboard/components/VisualMode.tsx b/src/containers/main/Dashboard/components/VisualMode.tsx index 7dc22b9c9..ffb7ee233 100644 --- a/src/containers/main/Dashboard/components/VisualMode.tsx +++ b/src/containers/main/Dashboard/components/VisualMode.tsx @@ -13,7 +13,7 @@ import { SettingsGroupWrapper, } from '@app/containers/floating/Settings/components/SettingsGroup.styles'; -export const ErrorTypography = styled(Typography)(({ theme }) => ({ +const ErrorTypography = styled(Typography)(({ theme }) => ({ color: theme.palette.error.main, })); diff --git a/src/containers/main/SideBar/Miner/components/CustomPowerLevels/RangeInput.styles.ts b/src/containers/main/SideBar/Miner/components/CustomPowerLevels/RangeInput.styles.ts index d4764ddbe..bc117ab9b 100644 --- a/src/containers/main/SideBar/Miner/components/CustomPowerLevels/RangeInput.styles.ts +++ b/src/containers/main/SideBar/Miner/components/CustomPowerLevels/RangeInput.styles.ts @@ -1,8 +1,8 @@ import * as m from 'motion/react-m'; import styled, { css } from 'styled-components'; -export const SLIDER_WIDTH = 570; -export const SLIDER_THUMB_WIDTH = 30; +const SLIDER_WIDTH = 570; +const SLIDER_THUMB_WIDTH = 30; export const RangeInputHolder = styled.div<{ $disabled?: boolean }>` position: relative; diff --git a/src/containers/main/SideBar/Miner/components/Tile.tsx b/src/containers/main/SideBar/Miner/components/Tile.tsx index e0a25a41a..ba150b3b4 100644 --- a/src/containers/main/SideBar/Miner/components/Tile.tsx +++ b/src/containers/main/SideBar/Miner/components/Tile.tsx @@ -6,7 +6,7 @@ import { colorsAll } from '@app/theme/palettes/colors.ts'; import { SpinnerIcon } from '@app/components/elements/loaders/SpinnerIcon.tsx'; import { formatNumber, FormatPreset } from '@app/utils/formatters'; -export interface TileProps { +interface TileProps { title: string; stats: string; unit?: string; diff --git a/src/containers/main/SideBar/components/OrphanChainAlert/OrphanChainAlert.tsx b/src/containers/main/SideBar/components/OrphanChainAlert/OrphanChainAlert.tsx index e4da88cbb..bd72224e7 100644 --- a/src/containers/main/SideBar/components/OrphanChainAlert/OrphanChainAlert.tsx +++ b/src/containers/main/SideBar/components/OrphanChainAlert/OrphanChainAlert.tsx @@ -1,6 +1,6 @@ import { Typography } from '@app/components/elements/Typography'; import { useTranslation } from 'react-i18next'; -import { useEffect, useState } from 'react'; +import { memo, useEffect, useState } from 'react'; import { listen } from '@tauri-apps/api/event'; import { autoUpdate, safePolygon, useFloating, useHover, useInteractions } from '@floating-ui/react'; import { @@ -17,7 +17,7 @@ import tinkerEmoji from '@app/assets/icons/emoji/custom.png'; import { useUIStore } from '@app/store/useUIStore.ts'; import QuestionMarkSvg from '@app/components/svgs/QuestionMarkSvg.tsx'; -export const OrphanChainAlert = () => { +const OrphanChainAlert = memo(function OrphanChainAlert() { const { t } = useTranslation(['settings', 'mining-view'], { useSuspense: false }); const adminShow = useUIStore((s) => s.adminShow); const [isOrphanChain, setIsOrphanChain] = useState(false); @@ -74,6 +74,6 @@ export const OrphanChainAlert = () => { ); return isOrphanChain || adminShow === 'orphanChainWarning' ? alertMarkup : null; -}; +}); export default OrphanChainAlert; diff --git a/src/containers/main/SideBar/index.ts b/src/containers/main/SideBar/index.ts deleted file mode 100644 index 7e88f1230..000000000 --- a/src/containers/main/SideBar/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as SideBar } from './SideBar'; diff --git a/src/hooks/airdrop/stateHelpers/useAirdropTokensRefresh.ts b/src/hooks/airdrop/stateHelpers/useAirdropTokensRefresh.ts index d365bc05e..9cf7e9029 100644 --- a/src/hooks/airdrop/stateHelpers/useAirdropTokensRefresh.ts +++ b/src/hooks/airdrop/stateHelpers/useAirdropTokensRefresh.ts @@ -1,7 +1,7 @@ import { AirdropTokens, setAirdropTokens, useAirdropStore } from '@app/store/useAirdropStore'; import { useEffect } from 'react'; -export async function fetchAirdropTokens(airdropApiUrl: string, airdropTokens: AirdropTokens) { +async function fetchAirdropTokens(airdropApiUrl: string, airdropTokens: AirdropTokens) { const response = await fetch(`${airdropApiUrl}/auth/local/refresh`, { method: 'POST', headers: { diff --git a/src/hooks/airdrop/stateHelpers/useGetReferralQuestPoints.ts b/src/hooks/airdrop/stateHelpers/useGetReferralQuestPoints.ts index 9cd7d9dbc..327971a53 100644 --- a/src/hooks/airdrop/stateHelpers/useGetReferralQuestPoints.ts +++ b/src/hooks/airdrop/stateHelpers/useGetReferralQuestPoints.ts @@ -2,7 +2,7 @@ import { useEffect } from 'react'; import { useAirdropRequest } from '../utils/useHandleRequest'; import { useAirdropStore } from '@app/store/useAirdropStore'; -export enum QuestNames { +enum QuestNames { MinerReceivedGift = 'miner-received-gift', MinerQuestReferral = 'quest-download-referral', } diff --git a/src/hooks/helpers/index.ts b/src/hooks/helpers/index.ts index 55a787cb7..41fe3cf8b 100644 --- a/src/hooks/helpers/index.ts +++ b/src/hooks/helpers/index.ts @@ -1,4 +1,3 @@ export * from './useCopyToClipboard.ts'; export * from './useDetectMode.ts'; export * from './useInterval.ts'; -export * from './useKeyboardEvent.ts'; diff --git a/src/hooks/helpers/useKeyboardEvent.ts b/src/hooks/helpers/useKeyboardEvent.ts deleted file mode 100644 index 27a66abba..000000000 --- a/src/hooks/helpers/useKeyboardEvent.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { useCallback, useEffect } from 'react'; - -interface Props { - keys: KeyboardEvent['key'][]; - callback: () => void; -} -export function useKeyboardEvent({ keys, callback }: Props) { - const keyDownFn = useCallback( - (event: KeyboardEvent) => { - if (keys.includes(event.key)) { - callback(); - } - }, - [callback, keys] - ); - - useEffect(() => { - document.addEventListener('keydown', keyDownFn); - return () => { - document.removeEventListener('keydown', keyDownFn); - }; - }, [keyDownFn]); -} diff --git a/src/store/useAirdropStore.ts b/src/store/useAirdropStore.ts index 8c1b31ae9..2efef2953 100644 --- a/src/store/useAirdropStore.ts +++ b/src/store/useAirdropStore.ts @@ -4,7 +4,6 @@ import { handleRefreshAirdropTokens } from '@app/hooks/airdrop/stateHelpers/useA export const GIFT_GEMS = 5000; export const REFERRAL_GEMS = 5000; -export const MAX_GEMS = 10000; // Helpers function parseJwt(token: string): TokenResponse { @@ -55,7 +54,7 @@ export interface UserPoints { referralCount?: ReferralCount; } -export interface User { +interface User { is_bot: boolean; twitter_followers: number; id: string; @@ -102,7 +101,7 @@ export interface AirdropTokens { expiresAt?: number; } -export interface BackendInMemoryConfig { +interface BackendInMemoryConfig { airdropUrl: string; airdropApiUrl: string; airdropTwitterAuthUrl: string; @@ -110,7 +109,7 @@ export interface BackendInMemoryConfig { type AnimationType = 'GoalComplete' | 'FriendAccepted' | 'BonusGems'; -export interface ReferralQuestPoints { +interface ReferralQuestPoints { pointsPerReferral: number; pointsForClaimingReferral: number; } @@ -214,7 +213,7 @@ export const setAirdropTokens = async (airdropTokens?: AirdropTokens) => { } }; -export const getExistingTokens = async () => { +const getExistingTokens = async () => { const existingTokensStore = localStorage.getItem('airdrop-store'); let existingTokens: AirdropTokens | undefined = undefined; if (existingTokensStore) { @@ -252,7 +251,7 @@ export const getExistingTokens = async () => { } }; -export const fetchBackendInMemoryConfig = async () => { +const fetchBackendInMemoryConfig = async () => { let backendInMemoryConfig: BackendInMemoryConfig | undefined = undefined; try { diff --git a/src/store/useShellOfSecretsStore.ts b/src/store/useShellOfSecretsStore.ts index 1a8bfcecb..044f5c7b4 100644 --- a/src/store/useShellOfSecretsStore.ts +++ b/src/store/useShellOfSecretsStore.ts @@ -14,7 +14,7 @@ export interface ReferralsResponse { type WsConnectionStateString = 'up' | 'off' | 'error'; -export interface WsConnectionEvent { +interface WsConnectionEvent { state: WsConnectionStateString; error?: string; } diff --git a/src/store/useUIStore.ts b/src/store/useUIStore.ts index eb7c26789..4dbb5e42a 100644 --- a/src/store/useUIStore.ts +++ b/src/store/useUIStore.ts @@ -4,9 +4,9 @@ import { Theme } from '@app/theme/types.ts'; import { setAnimationProperties } from '@app/visuals.ts'; import { useAppConfigStore } from './useAppConfigStore.ts'; -export const DIALOG_TYPES = ['logs', 'restart', 'autoUpdate', 'releaseNotes', 'ludicrousConfirmation'] as const; -type DialogTypeTuple = typeof DIALOG_TYPES; -export type DialogType = DialogTypeTuple[number]; +const _DIALOG_TYPES = ['logs', 'restart', 'autoUpdate', 'releaseNotes', 'ludicrousConfirmation'] as const; +type DialogTypeTuple = typeof _DIALOG_TYPES; +type DialogType = DialogTypeTuple[number]; interface State { theme: Theme; diff --git a/src/theme/palettes/colorsAlpha.ts b/src/theme/palettes/colorsAlpha.ts index 1f46fbde1..1a1a563f8 100644 --- a/src/theme/palettes/colorsAlpha.ts +++ b/src/theme/palettes/colorsAlpha.ts @@ -93,5 +93,3 @@ export const colorsAlpha = { }; export type ColoursAlpha = typeof colorsAlpha; -export type ThemeColourAlphaGroup = keyof ColoursAlpha; -// green 150: '#15D811', diff --git a/src/theme/types.ts b/src/theme/types.ts index bf90ad0a5..e027b8c3e 100644 --- a/src/theme/types.ts +++ b/src/theme/types.ts @@ -1,11 +1,11 @@ import { Colours } from '@app/theme/palettes/colors.ts'; import { ColoursAlpha } from '@app/theme/palettes/colorsAlpha.ts'; -export const THEME_TYPES = ['light', 'dark'] as const; -type ThemeTuple = typeof THEME_TYPES; +const _THEME_TYPES = ['light', 'dark'] as const; +type ThemeTuple = typeof _THEME_TYPES; export type Theme = ThemeTuple[number]; -export const COLOUR_TYPES = [ +const _COLOUR_TYPES = [ 'main', 'dark', 'light', @@ -18,11 +18,11 @@ export const COLOUR_TYPES = [ 'accent', 'default', ] as const; -type ColourTuple = typeof COLOUR_TYPES; +type ColourTuple = typeof _COLOUR_TYPES; type ColourKey = ColourTuple[number]; -export type Colour = Partial>; -export type Gradients = Partial>; +type Colour = Partial>; +type Gradients = Partial>; export interface ThemePalette { mode: Theme; @@ -32,7 +32,7 @@ export interface ThemePalette { gradients: Gradients; } -export interface Palette { +interface Palette { base: string; contrast: string; contrastAlpha: string; diff --git a/src/types/app-status.ts b/src/types/app-status.ts index 8bbe7b453..ea2303139 100644 --- a/src/types/app-status.ts +++ b/src/types/app-status.ts @@ -7,7 +7,7 @@ export interface TorConfig { bridges: string[]; } -export interface WindowSettings { +interface WindowSettings { width: number; height: number; x: number; @@ -55,7 +55,7 @@ export enum ExternalDependencyStatus { Unknown = 'Unknown', } -export interface Manufacturer { +interface Manufacturer { name: string; logo: string; url: string; @@ -102,18 +102,18 @@ export interface P2poolStatsResult { sha3x_stats: P2poolStats; } -export interface P2poolConnectionInfo { +interface P2poolConnectionInfo { listener_addresses: string[]; connected_peers: number; network_info: P2poolNetworkInfo; } -export interface P2poolNetworkInfo { +interface P2poolNetworkInfo { num_peers: number; connection_counters: P2poolConnectionCounters; } -export interface P2poolConnectionCounters { +interface P2poolConnectionCounters { pending_incoming: number; pending_outgoing: number; established_incoming: number; @@ -128,7 +128,7 @@ export interface P2poolStats { p2pool_block_stats: P2poolBlockStats; } -export interface PeerInfo { +interface PeerInfo { version: number; peer_id?: string; current_sha3x_height: number; @@ -153,17 +153,17 @@ export interface P2poolConnections { peers: ConnectedPeerInfo[]; } -export interface P2poolSquadDetails { +interface P2poolSquadDetails { id: string; name: string; } -export interface P2poolBlockStats { +interface P2poolBlockStats { accepted: number; rejected: number; submitted: number; } -export enum HardwareVendor { +enum HardwareVendor { Nvidia = 'Nvidia', Amd = 'Amd', Intel = 'Intel', @@ -171,12 +171,12 @@ export enum HardwareVendor { Unknown = 'Unknown', } -export interface DeviceStatus { +interface DeviceStatus { is_available: boolean; is_reader_implemented: boolean; } -export interface DeviceParameters { +interface DeviceParameters { usage_percentage: number; current_temperature: number; max_temperature: number; @@ -187,12 +187,6 @@ export interface PublicDeviceParameters { status: DeviceStatus; parameters?: DeviceParameters; } -export interface HardwareParameters { - label: string; - usage_percentage: number; - current_temperature: number; - max_temperature: number; -} export interface CpuMinerStatus { is_mining: boolean; @@ -201,7 +195,7 @@ export interface CpuMinerStatus { connection: CpuMinerConnectionStatus; } -export interface CpuMinerConnectionStatus { +interface CpuMinerConnectionStatus { is_connected: boolean; } diff --git a/src/types/invoke.ts b/src/types/invoke.d.ts similarity index 100% rename from src/types/invoke.ts rename to src/types/invoke.d.ts diff --git a/src/types/ws.ts b/src/types/ws.ts index 0fef72acb..6ca95d59c 100644 --- a/src/types/ws.ts +++ b/src/types/ws.ts @@ -6,7 +6,7 @@ export enum WebsocketEventNames { MINING_STATUS_USER_UPDATE = 'mining_status_user_update', } -export interface QuestCompletedEvent { +interface QuestCompletedEvent { name: WebsocketEventNames.COMPLETED_QUEST; data: { questName: string; @@ -30,7 +30,7 @@ export interface CrewMember { active?: boolean; } -export interface MiningStatusCrewUpdateEvent { +interface MiningStatusCrewUpdateEvent { name: WebsocketEventNames.MINING_STATUS_CREW_UPDATE; data: { totalTimeBonusMs: number; @@ -38,21 +38,21 @@ export interface MiningStatusCrewUpdateEvent { }; } -export interface MiningStatusUserUpdateEvent { +interface MiningStatusUserUpdateEvent { name: WebsocketEventNames.MINING_STATUS_USER_UPDATE; data: { totalTimeBonusMs: number; }; } -export interface MiningStatusCrewDisconnectedEvent { +interface MiningStatusCrewDisconnectedEvent { name: WebsocketEventNames.MINING_STATUS_CREW_DISCONNECTED; data: { crewMemberId: string; }; } -export interface ReferralInstallRewardEvent { +interface ReferralInstallRewardEvent { name: WebsocketEventNames.REFERRAL_INSTALL_REWARD; } diff --git a/src/utils/debounce.ts b/src/utils/debounce.ts deleted file mode 100644 index 2d745f534..000000000 --- a/src/utils/debounce.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Custom debounce function -export function debounce(func: (...args: unknown[]) => void, wait: number) { - let timeout: NodeJS.Timeout; - return (...args: unknown[]) => { - clearTimeout(timeout); - timeout = setTimeout(() => func(...args), wait); - }; -} diff --git a/vite.config.ts b/vite.config.ts index c347c83a2..a81cedc09 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -6,7 +6,17 @@ import eslintPlugin from '@nabla/vite-plugin-eslint'; const plugins: UserConfig['plugins'] = [ react({ - babel: { plugins: ['styled-components'] }, + babel: { + plugins: [ + [ + 'babel-plugin-styled-components', + { + displayName: true, + fileName: false, + }, + ], + ], + }, }), tsconfigPaths(), eslintPlugin({ eslintOptions: { cache: false } }), From 0a08824980512b42d6fcc4957c97c4b5c6290149 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Papie=C5=BC?= Date: Tue, 25 Feb 2025 16:28:09 +0100 Subject: [PATCH 2/4] fix: missing update dialog when auto update disabled (#1547) #1546 Description --- When `auto_update` is disabled, the update dialog did not appear during the initial app launch. This issue arose because the `AutoUpdateDialog` was setting up listeners for the `updates_event `after the event had already been emitted from the backend. **Solution**: I resolved this issue by moving the `initialize_periodic_updates` function to the `frontend_ready` command. This change ensures that the frontend is already prepared to handle the event appropriately. Testing --- Run the app when newer version is available and `auto_update` is disabled. You should see the update dialog: ![image](https://github.com/user-attachments/assets/0aebfc05-ea58-4272-94ee-6a499e10ad25) ## Summary by CodeRabbit This release refines how the app manages updates for a smoother experience. Key changes include: - **Refactor** - Enhanced the update process with improved error feedback to better inform users if issues arise. - **Chores** - Removed the automatic background update checks at startup, streamlining the launch process. --- src-tauri/src/commands.rs | 8 ++++++++ src-tauri/src/main.rs | 5 ----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index d8913868f..2884e3737 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -208,6 +208,14 @@ pub async fn frontend_ready(app: tauri::AppHandle) { .emit("app_ready", setup_complete_value) .expect("Could not emit event 'app_ready'"); + if let Err(e) = state + .updates_manager + .init_periodic_updates(app.clone()) + .await + { + error!(target: LOG_TARGET, "Failed to init periodic updates: {}", e); + } + let has_missing = missing_dependencies.is_some(); let external_dependencies = missing_dependencies.clone(); if has_missing { diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index fa5619b4a..0c9b561e6 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -338,11 +338,6 @@ async fn setup_inner( return Ok(()); } - state - .updates_manager - .init_periodic_updates(app.clone()) - .await?; - let data_dir = app .path() .app_local_data_dir() From 8cd5697873e0f9c3ea6f9587df722178a2d2acfe Mon Sep 17 00:00:00 2001 From: Simon Hill Date: Tue, 25 Feb 2025 11:05:13 -0700 Subject: [PATCH 3/4] chore: release notes (#1567) Description Release notes ## Summary by CodeRabbit - **New Features** - Introduced Dark Mode, offering a refreshed visual experience with an interface optimized for low-light environments. - **Upcoming Improvements** - Announced future updates addressing wallet notification counts, restart stability, system responsiveness, and recovery from sleep mode disruptions. --- CHANGELOG.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b46d7e1ca..3ed2d1aac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,21 @@ +# πŸŒ‘ TARI UNIVERSE v0.9.809: The Dawn of Dork Mode + +_February 26, 2025_ + +## πŸ‘‹ Hello Everyone, +The wait is overβ€”**Dark (Dork!) Mode** is here! πŸŽ‰ Welcome our Prince and Princesses of Darkness. Our fellow Darth Vaders, Cruella De Vils, and Voldemorts. Dark mode is for you. Welcome home πŸ’œπŸŒš + +✨ You can enable **Dark Mode** in **βš™οΈ Settings**. + +## πŸ”œ Coming Soon +πŸ”΅ Wallet unread wins count fix +πŸ”„ Fixing restart issues – Sometimes, the app doesn’t restart properly after an auto-update +🐞 More deadlock fixes – Addressing sync freezes on startup +πŸ’» Laptop sleep mode recovery – UX handling here needs review +πŸš€ A surprise… + +--- + # TARI UNIVERSE v0.9.807: Hotfix Released! _February 18, 2025_ From 1157f5100676a307ae524ea9efedd9fc82d86b5e Mon Sep 17 00:00:00 2001 From: Brian Pearce Date: Tue, 25 Feb 2025 19:05:49 +0100 Subject: [PATCH 4/4] chore(auto-update): auto-update on v0.9.809 (#1568) Description --- Rolling out v0.9.809 via auto-update ## Summary by CodeRabbit - **Chores** - Updated the Universe application release to version 0.9.809. - Refreshed publication date and distribution package details. - Improved download links and verifications across all supported platforms for enhanced user confidence. --- .updater/alpha-latest.json | 26 +++++++++++++------------- .updater/latest.json | 26 +++++++++++++------------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/.updater/alpha-latest.json b/.updater/alpha-latest.json index 96187c067..b4c4911f0 100644 --- a/.updater/alpha-latest.json +++ b/.updater/alpha-latest.json @@ -1,27 +1,27 @@ { - "version": "0.9.808", + "version": "0.9.809", "notes": "Tari Universe - See the assets to download this version and install", - "pub_date": "2025-02-20T11:04:51.714Z", + "pub_date": "2025-02-24T13:34:08.181Z", "platforms": { "linux-x86_64": { - "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOFFSNGdUVTlkb0VZQ0haa3psT1VNSkRWVm5INFZYVnJmaTZGVStJSFA2NnovUkVJQ3hOcGhFSDZBTGtJYkxoekNHQWVnd2FzaytPYk1aZjdJeDVKd0FVPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzQwMDQ4NDU0CWZpbGU6VGFyaSBVbml2ZXJzZV8wLjkuODA4X2FtZDY0LkFwcEltYWdlCnBKZjhITGQzSmV4eUhmdVRzbTArY3FiZXFFOGwyQXJiYU1UekcrUUdDWG9namZKQ0k3YkM2MHZ5bXMvbmZQNVNUZ0gwNVNaeENEZ3prRmlKQjVVOERnPT0K", - "url": "https://github.com/tari-project/universe/releases/download/v0.9.808/Tari.Universe_0.9.808_amd64.AppImage" + "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOGJOb0FFc0ZsOEpDUStWUGJKMnIwTGQ1Nm05ajJVeVczQTVHKzBVZnUzUlVkblBrRGIyU0FoTHNjMTJpUEhPNXA0TmEzdzJwOEc1cEFTYkFGVDc2cnd3PQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzQwNDAzMDc0CWZpbGU6VGFyaSBVbml2ZXJzZV8wLjkuODA5X2FtZDY0LkFwcEltYWdlCmFMZUY2V1IxQW4xbnJyNHFEWEd2ZlZPZFVBZEU5eklGNmt3ejVqSEpWdDYxaDZrdkJnWVB4d1Nkekllc2VxTmNjSU9rU2sxcDNkaXhDM1BzMEJnY0JRPT0K", + "url": "https://github.com/tari-project/universe/releases/download/v0.9.809/Tari.Universe_0.9.809_amd64.AppImage" }, "linux-aarch64": { - "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOGNyQytnNXphYmJoVVRnZmJ1WENKS1hLRXBUa0ZPZDlIZTIvSzNQdDE2SEg0NnYreTlvZDJrdjdKRjkwWmlrRUczNU84QUg4TjJLa3lHbWxLemwxQmdVPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzQwMDQ5MDE1CWZpbGU6VGFyaSBVbml2ZXJzZV8wLjkuODA4X2FhcmNoNjQuQXBwSW1hZ2UKcEFDSkd6cTJINXZyZ3NkQldRRk5pQmNxZjBSdi9WU3RTMDM2cVhYektwRXUwOTNhSmpGdjREa2FnZUJaYTZrS2lpSWxYSmpYZ3FiMEljWE5YdFpvRFE9PQo=", - "url": "https://github.com/tari-project/universe/releases/download/v0.9.808/Tari.Universe_0.9.808_aarch64.AppImage" + "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOGZmWnhyMU9lbzdMWFlhSHVjRDRCZ1ZHTnRoRnJPNDhrazZjeWw3UnNlTXFuQ2g0MWhzWWN2RVBqc0RoeW43NWIrN3F4YmJnOWNhZlNoREt2ejF2UHc0PQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzQwNDAzNTEwCWZpbGU6VGFyaSBVbml2ZXJzZV8wLjkuODA5X2FhcmNoNjQuQXBwSW1hZ2UKMWI3djhJN1VUS0JIQmFabEh0WUFhUVBJb0FMZVRxQ3RFQ2lRL1p1YUY0Mmp4OGg5TWd2eVZyS2xXQmcybHBRd0cvV20xR1ZVRjAvWTZoVVBhSHdDQkE9PQo=", + "url": "https://github.com/tari-project/universe/releases/download/v0.9.809/Tari.Universe_0.9.809_aarch64.AppImage" }, "darwin-aarch64": { - "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOFFmdklLb21HYmFXUDRVV2N5UFVoaEErcEpUNXg3M3FaUnVxOVozVGp1aEdWeVk2TEJQekpiUU93Q0RxcFIraHloWGoxQ2lkTnRBcVg4UFJra085U0EwPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzQwMDQ5MTc0CWZpbGU6VGFyaSBVbml2ZXJzZS5hcHAudGFyLmd6CnRuczQ4aWRsT3VoMFI4b2hldXFvMk1Zb05qdG13Y2VNallJWXpQRjIycjVJQThIcmMwTnFFZ1hHZHVIRm8wWTBsa2w1MUxramxYdXBBb0ZwVkNYb0JnPT0K", - "url": "https://github.com/tari-project/universe/releases/download/v0.9.808/Tari.Universe_universal.app.tar.gz" + "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOGFZQ3RLVGdDdk1IclJ4VkUvQmJ1Q2xGdmNDajd6ZnlaNFNVV0hlNXFyQjEzdG5kVVFXcUVqTUNKalFTdFRCMnhKK002cTc4TzRWcDZ0MWFhSTIyY0FBPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzQwNDAzNzA5CWZpbGU6VGFyaSBVbml2ZXJzZS5hcHAudGFyLmd6CmMvbWQ1YVc4TVQ4VFlLS0JWeWhEOXdVaTJGSDRhLy9Pa05UV2hjMGhTWjlSN0lQYS9ZUXp5OTFheFZoOXNkMzZ5b1lMOU9GWGV4K1BlQW9XOTI5dEN3PT0K", + "url": "https://github.com/tari-project/universe/releases/download/v0.9.809/Tari.Universe_universal.app.tar.gz" }, "darwin-x86_64": { - "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOFFmdklLb21HYmFXUDRVV2N5UFVoaEErcEpUNXg3M3FaUnVxOVozVGp1aEdWeVk2TEJQekpiUU93Q0RxcFIraHloWGoxQ2lkTnRBcVg4UFJra085U0EwPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzQwMDQ5MTc0CWZpbGU6VGFyaSBVbml2ZXJzZS5hcHAudGFyLmd6CnRuczQ4aWRsT3VoMFI4b2hldXFvMk1Zb05qdG13Y2VNallJWXpQRjIycjVJQThIcmMwTnFFZ1hHZHVIRm8wWTBsa2w1MUxramxYdXBBb0ZwVkNYb0JnPT0K", - "url": "https://github.com/tari-project/universe/releases/download/v0.9.808/Tari.Universe_universal.app.tar.gz" + "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOGFZQ3RLVGdDdk1IclJ4VkUvQmJ1Q2xGdmNDajd6ZnlaNFNVV0hlNXFyQjEzdG5kVVFXcUVqTUNKalFTdFRCMnhKK002cTc4TzRWcDZ0MWFhSTIyY0FBPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzQwNDAzNzA5CWZpbGU6VGFyaSBVbml2ZXJzZS5hcHAudGFyLmd6CmMvbWQ1YVc4TVQ4VFlLS0JWeWhEOXdVaTJGSDRhLy9Pa05UV2hjMGhTWjlSN0lQYS9ZUXp5OTFheFZoOXNkMzZ5b1lMOU9GWGV4K1BlQW9XOTI5dEN3PT0K", + "url": "https://github.com/tari-project/universe/releases/download/v0.9.809/Tari.Universe_universal.app.tar.gz" }, "windows-x86_64": { - "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOFdPUjRhanlKbE5pdEJqU09FTDlpL1E4N2NneFF3VGs5MDdrVCtiRVVGeG9HcWZhV1I0SDBVYk1WQ2l2NlA5cTdaczFJVzhidG16dzlUVDdUUmhrUEFFPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzQwMDQ5NDg2CWZpbGU6VGFyaSBVbml2ZXJzZV8wLjkuODA4X3g2NF9lbi1VUy5tc2kuemlwCnRQSlY0S2NCNkY5ZGZDSjcydks1OTBLOS9TZjJPcFQ0YTNuaEh6Ym5lQ2R6ejFIdERYRmFxeWFWVmRjSVFvYWtVWGJrMU5CeldEVWpqc1I2Z3U1TUFnPT0K", - "url": "https://github.com/tari-project/universe/releases/download/v0.9.808/Tari.Universe_0.9.808_x64_en-US.msi.zip" + "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOGYwcGJjcFRQY0hxYTZsYUlQeWIxclFxdkNucjRTVGxYdFVTUUNoL1RjQkg4ZVdMaFhqK29vNElaMzBjTktTRnBzUkRyZFllWFZBbGtSVzJCMDJSMWdvPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzQwNDA0MDQxCWZpbGU6VGFyaSBVbml2ZXJzZV8wLjkuODA5X3g2NF9lbi1VUy5tc2kuemlwCmpPb3B4OW9MUEc1cFN1dTRRY0hDTmdYSW5TQWxjS1ZSdlFkS3RDM1cydWJVRzlMbS83NEhZRjQ4NlVkYzhESElSZ3ZUZ0hEKzdENDcyWnVDSk9PVkJBPT0K", + "url": "https://github.com/tari-project/universe/releases/download/v0.9.809/Tari.Universe_0.9.809_x64_en-US.msi.zip" } } -} \ No newline at end of file +} diff --git a/.updater/latest.json b/.updater/latest.json index 96187c067..b4c4911f0 100644 --- a/.updater/latest.json +++ b/.updater/latest.json @@ -1,27 +1,27 @@ { - "version": "0.9.808", + "version": "0.9.809", "notes": "Tari Universe - See the assets to download this version and install", - "pub_date": "2025-02-20T11:04:51.714Z", + "pub_date": "2025-02-24T13:34:08.181Z", "platforms": { "linux-x86_64": { - "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOFFSNGdUVTlkb0VZQ0haa3psT1VNSkRWVm5INFZYVnJmaTZGVStJSFA2NnovUkVJQ3hOcGhFSDZBTGtJYkxoekNHQWVnd2FzaytPYk1aZjdJeDVKd0FVPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzQwMDQ4NDU0CWZpbGU6VGFyaSBVbml2ZXJzZV8wLjkuODA4X2FtZDY0LkFwcEltYWdlCnBKZjhITGQzSmV4eUhmdVRzbTArY3FiZXFFOGwyQXJiYU1UekcrUUdDWG9namZKQ0k3YkM2MHZ5bXMvbmZQNVNUZ0gwNVNaeENEZ3prRmlKQjVVOERnPT0K", - "url": "https://github.com/tari-project/universe/releases/download/v0.9.808/Tari.Universe_0.9.808_amd64.AppImage" + "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOGJOb0FFc0ZsOEpDUStWUGJKMnIwTGQ1Nm05ajJVeVczQTVHKzBVZnUzUlVkblBrRGIyU0FoTHNjMTJpUEhPNXA0TmEzdzJwOEc1cEFTYkFGVDc2cnd3PQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzQwNDAzMDc0CWZpbGU6VGFyaSBVbml2ZXJzZV8wLjkuODA5X2FtZDY0LkFwcEltYWdlCmFMZUY2V1IxQW4xbnJyNHFEWEd2ZlZPZFVBZEU5eklGNmt3ejVqSEpWdDYxaDZrdkJnWVB4d1Nkekllc2VxTmNjSU9rU2sxcDNkaXhDM1BzMEJnY0JRPT0K", + "url": "https://github.com/tari-project/universe/releases/download/v0.9.809/Tari.Universe_0.9.809_amd64.AppImage" }, "linux-aarch64": { - "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOGNyQytnNXphYmJoVVRnZmJ1WENKS1hLRXBUa0ZPZDlIZTIvSzNQdDE2SEg0NnYreTlvZDJrdjdKRjkwWmlrRUczNU84QUg4TjJLa3lHbWxLemwxQmdVPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzQwMDQ5MDE1CWZpbGU6VGFyaSBVbml2ZXJzZV8wLjkuODA4X2FhcmNoNjQuQXBwSW1hZ2UKcEFDSkd6cTJINXZyZ3NkQldRRk5pQmNxZjBSdi9WU3RTMDM2cVhYektwRXUwOTNhSmpGdjREa2FnZUJaYTZrS2lpSWxYSmpYZ3FiMEljWE5YdFpvRFE9PQo=", - "url": "https://github.com/tari-project/universe/releases/download/v0.9.808/Tari.Universe_0.9.808_aarch64.AppImage" + "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOGZmWnhyMU9lbzdMWFlhSHVjRDRCZ1ZHTnRoRnJPNDhrazZjeWw3UnNlTXFuQ2g0MWhzWWN2RVBqc0RoeW43NWIrN3F4YmJnOWNhZlNoREt2ejF2UHc0PQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzQwNDAzNTEwCWZpbGU6VGFyaSBVbml2ZXJzZV8wLjkuODA5X2FhcmNoNjQuQXBwSW1hZ2UKMWI3djhJN1VUS0JIQmFabEh0WUFhUVBJb0FMZVRxQ3RFQ2lRL1p1YUY0Mmp4OGg5TWd2eVZyS2xXQmcybHBRd0cvV20xR1ZVRjAvWTZoVVBhSHdDQkE9PQo=", + "url": "https://github.com/tari-project/universe/releases/download/v0.9.809/Tari.Universe_0.9.809_aarch64.AppImage" }, "darwin-aarch64": { - "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOFFmdklLb21HYmFXUDRVV2N5UFVoaEErcEpUNXg3M3FaUnVxOVozVGp1aEdWeVk2TEJQekpiUU93Q0RxcFIraHloWGoxQ2lkTnRBcVg4UFJra085U0EwPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzQwMDQ5MTc0CWZpbGU6VGFyaSBVbml2ZXJzZS5hcHAudGFyLmd6CnRuczQ4aWRsT3VoMFI4b2hldXFvMk1Zb05qdG13Y2VNallJWXpQRjIycjVJQThIcmMwTnFFZ1hHZHVIRm8wWTBsa2w1MUxramxYdXBBb0ZwVkNYb0JnPT0K", - "url": "https://github.com/tari-project/universe/releases/download/v0.9.808/Tari.Universe_universal.app.tar.gz" + "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOGFZQ3RLVGdDdk1IclJ4VkUvQmJ1Q2xGdmNDajd6ZnlaNFNVV0hlNXFyQjEzdG5kVVFXcUVqTUNKalFTdFRCMnhKK002cTc4TzRWcDZ0MWFhSTIyY0FBPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzQwNDAzNzA5CWZpbGU6VGFyaSBVbml2ZXJzZS5hcHAudGFyLmd6CmMvbWQ1YVc4TVQ4VFlLS0JWeWhEOXdVaTJGSDRhLy9Pa05UV2hjMGhTWjlSN0lQYS9ZUXp5OTFheFZoOXNkMzZ5b1lMOU9GWGV4K1BlQW9XOTI5dEN3PT0K", + "url": "https://github.com/tari-project/universe/releases/download/v0.9.809/Tari.Universe_universal.app.tar.gz" }, "darwin-x86_64": { - "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOFFmdklLb21HYmFXUDRVV2N5UFVoaEErcEpUNXg3M3FaUnVxOVozVGp1aEdWeVk2TEJQekpiUU93Q0RxcFIraHloWGoxQ2lkTnRBcVg4UFJra085U0EwPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzQwMDQ5MTc0CWZpbGU6VGFyaSBVbml2ZXJzZS5hcHAudGFyLmd6CnRuczQ4aWRsT3VoMFI4b2hldXFvMk1Zb05qdG13Y2VNallJWXpQRjIycjVJQThIcmMwTnFFZ1hHZHVIRm8wWTBsa2w1MUxramxYdXBBb0ZwVkNYb0JnPT0K", - "url": "https://github.com/tari-project/universe/releases/download/v0.9.808/Tari.Universe_universal.app.tar.gz" + "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOGFZQ3RLVGdDdk1IclJ4VkUvQmJ1Q2xGdmNDajd6ZnlaNFNVV0hlNXFyQjEzdG5kVVFXcUVqTUNKalFTdFRCMnhKK002cTc4TzRWcDZ0MWFhSTIyY0FBPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzQwNDAzNzA5CWZpbGU6VGFyaSBVbml2ZXJzZS5hcHAudGFyLmd6CmMvbWQ1YVc4TVQ4VFlLS0JWeWhEOXdVaTJGSDRhLy9Pa05UV2hjMGhTWjlSN0lQYS9ZUXp5OTFheFZoOXNkMzZ5b1lMOU9GWGV4K1BlQW9XOTI5dEN3PT0K", + "url": "https://github.com/tari-project/universe/releases/download/v0.9.809/Tari.Universe_universal.app.tar.gz" }, "windows-x86_64": { - "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOFdPUjRhanlKbE5pdEJqU09FTDlpL1E4N2NneFF3VGs5MDdrVCtiRVVGeG9HcWZhV1I0SDBVYk1WQ2l2NlA5cTdaczFJVzhidG16dzlUVDdUUmhrUEFFPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzQwMDQ5NDg2CWZpbGU6VGFyaSBVbml2ZXJzZV8wLjkuODA4X3g2NF9lbi1VUy5tc2kuemlwCnRQSlY0S2NCNkY5ZGZDSjcydks1OTBLOS9TZjJPcFQ0YTNuaEh6Ym5lQ2R6ejFIdERYRmFxeWFWVmRjSVFvYWtVWGJrMU5CeldEVWpqc1I2Z3U1TUFnPT0K", - "url": "https://github.com/tari-project/universe/releases/download/v0.9.808/Tari.Universe_0.9.808_x64_en-US.msi.zip" + "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOGYwcGJjcFRQY0hxYTZsYUlQeWIxclFxdkNucjRTVGxYdFVTUUNoL1RjQkg4ZVdMaFhqK29vNElaMzBjTktTRnBzUkRyZFllWFZBbGtSVzJCMDJSMWdvPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzQwNDA0MDQxCWZpbGU6VGFyaSBVbml2ZXJzZV8wLjkuODA5X3g2NF9lbi1VUy5tc2kuemlwCmpPb3B4OW9MUEc1cFN1dTRRY0hDTmdYSW5TQWxjS1ZSdlFkS3RDM1cydWJVRzlMbS83NEhZRjQ4NlVkYzhESElSZ3ZUZ0hEKzdENDcyWnVDSk9PVkJBPT0K", + "url": "https://github.com/tari-project/universe/releases/download/v0.9.809/Tari.Universe_0.9.809_x64_en-US.msi.zip" } } -} \ No newline at end of file +}