Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude/scheduled_tasks.lock
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"sessionId":"6a9a5167-b0ff-4343-bb2f-c351be2b9d80","pid":26550,"acquiredAt":1778248347508}
{"sessionId":"5394fd24-2c0e-4283-be73-5c2f3db6eb97","pid":28223,"acquiredAt":1783688629894}
25 changes: 25 additions & 0 deletions Aster.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added drift.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added gem_wallet.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
File renamed without changes
Binary file added senpi.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 3 additions & 3 deletions src/app/products/[slug]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -566,9 +566,9 @@ export default async function ProviderPage({
// KPI domain sections. A product can belong to up to five KPI
// domains (perp venue, PM venue, PM data feed, HL builder, RPC
// provider). Every domain with data joins ONE pill bar so all
// stay reachable on the same page; with a single domain the
// section renders directly, no toggle bar (VenueKpiToggle
// handles both cases). Availability is resolved before render:
// stay reachable on the same page; the bar renders even for a
// single domain so the section is always labeled with its KPI
// family. Availability is resolved before render:
// perpContext / pmContext / hlStats above, hasRpcData for the
// rpc-hub snapshot.
const sections: { id: string; label: string; content: React.ReactNode }[] = [];
Expand Down
11 changes: 6 additions & 5 deletions src/components/venue-kpi-toggle.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,12 @@ import { useState } from "react";
* components rendered by the page and passed in as ReactNode content,
* so switching tabs costs zero network round trips.
*
* With a single section the content renders directly (a one-button
* toggle bar would be noise); with none, nothing. Inactive sections
* stay in the DOM under `hidden` so tab switches are instant and
* anchors keep working.
* The bar renders whenever at least one section exists, so a single
* domain still shows its labeled pill: the label tells the reader which
* KPI family they are looking at, and additional pills appear the day
* the product gains data in another domain. Inactive sections stay in
* the DOM under `hidden` so tab switches are instant and anchors keep
* working.
*
* Pill styling mirrors PmHubTabs / PerpHubTabs.
*/
Expand All @@ -31,7 +33,6 @@ export function VenueKpiToggle({
const [active, setActive] = useState(sections[0]?.id ?? "");

if (sections.length === 0) return null;
if (sections.length === 1) return <>{sections[0].content}</>;

return (
<div className="mt-10">
Expand Down
1 change: 1 addition & 0 deletions vibeliquid.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading