Aarav Sareen 1 месяц назад
Родитель
Сommit
25702e01ce
2 измененных файлов с 59 добавлено и 12 удалено
  1. 58 11
      packages/app/src/components/debug-bar.tsx
  2. 1 1
      packages/app/src/pages/layout-new.tsx

+ 58 - 11
packages/app/src/components/debug-bar.tsx

@@ -3,6 +3,7 @@ import { batch, createEffect, onCleanup, onMount } from "solid-js"
 import { createStore } from "solid-js/store"
 import { makeEventListener } from "@solid-primitives/event-listener"
 import { Tooltip } from "@opencode-ai/ui/tooltip"
+import { TooltipV2 } from "@opencode-ai/ui/v2/tooltip-v2"
 import { useLanguage } from "@/context/language"
 
 type Mem = Performance & {
@@ -51,19 +52,29 @@ const bad = (n: number | undefined, limit: number, low = false) => {
 
 const session = (path: string) => path.includes("/session")
 
-function Cell(props: { bad?: boolean; dim?: boolean; label: string; tip: string; value: string; wide?: boolean }) {
-  return (
-    <Tooltip value={props.tip} placement="top">
+function Cell(props: { bad?: boolean; dim?: boolean; inline?: boolean; label: string; tip: string; value: string; wide?: boolean }) {
+  const content = () => (
       <div
         classList={{
-          "flex min-h-[42px] w-full min-w-0 flex-col items-center justify-center rounded-[8px] px-0.5 py-1 text-center": true,
-          "col-span-2": !!props.wide,
+          "flex min-w-0 items-center": true,
+          "min-h-[20px] w-fit flex-row justify-start gap-1.5 px-1.5 py-0.5 text-left": !!props.inline,
+          "justify-center text-center": !props.inline,
+          "min-h-[42px] w-full flex-col rounded-[8px] px-0.5 py-1": !props.inline,
+          "col-span-2": !!props.wide && !props.inline,
         }}
       >
-        <div class="text-[10px] leading-none font-black uppercase tracking-[0.04em] opacity-70">{props.label}</div>
         <div
           classList={{
-            "text-[13px] leading-none font-bold tabular-nums sm:text-[14px]": true,
+            "text-[10px] leading-none font-black uppercase tracking-[0.04em] opacity-70": true,
+          }}
+        >
+          {props.label}
+        </div>
+        <div
+          classList={{
+            "uppercase leading-none font-bold tabular-nums": true,
+            "text-[11px]": !!props.inline,
+            "text-[13px] sm:text-[14px]": !props.inline,
             "text-text-on-critical-base": !!props.bad,
             "opacity-70": !!props.dim,
           }}
@@ -71,11 +82,24 @@ function Cell(props: { bad?: boolean; dim?: boolean; label: string; tip: string;
           {props.value}
         </div>
       </div>
+  )
+
+  if (props.inline) {
+    return (
+      <TooltipV2 value={props.tip} placement="top">
+        {content()}
+      </TooltipV2>
+    )
+  }
+
+  return (
+    <Tooltip value={props.tip} placement="top">
+      {content()}
     </Tooltip>
   )
 }
 
-export function DebugBar() {
+export function DebugBar(props: { inline?: boolean } = {}) {
   const language = useLanguage()
   const location = useLocation()
   const routing = useIsRouting()
@@ -101,7 +125,7 @@ export function DebugBar() {
     },
   })
 
-  const na = () => language.t("debugBar.na")
+  const na = () => language.t("debugBar.na").toUpperCase()
   const heap = () => (state.heap.limit ? (state.heap.used ?? 0) / state.heap.limit : undefined)
   const heapv = () => {
     const value = heap()
@@ -363,15 +387,30 @@ export function DebugBar() {
   return (
     <aside
       aria-label={language.t("debugBar.ariaLabel")}
-      class="pointer-events-auto fixed bottom-3 right-3 z-50 hidden w-[308px] max-w-[calc(100vw-1.5rem)] overflow-hidden rounded-xl border border-border-base bg-surface-raised-stronger-non-alpha p-0.5 text-text-strong shadow-[var(--shadow-lg-border-base)] md:block sm:bottom-4 sm:right-4 sm:w-[324px]"
+      classList={{
+        "pointer-events-auto hidden overflow-hidden text-text-strong md:block": true,
+        "mt-[-6px] w-full shrink-0 px-3 py-1": !!props.inline,
+        "fixed bottom-3 right-3 z-50 w-[308px] max-w-[calc(100vw-1.5rem)] rounded-xl border border-border-base bg-surface-raised-stronger-non-alpha p-0.5 shadow-[var(--shadow-lg-border-base)] sm:bottom-4 sm:right-4 sm:w-[324px]":
+          !props.inline,
+      }}
     >
-      <div class="grid grid-cols-5 gap-px font-mono">
+      <div
+        classList={{
+          "font-mono": true,
+          "gap-[9px]": !!props.inline,
+          "gap-px": !props.inline,
+          "flex w-full flex-nowrap items-center justify-start": !!props.inline,
+          "grid-cols-5": !props.inline,
+          grid: !props.inline,
+        }}
+      >
         <Cell
           label={language.t("debugBar.nav.label")}
           tip={language.t("debugBar.nav.tip")}
           value={navv()}
           bad={bad(state.nav.dur, 400)}
           dim={state.nav.dur === undefined && !state.nav.pending}
+          inline={props.inline}
         />
         <Cell
           label={language.t("debugBar.fps.label")}
@@ -379,6 +418,7 @@ export function DebugBar() {
           value={state.fps === undefined ? na() : `${Math.round(state.fps)}`}
           bad={bad(state.fps, 50, true)}
           dim={state.fps === undefined}
+          inline={props.inline}
         />
         <Cell
           label={language.t("debugBar.frame.label")}
@@ -386,6 +426,7 @@ export function DebugBar() {
           value={time(state.gap) ?? na()}
           bad={bad(state.gap, 50)}
           dim={state.gap === undefined}
+          inline={props.inline}
         />
         <Cell
           label={language.t("debugBar.jank.label")}
@@ -393,6 +434,7 @@ export function DebugBar() {
           value={state.jank === undefined ? na() : `${state.jank}`}
           bad={bad(state.jank, 8)}
           dim={state.jank === undefined}
+          inline={props.inline}
         />
         <Cell
           label={language.t("debugBar.long.label")}
@@ -400,6 +442,7 @@ export function DebugBar() {
           value={longv()}
           bad={bad(state.long.block, 200)}
           dim={state.long.count === undefined}
+          inline={props.inline}
         />
         <Cell
           label={language.t("debugBar.delay.label")}
@@ -407,6 +450,7 @@ export function DebugBar() {
           value={time(state.delay) ?? na()}
           bad={bad(state.delay, 100)}
           dim={state.delay === undefined}
+          inline={props.inline}
         />
         <Cell
           label={language.t("debugBar.inp.label")}
@@ -414,6 +458,7 @@ export function DebugBar() {
           value={time(state.inp) ?? na()}
           bad={bad(state.inp, 200)}
           dim={state.inp === undefined}
+          inline={props.inline}
         />
         <Cell
           label={language.t("debugBar.cls.label")}
@@ -421,6 +466,7 @@ export function DebugBar() {
           value={state.cls === undefined ? na() : state.cls.toFixed(2)}
           bad={bad(state.cls, 0.1)}
           dim={state.cls === undefined}
+          inline={props.inline}
         />
         <Cell
           label={language.t("debugBar.mem.label")}
@@ -435,6 +481,7 @@ export function DebugBar() {
           value={heapv()}
           bad={bad(heap(), 0.8)}
           dim={state.heap.used === undefined}
+          inline={props.inline}
           wide
         />
       </div>

+ 1 - 1
packages/app/src/pages/layout-new.tsx

@@ -36,7 +36,7 @@ export default function NewLayout(props: ParentProps) {
       <main class="flex-1 min-h-0 min-w-0 overflow-x-hidden flex flex-col items-start contain-strict">
         <Suspense>{props.children}</Suspense>
       </main>
-      {import.meta.env.DEV && <DebugBar />}
+      {import.meta.env.DEV && <DebugBar inline />}
       <HelpButton />
       <ToastRegion v2 />
     </div>