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:

## 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
+}