@cortexkit/opencode-anthropic-auth 2.0.2 → 2.1.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.
Files changed (59) hide show
  1. package/README.md +35 -845
  2. package/dist/cli-failure.d.ts +38 -7
  3. package/dist/cli.js +50 -102
  4. package/dist/custody-mode.d.ts +1 -0
  5. package/dist/fable-fallback.d.ts +6 -2
  6. package/dist/index-0kxy8k2c.js +2 -0
  7. package/dist/index-1nwcnxp8.js +42 -0
  8. package/dist/index-53nnxq39.js +2 -0
  9. package/dist/{index-2arfb1y3.js → index-6chd6jnr.js} +1 -1
  10. package/dist/{index-1tbpt45x.js → index-ah5s0bew.js} +1 -1
  11. package/dist/index-b1dvkp15.js +2 -0
  12. package/dist/{index-mge0rw54.js → index-f2ne65w4.js} +1 -1
  13. package/dist/{index-rqync0pc.js → index-hazrk5c3.js} +1 -1
  14. package/dist/{index-1jkyhgyr.js → index-jexctf5w.js} +1 -1
  15. package/dist/index.js +1 -1
  16. package/dist/quota-preflight.d.ts +1 -0
  17. package/dist/request-class.d.ts +10 -0
  18. package/dist/rpc/port-file.js +1 -1
  19. package/dist/rpc/protocol.js +1 -1
  20. package/dist/rpc/rpc-client.js +1 -1
  21. package/dist/rpc/rpc-dir.js +1 -1
  22. package/dist/setup/command.d.ts +5 -14
  23. package/dist/setup/native-activation.d.ts +21 -8
  24. package/dist/setup/native-enrollment.d.ts +21 -0
  25. package/dist/setup/native-local.d.ts +31 -1
  26. package/dist/setup/native-login.d.ts +12 -1
  27. package/dist/setup/process-fence.d.ts +0 -6
  28. package/dist/setup/types.d.ts +9 -0
  29. package/dist/sidebar-state.d.ts +20 -2
  30. package/dist/sidebar-state.js +1 -1
  31. package/dist/transform.d.ts +2 -8
  32. package/dist/tui-preferences.js +1 -1
  33. package/dist/tui.d.ts +0 -2
  34. package/dist/v2/activation.d.ts +2 -0
  35. package/dist/v2/adapter.d.ts +11 -1
  36. package/dist/v2/cachekeep.d.ts +19 -0
  37. package/dist/v2/menu.d.ts +2 -1
  38. package/dist/v2/server.js +4 -4
  39. package/dist/v2/setup.d.ts +2 -0
  40. package/dist/v2/source.d.ts +1 -0
  41. package/dist/v2/tui.js +1 -1
  42. package/package.json +10 -6
  43. package/src/sidebar-state.ts +105 -30
  44. package/src/tui-compiled/sidebar-state.ts +105 -30
  45. package/src/tui-compiled/tui.tsx +395 -241
  46. package/src/tui.tsx +199 -58
  47. package/dist/index-227rsmfv.js +0 -42
  48. package/dist/index-74r84r5f.js +0 -1
  49. package/dist/index-b3mxpp4w.js +0 -2
  50. package/dist/index-fn0zqnnw.js +0 -3
  51. package/dist/index-j0wsgy54.js +0 -449
  52. package/dist/index-jc8p0tkv.js +0 -2
  53. package/dist/setup/activation.d.ts +0 -7
  54. package/dist/setup/command.test.d.ts +0 -1
  55. package/dist/setup/detect.d.ts +0 -8
  56. package/dist/setup/host-executable.d.ts +0 -3
  57. package/dist/setup/jsonc.d.ts +0 -9
  58. package/dist/setup/opencode-config.d.ts +0 -18
  59. package/dist/setup/pi.d.ts +0 -18
@@ -1,6 +1,7 @@
1
1
  import { memo as _$memo } from "opentui:runtime-module:%40opentui%2Fsolid";
2
- import { createTextNode as _$createTextNode } from "opentui:runtime-module:%40opentui%2Fsolid";
3
2
  import { createComponent as _$createComponent } from "opentui:runtime-module:%40opentui%2Fsolid";
3
+ import { createTextNode as _$createTextNode } from "opentui:runtime-module:%40opentui%2Fsolid";
4
+ import { use as _$use } from "opentui:runtime-module:%40opentui%2Fsolid";
4
5
  import { effect as _$effect } from "opentui:runtime-module:%40opentui%2Fsolid";
5
6
  import { insertNode as _$insertNode } from "opentui:runtime-module:%40opentui%2Fsolid";
6
7
  import { insert as _$insert } from "opentui:runtime-module:%40opentui%2Fsolid";
@@ -11,11 +12,12 @@ import { createElement as _$createElement } from "opentui:runtime-module:%40open
11
12
  import { readFileSync } from "node:fs";
12
13
  import { dirname, join } from "node:path";
13
14
  import { fileURLToPath } from "node:url";
14
- import { formatQuotaMoney } from "@cortexkit/anthropic-auth-core";
15
- import { createEffect, createSignal, For, onCleanup, Show } from "opentui:runtime-module:solid-js";
15
+ import { formatCreditAmounts, quotaDisplayProjection, quotaWindowParts } from "@cortexkit/anthropic-auth-core";
16
+ import { TextAttributes } from "opentui:runtime-module:%40opentui%2Fcore";
17
+ import { createEffect, createSignal, For, Index, onCleanup, Show } from "opentui:runtime-module:solid-js";
16
18
  import { createRpcClient } from "./rpc/rpc-client.js";
17
19
  import { getRpcDir } from "./rpc/rpc-dir.js";
18
- import { computeQuotaPacing, DEFAULT_SIDEBAR_STATE, FIVE_HOUR_MS, formatPrimeAccountValue, formatScopedQuotaLabel, getCollapsedQuotaSummary, getFableRecoverySummary, getSidebarState, resolveActiveAccount, SEVEN_DAY_MS } from "./sidebar-state.js";
20
+ import { computeQuotaPacing, DEFAULT_SIDEBAR_STATE, FIVE_HOUR_MS, formatPrimeAccountValue, formatQuotaRowLabel, getCollapsedAccounts, getCollapsedQuotaSummary, getFableRecoverySummary, getSidebarState, resolveActiveAccount, SEVEN_DAY_MS } from "./sidebar-state.js";
19
21
  import { openCommandDialog, openNativeMenuDialog } from "./tui/command-dialogs.js";
20
22
  import { computeEffectiveOrder, DEFAULT_SLOT_ORDER, PLUGIN_KEY, queueTuiPreferenceUpdate, readTuiPreferencesFile, resolveAnthropicAuthPrefs, watchTuiPreferences } from "./tui-preferences.js";
21
23
  const RPC_POLL_MS = 500;
@@ -198,14 +200,87 @@ function CollapsedRow(props) {
198
200
  return _el$8;
199
201
  })();
200
202
  }
203
+ function CollapsedAccountRow(props) {
204
+ const [width, setWidth] = createSignal(40);
205
+ let row;
206
+ const summary = () => getCollapsedQuotaSummary(props.account.quota);
207
+ const value = () => summary().text ?? '—';
208
+ const labelWidth = () => Math.max(0, width() - Bun.stringWidth(value()) - 1);
209
+ const dim = () => !props.account.active || props.account.quotaDated || summary().stale;
210
+ const attributes = () => dim() ? TextAttributes.DIM : TextAttributes.BOLD;
211
+ const color = () => dim() ? props.theme.textMuted : toneColor(props.theme, props.tone);
212
+ return (() => {
213
+ var _el$0 = _$createElement("box"),
214
+ _el$12 = _$createElement("text");
215
+ _$insertNode(_el$0, _el$12);
216
+ _$use(element => {
217
+ row = element;
218
+ setWidth(element.width || 40);
219
+ }, _el$0);
220
+ _$setProp(_el$0, "width", '100%');
221
+ _$setProp(_el$0, "height", 1);
222
+ _$setProp(_el$0, "flexDirection", 'row');
223
+ _$setProp(_el$0, "onSizeChange", () => setWidth(row?.width || 40));
224
+ _$insert(_el$0, _$createComponent(Show, {
225
+ get when() {
226
+ return labelWidth() > 0;
227
+ },
228
+ get children() {
229
+ return [(() => {
230
+ var _el$1 = _$createElement("text");
231
+ _$setProp(_el$1, "flexShrink", 0);
232
+ _$setProp(_el$1, "wrapMode", 'none');
233
+ _$insert(_el$1, () => formatQuotaRowLabel(props.account.name, labelWidth()));
234
+ _$effect(_p$ => {
235
+ var _v$5 = labelWidth(),
236
+ _v$6 = color(),
237
+ _v$7 = attributes();
238
+ _v$5 !== _p$.e && (_p$.e = _$setProp(_el$1, "width", _v$5, _p$.e));
239
+ _v$6 !== _p$.t && (_p$.t = _$setProp(_el$1, "fg", _v$6, _p$.t));
240
+ _v$7 !== _p$.a && (_p$.a = _$setProp(_el$1, "attributes", _v$7, _p$.a));
241
+ return _p$;
242
+ }, {
243
+ e: undefined,
244
+ t: undefined,
245
+ a: undefined
246
+ });
247
+ return _el$1;
248
+ })(), (() => {
249
+ var _el$10 = _$createElement("text");
250
+ _$insertNode(_el$10, _$createTextNode(` `));
251
+ _$setProp(_el$10, "width", 1);
252
+ _$setProp(_el$10, "flexShrink", 0);
253
+ return _el$10;
254
+ })()];
255
+ }
256
+ }), _el$12);
257
+ _$setProp(_el$12, "flexShrink", 0);
258
+ _$setProp(_el$12, "wrapMode", 'none');
259
+ _$insert(_el$12, value);
260
+ _$effect(_p$ => {
261
+ var _v$8 = Bun.stringWidth(value()),
262
+ _v$9 = color(),
263
+ _v$0 = attributes();
264
+ _v$8 !== _p$.e && (_p$.e = _$setProp(_el$12, "width", _v$8, _p$.e));
265
+ _v$9 !== _p$.t && (_p$.t = _$setProp(_el$12, "fg", _v$9, _p$.t));
266
+ _v$0 !== _p$.a && (_p$.a = _$setProp(_el$12, "attributes", _v$0, _p$.a));
267
+ return _p$;
268
+ }, {
269
+ e: undefined,
270
+ t: undefined,
271
+ a: undefined
272
+ });
273
+ return _el$0;
274
+ })();
275
+ }
201
276
 
202
- // Quota window row: muted label left, tone-colored bar + percentage right,
277
+ // Quota window row: muted label left, tone-colored bar + shared figure right,
203
278
  // with an optional muted reset suffix. When pacing data is present, the bar
204
279
  // gains a pace segment and an off-pace window adds a muted subline with the
205
280
  // reserve/deficit delta and the projected runout.
206
281
  function QuotaRow(props) {
207
- const used = () => props.window?.usedPercent ?? 0;
208
- const reset = () => formatResetIn(props.window?.resetsAt);
282
+ const used = () => props.usedPercent ?? 0;
283
+ const reset = () => props.part?.resetIn;
209
284
  const paceLine = () => {
210
285
  const pacing = props.pacing;
211
286
  if (!pacing || pacing.state === 'on-pace') return null;
@@ -215,147 +290,179 @@ function QuotaRow(props) {
215
290
  };
216
291
  return _$createComponent(Show, {
217
292
  get when() {
218
- return props.window;
293
+ return props.part;
219
294
  },
220
295
  get fallback() {
221
296
  return (() => {
222
- var _el$17 = _$createElement("box"),
223
- _el$18 = _$createElement("text"),
224
- _el$19 = _$createElement("text");
225
- _$insertNode(_el$17, _el$18);
226
- _$insertNode(_el$17, _el$19);
227
- _$setProp(_el$17, "width", '100%');
228
- _$setProp(_el$17, "flexDirection", 'row');
229
- _$insert(_el$18, () => props.label.padEnd(3));
230
- _$insertNode(_el$19, _$createTextNode(`—`));
297
+ var _el$21 = _$createElement("box"),
298
+ _el$22 = _$createElement("text"),
299
+ _el$23 = _$createElement("text");
300
+ _$insertNode(_el$21, _el$22);
301
+ _$insertNode(_el$21, _el$23);
302
+ _$setProp(_el$21, "width", '100%');
303
+ _$setProp(_el$21, "flexDirection", 'row');
304
+ _$insert(_el$22, () => `${formatQuotaRowLabel(props.label)} `);
305
+ _$insertNode(_el$23, _$createTextNode(`—`));
231
306
  _$effect(_p$ => {
232
- var _v$9 = props.theme.textMuted,
233
- _v$0 = props.theme.textMuted;
234
- _v$9 !== _p$.e && (_p$.e = _$setProp(_el$18, "fg", _v$9, _p$.e));
235
- _v$0 !== _p$.t && (_p$.t = _$setProp(_el$19, "fg", _v$0, _p$.t));
307
+ var _v$13 = props.theme.textMuted,
308
+ _v$14 = props.theme.textMuted;
309
+ _v$13 !== _p$.e && (_p$.e = _$setProp(_el$22, "fg", _v$13, _p$.e));
310
+ _v$14 !== _p$.t && (_p$.t = _$setProp(_el$23, "fg", _v$14, _p$.t));
236
311
  return _p$;
237
312
  }, {
238
313
  e: undefined,
239
314
  t: undefined
240
315
  });
241
- return _el$17;
316
+ return _el$21;
242
317
  })();
243
318
  },
244
319
  get children() {
245
320
  return [(() => {
246
- var _el$0 = _$createElement("box"),
247
- _el$1 = _$createElement("box"),
248
- _el$10 = _$createElement("text"),
249
- _el$11 = _$createElement("text");
250
- _$insertNode(_el$0, _el$1);
251
- _$setProp(_el$0, "width", '100%');
252
- _$setProp(_el$0, "flexDirection", 'row');
253
- _$setProp(_el$0, "justifyContent", 'space-between');
254
- _$insertNode(_el$1, _el$10);
255
- _$insertNode(_el$1, _el$11);
256
- _$setProp(_el$1, "flexDirection", 'row');
257
- _$insert(_el$10, () => props.label.padEnd(3));
258
- _$insert(_el$1, _$createComponent(For, {
321
+ var _el$13 = _$createElement("box"),
322
+ _el$14 = _$createElement("box"),
323
+ _el$15 = _$createElement("text"),
324
+ _el$16 = _$createElement("text");
325
+ _$insertNode(_el$13, _el$14);
326
+ _$setProp(_el$13, "width", '100%');
327
+ _$setProp(_el$13, "flexDirection", 'row');
328
+ _$setProp(_el$13, "justifyContent", 'space-between');
329
+ _$insertNode(_el$14, _el$15);
330
+ _$insertNode(_el$14, _el$16);
331
+ _$setProp(_el$14, "flexDirection", 'row');
332
+ _$insert(_el$15, () => `${formatQuotaRowLabel(props.label)} `);
333
+ _$insert(_el$14, _$createComponent(For, {
259
334
  get each() {
260
335
  return quotaBarSegments(used(), props.appearance, props.pacing);
261
336
  },
262
337
  children: segment => (() => {
263
- var _el$21 = _$createElement("text");
264
- _$insert(_el$21, () => segment.text);
265
- _$effect(_$p => _$setProp(_el$21, "fg", toneColor(props.theme, segment.tone), _$p));
266
- return _el$21;
338
+ var _el$25 = _$createElement("text");
339
+ _$insert(_el$25, () => segment.text);
340
+ _$effect(_$p => _$setProp(_el$25, "fg", toneColor(props.theme, segment.tone), _$p));
341
+ return _el$25;
267
342
  })()
268
- }), _el$11);
269
- _$insert(_el$11, () => ` ${String(Math.round(used())).padStart(3)}%${props.binding ? ' •' : ''}`);
270
- _$insert(_el$0, _$createComponent(Show, {
343
+ }), _el$16);
344
+ _$insert(_el$16, () => ` ${props.part?.figure}${props.binding ? ' •' : ''}`);
345
+ _$insert(_el$13, _$createComponent(Show, {
271
346
  get when() {
272
347
  return reset();
273
348
  },
274
349
  get children() {
275
- var _el$12 = _$createElement("text");
276
- _$insert(_el$12, reset);
277
- _$effect(_$p => _$setProp(_el$12, "fg", props.theme.textMuted, _$p));
278
- return _el$12;
350
+ var _el$17 = _$createElement("text");
351
+ _$insert(_el$17, reset);
352
+ _$effect(_$p => _$setProp(_el$17, "fg", props.theme.textMuted, _$p));
353
+ return _el$17;
279
354
  }
280
355
  }), null);
281
356
  _$effect(_p$ => {
282
- var _v$5 = props.theme.textMuted,
283
- _v$6 = toneColor(props.theme, usageTone(used(), props.appearance));
284
- _v$5 !== _p$.e && (_p$.e = _$setProp(_el$10, "fg", _v$5, _p$.e));
285
- _v$6 !== _p$.t && (_p$.t = _$setProp(_el$11, "fg", _v$6, _p$.t));
357
+ var _v$1 = props.theme.textMuted,
358
+ _v$10 = toneColor(props.theme, usageTone(used(), props.appearance));
359
+ _v$1 !== _p$.e && (_p$.e = _$setProp(_el$15, "fg", _v$1, _p$.e));
360
+ _v$10 !== _p$.t && (_p$.t = _$setProp(_el$16, "fg", _v$10, _p$.t));
286
361
  return _p$;
287
362
  }, {
288
363
  e: undefined,
289
364
  t: undefined
290
365
  });
291
- return _el$0;
366
+ return _el$13;
292
367
  })(), _$createComponent(Show, {
293
368
  get when() {
294
369
  return paceLine();
295
370
  },
296
371
  get children() {
297
- var _el$13 = _$createElement("box"),
298
- _el$14 = _$createElement("text"),
299
- _el$16 = _$createElement("text");
300
- _$insertNode(_el$13, _el$14);
301
- _$insertNode(_el$13, _el$16);
302
- _$setProp(_el$13, "width", '100%');
303
- _$setProp(_el$13, "flexDirection", 'row');
304
- _$insertNode(_el$14, _$createTextNode(` `));
305
- _$insert(_el$16, paceLine);
372
+ var _el$18 = _$createElement("box"),
373
+ _el$19 = _$createElement("text"),
374
+ _el$20 = _$createElement("text");
375
+ _$insertNode(_el$18, _el$19);
376
+ _$insertNode(_el$18, _el$20);
377
+ _$setProp(_el$18, "width", '100%');
378
+ _$setProp(_el$18, "flexDirection", 'row');
379
+ _$insert(_el$19, () => formatQuotaRowLabel('', 11));
380
+ _$insert(_el$20, paceLine);
306
381
  _$effect(_p$ => {
307
- var _v$7 = props.theme.textMuted,
308
- _v$8 = toneColor(props.theme, props.pacing?.state === 'deficit' ? 'warn' : 'muted');
309
- _v$7 !== _p$.e && (_p$.e = _$setProp(_el$14, "fg", _v$7, _p$.e));
310
- _v$8 !== _p$.t && (_p$.t = _$setProp(_el$16, "fg", _v$8, _p$.t));
382
+ var _v$11 = props.theme.textMuted,
383
+ _v$12 = toneColor(props.theme, props.pacing?.state === 'deficit' ? 'warn' : 'muted');
384
+ _v$11 !== _p$.e && (_p$.e = _$setProp(_el$19, "fg", _v$11, _p$.e));
385
+ _v$12 !== _p$.t && (_p$.t = _$setProp(_el$20, "fg", _v$12, _p$.t));
311
386
  return _p$;
312
387
  }, {
313
388
  e: undefined,
314
389
  t: undefined
315
390
  });
316
- return _el$13;
391
+ return _el$18;
317
392
  }
318
393
  })];
319
394
  }
320
395
  });
321
396
  }
322
397
 
398
+ // The shared credit figure followed by the spent and limit amounts:
399
+ // `credits 75% left · $25.00/$100.00`. When that line is wider than the
400
+ // measured width, the amounts drop their cents (`$1,250/$5,000`) instead of
401
+ // wrapping onto a second line.
402
+ function creditLine(figure, extraUsage, width) {
403
+ const amounts = formatCreditAmounts(extraUsage);
404
+ if (!amounts) return figure;
405
+ const line = `${figure} · ${amounts}`;
406
+ if (width === undefined || Bun.stringWidth(line) <= width) return line;
407
+ return `${figure} · ${formatCreditAmounts(extraUsage, {
408
+ wholeUnits: true
409
+ })}`;
410
+ }
411
+
323
412
  // Account block: header row (name + status word) then per-window quota rows.
324
413
  // Pacing is computed here — per window, against the wall clock at render time
325
414
  // (re-evaluated on every state poll) — and disabled by passing false.
326
415
  function AccountBlock(props) {
327
- const statusWord = () => props.needsReauth ? 're-login' : props.vaultReauth ? 'vault reauth' : props.active ? 'active' : 'idle';
328
- const statusTone = () => props.needsReauth || props.vaultReauth ? 'warn' : props.active ? 'ok' : 'muted';
329
- const pacingFor = (window, windowMs) => props.pacingEnabled && window ? computeQuotaPacing(window, windowMs, Date.now()) : null;
416
+ const statusWord = () => props.quotaDated && props.quota ? 'dated' : props.needsReauth ? 're-login' : props.vaultReauth ? 'needs sign-in in the vault' : props.active ? 'active' : 'idle';
417
+ const statusTone = () => props.needsReauth || props.vaultReauth || props.stateLine ? 'warn' : props.active ? 'ok' : 'muted';
418
+ const pacingFor = (window, windowMs) => props.pacingEnabled && !props.quotaDated && window ? computeQuotaPacing(window, windowMs, Date.now()) : null;
419
+ const parts = () => {
420
+ const now = Date.now();
421
+ return quotaWindowParts(quotaDisplayProjection(props.quota, now), {
422
+ now
423
+ });
424
+ };
425
+ const partFor = name => parts().windows.find(part => part.name === name);
330
426
  return (() => {
331
- var _el$22 = _$createElement("box"),
332
- _el$23 = _$createElement("box"),
333
- _el$24 = _$createElement("text"),
334
- _el$25 = _$createElement("b"),
335
- _el$26 = _$createElement("text"),
336
- _el$27 = _$createElement("b");
337
- _$insertNode(_el$22, _el$23);
338
- _$setProp(_el$22, "width", '100%');
339
- _$setProp(_el$22, "flexDirection", 'column');
340
- _$insertNode(_el$23, _el$24);
341
- _$insertNode(_el$23, _el$26);
342
- _$setProp(_el$23, "width", '100%');
343
- _$setProp(_el$23, "flexDirection", 'row');
344
- _$setProp(_el$23, "justifyContent", 'space-between');
345
- _$insertNode(_el$24, _el$25);
346
- _$insert(_el$25, () => `${props.name}${props.tierLabel ? ` · ${props.tierLabel}` : ''}`);
427
+ var _el$26 = _$createElement("box"),
428
+ _el$27 = _$createElement("box"),
429
+ _el$28 = _$createElement("text"),
430
+ _el$29 = _$createElement("b"),
431
+ _el$30 = _$createElement("text"),
432
+ _el$31 = _$createElement("b");
347
433
  _$insertNode(_el$26, _el$27);
348
- _$insert(_el$27, statusWord);
349
- _$insert(_el$22, _$createComponent(Show, {
434
+ _$setProp(_el$26, "width", '100%');
435
+ _$setProp(_el$26, "flexDirection", 'column');
436
+ _$insertNode(_el$27, _el$28);
437
+ _$insertNode(_el$27, _el$30);
438
+ _$setProp(_el$27, "width", '100%');
439
+ _$setProp(_el$27, "flexDirection", 'row');
440
+ _$setProp(_el$27, "justifyContent", 'space-between');
441
+ _$insertNode(_el$28, _el$29);
442
+ _$insert(_el$29, () => `${props.name}${props.tierLabel ? ` · ${props.tierLabel}` : ''}`);
443
+ _$insertNode(_el$30, _el$31);
444
+ _$insert(_el$31, statusWord);
445
+ _$insert(_el$26, _$createComponent(Show, {
446
+ get when() {
447
+ return props.stateLine;
448
+ },
449
+ get children() {
450
+ var _el$32 = _$createElement("text");
451
+ _$insert(_el$32, () => props.stateLine);
452
+ _$effect(_$p => _$setProp(_el$32, "fg", props.theme.textMuted, _$p));
453
+ return _el$32;
454
+ }
455
+ }), null);
456
+ _$insert(_el$26, _$createComponent(Show, {
350
457
  get when() {
351
458
  return props.quota;
352
459
  },
353
460
  get fallback() {
354
461
  return (() => {
355
- var _el$30 = _$createElement("text");
356
- _$insertNode(_el$30, _$createTextNode(`checking…`));
357
- _$effect(_$p => _$setProp(_el$30, "fg", props.theme.textMuted, _$p));
358
- return _el$30;
462
+ var _el$36 = _$createElement("text");
463
+ _$insertNode(_el$36, _$createTextNode(`checking…`));
464
+ _$effect(_$p => _$setProp(_el$36, "fg", props.theme.textMuted, _$p));
465
+ return _el$36;
359
466
  })();
360
467
  },
361
468
  get children() {
@@ -367,8 +474,11 @@ function AccountBlock(props) {
367
474
  return props.appearance;
368
475
  },
369
476
  label: "5h",
370
- get window() {
371
- return props.quota?.five_hour;
477
+ get part() {
478
+ return partFor('5h');
479
+ },
480
+ get usedPercent() {
481
+ return props.quota?.five_hour?.usedPercent;
372
482
  },
373
483
  get pacing() {
374
484
  return pacingFor(props.quota?.five_hour, FIVE_HOUR_MS);
@@ -384,8 +494,11 @@ function AccountBlock(props) {
384
494
  return props.appearance;
385
495
  },
386
496
  label: "7d",
387
- get window() {
388
- return props.quota?.seven_day;
497
+ get part() {
498
+ return partFor('7d');
499
+ },
500
+ get usedPercent() {
501
+ return props.quota?.seven_day?.usedPercent;
389
502
  },
390
503
  get pacing() {
391
504
  return pacingFor(props.quota?.seven_day, SEVEN_DAY_MS);
@@ -405,9 +518,14 @@ function AccountBlock(props) {
405
518
  return props.appearance;
406
519
  },
407
520
  get label() {
408
- return formatScopedQuotaLabel(window.title);
521
+ return partFor(window.title)?.name ?? window.title;
522
+ },
523
+ get part() {
524
+ return partFor(window.title);
525
+ },
526
+ get usedPercent() {
527
+ return window.usedPercent;
409
528
  },
410
- window: window,
411
529
  get pacing() {
412
530
  return pacingFor(window, SEVEN_DAY_MS);
413
531
  },
@@ -417,44 +535,67 @@ function AccountBlock(props) {
417
535
  })
418
536
  }), _$createComponent(Show, {
419
537
  get when() {
420
- return props.quota?.extraUsage;
538
+ return partFor('credits');
421
539
  },
422
- children: extraUsage => (() => {
423
- var _el$32 = _$createElement("text");
424
- _$insert(_el$32, () => `credits ${formatQuotaMoney(extraUsage().used)}/${formatQuotaMoney(extraUsage().limit)}${extraUsage().exhausted ? ' · exhausted' : ''}`);
425
- _$effect(_$p => _$setProp(_el$32, "fg", toneColor(props.theme, extraUsage().severity === 'critical' ? 'err' : extraUsage().severity === 'warning' || extraUsage().exhausted ? 'warn' : 'muted'), _$p));
426
- return _el$32;
427
- })()
540
+ children: budget => {
541
+ // The line box's laid-out width, read when it mounts and on each
542
+ // resize. It is undefined (amounts keep their cents) until layout.
543
+ const [width, setWidth] = createSignal();
544
+ let line;
545
+ return (() => {
546
+ var _el$38 = _$createElement("box"),
547
+ _el$39 = _$createElement("text");
548
+ _$insertNode(_el$38, _el$39);
549
+ _$use(element => {
550
+ line = element;
551
+ setWidth(element.width || undefined);
552
+ }, _el$38);
553
+ _$setProp(_el$38, "width", '100%');
554
+ _$setProp(_el$38, "onSizeChange", () => setWidth(line?.width || undefined));
555
+ _$insert(_el$39, () => creditLine(budget().figure, props.quota?.extraUsage, width()));
556
+ _$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));
557
+ return _el$38;
558
+ })();
559
+ }
560
+ }), _$createComponent(Show, {
561
+ get when() {
562
+ return parts().age;
563
+ },
564
+ get children() {
565
+ var _el$33 = _$createElement("text");
566
+ _$insert(_el$33, () => parts().age);
567
+ _$effect(_$p => _$setProp(_el$33, "fg", props.theme.textMuted, _$p));
568
+ return _el$33;
569
+ }
428
570
  }), _$createComponent(Show, {
429
571
  get when() {
430
572
  return props.quota?.fallbackAdvised === true;
431
573
  },
432
574
  get children() {
433
- var _el$28 = _$createElement("text");
434
- _$insertNode(_el$28, _$createTextNode(`→ fallback advised`));
435
- _$effect(_$p => _$setProp(_el$28, "fg", props.theme.textMuted, _$p));
436
- return _el$28;
575
+ var _el$34 = _$createElement("text");
576
+ _$insertNode(_el$34, _$createTextNode(`→ fallback advised`));
577
+ _$effect(_$p => _$setProp(_el$34, "fg", props.theme.textMuted, _$p));
578
+ return _el$34;
437
579
  }
438
580
  })];
439
581
  }
440
582
  }), null);
441
583
  _$effect(_p$ => {
442
- var _v$1 = props.marginTop ?? 0,
443
- _v$10 = props.theme.text,
444
- _v$11 = toneColor(props.theme, statusTone());
445
- _v$1 !== _p$.e && (_p$.e = _$setProp(_el$22, "marginTop", _v$1, _p$.e));
446
- _v$10 !== _p$.t && (_p$.t = _$setProp(_el$24, "fg", _v$10, _p$.t));
447
- _v$11 !== _p$.a && (_p$.a = _$setProp(_el$26, "fg", _v$11, _p$.a));
584
+ var _v$15 = props.marginTop ?? 0,
585
+ _v$16 = props.theme.text,
586
+ _v$17 = toneColor(props.theme, statusTone());
587
+ _v$15 !== _p$.e && (_p$.e = _$setProp(_el$26, "marginTop", _v$15, _p$.e));
588
+ _v$16 !== _p$.t && (_p$.t = _$setProp(_el$28, "fg", _v$16, _p$.t));
589
+ _v$17 !== _p$.a && (_p$.a = _$setProp(_el$30, "fg", _v$17, _p$.a));
448
590
  return _p$;
449
591
  }, {
450
592
  e: undefined,
451
593
  t: undefined,
452
594
  a: undefined
453
595
  });
454
- return _el$22;
596
+ return _el$26;
455
597
  })();
456
598
  }
457
- export { formatQuotaMoney };
458
599
 
459
600
  // --- Quota dialog content ---------------------------------------------------
460
601
 
@@ -477,28 +618,28 @@ function QuotaDialogContent(props) {
477
618
  });
478
619
  setTimeout(refresh, 0);
479
620
  const theme = () => props.api.theme.current;
480
- const enabledFallbacks = () => (state().fallbacks ?? []).filter(f => f.enabled);
621
+ const enabledFallbacks = () => (state().fallbacks ?? []).filter(f => f.enabled || f.custodyState && f.custodyState !== 'off');
481
622
  return (() => {
482
- var _el$33 = _$createElement("box"),
483
- _el$34 = _$createElement("box"),
484
- _el$35 = _$createElement("box"),
485
- _el$36 = _$createElement("text"),
486
- _el$37 = _$createElement("b");
487
- _$insertNode(_el$33, _el$34);
488
- _$setProp(_el$33, "flexDirection", 'column');
489
- _$setProp(_el$33, "padding", 2);
490
- _$setProp(_el$33, "width", '100%');
491
- _$setProp(_el$33, "alignItems", 'center');
492
- _$insertNode(_el$34, _el$35);
493
- _$setProp(_el$34, "flexDirection", 'column');
494
- _$setProp(_el$34, "width", 58);
495
- _$insertNode(_el$35, _el$36);
496
- _$setProp(_el$35, "width", '100%');
497
- _$setProp(_el$35, "justifyContent", 'center');
498
- _$setProp(_el$35, "marginBottom", 1);
499
- _$insertNode(_el$36, _el$37);
500
- _$insertNode(_el$37, _$createTextNode(`Quota`));
501
- _$insert(_el$34, _$createComponent(AccountBlock, {
623
+ var _el$40 = _$createElement("box"),
624
+ _el$41 = _$createElement("box"),
625
+ _el$42 = _$createElement("box"),
626
+ _el$43 = _$createElement("text"),
627
+ _el$44 = _$createElement("b");
628
+ _$insertNode(_el$40, _el$41);
629
+ _$setProp(_el$40, "flexDirection", 'column');
630
+ _$setProp(_el$40, "padding", 2);
631
+ _$setProp(_el$40, "width", '100%');
632
+ _$setProp(_el$40, "alignItems", 'center');
633
+ _$insertNode(_el$41, _el$42);
634
+ _$setProp(_el$41, "flexDirection", 'column');
635
+ _$setProp(_el$41, "width", 58);
636
+ _$insertNode(_el$42, _el$43);
637
+ _$setProp(_el$42, "width", '100%');
638
+ _$setProp(_el$42, "justifyContent", 'center');
639
+ _$setProp(_el$42, "marginBottom", 1);
640
+ _$insertNode(_el$43, _el$44);
641
+ _$insertNode(_el$44, _$createTextNode(`Quota`));
642
+ _$insert(_el$41, _$createComponent(AccountBlock, {
502
643
  get theme() {
503
644
  return theme();
504
645
  },
@@ -517,9 +658,15 @@ function QuotaDialogContent(props) {
517
658
  },
518
659
  get tierLabel() {
519
660
  return state().main?.tierLabel;
661
+ },
662
+ get stateLine() {
663
+ return state().main?.stateLine;
664
+ },
665
+ get quotaDated() {
666
+ return state().main?.quotaDated;
520
667
  }
521
668
  }), null);
522
- _$insert(_el$34, _$createComponent(Show, {
669
+ _$insert(_el$41, _$createComponent(Show, {
523
670
  get when() {
524
671
  return prefs().sections.fallbackAccounts;
525
672
  },
@@ -553,13 +700,22 @@ function QuotaDialogContent(props) {
553
700
  get needsReauth() {
554
701
  return fb.needsReauth;
555
702
  },
703
+ get vaultReauth() {
704
+ return fb.vaultReauth;
705
+ },
706
+ get stateLine() {
707
+ return fb.stateLine;
708
+ },
709
+ get quotaDated() {
710
+ return fb.quotaDated;
711
+ },
556
712
  marginTop: 1
557
713
  })
558
714
  });
559
715
  }
560
716
  }), null);
561
- _$effect(_$p => _$setProp(_el$36, "fg", theme().text, _$p));
562
- return _el$33;
717
+ _$effect(_$p => _$setProp(_el$43, "fg", theme().text, _$p));
718
+ return _el$40;
563
719
  })();
564
720
  }
565
721
 
@@ -651,8 +807,8 @@ function QuotaSidebar(props) {
651
807
  for (const u of unsubs) u();
652
808
  });
653
809
  const theme = () => props.api.theme.current;
654
- const enabledFallbacks = () => (state().fallbacks ?? []).filter(f => f.enabled);
655
- const hasData = () => state().main?.quota != null || enabledFallbacks().length > 0;
810
+ const enabledFallbacks = () => (state().fallbacks ?? []).filter(f => f.enabled || f.custodyState && f.custodyState !== 'off');
811
+ const hasData = () => state().main?.quota != null || state().main?.stateLine != null || enabledFallbacks().length > 0;
656
812
  const headerLabel = () => {
657
813
  const name = prefs().header.label;
658
814
  return !hasData() ? name : collapsed() ? `\u25b6 ${name}` : `\u25bc ${name}`;
@@ -661,6 +817,7 @@ function QuotaSidebar(props) {
661
817
  const activeQuotaSummary = () => getCollapsedQuotaSummary(activeAccount().quota);
662
818
  const activePacingDeficit = () => {
663
819
  if (!prefs().sections.pacing) return false;
820
+ if (activeAccount().quotaDated) return null;
664
821
  const quota = activeAccount().quota;
665
822
  if (!quota) return false;
666
823
  const now = Date.now();
@@ -695,33 +852,33 @@ function QuotaSidebar(props) {
695
852
  return `${r.transport} \u00b7 ${r.enabled ? 'on' : 'off'}`;
696
853
  };
697
854
  return (() => {
698
- var _el$39 = _$createElement("box"),
699
- _el$40 = _$createElement("box"),
700
- _el$41 = _$createElement("box"),
701
- _el$42 = _$createElement("text"),
702
- _el$43 = _$createElement("b");
703
- _$insertNode(_el$39, _el$40);
704
- _$setProp(_el$39, "width", '100%');
705
- _$setProp(_el$39, "flexDirection", 'column');
706
- _$setProp(_el$39, "border", SINGLE_BORDER);
707
- _$setProp(_el$39, "paddingTop", 1);
708
- _$setProp(_el$39, "paddingBottom", 1);
709
- _$setProp(_el$39, "paddingLeft", 1);
710
- _$setProp(_el$39, "paddingRight", 1);
711
- _$insertNode(_el$40, _el$41);
712
- _$setProp(_el$40, "width", '100%');
713
- _$setProp(_el$40, "flexDirection", 'row');
714
- _$setProp(_el$40, "justifyContent", 'space-between');
715
- _$setProp(_el$40, "alignItems", 'center');
716
- _$setProp(_el$40, "onMouseDown", () => {
855
+ var _el$46 = _$createElement("box"),
856
+ _el$47 = _$createElement("box"),
857
+ _el$48 = _$createElement("box"),
858
+ _el$49 = _$createElement("text"),
859
+ _el$50 = _$createElement("b");
860
+ _$insertNode(_el$46, _el$47);
861
+ _$setProp(_el$46, "width", '100%');
862
+ _$setProp(_el$46, "flexDirection", 'column');
863
+ _$setProp(_el$46, "border", SINGLE_BORDER);
864
+ _$setProp(_el$46, "paddingTop", 1);
865
+ _$setProp(_el$46, "paddingBottom", 1);
866
+ _$setProp(_el$46, "paddingLeft", 1);
867
+ _$setProp(_el$46, "paddingRight", 1);
868
+ _$insertNode(_el$47, _el$48);
869
+ _$setProp(_el$47, "width", '100%');
870
+ _$setProp(_el$47, "flexDirection", 'row');
871
+ _$setProp(_el$47, "justifyContent", 'space-between');
872
+ _$setProp(_el$47, "alignItems", 'center');
873
+ _$setProp(_el$47, "onMouseDown", () => {
717
874
  if (hasData()) props.controller.toggleCollapsed();
718
875
  });
719
- _$insertNode(_el$41, _el$42);
720
- _$setProp(_el$41, "paddingLeft", 1);
721
- _$setProp(_el$41, "paddingRight", 1);
722
- _$insertNode(_el$42, _el$43);
723
- _$insert(_el$43, headerLabel);
724
- _$insert(_el$40, _$createComponent(Show, {
876
+ _$insertNode(_el$48, _el$49);
877
+ _$setProp(_el$48, "paddingLeft", 1);
878
+ _$setProp(_el$48, "paddingRight", 1);
879
+ _$insertNode(_el$49, _el$50);
880
+ _$insert(_el$50, headerLabel);
881
+ _$insert(_el$47, _$createComponent(Show, {
725
882
  get when() {
726
883
  return degraded();
727
884
  },
@@ -731,70 +888,55 @@ function QuotaSidebar(props) {
731
888
  return prefs().header.showVersion && PLUGIN_VERSION !== '';
732
889
  },
733
890
  get children() {
734
- var _el$53 = _$createElement("text");
735
- _$insert(_el$53, `v${PLUGIN_VERSION}`);
736
- _$effect(_$p => _$setProp(_el$53, "fg", theme().textMuted, _$p));
737
- return _el$53;
891
+ var _el$58 = _$createElement("text");
892
+ _$insert(_el$58, `v${PLUGIN_VERSION}`);
893
+ _$effect(_$p => _$setProp(_el$58, "fg", theme().textMuted, _$p));
894
+ return _el$58;
738
895
  }
739
896
  });
740
897
  },
741
898
  get children() {
742
- var _el$44 = _$createElement("box"),
743
- _el$45 = _$createElement("text"),
744
- _el$46 = _$createElement("b");
745
- _$insertNode(_el$44, _el$45);
746
- _$setProp(_el$44, "paddingLeft", 1);
747
- _$setProp(_el$44, "paddingRight", 1);
748
- _$insertNode(_el$45, _el$46);
749
- _$insertNode(_el$46, _$createTextNode(`LIMITED`));
899
+ var _el$51 = _$createElement("box"),
900
+ _el$52 = _$createElement("text"),
901
+ _el$53 = _$createElement("b");
902
+ _$insertNode(_el$51, _el$52);
903
+ _$setProp(_el$51, "paddingLeft", 1);
904
+ _$setProp(_el$51, "paddingRight", 1);
905
+ _$insertNode(_el$52, _el$53);
906
+ _$insertNode(_el$53, _$createTextNode(`LIMITED`));
750
907
  _$effect(_p$ => {
751
- var _v$12 = theme().warning,
752
- _v$13 = theme().background;
753
- _v$12 !== _p$.e && (_p$.e = _$setProp(_el$44, "backgroundColor", _v$12, _p$.e));
754
- _v$13 !== _p$.t && (_p$.t = _$setProp(_el$45, "fg", _v$13, _p$.t));
908
+ var _v$18 = theme().warning,
909
+ _v$19 = theme().background;
910
+ _v$18 !== _p$.e && (_p$.e = _$setProp(_el$51, "backgroundColor", _v$18, _p$.e));
911
+ _v$19 !== _p$.t && (_p$.t = _$setProp(_el$52, "fg", _v$19, _p$.t));
755
912
  return _p$;
756
913
  }, {
757
914
  e: undefined,
758
915
  t: undefined
759
916
  });
760
- return _el$44;
917
+ return _el$51;
761
918
  }
762
919
  }), null);
763
- _$insert(_el$39, _$createComponent(Show, {
920
+ _$insert(_el$46, _$createComponent(Show, {
764
921
  get when() {
765
922
  return _$memo(() => !!collapsed())() && hasData();
766
923
  },
767
924
  get children() {
768
- return [_$createComponent(CollapsedRow, {
769
- get theme() {
770
- return theme();
771
- },
772
- get label() {
773
- return activeAccount().name;
925
+ return [_$createComponent(Index, {
926
+ get each() {
927
+ return getCollapsedAccounts(state(), prefs().sections.fallbackAccounts);
774
928
  },
775
- get children() {
776
- return _$createComponent(Show, {
777
- get when() {
778
- return activeQuotaSummary().text != null;
779
- },
780
- get fallback() {
781
- return (() => {
782
- var _el$54 = _$createElement("text");
783
- _$insertNode(_el$54, _$createTextNode(`—`));
784
- _$effect(_$p => _$setProp(_el$54, "fg", theme().textMuted, _$p));
785
- return _el$54;
786
- })();
787
- },
788
- get children() {
789
- var _el$48 = _$createElement("text"),
790
- _el$49 = _$createElement("b");
791
- _$insertNode(_el$48, _el$49);
792
- _$insert(_el$49, () => activeQuotaSummary().text);
793
- _$effect(_$p => _$setProp(_el$48, "fg", toneColor(theme(), activeQuotaTone()), _$p));
794
- return _el$48;
795
- }
796
- });
797
- }
929
+ children: account => _$createComponent(CollapsedAccountRow, {
930
+ get theme() {
931
+ return theme();
932
+ },
933
+ get account() {
934
+ return account();
935
+ },
936
+ get tone() {
937
+ return activeQuotaTone();
938
+ }
939
+ })
798
940
  }), _$createComponent(Show, {
799
941
  get when() {
800
942
  return state().fastMode;
@@ -806,12 +948,12 @@ function QuotaSidebar(props) {
806
948
  },
807
949
  label: "Mode",
808
950
  get children() {
809
- var _el$50 = _$createElement("text"),
810
- _el$51 = _$createElement("b");
811
- _$insertNode(_el$50, _el$51);
812
- _$insertNode(_el$51, _$createTextNode(`fast`));
813
- _$effect(_$p => _$setProp(_el$50, "fg", toneColor(theme(), 'accent'), _$p));
814
- return _el$50;
951
+ var _el$55 = _$createElement("text"),
952
+ _el$56 = _$createElement("b");
953
+ _$insertNode(_el$55, _el$56);
954
+ _$insertNode(_el$56, _$createTextNode(`fast`));
955
+ _$effect(_$p => _$setProp(_el$55, "fg", toneColor(theme(), 'accent'), _$p));
956
+ return _el$55;
815
957
  }
816
958
  });
817
959
  }
@@ -825,18 +967,18 @@ function QuotaSidebar(props) {
825
967
  },
826
968
  label: "Recovery",
827
969
  get children() {
828
- var _el$56 = _$createElement("text"),
829
- _el$57 = _$createElement("b");
830
- _$insertNode(_el$56, _el$57);
831
- _$insert(_el$57, summary);
832
- _$effect(_$p => _$setProp(_el$56, "fg", toneColor(theme(), fableRecoveryTone()), _$p));
833
- return _el$56;
970
+ var _el$59 = _$createElement("text"),
971
+ _el$60 = _$createElement("b");
972
+ _$insertNode(_el$59, _el$60);
973
+ _$insert(_el$60, summary);
974
+ _$effect(_$p => _$setProp(_el$59, "fg", toneColor(theme(), fableRecoveryTone()), _$p));
975
+ return _el$59;
834
976
  }
835
977
  })
836
978
  })];
837
979
  }
838
980
  }), null);
839
- _$insert(_el$39, _$createComponent(Show, {
981
+ _$insert(_el$46, _$createComponent(Show, {
840
982
  get when() {
841
983
  return !collapsed() || !hasData();
842
984
  },
@@ -847,14 +989,14 @@ function QuotaSidebar(props) {
847
989
  },
848
990
  get fallback() {
849
991
  return (() => {
850
- var _el$58 = _$createElement("box"),
851
- _el$59 = _$createElement("text");
852
- _$insertNode(_el$58, _el$59);
853
- _$setProp(_el$58, "marginTop", 1);
854
- _$setProp(_el$58, "width", '100%');
855
- _$insertNode(_el$59, _$createTextNode(`Waiting for quota…`));
856
- _$effect(_$p => _$setProp(_el$59, "fg", theme().textMuted, _$p));
857
- return _el$58;
992
+ var _el$61 = _$createElement("box"),
993
+ _el$62 = _$createElement("text");
994
+ _$insertNode(_el$61, _el$62);
995
+ _$setProp(_el$61, "marginTop", 1);
996
+ _$setProp(_el$61, "width", '100%');
997
+ _$insertNode(_el$62, _$createTextNode(`Waiting for quota…`));
998
+ _$effect(_$p => _$setProp(_el$62, "fg", theme().textMuted, _$p));
999
+ return _el$61;
858
1000
  })();
859
1001
  },
860
1002
  get children() {
@@ -887,6 +1029,12 @@ function QuotaSidebar(props) {
887
1029
  },
888
1030
  get tierLabel() {
889
1031
  return state().main?.tierLabel;
1032
+ },
1033
+ get stateLine() {
1034
+ return state().main?.stateLine;
1035
+ },
1036
+ get quotaDated() {
1037
+ return state().main?.quotaDated;
890
1038
  }
891
1039
  }), _$createComponent(Show, {
892
1040
  get when() {
@@ -925,6 +1073,12 @@ function QuotaSidebar(props) {
925
1073
  get vaultReauth() {
926
1074
  return fb.vaultReauth;
927
1075
  },
1076
+ get stateLine() {
1077
+ return fb.stateLine;
1078
+ },
1079
+ get quotaDated() {
1080
+ return fb.quotaDated;
1081
+ },
928
1082
  marginTop: 1
929
1083
  })
930
1084
  });
@@ -1118,19 +1272,19 @@ function QuotaSidebar(props) {
1118
1272
  }
1119
1273
  }), null);
1120
1274
  _$effect(_p$ => {
1121
- var _v$14 = theme().borderActive,
1122
- _v$15 = theme().accent,
1123
- _v$16 = theme().background;
1124
- _v$14 !== _p$.e && (_p$.e = _$setProp(_el$39, "borderColor", _v$14, _p$.e));
1125
- _v$15 !== _p$.t && (_p$.t = _$setProp(_el$41, "backgroundColor", _v$15, _p$.t));
1126
- _v$16 !== _p$.a && (_p$.a = _$setProp(_el$42, "fg", _v$16, _p$.a));
1275
+ var _v$20 = theme().borderActive,
1276
+ _v$21 = theme().accent,
1277
+ _v$22 = theme().background;
1278
+ _v$20 !== _p$.e && (_p$.e = _$setProp(_el$46, "borderColor", _v$20, _p$.e));
1279
+ _v$21 !== _p$.t && (_p$.t = _$setProp(_el$48, "backgroundColor", _v$21, _p$.t));
1280
+ _v$22 !== _p$.a && (_p$.a = _$setProp(_el$49, "fg", _v$22, _p$.a));
1127
1281
  return _p$;
1128
1282
  }, {
1129
1283
  e: undefined,
1130
1284
  t: undefined,
1131
1285
  a: undefined
1132
1286
  });
1133
- return _el$39;
1287
+ return _el$46;
1134
1288
  })();
1135
1289
  }
1136
1290
  const tui = async api => {