forked from polkadot-js/apps
-
Notifications
You must be signed in to change notification settings - Fork 0
/
colors.ts
518 lines (508 loc) · 17.6 KB
/
colors.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
// Copyright 2017-2022 @polkadot/apps-config authors & contributors
// SPDX-License-Identifier: Apache-2.0
/* eslint sort-keys: ["error", "asc", { caseSensitive: false }] */
import nodeBasiliskRococo from './logos/nodes/basilisk-rococo-bg.png';
import { sanitize } from './util';
// The mapping here is done on the actual chain name (system.chain RPC) or
// the actual RPC node it is corrected to (system.name RPC)
// defaults
const emptyColor = '#99999';
// based on chain name
// alphabetical
const chainSherpax = '#6bbee8';
const chainAcala = '#645AFF';
const chainAjuna = 'linear-gradient(135deg, #0e0c14, #12203b, #1f3451)';
const chainAleph = '#00CCAB';
const chainAltair = '#ffb700';
const chainApron = 'linear-gradient(45deg, #0099F7 0%, #2E49EB 100%)';
const chainAstar = '#1b6dc1d9';
const chainAutomata = '#EC7032';
const chainAutomataContextFree = '#EC7032';
const chainBitCountry = '#191a2e';
const chainBitCountryPioneer = '#000000';
const chainBasiliskTestnet = `url(${String(nodeBasiliskRococo)}) #000`;
const chainBeastEave = '#900048';
const chainCalamari = '#000000';
const chainCoinversation = '#e6017a';
const chainCompetitorsClub = '#213830';
const chainComposable = '#FF8500';
const chainComposableFinance = '#861660';
const chainCrab = '#7C30DD';
const chainCrownSterling = '#13264b';
const chainCrust = '#ff8812';
const chainCrustMaxwell = '#2E333B';
const chainClover = 'linear-gradient(to right, #52ad75, #7cc773)';
const chainChainx = '#F6C94A';
const chainDarwinia = 'linear-gradient(-45deg, #FE3876 0%, #7C30DD 71%, #3A30DD 100%)';
const chainDolphin = '#000000';
const chainDotMog = '#020609';
const chainEfinity = '#496ddb';
const chainEquilibrium = '#1792ff';
const chainFantour = '#5a189a';
const chainGalital = '#00063F';
const chainGamePower = '#5d21a5';
const chainGenshiro = '#e8662d';
const chainHanonycash = '#0099CC';
const chainHeiko = '#42d5de';
const chainHydrate = '#000000';
const chainInterbtc = '#1a0a2d';
const chainInterlay = '#3E96FF';
const chainIpse = '#08a1e8';
const chainKarura = '#ff4c3b';
const chainKhala = '#03f3f3';
const chainKintsugi = '#1a0a2d';
const chainKlug = '#000000';
const chainKulupu = '#003366';
const chainMinix = '#5152f7';
const chainManta = '#2070a6';
const chainMangata = '#ddf1f3';
const chainMoonrock = '#3d1d5a';
const chainMoonsama = '#000000';
const chainNeumann = '#A8278C';
const chainNFTMart = '#815287';
const chainPangolin = '#5744ff';
const chainPangoro = '#5745de';
const chainParallel = '#ef18ac';
const chainParami = '#ee06e2';
const chainPhala = '#a7e300';
const chainPhoenix = '#d42181';
const chainPlasm = '#2096F3';
const chainPolkadex = '#7C30DD';
const chainPolkadot = '#e6007a';
const chainPolkaFoundry = '#ff527c';
const chainPolkaSmith = '#0DDDFB';
const chainPontem = '#A92FAC';
const chainPrism = 'linear-gradient(45deg, rgba(63,94,251,1) 0%, rgba(252,70,107,1) 100%)';
const chainKico = '#29B58D';
const chainKilt = '#8c145a';
const chainKiltDev = '#f05a27';
const chainKiltPeregrine = `linear-gradient(45deg, ${chainKiltDev} 0%, ${chainKilt} 100%)`;
const chainKiltRilt = `linear-gradient(45deg, ${chainKilt} 0%, ${chainKiltDev} 100%)`;
const chainKonomi = '#007aff';
const chainKusama = '#000000';
const chainKusari = '#b8860b';
const chainKylin = '#ed007e';
const chainLitentry = 'linear-gradient(45deg, #5cc27c 0%, #6de98f 100%)';
const chainLitmus = '#6822fb';
const chainMybank = '#282736';
const chainOpal = '#3B9C9D';
const chainPichiu = '#ed007e';
const chainQuartz = '#FF4D6A';
const chainRocco = '#6f36dc';
const chainRoccoMandala = '#173DC9';
const chainRoccoAres = '#70FF8B';
const chainAresGladios = '#1295F0';
const chainRoccoBifrost = '#5a25f0';
const chainRococoCanvas = '#000000';
const chainRoccoDarwinia = 'linear-gradient(-45deg, #FE3876 0%, #7C30DD 71%, #3A30DD 100%)';
const chainRoccoDataHighway = 'linear-gradient(-90deg, #9400D3 0%, #5A5CA9 50%, #00BFFF 100%)';
const chainRococoEave = '#900048';
const chainRococoLaminar = '#004FFF';
const chainRoccoTick = '#22bb22';
const chainRoccoTrack = '#bb2222';
const chainRoccoTrick = '#2222bb';
const chainRiochain = '#4d87f6';
const chainSakura = '#ff5995';
const chainShadow = '#ffa940';
const chainShiden = '#5923B2';
const chainSnakenet = '#f653a2';
const chainSora = '#2D2926';
const chainSpanner = '#EC3D3D';
const chainStandard = 'background: radial-gradient(circle, rgba(255,255,255,1) 0%, rgba(42,170,244,1) 35%, rgba(10,10,10,1) 100%)';
const chainWestend = '#da68a7';
const chainWhala = '#03f3f3';
const chainGalois = '#000000';
const chainZero = '#000000';
const chainZenlink = 'linear-gradient(45deg, #F20082 0%, #FF4D4D 100%)';
const chainJupiter = '#7143ff';
const chainUniarts = 'linear-gradient(150deg, #333ef7 0%, #55adff 100%)';
const chainUnique = '#40BCFF';
const chainIdavoll = '#ff43ff';
const chainSubDAO = 'linear-gradient(50deg, #F20092 0%, #FF4D5D 100%)';
const chainSubsocial = '#b9018c';
const chainSwapdex = '#E94082';
const chainTrustBase = '#ff43aa';
const chainTuring = '#A8278C';
const chainUnitv = '#1452F0';
const chainUnorthodox = 'radial-gradient(circle, rgba(255,255,255,1) 0%, rgba(42,244,187,1) 35%, rgba(10,10,10,1) 100%)';
const chainVln = '#33cc33';
const chainWeb3games = '#000000';
const chainWestlake = 'linear-gradient(-90deg, #9400D3 0%, #5A5CA9 50%, #00BFFF 100%)';
// based on node name
// alphabetical
const nodeAjuna = 'linear-gradient(135deg, #0e0c14, #12203b, #1f3451)';
const nodeApron = 'linear-gradient(45deg, #0099F7 0%, #2E49EB 100%)';
const nodeAres = '#E56239';
const nodeAstar = '#1b6dc1d9';
const nodeAutomata = '#EC7032';
const nodeAutomataContextFree = '#EC7032';
const nodeBasilisk = '#9eec1b';
const nodeBitCountry = '#191a2e';
const nodeBifrost = '#5a25f0';
const nodeCentrifuge = '#fcc367';
const nodeCoinversation = '#e6017a';
const nodeCompetitorsClub = '#213830';
const nodeCrownSterling = '#13264b';
const nodeDotMog = '#020609';
const nodeEdgeware = '#111111';
const nodeEfinity = '#496ddb';
const nodeEncointer = '#0000cc';
const nodeFantour = '#5a189a';
const nodeGalital = '#00063F;';
const nodeGamePower = '#5d21a5';
const nodeGeek = '#4f46e5';
const nodeHeiko = '#42d5de';
const nodeIntegritee = '#658ea9';
const nodeIpse = '#08a1e8';
const nodeJupiter = '#7143ff';
const nodeKonomi = '#007aff';
const nodeKpron = 'linear-gradient(45deg, #0099F7 0%, #2E49EB 100%)';
const nodeKylin = '#ed007e';
const nodeKlug = '#663399';
const nodeKusari = '#b8860b';
const nodeLitentry = 'linear-gradient(45deg, #5cc27c 0%, #6de98f 100%)';
const nodeManta = '#2070a6';
const nodeMathChain = '#000000';
const nodeMoonbeam = '#53cbc9';
const nodeMoonbase = '#F45B5B';
const nodeMoonriver = '#0E132E';
const nodeMybank = '#282736';
const nodeNFTMart = '#307182';
const nodeNodle = '#1ab394';
const nodeOdyssey = '#1295F0';
const nodeOpportunity = '#6143bc';
const nodeOriginTrail = '#131415';
const nodePangolin = '#5744ff';
const nodePangoro = '#5745de';
const nodeParallel = '#ef18ac';
const nodeParami = '#ee06e2';
const nodePichiu = '#ed007e';
const nodePolkadex = '#7C30DD';
const nodePolymesh = '#1348e4';
const nodePontem = '#A92FAC';
const nodePrism = 'linear-gradient(45deg, rgba(63,94,251,1) 0%, rgba(252,70,107,1) 100%)';
const nodeRealis = '#000000';
const nodeRiochain = '#1A3BB3';
const nodeRobonomics = '#2949d3';
const nodeSora = '#2D2926';
const nodeStafi = '#00F3AB';
const nodeSubDAO = 'linear-gradient(50deg, #F20092 0%, #FF4D5D 100%)';
const nodeSubsocial = '#b9018c';
const nodeSubspace = '#562b8e';
const nodeSwapdex = '#E94082';
const nodeTernoa = '#d622ff';
const nodeUniarts = chainUniarts;
const nodeUnique = chainUnique;
const nodeOpal = chainOpal;
const nodeWeb3games = '#000000';
const nodeWestlake = chainWestlake;
const nodeZeitgeist = 'linear-gradient(180deg, rgba(32,90,172,1) 0%, rgba(26,72,138,1) 50%, rgba(13,36,69,1) 100%)';
const nodeZero = '#0099cc';
const nodeZenlink = 'linear-gradient(45deg, #F20082 0%, #FF4D4D 100%)';
const nodeSubGame = '#EB027D';
const nodeZCloak = 'linear-gradient(to right, #E89A76 0%, #C5B8CC 50%, #B0B4D7 100%)';
// based on the spec name
const specShell = '#2e86ab'; // '#0596FC';
const specStatemine = '#113911';
const specStatemint = '#86e62a';
const specWestmint = '#77bb77';
export { emptyColor };
// Alphabetical overrides based on the actual matched chain name
// NOTE: This is as retrieved via the system.chain RPC
export const chainColors: Record<string, string> = Object.entries({
Acala: chainAcala,
'Acala Dev': chainAcala,
'acala mandala pc1': chainRoccoMandala,
'acala mandala pc2': chainRoccoMandala,
'Ajuna Testnet': chainAjuna,
'Aleph Zero': chainAleph,
'Aleph Zero Testnet': chainAleph,
Altair: chainAltair,
'Apron PC1': chainApron,
'Ares Gladios': chainAresGladios,
'Ares Odyssey': nodeOdyssey,
'Ares PC1': chainRoccoAres,
Astar: chainAstar,
Automata: chainAutomata,
'Automata ContextFree': chainAutomataContextFree,
'Basilisk testnet': chainBasiliskTestnet,
'Beast Developer': chainBeastEave,
bifrost: chainRoccoBifrost,
'Bifrost Asgard CC4': chainRoccoBifrost,
'Bifrost PC1': chainRoccoBifrost,
'Bifrost Stage Testnet': chainRoccoBifrost,
'Bit.Country Tewai Chain': chainBitCountry,
'Calamari Parachain': chainCalamari,
'Calamari Parachain Development': chainCalamari,
'Calamari Parachain Local': chainCalamari,
'Calamari Parachain Testnet': chainCalamari,
'Canvas on Rococo': chainRococoCanvas,
ChainX: chainChainx,
Clover: chainClover,
Coinversation: chainCoinversation,
'Competitors Club': chainCompetitorsClub,
Composable: chainComposable,
'Composable Finance': chainComposableFinance,
'Crown Sterling': chainCrownSterling,
crust: chainCrust,
'crust maxwell': chainCrustMaxwell,
'Crust PC1': chainCrust,
'darwinia cc1': chainDarwinia,
'Darwinia Crab': chainCrab,
'Darwinia Crab Redirect': chainCrab,
'Darwinia PC2': chainRoccoDarwinia,
'DataHighway Spreehafen Rococo Parachain Testnet': chainRoccoDataHighway,
'Dolphin Testnet': chainDolphin,
'DOTMog.com NET': chainDotMog,
Efinity: chainEfinity,
Equilibrium: chainEquilibrium,
EquilibriumTestnet: chainGenshiro,
'Fantour Development': chainFantour,
Galital: chainGalital,
'Galois-PoC-1': chainGalois,
'GamePower Network': chainGamePower,
Genshiro: chainGenshiro,
'Genshiro Rococo Testnet': chainGenshiro,
'Halongbay PC1': chainPolkaFoundry,
hanonycash: chainHanonycash,
HydraDX: chainHydrate,
'HydraDX Hydrate': chainHydrate,
'HydraDX Snakenet': chainSnakenet,
'HydraDX Snakenet Gen2': chainSnakenet,
'HydraDX Snakenet Gen3': chainSnakenet,
Idavoll: chainIdavoll,
InterBTC: chainInterbtc,
'InterBTC Staging': chainInterbtc,
Interlay: chainInterlay,
IpseTestnet: chainIpse,
'Jupiter A1': chainJupiter,
'Jupiter PC1': chainJupiter,
Karura: chainKarura,
Khala: chainKhala,
KICO: chainKico,
KILT: chainKilt,
'KILT Local': chainKiltDev,
'KILT Peregrine': chainKiltPeregrine,
'KILT Peregrine Stagenet': chainKiltDev,
'KILT Spiritnet': chainKilt,
'KILT Spiritnet Development': chainKiltDev,
'KILT Testnet': chainKiltDev,
Kintsugi: chainKintsugi,
'KLUGDOSSIER.NET': chainKlug,
Konomi: chainKonomi,
Kpron: nodeKpron,
Kulupu: chainKulupu,
Kusama: chainKusama,
'Kusama CC1': chainKusama,
'Kusama CC2': chainKusama,
'Kusama CC3': chainKusama,
kusari: chainKusari,
'Kylin Testnet': chainKylin,
'laminar turbulence pc1': chainRococoLaminar,
Litentry: chainLitentry,
Litmus: chainLitmus,
Mangata: chainMangata,
'Manta Parachain': chainManta,
'Manta Parachain Development': chainManta,
'Manta Parachain Local': chainManta,
'Manta Parachain Testnet': chainManta,
Mars: nodeAres,
MathChain: nodeMathChain,
'MathChain PC1': chainGalois,
Minix: chainMinix,
'Minix Testnet': chainMinix,
'Moonbase Alpha': nodeMoonbase,
'Moonbase Development Testnet': nodeMoonbase,
'Moonbase Stage': nodeMoonbase,
Moonbeam: nodeMoonbeam,
Moonriver: nodeMoonriver,
Moonrock: chainMoonrock,
'Moonsama Development': chainMoonsama,
Moonshadow: nodeMoonbeam,
'mybank.network Testnet': chainMybank,
'Neumann Network': chainNeumann,
'NFTMart Staging': chainNFTMart,
'NFTMart Testnet': chainNFTMart,
Odyssey: nodeOdyssey,
'Opal Node': chainOpal,
'OriginTrail Parachain': nodeOriginTrail,
'OriginTrail Parachain Testnet': nodeOriginTrail,
Pangolin: chainPangolin,
Pangoro: chainPangoro,
Parallel: chainParallel,
'Parallel Heiko': chainHeiko,
'Parami PC2': chainParami,
'Phala PC1': chainPhala,
'Phala PoC 4': chainPhala,
PHOENIX: chainPhoenix,
'Pichiu Testnet': chainPichiu,
'Pioneer Network': chainBitCountryPioneer,
Plasm: chainPlasm,
'Plasm PC2': chainPlasm,
PolkaBTC: chainInterbtc,
'Polkadex Testnet': chainPolkadex,
Polkadot: chainPolkadot,
'Polkadot CC1': chainPolkadot,
PolkaSmith: chainPolkaSmith,
'Pontem Testnet': chainPontem,
'Prism PC1': chainPrism,
'Prism Testnet': chainPrism,
'QUARTZ by UNIQUE': chainQuartz,
'ReAlis Network': nodeRealis,
RILT: chainKiltRilt,
'RioChain CC-1': chainRiochain,
'Riochain Staging': chainRiochain,
Robonomics: nodeRobonomics,
Rococo: chainRocco,
Sakura: chainSakura,
Shadow: chainShadow,
Sherpax: chainSherpax,
'Sherpax Testnet': chainSherpax,
Shiden: chainShiden,
'SORA Kusama': chainSora,
Spanner: chainSpanner,
Standard: chainStandard,
'Standard Kusama Parachain': chainUnorthodox,
Statemine: specStatemine,
'Statemine Test': specStatemine,
Statemint: specStatemint,
'Statemint Test': specStatemint,
'Steam PC': chainRococoEave,
SubDAO: chainSubDAO,
'SubDAO PC1': chainSubDAO,
'SubDAO Staging': chainSubDAO,
subgame: nodeSubGame,
'SubGame Gamma': nodeSubGame,
'SubGame Staging': nodeSubGame,
'Subsocial PC1': chainSubsocial,
Subspace: nodeSubspace,
swapdex: chainSwapdex,
Tick: chainRoccoTick,
Track: chainRoccoTrack,
Trick: chainRoccoTrick,
'TrustBase PC1': chainTrustBase,
'Turing Network': chainTuring,
'uni arts staging network': chainUniarts,
'UniArts Mainnet': chainUniarts,
'Unique Node': chainUnique,
UNIT: chainUnitv,
'VLN PC': chainVln,
'Web3Games Plum': chainWeb3games,
Westend: chainWestend,
Westlake: chainWestlake,
Westmint: specWestmint,
'Westmint Test': specWestmint,
Whala: chainWhala,
WILT: chainKilt,
'zcloak poc1': nodeZCloak,
'Zenlink PC1': chainZenlink,
'ZERO.IO': chainZero
}).reduce<Record<string, string>>((colors, [chain, color]) => ({
...colors,
[sanitize(chain)]: color
}), {});
// Alphabetical overrides based on the actual software node type
// NOTE: This is as retrieved via the system.name RPC
export const nodeColors = Object.entries({
'Ajuna Node': nodeAjuna,
'Apron Node': nodeApron,
Astar: nodeAstar,
'Automata ContextFree Node': nodeAutomataContextFree,
'Automata Node': nodeAutomata,
Basilisk: nodeBasilisk,
'Bifrost Node': nodeBifrost,
'Bifrost Stage Testnet': nodeBifrost,
'Bit.Country Node': nodeBitCountry,
'centrifuge chain': nodeCentrifuge,
'Centrifuge Chain Node': nodeCentrifuge,
Coinversation: nodeCoinversation,
'Competitors Club': nodeCompetitorsClub,
'Crown Sterling': nodeCrownSterling,
'DataHighway Spreehafen Rococo Parachain Testnet': chainRoccoDataHighway,
'DOTMog Node': nodeDotMog,
'edgeware node': nodeEdgeware,
Efinity: nodeEfinity,
'Encointer collator': nodeEncointer,
'Encointer Node noTEE': nodeEncointer,
'Fantour Development': nodeFantour,
Galital: nodeGalital,
'Galital Parachain Collator': nodeGalital,
'GamePower Node': nodeGamePower,
GEEK: nodeGeek,
'Integritee Collator': nodeIntegritee,
'Integritee Node': nodeIntegritee,
IpseTestnet: nodeIpse,
KICO: chainKico,
'Klug Dossier Node': nodeKlug,
'Konomi Collator': nodeKonomi,
'Kpron Collator': nodeKpron,
kusari: nodeKusari,
'Kylin Parachain Collator': nodeKylin,
'Litentry Collator': nodeLitentry,
'Manta Collator': nodeManta,
'Manta Node': nodeManta,
MathChain: nodeMathChain,
'Moonsama Development': chainMoonsama,
'mybank.network node': nodeMybank,
'NFTMart Staging': nodeNFTMart,
'NFTMart Testnet': nodeNFTMart,
'nodle chain node': nodeNodle,
'Opal Node': nodeOpal,
'Opportunity Standalone Testnet': nodeOpportunity,
'OriginTrail Parachain': nodeOriginTrail,
Pangolin: nodePangolin,
Pangoro: nodePangoro,
Parallel: nodeParallel,
'Parallel Heiko': nodeHeiko,
'Parami Collator': nodeParami,
'Patract Node': nodeJupiter,
'Pichiu Parachain Collator': nodePichiu,
'Polkadex Node': nodePolkadex,
'Polymesh Node': nodePolymesh,
'Pontem Node': nodePontem,
'Prism Collator': nodePrism,
'Prism Node': nodePrism,
'ReAlis Network': nodeRealis,
'Rio Defi Chain Node': nodeRiochain,
'Riochain Staging': nodeRiochain,
'Shiden Collator': chainShiden,
SORA: nodeSora,
'Stafi node': nodeStafi,
'Statemine Collator': specStatemint,
'Statemint Collator': specStatemint,
SubDAO: nodeSubDAO,
'SubDAO Collator': nodeSubDAO,
'SubDAO Staging': nodeSubDAO,
subgame: nodeSubGame,
'SubGame Gamma': nodeSubGame,
'SubGame Staging': nodeSubGame,
'subsocial node': nodeSubsocial,
Subspace: nodeSubspace,
'subzero node': nodeZero,
swapdex: nodeSwapdex,
'Ternoa Node': nodeTernoa,
'uni arts node': nodeUniarts,
'UniArts Node': nodeUniarts,
'Unique Node': nodeUnique,
'Web3Games Node': nodeWeb3games,
Westlake: nodeWestlake,
'Westmint Collator': specWestmint,
'zcloak node': nodeZCloak,
'Zeitgeist Collator': nodeZeitgeist,
'Zeitgeist Node': nodeZeitgeist,
'Zenlink Collator': nodeZenlink
}).reduce<Record<string, string>>((colors, [node, color]) => ({
...colors,
[sanitize(node)]: color
}), {});
// Alphabetical overrides based on the actual software node type
// NOTE: This is as retrieved via the system.name RPC
export const specColors = Object.entries({
shell: specShell,
statemine: specStatemine,
statemint: specStatemint,
westmint: specWestmint
}).reduce<Record<string, string>>((colors, [spec, color]) => ({
...colors,
[sanitize(spec)]: color
}), {});