@almadar/ui 2.59.3 → 2.60.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -36416,14 +36416,15 @@ function VerifyModePanel({
36416
36416
  serverCount,
36417
36417
  localCount
36418
36418
  }) {
36419
+ const [expanded, setExpanded] = React127__namespace.useState(false);
36419
36420
  const scrollRef = React127__namespace.useRef(null);
36420
36421
  const prevCountRef = React127__namespace.useRef(0);
36421
36422
  React127__namespace.useEffect(() => {
36422
- if (transitions.length > prevCountRef.current && scrollRef.current) {
36423
+ if (expanded && transitions.length > prevCountRef.current && scrollRef.current) {
36423
36424
  scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
36424
36425
  }
36425
36426
  prevCountRef.current = transitions.length;
36426
- }, [transitions.length]);
36427
+ }, [transitions.length, expanded]);
36427
36428
  const hudBottom = typeof document !== "undefined" ? document.getElementById("slot-hud-bottom") : null;
36428
36429
  const panel = /* @__PURE__ */ jsxRuntime.jsxs(
36429
36430
  "div",
@@ -36435,21 +36436,39 @@ function VerifyModePanel({
36435
36436
  className
36436
36437
  ),
36437
36438
  "data-testid": "debugger-verify",
36438
- style: { height: "25vh", zIndex: hudBottom ? void 0 : 40 },
36439
+ "data-expanded": expanded ? "true" : "false",
36440
+ style: { height: expanded ? "25vh" : "auto", zIndex: hudBottom ? void 0 : 40 },
36439
36441
  children: [
36440
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-3 py-1.5 flex items-center gap-3 text-xs font-mono border-b border-border flex-shrink-0", children: [
36441
- /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: failedChecks > 0 ? "danger" : "success", size: "sm", children: failedChecks > 0 ? `${failedChecks} fail` : "OK" }),
36442
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-foreground/70", children: [
36443
- localCount,
36444
- " local"
36445
- ] }),
36446
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-purple-600 dark:text-purple-400", children: [
36447
- serverCount,
36448
- " server"
36449
- ] }),
36450
- traitStates && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-cyan-600 dark:text-cyan-400 truncate max-w-[400px]", children: traitStates })
36451
- ] }),
36452
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 flex overflow-hidden", children: [
36442
+ /* @__PURE__ */ jsxRuntime.jsxs(
36443
+ "button",
36444
+ {
36445
+ type: "button",
36446
+ onClick: () => setExpanded((v) => !v),
36447
+ className: "px-3 py-1.5 flex items-center gap-3 text-xs font-mono border-b border-border flex-shrink-0 w-full text-left hover:bg-[var(--color-card-hover,transparent)] cursor-pointer",
36448
+ "aria-expanded": expanded,
36449
+ "aria-label": expanded ? "Collapse verification timeline" : "Expand verification timeline",
36450
+ "data-testid": "debugger-verify-toggle",
36451
+ children: [
36452
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-foreground/50 w-3", "aria-hidden": true, children: expanded ? "\u25BE" : "\u25B8" }),
36453
+ /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: failedChecks > 0 ? "danger" : "success", size: "sm", children: failedChecks > 0 ? `${failedChecks} fail` : "OK" }),
36454
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-foreground/70", children: [
36455
+ localCount,
36456
+ " local"
36457
+ ] }),
36458
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-purple-600 dark:text-purple-400", children: [
36459
+ serverCount,
36460
+ " server"
36461
+ ] }),
36462
+ traitStates && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-cyan-600 dark:text-cyan-400 truncate max-w-[400px]", children: traitStates }),
36463
+ !expanded && transitions.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "ml-auto text-foreground/50", children: [
36464
+ transitions.length,
36465
+ " transition",
36466
+ transitions.length !== 1 ? "s" : ""
36467
+ ] })
36468
+ ]
36469
+ }
36470
+ ),
36471
+ expanded && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 flex overflow-hidden", children: [
36453
36472
  /* @__PURE__ */ jsxRuntime.jsx("div", { ref: scrollRef, className: "flex-1 overflow-y-auto", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-2 py-1", children: transitions.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-foreground/50 text-xs font-mono py-2 text-center", children: "Waiting for transitions..." }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-0.5", children: transitions.map((trace) => /* @__PURE__ */ jsxRuntime.jsx(TransitionRow, { trace }, trace.id)) }) }) }),
36454
36473
  /* @__PURE__ */ jsxRuntime.jsx(WalkMinimap, {})
36455
36474
  ] })
package/dist/avl/index.js CHANGED
@@ -36370,14 +36370,15 @@ function VerifyModePanel({
36370
36370
  serverCount,
36371
36371
  localCount
36372
36372
  }) {
36373
+ const [expanded, setExpanded] = React127.useState(false);
36373
36374
  const scrollRef = React127.useRef(null);
36374
36375
  const prevCountRef = React127.useRef(0);
36375
36376
  React127.useEffect(() => {
36376
- if (transitions.length > prevCountRef.current && scrollRef.current) {
36377
+ if (expanded && transitions.length > prevCountRef.current && scrollRef.current) {
36377
36378
  scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
36378
36379
  }
36379
36380
  prevCountRef.current = transitions.length;
36380
- }, [transitions.length]);
36381
+ }, [transitions.length, expanded]);
36381
36382
  const hudBottom = typeof document !== "undefined" ? document.getElementById("slot-hud-bottom") : null;
36382
36383
  const panel = /* @__PURE__ */ jsxs(
36383
36384
  "div",
@@ -36389,21 +36390,39 @@ function VerifyModePanel({
36389
36390
  className
36390
36391
  ),
36391
36392
  "data-testid": "debugger-verify",
36392
- style: { height: "25vh", zIndex: hudBottom ? void 0 : 40 },
36393
+ "data-expanded": expanded ? "true" : "false",
36394
+ style: { height: expanded ? "25vh" : "auto", zIndex: hudBottom ? void 0 : 40 },
36393
36395
  children: [
36394
- /* @__PURE__ */ jsxs("div", { className: "px-3 py-1.5 flex items-center gap-3 text-xs font-mono border-b border-border flex-shrink-0", children: [
36395
- /* @__PURE__ */ jsx(Badge, { variant: failedChecks > 0 ? "danger" : "success", size: "sm", children: failedChecks > 0 ? `${failedChecks} fail` : "OK" }),
36396
- /* @__PURE__ */ jsxs("span", { className: "text-foreground/70", children: [
36397
- localCount,
36398
- " local"
36399
- ] }),
36400
- /* @__PURE__ */ jsxs("span", { className: "text-purple-600 dark:text-purple-400", children: [
36401
- serverCount,
36402
- " server"
36403
- ] }),
36404
- traitStates && /* @__PURE__ */ jsx("span", { className: "text-cyan-600 dark:text-cyan-400 truncate max-w-[400px]", children: traitStates })
36405
- ] }),
36406
- /* @__PURE__ */ jsxs("div", { className: "flex-1 flex overflow-hidden", children: [
36396
+ /* @__PURE__ */ jsxs(
36397
+ "button",
36398
+ {
36399
+ type: "button",
36400
+ onClick: () => setExpanded((v) => !v),
36401
+ className: "px-3 py-1.5 flex items-center gap-3 text-xs font-mono border-b border-border flex-shrink-0 w-full text-left hover:bg-[var(--color-card-hover,transparent)] cursor-pointer",
36402
+ "aria-expanded": expanded,
36403
+ "aria-label": expanded ? "Collapse verification timeline" : "Expand verification timeline",
36404
+ "data-testid": "debugger-verify-toggle",
36405
+ children: [
36406
+ /* @__PURE__ */ jsx("span", { className: "text-foreground/50 w-3", "aria-hidden": true, children: expanded ? "\u25BE" : "\u25B8" }),
36407
+ /* @__PURE__ */ jsx(Badge, { variant: failedChecks > 0 ? "danger" : "success", size: "sm", children: failedChecks > 0 ? `${failedChecks} fail` : "OK" }),
36408
+ /* @__PURE__ */ jsxs("span", { className: "text-foreground/70", children: [
36409
+ localCount,
36410
+ " local"
36411
+ ] }),
36412
+ /* @__PURE__ */ jsxs("span", { className: "text-purple-600 dark:text-purple-400", children: [
36413
+ serverCount,
36414
+ " server"
36415
+ ] }),
36416
+ traitStates && /* @__PURE__ */ jsx("span", { className: "text-cyan-600 dark:text-cyan-400 truncate max-w-[400px]", children: traitStates }),
36417
+ !expanded && transitions.length > 0 && /* @__PURE__ */ jsxs("span", { className: "ml-auto text-foreground/50", children: [
36418
+ transitions.length,
36419
+ " transition",
36420
+ transitions.length !== 1 ? "s" : ""
36421
+ ] })
36422
+ ]
36423
+ }
36424
+ ),
36425
+ expanded && /* @__PURE__ */ jsxs("div", { className: "flex-1 flex overflow-hidden", children: [
36407
36426
  /* @__PURE__ */ jsx("div", { ref: scrollRef, className: "flex-1 overflow-y-auto", children: /* @__PURE__ */ jsx("div", { className: "px-2 py-1", children: transitions.length === 0 ? /* @__PURE__ */ jsx("div", { className: "text-foreground/50 text-xs font-mono py-2 text-center", children: "Waiting for transitions..." }) : /* @__PURE__ */ jsx("div", { className: "space-y-0.5", children: transitions.map((trace) => /* @__PURE__ */ jsx(TransitionRow, { trace }, trace.id)) }) }) }),
36408
36427
  /* @__PURE__ */ jsx(WalkMinimap, {})
36409
36428
  ] })
@@ -32404,14 +32404,15 @@ function VerifyModePanel({
32404
32404
  serverCount,
32405
32405
  localCount
32406
32406
  }) {
32407
+ const [expanded, setExpanded] = React110__namespace.useState(false);
32407
32408
  const scrollRef = React110__namespace.useRef(null);
32408
32409
  const prevCountRef = React110__namespace.useRef(0);
32409
32410
  React110__namespace.useEffect(() => {
32410
- if (transitions.length > prevCountRef.current && scrollRef.current) {
32411
+ if (expanded && transitions.length > prevCountRef.current && scrollRef.current) {
32411
32412
  scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
32412
32413
  }
32413
32414
  prevCountRef.current = transitions.length;
32414
- }, [transitions.length]);
32415
+ }, [transitions.length, expanded]);
32415
32416
  const hudBottom = typeof document !== "undefined" ? document.getElementById("slot-hud-bottom") : null;
32416
32417
  const panel = /* @__PURE__ */ jsxRuntime.jsxs(
32417
32418
  "div",
@@ -32423,21 +32424,39 @@ function VerifyModePanel({
32423
32424
  className
32424
32425
  ),
32425
32426
  "data-testid": "debugger-verify",
32426
- style: { height: "25vh", zIndex: hudBottom ? void 0 : 40 },
32427
+ "data-expanded": expanded ? "true" : "false",
32428
+ style: { height: expanded ? "25vh" : "auto", zIndex: hudBottom ? void 0 : 40 },
32427
32429
  children: [
32428
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-3 py-1.5 flex items-center gap-3 text-xs font-mono border-b border-border flex-shrink-0", children: [
32429
- /* @__PURE__ */ jsxRuntime.jsx(exports.Badge, { variant: failedChecks > 0 ? "danger" : "success", size: "sm", children: failedChecks > 0 ? `${failedChecks} fail` : "OK" }),
32430
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-foreground/70", children: [
32431
- localCount,
32432
- " local"
32433
- ] }),
32434
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-purple-600 dark:text-purple-400", children: [
32435
- serverCount,
32436
- " server"
32437
- ] }),
32438
- traitStates && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-cyan-600 dark:text-cyan-400 truncate max-w-[400px]", children: traitStates })
32439
- ] }),
32440
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 flex overflow-hidden", children: [
32430
+ /* @__PURE__ */ jsxRuntime.jsxs(
32431
+ "button",
32432
+ {
32433
+ type: "button",
32434
+ onClick: () => setExpanded((v) => !v),
32435
+ className: "px-3 py-1.5 flex items-center gap-3 text-xs font-mono border-b border-border flex-shrink-0 w-full text-left hover:bg-[var(--color-card-hover,transparent)] cursor-pointer",
32436
+ "aria-expanded": expanded,
32437
+ "aria-label": expanded ? "Collapse verification timeline" : "Expand verification timeline",
32438
+ "data-testid": "debugger-verify-toggle",
32439
+ children: [
32440
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-foreground/50 w-3", "aria-hidden": true, children: expanded ? "\u25BE" : "\u25B8" }),
32441
+ /* @__PURE__ */ jsxRuntime.jsx(exports.Badge, { variant: failedChecks > 0 ? "danger" : "success", size: "sm", children: failedChecks > 0 ? `${failedChecks} fail` : "OK" }),
32442
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-foreground/70", children: [
32443
+ localCount,
32444
+ " local"
32445
+ ] }),
32446
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-purple-600 dark:text-purple-400", children: [
32447
+ serverCount,
32448
+ " server"
32449
+ ] }),
32450
+ traitStates && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-cyan-600 dark:text-cyan-400 truncate max-w-[400px]", children: traitStates }),
32451
+ !expanded && transitions.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "ml-auto text-foreground/50", children: [
32452
+ transitions.length,
32453
+ " transition",
32454
+ transitions.length !== 1 ? "s" : ""
32455
+ ] })
32456
+ ]
32457
+ }
32458
+ ),
32459
+ expanded && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 flex overflow-hidden", children: [
32441
32460
  /* @__PURE__ */ jsxRuntime.jsx("div", { ref: scrollRef, className: "flex-1 overflow-y-auto", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-2 py-1", children: transitions.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-foreground/50 text-xs font-mono py-2 text-center", children: "Waiting for transitions..." }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-0.5", children: transitions.map((trace) => /* @__PURE__ */ jsxRuntime.jsx(TransitionRow, { trace }, trace.id)) }) }) }),
32442
32461
  /* @__PURE__ */ jsxRuntime.jsx(WalkMinimap, {})
32443
32462
  ] })
@@ -32359,14 +32359,15 @@ function VerifyModePanel({
32359
32359
  serverCount,
32360
32360
  localCount
32361
32361
  }) {
32362
+ const [expanded, setExpanded] = React110.useState(false);
32362
32363
  const scrollRef = React110.useRef(null);
32363
32364
  const prevCountRef = React110.useRef(0);
32364
32365
  React110.useEffect(() => {
32365
- if (transitions.length > prevCountRef.current && scrollRef.current) {
32366
+ if (expanded && transitions.length > prevCountRef.current && scrollRef.current) {
32366
32367
  scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
32367
32368
  }
32368
32369
  prevCountRef.current = transitions.length;
32369
- }, [transitions.length]);
32370
+ }, [transitions.length, expanded]);
32370
32371
  const hudBottom = typeof document !== "undefined" ? document.getElementById("slot-hud-bottom") : null;
32371
32372
  const panel = /* @__PURE__ */ jsxs(
32372
32373
  "div",
@@ -32378,21 +32379,39 @@ function VerifyModePanel({
32378
32379
  className
32379
32380
  ),
32380
32381
  "data-testid": "debugger-verify",
32381
- style: { height: "25vh", zIndex: hudBottom ? void 0 : 40 },
32382
+ "data-expanded": expanded ? "true" : "false",
32383
+ style: { height: expanded ? "25vh" : "auto", zIndex: hudBottom ? void 0 : 40 },
32382
32384
  children: [
32383
- /* @__PURE__ */ jsxs("div", { className: "px-3 py-1.5 flex items-center gap-3 text-xs font-mono border-b border-border flex-shrink-0", children: [
32384
- /* @__PURE__ */ jsx(Badge, { variant: failedChecks > 0 ? "danger" : "success", size: "sm", children: failedChecks > 0 ? `${failedChecks} fail` : "OK" }),
32385
- /* @__PURE__ */ jsxs("span", { className: "text-foreground/70", children: [
32386
- localCount,
32387
- " local"
32388
- ] }),
32389
- /* @__PURE__ */ jsxs("span", { className: "text-purple-600 dark:text-purple-400", children: [
32390
- serverCount,
32391
- " server"
32392
- ] }),
32393
- traitStates && /* @__PURE__ */ jsx("span", { className: "text-cyan-600 dark:text-cyan-400 truncate max-w-[400px]", children: traitStates })
32394
- ] }),
32395
- /* @__PURE__ */ jsxs("div", { className: "flex-1 flex overflow-hidden", children: [
32385
+ /* @__PURE__ */ jsxs(
32386
+ "button",
32387
+ {
32388
+ type: "button",
32389
+ onClick: () => setExpanded((v) => !v),
32390
+ className: "px-3 py-1.5 flex items-center gap-3 text-xs font-mono border-b border-border flex-shrink-0 w-full text-left hover:bg-[var(--color-card-hover,transparent)] cursor-pointer",
32391
+ "aria-expanded": expanded,
32392
+ "aria-label": expanded ? "Collapse verification timeline" : "Expand verification timeline",
32393
+ "data-testid": "debugger-verify-toggle",
32394
+ children: [
32395
+ /* @__PURE__ */ jsx("span", { className: "text-foreground/50 w-3", "aria-hidden": true, children: expanded ? "\u25BE" : "\u25B8" }),
32396
+ /* @__PURE__ */ jsx(Badge, { variant: failedChecks > 0 ? "danger" : "success", size: "sm", children: failedChecks > 0 ? `${failedChecks} fail` : "OK" }),
32397
+ /* @__PURE__ */ jsxs("span", { className: "text-foreground/70", children: [
32398
+ localCount,
32399
+ " local"
32400
+ ] }),
32401
+ /* @__PURE__ */ jsxs("span", { className: "text-purple-600 dark:text-purple-400", children: [
32402
+ serverCount,
32403
+ " server"
32404
+ ] }),
32405
+ traitStates && /* @__PURE__ */ jsx("span", { className: "text-cyan-600 dark:text-cyan-400 truncate max-w-[400px]", children: traitStates }),
32406
+ !expanded && transitions.length > 0 && /* @__PURE__ */ jsxs("span", { className: "ml-auto text-foreground/50", children: [
32407
+ transitions.length,
32408
+ " transition",
32409
+ transitions.length !== 1 ? "s" : ""
32410
+ ] })
32411
+ ]
32412
+ }
32413
+ ),
32414
+ expanded && /* @__PURE__ */ jsxs("div", { className: "flex-1 flex overflow-hidden", children: [
32396
32415
  /* @__PURE__ */ jsx("div", { ref: scrollRef, className: "flex-1 overflow-y-auto", children: /* @__PURE__ */ jsx("div", { className: "px-2 py-1", children: transitions.length === 0 ? /* @__PURE__ */ jsx("div", { className: "text-foreground/50 text-xs font-mono py-2 text-center", children: "Waiting for transitions..." }) : /* @__PURE__ */ jsx("div", { className: "space-y-0.5", children: transitions.map((trace) => /* @__PURE__ */ jsx(TransitionRow, { trace }, trace.id)) }) }) }),
32397
32416
  /* @__PURE__ */ jsx(WalkMinimap, {})
32398
32417
  ] })
@@ -33214,14 +33214,15 @@ function VerifyModePanel({
33214
33214
  serverCount,
33215
33215
  localCount
33216
33216
  }) {
33217
+ const [expanded, setExpanded] = React116__namespace.useState(false);
33217
33218
  const scrollRef = React116__namespace.useRef(null);
33218
33219
  const prevCountRef = React116__namespace.useRef(0);
33219
33220
  React116__namespace.useEffect(() => {
33220
- if (transitions.length > prevCountRef.current && scrollRef.current) {
33221
+ if (expanded && transitions.length > prevCountRef.current && scrollRef.current) {
33221
33222
  scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
33222
33223
  }
33223
33224
  prevCountRef.current = transitions.length;
33224
- }, [transitions.length]);
33225
+ }, [transitions.length, expanded]);
33225
33226
  const hudBottom = typeof document !== "undefined" ? document.getElementById("slot-hud-bottom") : null;
33226
33227
  const panel = /* @__PURE__ */ jsxRuntime.jsxs(
33227
33228
  "div",
@@ -33233,21 +33234,39 @@ function VerifyModePanel({
33233
33234
  className
33234
33235
  ),
33235
33236
  "data-testid": "debugger-verify",
33236
- style: { height: "25vh", zIndex: hudBottom ? void 0 : 40 },
33237
+ "data-expanded": expanded ? "true" : "false",
33238
+ style: { height: expanded ? "25vh" : "auto", zIndex: hudBottom ? void 0 : 40 },
33237
33239
  children: [
33238
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-3 py-1.5 flex items-center gap-3 text-xs font-mono border-b border-border flex-shrink-0", children: [
33239
- /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: failedChecks > 0 ? "danger" : "success", size: "sm", children: failedChecks > 0 ? `${failedChecks} fail` : "OK" }),
33240
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-foreground/70", children: [
33241
- localCount,
33242
- " local"
33243
- ] }),
33244
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-purple-600 dark:text-purple-400", children: [
33245
- serverCount,
33246
- " server"
33247
- ] }),
33248
- traitStates && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-cyan-600 dark:text-cyan-400 truncate max-w-[400px]", children: traitStates })
33249
- ] }),
33250
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 flex overflow-hidden", children: [
33240
+ /* @__PURE__ */ jsxRuntime.jsxs(
33241
+ "button",
33242
+ {
33243
+ type: "button",
33244
+ onClick: () => setExpanded((v) => !v),
33245
+ className: "px-3 py-1.5 flex items-center gap-3 text-xs font-mono border-b border-border flex-shrink-0 w-full text-left hover:bg-[var(--color-card-hover,transparent)] cursor-pointer",
33246
+ "aria-expanded": expanded,
33247
+ "aria-label": expanded ? "Collapse verification timeline" : "Expand verification timeline",
33248
+ "data-testid": "debugger-verify-toggle",
33249
+ children: [
33250
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-foreground/50 w-3", "aria-hidden": true, children: expanded ? "\u25BE" : "\u25B8" }),
33251
+ /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: failedChecks > 0 ? "danger" : "success", size: "sm", children: failedChecks > 0 ? `${failedChecks} fail` : "OK" }),
33252
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-foreground/70", children: [
33253
+ localCount,
33254
+ " local"
33255
+ ] }),
33256
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-purple-600 dark:text-purple-400", children: [
33257
+ serverCount,
33258
+ " server"
33259
+ ] }),
33260
+ traitStates && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-cyan-600 dark:text-cyan-400 truncate max-w-[400px]", children: traitStates }),
33261
+ !expanded && transitions.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "ml-auto text-foreground/50", children: [
33262
+ transitions.length,
33263
+ " transition",
33264
+ transitions.length !== 1 ? "s" : ""
33265
+ ] })
33266
+ ]
33267
+ }
33268
+ ),
33269
+ expanded && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 flex overflow-hidden", children: [
33251
33270
  /* @__PURE__ */ jsxRuntime.jsx("div", { ref: scrollRef, className: "flex-1 overflow-y-auto", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-2 py-1", children: transitions.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-foreground/50 text-xs font-mono py-2 text-center", children: "Waiting for transitions..." }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-0.5", children: transitions.map((trace) => /* @__PURE__ */ jsxRuntime.jsx(TransitionRow, { trace }, trace.id)) }) }) }),
33252
33271
  /* @__PURE__ */ jsxRuntime.jsx(WalkMinimap, {})
33253
33272
  ] })
@@ -33169,14 +33169,15 @@ function VerifyModePanel({
33169
33169
  serverCount,
33170
33170
  localCount
33171
33171
  }) {
33172
+ const [expanded, setExpanded] = React116.useState(false);
33172
33173
  const scrollRef = React116.useRef(null);
33173
33174
  const prevCountRef = React116.useRef(0);
33174
33175
  React116.useEffect(() => {
33175
- if (transitions.length > prevCountRef.current && scrollRef.current) {
33176
+ if (expanded && transitions.length > prevCountRef.current && scrollRef.current) {
33176
33177
  scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
33177
33178
  }
33178
33179
  prevCountRef.current = transitions.length;
33179
- }, [transitions.length]);
33180
+ }, [transitions.length, expanded]);
33180
33181
  const hudBottom = typeof document !== "undefined" ? document.getElementById("slot-hud-bottom") : null;
33181
33182
  const panel = /* @__PURE__ */ jsxs(
33182
33183
  "div",
@@ -33188,21 +33189,39 @@ function VerifyModePanel({
33188
33189
  className
33189
33190
  ),
33190
33191
  "data-testid": "debugger-verify",
33191
- style: { height: "25vh", zIndex: hudBottom ? void 0 : 40 },
33192
+ "data-expanded": expanded ? "true" : "false",
33193
+ style: { height: expanded ? "25vh" : "auto", zIndex: hudBottom ? void 0 : 40 },
33192
33194
  children: [
33193
- /* @__PURE__ */ jsxs("div", { className: "px-3 py-1.5 flex items-center gap-3 text-xs font-mono border-b border-border flex-shrink-0", children: [
33194
- /* @__PURE__ */ jsx(Badge, { variant: failedChecks > 0 ? "danger" : "success", size: "sm", children: failedChecks > 0 ? `${failedChecks} fail` : "OK" }),
33195
- /* @__PURE__ */ jsxs("span", { className: "text-foreground/70", children: [
33196
- localCount,
33197
- " local"
33198
- ] }),
33199
- /* @__PURE__ */ jsxs("span", { className: "text-purple-600 dark:text-purple-400", children: [
33200
- serverCount,
33201
- " server"
33202
- ] }),
33203
- traitStates && /* @__PURE__ */ jsx("span", { className: "text-cyan-600 dark:text-cyan-400 truncate max-w-[400px]", children: traitStates })
33204
- ] }),
33205
- /* @__PURE__ */ jsxs("div", { className: "flex-1 flex overflow-hidden", children: [
33195
+ /* @__PURE__ */ jsxs(
33196
+ "button",
33197
+ {
33198
+ type: "button",
33199
+ onClick: () => setExpanded((v) => !v),
33200
+ className: "px-3 py-1.5 flex items-center gap-3 text-xs font-mono border-b border-border flex-shrink-0 w-full text-left hover:bg-[var(--color-card-hover,transparent)] cursor-pointer",
33201
+ "aria-expanded": expanded,
33202
+ "aria-label": expanded ? "Collapse verification timeline" : "Expand verification timeline",
33203
+ "data-testid": "debugger-verify-toggle",
33204
+ children: [
33205
+ /* @__PURE__ */ jsx("span", { className: "text-foreground/50 w-3", "aria-hidden": true, children: expanded ? "\u25BE" : "\u25B8" }),
33206
+ /* @__PURE__ */ jsx(Badge, { variant: failedChecks > 0 ? "danger" : "success", size: "sm", children: failedChecks > 0 ? `${failedChecks} fail` : "OK" }),
33207
+ /* @__PURE__ */ jsxs("span", { className: "text-foreground/70", children: [
33208
+ localCount,
33209
+ " local"
33210
+ ] }),
33211
+ /* @__PURE__ */ jsxs("span", { className: "text-purple-600 dark:text-purple-400", children: [
33212
+ serverCount,
33213
+ " server"
33214
+ ] }),
33215
+ traitStates && /* @__PURE__ */ jsx("span", { className: "text-cyan-600 dark:text-cyan-400 truncate max-w-[400px]", children: traitStates }),
33216
+ !expanded && transitions.length > 0 && /* @__PURE__ */ jsxs("span", { className: "ml-auto text-foreground/50", children: [
33217
+ transitions.length,
33218
+ " transition",
33219
+ transitions.length !== 1 ? "s" : ""
33220
+ ] })
33221
+ ]
33222
+ }
33223
+ ),
33224
+ expanded && /* @__PURE__ */ jsxs("div", { className: "flex-1 flex overflow-hidden", children: [
33206
33225
  /* @__PURE__ */ jsx("div", { ref: scrollRef, className: "flex-1 overflow-y-auto", children: /* @__PURE__ */ jsx("div", { className: "px-2 py-1", children: transitions.length === 0 ? /* @__PURE__ */ jsx("div", { className: "text-foreground/50 text-xs font-mono py-2 text-center", children: "Waiting for transitions..." }) : /* @__PURE__ */ jsx("div", { className: "space-y-0.5", children: transitions.map((trace) => /* @__PURE__ */ jsx(TransitionRow, { trace }, trace.id)) }) }) }),
33207
33226
  /* @__PURE__ */ jsx(WalkMinimap, {})
33208
33227
  ] })
@@ -32787,14 +32787,15 @@ function VerifyModePanel({
32787
32787
  serverCount,
32788
32788
  localCount
32789
32789
  }) {
32790
+ const [expanded, setExpanded] = React116__namespace.useState(false);
32790
32791
  const scrollRef = React116__namespace.useRef(null);
32791
32792
  const prevCountRef = React116__namespace.useRef(0);
32792
32793
  React116__namespace.useEffect(() => {
32793
- if (transitions.length > prevCountRef.current && scrollRef.current) {
32794
+ if (expanded && transitions.length > prevCountRef.current && scrollRef.current) {
32794
32795
  scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
32795
32796
  }
32796
32797
  prevCountRef.current = transitions.length;
32797
- }, [transitions.length]);
32798
+ }, [transitions.length, expanded]);
32798
32799
  const hudBottom = typeof document !== "undefined" ? document.getElementById("slot-hud-bottom") : null;
32799
32800
  const panel = /* @__PURE__ */ jsxRuntime.jsxs(
32800
32801
  "div",
@@ -32806,21 +32807,39 @@ function VerifyModePanel({
32806
32807
  className
32807
32808
  ),
32808
32809
  "data-testid": "debugger-verify",
32809
- style: { height: "25vh", zIndex: hudBottom ? void 0 : 40 },
32810
+ "data-expanded": expanded ? "true" : "false",
32811
+ style: { height: expanded ? "25vh" : "auto", zIndex: hudBottom ? void 0 : 40 },
32810
32812
  children: [
32811
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-3 py-1.5 flex items-center gap-3 text-xs font-mono border-b border-border flex-shrink-0", children: [
32812
- /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: failedChecks > 0 ? "danger" : "success", size: "sm", children: failedChecks > 0 ? `${failedChecks} fail` : "OK" }),
32813
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-foreground/70", children: [
32814
- localCount,
32815
- " local"
32816
- ] }),
32817
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-purple-600 dark:text-purple-400", children: [
32818
- serverCount,
32819
- " server"
32820
- ] }),
32821
- traitStates && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-cyan-600 dark:text-cyan-400 truncate max-w-[400px]", children: traitStates })
32822
- ] }),
32823
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 flex overflow-hidden", children: [
32813
+ /* @__PURE__ */ jsxRuntime.jsxs(
32814
+ "button",
32815
+ {
32816
+ type: "button",
32817
+ onClick: () => setExpanded((v) => !v),
32818
+ className: "px-3 py-1.5 flex items-center gap-3 text-xs font-mono border-b border-border flex-shrink-0 w-full text-left hover:bg-[var(--color-card-hover,transparent)] cursor-pointer",
32819
+ "aria-expanded": expanded,
32820
+ "aria-label": expanded ? "Collapse verification timeline" : "Expand verification timeline",
32821
+ "data-testid": "debugger-verify-toggle",
32822
+ children: [
32823
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-foreground/50 w-3", "aria-hidden": true, children: expanded ? "\u25BE" : "\u25B8" }),
32824
+ /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: failedChecks > 0 ? "danger" : "success", size: "sm", children: failedChecks > 0 ? `${failedChecks} fail` : "OK" }),
32825
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-foreground/70", children: [
32826
+ localCount,
32827
+ " local"
32828
+ ] }),
32829
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-purple-600 dark:text-purple-400", children: [
32830
+ serverCount,
32831
+ " server"
32832
+ ] }),
32833
+ traitStates && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-cyan-600 dark:text-cyan-400 truncate max-w-[400px]", children: traitStates }),
32834
+ !expanded && transitions.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "ml-auto text-foreground/50", children: [
32835
+ transitions.length,
32836
+ " transition",
32837
+ transitions.length !== 1 ? "s" : ""
32838
+ ] })
32839
+ ]
32840
+ }
32841
+ ),
32842
+ expanded && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 flex overflow-hidden", children: [
32824
32843
  /* @__PURE__ */ jsxRuntime.jsx("div", { ref: scrollRef, className: "flex-1 overflow-y-auto", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-2 py-1", children: transitions.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-foreground/50 text-xs font-mono py-2 text-center", children: "Waiting for transitions..." }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-0.5", children: transitions.map((trace) => /* @__PURE__ */ jsxRuntime.jsx(TransitionRow, { trace }, trace.id)) }) }) }),
32825
32844
  /* @__PURE__ */ jsxRuntime.jsx(WalkMinimap, {})
32826
32845
  ] })
@@ -32742,14 +32742,15 @@ function VerifyModePanel({
32742
32742
  serverCount,
32743
32743
  localCount
32744
32744
  }) {
32745
+ const [expanded, setExpanded] = React116.useState(false);
32745
32746
  const scrollRef = React116.useRef(null);
32746
32747
  const prevCountRef = React116.useRef(0);
32747
32748
  React116.useEffect(() => {
32748
- if (transitions.length > prevCountRef.current && scrollRef.current) {
32749
+ if (expanded && transitions.length > prevCountRef.current && scrollRef.current) {
32749
32750
  scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
32750
32751
  }
32751
32752
  prevCountRef.current = transitions.length;
32752
- }, [transitions.length]);
32753
+ }, [transitions.length, expanded]);
32753
32754
  const hudBottom = typeof document !== "undefined" ? document.getElementById("slot-hud-bottom") : null;
32754
32755
  const panel = /* @__PURE__ */ jsxs(
32755
32756
  "div",
@@ -32761,21 +32762,39 @@ function VerifyModePanel({
32761
32762
  className
32762
32763
  ),
32763
32764
  "data-testid": "debugger-verify",
32764
- style: { height: "25vh", zIndex: hudBottom ? void 0 : 40 },
32765
+ "data-expanded": expanded ? "true" : "false",
32766
+ style: { height: expanded ? "25vh" : "auto", zIndex: hudBottom ? void 0 : 40 },
32765
32767
  children: [
32766
- /* @__PURE__ */ jsxs("div", { className: "px-3 py-1.5 flex items-center gap-3 text-xs font-mono border-b border-border flex-shrink-0", children: [
32767
- /* @__PURE__ */ jsx(Badge, { variant: failedChecks > 0 ? "danger" : "success", size: "sm", children: failedChecks > 0 ? `${failedChecks} fail` : "OK" }),
32768
- /* @__PURE__ */ jsxs("span", { className: "text-foreground/70", children: [
32769
- localCount,
32770
- " local"
32771
- ] }),
32772
- /* @__PURE__ */ jsxs("span", { className: "text-purple-600 dark:text-purple-400", children: [
32773
- serverCount,
32774
- " server"
32775
- ] }),
32776
- traitStates && /* @__PURE__ */ jsx("span", { className: "text-cyan-600 dark:text-cyan-400 truncate max-w-[400px]", children: traitStates })
32777
- ] }),
32778
- /* @__PURE__ */ jsxs("div", { className: "flex-1 flex overflow-hidden", children: [
32768
+ /* @__PURE__ */ jsxs(
32769
+ "button",
32770
+ {
32771
+ type: "button",
32772
+ onClick: () => setExpanded((v) => !v),
32773
+ className: "px-3 py-1.5 flex items-center gap-3 text-xs font-mono border-b border-border flex-shrink-0 w-full text-left hover:bg-[var(--color-card-hover,transparent)] cursor-pointer",
32774
+ "aria-expanded": expanded,
32775
+ "aria-label": expanded ? "Collapse verification timeline" : "Expand verification timeline",
32776
+ "data-testid": "debugger-verify-toggle",
32777
+ children: [
32778
+ /* @__PURE__ */ jsx("span", { className: "text-foreground/50 w-3", "aria-hidden": true, children: expanded ? "\u25BE" : "\u25B8" }),
32779
+ /* @__PURE__ */ jsx(Badge, { variant: failedChecks > 0 ? "danger" : "success", size: "sm", children: failedChecks > 0 ? `${failedChecks} fail` : "OK" }),
32780
+ /* @__PURE__ */ jsxs("span", { className: "text-foreground/70", children: [
32781
+ localCount,
32782
+ " local"
32783
+ ] }),
32784
+ /* @__PURE__ */ jsxs("span", { className: "text-purple-600 dark:text-purple-400", children: [
32785
+ serverCount,
32786
+ " server"
32787
+ ] }),
32788
+ traitStates && /* @__PURE__ */ jsx("span", { className: "text-cyan-600 dark:text-cyan-400 truncate max-w-[400px]", children: traitStates }),
32789
+ !expanded && transitions.length > 0 && /* @__PURE__ */ jsxs("span", { className: "ml-auto text-foreground/50", children: [
32790
+ transitions.length,
32791
+ " transition",
32792
+ transitions.length !== 1 ? "s" : ""
32793
+ ] })
32794
+ ]
32795
+ }
32796
+ ),
32797
+ expanded && /* @__PURE__ */ jsxs("div", { className: "flex-1 flex overflow-hidden", children: [
32779
32798
  /* @__PURE__ */ jsx("div", { ref: scrollRef, className: "flex-1 overflow-y-auto", children: /* @__PURE__ */ jsx("div", { className: "px-2 py-1", children: transitions.length === 0 ? /* @__PURE__ */ jsx("div", { className: "text-foreground/50 text-xs font-mono py-2 text-center", children: "Waiting for transitions..." }) : /* @__PURE__ */ jsx("div", { className: "space-y-0.5", children: transitions.map((trace) => /* @__PURE__ */ jsx(TransitionRow, { trace }, trace.id)) }) }) }),
32780
32799
  /* @__PURE__ */ jsx(WalkMinimap, {})
32781
32800
  ] })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@almadar/ui",
3
- "version": "2.59.3",
3
+ "version": "2.60.0",
4
4
  "description": "React UI components, hooks, and providers for Almadar",
5
5
  "type": "module",
6
6
  "main": "./dist/components/index.js",