From 727e4adb41c7f9eb61c6bd19ef98b3e18f741296 Mon Sep 17 00:00:00 2001 From: Cosmos4k Date: Fri, 30 Oct 2026 02:44:43 -0400 Subject: [PATCH] feat: CASPER endpoint, GHOST theme, dark-mode default, CASPER RPC as default --- packages/apps-config/src/api/constants.ts | 3 ++ .../src/endpoints/casperTestnet.ts | 29 ++++++++++++++ packages/apps-config/src/endpoints/index.ts | 36 ++++++++++++++---- packages/apps-config/src/endpoints/testing.ts | 19 +++++++-- .../src/ui/logos/chains/CasperTestnet.svg | 32 ++++++++++++++++ .../chains/generated/CasperTestnetSVG.ts | 6 +++ packages/apps/public/ghost-favicon.ico | Bin 0 -> 15406 bytes packages/apps/src/Apps.tsx | 6 +-- packages/apps/src/Root.tsx | 13 +++---- packages/page-settings/src/General.tsx | 18 +-------- 10 files changed, 124 insertions(+), 38 deletions(-) create mode 100644 packages/apps-config/src/endpoints/casperTestnet.ts create mode 100644 packages/apps-config/src/ui/logos/chains/CasperTestnet.svg create mode 100644 packages/apps-config/src/ui/logos/chains/generated/CasperTestnetSVG.ts create mode 100644 packages/apps/public/ghost-favicon.ico diff --git a/packages/apps-config/src/api/constants.ts b/packages/apps-config/src/api/constants.ts index 1c835b30c0..bf4a11cdd7 100644 --- a/packages/apps-config/src/api/constants.ts +++ b/packages/apps-config/src/api/constants.ts @@ -1,5 +1,6 @@ // Copyright 2017-2026 @polkadot/apps-config authors & contributors // SPDX-License-Identifier: Apache-2.0 +// GHOST Edit **added CAPSER Hash import type { HexString } from '@polkadot/util/types'; @@ -46,3 +47,5 @@ export const JOYSTREAM_GENESIS = '0x6b5e488e0fa8f9821110d5c13f4c468abcd43ce5e297 export const ZKVERIFY_GENESIS = '0x060e3dd3fa2904d031206bb913c954687a2bcc350e5a83d33d9e273ad21460f1'; export const ZKVERIFY_VOLTA_GENESIS = '0xff7fe5a610f15fe7a0c52f94f86313fb7db7d3786e7f8acf2b66c11d5be7c242'; + +export const CASPER_TESTNET_GENESIS = '0xcaf9c5ddccc7ba6f96149a6b8a81c26a3641742795cd5e7e0aee79bf3f4e77b7'; diff --git a/packages/apps-config/src/endpoints/casperTestnet.ts b/packages/apps-config/src/endpoints/casperTestnet.ts new file mode 100644 index 0000000000..28229f1b08 --- /dev/null +++ b/packages/apps-config/src/endpoints/casperTestnet.ts @@ -0,0 +1,29 @@ +// Copyright 2017-2026 @polkadot/apps-config authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { EndpointOption } from './types.js'; + +import { CASPER_TESTNET_GENESIS } from '../api/constants.js'; +import { chainsCasperTestnetSVG } from '../ui/logos/chains/index.js'; + +// The available endpoints that will show in the dropdown. For the most part (with the exception of +// Polkadot) we try to keep this to live chains only, with RPCs hosted by the community/chain vendor +// info: The chain logo name as defined in ../ui/logos/index.ts in namedLogos (this also needs to align with @polkadot/networks) +// text: The text to display on the dropdown +// providers: The actual hosted secure websocket endpoint +// +// IMPORTANT: Alphabetical based on text +export const casperTestnet: Omit[] = [ + { + genesisHash: CASPER_TESTNET_GENESIS, + info: 'casper-testnet', + providers: { + CASPER: 'wss://casper-rpc.ghostchain.io' as unknown as `wss://${string}` + }, + text: 'CASPER Testnet', + ui: { + color: '#F2E370', + logo: chainsCasperTestnetSVG + } + } +]; \ No newline at end of file diff --git a/packages/apps-config/src/endpoints/index.ts b/packages/apps-config/src/endpoints/index.ts index 4e9f641d84..4f81848f14 100644 --- a/packages/apps-config/src/endpoints/index.ts +++ b/packages/apps-config/src/endpoints/index.ts @@ -9,6 +9,7 @@ import { prodChains, prodRelayKusama, prodRelayPolkadot } from './production.js' import { testChains, testRelayWestend } from './testing.js'; import { testRelayPaseo } from './testingRelayPaseo.js'; import { expandEndpoints } from './util.js'; +import { casperTestnet } from './casperTestnet.js'; export { CUSTOM_ENDPOINT_KEY } from './development.js'; export * from './production.js'; @@ -30,7 +31,8 @@ export function createWsEndpoints (t: TFunction = defaultT, firstOnly = false, w testRelayWestend, testRelayPaseo, ...prodChains, - ...testChains + ...testChains, + ...casperTestnet ]; return [ @@ -46,7 +48,7 @@ export function createWsEndpoints (t: TFunction = defaultT, firstOnly = false, w }, { isDisabled: false, - isHeader: true, + isHeader: false, isSpaced: true, text: t('rpc.header.polkadot.relay', 'Polkadot & parachains', { ns: 'apps-config' }), textBy: '', @@ -56,7 +58,7 @@ export function createWsEndpoints (t: TFunction = defaultT, firstOnly = false, w ...expandEndpoints(t, [prodRelayPolkadot], firstOnly, withSort), { isDisabled: false, - isHeader: true, + isHeader: false, isSpaced: true, text: t('rpc.header.kusama.relay', 'Kusama & parachains', { ns: 'apps-config' }), textBy: '', @@ -66,7 +68,7 @@ export function createWsEndpoints (t: TFunction = defaultT, firstOnly = false, w ...expandEndpoints(t, [prodRelayKusama], firstOnly, withSort), { isDisabled: false, - isHeader: true, + isHeader: false, isSpaced: true, text: t('rpc.header.westend.relay', 'Test Westend & parachains', { ns: 'apps-config' }), textBy: '', @@ -76,7 +78,7 @@ export function createWsEndpoints (t: TFunction = defaultT, firstOnly = false, w ...expandEndpoints(t, [testRelayWestend], firstOnly, withSort), { isDisabled: false, - isHeader: true, + isHeader: false, isSpaced: true, text: t('rpc.header.paseo.relay', 'Test Paseo & parachains', { ns: 'apps-config' }), textBy: '', @@ -86,7 +88,7 @@ export function createWsEndpoints (t: TFunction = defaultT, firstOnly = false, w ...expandEndpoints(t, [testRelayPaseo], firstOnly, withSort), { isDisabled: false, - isHeader: true, + isHeader: false, isSpaced: true, text: t('rpc.header.live', 'Live networks', { ns: 'apps-config' }), textBy: '', @@ -96,7 +98,7 @@ export function createWsEndpoints (t: TFunction = defaultT, firstOnly = false, w ...expandEndpoints(t, prodChains, firstOnly, withSort), { isDisabled: false, - isHeader: true, + isHeader: false, isSpaced: true, text: t('rpc.header.test', 'Test networks', { ns: 'apps-config' }), textBy: '', @@ -104,6 +106,26 @@ export function createWsEndpoints (t: TFunction = defaultT, firstOnly = false, w value: '' }, ...expandEndpoints(t, testChains, firstOnly, withSort), + { + isDisabled: false, + isHeader: true, + isSpaced: true, + text: t('rpc.header.ghost', 'GHOST Mainnet', { ns: 'apps-config' }), + textBy: '', + ui: {}, + value: '' + }, + // nothing here — no expandEndpoints call + { + isDisabled: false, + isHeader: true, + isSpaced: true, + text: t('rpc.header.casper', 'CASPER Testnet', { ns: 'apps-config' }), + textBy: '', + ui: {}, + value: '' + }, + ...expandEndpoints(t, casperTestnet, firstOnly, withSort), { isDevelopment: true, isDisabled: false, diff --git a/packages/apps-config/src/endpoints/testing.ts b/packages/apps-config/src/endpoints/testing.ts index 92f432ea6f..bc21dc91b1 100644 --- a/packages/apps-config/src/endpoints/testing.ts +++ b/packages/apps-config/src/endpoints/testing.ts @@ -3,8 +3,8 @@ import type { EndpointOption } from './types.js'; -import { ZKVERIFY_VOLTA_GENESIS } from '../api/constants.js'; -import { chains3dpassSVG, chainsAcalaSVG, chainsAlephSVG, chainsAllfeatSVG, chainsAnalogSVG, chainsArgonSVG, chainsBrainstormPNG, chainsChainflipPNG, chainsCreditcoinTestPNG, chainsDebioSVG, chainsEquilibriumSVG, chainsFerrumPNG, chainsFragnovaPNG, chainsJurPNG, chainsKintsugiPNG, chainsLiberlandPNG, chainsLogionPNG, chainsMyriadPNG, chainsQfNetworkPNG, chainsSkyekiwiPNG, chainsTanglePNG, chainsVaraTestnetPNG } from '../ui/logos/chains/index.js'; +import { CASPER_TESTNET_GENESIS, ZKVERIFY_VOLTA_GENESIS } from '../api/constants.js'; +import { chainsCasperTestnetSVG, chains3dpassSVG, chainsAcalaSVG, chainsAlephSVG, chainsAllfeatSVG, chainsAnalogSVG, chainsArgonSVG, chainsBrainstormPNG, chainsChainflipPNG, chainsCreditcoinTestPNG, chainsDebioSVG, chainsEquilibriumSVG, chainsFerrumPNG, chainsFragnovaPNG, chainsJurPNG, chainsKintsugiPNG, chainsLiberlandPNG, chainsLogionPNG, chainsMyriadPNG, chainsQfNetworkPNG, chainsSkyekiwiPNG, chainsTanglePNG, chainsVaraTestnetPNG } from '../ui/logos/chains/index.js'; import { nodesArcticPNG, nodesAresGladiosSVG, nodesAutonomysPNG, nodesBifrostSVG, nodesBitcountryPNG, nodesCereSVG, nodesCessPNG, nodesCloverSVG, nodesCrustMaxwellSVG, nodesCurioSVG, nodesDancelightSVG, nodesDatahighwayPNG, nodesDockPNG, nodesDolphinSVG, nodesDotmogSVG, nodesEdgewareWhitePNG, nodesEncointerBlueSVG, nodesFantourPNG, nodesGalitalLogoPNG, nodesGamepowerSVG, nodesGeekSVG, nodesInterlaySVG, nodesIpsePNG, nodesJazPNG, nodesJupiterSVG, nodesKarmachainSVG, nodesKhalaSVG, nodesKlugPNG, nodesKylinPNG, nodesLaminarCircleSVG, nodesMantaPNG, nodesMathSVG, nodesMinixPNG, nodesMoonbaseAlphaSVG, nodesMybankPNG, nodesNftmartPNG, nodesNodleSVG, nodesOpportunityPNG, nodesPhalaSVG, nodesPhoenixPNG, nodesPhykenNetworkPNG, nodesPichiuPNG, nodesPolkadexSVG, nodesPolkafoundrySVG, nodesPolymeshSVG, nodesPontemSVG, nodesPrismPNG, nodesRealisPNG, nodesRiochainSVG, nodesSherpaxPNG, nodesSoonsocialPNG, nodesSoraSubstrateSVG, nodesSubdaoPNG, nodesSubgameSVG, nodesSubspacePNG, nodesSubstrateHexagonSVG, nodesTernoaSVG, nodesThebifrostPNG, nodesUniartsPNG, nodesUniqueSVG, nodesUnitnetworkPNG, nodesVFlowPNG, nodesWeb3gamesSVG, nodesZCloakSVG, nodesZeroSVG, nodesZkVerifyPNG } from '../ui/logos/nodes/index.js'; export * from './testingRelayPaseo.js'; @@ -1136,5 +1136,18 @@ export const testChains: Omit[] = [ color: '#15AA6A', logo: nodesZkVerifyPNG } + }, + // GHOST Edit **Added CASPER + { + genesisHash: CASPER_TESTNET_GENESIS, + info: 'casper-testnet', + providers: { + CASPER: 'wss://casper-rpc.ghostchain.io' + }, + text: 'CASPER Testnet', + ui: { + color: '#F2E370', + logo: chainsCasperTestnetSVG + } } -]; +]; \ No newline at end of file diff --git a/packages/apps-config/src/ui/logos/chains/CasperTestnet.svg b/packages/apps-config/src/ui/logos/chains/CasperTestnet.svg new file mode 100644 index 0000000000..92eb4d8abd --- /dev/null +++ b/packages/apps-config/src/ui/logos/chains/CasperTestnet.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/apps-config/src/ui/logos/chains/generated/CasperTestnetSVG.ts b/packages/apps-config/src/ui/logos/chains/generated/CasperTestnetSVG.ts new file mode 100644 index 0000000000..4ab882785c --- /dev/null +++ b/packages/apps-config/src/ui/logos/chains/generated/CasperTestnetSVG.ts @@ -0,0 +1,6 @@ +// Copyright 2017-2026 @polkadot/apps authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +// Do not edit. Auto-generated via node scripts/imgConvert.mjs + +export const chainsCasperTestnetSVG = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBpZD0idXVpZC05ZjlkMTRjMy0wNmQyLTRiYTMtOTE4YS02MWQ0NzM1MDJjODkiIGRhdGEtbmFtZT0iTGF5ZXIgMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMjUwIDI1MCI+CiAgPGRlZnM+CiAgICA8c3R5bGU+CiAgICAgIC51dWlkLWNlOGI1ZDY2LTA1NTEtNDYwYi05YjU1LTYzOTA0MDMzMTg1NCB7CiAgICAgICAgZmlsbDogI2ZmZjsKICAgICAgfQoKICAgICAgLnV1aWQtZjY1MTM4M2UtNzI5Yy00NTQzLTgyZWQtNWNlYTU2NjIzMDdkIHsKICAgICAgICBmaWxsOiAjMzQ1Yjg3OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvZGVmcz4KICA8ZyBpZD0idXVpZC01N2Y3NDhkOS01YjNlLTRmMzktYjNmNC04N2Y2NzBhMDdhNDkiIGRhdGEtbmFtZT0idXVpZC0yYTJlZDRkZC0xMjY2LTRiNDQtYjFjMi1mNDU2ZTZlYzZmNDkiPgogICAgPGcgaWQ9InV1aWQtNDJmMWM4NWYtMjJkNC00MWQxLTgxM2UtMWNmYjAwZWI5YzJjIiBkYXRhLW5hbWU9InV1aWQtZmI4NGY5ODUtYWNjNi00NTI5LTg4NjAtYTdkMTdlNDNmNTMzIj4KICAgICAgPGc+CiAgICAgICAgPGNpcmNsZSBjbGFzcz0idXVpZC1jZThiNWQ2Ni0wNTUxLTQ2MGItOWI1NS02MzkwNDAzMzE4NTQiIGN4PSIxMjUiIGN5PSIxMjUiIHI9IjEyMi41Ii8+CiAgICAgICAgPHBhdGggY2xhc3M9InV1aWQtZjY1MTM4M2UtNzI5Yy00NTQzLTgyZWQtNWNlYTU2NjIzMDdkIiBkPSJtMTI1LDVjMzIuMDUsMCw2Mi4xOSwxMi40OCw4NC44NSwzNS4xNXMzNS4xNSw1Mi44LDM1LjE1LDg0Ljg1LTEyLjQ4LDYyLjE5LTM1LjE1LDg0Ljg1Yy0yMi42NywyMi42Ny01Mi44LDM1LjE1LTg0Ljg1LDM1LjE1cy02Mi4xOS0xMi40OC04NC44NS0zNS4xNUMxNy40OCwxODcuMTksNSwxNTcuMDUsNSwxMjVzMTIuNDgtNjIuMTksMzUuMTUtODQuODVDNjIuODEsMTcuNDgsOTIuOTUsNSwxMjUsNW0wLTVDNTUuOTYsMCwwLDU1Ljk2LDAsMTI1czU1Ljk2LDEyNSwxMjUsMTI1LDEyNS01NS45NiwxMjUtMTI1UzE5NC4wNCwwLDEyNSwwaDBaIi8+CiAgICAgIDwvZz4KICAgICAgPGcgaWQ9InV1aWQtOWUxMWMxMGYtMmQ2Ny00Y2FmLWE4NWMtNjRmOGE4YWJkYWM0IiBkYXRhLW5hbWU9InV1aWQtMWE5M2ZjNzItZGVkMS00MWFmLThlN2MtMDEwMjczYzM1NjY3Ij4KICAgICAgICA8cGF0aCBjbGFzcz0idXVpZC1mNjUxMzgzZS03MjljLTQ1NDMtODJlZC01Y2VhNTY2MjMwN2QiIGQ9Im0xMzUuNjUsNjguNTRjLjExLDAsLjIyLDAsLjMzLjAybC4yMi4wNCw0LjQ4LDEuMDUsMS40My40MmMuMzQuMS42Ny4yLDEsLjMuNjUuMTksMS4yOS4zOCwxLjkzLjU5bDIuODYsMS4wNGM0LjIyLDEuNjcsNy44NCwzLjUsMTEuMTQsNS42Myw3LjEzLDQuNjUsMTMuMSwxMC45LDE3LjI2LDE4LjA4LDQuMTEsNy4wNCw2Ljc1LDE1LjI4LDcuNjMsMjMuODMuNDUsNC40NC40NCw4LjY5LDAsMTIuNjUtLjQ3LDQuMDktMS4yOCw3LjYxLTIuNDksMTAuNzctLjQxLDEuMDctMS4yNSwxLjkyLTIuMzIsMi4zNHMtMi4yNy4zOC0zLjMtLjEyYy0xLjk1LS45NS0yLjgyLTMuMjUtMS45OS01LjI1LDEuMDMtMi40NywxLjgtNS40MSwyLjI3LTguNzMuNDktMy40LjYtNy4xLjMyLTExLS41Ni03LjU0LTIuNjYtMTQuODUtNi4wOS0yMS4xMy0zLjQ2LTYuNC04LjU1LTEyLjA0LTE0LjcxLTE2LjMyLTIuODktMS45OS02LjEyLTMuNzQtOS44Ny01LjM0bC0yLjY3LTEuMDZjLS41LS4xOS0xLjA3LS4zNy0xLjY0LS41NS0uMzQtLjExLS42OS0uMjItMS4wMy0uMzRsLTEuMzItLjQzLTQuMzEtMS4xNGMtMS4xLS4zNS0yLjA3LTEuNTItMS43OS0zLjEuMjYtMS40NywxLjUtMi4yNiwyLjY1LTIuMjZoLjAxWiIvPgogICAgICAgIDxwYXRoIGNsYXNzPSJ1dWlkLWY2NTEzODNlLTcyOWMtNDU0My04MmVkLTVjZWE1NjYyMzA3ZCIgZD0ibTgzLjA5LDE1My42YzEuMzcsMCwyLjY5LjY5LDMuNDYsMS45MiwxLjY0LDIuNjMsMy43Miw1LjA5LDYuMTcsNy4yOSwyLjc4LDIuNTMsNS45NSw0Ljc4LDkuNDIsNi43MSw2Ljg0LDMuOCwxNC41Myw2LjA4LDIyLjIzLDYuNTgsMy45MS4yNSw3LjgyLjA0LDExLjYyLS42NCwzLjc4LS42OCw3LjUyLTEuODYsMTEuMTItMy40OSwzLjQ1LTEuNTcsNi44NS0zLjYsMTAuMTMtNi4wNiwyLjkzLTIuMjcsNS44LTQuOTQsOC43NC04LjE0bC4xOS0uMThjLjg3LS43NiwyLjM4LS45NywzLjU3LjExLDEuMTUsMS4wNCwxLjE0LDIuNTIuNTQsMy40NWwtLjIuMjZjLTMuMDYsMy41Mi02LjA4LDYuNDktOS4yNCw5LjA4LTMuNTcsMi44NC03LjI5LDUuMi0xMS4wOSw3LjA1LTQuMDIsMS45Ni04LjIzLDMuNDEtMTIuNTEsNC4zMS00LjMxLjg5LTguNzUsMS4yNi0xMy4yMiwxLjA5LTguNzUtLjM0LTE3LjU1LTIuNjgtMjUuNDUtNi43OC00LjA1LTIuMS03Ljc4LTQuNjEtMTEuMDgtNy40NC0zLjA3LTIuNjItNS43MS01LjU3LTcuODMtOC43Ni0uNjMtLjk1LS44NC0yLjE0LS41Ny0zLjI1czEtMi4wNiwyLTIuNjFjLjYzLS4zNSwxLjMxLS41MSwxLjk4LS41MWguMDJaIi8+CiAgICAgICAgPHBhdGggY2xhc3M9InV1aWQtZjY1MTM4M2UtNzI5Yy00NTQzLTgyZWQtNWNlYTU2NjIzMDdkIiBkPSJtMTEzLjk0LDY3LjQ3Yy43NiwwLDEuNTEuMjEsMi4xNi42MS45NS41OSwxLjYzLDEuNTUsMS44NiwyLjY0LjQ1LDIuMTYtLjkyLDQuMzItMy4wNSw0LjgyLTYuMDcsMS40Mi0xMi4xMSw0LjA4LTE3LjQ5LDcuNjgtNS45MiwzLjk3LTExLjAyLDkuMDUtMTQuNzUsMTQuNjktMy44Niw1LjgxLTYuNDEsMTIuNTItNy4zOCwxOS40MS0uOTYsNi40Ny0uNTMsMTMuNTcsMS4yNywyMS4xMmwuMDQuMThjLjE4LDEuMTUtLjQzLDIuNTUtMS45NSwzLTEuNDguNDMtMi43Ni0uMzktMy4yNS0xLjQzbC0uMDktLjE5LS4wNS0uMmMtMi4yMy04LjItMi45My0xNi4wMy0yLjA5LTIzLjI3Ljg2LTcuODQsMy41My0xNS41Nyw3LjcyLTIyLjMyLDQuMDQtNi41NSw5LjY2LTEyLjUsMTYuMjMtMTcuMiw2LjEtNC4zNiwxMi43NS03LjUyLDE5Ljc2LTkuNC4zNS0uMDkuNzEtLjE0LDEuMDYtLjE0WiIvPgogICAgICA8L2c+CiAgICAgIDxnIGlkPSJ1dWlkLTJiMTQ1ZDIzLWM0OTItNDcxYS1iMjQ2LWYyZTc1YWYxNTAyMCIgZGF0YS1uYW1lPSJ1dWlkLTk3N2FiZjc5LWI2MjMtNDA1My1hYjdiLWE2MTdkODM0ZDZjZiI+CiAgICAgICAgPHBhdGggY2xhc3M9InV1aWQtZjY1MTM4M2UtNzI5Yy00NTQzLTgyZWQtNWNlYTU2NjIzMDdkIiBkPSJtMTc4Ljk3LDgzLjAyYzEuNTcsMy45Myw0LjU3LDcuMDEsOC40Niw4LjY4LDIuODksMS4yNCw1Ljk1LDEuNTUsOC44NCwxLjA2LDMuMjUsNi42LDUuNjIsMTMuODEsNi45OCwyMS4zOSwyLjMsMTIuNzQsMS42MiwyNS42OC0xLjk3LDM3LjQtMS44NSw2LjA1LTQuNDgsMTEuODItNy44MiwxNy4xMy0zLjMsNS4yNy03LjM3LDEwLjE4LTEyLjA4LDE0LjYxLTQuNDUsNC4xOS05LjYzLDguMDgtMTUuMzQsMTEuNTItNS4zLDMuMDgtMTEuMDgsNS44Mi0xNy42OCw4LjM4bC0uNTIuMi0uNDMuMzVjLTEuNCwxLjEyLTEuOTMsMy4wMS0xLjMyLDQuNzEuNzEsMS45NSwyLjc1LDMuMDgsNC43NCwyLjYxbC4zOC0uMTFjNy4xMS0yLjUsMTMuMzktNS4yNCwxOS4yNS04LjM5LDYuNDQtMy42LDEyLjI4LTcuNzEsMTcuMzctMTIuMTksNS40OC00LjgyLDEwLjI2LTEwLjI0LDE0LjItMTYuMTEsNC4wMi01Ljk2LDcuMjUtMTIuNDcsOS41OS0xOS4zNSw0LjU0LTEzLjMsNS44LTI4LjA3LDMuNjQtNDIuNzItMS4zOC05LjQyLTQuMTQtMTguNDUtOC4xMS0yNi43MS40MS0uNjYuNzctMS4zNSwxLjA4LTIuMDgsMy40NS04LjAzLS4yOC0xNy4zNi04LjMxLTIwLjgxLTEuODgtLjgxLTMuODItMS4yMi01Ljc1LTEuMjgtNi4zMi0uMTktMTIuNDIsMy40My0xNS4wNiw5LjU4LTEuNjcsMy44OS0xLjczLDguMTktLjE2LDEyLjEyaC4wMloiLz4KICAgICAgICA8cGF0aCBjbGFzcz0idXVpZC1mNjUxMzgzZS03MjljLTQ1NDMtODJlZC01Y2VhNTY2MjMwN2QiIGQ9Im01NC43Myw5OC41MWM4Ljc0LjA4LDE1LjkxLTYuOTYsMTUuOTktMTUuNy4wMy0zLjEyLS44Ni02LjA1LTIuNC04LjUyLDMuOTUtNC42Miw4LjQxLTguODUsMTMuMjUtMTIuNTEsOC45MS02Ljc2LDE5LjI1LTExLjU4LDI5LjkzLTEzLjkzLDEwLjctMi4zOCwyMi4xNi0yLjI0LDMzLjE2LjM5LDEwLjA5LDIuMzQsMjAuNDksNy4wNiwzMC45MSwxNC4wMmwuMDkuMDZjMS44MiwxLjE0LDQuMjQuNjMsNS41MS0xLjE1LDEuMjktMS44MS45NC00LjI4LS43OC01LjYxbC0uMS0uMDdjLTExLjAyLTcuOTYtMjIuMjItMTMuNTItMzMuMjYtMTYuNTEtNy4yLTIuMDEtMTQuNjUtMy4wNS0yMi4wNS0zLjEyLTUuMjctLjA1LTEwLjUxLjQtMTUuNjMsMS4zNC0xMi4zNCwyLjI1LTI0LjQzLDcuMzUtMzQuOTQsMTQuNzQtNi4xNyw0LjMyLTExLjg3LDkuNDMtMTYuOSwxNS4xLS44MS0uMTQtMS42NC0uMjEtMi40OS0uMjItOC43NC0uMDgtMTUuOTEsNi45Ni0xNS45OSwxNS43czYuOTYsMTUuOTEsMTUuNywxNS45OVoiLz4KICAgICAgICA8cGF0aCBjbGFzcz0idXVpZC1mNjUxMzgzZS03MjljLTQ1NDMtODJlZC01Y2VhNTY2MjMwN2QiIGQ9Im0xMjkuNjQsMTkxLjk1Yy0xLjI4LS4zNS0yLjU3LS41NC0zLjg3LS41Ny0yLjgzLS4wNi01LjY0LjY0LTguMTcsMi4wOC0yLjU5LDEuNDctNC42NSwzLjYtNi4wNCw2LjE1LTYuNDEtMS4zMi0xMi43OS0zLjQ1LTE4LjkyLTYuMzYtMTAuNzYtNS4xNS0yMC4zNS0xMi41NC0yNy43My0yMS4zNi03LjU2LTguOTktMTIuOTctMTkuODItMTUuNjctMzEuMzQtMi41OS0xMC42OS0yLjg1LTIyLjcxLS43Ny0zNS43MWwuMDQtLjQ2Yy4wNi0yLjA1LTEuNDMtMy44My0zLjQ2LTQuMTYtLjItLjAzLS4zOS0uMDUtLjU4LS4wNS0xLjYyLS4wNC0zLjExLjg1LTMuODMsMi4zM2wtLjIxLjQzLS4wOS40N2MtMi43NSwxNC4wNi0yLjksMjcuMjYtLjQ0LDM5LjIxLDIuNTksMTMuMTEsOC4zMSwyNS42LDE2LjU2LDM2LjEyLDguMDUsMTAuMzMsMTguNjgsMTkuMTIsMzAuNzUsMjUuNDIsNy40OCwzLjg3LDE1LjM3LDYuNzIsMjMuMzUsOC40OC4zLjgzLjY3LDEuNjUsMS4xMiwyLjQ0LDIuMSwzLjY4LDUuNSw2LjMyLDkuNTgsNy40NHM4LjM1LjU4LDEyLjAzLTEuNTFjMy42OC0yLjEsNi4zMi01LjUsNy40NC05LjU4cy41OC04LjM1LTEuNTEtMTIuMDNjLTIuMS0zLjY4LTUuNS02LjMyLTkuNTgtNy40NGgwWiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4='; diff --git a/packages/apps/public/ghost-favicon.ico b/packages/apps/public/ghost-favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..99ff8b860860f5076e2d94265840766c354a2e40 GIT binary patch literal 15406 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 CNr`*_ literal 0 HcmV?d00001 diff --git a/packages/apps/src/Apps.tsx b/packages/apps/src/Apps.tsx index d4de692efb..37f2666d72 100644 --- a/packages/apps/src/Apps.tsx +++ b/packages/apps/src/Apps.tsx @@ -65,9 +65,9 @@ const StyledDiv = styled.div` } @keyframes greyAnim${n} { - 0% { background: #a6a6a6; } - 50% { background: darkorange; } - 100% { background: #a6a6a6; } + 0% { background: var(--grey-anim-start); } + 50% { background: var(--grey-anim-middle); } + 100% { background: var(--grey-anim-start); } } `).join('')} `; diff --git a/packages/apps/src/Root.tsx b/packages/apps/src/Root.tsx index ecea995dcc..5a8d99f13c 100644 --- a/packages/apps/src/Root.tsx +++ b/packages/apps/src/Root.tsx @@ -1,6 +1,5 @@ // Copyright 2017-2026 @polkadot/apps authors & contributors // SPDX-License-Identifier: Apache-2.0 - import type { ThemeDef } from '@polkadot/react-components/types'; import type { KeyringStore } from '@polkadot/ui-keyring/types'; @@ -15,18 +14,16 @@ import { settings } from '@polkadot/ui-settings'; import BeforeApiInit from './overlays/BeforeInit.js'; import Apps from './Apps.js'; +const CASPER_RPC_URL = 'wss://casper-rpc.ghostchain.io'; + interface Props { isElectron: boolean; store?: KeyringStore; } -function createTheme ({ uiTheme }: { uiTheme: string }): ThemeDef { - const theme = uiTheme === 'dark' - ? 'dark' - : 'light'; - +function createTheme (_settings: { uiTheme: string }): ThemeDef { + const theme = 'dark'; document?.documentElement?.setAttribute('data-theme', theme); - return { theme }; } @@ -44,7 +41,7 @@ function Root ({ isElectron, store }: Props): React.ReactElement { } isElectron={isElectron} store={store} diff --git a/packages/page-settings/src/General.tsx b/packages/page-settings/src/General.tsx index ff975b075c..3962bb0694 100644 --- a/packages/page-settings/src/General.tsx +++ b/packages/page-settings/src/General.tsx @@ -32,7 +32,7 @@ function General ({ className = '' }: Props): React.ReactElement { const [state, setSettings] = useState((): SettingsStruct => { const values = settings.get(); - return { ...values, uiTheme: values.uiTheme === 'dark' ? 'dark' : 'light' }; + return { ...values, uiTheme: 'dark' as SettingsStruct['uiTheme'] }; }); const ledgerConnOptions = useMemo( @@ -73,14 +73,6 @@ function General ({ className = '' }: Props): React.ReactElement { [t] ); - const themeOptions = useMemo( - () => [ - { text: t('Light theme'), value: 'light' }, - { text: t('Dark theme'), value: 'dark' } - ], - [t] - ); - const translateLanguages = useMemo( () => createLanguages(t), [t] @@ -128,14 +120,6 @@ function General ({ className = '' }: Props): React.ReactElement { options={iconOptions} /> -
- -