@cortexkit/opencode-anthropic-auth 2.4.7 → 2.4.8

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.
@@ -1,7 +1,7 @@
1
- import { memo as _$memo } from "opentui:runtime-module:%40opentui%2Fsolid";
2
- import { createComponent as _$createComponent } from "opentui:runtime-module:%40opentui%2Fsolid";
3
1
  import { createTextNode as _$createTextNode } from "opentui:runtime-module:%40opentui%2Fsolid";
2
+ import { memo as _$memo } from "opentui:runtime-module:%40opentui%2Fsolid";
4
3
  import { use as _$use } from "opentui:runtime-module:%40opentui%2Fsolid";
4
+ import { createComponent as _$createComponent } from "opentui:runtime-module:%40opentui%2Fsolid";
5
5
  import { effect as _$effect } from "opentui:runtime-module:%40opentui%2Fsolid";
6
6
  import { insertNode as _$insertNode } from "opentui:runtime-module:%40opentui%2Fsolid";
7
7
  import { insert as _$insert } from "opentui:runtime-module:%40opentui%2Fsolid";
@@ -17,10 +17,11 @@ import { readFileSync } from "node:fs";
17
17
  import { dirname, join } from "node:path";
18
18
  import { fileURLToPath } from "node:url";
19
19
  import { formatCreditAmounts, quotaDisplayProjection, quotaWindowParts } from "@cortexkit/anthropic-auth-core";
20
- import { TextAttributes } from "opentui:runtime-module:%40opentui%2Fcore";
21
20
  import { createEffect, createMemo, createSignal, For, Index, onCleanup, Show } from "opentui:runtime-module:solid-js";
22
- import { computeQuotaPacing, DEFAULT_SIDEBAR_STATE, FIVE_HOUR_MS, fitPaceLine, fitQuotaRow, formatPrimeAccountValue, formatQuotaRowLabel, getCollapsedAccounts, getCollapsedQuotaSummary, getFableRecoverySummary, quotaLabelColumnWidth, resolveActiveAccount, SEVEN_DAY_MS, scopedQuotaShortNames } from "../sidebar-state.js";
21
+ import { createStore, reconcile } from "opentui:runtime-module:solid-js%2Fstore";
22
+ import { computeQuotaPacing, DEFAULT_SIDEBAR_STATE, FIVE_HOUR_MS, fitPaceLine, fitQuotaRow, formatPrimeAccountValue, getCollapsedAccounts, getCollapsedQuotaSummary, getFableRecoverySummary, quotaLabelColumnWidth, resolveActiveAccount, SEVEN_DAY_MS, scopedQuotaShortNames } from "../sidebar-state.js";
23
23
  import { PLUGIN_KEY, queueTuiPreferenceUpdate, readTuiPreferencesFile, resolveAnthropicAuthPrefs, watchTuiPreferences } from "../tui-preferences.js";
24
+ import { SidebarFrame, SidebarTextRow } from "./../quota-sidebar.js";
24
25
 
25
26
  // Read package metadata from either the raw src/ entry or its generated
26
27
  // src/tui-compiled/tui/ counterpart. Avoid a JSON import because package.json sits
@@ -64,6 +65,9 @@ function usageTone(usedPct, appearance) {
64
65
  if (usedPct < appearance.errorThreshold) return 'warn';
65
66
  return 'err';
66
67
  }
68
+ function sharedTone(tone) {
69
+ return tone === 'ok' ? 'success' : tone === 'warn' ? 'warning' : tone === 'err' ? 'error' : tone === 'muted' ? 'textMuted' : tone;
70
+ }
67
71
  const PACE_RESERVE_CHAR = '\u2592';
68
72
  const PACE_DEFICIT_CHAR = '\u2593';
69
73
 
@@ -198,111 +202,26 @@ function CollapsedRow(props) {
198
202
  return _el$8;
199
203
  })();
200
204
  }
201
- function CollapsedAccountRow(props) {
202
- const [width, setWidth] = createSignal(40);
203
- let row;
204
- const summary = () => getCollapsedQuotaSummary(props.account.quota, props.now);
205
- const value = () => summary().text ?? '—';
206
- // Keep the quota and its two-cell status suffix intact; only the label shrinks.
207
- const labelWidth = () => Math.max(0, width() - 1 - Bun.stringWidth(value()) - 2);
208
- const dim = () => !props.account.active || props.account.quotaDated || summary().stale;
209
- const attributes = () => dim() ? TextAttributes.DIM : TextAttributes.BOLD;
210
- const color = () => dim() ? props.theme.textMuted : toneColor(props.theme, props.tone);
211
- return (() => {
212
- var _el$0 = _$createElement("box"),
213
- _el$12 = _$createElement("text"),
214
- _el$13 = _$createElement("text");
215
- _$insertNode(_el$0, _el$12);
216
- _$insertNode(_el$0, _el$13);
217
- _$use(element => {
218
- row = element;
219
- setWidth(element.width || 40);
220
- }, _el$0);
221
- _$setProp(_el$0, "width", '100%');
222
- _$setProp(_el$0, "height", 1);
223
- _$setProp(_el$0, "flexDirection", 'row');
224
- _$setProp(_el$0, "onSizeChange", () => setWidth(row?.width || 40));
225
- _$insert(_el$0, _$createComponent(Show, {
226
- get when() {
227
- return labelWidth() > 0;
228
- },
229
- get children() {
230
- return [(() => {
231
- var _el$1 = _$createElement("text");
232
- _$setProp(_el$1, "flexShrink", 0);
233
- _$setProp(_el$1, "wrapMode", 'none');
234
- _$insert(_el$1, () => formatQuotaRowLabel(props.account.name, labelWidth()));
235
- _$effect(_p$ => {
236
- var _v$5 = labelWidth(),
237
- _v$6 = color(),
238
- _v$7 = attributes();
239
- _v$5 !== _p$.e && (_p$.e = _$setProp(_el$1, "width", _v$5, _p$.e));
240
- _v$6 !== _p$.t && (_p$.t = _$setProp(_el$1, "fg", _v$6, _p$.t));
241
- _v$7 !== _p$.a && (_p$.a = _$setProp(_el$1, "attributes", _v$7, _p$.a));
242
- return _p$;
243
- }, {
244
- e: undefined,
245
- t: undefined,
246
- a: undefined
247
- });
248
- return _el$1;
249
- })(), (() => {
250
- var _el$10 = _$createElement("text");
251
- _$insertNode(_el$10, _$createTextNode(` `));
252
- _$setProp(_el$10, "width", 1);
253
- _$setProp(_el$10, "flexShrink", 0);
254
- return _el$10;
255
- })()];
256
- }
257
- }), _el$12);
258
- _$setProp(_el$12, "flexShrink", 0);
259
- _$setProp(_el$12, "wrapMode", 'none');
260
- _$insert(_el$12, value);
261
- _$setProp(_el$13, "width", 2);
262
- _$setProp(_el$13, "flexShrink", 0);
263
- _$insert(_el$13, () => props.account.blocked ? ' ⊘' : ' ●');
264
- _$effect(_p$ => {
265
- var _v$8 = Bun.stringWidth(value()),
266
- _v$9 = color(),
267
- _v$0 = attributes(),
268
- _v$1 = toneColor(props.theme, props.account.blocked ? 'warn' : props.account.active ? 'ok' : 'muted'),
269
- _v$10 = attributes();
270
- _v$8 !== _p$.e && (_p$.e = _$setProp(_el$12, "width", _v$8, _p$.e));
271
- _v$9 !== _p$.t && (_p$.t = _$setProp(_el$12, "fg", _v$9, _p$.t));
272
- _v$0 !== _p$.a && (_p$.a = _$setProp(_el$12, "attributes", _v$0, _p$.a));
273
- _v$1 !== _p$.o && (_p$.o = _$setProp(_el$13, "fg", _v$1, _p$.o));
274
- _v$10 !== _p$.i && (_p$.i = _$setProp(_el$13, "attributes", _v$10, _p$.i));
275
- return _p$;
276
- }, {
277
- e: undefined,
278
- t: undefined,
279
- a: undefined,
280
- o: undefined,
281
- i: undefined
282
- });
283
- return _el$0;
284
- })();
285
- }
286
205
 
287
206
  // One cell run of a single-line row: drawn at its own width, never shrunk and
288
207
  // never wrapped, so the row's layout is exactly what `fitQuotaRow` measured.
289
208
  function Cell(props) {
290
209
  return (() => {
291
- var _el$14 = _$createElement("text");
292
- _$setProp(_el$14, "flexShrink", 0);
293
- _$setProp(_el$14, "wrapMode", 'none');
294
- _$insert(_el$14, () => props.text);
210
+ var _el$0 = _$createElement("text");
211
+ _$setProp(_el$0, "flexShrink", 0);
212
+ _$setProp(_el$0, "wrapMode", 'none');
213
+ _$insert(_el$0, () => props.text);
295
214
  _$effect(_p$ => {
296
- var _v$11 = Bun.stringWidth(props.text),
297
- _v$12 = props.fg;
298
- _v$11 !== _p$.e && (_p$.e = _$setProp(_el$14, "width", _v$11, _p$.e));
299
- _v$12 !== _p$.t && (_p$.t = _$setProp(_el$14, "fg", _v$12, _p$.t));
215
+ var _v$5 = Bun.stringWidth(props.text),
216
+ _v$6 = props.fg;
217
+ _v$5 !== _p$.e && (_p$.e = _$setProp(_el$0, "width", _v$5, _p$.e));
218
+ _v$6 !== _p$.t && (_p$.t = _$setProp(_el$0, "fg", _v$6, _p$.t));
300
219
  return _p$;
301
220
  }, {
302
221
  e: undefined,
303
222
  t: undefined
304
223
  });
305
- return _el$14;
224
+ return _el$0;
306
225
  })();
307
226
  }
308
227
 
@@ -332,11 +251,11 @@ function QuotaRow(props) {
332
251
  },
333
252
  get fallback() {
334
253
  return (() => {
335
- var _el$17 = _$createElement("box");
336
- _$setProp(_el$17, "width", '100%');
337
- _$setProp(_el$17, "height", 1);
338
- _$setProp(_el$17, "flexDirection", 'row');
339
- _$insert(_el$17, _$createComponent(Cell, {
254
+ var _el$11 = _$createElement("box");
255
+ _$setProp(_el$11, "width", '100%');
256
+ _$setProp(_el$11, "height", 1);
257
+ _$setProp(_el$11, "flexDirection", 'row');
258
+ _$insert(_el$11, _$createComponent(Cell, {
340
259
  get fg() {
341
260
  return props.theme.textMuted;
342
261
  },
@@ -344,26 +263,26 @@ function QuotaRow(props) {
344
263
  return `${labelCell()}\u2014`;
345
264
  }
346
265
  }));
347
- return _el$17;
266
+ return _el$11;
348
267
  })();
349
268
  },
350
269
  get children() {
351
270
  return [(() => {
352
- var _el$15 = _$createElement("box"),
353
- _el$16 = _$createElement("box");
354
- _$insertNode(_el$15, _el$16);
355
- _$setProp(_el$15, "width", '100%');
356
- _$setProp(_el$15, "height", 1);
357
- _$setProp(_el$15, "flexDirection", 'row');
358
- _$insert(_el$15, _$createComponent(Cell, {
271
+ var _el$1 = _$createElement("box"),
272
+ _el$10 = _$createElement("box");
273
+ _$insertNode(_el$1, _el$10);
274
+ _$setProp(_el$1, "width", '100%');
275
+ _$setProp(_el$1, "height", 1);
276
+ _$setProp(_el$1, "flexDirection", 'row');
277
+ _$insert(_el$1, _$createComponent(Cell, {
359
278
  get fg() {
360
279
  return props.theme.textMuted;
361
280
  },
362
281
  get text() {
363
282
  return labelCell();
364
283
  }
365
- }), _el$16);
366
- _$insert(_el$15, _$createComponent(Index, {
284
+ }), _el$10);
285
+ _$insert(_el$1, _$createComponent(Index, {
367
286
  get each() {
368
287
  return quotaBarSegments(used(), props.appearance, props.pacing, fit().barCells);
369
288
  },
@@ -375,17 +294,17 @@ function QuotaRow(props) {
375
294
  return segment().text;
376
295
  }
377
296
  })
378
- }), _el$16);
379
- _$insert(_el$15, _$createComponent(Cell, {
297
+ }), _el$10);
298
+ _$insert(_el$1, _$createComponent(Cell, {
380
299
  get fg() {
381
300
  return toneColor(props.theme, usageTone(used(), props.appearance));
382
301
  },
383
302
  get text() {
384
303
  return `${fit().barCells > 0 ? ' ' : ''}${figure()}`;
385
304
  }
386
- }), _el$16);
387
- _$setProp(_el$16, "flexGrow", 1);
388
- _$insert(_el$15, _$createComponent(Show, {
305
+ }), _el$10);
306
+ _$setProp(_el$10, "flexGrow", 1);
307
+ _$insert(_el$1, _$createComponent(Show, {
389
308
  get when() {
390
309
  return fit().reset;
391
310
  },
@@ -398,17 +317,17 @@ function QuotaRow(props) {
398
317
  }
399
318
  })
400
319
  }), null);
401
- return _el$15;
320
+ return _el$1;
402
321
  })(), _$createComponent(Show, {
403
322
  get when() {
404
323
  return paceLine();
405
324
  },
406
325
  children: line => (() => {
407
- var _el$18 = _$createElement("box");
408
- _$setProp(_el$18, "width", '100%');
409
- _$setProp(_el$18, "height", 1);
410
- _$setProp(_el$18, "flexDirection", 'row');
411
- _$insert(_el$18, _$createComponent(Cell, {
326
+ var _el$12 = _$createElement("box");
327
+ _$setProp(_el$12, "width", '100%');
328
+ _$setProp(_el$12, "height", 1);
329
+ _$setProp(_el$12, "flexDirection", 'row');
330
+ _$insert(_el$12, _$createComponent(Cell, {
412
331
  get fg() {
413
332
  return props.theme.textMuted;
414
333
  },
@@ -416,7 +335,7 @@ function QuotaRow(props) {
416
335
  return ' '.repeat(props.labelWidth + 1);
417
336
  }
418
337
  }), null);
419
- _$insert(_el$18, _$createComponent(Cell, {
338
+ _$insert(_el$12, _$createComponent(Cell, {
420
339
  get fg() {
421
340
  return toneColor(props.theme, props.pacing?.state === 'deficit' ? 'warn' : 'muted');
422
341
  },
@@ -424,7 +343,7 @@ function QuotaRow(props) {
424
343
  return line();
425
344
  }
426
345
  }), null);
427
- return _el$18;
346
+ return _el$12;
428
347
  })()
429
348
  })];
430
349
  }
@@ -464,50 +383,50 @@ export function AccountBlock(props) {
464
383
  const [width, setWidth] = createSignal();
465
384
  let block;
466
385
  return (() => {
467
- var _el$19 = _$createElement("box"),
468
- _el$20 = _$createElement("box"),
469
- _el$21 = _$createElement("text"),
470
- _el$22 = _$createElement("b"),
471
- _el$23 = _$createElement("text"),
472
- _el$24 = _$createElement("b");
473
- _$insertNode(_el$19, _el$20);
386
+ var _el$13 = _$createElement("box"),
387
+ _el$14 = _$createElement("box"),
388
+ _el$15 = _$createElement("text"),
389
+ _el$16 = _$createElement("b"),
390
+ _el$17 = _$createElement("text"),
391
+ _el$18 = _$createElement("b");
392
+ _$insertNode(_el$13, _el$14);
474
393
  _$use(element => {
475
394
  block = element;
476
395
  setWidth(element.width || undefined);
477
- }, _el$19);
478
- _$setProp(_el$19, "width", '100%');
479
- _$setProp(_el$19, "flexDirection", 'column');
480
- _$setProp(_el$19, "onSizeChange", () => setWidth(block?.width || undefined));
481
- _$insertNode(_el$20, _el$21);
482
- _$insertNode(_el$20, _el$23);
483
- _$setProp(_el$20, "width", '100%');
484
- _$setProp(_el$20, "flexDirection", 'row');
485
- _$setProp(_el$20, "justifyContent", 'space-between');
486
- _$insertNode(_el$21, _el$22);
487
- _$insert(_el$22, () => `${props.name}${props.tierLabel ? ` · ${props.tierLabel}` : ''}`);
488
- _$insertNode(_el$23, _el$24);
489
- _$insert(_el$24, statusWord);
490
- _$insert(_el$19, _$createComponent(Show, {
396
+ }, _el$13);
397
+ _$setProp(_el$13, "width", '100%');
398
+ _$setProp(_el$13, "flexDirection", 'column');
399
+ _$setProp(_el$13, "onSizeChange", () => setWidth(block?.width || undefined));
400
+ _$insertNode(_el$14, _el$15);
401
+ _$insertNode(_el$14, _el$17);
402
+ _$setProp(_el$14, "width", '100%');
403
+ _$setProp(_el$14, "flexDirection", 'row');
404
+ _$setProp(_el$14, "justifyContent", 'space-between');
405
+ _$insertNode(_el$15, _el$16);
406
+ _$insert(_el$16, () => `${props.name}${props.tierLabel ? ` · ${props.tierLabel}` : ''}`);
407
+ _$insertNode(_el$17, _el$18);
408
+ _$insert(_el$18, statusWord);
409
+ _$insert(_el$13, _$createComponent(Show, {
491
410
  get when() {
492
411
  return props.stateLine;
493
412
  },
494
413
  get children() {
495
- var _el$25 = _$createElement("text");
496
- _$insert(_el$25, () => props.stateLine);
497
- _$effect(_$p => _$setProp(_el$25, "fg", props.theme.textMuted, _$p));
498
- return _el$25;
414
+ var _el$19 = _$createElement("text");
415
+ _$insert(_el$19, () => props.stateLine);
416
+ _$effect(_$p => _$setProp(_el$19, "fg", props.theme.textMuted, _$p));
417
+ return _el$19;
499
418
  }
500
419
  }), null);
501
- _$insert(_el$19, _$createComponent(Show, {
420
+ _$insert(_el$13, _$createComponent(Show, {
502
421
  get when() {
503
422
  return props.quota;
504
423
  },
505
424
  get fallback() {
506
425
  return (() => {
507
- var _el$29 = _$createElement("text");
508
- _$insertNode(_el$29, _$createTextNode(`checking…`));
509
- _$effect(_$p => _$setProp(_el$29, "fg", props.theme.textMuted, _$p));
510
- return _el$29;
426
+ var _el$23 = _$createElement("text");
427
+ _$insertNode(_el$23, _$createTextNode(`checking…`));
428
+ _$effect(_$p => _$setProp(_el$23, "fg", props.theme.textMuted, _$p));
429
+ return _el$23;
511
430
  })();
512
431
  },
513
432
  get children() {
@@ -626,54 +545,99 @@ export function AccountBlock(props) {
626
545
  children: budget => // One line in the block's width: amounts drop their cents rather
627
546
  // than wrap, and keep them until the first layout.
628
547
  (() => {
629
- var _el$31 = _$createElement("box"),
630
- _el$32 = _$createElement("text");
631
- _$insertNode(_el$31, _el$32);
632
- _$setProp(_el$31, "width", '100%');
633
- _$setProp(_el$31, "height", 1);
634
- _$setProp(_el$31, "flexDirection", 'row');
635
- _$setProp(_el$32, "wrapMode", 'none');
636
- _$insert(_el$32, () => creditLine(budget().figure, props.quota?.extraUsage, width()));
637
- _$effect(_$p => _$setProp(_el$32, "fg", toneColor(props.theme, props.quota?.extraUsage?.severity === 'critical' ? 'err' : props.quota?.extraUsage?.severity === 'warning' || props.quota?.extraUsage?.exhausted ? 'warn' : 'muted'), _$p));
638
- return _el$31;
548
+ var _el$25 = _$createElement("box"),
549
+ _el$26 = _$createElement("text");
550
+ _$insertNode(_el$25, _el$26);
551
+ _$setProp(_el$25, "width", '100%');
552
+ _$setProp(_el$25, "height", 1);
553
+ _$setProp(_el$25, "flexDirection", 'row');
554
+ _$setProp(_el$26, "wrapMode", 'none');
555
+ _$insert(_el$26, () => creditLine(budget().figure, props.quota?.extraUsage, width()));
556
+ _$effect(_$p => _$setProp(_el$26, "fg", toneColor(props.theme, props.quota?.extraUsage?.severity === 'critical' ? 'err' : props.quota?.extraUsage?.severity === 'warning' || props.quota?.extraUsage?.exhausted ? 'warn' : 'muted'), _$p));
557
+ return _el$25;
639
558
  })()
640
559
  }), _$createComponent(Show, {
641
560
  get when() {
642
561
  return parts().age;
643
562
  },
644
563
  get children() {
645
- var _el$26 = _$createElement("text");
646
- _$insert(_el$26, () => parts().age);
647
- _$effect(_$p => _$setProp(_el$26, "fg", props.theme.textMuted, _$p));
648
- return _el$26;
564
+ var _el$20 = _$createElement("text");
565
+ _$insert(_el$20, () => parts().age);
566
+ _$effect(_$p => _$setProp(_el$20, "fg", props.theme.textMuted, _$p));
567
+ return _el$20;
649
568
  }
650
569
  }), _$createComponent(Show, {
651
570
  get when() {
652
571
  return props.quota?.fallbackAdvised === true;
653
572
  },
654
573
  get children() {
655
- var _el$27 = _$createElement("text");
656
- _$insertNode(_el$27, _$createTextNode(`→ fallback advised`));
657
- _$effect(_$p => _$setProp(_el$27, "fg", props.theme.textMuted, _$p));
658
- return _el$27;
574
+ var _el$21 = _$createElement("text");
575
+ _$insertNode(_el$21, _$createTextNode(`→ fallback advised`));
576
+ _$effect(_$p => _$setProp(_el$21, "fg", props.theme.textMuted, _$p));
577
+ return _el$21;
659
578
  }
660
579
  })];
661
580
  }
662
581
  }), null);
663
582
  _$effect(_p$ => {
664
- var _v$13 = props.marginTop ?? 0,
665
- _v$14 = props.theme.text,
666
- _v$15 = toneColor(props.theme, statusTone());
667
- _v$13 !== _p$.e && (_p$.e = _$setProp(_el$19, "marginTop", _v$13, _p$.e));
668
- _v$14 !== _p$.t && (_p$.t = _$setProp(_el$21, "fg", _v$14, _p$.t));
669
- _v$15 !== _p$.a && (_p$.a = _$setProp(_el$23, "fg", _v$15, _p$.a));
583
+ var _v$7 = props.marginTop ?? 0,
584
+ _v$8 = props.theme.text,
585
+ _v$9 = toneColor(props.theme, statusTone());
586
+ _v$7 !== _p$.e && (_p$.e = _$setProp(_el$13, "marginTop", _v$7, _p$.e));
587
+ _v$8 !== _p$.t && (_p$.t = _$setProp(_el$15, "fg", _v$8, _p$.t));
588
+ _v$9 !== _p$.a && (_p$.a = _$setProp(_el$17, "fg", _v$9, _p$.a));
670
589
  return _p$;
671
590
  }, {
672
591
  e: undefined,
673
592
  t: undefined,
674
593
  a: undefined
675
594
  });
676
- return _el$19;
595
+ return _el$13;
596
+ })();
597
+ }
598
+ function AccountExtras(props) {
599
+ const [width, setWidth] = createSignal();
600
+ let block;
601
+ const budget = () => quotaWindowParts(quotaDisplayProjection(props.quota, props.now), {
602
+ now: props.now
603
+ }).windows.find(part => part.kind === 'budget');
604
+ return (() => {
605
+ var _el$27 = _$createElement("box");
606
+ _$use(element => {
607
+ block = element;
608
+ setWidth(element.width || undefined);
609
+ }, _el$27);
610
+ _$setProp(_el$27, "width", '100%');
611
+ _$setProp(_el$27, "flexDirection", 'column');
612
+ _$setProp(_el$27, "onSizeChange", () => setWidth(block?.width || undefined));
613
+ _$insert(_el$27, _$createComponent(Show, {
614
+ get when() {
615
+ return budget();
616
+ },
617
+ children: part => (() => {
618
+ var _el$28 = _$createElement("box"),
619
+ _el$29 = _$createElement("text");
620
+ _$insertNode(_el$28, _el$29);
621
+ _$setProp(_el$28, "width", '100%');
622
+ _$setProp(_el$28, "height", 1);
623
+ _$setProp(_el$28, "flexDirection", 'row');
624
+ _$setProp(_el$29, "wrapMode", 'none');
625
+ _$insert(_el$29, () => creditLine(part().figure, props.quota?.extraUsage, width()));
626
+ _$effect(_$p => _$setProp(_el$29, "fg", toneColor(props.theme, props.quota?.extraUsage?.severity === 'critical' ? 'err' : props.quota?.extraUsage?.severity === 'warning' || props.quota?.extraUsage?.exhausted ? 'warn' : 'muted'), _$p));
627
+ return _el$28;
628
+ })()
629
+ }), null);
630
+ _$insert(_el$27, _$createComponent(Show, {
631
+ get when() {
632
+ return props.quota?.fallbackAdvised === true;
633
+ },
634
+ get children() {
635
+ return _$createComponent(SidebarTextRow, {
636
+ text: "\u2192 fallback advised"
637
+ });
638
+ }
639
+ }), null);
640
+ return _el$27;
677
641
  })();
678
642
  }
679
643
  // The TUI may unmount and remount sidebar_content when the user switches
@@ -747,12 +711,6 @@ export function ClaudeSidebar(props) {
747
711
  });
748
712
  const enabledFallbacks = () => (state().fallbacks ?? []).filter(f => f.enabled || f.custodyState && f.custodyState !== 'off');
749
713
  const hasData = () => state().main?.quota != null || state().main?.stateLine != null || enabledFallbacks().length > 0;
750
- // One label column for every expanded account, so all their bars line up.
751
- const quotaLabelWidth = () => quotaLabelColumnWidth([state().main?.quota, ...(prefs().sections.fallbackAccounts ? enabledFallbacks().map(fallback => fallback.quota) : [])], now());
752
- const headerLabel = () => {
753
- const name = prefs().header.label;
754
- return !hasData() ? name : collapsed() ? `\u25b6 ${name}` : `\u25bc ${name}`;
755
- };
756
714
  const activeAccount = () => resolveActiveAccount(state());
757
715
  const activeQuotaSummary = () => getCollapsedQuotaSummary(activeAccount().quota, now());
758
716
  const activePacingDeficit = () => {
@@ -790,420 +748,354 @@ export function ClaudeSidebar(props) {
790
748
  if (!r) return '\u2014';
791
749
  return `${r.transport} \u00b7 ${r.enabled ? 'on' : 'off'}`;
792
750
  };
793
- return (() => {
794
- var _el$33 = _$createElement("box"),
795
- _el$34 = _$createElement("box"),
796
- _el$35 = _$createElement("box"),
797
- _el$36 = _$createElement("text"),
798
- _el$37 = _$createElement("b");
799
- _$insertNode(_el$33, _el$34);
800
- _$setProp(_el$33, "width", '100%');
801
- _$setProp(_el$33, "flexDirection", 'column');
802
- _$insertNode(_el$34, _el$35);
803
- _$setProp(_el$34, "width", '100%');
804
- _$setProp(_el$34, "flexDirection", 'row');
805
- _$setProp(_el$34, "justifyContent", 'space-between');
806
- _$setProp(_el$34, "alignItems", 'center');
807
- _$setProp(_el$34, "onMouseDown", () => {
808
- if (hasData()) props.controller.toggleCollapsed();
751
+ const accountDetail = id => id === 'main' ? state().main : state().fallbacks?.find(account => account.id === id);
752
+ const accountViews = createMemo(() => {
753
+ if (!hasData()) return [];
754
+ return getCollapsedAccounts(state(), prefs().sections.fallbackAccounts).map(account => {
755
+ const detail = accountDetail(account.id);
756
+ const quota = quotaDisplayProjection(account.quota, now());
757
+ const needsReauth = detail && 'needsReauth' in detail && detail.needsReauth;
758
+ const vaultReauth = detail && 'vaultReauth' in detail && detail.vaultReauth;
759
+ const active = state().activeId === account.id;
760
+ const status = account.quotaDated && account.quota ? 'dated' : needsReauth ? 're-login' : vaultReauth ? 'needs sign-in in the vault' : active ? 'active' : 'idle';
761
+ const groups = [{
762
+ rows: quotaWindowParts(quota, {
763
+ now: now()
764
+ }).windows.filter(part => part.kind === 'window').map(part => {
765
+ const scoped = account.quota?.scoped?.find(window => window.title === part.name);
766
+ const window = part.name === '5h' ? account.quota?.five_hour : part.name === '7d' ? account.quota?.seven_day : scoped;
767
+ const pacing = prefs().sections.pacing && !account.quotaDated && window ? computeQuotaPacing(window, part.name === '5h' ? FIVE_HOUR_MS : SEVEN_DAY_MS, now()) : null;
768
+ const text = fitPaceLine(pacing, undefined, pacing?.runsOutAt ? formatResetIn(pacing.runsOutAt, now()) : undefined, part.resetIn, part.remainingPercent);
769
+ const pace = pacing ? {
770
+ text: text ?? '',
771
+ tone: pacing.state === 'deficit' ? 'warning' : 'textMuted',
772
+ overlay: {
773
+ kind: pacing.deltaPercent > 0 ? 'deficit' : 'reserve',
774
+ percent: pacing.pacePercent
775
+ }
776
+ } : undefined;
777
+ const binding = account.quota?.bindingWindow === (part.name === '5h' ? 'five_hour' : part.name === '7d' ? 'seven_day' : scoped?.id);
778
+ return {
779
+ part: {
780
+ ...part,
781
+ name: part.short,
782
+ figure: `${part.figure}${binding ? ' •' : ''}`
783
+ },
784
+ pace
785
+ };
786
+ })
787
+ }];
788
+ return {
789
+ id: account.id,
790
+ label: account.name,
791
+ titleSuffix: detail?.tierLabel,
792
+ quota,
793
+ groups,
794
+ status: {
795
+ text: status,
796
+ tone: needsReauth || vaultReauth || detail?.stateLine ? 'warning' : active ? 'success' : 'textMuted'
797
+ },
798
+ blocked: Boolean(account.blocked),
799
+ indicatorTone: account.blocked ? 'warning' : account.active ? 'success' : 'textMuted',
800
+ collapsed: {
801
+ muted: Boolean(!account.active || account.quotaDated || getCollapsedQuotaSummary(account.quota, now()).stale),
802
+ quotaTone: sharedTone(activeQuotaTone())
803
+ },
804
+ emptyQuotaText: {
805
+ expanded: 'checking…',
806
+ collapsed: '—'
807
+ }
808
+ };
809
809
  });
810
- _$insertNode(_el$35, _el$36);
811
- _$setProp(_el$35, "paddingLeft", 1);
812
- _$setProp(_el$35, "paddingRight", 1);
813
- _$insertNode(_el$36, _el$37);
814
- _$insert(_el$37, headerLabel);
815
- _$insert(_el$34, _$createComponent(Show, {
810
+ });
811
+ // Polls rebuild snapshots, but account ids keep the shared frame's rows mounted.
812
+ const [accounts, setAccounts] = createStore([]);
813
+ createEffect(() => setAccounts(reconcile(accountViews(), {
814
+ key: 'id'
815
+ })));
816
+ return _$createComponent(SidebarFrame, {
817
+ get header() {
818
+ return {
819
+ badge: prefs().header.label,
820
+ version: prefs().header.showVersion && PLUGIN_VERSION !== '' ? `v${PLUGIN_VERSION}` : undefined
821
+ };
822
+ },
823
+ accounts: accounts,
824
+ get theme() {
825
+ return theme();
826
+ },
827
+ get appearance() {
828
+ return prefs().appearance;
829
+ },
830
+ get showQuota() {
831
+ return prefs().sections.quota;
832
+ },
833
+ get now() {
834
+ return now();
835
+ },
836
+ get collapsed() {
837
+ return collapsed();
838
+ },
839
+ get onToggle() {
840
+ return props.controller.toggleCollapsed;
841
+ },
842
+ beforeQuota: account => _$createComponent(Show, {
816
843
  get when() {
817
- return prefs().header.showVersion && PLUGIN_VERSION !== '';
844
+ return accountDetail(account.id)?.stateLine;
845
+ },
846
+ children: text => _$createComponent(SidebarTextRow, {
847
+ get text() {
848
+ return text();
849
+ }
850
+ })
851
+ }),
852
+ afterQuota: account => _$createComponent(AccountExtras, {
853
+ get quota() {
854
+ return accountDetail(account.id)?.quota ?? null;
855
+ },
856
+ get now() {
857
+ return now();
858
+ },
859
+ get theme() {
860
+ return theme();
861
+ }
862
+ }),
863
+ collapsedSections: () => [_$createComponent(Show, {
864
+ get when() {
865
+ return state().fastMode;
818
866
  },
819
867
  get children() {
820
- var _el$38 = _$createElement("text");
821
- _$insert(_el$38, `v${PLUGIN_VERSION}`);
822
- _$effect(_$p => _$setProp(_el$38, "fg", theme().textMuted, _$p));
823
- return _el$38;
868
+ return _$createComponent(CollapsedRow, {
869
+ get theme() {
870
+ return theme();
871
+ },
872
+ label: "Mode",
873
+ get children() {
874
+ var _el$30 = _$createElement("text"),
875
+ _el$31 = _$createElement("b");
876
+ _$insertNode(_el$30, _el$31);
877
+ _$insertNode(_el$31, _$createTextNode(`fast`));
878
+ _$effect(_$p => _$setProp(_el$30, "fg", toneColor(theme(), 'accent'), _$p));
879
+ return _el$30;
880
+ }
881
+ });
824
882
  }
825
- }), null);
826
- _$insert(_el$33, _$createComponent(Show, {
883
+ }), _$createComponent(Show, {
884
+ get when() {
885
+ return fableRecoverySummary();
886
+ },
887
+ children: summary => _$createComponent(CollapsedRow, {
888
+ get theme() {
889
+ return theme();
890
+ },
891
+ label: "Recovery",
892
+ get children() {
893
+ var _el$33 = _$createElement("text"),
894
+ _el$34 = _$createElement("b");
895
+ _$insertNode(_el$33, _el$34);
896
+ _$insert(_el$34, summary);
897
+ _$effect(_$p => _$setProp(_el$33, "fg", toneColor(theme(), fableRecoveryTone()), _$p));
898
+ return _el$33;
899
+ }
900
+ })
901
+ })],
902
+ sections: () => [_$createComponent(Show, {
827
903
  get when() {
828
- return _$memo(() => !!collapsed())() && hasData();
904
+ return !hasData();
829
905
  },
830
906
  get children() {
831
- return [_$createComponent(Index, {
832
- get each() {
833
- return getCollapsedAccounts(state(), prefs().sections.fallbackAccounts);
907
+ var _el$35 = _$createElement("box"),
908
+ _el$36 = _$createElement("text");
909
+ _$insertNode(_el$35, _el$36);
910
+ _$setProp(_el$35, "marginTop", 1);
911
+ _$setProp(_el$35, "width", '100%');
912
+ _$insertNode(_el$36, _$createTextNode(`Waiting for quota…`));
913
+ _$effect(_$p => _$setProp(_el$36, "fg", theme().textMuted, _$p));
914
+ return _el$35;
915
+ }
916
+ }), _$createComponent(Show, {
917
+ get when() {
918
+ return prefs().sections.routing;
919
+ },
920
+ get children() {
921
+ return [_$createComponent(SectionHeader, {
922
+ get theme() {
923
+ return theme();
834
924
  },
835
- children: account => _$createComponent(CollapsedAccountRow, {
836
- get theme() {
837
- return theme();
838
- },
839
- get account() {
840
- return account();
841
- },
842
- get tone() {
843
- return activeQuotaTone();
844
- },
845
- get now() {
846
- return now();
847
- }
848
- })
849
- }), _$createComponent(Show, {
850
- get when() {
851
- return state().fastMode;
925
+ title: "Routing"
926
+ }), _$createComponent(StatRow, {
927
+ get theme() {
928
+ return theme();
852
929
  },
853
- get children() {
854
- return _$createComponent(CollapsedRow, {
855
- get theme() {
856
- return theme();
857
- },
858
- label: "Mode",
859
- get children() {
860
- var _el$39 = _$createElement("text"),
861
- _el$40 = _$createElement("b");
862
- _$insertNode(_el$39, _el$40);
863
- _$insertNode(_el$40, _$createTextNode(`fast`));
864
- _$effect(_$p => _$setProp(_el$39, "fg", toneColor(theme(), 'accent'), _$p));
865
- return _el$39;
866
- }
867
- });
930
+ label: "Route",
931
+ get value() {
932
+ return state().route;
933
+ },
934
+ tone: "accent"
935
+ }), _$createComponent(StatRow, {
936
+ get theme() {
937
+ return theme();
938
+ },
939
+ label: "Mode",
940
+ get value() {
941
+ return state().fastMode ? 'fast' : 'std';
942
+ },
943
+ get tone() {
944
+ return state().fastMode ? 'accent' : 'muted';
868
945
  }
869
- }), _$createComponent(Show, {
870
- get when() {
871
- return fableRecoverySummary();
946
+ }), _$createComponent(StatRow, {
947
+ get theme() {
948
+ return theme();
872
949
  },
873
- children: summary => _$createComponent(CollapsedRow, {
874
- get theme() {
875
- return theme();
876
- },
877
- label: "Recovery",
878
- get children() {
879
- var _el$42 = _$createElement("text"),
880
- _el$43 = _$createElement("b");
881
- _$insertNode(_el$42, _el$43);
882
- _$insert(_el$43, summary);
883
- _$effect(_$p => _$setProp(_el$42, "fg", toneColor(theme(), fableRecoveryTone()), _$p));
884
- return _el$42;
885
- }
886
- })
950
+ label: "Relay",
951
+ get value() {
952
+ return relayValue();
953
+ },
954
+ get tone() {
955
+ return state().relay?.enabled ? 'ok' : 'muted';
956
+ }
887
957
  })];
888
958
  }
889
- }), null);
890
- _$insert(_el$33, _$createComponent(Show, {
959
+ }), _$createComponent(Show, {
891
960
  get when() {
892
- return !collapsed() || !hasData();
961
+ return fableRecoverySummary();
962
+ },
963
+ children: summary => _$createComponent(StatRow, {
964
+ get theme() {
965
+ return theme();
966
+ },
967
+ label: "Recovery",
968
+ get value() {
969
+ return summary();
970
+ },
971
+ get tone() {
972
+ return fableRecoveryTone();
973
+ }
974
+ })
975
+ }), _$createComponent(Show, {
976
+ get when() {
977
+ return showCache();
893
978
  },
894
979
  get children() {
895
- return [_$createComponent(Show, {
896
- get when() {
897
- return hasData();
980
+ return [_$createComponent(SectionHeader, {
981
+ get theme() {
982
+ return theme();
898
983
  },
899
- get fallback() {
900
- return (() => {
901
- var _el$44 = _$createElement("box"),
902
- _el$45 = _$createElement("text");
903
- _$insertNode(_el$44, _el$45);
904
- _$setProp(_el$44, "marginTop", 1);
905
- _$setProp(_el$44, "width", '100%');
906
- _$insertNode(_el$45, _$createTextNode(`Waiting for quota…`));
907
- _$effect(_$p => _$setProp(_el$45, "fg", theme().textMuted, _$p));
908
- return _el$44;
909
- })();
984
+ title: "Cache"
985
+ }), _$createComponent(StatRow, {
986
+ get theme() {
987
+ return theme();
910
988
  },
911
- get children() {
912
- return _$createComponent(Show, {
913
- get when() {
914
- return prefs().sections.quota;
915
- },
916
- get children() {
917
- return [_$createComponent(SectionHeader, {
918
- get theme() {
919
- return theme();
920
- },
921
- title: "Quota"
922
- }), _$createComponent(AccountBlock, {
923
- get theme() {
924
- return theme();
925
- },
926
- get appearance() {
927
- return prefs().appearance;
928
- },
929
- name: "main",
930
- get quota() {
931
- return state().main?.quota;
932
- },
933
- get active() {
934
- return state().activeId === 'main';
935
- },
936
- get pacingEnabled() {
937
- return prefs().sections.pacing;
938
- },
939
- get tierLabel() {
940
- return state().main?.tierLabel;
941
- },
942
- get labelWidth() {
943
- return quotaLabelWidth();
944
- },
945
- get stateLine() {
946
- return state().main?.stateLine;
947
- },
948
- get quotaDated() {
949
- return state().main?.quotaDated;
950
- },
951
- get now() {
952
- return now();
953
- }
954
- }), _$createComponent(Show, {
955
- get when() {
956
- return prefs().sections.fallbackAccounts;
957
- },
958
- get children() {
959
- return _$createComponent(For, {
960
- get each() {
961
- return enabledFallbacks();
962
- },
963
- children: fb => _$createComponent(AccountBlock, {
964
- get theme() {
965
- return theme();
966
- },
967
- get appearance() {
968
- return prefs().appearance;
969
- },
970
- get name() {
971
- return fb.label ?? fb.id;
972
- },
973
- get quota() {
974
- return fb.quota;
975
- },
976
- get active() {
977
- return state().activeId === fb.id;
978
- },
979
- get pacingEnabled() {
980
- return prefs().sections.pacing;
981
- },
982
- get tierLabel() {
983
- return fb.tierLabel;
984
- },
985
- get labelWidth() {
986
- return quotaLabelWidth();
987
- },
988
- get needsReauth() {
989
- return fb.needsReauth;
990
- },
991
- get vaultReauth() {
992
- return fb.vaultReauth;
993
- },
994
- get stateLine() {
995
- return fb.stateLine;
996
- },
997
- get quotaDated() {
998
- return fb.quotaDated;
999
- },
1000
- marginTop: 1,
1001
- get now() {
1002
- return now();
1003
- }
1004
- })
1005
- });
1006
- }
1007
- })];
1008
- }
1009
- });
989
+ label: "1h cache",
990
+ get value() {
991
+ return `${cacheKeep()?.window} \u00b7 ${cacheKeep()?.enabled ? 'on' : 'off'}`;
992
+ },
993
+ get tone() {
994
+ return cacheKeep()?.enabled ? 'ok' : 'muted';
1010
995
  }
1011
996
  }), _$createComponent(Show, {
1012
997
  get when() {
1013
- return prefs().sections.routing;
998
+ return (cacheKeep()?.trackedSessions ?? 0) > 0;
1014
999
  },
1015
1000
  get children() {
1016
- return [_$createComponent(SectionHeader, {
1001
+ return _$createComponent(StatRow, {
1017
1002
  get theme() {
1018
1003
  return theme();
1019
1004
  },
1020
- title: "Routing"
1021
- }), _$createComponent(StatRow, {
1022
- get theme() {
1023
- return theme();
1024
- },
1025
- label: "Route",
1026
- get value() {
1027
- return state().route;
1028
- },
1029
- tone: "accent"
1030
- }), _$createComponent(StatRow, {
1031
- get theme() {
1032
- return theme();
1033
- },
1034
- label: "Mode",
1035
- get value() {
1036
- return state().fastMode ? 'fast' : 'std';
1037
- },
1038
- get tone() {
1039
- return state().fastMode ? 'accent' : 'muted';
1040
- }
1041
- }), _$createComponent(StatRow, {
1042
- get theme() {
1043
- return theme();
1044
- },
1045
- label: "Relay",
1005
+ label: "Tracked",
1046
1006
  get value() {
1047
- return relayValue();
1007
+ return String(cacheKeep()?.trackedSessions);
1048
1008
  },
1049
- get tone() {
1050
- return state().relay?.enabled ? 'ok' : 'muted';
1051
- }
1052
- })];
1009
+ tone: "text"
1010
+ });
1053
1011
  }
1054
- }), _$createComponent(Show, {
1055
- get when() {
1056
- return fableRecoverySummary();
1012
+ })];
1013
+ }
1014
+ }), _$createComponent(Show, {
1015
+ get when() {
1016
+ return showPrime();
1017
+ },
1018
+ get children() {
1019
+ return [_$createComponent(StatRow, {
1020
+ get theme() {
1021
+ return theme();
1057
1022
  },
1058
- children: summary => _$createComponent(StatRow, {
1059
- get theme() {
1060
- return theme();
1061
- },
1062
- label: "Recovery",
1063
- get value() {
1064
- return summary();
1065
- },
1066
- get tone() {
1067
- return fableRecoveryTone();
1068
- }
1069
- })
1070
- }), _$createComponent(Show, {
1071
- get when() {
1072
- return showCache();
1023
+ label: "Prime",
1024
+ get value() {
1025
+ return primeHasError() ? 'err' : 'on';
1073
1026
  },
1074
- get children() {
1075
- return [_$createComponent(SectionHeader, {
1027
+ get tone() {
1028
+ return primeHasError() ? 'warn' : 'ok';
1029
+ }
1030
+ }), _$createComponent(For, {
1031
+ get each() {
1032
+ return prime()?.accounts ?? [];
1033
+ },
1034
+ children: account => {
1035
+ const value = () => formatPrimeAccountValue(account, now());
1036
+ return _$createComponent(StatRow, {
1076
1037
  get theme() {
1077
1038
  return theme();
1078
1039
  },
1079
- title: "Cache"
1080
- }), _$createComponent(StatRow, {
1081
- get theme() {
1082
- return theme();
1040
+ get label() {
1041
+ return account.label;
1083
1042
  },
1084
- label: "1h cache",
1085
1043
  get value() {
1086
- return `${cacheKeep()?.window} \u00b7 ${cacheKeep()?.enabled ? 'on' : 'off'}`;
1044
+ return value().text;
1087
1045
  },
1088
1046
  get tone() {
1089
- return cacheKeep()?.enabled ? 'ok' : 'muted';
1047
+ return value().hasError ? 'warn' : 'text';
1090
1048
  }
1091
- }), _$createComponent(Show, {
1092
- get when() {
1093
- return (cacheKeep()?.trackedSessions ?? 0) > 0;
1094
- },
1095
- get children() {
1096
- return _$createComponent(StatRow, {
1097
- get theme() {
1098
- return theme();
1099
- },
1100
- label: "Tracked",
1101
- get value() {
1102
- return String(cacheKeep()?.trackedSessions);
1103
- },
1104
- tone: "text"
1105
- });
1106
- }
1107
- })];
1049
+ });
1108
1050
  }
1051
+ })];
1052
+ }
1053
+ }), _$createComponent(Show, {
1054
+ get when() {
1055
+ return _$memo(() => !!degraded())() && prefs().sections.health;
1056
+ },
1057
+ get children() {
1058
+ return [_$createComponent(SectionHeader, {
1059
+ get theme() {
1060
+ return theme();
1061
+ },
1062
+ title: "Health"
1109
1063
  }), _$createComponent(Show, {
1110
1064
  get when() {
1111
- return showPrime();
1065
+ return quotaBackedOff();
1112
1066
  },
1113
1067
  get children() {
1114
- return [_$createComponent(StatRow, {
1068
+ return _$createComponent(StatRow, {
1115
1069
  get theme() {
1116
1070
  return theme();
1117
1071
  },
1118
- label: "Prime",
1072
+ label: "Quota API",
1119
1073
  get value() {
1120
- return primeHasError() ? 'err' : 'on';
1121
- },
1122
- get tone() {
1123
- return primeHasError() ? 'warn' : 'ok';
1124
- }
1125
- }), _$createComponent(For, {
1126
- get each() {
1127
- return prime()?.accounts ?? [];
1074
+ return `backoff ${formatUntil(state().main?.quotaBackoffUntil, now())}`;
1128
1075
  },
1129
- children: account => {
1130
- const value = () => formatPrimeAccountValue(account, now());
1131
- return _$createComponent(StatRow, {
1132
- get theme() {
1133
- return theme();
1134
- },
1135
- get label() {
1136
- return account.label;
1137
- },
1138
- get value() {
1139
- return value().text;
1140
- },
1141
- get tone() {
1142
- return value().hasError ? 'warn' : 'text';
1143
- }
1144
- });
1145
- }
1146
- })];
1076
+ tone: "warn"
1077
+ });
1147
1078
  }
1148
1079
  }), _$createComponent(Show, {
1149
1080
  get when() {
1150
- return _$memo(() => !!degraded())() && prefs().sections.health;
1081
+ return refreshBackedOff();
1151
1082
  },
1152
1083
  get children() {
1153
- return [_$createComponent(SectionHeader, {
1084
+ return _$createComponent(StatRow, {
1154
1085
  get theme() {
1155
1086
  return theme();
1156
1087
  },
1157
- title: "Health"
1158
- }), _$createComponent(Show, {
1159
- get when() {
1160
- return quotaBackedOff();
1161
- },
1162
- get children() {
1163
- return _$createComponent(StatRow, {
1164
- get theme() {
1165
- return theme();
1166
- },
1167
- label: "Quota API",
1168
- get value() {
1169
- return `backoff ${formatUntil(state().main?.quotaBackoffUntil, now())}`;
1170
- },
1171
- tone: "warn"
1172
- });
1173
- }
1174
- }), _$createComponent(Show, {
1175
- get when() {
1176
- return refreshBackedOff();
1088
+ label: "Token refresh",
1089
+ get value() {
1090
+ return `backoff ${formatUntil(state().main?.refreshBackoffUntil, now())}`;
1177
1091
  },
1178
- get children() {
1179
- return _$createComponent(StatRow, {
1180
- get theme() {
1181
- return theme();
1182
- },
1183
- label: "Token refresh",
1184
- get value() {
1185
- return `backoff ${formatUntil(state().main?.refreshBackoffUntil, now())}`;
1186
- },
1187
- tone: "warn"
1188
- });
1189
- }
1190
- })];
1092
+ tone: "warn"
1093
+ });
1191
1094
  }
1192
1095
  })];
1193
1096
  }
1194
- }), null);
1195
- _$effect(_p$ => {
1196
- var _v$16 = theme().accent,
1197
- _v$17 = theme().background;
1198
- _v$16 !== _p$.e && (_p$.e = _$setProp(_el$35, "backgroundColor", _v$16, _p$.e));
1199
- _v$17 !== _p$.t && (_p$.t = _$setProp(_el$36, "fg", _v$17, _p$.t));
1200
- return _p$;
1201
- }, {
1202
- e: undefined,
1203
- t: undefined
1204
- });
1205
- return _el$33;
1206
- })();
1097
+ })]
1098
+ });
1207
1099
  }
1208
1100
 
1209
1101
  // --- OpenCode 2 -------------------------------------------------------------