opencode-usage 0.4.2 → 0.4.3

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.
package/dist/index.js CHANGED
@@ -28192,6 +28192,86 @@ import { join as join4 } from "path";
28192
28192
  var isBun2 = typeof globalThis.Bun !== "undefined";
28193
28193
  var CODEX_API_URL = "https://chatgpt.com/backend-api/wham/usage";
28194
28194
  var CODEX_AUTH_PATH = join4(homedir3(), ".codex", "auth.json");
28195
+ var CODEX_MULTI_AUTH_DEFAULT_STORE_PATH = join4(homedir3(), ".config", "oc-codex-multi-account", "accounts.json");
28196
+ var CODEX_MULTI_AUTH_LEGACY_STORE_PATH = join4(homedir3(), ".config", "opencode-multi-auth", "accounts.json");
28197
+ var CODEX_MULTI_AUTH_STORE_FILE_ENV = "OPENCODE_MULTI_AUTH_STORE_FILE";
28198
+ var CODEX_MULTI_AUTH_STORE_DIR_ENV = "OPENCODE_MULTI_AUTH_STORE_DIR";
28199
+ function getCodexMultiAuthStorePaths() {
28200
+ const explicitFile = process.env[CODEX_MULTI_AUTH_STORE_FILE_ENV]?.trim();
28201
+ if (explicitFile)
28202
+ return [explicitFile];
28203
+ const explicitDir = process.env[CODEX_MULTI_AUTH_STORE_DIR_ENV]?.trim();
28204
+ if (explicitDir)
28205
+ return [join4(explicitDir, "accounts.json")];
28206
+ return [
28207
+ CODEX_MULTI_AUTH_DEFAULT_STORE_PATH,
28208
+ CODEX_MULTI_AUTH_LEGACY_STORE_PATH
28209
+ ];
28210
+ }
28211
+ function windowToUsed(window) {
28212
+ if (!window)
28213
+ return;
28214
+ if (typeof window.limit !== "number" || typeof window.remaining !== "number") {
28215
+ return;
28216
+ }
28217
+ if (!Number.isFinite(window.limit) || !Number.isFinite(window.remaining)) {
28218
+ return;
28219
+ }
28220
+ if (window.limit <= 0)
28221
+ return;
28222
+ return Math.min(1, Math.max(0, (window.limit - window.remaining) / window.limit));
28223
+ }
28224
+ async function loadCodexMultiAuthQuota() {
28225
+ for (const storePath of getCodexMultiAuthStorePaths()) {
28226
+ try {
28227
+ const content = isBun2 ? await Bun.file(storePath).text() : await readFile2(storePath, "utf-8");
28228
+ const store = JSON.parse(content);
28229
+ if (!store.accounts || Object.keys(store.accounts).length === 0) {
28230
+ continue;
28231
+ }
28232
+ const results = [];
28233
+ for (const [alias, account] of Object.entries(store.accounts)) {
28234
+ const isActive = store.activeAlias === alias;
28235
+ const accountPrefix = isActive ? `${alias} [ACTIVE]` : alias;
28236
+ let hasAnyLimit = false;
28237
+ const usedFiveHour = windowToUsed(account.rateLimits?.fiveHour);
28238
+ if (usedFiveHour !== undefined) {
28239
+ hasAnyLimit = true;
28240
+ results.push({
28241
+ source: "codex",
28242
+ label: `${accountPrefix} - 5h Limit`,
28243
+ used: usedFiveHour,
28244
+ resetAt: typeof account.rateLimits?.fiveHour?.resetAt === "number" ? Math.floor(account.rateLimits.fiveHour.resetAt / 1000) : undefined
28245
+ });
28246
+ }
28247
+ const usedWeekly = windowToUsed(account.rateLimits?.weekly);
28248
+ if (usedWeekly !== undefined) {
28249
+ hasAnyLimit = true;
28250
+ results.push({
28251
+ source: "codex",
28252
+ label: `${accountPrefix} - Weekly`,
28253
+ used: usedWeekly,
28254
+ resetAt: typeof account.rateLimits?.weekly?.resetAt === "number" ? Math.floor(account.rateLimits.weekly.resetAt / 1000) : undefined
28255
+ });
28256
+ }
28257
+ if (!hasAnyLimit) {
28258
+ results.push({
28259
+ source: "codex",
28260
+ label: accountPrefix,
28261
+ used: 0,
28262
+ error: "No limit data yet"
28263
+ });
28264
+ }
28265
+ }
28266
+ if (results.length > 0) {
28267
+ return results;
28268
+ }
28269
+ } catch {
28270
+ continue;
28271
+ }
28272
+ }
28273
+ return null;
28274
+ }
28195
28275
  async function readCodexAuthToken() {
28196
28276
  try {
28197
28277
  const content = isBun2 ? await Bun.file(CODEX_AUTH_PATH).text() : await readFile2(CODEX_AUTH_PATH, "utf-8");
@@ -28210,6 +28290,11 @@ async function resolveCodexToken(explicitToken) {
28210
28290
  return readCodexAuthToken();
28211
28291
  }
28212
28292
  async function loadCodexQuota(token) {
28293
+ if (!token) {
28294
+ const multiAuthQuotas = await loadCodexMultiAuthQuota();
28295
+ if (multiAuthQuotas)
28296
+ return multiAuthQuotas;
28297
+ }
28213
28298
  const resolvedToken = await resolveCodexToken(token);
28214
28299
  if (!resolvedToken) {
28215
28300
  return [
@@ -28602,7 +28687,7 @@ function QuotaPanel(props) {
28602
28687
  return COLORS.accent.amber;
28603
28688
  return COLORS.accent.teal;
28604
28689
  };
28605
- const formatResetTime = (resetAt) => {
28690
+ const formatResetTime = (resetAt, compact = false) => {
28606
28691
  if (!resetAt)
28607
28692
  return "";
28608
28693
  const resetDate = new Date(resetAt * 1000);
@@ -28617,14 +28702,14 @@ function QuotaPanel(props) {
28617
28702
  const hours = resetDate.getHours().toString().padStart(2, "0");
28618
28703
  const mins = resetDate.getMinutes().toString().padStart(2, "0");
28619
28704
  if (resetDate >= today && resetDate < tomorrow) {
28620
- return `\u21BB today ${hours}:${mins}`;
28705
+ return compact ? `\u21BB ${hours}:${mins}` : `\u21BB today ${hours}:${mins}`;
28621
28706
  }
28622
28707
  if (resetDate >= tomorrow && resetDate < dayAfter) {
28623
- return `\u21BB tomorrow ${hours}:${mins}`;
28708
+ return compact ? `\u21BB tmr ${hours}:${mins}` : `\u21BB tomorrow ${hours}:${mins}`;
28624
28709
  }
28625
28710
  const day = resetDate.getDate().toString().padStart(2, "0");
28626
28711
  const month = (resetDate.getMonth() + 1).toString().padStart(2, "0");
28627
- return `\u21BB ${day}.${month}. ${hours}:${mins}`;
28712
+ return compact ? `\u21BB ${day}.${month}` : `\u21BB ${day}.${month}. ${hours}:${mins}`;
28628
28713
  };
28629
28714
  const groupedQuotas = () => {
28630
28715
  const groups = new Map;
@@ -28683,123 +28768,152 @@ function QuotaPanel(props) {
28683
28768
  insert(_el$46, () => source.toUpperCase(), null);
28684
28769
  insert(_el$43, createComponent2(For, {
28685
28770
  get each() {
28686
- return groupByAccount();
28771
+ const entries = groupByAccount();
28772
+ if (!props.twoColumns) {
28773
+ return entries.map((entry) => [entry]);
28774
+ }
28775
+ const rows = [];
28776
+ for (let i = 0;i < entries.length; i += 2) {
28777
+ rows.push(entries.slice(i, i + 2));
28778
+ }
28779
+ return rows;
28687
28780
  },
28688
- children: ([accountName, accountQuotas], _accountIndex) => {
28689
- const isActive = accountName.includes("[ACTIVE]");
28690
- const cleanName = accountName.replace(" [ACTIVE]", "").trim();
28691
- return (() => {
28692
- var _el$48 = createElement("box"), _el$49 = createElement("box"), _el$50 = createElement("text");
28693
- insertNode(_el$48, _el$49);
28694
- setProp(_el$48, "flexDirection", "column");
28695
- setProp(_el$48, "flexShrink", 0);
28696
- setProp(_el$48, "marginBottom", 0);
28697
- setProp(_el$48, "paddingTop", 0);
28698
- setProp(_el$48, "paddingBottom", 0);
28699
- setProp(_el$48, "paddingLeft", 1);
28700
- setProp(_el$48, "paddingRight", 1);
28701
- setProp(_el$48, "marginLeft", 0);
28702
- setProp(_el$48, "marginRight", 0);
28703
- setProp(_el$48, "border", true);
28704
- setProp(_el$48, "borderStyle", "rounded");
28705
- setProp(_el$48, "borderColor", isActive ? "#14b8a6" : "#334155");
28706
- insertNode(_el$49, _el$50);
28707
- setProp(_el$49, "paddingBottom", 0);
28708
- setProp(_el$49, "flexShrink", 0);
28709
- setProp(_el$50, "flexShrink", 0);
28710
- setProp(_el$50, "wrapMode", "none");
28711
- insert(_el$50, isActive ? [(() => {
28712
- var _el$51 = createElement("span"), _el$52 = createTextNode(`\u25CF `);
28713
- insertNode(_el$51, _el$52);
28714
- insert(_el$51, cleanName, null);
28715
- effect((_$p) => setProp(_el$51, "style", {
28716
- fg: COLORS.accent.teal,
28717
- bold: true
28718
- }, _$p));
28719
- return _el$51;
28720
- })(), (() => {
28721
- var _el$53 = createElement("span"), _el$54 = createTextNode(` (ACTIVE)`);
28722
- insertNode(_el$53, _el$54);
28723
- effect((_$p) => setProp(_el$53, "style", {
28724
- fg: COLORS.accent.teal
28725
- }, _$p));
28726
- return _el$53;
28727
- })()] : (() => {
28728
- var _el$56 = createElement("span");
28729
- insert(_el$56, cleanName);
28730
- effect((_$p) => setProp(_el$56, "style", {
28731
- fg: COLORS.text.primary,
28732
- bold: true
28733
- }, _$p));
28734
- return _el$56;
28735
- })());
28736
- insert(_el$48, createComponent2(For, {
28737
- each: accountQuotas,
28738
- children: (quota) => {
28739
- const displayLabel = quota.label.replace(accountName, "").replace(/^[\s-]+/, "").trim();
28740
- return createComponent2(Show, {
28741
- get when() {
28742
- return !quota.error;
28743
- },
28744
- get fallback() {
28745
- return (() => {
28746
- var _el$65 = createElement("box"), _el$66 = createElement("text"), _el$67 = createTextNode(`\u2717 `), _el$68 = createTextNode(`: `);
28747
- insertNode(_el$65, _el$66);
28748
- setProp(_el$65, "paddingLeft", 1);
28749
- setProp(_el$65, "flexShrink", 0);
28750
- insertNode(_el$66, _el$67);
28751
- insertNode(_el$66, _el$68);
28752
- insert(_el$66, displayLabel, _el$68);
28753
- insert(_el$66, () => quota.error, null);
28754
- effect((_$p) => setProp(_el$66, "fg", COLORS.accent.red, _$p));
28755
- return _el$65;
28756
- })();
28757
- },
28758
- get children() {
28759
- var _el$57 = createElement("box"), _el$58 = createElement("text"), _el$59 = createElement("span"), _el$60 = createElement("span"), _el$61 = createElement("span"), _el$62 = createTextNode(` `), _el$63 = createElement("span"), _el$64 = createTextNode(` `);
28760
- insertNode(_el$57, _el$58);
28761
- setProp(_el$57, "paddingLeft", 1);
28762
- setProp(_el$57, "flexShrink", 0);
28763
- insertNode(_el$58, _el$59);
28764
- insertNode(_el$58, _el$60);
28765
- insertNode(_el$58, _el$61);
28766
- insertNode(_el$58, _el$63);
28767
- setProp(_el$58, "wrapMode", "none");
28768
- insert(_el$59, () => padRight2(displayLabel, 15));
28769
- insert(_el$60, () => renderBar(quota.used, 20));
28770
- insertNode(_el$61, _el$62);
28771
- insert(_el$61, () => padLeft2((quota.used * 100).toFixed(0) + "%", 4), null);
28772
- insertNode(_el$63, _el$64);
28773
- insert(_el$63, () => formatResetTime(quota.resetAt), null);
28774
- effect((_p$) => {
28775
- var _v$22 = {
28776
- fg: COLORS.text.secondary
28777
- }, _v$23 = {
28778
- fg: getColor(quota.used)
28779
- }, _v$24 = {
28780
- fg: COLORS.text.primary
28781
- }, _v$25 = {
28782
- fg: COLORS.text.muted
28783
- };
28784
- _v$22 !== _p$.e && (_p$.e = setProp(_el$59, "style", _v$22, _p$.e));
28785
- _v$23 !== _p$.t && (_p$.t = setProp(_el$60, "style", _v$23, _p$.t));
28786
- _v$24 !== _p$.a && (_p$.a = setProp(_el$61, "style", _v$24, _p$.a));
28787
- _v$25 !== _p$.o && (_p$.o = setProp(_el$63, "style", _v$25, _p$.o));
28788
- return _p$;
28789
- }, {
28790
- e: undefined,
28791
- t: undefined,
28792
- a: undefined,
28793
- o: undefined
28781
+ children: (row) => (() => {
28782
+ var _el$48 = createElement("box");
28783
+ insert(_el$48, createComponent2(For, {
28784
+ each: row,
28785
+ children: ([accountName, accountQuotas]) => {
28786
+ const isActive = accountName.includes("[ACTIVE]");
28787
+ const cleanName = accountName.replace(" [ACTIVE]", "").trim();
28788
+ return (() => {
28789
+ var _el$49 = createElement("box"), _el$50 = createElement("box"), _el$51 = createElement("text");
28790
+ insertNode(_el$49, _el$50);
28791
+ setProp(_el$49, "flexDirection", "column");
28792
+ setProp(_el$49, "flexShrink", 0);
28793
+ setProp(_el$49, "marginBottom", 0);
28794
+ setProp(_el$49, "paddingTop", 0);
28795
+ setProp(_el$49, "paddingBottom", 0);
28796
+ setProp(_el$49, "paddingLeft", 1);
28797
+ setProp(_el$49, "paddingRight", 1);
28798
+ setProp(_el$49, "marginLeft", 0);
28799
+ setProp(_el$49, "marginRight", 0);
28800
+ setProp(_el$49, "border", true);
28801
+ setProp(_el$49, "borderStyle", "rounded");
28802
+ setProp(_el$49, "borderColor", isActive ? "#14b8a6" : "#334155");
28803
+ insertNode(_el$50, _el$51);
28804
+ setProp(_el$50, "paddingBottom", 0);
28805
+ setProp(_el$50, "flexShrink", 0);
28806
+ setProp(_el$51, "flexShrink", 0);
28807
+ setProp(_el$51, "wrapMode", "none");
28808
+ insert(_el$51, isActive ? [(() => {
28809
+ var _el$52 = createElement("span"), _el$53 = createTextNode(`\u25CF `);
28810
+ insertNode(_el$52, _el$53);
28811
+ insert(_el$52, cleanName, null);
28812
+ effect((_$p) => setProp(_el$52, "style", {
28813
+ fg: COLORS.accent.teal,
28814
+ bold: true
28815
+ }, _$p));
28816
+ return _el$52;
28817
+ })(), (() => {
28818
+ var _el$54 = createElement("span"), _el$55 = createTextNode(` (ACTIVE)`);
28819
+ insertNode(_el$54, _el$55);
28820
+ effect((_$p) => setProp(_el$54, "style", {
28821
+ fg: COLORS.accent.teal
28822
+ }, _$p));
28823
+ return _el$54;
28824
+ })()] : (() => {
28825
+ var _el$57 = createElement("span");
28826
+ insert(_el$57, cleanName);
28827
+ effect((_$p) => setProp(_el$57, "style", {
28828
+ fg: COLORS.text.primary,
28829
+ bold: true
28830
+ }, _$p));
28831
+ return _el$57;
28832
+ })());
28833
+ insert(_el$49, createComponent2(For, {
28834
+ each: accountQuotas,
28835
+ children: (quota) => {
28836
+ const rawDisplayLabel = quota.label.replace(accountName, "").replace(/^[\s-]+/, "").trim();
28837
+ const displayLabel = rawDisplayLabel || "Status";
28838
+ const compact = Boolean(props.twoColumns);
28839
+ const labelWidth = compact ? 12 : 15;
28840
+ const barWidth = compact ? 14 : 20;
28841
+ return createComponent2(Show, {
28842
+ get when() {
28843
+ return !quota.error;
28844
+ },
28845
+ get fallback() {
28846
+ return (() => {
28847
+ var _el$66 = createElement("box"), _el$67 = createElement("text"), _el$68 = createTextNode(`\u2717 `), _el$69 = createTextNode(`: `);
28848
+ insertNode(_el$66, _el$67);
28849
+ setProp(_el$66, "paddingLeft", 1);
28850
+ setProp(_el$66, "flexShrink", 0);
28851
+ insertNode(_el$67, _el$68);
28852
+ insertNode(_el$67, _el$69);
28853
+ insert(_el$67, displayLabel, _el$69);
28854
+ insert(_el$67, () => quota.error, null);
28855
+ effect((_$p) => setProp(_el$67, "fg", COLORS.accent.red, _$p));
28856
+ return _el$66;
28857
+ })();
28858
+ },
28859
+ get children() {
28860
+ var _el$58 = createElement("box"), _el$59 = createElement("text"), _el$60 = createElement("span"), _el$61 = createElement("span"), _el$62 = createElement("span"), _el$63 = createTextNode(` `), _el$64 = createElement("span"), _el$65 = createTextNode(` `);
28861
+ insertNode(_el$58, _el$59);
28862
+ setProp(_el$58, "paddingLeft", 1);
28863
+ setProp(_el$58, "flexShrink", 0);
28864
+ insertNode(_el$59, _el$60);
28865
+ insertNode(_el$59, _el$61);
28866
+ insertNode(_el$59, _el$62);
28867
+ insertNode(_el$59, _el$64);
28868
+ setProp(_el$59, "wrapMode", "none");
28869
+ insert(_el$60, () => padRight2(displayLabel, labelWidth));
28870
+ insert(_el$61, () => renderBar(quota.used, barWidth));
28871
+ insertNode(_el$62, _el$63);
28872
+ insert(_el$62, () => padLeft2((quota.used * 100).toFixed(0) + "%", 4), null);
28873
+ insertNode(_el$64, _el$65);
28874
+ insert(_el$64, () => formatResetTime(quota.resetAt, compact), null);
28875
+ effect((_p$) => {
28876
+ var _v$24 = {
28877
+ fg: COLORS.text.secondary
28878
+ }, _v$25 = {
28879
+ fg: getColor(quota.used)
28880
+ }, _v$26 = {
28881
+ fg: COLORS.text.primary
28882
+ }, _v$27 = {
28883
+ fg: COLORS.text.muted
28884
+ };
28885
+ _v$24 !== _p$.e && (_p$.e = setProp(_el$60, "style", _v$24, _p$.e));
28886
+ _v$25 !== _p$.t && (_p$.t = setProp(_el$61, "style", _v$25, _p$.t));
28887
+ _v$26 !== _p$.a && (_p$.a = setProp(_el$62, "style", _v$26, _p$.a));
28888
+ _v$27 !== _p$.o && (_p$.o = setProp(_el$64, "style", _v$27, _p$.o));
28889
+ return _p$;
28890
+ }, {
28891
+ e: undefined,
28892
+ t: undefined,
28893
+ a: undefined,
28894
+ o: undefined
28895
+ });
28896
+ return _el$58;
28897
+ }
28794
28898
  });
28795
- return _el$57;
28796
28899
  }
28797
- });
28798
- }
28799
- }), null);
28800
- return _el$48;
28801
- })();
28802
- }
28900
+ }), null);
28901
+ effect((_$p) => setProp(_el$49, "width", props.twoColumns ? "50%" : undefined, _$p));
28902
+ return _el$49;
28903
+ })();
28904
+ }
28905
+ }));
28906
+ effect((_p$) => {
28907
+ var _v$22 = props.twoColumns ? "row" : "column", _v$23 = props.twoColumns ? 1 : 0;
28908
+ _v$22 !== _p$.e && (_p$.e = setProp(_el$48, "flexDirection", _v$22, _p$.e));
28909
+ _v$23 !== _p$.t && (_p$.t = setProp(_el$48, "gap", _v$23, _p$.t));
28910
+ return _p$;
28911
+ }, {
28912
+ e: undefined,
28913
+ t: undefined
28914
+ });
28915
+ return _el$48;
28916
+ })()
28803
28917
  }), null);
28804
28918
  effect((_$p) => setProp(_el$45, "fg", COLORS.text.primary, _$p));
28805
28919
  return _el$43;
@@ -28842,36 +28956,36 @@ function StatusBar(props) {
28842
28956
  return days.toString();
28843
28957
  };
28844
28958
  return (() => {
28845
- var _el$69 = createElement("box"), _el$70 = createElement("text"), _el$71 = createElement("span"), _el$72 = createTextNode(`\u27F3 `), _el$73 = createTextNode(` \u2502 DAYS: `), _el$75 = createElement("span"), _el$76 = createTextNode(` \u2502 `), _el$77 = createElement("span");
28846
- insertNode(_el$69, _el$70);
28847
- setProp(_el$69, "height", 1);
28848
- setProp(_el$69, "border-top", true);
28849
- setProp(_el$69, "padding-left", 1);
28850
- setProp(_el$69, "padding-right", 1);
28959
+ var _el$70 = createElement("box"), _el$71 = createElement("text"), _el$72 = createElement("span"), _el$73 = createTextNode(`\u27F3 `), _el$74 = createTextNode(` \u2502 DAYS: `), _el$76 = createElement("span"), _el$77 = createTextNode(` \u2502 `), _el$78 = createElement("span");
28851
28960
  insertNode(_el$70, _el$71);
28852
- insertNode(_el$70, _el$73);
28853
- insertNode(_el$70, _el$75);
28854
- insertNode(_el$70, _el$76);
28855
- insertNode(_el$70, _el$77);
28856
- setProp(_el$70, "wrapMode", "none");
28961
+ setProp(_el$70, "height", 1);
28962
+ setProp(_el$70, "border-top", true);
28963
+ setProp(_el$70, "padding-left", 1);
28964
+ setProp(_el$70, "padding-right", 1);
28857
28965
  insertNode(_el$71, _el$72);
28858
- insert(_el$71, () => formatTime(props.lastUpdate), null);
28859
- insert(_el$75, daysLabel);
28860
- insertNode(_el$77, createTextNode(`TAB:PANEL \u2191\u2193:SCROLL \u2190\u2192:DAYS t:TODAY w:WEEK m:MONTH a:ALL HOME:RESET ^C:EXIT`));
28966
+ insertNode(_el$71, _el$74);
28967
+ insertNode(_el$71, _el$76);
28968
+ insertNode(_el$71, _el$77);
28969
+ insertNode(_el$71, _el$78);
28970
+ setProp(_el$71, "wrapMode", "none");
28971
+ insertNode(_el$72, _el$73);
28972
+ insert(_el$72, () => formatTime(props.lastUpdate), null);
28973
+ insert(_el$76, daysLabel);
28974
+ insertNode(_el$78, createTextNode(`TAB:PANEL \u2191\u2193:SCROLL \u2190\u2192:DAYS t:TODAY w:WEEK m:MONTH a:ALL HOME:RESET ^C:EXIT`));
28861
28975
  effect((_p$) => {
28862
- var _v$26 = COLORS.border, _v$27 = COLORS.bg.accent, _v$28 = COLORS.text.secondary, _v$29 = {
28976
+ var _v$28 = COLORS.border, _v$29 = COLORS.bg.accent, _v$30 = COLORS.text.secondary, _v$31 = {
28863
28977
  fg: COLORS.accent.teal
28864
- }, _v$30 = {
28978
+ }, _v$32 = {
28865
28979
  fg: COLORS.accent.teal
28866
- }, _v$31 = {
28980
+ }, _v$33 = {
28867
28981
  fg: COLORS.text.muted
28868
28982
  };
28869
- _v$26 !== _p$.e && (_p$.e = setProp(_el$69, "border-color", _v$26, _p$.e));
28870
- _v$27 !== _p$.t && (_p$.t = setProp(_el$69, "background-color", _v$27, _p$.t));
28871
- _v$28 !== _p$.a && (_p$.a = setProp(_el$70, "fg", _v$28, _p$.a));
28872
- _v$29 !== _p$.o && (_p$.o = setProp(_el$71, "style", _v$29, _p$.o));
28873
- _v$30 !== _p$.i && (_p$.i = setProp(_el$75, "style", _v$30, _p$.i));
28874
- _v$31 !== _p$.n && (_p$.n = setProp(_el$77, "style", _v$31, _p$.n));
28983
+ _v$28 !== _p$.e && (_p$.e = setProp(_el$70, "border-color", _v$28, _p$.e));
28984
+ _v$29 !== _p$.t && (_p$.t = setProp(_el$70, "background-color", _v$29, _p$.t));
28985
+ _v$30 !== _p$.a && (_p$.a = setProp(_el$71, "fg", _v$30, _p$.a));
28986
+ _v$31 !== _p$.o && (_p$.o = setProp(_el$72, "style", _v$31, _p$.o));
28987
+ _v$32 !== _p$.i && (_p$.i = setProp(_el$76, "style", _v$32, _p$.i));
28988
+ _v$33 !== _p$.n && (_p$.n = setProp(_el$78, "style", _v$33, _p$.n));
28875
28989
  return _p$;
28876
28990
  }, {
28877
28991
  e: undefined,
@@ -28881,7 +28995,7 @@ function StatusBar(props) {
28881
28995
  i: undefined,
28882
28996
  n: undefined
28883
28997
  });
28884
- return _el$69;
28998
+ return _el$70;
28885
28999
  })();
28886
29000
  }
28887
29001
  function Dashboard(props) {
@@ -29037,16 +29151,17 @@ function Dashboard(props) {
29037
29151
  }
29038
29152
  });
29039
29153
  const sideBySide = () => dimensions().width >= 168;
29154
+ const quotaTwoColumns = () => dimensions().width >= 150;
29040
29155
  return (() => {
29041
- var _el$79 = createElement("box"), _el$80 = createElement("box");
29042
- insertNode(_el$79, _el$80);
29043
- setProp(_el$79, "width", "100%");
29044
- setProp(_el$79, "height", "100%");
29045
- setProp(_el$79, "flex-direction", "column");
29046
- setProp(_el$80, "flex-grow", 1);
29047
- setProp(_el$80, "gap", 0);
29048
- setProp(_el$80, "padding", 0);
29049
- insert(_el$80, createComponent2(UsageTable, {
29156
+ var _el$80 = createElement("box"), _el$81 = createElement("box");
29157
+ insertNode(_el$80, _el$81);
29158
+ setProp(_el$80, "width", "100%");
29159
+ setProp(_el$80, "height", "100%");
29160
+ setProp(_el$80, "flex-direction", "column");
29161
+ setProp(_el$81, "flex-grow", 1);
29162
+ setProp(_el$81, "gap", 0);
29163
+ setProp(_el$81, "padding", 0);
29164
+ insert(_el$81, createComponent2(UsageTable, {
29050
29165
  get stats() {
29051
29166
  return displayedStats();
29052
29167
  },
@@ -29069,10 +29184,10 @@ function Dashboard(props) {
29069
29184
  return selectedPanel() === "usage";
29070
29185
  },
29071
29186
  get width() {
29072
- return sideBySide() ? undefined : "100%";
29187
+ return sideBySide() ? "42%" : "100%";
29073
29188
  }
29074
29189
  }), null);
29075
- insert(_el$80, createComponent2(QuotaPanel, {
29190
+ insert(_el$81, createComponent2(QuotaPanel, {
29076
29191
  get quotas() {
29077
29192
  return quotas();
29078
29193
  },
@@ -29080,10 +29195,13 @@ function Dashboard(props) {
29080
29195
  return selectedPanel() === "quota";
29081
29196
  },
29082
29197
  get width() {
29083
- return sideBySide() ? undefined : "100%";
29198
+ return sideBySide() ? "58%" : "100%";
29199
+ },
29200
+ get twoColumns() {
29201
+ return quotaTwoColumns();
29084
29202
  }
29085
29203
  }), null);
29086
- insert(_el$79, createComponent2(StatusBar, {
29204
+ insert(_el$80, createComponent2(StatusBar, {
29087
29205
  get daysFilter() {
29088
29206
  return daysFilter();
29089
29207
  },
@@ -29092,15 +29210,15 @@ function Dashboard(props) {
29092
29210
  }
29093
29211
  }), null);
29094
29212
  effect((_p$) => {
29095
- var _v$32 = COLORS.bg.primary, _v$33 = sideBySide() ? "row" : "column";
29096
- _v$32 !== _p$.e && (_p$.e = setProp(_el$79, "background-color", _v$32, _p$.e));
29097
- _v$33 !== _p$.t && (_p$.t = setProp(_el$80, "flex-direction", _v$33, _p$.t));
29213
+ var _v$34 = COLORS.bg.primary, _v$35 = sideBySide() ? "row" : "column";
29214
+ _v$34 !== _p$.e && (_p$.e = setProp(_el$80, "background-color", _v$34, _p$.e));
29215
+ _v$35 !== _p$.t && (_p$.t = setProp(_el$81, "flex-direction", _v$35, _p$.t));
29098
29216
  return _p$;
29099
29217
  }, {
29100
29218
  e: undefined,
29101
29219
  t: undefined
29102
29220
  });
29103
- return _el$79;
29221
+ return _el$80;
29104
29222
  })();
29105
29223
  }
29106
29224
  async function runSolidDashboard(options) {
@@ -29245,4 +29363,4 @@ async function main2() {
29245
29363
  }
29246
29364
  main2().catch(console.error);
29247
29365
 
29248
- //# debugId=71CC1B06755E934764756E2164756E21
29366
+ //# debugId=7C5099D0AD55F0E564756E2164756E21