@cortexkit/opencode-anthropic-auth 2.2.0 → 2.2.1

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.
@@ -19,7 +19,7 @@ import { fileURLToPath } from "node:url";
19
19
  import { formatCreditAmounts, quotaDisplayProjection, quotaWindowParts } from "@cortexkit/anthropic-auth-core";
20
20
  import { TextAttributes } from "opentui:runtime-module:%40opentui%2Fcore";
21
21
  import { createEffect, createMemo, createSignal, For, Index, onCleanup, Show } from "opentui:runtime-module:solid-js";
22
- import { computeQuotaPacing, DEFAULT_SIDEBAR_STATE, FIVE_HOUR_MS, formatPrimeAccountValue, formatQuotaRowLabel, getCollapsedAccounts, getCollapsedQuotaSummary, getFableRecoverySummary, resolveActiveAccount, SEVEN_DAY_MS } from "../sidebar-state.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";
23
23
  import { PLUGIN_KEY, queueTuiPreferenceUpdate, readTuiPreferencesFile, resolveAnthropicAuthPrefs, watchTuiPreferences } from "../tui-preferences.js";
24
24
 
25
25
  // Read package metadata from either the raw src/ entry or its generated
@@ -78,8 +78,8 @@ const PACE_DEFICIT_CHAR = '\u2593';
78
78
  // bar renders as a single fill+empty pair, identical to the pre-pacing look.
79
79
  // Empty text nodes still occupy a phantom cell in the opentui flex row, so
80
80
  // zero-length segments are dropped from every return path (plain and pacing).
81
- function quotaBarSegments(usedPct, appearance, pacing) {
82
- const width = appearance.barWidth;
81
+ function quotaBarSegments(usedPct, appearance, pacing, width) {
82
+ if (width <= 0) return [];
83
83
  const cells = pct => Math.max(0, Math.min(Math.round(pct / 100 * width), width));
84
84
  const usedCells = cells(usedPct);
85
85
  const fillTone = usageTone(usedPct, appearance);
@@ -275,122 +275,147 @@ function CollapsedAccountRow(props) {
275
275
  })();
276
276
  }
277
277
 
278
- // Quota window row: muted label left, tone-colored bar + shared figure right,
279
- // with an optional muted reset suffix. When pacing data is present, the bar
280
- // gains a pace segment and an off-pace window adds a muted subline with the
281
- // reserve/deficit delta and the projected runout.
278
+ // One cell run of a single-line row: drawn at its own width, never shrunk and
279
+ // never wrapped, so the row's layout is exactly what `fitQuotaRow` measured.
280
+ function Cell(props) {
281
+ return (() => {
282
+ var _el$13 = _$createElement("text");
283
+ _$setProp(_el$13, "flexShrink", 0);
284
+ _$setProp(_el$13, "wrapMode", 'none');
285
+ _$insert(_el$13, () => props.text);
286
+ _$effect(_p$ => {
287
+ var _v$1 = Bun.stringWidth(props.text),
288
+ _v$10 = props.fg;
289
+ _v$1 !== _p$.e && (_p$.e = _$setProp(_el$13, "width", _v$1, _p$.e));
290
+ _v$10 !== _p$.t && (_p$.t = _$setProp(_el$13, "fg", _v$10, _p$.t));
291
+ return _p$;
292
+ }, {
293
+ e: undefined,
294
+ t: undefined
295
+ });
296
+ return _el$13;
297
+ })();
298
+ }
299
+
300
+ // Quota window row: muted label left in a column `labelWidth` wide, then the
301
+ // tone-colored bar and the shared figure, and the muted reset at the right
302
+ // edge. The row is one line: `fitQuotaRow` drops detail to fit `width`
303
+ // instead of letting it wrap. When pacing data is present, the bar gains a
304
+ // pace segment and an off-pace window adds a one-line subline under the bar
305
+ // with the reserve/deficit delta and either the projected runout or
306
+ // `lasts to reset`.
282
307
  function QuotaRow(props) {
283
308
  const used = () => props.usedPercent ?? 0;
284
- const reset = () => props.part?.resetIn;
285
- const paceLine = () => {
286
- const pacing = props.pacing;
287
- if (!pacing || pacing.state === 'on-pace') return null;
288
- const pct = Math.round(Math.abs(pacing.deltaPercent));
289
- if (pacing.state === 'reserve') return `reserve ${pct}% \u00b7 lasts`;
290
- return pacing.runsOutAt ? `deficit ${pct}% \u00b7 out in ${formatResetIn(pacing.runsOutAt, props.now)}` : `deficit ${pct}% \u00b7 lasts`;
291
- };
309
+ const labelCell = () => `${props.label}${' '.repeat(Math.max(0, props.labelWidth - Bun.stringWidth(props.label)))} `;
310
+ const figure = () => `${props.part?.figure ?? ''}${props.binding ? ' \u2022' : ''}`;
311
+ const fit = () => fitQuotaRow({
312
+ width: props.width,
313
+ labelWidth: props.labelWidth,
314
+ barWidth: props.appearance.barWidth,
315
+ figure: figure(),
316
+ reset: props.part?.resetIn
317
+ });
318
+ const paceLine = () => fitPaceLine(props.pacing, props.width === undefined ? undefined : props.width - props.labelWidth - 1, props.pacing?.runsOutAt ? formatResetIn(props.pacing.runsOutAt, props.now) : undefined);
292
319
  return _$createComponent(Show, {
293
320
  get when() {
294
321
  return props.part;
295
322
  },
296
323
  get fallback() {
297
324
  return (() => {
298
- var _el$21 = _$createElement("box"),
299
- _el$22 = _$createElement("text"),
300
- _el$23 = _$createElement("text");
301
- _$insertNode(_el$21, _el$22);
302
- _$insertNode(_el$21, _el$23);
303
- _$setProp(_el$21, "width", '100%');
304
- _$setProp(_el$21, "flexDirection", 'row');
305
- _$insert(_el$22, () => `${formatQuotaRowLabel(props.label)} `);
306
- _$insertNode(_el$23, _$createTextNode(`—`));
307
- _$effect(_p$ => {
308
- var _v$13 = props.theme.textMuted,
309
- _v$14 = props.theme.textMuted;
310
- _v$13 !== _p$.e && (_p$.e = _$setProp(_el$22, "fg", _v$13, _p$.e));
311
- _v$14 !== _p$.t && (_p$.t = _$setProp(_el$23, "fg", _v$14, _p$.t));
312
- return _p$;
313
- }, {
314
- e: undefined,
315
- t: undefined
316
- });
317
- return _el$21;
325
+ var _el$16 = _$createElement("box");
326
+ _$setProp(_el$16, "width", '100%');
327
+ _$setProp(_el$16, "height", 1);
328
+ _$setProp(_el$16, "flexDirection", 'row');
329
+ _$insert(_el$16, _$createComponent(Cell, {
330
+ get fg() {
331
+ return props.theme.textMuted;
332
+ },
333
+ get text() {
334
+ return `${labelCell()}\u2014`;
335
+ }
336
+ }));
337
+ return _el$16;
318
338
  })();
319
339
  },
320
340
  get children() {
321
341
  return [(() => {
322
- var _el$13 = _$createElement("box"),
323
- _el$14 = _$createElement("box"),
324
- _el$15 = _$createElement("text"),
325
- _el$16 = _$createElement("text");
326
- _$insertNode(_el$13, _el$14);
327
- _$setProp(_el$13, "width", '100%');
328
- _$setProp(_el$13, "flexDirection", 'row');
329
- _$setProp(_el$13, "justifyContent", 'space-between');
342
+ var _el$14 = _$createElement("box"),
343
+ _el$15 = _$createElement("box");
330
344
  _$insertNode(_el$14, _el$15);
331
- _$insertNode(_el$14, _el$16);
345
+ _$setProp(_el$14, "width", '100%');
346
+ _$setProp(_el$14, "height", 1);
332
347
  _$setProp(_el$14, "flexDirection", 'row');
333
- _$insert(_el$15, () => `${formatQuotaRowLabel(props.label)} `);
348
+ _$insert(_el$14, _$createComponent(Cell, {
349
+ get fg() {
350
+ return props.theme.textMuted;
351
+ },
352
+ get text() {
353
+ return labelCell();
354
+ }
355
+ }), _el$15);
334
356
  _$insert(_el$14, _$createComponent(Index, {
335
357
  get each() {
336
- return quotaBarSegments(used(), props.appearance, props.pacing);
358
+ return quotaBarSegments(used(), props.appearance, props.pacing, fit().barCells);
337
359
  },
338
- children: segment => (() => {
339
- var _el$25 = _$createElement("text");
340
- _$insert(_el$25, () => segment().text);
341
- _$effect(_$p => _$setProp(_el$25, "fg", toneColor(props.theme, segment().tone), _$p));
342
- return _el$25;
343
- })()
344
- }), _el$16);
345
- _$insert(_el$16, () => ` ${props.part?.figure}${props.binding ? ' •' : ''}`);
346
- _$insert(_el$13, _$createComponent(Show, {
347
- get when() {
348
- return reset();
360
+ children: segment => _$createComponent(Cell, {
361
+ get fg() {
362
+ return toneColor(props.theme, segment().tone);
363
+ },
364
+ get text() {
365
+ return segment().text;
366
+ }
367
+ })
368
+ }), _el$15);
369
+ _$insert(_el$14, _$createComponent(Cell, {
370
+ get fg() {
371
+ return toneColor(props.theme, usageTone(used(), props.appearance));
349
372
  },
350
- get children() {
351
- var _el$17 = _$createElement("text");
352
- _$insert(_el$17, reset);
353
- _$effect(_$p => _$setProp(_el$17, "fg", props.theme.textMuted, _$p));
354
- return _el$17;
373
+ get text() {
374
+ return `${fit().barCells > 0 ? ' ' : ''}${figure()}`;
355
375
  }
376
+ }), _el$15);
377
+ _$setProp(_el$15, "flexGrow", 1);
378
+ _$insert(_el$14, _$createComponent(Show, {
379
+ get when() {
380
+ return fit().reset;
381
+ },
382
+ children: reset => _$createComponent(Cell, {
383
+ get fg() {
384
+ return props.theme.textMuted;
385
+ },
386
+ get text() {
387
+ return ` ${reset()}`;
388
+ }
389
+ })
356
390
  }), null);
357
- _$effect(_p$ => {
358
- var _v$1 = props.theme.textMuted,
359
- _v$10 = toneColor(props.theme, usageTone(used(), props.appearance));
360
- _v$1 !== _p$.e && (_p$.e = _$setProp(_el$15, "fg", _v$1, _p$.e));
361
- _v$10 !== _p$.t && (_p$.t = _$setProp(_el$16, "fg", _v$10, _p$.t));
362
- return _p$;
363
- }, {
364
- e: undefined,
365
- t: undefined
366
- });
367
- return _el$13;
391
+ return _el$14;
368
392
  })(), _$createComponent(Show, {
369
393
  get when() {
370
394
  return paceLine();
371
395
  },
372
- get children() {
373
- var _el$18 = _$createElement("box"),
374
- _el$19 = _$createElement("text"),
375
- _el$20 = _$createElement("text");
376
- _$insertNode(_el$18, _el$19);
377
- _$insertNode(_el$18, _el$20);
378
- _$setProp(_el$18, "width", '100%');
379
- _$setProp(_el$18, "flexDirection", 'row');
380
- _$insert(_el$19, () => formatQuotaRowLabel('', 11));
381
- _$insert(_el$20, paceLine);
382
- _$effect(_p$ => {
383
- var _v$11 = props.theme.textMuted,
384
- _v$12 = toneColor(props.theme, props.pacing?.state === 'deficit' ? 'warn' : 'muted');
385
- _v$11 !== _p$.e && (_p$.e = _$setProp(_el$19, "fg", _v$11, _p$.e));
386
- _v$12 !== _p$.t && (_p$.t = _$setProp(_el$20, "fg", _v$12, _p$.t));
387
- return _p$;
388
- }, {
389
- e: undefined,
390
- t: undefined
391
- });
392
- return _el$18;
393
- }
396
+ children: line => (() => {
397
+ var _el$17 = _$createElement("box");
398
+ _$setProp(_el$17, "width", '100%');
399
+ _$setProp(_el$17, "height", 1);
400
+ _$setProp(_el$17, "flexDirection", 'row');
401
+ _$insert(_el$17, _$createComponent(Cell, {
402
+ get fg() {
403
+ return props.theme.textMuted;
404
+ },
405
+ get text() {
406
+ return ' '.repeat(props.labelWidth + 1);
407
+ }
408
+ }), null);
409
+ _$insert(_el$17, _$createComponent(Cell, {
410
+ get fg() {
411
+ return toneColor(props.theme, props.pacing?.state === 'deficit' ? 'warn' : 'muted');
412
+ },
413
+ get text() {
414
+ return line();
415
+ }
416
+ }), null);
417
+ return _el$17;
418
+ })()
394
419
  })];
395
420
  }
396
421
  });
@@ -421,46 +446,58 @@ export function AccountBlock(props) {
421
446
  now: props.now
422
447
  });
423
448
  const partFor = name => parts().windows.find(part => part.name === name);
449
+ const scopedLabels = () => scopedQuotaShortNames(props.quota, props.now);
450
+ const labelWidth = () => props.labelWidth ?? quotaLabelColumnWidth([props.quota], props.now);
451
+ // The block's laid-out width, read when it mounts and on each resize. Quota
452
+ // rows drop or shrink detail to fit it (and are cut at the edge when even
453
+ // that is not enough); pacing sublines are cut to fit. Undefined until layout.
454
+ const [width, setWidth] = createSignal();
455
+ let block;
424
456
  return (() => {
425
- var _el$26 = _$createElement("box"),
426
- _el$27 = _$createElement("box"),
427
- _el$28 = _$createElement("text"),
428
- _el$29 = _$createElement("b"),
429
- _el$30 = _$createElement("text"),
430
- _el$31 = _$createElement("b");
431
- _$insertNode(_el$26, _el$27);
432
- _$setProp(_el$26, "width", '100%');
433
- _$setProp(_el$26, "flexDirection", 'column');
434
- _$insertNode(_el$27, _el$28);
435
- _$insertNode(_el$27, _el$30);
436
- _$setProp(_el$27, "width", '100%');
437
- _$setProp(_el$27, "flexDirection", 'row');
438
- _$setProp(_el$27, "justifyContent", 'space-between');
439
- _$insertNode(_el$28, _el$29);
440
- _$insert(_el$29, () => `${props.name}${props.tierLabel ? ` · ${props.tierLabel}` : ''}`);
441
- _$insertNode(_el$30, _el$31);
442
- _$insert(_el$31, statusWord);
443
- _$insert(_el$26, _$createComponent(Show, {
457
+ var _el$18 = _$createElement("box"),
458
+ _el$19 = _$createElement("box"),
459
+ _el$20 = _$createElement("text"),
460
+ _el$21 = _$createElement("b"),
461
+ _el$22 = _$createElement("text"),
462
+ _el$23 = _$createElement("b");
463
+ _$insertNode(_el$18, _el$19);
464
+ _$use(element => {
465
+ block = element;
466
+ setWidth(element.width || undefined);
467
+ }, _el$18);
468
+ _$setProp(_el$18, "width", '100%');
469
+ _$setProp(_el$18, "flexDirection", 'column');
470
+ _$setProp(_el$18, "onSizeChange", () => setWidth(block?.width || undefined));
471
+ _$insertNode(_el$19, _el$20);
472
+ _$insertNode(_el$19, _el$22);
473
+ _$setProp(_el$19, "width", '100%');
474
+ _$setProp(_el$19, "flexDirection", 'row');
475
+ _$setProp(_el$19, "justifyContent", 'space-between');
476
+ _$insertNode(_el$20, _el$21);
477
+ _$insert(_el$21, () => `${props.name}${props.tierLabel ? ` · ${props.tierLabel}` : ''}`);
478
+ _$insertNode(_el$22, _el$23);
479
+ _$insert(_el$23, statusWord);
480
+ _$insert(_el$18, _$createComponent(Show, {
444
481
  get when() {
445
482
  return props.stateLine;
446
483
  },
447
484
  get children() {
448
- var _el$32 = _$createElement("text");
449
- _$insert(_el$32, () => props.stateLine);
450
- _$effect(_$p => _$setProp(_el$32, "fg", props.theme.textMuted, _$p));
451
- return _el$32;
485
+ var _el$24 = _$createElement("text");
486
+ _$insert(_el$24, () => props.stateLine);
487
+ _$effect(_$p => _$setProp(_el$24, "fg", props.theme.textMuted, _$p));
488
+ return _el$24;
452
489
  }
453
490
  }), null);
454
- _$insert(_el$26, _$createComponent(Show, {
491
+ _$insert(_el$18, _$createComponent(Show, {
455
492
  get when() {
456
493
  return props.quota;
457
494
  },
458
495
  get fallback() {
459
496
  return (() => {
460
- var _el$36 = _$createElement("text");
461
- _$insertNode(_el$36, _$createTextNode(`checking…`));
462
- _$effect(_$p => _$setProp(_el$36, "fg", props.theme.textMuted, _$p));
463
- return _el$36;
497
+ var _el$28 = _$createElement("text");
498
+ _$insertNode(_el$28, _$createTextNode(`checking…`));
499
+ _$effect(_$p => _$setProp(_el$28, "fg", props.theme.textMuted, _$p));
500
+ return _el$28;
464
501
  })();
465
502
  },
466
503
  get children() {
@@ -472,6 +509,12 @@ export function AccountBlock(props) {
472
509
  return props.appearance;
473
510
  },
474
511
  label: "5h",
512
+ get labelWidth() {
513
+ return labelWidth();
514
+ },
515
+ get width() {
516
+ return width();
517
+ },
475
518
  get part() {
476
519
  return partFor('5h');
477
520
  },
@@ -495,6 +538,12 @@ export function AccountBlock(props) {
495
538
  return props.appearance;
496
539
  },
497
540
  label: "7d",
541
+ get labelWidth() {
542
+ return labelWidth();
543
+ },
544
+ get width() {
545
+ return width();
546
+ },
498
547
  get part() {
499
548
  return partFor('7d');
500
549
  },
@@ -514,7 +563,7 @@ export function AccountBlock(props) {
514
563
  get each() {
515
564
  return props.quota?.scoped ?? [];
516
565
  },
517
- children: window => _$createComponent(QuotaRow, {
566
+ children: (window, index) => _$createComponent(QuotaRow, {
518
567
  get theme() {
519
568
  return props.theme;
520
569
  },
@@ -522,7 +571,13 @@ export function AccountBlock(props) {
522
571
  return props.appearance;
523
572
  },
524
573
  get label() {
525
- return partFor(window.title)?.name ?? window.title;
574
+ return scopedLabels()[index()] ?? window.title;
575
+ },
576
+ get labelWidth() {
577
+ return labelWidth();
578
+ },
579
+ get width() {
580
+ return width();
526
581
  },
527
582
  get part() {
528
583
  return partFor(window.title);
@@ -544,63 +599,57 @@ export function AccountBlock(props) {
544
599
  get when() {
545
600
  return partFor('credits');
546
601
  },
547
- children: budget => {
548
- // The line box's laid-out width, read when it mounts and on each
549
- // resize. It is undefined (amounts keep their cents) until layout.
550
- const [width, setWidth] = createSignal();
551
- let line;
552
- return (() => {
553
- var _el$38 = _$createElement("box"),
554
- _el$39 = _$createElement("text");
555
- _$insertNode(_el$38, _el$39);
556
- _$use(element => {
557
- line = element;
558
- setWidth(element.width || undefined);
559
- }, _el$38);
560
- _$setProp(_el$38, "width", '100%');
561
- _$setProp(_el$38, "onSizeChange", () => setWidth(line?.width || undefined));
562
- _$insert(_el$39, () => creditLine(budget().figure, props.quota?.extraUsage, width()));
563
- _$effect(_$p => _$setProp(_el$39, "fg", toneColor(props.theme, props.quota?.extraUsage?.severity === 'critical' ? 'err' : props.quota?.extraUsage?.severity === 'warning' || props.quota?.extraUsage?.exhausted ? 'warn' : 'muted'), _$p));
564
- return _el$38;
565
- })();
566
- }
602
+ children: budget => // One line in the block's width: amounts drop their cents rather
603
+ // than wrap, and keep them until the first layout.
604
+ (() => {
605
+ var _el$30 = _$createElement("box"),
606
+ _el$31 = _$createElement("text");
607
+ _$insertNode(_el$30, _el$31);
608
+ _$setProp(_el$30, "width", '100%');
609
+ _$setProp(_el$30, "height", 1);
610
+ _$setProp(_el$30, "flexDirection", 'row');
611
+ _$setProp(_el$31, "wrapMode", 'none');
612
+ _$insert(_el$31, () => creditLine(budget().figure, props.quota?.extraUsage, width()));
613
+ _$effect(_$p => _$setProp(_el$31, "fg", toneColor(props.theme, props.quota?.extraUsage?.severity === 'critical' ? 'err' : props.quota?.extraUsage?.severity === 'warning' || props.quota?.extraUsage?.exhausted ? 'warn' : 'muted'), _$p));
614
+ return _el$30;
615
+ })()
567
616
  }), _$createComponent(Show, {
568
617
  get when() {
569
618
  return parts().age;
570
619
  },
571
620
  get children() {
572
- var _el$33 = _$createElement("text");
573
- _$insert(_el$33, () => parts().age);
574
- _$effect(_$p => _$setProp(_el$33, "fg", props.theme.textMuted, _$p));
575
- return _el$33;
621
+ var _el$25 = _$createElement("text");
622
+ _$insert(_el$25, () => parts().age);
623
+ _$effect(_$p => _$setProp(_el$25, "fg", props.theme.textMuted, _$p));
624
+ return _el$25;
576
625
  }
577
626
  }), _$createComponent(Show, {
578
627
  get when() {
579
628
  return props.quota?.fallbackAdvised === true;
580
629
  },
581
630
  get children() {
582
- var _el$34 = _$createElement("text");
583
- _$insertNode(_el$34, _$createTextNode(`→ fallback advised`));
584
- _$effect(_$p => _$setProp(_el$34, "fg", props.theme.textMuted, _$p));
585
- return _el$34;
631
+ var _el$26 = _$createElement("text");
632
+ _$insertNode(_el$26, _$createTextNode(`→ fallback advised`));
633
+ _$effect(_$p => _$setProp(_el$26, "fg", props.theme.textMuted, _$p));
634
+ return _el$26;
586
635
  }
587
636
  })];
588
637
  }
589
638
  }), null);
590
639
  _$effect(_p$ => {
591
- var _v$15 = props.marginTop ?? 0,
592
- _v$16 = props.theme.text,
593
- _v$17 = toneColor(props.theme, statusTone());
594
- _v$15 !== _p$.e && (_p$.e = _$setProp(_el$26, "marginTop", _v$15, _p$.e));
595
- _v$16 !== _p$.t && (_p$.t = _$setProp(_el$28, "fg", _v$16, _p$.t));
596
- _v$17 !== _p$.a && (_p$.a = _$setProp(_el$30, "fg", _v$17, _p$.a));
640
+ var _v$11 = props.marginTop ?? 0,
641
+ _v$12 = props.theme.text,
642
+ _v$13 = toneColor(props.theme, statusTone());
643
+ _v$11 !== _p$.e && (_p$.e = _$setProp(_el$18, "marginTop", _v$11, _p$.e));
644
+ _v$12 !== _p$.t && (_p$.t = _$setProp(_el$20, "fg", _v$12, _p$.t));
645
+ _v$13 !== _p$.a && (_p$.a = _$setProp(_el$22, "fg", _v$13, _p$.a));
597
646
  return _p$;
598
647
  }, {
599
648
  e: undefined,
600
649
  t: undefined,
601
650
  a: undefined
602
651
  });
603
- return _el$26;
652
+ return _el$18;
604
653
  })();
605
654
  }
606
655
  // The TUI may unmount and remount sidebar_content when the user switches
@@ -673,6 +722,8 @@ export function ClaudeSidebar(props) {
673
722
  });
674
723
  const enabledFallbacks = () => (state().fallbacks ?? []).filter(f => f.enabled || f.custodyState && f.custodyState !== 'off');
675
724
  const hasData = () => state().main?.quota != null || state().main?.stateLine != null || enabledFallbacks().length > 0;
725
+ // One label column for every expanded account, so all their bars line up.
726
+ const quotaLabelWidth = () => quotaLabelColumnWidth([state().main?.quota, ...(prefs().sections.fallbackAccounts ? enabledFallbacks().map(fallback => fallback.quota) : [])], now());
676
727
  const headerLabel = () => {
677
728
  const name = prefs().header.label;
678
729
  return !hasData() ? name : collapsed() ? `\u25b6 ${name}` : `\u25bc ${name}`;
@@ -715,33 +766,33 @@ export function ClaudeSidebar(props) {
715
766
  return `${r.transport} \u00b7 ${r.enabled ? 'on' : 'off'}`;
716
767
  };
717
768
  return (() => {
718
- var _el$40 = _$createElement("box"),
719
- _el$41 = _$createElement("box"),
720
- _el$42 = _$createElement("box"),
721
- _el$43 = _$createElement("text"),
722
- _el$44 = _$createElement("b");
723
- _$insertNode(_el$40, _el$41);
724
- _$setProp(_el$40, "width", '100%');
725
- _$setProp(_el$40, "flexDirection", 'column');
726
- _$setProp(_el$40, "border", SINGLE_BORDER);
727
- _$setProp(_el$40, "paddingTop", 1);
728
- _$setProp(_el$40, "paddingBottom", 1);
729
- _$setProp(_el$40, "paddingLeft", 1);
730
- _$setProp(_el$40, "paddingRight", 1);
731
- _$insertNode(_el$41, _el$42);
732
- _$setProp(_el$41, "width", '100%');
733
- _$setProp(_el$41, "flexDirection", 'row');
734
- _$setProp(_el$41, "justifyContent", 'space-between');
735
- _$setProp(_el$41, "alignItems", 'center');
736
- _$setProp(_el$41, "onMouseDown", () => {
769
+ var _el$32 = _$createElement("box"),
770
+ _el$33 = _$createElement("box"),
771
+ _el$34 = _$createElement("box"),
772
+ _el$35 = _$createElement("text"),
773
+ _el$36 = _$createElement("b");
774
+ _$insertNode(_el$32, _el$33);
775
+ _$setProp(_el$32, "width", '100%');
776
+ _$setProp(_el$32, "flexDirection", 'column');
777
+ _$setProp(_el$32, "border", SINGLE_BORDER);
778
+ _$setProp(_el$32, "paddingTop", 1);
779
+ _$setProp(_el$32, "paddingBottom", 1);
780
+ _$setProp(_el$32, "paddingLeft", 1);
781
+ _$setProp(_el$32, "paddingRight", 1);
782
+ _$insertNode(_el$33, _el$34);
783
+ _$setProp(_el$33, "width", '100%');
784
+ _$setProp(_el$33, "flexDirection", 'row');
785
+ _$setProp(_el$33, "justifyContent", 'space-between');
786
+ _$setProp(_el$33, "alignItems", 'center');
787
+ _$setProp(_el$33, "onMouseDown", () => {
737
788
  if (hasData()) props.controller.toggleCollapsed();
738
789
  });
739
- _$insertNode(_el$42, _el$43);
740
- _$setProp(_el$42, "paddingLeft", 1);
741
- _$setProp(_el$42, "paddingRight", 1);
742
- _$insertNode(_el$43, _el$44);
743
- _$insert(_el$44, headerLabel);
744
- _$insert(_el$41, _$createComponent(Show, {
790
+ _$insertNode(_el$34, _el$35);
791
+ _$setProp(_el$34, "paddingLeft", 1);
792
+ _$setProp(_el$34, "paddingRight", 1);
793
+ _$insertNode(_el$35, _el$36);
794
+ _$insert(_el$36, headerLabel);
795
+ _$insert(_el$33, _$createComponent(Show, {
745
796
  get when() {
746
797
  return degraded();
747
798
  },
@@ -751,36 +802,36 @@ export function ClaudeSidebar(props) {
751
802
  return prefs().header.showVersion && PLUGIN_VERSION !== '';
752
803
  },
753
804
  get children() {
754
- var _el$52 = _$createElement("text");
755
- _$insert(_el$52, `v${PLUGIN_VERSION}`);
756
- _$effect(_$p => _$setProp(_el$52, "fg", theme().textMuted, _$p));
757
- return _el$52;
805
+ var _el$44 = _$createElement("text");
806
+ _$insert(_el$44, `v${PLUGIN_VERSION}`);
807
+ _$effect(_$p => _$setProp(_el$44, "fg", theme().textMuted, _$p));
808
+ return _el$44;
758
809
  }
759
810
  });
760
811
  },
761
812
  get children() {
762
- var _el$45 = _$createElement("box"),
763
- _el$46 = _$createElement("text"),
764
- _el$47 = _$createElement("b");
765
- _$insertNode(_el$45, _el$46);
766
- _$setProp(_el$45, "paddingLeft", 1);
767
- _$setProp(_el$45, "paddingRight", 1);
768
- _$insertNode(_el$46, _el$47);
769
- _$insertNode(_el$47, _$createTextNode(`LIMITED`));
813
+ var _el$37 = _$createElement("box"),
814
+ _el$38 = _$createElement("text"),
815
+ _el$39 = _$createElement("b");
816
+ _$insertNode(_el$37, _el$38);
817
+ _$setProp(_el$37, "paddingLeft", 1);
818
+ _$setProp(_el$37, "paddingRight", 1);
819
+ _$insertNode(_el$38, _el$39);
820
+ _$insertNode(_el$39, _$createTextNode(`LIMITED`));
770
821
  _$effect(_p$ => {
771
- var _v$18 = theme().warning,
772
- _v$19 = theme().background;
773
- _v$18 !== _p$.e && (_p$.e = _$setProp(_el$45, "backgroundColor", _v$18, _p$.e));
774
- _v$19 !== _p$.t && (_p$.t = _$setProp(_el$46, "fg", _v$19, _p$.t));
822
+ var _v$14 = theme().warning,
823
+ _v$15 = theme().background;
824
+ _v$14 !== _p$.e && (_p$.e = _$setProp(_el$37, "backgroundColor", _v$14, _p$.e));
825
+ _v$15 !== _p$.t && (_p$.t = _$setProp(_el$38, "fg", _v$15, _p$.t));
775
826
  return _p$;
776
827
  }, {
777
828
  e: undefined,
778
829
  t: undefined
779
830
  });
780
- return _el$45;
831
+ return _el$37;
781
832
  }
782
833
  }), null);
783
- _$insert(_el$40, _$createComponent(Show, {
834
+ _$insert(_el$32, _$createComponent(Show, {
784
835
  get when() {
785
836
  return _$memo(() => !!collapsed())() && hasData();
786
837
  },
@@ -814,12 +865,12 @@ export function ClaudeSidebar(props) {
814
865
  },
815
866
  label: "Mode",
816
867
  get children() {
817
- var _el$49 = _$createElement("text"),
818
- _el$50 = _$createElement("b");
819
- _$insertNode(_el$49, _el$50);
820
- _$insertNode(_el$50, _$createTextNode(`fast`));
821
- _$effect(_$p => _$setProp(_el$49, "fg", toneColor(theme(), 'accent'), _$p));
822
- return _el$49;
868
+ var _el$41 = _$createElement("text"),
869
+ _el$42 = _$createElement("b");
870
+ _$insertNode(_el$41, _el$42);
871
+ _$insertNode(_el$42, _$createTextNode(`fast`));
872
+ _$effect(_$p => _$setProp(_el$41, "fg", toneColor(theme(), 'accent'), _$p));
873
+ return _el$41;
823
874
  }
824
875
  });
825
876
  }
@@ -833,18 +884,18 @@ export function ClaudeSidebar(props) {
833
884
  },
834
885
  label: "Recovery",
835
886
  get children() {
836
- var _el$53 = _$createElement("text"),
837
- _el$54 = _$createElement("b");
838
- _$insertNode(_el$53, _el$54);
839
- _$insert(_el$54, summary);
840
- _$effect(_$p => _$setProp(_el$53, "fg", toneColor(theme(), fableRecoveryTone()), _$p));
841
- return _el$53;
887
+ var _el$45 = _$createElement("text"),
888
+ _el$46 = _$createElement("b");
889
+ _$insertNode(_el$45, _el$46);
890
+ _$insert(_el$46, summary);
891
+ _$effect(_$p => _$setProp(_el$45, "fg", toneColor(theme(), fableRecoveryTone()), _$p));
892
+ return _el$45;
842
893
  }
843
894
  })
844
895
  })];
845
896
  }
846
897
  }), null);
847
- _$insert(_el$40, _$createComponent(Show, {
898
+ _$insert(_el$32, _$createComponent(Show, {
848
899
  get when() {
849
900
  return !collapsed() || !hasData();
850
901
  },
@@ -855,14 +906,14 @@ export function ClaudeSidebar(props) {
855
906
  },
856
907
  get fallback() {
857
908
  return (() => {
858
- var _el$55 = _$createElement("box"),
859
- _el$56 = _$createElement("text");
860
- _$insertNode(_el$55, _el$56);
861
- _$setProp(_el$55, "marginTop", 1);
862
- _$setProp(_el$55, "width", '100%');
863
- _$insertNode(_el$56, _$createTextNode(`Waiting for quota…`));
864
- _$effect(_$p => _$setProp(_el$56, "fg", theme().textMuted, _$p));
865
- return _el$55;
909
+ var _el$47 = _$createElement("box"),
910
+ _el$48 = _$createElement("text");
911
+ _$insertNode(_el$47, _el$48);
912
+ _$setProp(_el$47, "marginTop", 1);
913
+ _$setProp(_el$47, "width", '100%');
914
+ _$insertNode(_el$48, _$createTextNode(`Waiting for quota…`));
915
+ _$effect(_$p => _$setProp(_el$48, "fg", theme().textMuted, _$p));
916
+ return _el$47;
866
917
  })();
867
918
  },
868
919
  get children() {
@@ -896,6 +947,9 @@ export function ClaudeSidebar(props) {
896
947
  get tierLabel() {
897
948
  return state().main?.tierLabel;
898
949
  },
950
+ get labelWidth() {
951
+ return quotaLabelWidth();
952
+ },
899
953
  get stateLine() {
900
954
  return state().main?.stateLine;
901
955
  },
@@ -936,6 +990,9 @@ export function ClaudeSidebar(props) {
936
990
  get tierLabel() {
937
991
  return fb.tierLabel;
938
992
  },
993
+ get labelWidth() {
994
+ return quotaLabelWidth();
995
+ },
939
996
  get needsReauth() {
940
997
  return fb.needsReauth;
941
998
  },
@@ -1144,19 +1201,19 @@ export function ClaudeSidebar(props) {
1144
1201
  }
1145
1202
  }), null);
1146
1203
  _$effect(_p$ => {
1147
- var _v$20 = theme().borderActive,
1148
- _v$21 = theme().accent,
1149
- _v$22 = theme().background;
1150
- _v$20 !== _p$.e && (_p$.e = _$setProp(_el$40, "borderColor", _v$20, _p$.e));
1151
- _v$21 !== _p$.t && (_p$.t = _$setProp(_el$42, "backgroundColor", _v$21, _p$.t));
1152
- _v$22 !== _p$.a && (_p$.a = _$setProp(_el$43, "fg", _v$22, _p$.a));
1204
+ var _v$16 = theme().borderActive,
1205
+ _v$17 = theme().accent,
1206
+ _v$18 = theme().background;
1207
+ _v$16 !== _p$.e && (_p$.e = _$setProp(_el$32, "borderColor", _v$16, _p$.e));
1208
+ _v$17 !== _p$.t && (_p$.t = _$setProp(_el$34, "backgroundColor", _v$17, _p$.t));
1209
+ _v$18 !== _p$.a && (_p$.a = _$setProp(_el$35, "fg", _v$18, _p$.a));
1153
1210
  return _p$;
1154
1211
  }, {
1155
1212
  e: undefined,
1156
1213
  t: undefined,
1157
1214
  a: undefined
1158
1215
  });
1159
- return _el$40;
1216
+ return _el$32;
1160
1217
  })();
1161
1218
  }
1162
1219