mirror of
https://github.com/sky-systems/sky_phone.git
synced 2026-08-28 17:01:18 +00:00
ENH - redesign VaultX as premium exchange
Rebuild the portfolio, market, activity, asset-detail, and profile surfaces with a denser premium hierarchy and richer data visualization. Remove manual refresh controls, retain server-authoritative financial flows, and add localized allocation copy plus regression coverage.
This commit is contained in:
@@ -449,6 +449,10 @@ const cryptoFallbackLocales = {
|
||||
portfolio: {
|
||||
total: 'Total portfolio',
|
||||
cash: 'Available cash',
|
||||
invested: 'Invested assets',
|
||||
allocation: 'Portfolio allocation',
|
||||
inMarket: 'in markets',
|
||||
assets: 'assets',
|
||||
holdings: 'Your assets',
|
||||
empty: 'No assets yet',
|
||||
emptyBody: 'Open Markets to request a protected quote.',
|
||||
|
||||
@@ -47,6 +47,15 @@ describe('VaultX crypto app contracts', () => {
|
||||
expect(server).toContain('`price_alerts`')
|
||||
})
|
||||
|
||||
it('uses the premium dashboard hierarchy without manual refresh controls', () => {
|
||||
expect(source).toContain('class="portfolio-shell"')
|
||||
expect(source).toContain('class="featured-market"')
|
||||
expect(source).toContain('class="activity-ring"')
|
||||
expect(source).toContain('class="profile-card"')
|
||||
expect(source).not.toContain('RefreshCw')
|
||||
expect(source).not.toContain(':aria-label="t(\'refresh\')"')
|
||||
})
|
||||
|
||||
it('keeps all consequential calculations and state transitions on the server', () => {
|
||||
expect(server).toContain(
|
||||
'Bridge.Callbacks.Register("sky_phone:crypto:quote"',
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1055,7 +1055,7 @@ Locales["de"] = {
|
||||
eyebrow = "Charaktergebundene Börse", loginTitle = "Willkommen zurück", registerTitle = "Erstelle dein VaultX-Profil", body = "Handle fiktive digitale Assets mit dem Ingame-Geld deines Charakters.", login = "Einloggen", register = "Registrieren", handle = "VaultX-Benutzername", handlePlaceholder = "3–20 Buchstaben oder Zahlen", password = "Passwort", passwordPlaceholder = "8–72 Zeichen", showPassword = "Passwort anzeigen", hidePassword = "Passwort ausblenden", security = "Nutze ein In-Character-Passwort. Verwende niemals ein echtes Passwort erneut.", loginAction = "Portfolio öffnen", registerAction = "Sicheres Profil erstellen",
|
||||
},
|
||||
tabs = { portfolio = "Portfolio", markets = "Märkte", activity = "Aktivität", profile = "Profil" },
|
||||
portfolio = { total = "Gesamtes Portfolio", cash = "Verfügbares Guthaben", holdings = "Deine Assets", empty = "Noch keine Assets", emptyBody = "Öffne Märkte und fordere ein geschütztes Angebot an.", avg = "Ø", insightTitle = "Portfolio-Einblick", insightBody = "Deine Bestände werden mit den neuesten synthetischen Serverkursen bewertet." },
|
||||
portfolio = { total = "Gesamtes Portfolio", cash = "Verfügbares Guthaben", invested = "Investierte Assets", allocation = "Portfolio-Verteilung", inMarket = "in Märkten", assets = "Assets", holdings = "Deine Assets", empty = "Noch keine Assets", emptyBody = "Öffne Märkte und fordere ein geschütztes Angebot an.", avg = "Ø", insightTitle = "Portfolio-Einblick", insightBody = "Deine Bestände werden mit den neuesten synthetischen Serverkursen bewertet." },
|
||||
quick = { trade = "Handeln", more = "Mehr" },
|
||||
actions = { deposit = "Einzahlen", withdraw = "Auszahlen" },
|
||||
markets = { title = "Fiktive Märkte", live = "Serverpreise", noticeTitle = "Ingame-Börse", notice = "Die Kurse sind synthetisch und haben keinen realen Wert. Jeder Handel wird gegen die begrenzte Liquidität der Börse geprüft.", eyebrow = "Marktpuls", movers = "Top-Beweger", today = "Heute" },
|
||||
|
||||
@@ -1055,7 +1055,7 @@ Locales["en"] = {
|
||||
eyebrow = "Character-bound exchange", loginTitle = "Welcome back", registerTitle = "Create your VaultX profile", body = "Trade fictional digital assets with your character's in-game funds.", login = "Log in", register = "Register", handle = "VaultX handle", handlePlaceholder = "3–20 letters or numbers", password = "Password", passwordPlaceholder = "8–72 characters", showPassword = "Show password", hidePassword = "Hide password", security = "Use an in-character password. Never reuse a real password.", loginAction = "Open portfolio", registerAction = "Create secure profile",
|
||||
},
|
||||
tabs = { portfolio = "Portfolio", markets = "Markets", activity = "Activity", profile = "Profile" },
|
||||
portfolio = { total = "Total portfolio", cash = "Available cash", holdings = "Your assets", empty = "No assets yet", emptyBody = "Open Markets to request a protected quote.", avg = "Avg.", insightTitle = "Portfolio insight", insightBody = "Your holdings are valued against the latest synthetic server prices." },
|
||||
portfolio = { total = "Total portfolio", cash = "Available cash", invested = "Invested assets", allocation = "Portfolio allocation", inMarket = "in markets", assets = "assets", holdings = "Your assets", empty = "No assets yet", emptyBody = "Open Markets to request a protected quote.", avg = "Avg.", insightTitle = "Portfolio insight", insightBody = "Your holdings are valued against the latest synthetic server prices." },
|
||||
quick = { trade = "Trade", more = "More" },
|
||||
actions = { deposit = "Deposit", withdraw = "Withdraw" },
|
||||
markets = { title = "Fictional markets", live = "Server priced", noticeTitle = "In-game exchange", notice = "Prices are synthetic and have no real-world value. Every trade is checked against finite exchange liquidity.", eyebrow = "Market pulse", movers = "Top movers", today = "Today" },
|
||||
|
||||
Reference in New Issue
Block a user