@codexhost/cli-darwin-x64 0.2.1 → 0.2.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/README.md +3 -4
- package/app/codexhost-distribution.json +1 -1
- package/app/host-runtime.mjs +510 -294
- package/app/renderer-extension.js +365 -61
- package/bin/codexhost +0 -0
- package/libexec/codexhost-shim +0 -0
- package/libexec/codexhost-updater +0 -0
- package/package.json +1 -1
|
@@ -16429,30 +16429,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
16429
16429
|
function formatRendererCreditsPercent(value) {
|
|
16430
16430
|
return `${decimal(value, 1)}%`;
|
|
16431
16431
|
}
|
|
16432
|
-
function rendererUsageTriggerMaxWidth(
|
|
16433
|
-
return
|
|
16434
|
-
}
|
|
16435
|
-
function formatRendererCreditsReset(value) {
|
|
16436
|
-
const date5 = new Date(value);
|
|
16437
|
-
if (Number.isNaN(date5.getTime())) return value;
|
|
16438
|
-
return date5.toLocaleString(void 0, {
|
|
16439
|
-
month: "long",
|
|
16440
|
-
day: "numeric",
|
|
16441
|
-
hour: "numeric",
|
|
16442
|
-
minute: "2-digit"
|
|
16443
|
-
});
|
|
16444
|
-
}
|
|
16445
|
-
function creditsPeriodLabel(periodType) {
|
|
16446
|
-
if (periodType === "weekly") return "Weekly limit";
|
|
16447
|
-
if (periodType === "monthly") return "Monthly limit";
|
|
16448
|
-
return "Account limit";
|
|
16449
|
-
}
|
|
16450
|
-
function productLabel(product) {
|
|
16451
|
-
if (product === "GrokBuild") return "Build";
|
|
16452
|
-
if (product === "GrokChat") return "Chat";
|
|
16453
|
-
if (product === "GrokImagine") return "Imagine";
|
|
16454
|
-
if (product === "GrokVoice") return "Voice";
|
|
16455
|
-
return product;
|
|
16432
|
+
function rendererUsageTriggerMaxWidth() {
|
|
16433
|
+
return "min(180px, 30vw)";
|
|
16456
16434
|
}
|
|
16457
16435
|
function addDetailRow(parent, label, value) {
|
|
16458
16436
|
const row = document.createElement("div");
|
|
@@ -16470,30 +16448,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
16470
16448
|
row.append(labelElement, valueElement);
|
|
16471
16449
|
parent.append(row);
|
|
16472
16450
|
}
|
|
16473
|
-
function renderDetails(popover, usage
|
|
16451
|
+
function renderDetails(popover, usage) {
|
|
16474
16452
|
popover.replaceChildren();
|
|
16475
16453
|
const heading = document.createElement("div");
|
|
16476
16454
|
heading.textContent = "Usage";
|
|
16477
16455
|
heading.style.fontWeight = "600";
|
|
16478
16456
|
heading.style.marginBottom = "6px";
|
|
16479
16457
|
popover.append(heading);
|
|
16480
|
-
if (accountCredits) {
|
|
16481
|
-
addDetailRow(
|
|
16482
|
-
popover,
|
|
16483
|
-
creditsPeriodLabel(accountCredits.periodType),
|
|
16484
|
-
formatRendererCreditsPercent(accountCredits.usedPercent)
|
|
16485
|
-
);
|
|
16486
|
-
if (accountCredits.resetsAt) {
|
|
16487
|
-
addDetailRow(popover, "Resets", formatRendererCreditsReset(accountCredits.resetsAt));
|
|
16488
|
-
}
|
|
16489
|
-
for (const product of accountCredits.productUsage ?? []) {
|
|
16490
|
-
addDetailRow(
|
|
16491
|
-
popover,
|
|
16492
|
-
productLabel(product.product),
|
|
16493
|
-
formatRendererCreditsPercent(product.usagePercent)
|
|
16494
|
-
);
|
|
16495
|
-
}
|
|
16496
|
-
}
|
|
16497
16458
|
if (usage?.contextUsedTokens !== void 0 && usage.contextWindowTokens !== void 0) {
|
|
16498
16459
|
const contextPercent = usage.contextWindowTokens > 0 ? usage.contextUsedTokens / usage.contextWindowTokens * 100 : null;
|
|
16499
16460
|
addDetailRow(
|
|
@@ -16586,7 +16547,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
16586
16547
|
trigger.style.display = "inline-flex";
|
|
16587
16548
|
trigger.style.alignItems = "center";
|
|
16588
16549
|
trigger.style.width = "fit-content";
|
|
16589
|
-
trigger.style.maxWidth = rendererUsageTriggerMaxWidth(
|
|
16550
|
+
trigger.style.maxWidth = rendererUsageTriggerMaxWidth();
|
|
16590
16551
|
trigger.style.height = "24px";
|
|
16591
16552
|
trigger.style.padding = "0 4px";
|
|
16592
16553
|
trigger.style.borderRadius = "9999px";
|
|
@@ -16689,33 +16650,281 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
16689
16650
|
document.body.append(popover);
|
|
16690
16651
|
return control;
|
|
16691
16652
|
}
|
|
16692
|
-
function renderRendererUsageControl(control, usage
|
|
16653
|
+
function renderRendererUsageControl(control, usage) {
|
|
16693
16654
|
const cacheHitRatePercent = usage?.cacheHitRatePercent;
|
|
16694
16655
|
const outputTokensPerSecond = usage?.outputTokensPerSecond;
|
|
16695
16656
|
const totalCostUsd = usage?.totalCostUsd;
|
|
16696
16657
|
const hasCacheHitRate = cacheHitRatePercent !== void 0;
|
|
16697
16658
|
const hasOutputSpeed = outputTokensPerSecond !== void 0;
|
|
16698
16659
|
const hasCost = totalCostUsd !== void 0;
|
|
16699
|
-
const
|
|
16700
|
-
const visible = hasCacheHitRate || hasOutputSpeed || hasCost || hasCredits;
|
|
16660
|
+
const visible = hasCacheHitRate || hasOutputSpeed || hasCost;
|
|
16701
16661
|
control.root.style.display = visible ? "inline-flex" : "none";
|
|
16702
16662
|
if (!visible) {
|
|
16703
16663
|
closePopover(control);
|
|
16704
16664
|
return false;
|
|
16705
16665
|
}
|
|
16706
16666
|
const summary = [
|
|
16707
|
-
accountCredits ? `${creditsPeriodLabel(accountCredits.periodType)} ${formatRendererCreditsPercent(accountCredits.usedPercent)}` : null,
|
|
16708
16667
|
cacheHitRatePercent !== void 0 ? formatRendererCacheHitRate(cacheHitRatePercent) : null,
|
|
16709
16668
|
outputTokensPerSecond !== void 0 ? formatRendererTokenRate(outputTokensPerSecond) : null,
|
|
16710
16669
|
totalCostUsd !== void 0 ? formatRendererCost(totalCostUsd) : null
|
|
16711
16670
|
].filter((value) => value !== null);
|
|
16712
16671
|
const compactSummary = summary.join(" \xB7 ");
|
|
16713
16672
|
const accessibleSummary = `Thread Usage: ${compactSummary}`;
|
|
16714
|
-
control.trigger.style.maxWidth = rendererUsageTriggerMaxWidth(
|
|
16673
|
+
control.trigger.style.maxWidth = rendererUsageTriggerMaxWidth();
|
|
16715
16674
|
control.trigger.setAttribute("aria-label", accessibleSummary);
|
|
16716
16675
|
control.trigger.title = accessibleSummary;
|
|
16717
16676
|
control.label.textContent = compactSummary;
|
|
16718
|
-
renderDetails(control.popover, usage
|
|
16677
|
+
renderDetails(control.popover, usage);
|
|
16678
|
+
return true;
|
|
16679
|
+
}
|
|
16680
|
+
|
|
16681
|
+
// src/renderer-credits-control.ts
|
|
16682
|
+
function rendererCreditsTone(usedPercent) {
|
|
16683
|
+
if (usedPercent >= 90) return "hot";
|
|
16684
|
+
if (usedPercent >= 70) return "warn";
|
|
16685
|
+
return "ok";
|
|
16686
|
+
}
|
|
16687
|
+
function formatRendererCreditsReset(value) {
|
|
16688
|
+
const date5 = new Date(value);
|
|
16689
|
+
if (Number.isNaN(date5.getTime())) return value;
|
|
16690
|
+
return date5.toLocaleString(void 0, {
|
|
16691
|
+
month: "long",
|
|
16692
|
+
day: "numeric",
|
|
16693
|
+
hour: "numeric",
|
|
16694
|
+
minute: "2-digit"
|
|
16695
|
+
});
|
|
16696
|
+
}
|
|
16697
|
+
function creditsPeriodLabel(periodType) {
|
|
16698
|
+
if (periodType === "weekly") return "Weekly limit";
|
|
16699
|
+
if (periodType === "monthly") return "Monthly limit";
|
|
16700
|
+
return "Account limit";
|
|
16701
|
+
}
|
|
16702
|
+
function productLabel(product) {
|
|
16703
|
+
if (product === "GrokBuild") return "Build";
|
|
16704
|
+
if (product === "GrokChat") return "Chat";
|
|
16705
|
+
if (product === "GrokImagine") return "Imagine";
|
|
16706
|
+
if (product === "GrokVoice") return "Voice";
|
|
16707
|
+
return product;
|
|
16708
|
+
}
|
|
16709
|
+
function toneColor(tone) {
|
|
16710
|
+
if (tone === "hot") return "#c45c4a";
|
|
16711
|
+
if (tone === "warn") return "#c9a227";
|
|
16712
|
+
return "#3d9a64";
|
|
16713
|
+
}
|
|
16714
|
+
function addDetailRow2(parent, label, value) {
|
|
16715
|
+
const row = document.createElement("div");
|
|
16716
|
+
row.style.display = "grid";
|
|
16717
|
+
row.style.gridTemplateColumns = "minmax(0, 1fr) auto";
|
|
16718
|
+
row.style.gap = "20px";
|
|
16719
|
+
row.style.padding = "4px 0";
|
|
16720
|
+
const labelElement = document.createElement("span");
|
|
16721
|
+
labelElement.textContent = label;
|
|
16722
|
+
labelElement.style.color = "color-mix(in srgb, currentColor 68%, transparent)";
|
|
16723
|
+
const valueElement = document.createElement("span");
|
|
16724
|
+
valueElement.textContent = value;
|
|
16725
|
+
valueElement.style.fontVariantNumeric = "tabular-nums";
|
|
16726
|
+
valueElement.style.textAlign = "right";
|
|
16727
|
+
row.append(labelElement, valueElement);
|
|
16728
|
+
parent.append(row);
|
|
16729
|
+
}
|
|
16730
|
+
function renderDetails2(popover, credits) {
|
|
16731
|
+
popover.replaceChildren();
|
|
16732
|
+
const heading = document.createElement("div");
|
|
16733
|
+
heading.textContent = creditsPeriodLabel(credits.periodType);
|
|
16734
|
+
heading.style.fontWeight = "600";
|
|
16735
|
+
heading.style.marginBottom = "6px";
|
|
16736
|
+
popover.append(heading);
|
|
16737
|
+
addDetailRow2(popover, "Used", formatRendererCreditsPercent(credits.usedPercent));
|
|
16738
|
+
if (credits.resetsAt) {
|
|
16739
|
+
addDetailRow2(popover, "Resets", formatRendererCreditsReset(credits.resetsAt));
|
|
16740
|
+
}
|
|
16741
|
+
for (const product of credits.productUsage ?? []) {
|
|
16742
|
+
addDetailRow2(
|
|
16743
|
+
popover,
|
|
16744
|
+
productLabel(product.product),
|
|
16745
|
+
formatRendererCreditsPercent(product.usagePercent)
|
|
16746
|
+
);
|
|
16747
|
+
}
|
|
16748
|
+
}
|
|
16749
|
+
function popoverIsOpen2(popover) {
|
|
16750
|
+
try {
|
|
16751
|
+
return popover.matches(":popover-open");
|
|
16752
|
+
} catch {
|
|
16753
|
+
return !popover.hidden;
|
|
16754
|
+
}
|
|
16755
|
+
}
|
|
16756
|
+
function positionPopover2(control) {
|
|
16757
|
+
const triggerRect = control.trigger.getBoundingClientRect();
|
|
16758
|
+
const width = Math.min(280, Math.max(220, window.innerWidth - 24));
|
|
16759
|
+
const left = Math.max(12, Math.min(triggerRect.left, window.innerWidth - width - 12));
|
|
16760
|
+
control.popover.style.width = `${width}px`;
|
|
16761
|
+
control.popover.style.left = `${left}px`;
|
|
16762
|
+
control.popover.style.right = "auto";
|
|
16763
|
+
control.popover.style.top = "auto";
|
|
16764
|
+
control.popover.style.bottom = `${Math.max(12, window.innerHeight - triggerRect.top + 8)}px`;
|
|
16765
|
+
}
|
|
16766
|
+
function closePopover2(control) {
|
|
16767
|
+
if (popoverIsOpen2(control.popover) && typeof control.popover.hidePopover === "function") {
|
|
16768
|
+
control.popover.hidePopover();
|
|
16769
|
+
}
|
|
16770
|
+
control.popover.hidden = true;
|
|
16771
|
+
control.trigger.setAttribute("aria-expanded", "false");
|
|
16772
|
+
}
|
|
16773
|
+
function openPopover2(control) {
|
|
16774
|
+
positionPopover2(control);
|
|
16775
|
+
control.popover.hidden = false;
|
|
16776
|
+
if (typeof control.popover.showPopover === "function" && !popoverIsOpen2(control.popover)) {
|
|
16777
|
+
control.popover.showPopover();
|
|
16778
|
+
}
|
|
16779
|
+
control.trigger.setAttribute("aria-expanded", "true");
|
|
16780
|
+
}
|
|
16781
|
+
function togglePopover2(control) {
|
|
16782
|
+
if (control.trigger.getAttribute("aria-expanded") === "true") closePopover2(control);
|
|
16783
|
+
else openPopover2(control);
|
|
16784
|
+
}
|
|
16785
|
+
function mountRendererCreditsControl(composerId, nativeModelClassName) {
|
|
16786
|
+
const root = document.createElement("div");
|
|
16787
|
+
root.dataset.codexhostCreditsControl = composerId;
|
|
16788
|
+
root.className = "relative min-w-0";
|
|
16789
|
+
root.style.display = "none";
|
|
16790
|
+
const trigger = document.createElement("button");
|
|
16791
|
+
const syncNativeModelClassName = (className) => {
|
|
16792
|
+
trigger.className = className?.trim() || RENDERER_MODEL_TRIGGER_FALLBACK_CLASSES;
|
|
16793
|
+
};
|
|
16794
|
+
syncNativeModelClassName(nativeModelClassName);
|
|
16795
|
+
trigger.type = "button";
|
|
16796
|
+
trigger.setAttribute("aria-haspopup", "dialog");
|
|
16797
|
+
trigger.setAttribute("aria-expanded", "false");
|
|
16798
|
+
trigger.setAttribute("aria-label", "Account limit");
|
|
16799
|
+
trigger.title = "Account limit";
|
|
16800
|
+
trigger.style.display = "inline-flex";
|
|
16801
|
+
trigger.style.alignItems = "center";
|
|
16802
|
+
trigger.style.gap = "5px";
|
|
16803
|
+
trigger.style.width = "fit-content";
|
|
16804
|
+
trigger.style.maxWidth = "min(72px, 18vw)";
|
|
16805
|
+
trigger.style.height = "24px";
|
|
16806
|
+
trigger.style.padding = "0 6px";
|
|
16807
|
+
trigger.style.borderRadius = "9999px";
|
|
16808
|
+
trigger.style.fontSize = "12px";
|
|
16809
|
+
trigger.style.lineHeight = "16px";
|
|
16810
|
+
trigger.style.fontVariantNumeric = "tabular-nums";
|
|
16811
|
+
trigger.style.letterSpacing = "0";
|
|
16812
|
+
trigger.style.whiteSpace = "nowrap";
|
|
16813
|
+
trigger.style.cursor = "pointer";
|
|
16814
|
+
const dot = document.createElement("span");
|
|
16815
|
+
dot.dataset.codexhostCreditsDot = "";
|
|
16816
|
+
dot.setAttribute("aria-hidden", "true");
|
|
16817
|
+
dot.style.display = "inline-block";
|
|
16818
|
+
dot.style.width = "7px";
|
|
16819
|
+
dot.style.height = "7px";
|
|
16820
|
+
dot.style.borderRadius = "9999px";
|
|
16821
|
+
dot.style.flex = "0 0 auto";
|
|
16822
|
+
const label = document.createElement("span");
|
|
16823
|
+
label.dataset.codexhostCreditsLabel = "";
|
|
16824
|
+
label.style.display = "inline-block";
|
|
16825
|
+
label.style.maxWidth = "100%";
|
|
16826
|
+
label.style.overflow = "hidden";
|
|
16827
|
+
label.style.textOverflow = "ellipsis";
|
|
16828
|
+
label.style.whiteSpace = "nowrap";
|
|
16829
|
+
trigger.append(dot, label);
|
|
16830
|
+
const popover = document.createElement("div");
|
|
16831
|
+
popover.id = `${composerId}-credits-popover`;
|
|
16832
|
+
popover.setAttribute("role", "dialog");
|
|
16833
|
+
popover.setAttribute("aria-label", "Account limit details");
|
|
16834
|
+
popover.setAttribute("popover", "auto");
|
|
16835
|
+
popover.hidden = typeof popover.showPopover !== "function";
|
|
16836
|
+
popover.style.position = "fixed";
|
|
16837
|
+
popover.style.inset = "auto";
|
|
16838
|
+
popover.style.width = "240px";
|
|
16839
|
+
popover.style.maxWidth = "min(280px, calc(100vw - 24px))";
|
|
16840
|
+
popover.style.padding = "10px 12px";
|
|
16841
|
+
popover.style.border = "1px solid rgba(127, 127, 127, 0.35)";
|
|
16842
|
+
popover.style.borderRadius = "6px";
|
|
16843
|
+
popover.style.background = "Canvas";
|
|
16844
|
+
popover.style.color = "CanvasText";
|
|
16845
|
+
popover.style.boxShadow = "0 8px 24px rgba(0, 0, 0, 0.28)";
|
|
16846
|
+
popover.style.font = "13px/1.35 system-ui, sans-serif";
|
|
16847
|
+
popover.style.letterSpacing = "0";
|
|
16848
|
+
popover.style.zIndex = "2147483647";
|
|
16849
|
+
trigger.setAttribute("aria-controls", popover.id);
|
|
16850
|
+
let placementReference = null;
|
|
16851
|
+
const control = {
|
|
16852
|
+
root,
|
|
16853
|
+
trigger,
|
|
16854
|
+
popover,
|
|
16855
|
+
anchor: null,
|
|
16856
|
+
syncNativeModelClassName,
|
|
16857
|
+
dispose() {
|
|
16858
|
+
closePopover2(control);
|
|
16859
|
+
if (closeTimer !== null) window.clearTimeout(closeTimer);
|
|
16860
|
+
root.remove();
|
|
16861
|
+
popover.remove();
|
|
16862
|
+
placementReference = null;
|
|
16863
|
+
},
|
|
16864
|
+
place(anchor) {
|
|
16865
|
+
if (!anchor?.parentElement) return false;
|
|
16866
|
+
const parent = anchor.parentElement;
|
|
16867
|
+
const next = anchor.nextElementSibling;
|
|
16868
|
+
if (control.anchor === anchor && placementReference === anchor && root.parentElement === parent && root.previousElementSibling === anchor) {
|
|
16869
|
+
return true;
|
|
16870
|
+
}
|
|
16871
|
+
control.anchor = anchor;
|
|
16872
|
+
placementReference = anchor;
|
|
16873
|
+
if (next && next !== root) parent.insertBefore(root, next);
|
|
16874
|
+
else if (next !== root) parent.append(root);
|
|
16875
|
+
return true;
|
|
16876
|
+
}
|
|
16877
|
+
};
|
|
16878
|
+
let closeTimer = null;
|
|
16879
|
+
const cancelClose = () => {
|
|
16880
|
+
if (closeTimer === null) return;
|
|
16881
|
+
window.clearTimeout(closeTimer);
|
|
16882
|
+
closeTimer = null;
|
|
16883
|
+
};
|
|
16884
|
+
const scheduleClose = () => {
|
|
16885
|
+
cancelClose();
|
|
16886
|
+
closeTimer = window.setTimeout(() => {
|
|
16887
|
+
closeTimer = null;
|
|
16888
|
+
if (!trigger.matches(":hover") && !popover.matches(":hover")) closePopover2(control);
|
|
16889
|
+
}, 140);
|
|
16890
|
+
};
|
|
16891
|
+
trigger.addEventListener("click", () => togglePopover2(control));
|
|
16892
|
+
trigger.addEventListener("pointerenter", () => {
|
|
16893
|
+
cancelClose();
|
|
16894
|
+
openPopover2(control);
|
|
16895
|
+
});
|
|
16896
|
+
trigger.addEventListener("pointerleave", scheduleClose);
|
|
16897
|
+
trigger.addEventListener("focus", () => {
|
|
16898
|
+
cancelClose();
|
|
16899
|
+
openPopover2(control);
|
|
16900
|
+
});
|
|
16901
|
+
trigger.addEventListener("blur", scheduleClose);
|
|
16902
|
+
popover.addEventListener("pointerenter", cancelClose);
|
|
16903
|
+
popover.addEventListener("pointerleave", scheduleClose);
|
|
16904
|
+
popover.addEventListener("toggle", () => {
|
|
16905
|
+
trigger.setAttribute("aria-expanded", String(popoverIsOpen2(popover)));
|
|
16906
|
+
});
|
|
16907
|
+
root.append(trigger);
|
|
16908
|
+
document.body.append(popover);
|
|
16909
|
+
return control;
|
|
16910
|
+
}
|
|
16911
|
+
function renderRendererCreditsControl(control, accountCredits) {
|
|
16912
|
+
if (accountCredits === null) {
|
|
16913
|
+
control.root.style.display = "none";
|
|
16914
|
+
closePopover2(control);
|
|
16915
|
+
return false;
|
|
16916
|
+
}
|
|
16917
|
+
const percent = formatRendererCreditsPercent(accountCredits.usedPercent);
|
|
16918
|
+
const title = `${creditsPeriodLabel(accountCredits.periodType)} ${percent}`;
|
|
16919
|
+
const tone = rendererCreditsTone(accountCredits.usedPercent);
|
|
16920
|
+
const dot = control.trigger.querySelector("[data-codexhost-credits-dot]");
|
|
16921
|
+
const label = control.trigger.querySelector("[data-codexhost-credits-label]");
|
|
16922
|
+
if (dot) dot.style.background = toneColor(tone);
|
|
16923
|
+
if (label) label.textContent = percent;
|
|
16924
|
+
control.root.style.display = "inline-flex";
|
|
16925
|
+
control.trigger.setAttribute("aria-label", title);
|
|
16926
|
+
control.trigger.title = title;
|
|
16927
|
+
renderDetails2(control.popover, accountCredits);
|
|
16719
16928
|
return true;
|
|
16720
16929
|
}
|
|
16721
16930
|
|
|
@@ -16830,7 +17039,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
16830
17039
|
}
|
|
16831
17040
|
var contextUsageDescriptionPattern = /(context|token|上下文|令牌)/iu;
|
|
16832
17041
|
function isNativeContextUsageControlCandidate(element) {
|
|
16833
|
-
if (element.hasAttribute("data-codexhost-usage-control"))
|
|
17042
|
+
if (element.hasAttribute("data-codexhost-usage-control") || element.hasAttribute("data-codexhost-credits-control")) {
|
|
17043
|
+
return false;
|
|
17044
|
+
}
|
|
16834
17045
|
const description = [
|
|
16835
17046
|
element.getAttribute("aria-label"),
|
|
16836
17047
|
element.getAttribute("title"),
|
|
@@ -16863,6 +17074,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
16863
17074
|
const candidate = nativeModelControlForComposer(control.composer);
|
|
16864
17075
|
if (!candidate) {
|
|
16865
17076
|
control.usage.syncNativeModelClassName();
|
|
17077
|
+
control.credits.syncNativeModelClassName();
|
|
16866
17078
|
return;
|
|
16867
17079
|
}
|
|
16868
17080
|
if (candidate !== control.nativeModelControl?.element) {
|
|
@@ -16871,6 +17083,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
16871
17083
|
syncRendererModelTriggerClass(control.modelPicker, candidate.className);
|
|
16872
17084
|
}
|
|
16873
17085
|
control.usage.syncNativeModelClassName(candidate.className);
|
|
17086
|
+
control.credits.syncNativeModelClassName(candidate.className);
|
|
16874
17087
|
}
|
|
16875
17088
|
function usagePlacementAnchor(control) {
|
|
16876
17089
|
const context = nativeContextUsageControlForComposer(control.composer);
|
|
@@ -16880,14 +17093,44 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
16880
17093
|
const native = control.nativeModelControl?.element;
|
|
16881
17094
|
return native?.parentElement ? native : null;
|
|
16882
17095
|
}
|
|
17096
|
+
function firstMaterialChild(parent) {
|
|
17097
|
+
for (const child of parent.children) {
|
|
17098
|
+
if (typeof child.hasAttribute !== "function") continue;
|
|
17099
|
+
const element = child;
|
|
17100
|
+
if (element.hasAttribute("data-codexhost-credits-control")) continue;
|
|
17101
|
+
return element;
|
|
17102
|
+
}
|
|
17103
|
+
return null;
|
|
17104
|
+
}
|
|
17105
|
+
function creditsPlacementAnchor(composer, usageRoot) {
|
|
17106
|
+
let current = usageRoot;
|
|
17107
|
+
while (current && current !== composer) {
|
|
17108
|
+
const parent = current.parentElement;
|
|
17109
|
+
if (!parent) break;
|
|
17110
|
+
const first = firstMaterialChild(parent);
|
|
17111
|
+
if (first && first !== current && !first.contains(usageRoot)) return first;
|
|
17112
|
+
if (parent === composer) break;
|
|
17113
|
+
current = parent;
|
|
17114
|
+
}
|
|
17115
|
+
return null;
|
|
17116
|
+
}
|
|
16883
17117
|
function refreshUsagePlacement(control) {
|
|
16884
17118
|
const anchor = usagePlacementAnchor(control);
|
|
16885
17119
|
if (!anchor) {
|
|
16886
17120
|
if (control.usage.anchor) control.usage.root.remove();
|
|
16887
17121
|
control.usage.anchor = null;
|
|
17122
|
+
if (control.credits.anchor) control.credits.root.remove();
|
|
17123
|
+
control.credits.anchor = null;
|
|
16888
17124
|
return;
|
|
16889
17125
|
}
|
|
16890
17126
|
control.usage.place(anchor);
|
|
17127
|
+
const leading = creditsPlacementAnchor(control.composer, control.usage.root);
|
|
17128
|
+
if (!leading) {
|
|
17129
|
+
if (control.credits.anchor) control.credits.root.remove();
|
|
17130
|
+
control.credits.anchor = null;
|
|
17131
|
+
return;
|
|
17132
|
+
}
|
|
17133
|
+
control.credits.place(leading);
|
|
16891
17134
|
}
|
|
16892
17135
|
function refreshNativePermissionModeControl(control) {
|
|
16893
17136
|
const semanticCandidate = semanticNativePermissionModeControlForComposer(control.composer);
|
|
@@ -16942,6 +17185,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
16942
17185
|
onSelectPermissionMode
|
|
16943
17186
|
);
|
|
16944
17187
|
const usage = mountRendererUsageControl(composerId, nativeModelControl?.element.className);
|
|
17188
|
+
const credits = mountRendererCreditsControl(composerId, nativeModelControl?.element.className);
|
|
16945
17189
|
const permissionParent = nativePermissionModeControl?.element.parentElement;
|
|
16946
17190
|
if (permissionParent && nativePermissionModeControl && nativePermissionModeControlVerified) {
|
|
16947
17191
|
permissionParent.insertBefore(permissionModePicker.root, nativePermissionModeControl.element);
|
|
@@ -16964,6 +17208,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
16964
17208
|
nativeModelControl,
|
|
16965
17209
|
nativePermissionModeControl,
|
|
16966
17210
|
nativePermissionModeControlVerified,
|
|
17211
|
+
credits,
|
|
16967
17212
|
usage,
|
|
16968
17213
|
sendButton,
|
|
16969
17214
|
sendDisabledBeforeSwitch: null
|
|
@@ -17008,7 +17253,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
17008
17253
|
permissionModeView,
|
|
17009
17254
|
permissionModeVisible
|
|
17010
17255
|
);
|
|
17011
|
-
renderRendererUsageControl(control.usage, usage
|
|
17256
|
+
renderRendererUsageControl(control.usage, usage);
|
|
17257
|
+
renderRendererCreditsControl(control.credits, accountCredits);
|
|
17012
17258
|
}
|
|
17013
17259
|
function disposeComposerAgentControl(control) {
|
|
17014
17260
|
if (control.sendDisabledBeforeSwitch !== null) {
|
|
@@ -17016,6 +17262,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
17016
17262
|
}
|
|
17017
17263
|
restoreNativeControl(control.nativeModelControl);
|
|
17018
17264
|
restoreNativeControl(control.nativePermissionModeControl);
|
|
17265
|
+
control.credits.dispose();
|
|
17019
17266
|
control.usage.dispose();
|
|
17020
17267
|
control.permissionModePicker.dispose();
|
|
17021
17268
|
control.modelPicker.dispose();
|
|
@@ -18610,9 +18857,12 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
18610
18857
|
|
|
18611
18858
|
// src/settings/release-notes.ts
|
|
18612
18859
|
var HEADING_PATTERN = /^(#{1,6})[ \t]+(.+?)\s*$/u;
|
|
18860
|
+
var BLOCKQUOTE_PATTERN = /^>[ \t]?(.*?)\s*$/u;
|
|
18613
18861
|
var UNORDERED_ITEM_PATTERN = /^[-*][ \t]+(.+?)\s*$/u;
|
|
18862
|
+
var CONTINUATION_PATTERN = /^[ \t]+(.+?)\s*$/u;
|
|
18614
18863
|
var ORDERED_ITEM_PATTERN = /^\d+[.)][ \t]+(.+?)\s*$/u;
|
|
18615
18864
|
var FENCE_PATTERN = /^```([\w+-]*)\s*$/u;
|
|
18865
|
+
var THEMATIC_BREAK_PATTERN = /^(?:---|___|\*\*\*)[ \t]*$/u;
|
|
18616
18866
|
var INLINE_PATTERN = /(`+)((?:(?!\1).)+)\1|\*\*(.+?)\*\*|\[([^\]]+)\]\(([^)\s]+)\)/gu;
|
|
18617
18867
|
function createReleaseNotesElement(document2, markdown) {
|
|
18618
18868
|
const root = document2.createElement("div");
|
|
@@ -18643,6 +18893,15 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
18643
18893
|
index += 1;
|
|
18644
18894
|
continue;
|
|
18645
18895
|
}
|
|
18896
|
+
if (BLOCKQUOTE_PATTERN.test(line)) {
|
|
18897
|
+
index = appendBlockquote(document2, root, lines, index);
|
|
18898
|
+
continue;
|
|
18899
|
+
}
|
|
18900
|
+
if (THEMATIC_BREAK_PATTERN.test(line)) {
|
|
18901
|
+
root.append(document2.createElement("hr"));
|
|
18902
|
+
index += 1;
|
|
18903
|
+
continue;
|
|
18904
|
+
}
|
|
18646
18905
|
if (UNORDERED_ITEM_PATTERN.test(line)) {
|
|
18647
18906
|
index = appendList(document2, root, lines, index, "ul", UNORDERED_ITEM_PATTERN);
|
|
18648
18907
|
continue;
|
|
@@ -18670,6 +18929,22 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
18670
18929
|
root.append(pre);
|
|
18671
18930
|
return index;
|
|
18672
18931
|
}
|
|
18932
|
+
function appendBlockquote(document2, root, lines, start) {
|
|
18933
|
+
const blockquote = document2.createElement("blockquote");
|
|
18934
|
+
const content = [];
|
|
18935
|
+
let index = start;
|
|
18936
|
+
while (index < lines.length) {
|
|
18937
|
+
const match = BLOCKQUOTE_PATTERN.exec(lines[index] ?? "");
|
|
18938
|
+
if (!match) break;
|
|
18939
|
+
content.push(match[1] ?? "");
|
|
18940
|
+
index += 1;
|
|
18941
|
+
}
|
|
18942
|
+
const paragraph = document2.createElement("p");
|
|
18943
|
+
appendInline(document2, paragraph, content.join(" ").trim());
|
|
18944
|
+
blockquote.append(paragraph);
|
|
18945
|
+
root.append(blockquote);
|
|
18946
|
+
return index;
|
|
18947
|
+
}
|
|
18673
18948
|
function appendList(document2, root, lines, start, tag, pattern) {
|
|
18674
18949
|
const list = document2.createElement(tag);
|
|
18675
18950
|
let index = start;
|
|
@@ -18678,8 +18953,21 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
18678
18953
|
if (!item?.[1]) break;
|
|
18679
18954
|
const entry = document2.createElement("li");
|
|
18680
18955
|
appendInline(document2, entry, item[1]);
|
|
18681
|
-
list.append(entry);
|
|
18682
18956
|
index += 1;
|
|
18957
|
+
const continuationLines = [];
|
|
18958
|
+
while (index < lines.length) {
|
|
18959
|
+
const continuation = CONTINUATION_PATTERN.exec(lines[index] ?? "");
|
|
18960
|
+
if (!continuation?.[1]) break;
|
|
18961
|
+
continuationLines.push(continuation[1]);
|
|
18962
|
+
index += 1;
|
|
18963
|
+
}
|
|
18964
|
+
if (continuationLines.length > 0) {
|
|
18965
|
+
const continuation = document2.createElement("span");
|
|
18966
|
+
continuation.className = "release-note-translation";
|
|
18967
|
+
appendInline(document2, continuation, continuationLines.join(" "));
|
|
18968
|
+
entry.append(continuation);
|
|
18969
|
+
}
|
|
18970
|
+
list.append(entry);
|
|
18683
18971
|
}
|
|
18684
18972
|
root.append(list);
|
|
18685
18973
|
return index;
|
|
@@ -18689,14 +18977,17 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
18689
18977
|
let index = start;
|
|
18690
18978
|
while (index < lines.length) {
|
|
18691
18979
|
const current = lines[index] ?? "";
|
|
18692
|
-
if (current.trim().length === 0 || FENCE_PATTERN.test(current) || HEADING_PATTERN.test(current) || UNORDERED_ITEM_PATTERN.test(current) || ORDERED_ITEM_PATTERN.test(current)) {
|
|
18980
|
+
if (current.trim().length === 0 || FENCE_PATTERN.test(current) || HEADING_PATTERN.test(current) || BLOCKQUOTE_PATTERN.test(current) || THEMATIC_BREAK_PATTERN.test(current) || UNORDERED_ITEM_PATTERN.test(current) || ORDERED_ITEM_PATTERN.test(current)) {
|
|
18693
18981
|
break;
|
|
18694
18982
|
}
|
|
18695
18983
|
paragraphLines.push(current.trim());
|
|
18696
18984
|
index += 1;
|
|
18697
18985
|
}
|
|
18698
18986
|
const paragraph = document2.createElement("p");
|
|
18699
|
-
|
|
18987
|
+
paragraphLines.forEach((line, lineIndex) => {
|
|
18988
|
+
appendInline(document2, paragraph, line);
|
|
18989
|
+
if (lineIndex < paragraphLines.length - 1) paragraph.append(document2.createElement("br"));
|
|
18990
|
+
});
|
|
18700
18991
|
root.append(paragraph);
|
|
18701
18992
|
return index;
|
|
18702
18993
|
}
|
|
@@ -18714,17 +19005,30 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
18714
19005
|
strong.textContent = match[3];
|
|
18715
19006
|
parent.append(strong);
|
|
18716
19007
|
} else {
|
|
18717
|
-
const
|
|
18718
|
-
|
|
18719
|
-
|
|
18720
|
-
|
|
18721
|
-
|
|
18722
|
-
|
|
19008
|
+
const href = match[5] ?? "";
|
|
19009
|
+
if (!isSafeLink(href)) {
|
|
19010
|
+
parent.append(match[4] ?? "");
|
|
19011
|
+
} else {
|
|
19012
|
+
const link = document2.createElement("a");
|
|
19013
|
+
link.textContent = match[4] ?? "";
|
|
19014
|
+
link.setAttribute("href", href);
|
|
19015
|
+
link.setAttribute("target", "_blank");
|
|
19016
|
+
link.setAttribute("rel", "noopener noreferrer");
|
|
19017
|
+
parent.append(link);
|
|
19018
|
+
}
|
|
18723
19019
|
}
|
|
18724
19020
|
lastIndex = index + match[0].length;
|
|
18725
19021
|
}
|
|
18726
19022
|
if (lastIndex < text.length) parent.append(text.slice(lastIndex));
|
|
18727
19023
|
}
|
|
19024
|
+
function isSafeLink(href) {
|
|
19025
|
+
try {
|
|
19026
|
+
const url2 = new URL(href, "https://codexhost.invalid");
|
|
19027
|
+
return url2.protocol === "http:" || url2.protocol === "https:";
|
|
19028
|
+
} catch {
|
|
19029
|
+
return false;
|
|
19030
|
+
}
|
|
19031
|
+
}
|
|
18728
19032
|
|
|
18729
19033
|
// src/settings/update-request.ts
|
|
18730
19034
|
var RENDERER_UPDATE_REQUEST_TIMEOUT_MS = 15e3;
|
|
@@ -19089,7 +19393,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
19089
19393
|
}
|
|
19090
19394
|
|
|
19091
19395
|
// src/settings/shell.css
|
|
19092
|
-
var shell_default = ':host {\n --settings-bg: #181818;\n --settings-sidebar: #1c1c1c;\n --settings-panel: transparent;\n --settings-text: #f5f5f5;\n --settings-muted: #a1a1a1;\n --settings-border: rgb(255 255 255 / 10%);\n --settings-divider: rgb(255 255 255 / 10%);\n --settings-hover: rgb(255 255 255 / 6%);\n --settings-active: rgb(51 156 255 / 12%);\n --settings-focus: #339cff;\n color: var(--settings-text);\n color-scheme: dark;\n font:\n 14px/1.5 system-ui,\n -apple-system,\n BlinkMacSystemFont,\n "Segoe UI",\n sans-serif;\n letter-spacing: 0;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n letter-spacing: 0;\n}\n\nbutton,\ninput,\nselect {\n font: inherit;\n}\n\nbutton {\n color: inherit;\n}\n\n[hidden] {\n display: none !important;\n}\n\n.codexhost-settings-dialog {\n width: min(1120px, calc(100vw - 32px));\n height: min(780px, calc(100vh - 32px));\n max-width: none;\n max-height: none;\n margin: auto;\n padding: 0;\n overflow: hidden;\n color: var(--settings-text);\n background: var(--settings-bg);\n border: 1px solid var(--settings-border);\n border-radius: 12px;\n box-shadow: 0 24px 64px rgb(0 0 0 / 38%);\n}\n\n.codexhost-settings-dialog::backdrop {\n background: rgb(0 0 0 / 52%);\n}\n\n.settings-frame,\n.settings-layout {\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n}\n\n.settings-frame {\n display: flex;\n flex-direction: column;\n}\n\n.settings-layout {\n flex: 1;\n display: grid;\n grid-template-columns: 240px minmax(0, 1fr);\n background: var(--settings-bg);\n}\n\n.settings-sidebar {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex-direction: column;\n overflow: hidden;\n background: var(--settings-sidebar);\n border-right: 1px solid var(--settings-border);\n padding-top: 28px;\n}\n\n.settings-header {\n display: flex;\n align-items: center;\n min-width: 0;\n height: 64px;\n flex: none;\n padding: 0 16px;\n border-bottom: 1px solid var(--settings-border);\n}\n\n.settings-header-actions {\n display: flex;\n align-items: center;\n flex: none;\n gap: 12px;\n margin-left: auto;\n}\n\n.settings-icon-button.settings-star-link {\n width: auto;\n gap: 6px;\n padding-inline: 8px;\n font-size: 12px;\n line-height: 18px;\n text-decoration: none;\n border: 2px dashed #f5c542;\n white-space: nowrap;\n}\n\n.settings-star-link .codexhost-settings-icon {\n color: #f5c542;\n fill: currentColor;\n stroke: currentColor;\n}\n\n.settings-brand {\n display: flex;\n align-items: center;\n min-width: 0;\n gap: 8px;\n}\n\n.settings-brand__mark {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n flex: none;\n color: var(--settings-text);\n}\n\n.settings-brand__mark .codexhost-settings-icon {\n width: 32px;\n height: 32px;\n object-fit: contain;\n}\n\n.settings-brand__copy {\n display: flex;\n min-width: 0;\n align-items: baseline;\n gap: 0;\n line-height: 20px;\n}\n\n.settings-brand__name {\n overflow: hidden;\n color: var(--settings-text);\n font-size: 14px;\n font-weight: 500;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.settings-brand__title {\n margin-left: 14px;\n padding-left: 14px;\n color: var(--settings-muted);\n font-size: 14px;\n font-weight: 400;\n border-left: 1px solid var(--settings-border);\n}\n\n.settings-nav {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex: 1;\n flex-direction: column;\n gap: 4px;\n padding: 0 12px 16px;\n overflow-y: auto;\n}\n\n.settings-nav-button {\n display: grid;\n grid-template-columns: 16px minmax(0, 1fr);\n align-items: center;\n width: 100%;\n position: relative;\n min-height: 40px;\n flex: none;\n gap: 12px;\n padding: 8px 12px;\n color: var(--settings-text);\n font-size: 14px;\n line-height: 21px;\n text-align: left;\n background: transparent;\n border: 0;\n border-radius: 10px;\n cursor: pointer;\n}\n\n.settings-nav-button .codexhost-settings-icon {\n width: 18px;\n height: 18px;\n opacity: 0.9;\n}\n\n.settings-nav-button:hover {\n background: var(--settings-hover);\n}\n\n.settings-nav-button[aria-current="page"] {\n background: var(--settings-active);\n color: var(--settings-focus);\n}\n\n.settings-nav-button[aria-current="page"]::before {\n position: absolute;\n left: 0;\n width: 3px;\n height: 22px;\n content: "";\n background: var(--settings-focus);\n border-radius: 0 3px 3px 0;\n}\n\n.settings-nav-button span {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.settings-icon-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n flex: none;\n padding: 0;\n color: var(--settings-muted);\n background: transparent;\n border: 0;\n border-radius: 8px;\n cursor: pointer;\n}\n\n.settings-icon-button:hover {\n color: var(--settings-text);\n background: var(--settings-hover);\n}\n\n.settings-icon-button:focus-visible,\n.settings-nav-button:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 1px;\n}\n\n.settings-page {\n display: block;\n position: relative;\n min-width: 0;\n min-height: 0;\n overflow-y: auto;\n background: var(--settings-bg);\n scrollbar-gutter: stable;\n}\n\n.settings-page__content {\n width: min(930px, calc(100% - 80px));\n margin-inline: auto;\n}\n\n.settings-page__content {\n min-width: 0;\n padding: 44px 0 56px;\n}\n\n.settings-section-label {\n min-height: auto;\n padding: 0 0 28px;\n color: var(--settings-text);\n font-size: 24px;\n font-weight: 600;\n line-height: 30px;\n}\n\n.settings-status-list,\n.settings-empty {\n overflow: hidden;\n background: var(--settings-panel);\n}\n\n.settings-status-row {\n display: grid;\n grid-template-columns: minmax(170px, 1fr) auto minmax(280px, 1.45fr);\n position: relative;\n align-items: center;\n min-height: 88px;\n gap: 28px;\n padding: 16px 0;\n}\n\n.settings-status-row:not(:last-child)::after {\n content: "";\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 1px;\n background: var(--settings-divider);\n}\n\n.settings-status-row__identity {\n display: inline-flex;\n align-items: center;\n min-width: 0;\n color: var(--settings-text);\n gap: 14px;\n font-size: 15px;\n font-weight: 500;\n line-height: 22px;\n}\n\n.settings-status-row__icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 44px;\n height: 44px;\n flex: none;\n color: var(--settings-muted);\n background: rgb(255 255 255 / 7%);\n border-radius: 50%;\n}\n\n.settings-status-badge {\n flex: none;\n padding: 5px 12px;\n color: var(--settings-muted);\n font-size: 13px;\n font-weight: 500;\n line-height: 18px;\n background: rgb(255 255 255 / 9%);\n border: 1px solid rgb(255 255 255 / 6%);\n border-radius: 6px;\n}\n\n.settings-status-row__detail {\n min-width: 0;\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 20px;\n}\n\n.settings-empty {\n display: flex;\n align-items: center;\n min-height: 72px;\n padding: 12px 16px;\n}\n\n.settings-empty > div {\n display: grid;\n min-width: 0;\n gap: 2px;\n}\n\n.settings-empty strong {\n color: var(--settings-text);\n font-size: 13px;\n font-weight: 500;\n line-height: 19px;\n}\n\n.settings-empty span {\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 19px;\n}\n\n.settings-page-error {\n padding: 16px;\n color: var(--settings-text);\n font-size: 13px;\n background: var(--settings-panel);\n border: 1px solid var(--settings-border);\n border-radius: 20px;\n}\n\n.settings-update-metadata {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 24px;\n margin-bottom: 24px;\n padding: 0 4px 20px;\n border-bottom: 1px solid var(--settings-divider);\n}\n\n.settings-update-metadata__item {\n display: grid;\n min-width: 0;\n gap: 4px;\n}\n\n.settings-update-metadata__item span {\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 18px;\n}\n\n.settings-update-metadata__item strong {\n min-width: 0;\n overflow-wrap: anywhere;\n color: var(--settings-text);\n font-size: 15px;\n font-weight: 500;\n line-height: 22px;\n}\n\n.settings-update-panel {\n display: grid;\n gap: 16px;\n min-height: 128px;\n padding: 20px;\n color: var(--settings-text);\n background: var(--settings-panel);\n border: 1px solid var(--settings-border);\n border-radius: 8px;\n}\n\n.settings-update-panel > strong,\n.settings-update-panel > span,\n.settings-update-summary,\n.settings-update-error {\n margin: 0;\n overflow-wrap: anywhere;\n font-size: 13px;\n line-height: 20px;\n}\n\n.settings-update-panel > span,\n.settings-update-summary {\n color: var(--settings-muted);\n}\n\n.settings-update-error {\n color: #ef4444;\n}\n\n.settings-update-progress {\n width: 100%;\n height: 8px;\n accent-color: #238be8;\n}\n\n.settings-update-progress-detail {\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 18px;\n}\n\n.settings-update-notes {\n display: grid;\n gap: 10px;\n max-height: 320px;\n overflow: auto;\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 20px;\n overflow-wrap: anywhere;\n}\n\n.settings-update-notes > :first-child {\n margin-top: 0;\n}\n\n.settings-update-notes > :last-child {\n margin-bottom: 0;\n}\n\n.settings-update-notes h1,\n.settings-update-notes h2,\n.settings-update-notes h3,\n.settings-update-notes h4,\n.settings-update-notes h5,\n.settings-update-notes h6 {\n margin: 6px 0 0;\n color: var(--settings-text);\n font-weight: 600;\n}\n\n.settings-update-notes h1 {\n font-size: 16px;\n line-height: 24px;\n}\n\n.settings-update-notes h2 {\n font-size: 15px;\n line-height: 22px;\n}\n\n.settings-update-notes h3,\n.settings-update-notes h4,\n.settings-update-notes h5,\n.settings-update-notes h6 {\n font-size: 13px;\n line-height: 20px;\n}\n\n.settings-update-notes p,\n.settings-update-notes ul,\n.settings-update-notes ol,\n.settings-update-notes pre {\n margin: 0;\n}\n\n.settings-update-notes ul,\n.settings-update-notes ol {\n padding-left: 20px;\n}\n\n.settings-update-notes li + li {\n margin-top: 4px;\n}\n\n.settings-update-notes strong {\n color: var(--settings-text);\n font-weight: 600;\n}\n\n.settings-update-notes a {\n color: #7cb8ff;\n text-decoration: none;\n}\n\n.settings-update-notes a:hover {\n text-decoration: underline;\n}\n\n.settings-update-notes code {\n font-family: ui-monospace, "SFMono-Regular", Consolas, "Liberation Mono", monospace;\n font-size: 12px;\n}\n\n.settings-update-notes :not(pre) > code {\n padding: 1px 5px;\n background: rgb(255 255 255 / 8%);\n border-radius: 4px;\n}\n\n.settings-update-notes pre {\n padding: 10px 12px;\n overflow: auto;\n background: rgb(0 0 0 / 28%);\n border-radius: 6px;\n}\n\n.settings-update-notes pre code {\n line-height: 18px;\n white-space: pre-wrap;\n}\n\n.settings-update-version-row {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: center;\n gap: 20px;\n min-height: 32px;\n color: var(--settings-muted);\n font-size: 13px;\n}\n\n.settings-update-version-row strong {\n color: var(--settings-text);\n font-size: 15px;\n}\n\n.settings-update-manual {\n display: grid;\n min-width: 0;\n gap: 6px;\n margin-top: 14px;\n padding-inline: 4px;\n}\n\n.settings-update-manual[hidden] {\n display: none;\n}\n\n.settings-update-manual span {\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 18px;\n}\n\n.settings-update-manual code {\n overflow-wrap: anywhere;\n color: var(--settings-text);\n font-family: ui-monospace, "SFMono-Regular", Consolas, "Liberation Mono", monospace;\n font-size: 12px;\n line-height: 18px;\n}\n\n.settings-update-actions {\n display: flex;\n min-width: 0;\n margin-top: 16px;\n}\n\n.settings-command-button,\n.settings-update-link {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: fit-content;\n min-height: 36px;\n gap: 8px;\n padding: 8px 12px;\n color: white;\n font: inherit;\n font-size: 13px;\n text-decoration: none;\n background: #1677d2;\n border: 1px solid #238be8;\n border-radius: 6px;\n cursor: pointer;\n}\n\n.settings-command-button--secondary,\n.settings-update-link {\n color: var(--settings-text);\n background: transparent;\n border-color: var(--settings-border);\n}\n\n.settings-command-button:hover,\n.settings-update-link:hover {\n filter: brightness(1.08);\n}\n\n.settings-command-button:focus-visible,\n.settings-update-link:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 2px;\n}\n\n.codexhost-settings-icon {\n display: block;\n flex: none;\n stroke: currentColor;\n}\n\n@media (max-width: 720px) {\n .codexhost-settings-dialog {\n width: calc(100vw - 16px);\n height: calc(100vh - 16px);\n border-radius: 10px;\n }\n\n .settings-layout {\n grid-template-columns: minmax(0, 1fr);\n grid-template-rows: auto minmax(0, 1fr);\n }\n\n .settings-sidebar {\n border-right: 0;\n border-bottom: 1px solid var(--settings-border);\n }\n\n .settings-header {\n height: 56px;\n padding-inline: 14px;\n }\n\n .settings-icon-button.settings-star-link {\n width: 28px;\n padding: 0;\n }\n\n .settings-star-link span {\n display: none;\n }\n\n .settings-sidebar {\n padding-top: 20px;\n }\n\n .settings-nav {\n flex: none;\n flex-direction: row;\n gap: 4px;\n padding: 7px 8px 8px;\n overflow-x: auto;\n overflow-y: hidden;\n }\n\n .settings-nav-button {\n width: auto;\n min-width: max-content;\n min-height: 34px;\n grid-template-columns: 16px auto;\n border-radius: 10px;\n }\n\n .settings-page__content {\n width: calc(100% - 40px);\n }\n\n .settings-page__content {\n padding-top: 32px;\n padding-bottom: 32px;\n }\n\n .settings-section-label {\n padding-bottom: 20px;\n font-size: 20px;\n line-height: 26px;\n }\n\n .settings-status-row {\n grid-template-columns: minmax(0, 1fr) auto;\n gap: 16px;\n }\n\n .settings-status-row__detail {\n grid-column: 1 / -1;\n margin: -8px 0 0 58px;\n }\n}\n\n@media (forced-colors: active) {\n :host,\n :host([data-theme="dark"]) {\n --settings-bg: Canvas;\n --settings-sidebar: Canvas;\n --settings-panel: Canvas;\n --settings-text: CanvasText;\n --settings-muted: GrayText;\n --settings-border: ButtonBorder;\n --settings-divider: ButtonBorder;\n --settings-hover: Highlight;\n --settings-active: Highlight;\n --settings-focus: Highlight;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n *,\n *::before,\n *::after {\n scroll-behavior: auto !important;\n }\n}\n';
|
|
19396
|
+
var shell_default = ':host {\n --settings-bg: #181818;\n --settings-sidebar: #1c1c1c;\n --settings-panel: transparent;\n --settings-text: #f5f5f5;\n --settings-muted: #a1a1a1;\n --settings-border: rgb(255 255 255 / 10%);\n --settings-divider: rgb(255 255 255 / 10%);\n --settings-hover: rgb(255 255 255 / 6%);\n --settings-active: rgb(51 156 255 / 12%);\n --settings-focus: #339cff;\n color: var(--settings-text);\n color-scheme: dark;\n font:\n 14px/1.5 system-ui,\n -apple-system,\n BlinkMacSystemFont,\n "Segoe UI",\n sans-serif;\n letter-spacing: 0;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n letter-spacing: 0;\n}\n\nbutton,\ninput,\nselect {\n font: inherit;\n}\n\nbutton {\n color: inherit;\n}\n\n[hidden] {\n display: none !important;\n}\n\n.codexhost-settings-dialog {\n width: min(1120px, calc(100vw - 32px));\n height: min(780px, calc(100vh - 32px));\n max-width: none;\n max-height: none;\n margin: auto;\n padding: 0;\n overflow: hidden;\n color: var(--settings-text);\n background: var(--settings-bg);\n border: 1px solid var(--settings-border);\n border-radius: 12px;\n box-shadow: 0 24px 64px rgb(0 0 0 / 38%);\n}\n\n.codexhost-settings-dialog::backdrop {\n background: rgb(0 0 0 / 52%);\n}\n\n.settings-frame,\n.settings-layout {\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n}\n\n.settings-frame {\n display: flex;\n flex-direction: column;\n}\n\n.settings-layout {\n flex: 1;\n display: grid;\n grid-template-columns: 240px minmax(0, 1fr);\n background: var(--settings-bg);\n}\n\n.settings-sidebar {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex-direction: column;\n overflow: hidden;\n background: var(--settings-sidebar);\n border-right: 1px solid var(--settings-border);\n padding-top: 28px;\n}\n\n.settings-header {\n display: flex;\n align-items: center;\n min-width: 0;\n height: 64px;\n flex: none;\n padding: 0 16px;\n border-bottom: 1px solid var(--settings-border);\n}\n\n.settings-header-actions {\n display: flex;\n align-items: center;\n flex: none;\n gap: 12px;\n margin-left: auto;\n}\n\n.settings-icon-button.settings-star-link {\n width: auto;\n gap: 6px;\n padding-inline: 8px;\n font-size: 12px;\n line-height: 18px;\n text-decoration: none;\n border: 2px dashed #f5c542;\n white-space: nowrap;\n}\n\n.settings-star-link .codexhost-settings-icon {\n color: #f5c542;\n fill: currentColor;\n stroke: currentColor;\n}\n\n.settings-brand {\n display: flex;\n align-items: center;\n min-width: 0;\n gap: 8px;\n}\n\n.settings-brand__mark {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n flex: none;\n color: var(--settings-text);\n}\n\n.settings-brand__mark .codexhost-settings-icon {\n width: 32px;\n height: 32px;\n object-fit: contain;\n}\n\n.settings-brand__copy {\n display: flex;\n min-width: 0;\n align-items: baseline;\n gap: 0;\n line-height: 20px;\n}\n\n.settings-brand__name {\n overflow: hidden;\n color: var(--settings-text);\n font-size: 14px;\n font-weight: 500;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.settings-brand__title {\n margin-left: 14px;\n padding-left: 14px;\n color: var(--settings-muted);\n font-size: 14px;\n font-weight: 400;\n border-left: 1px solid var(--settings-border);\n}\n\n.settings-nav {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex: 1;\n flex-direction: column;\n gap: 4px;\n padding: 0 12px 16px;\n overflow-y: auto;\n}\n\n.settings-nav-button {\n display: grid;\n grid-template-columns: 16px minmax(0, 1fr);\n align-items: center;\n width: 100%;\n position: relative;\n min-height: 40px;\n flex: none;\n gap: 12px;\n padding: 8px 12px;\n color: var(--settings-text);\n font-size: 14px;\n line-height: 21px;\n text-align: left;\n background: transparent;\n border: 0;\n border-radius: 10px;\n cursor: pointer;\n}\n\n.settings-nav-button .codexhost-settings-icon {\n width: 18px;\n height: 18px;\n opacity: 0.9;\n}\n\n.settings-nav-button:hover {\n background: var(--settings-hover);\n}\n\n.settings-nav-button[aria-current="page"] {\n background: var(--settings-active);\n color: var(--settings-focus);\n}\n\n.settings-nav-button[aria-current="page"]::before {\n position: absolute;\n left: 0;\n width: 3px;\n height: 22px;\n content: "";\n background: var(--settings-focus);\n border-radius: 0 3px 3px 0;\n}\n\n.settings-nav-button span {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.settings-icon-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n flex: none;\n padding: 0;\n color: var(--settings-muted);\n background: transparent;\n border: 0;\n border-radius: 8px;\n cursor: pointer;\n}\n\n.settings-icon-button:hover {\n color: var(--settings-text);\n background: var(--settings-hover);\n}\n\n.settings-icon-button:focus-visible,\n.settings-nav-button:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 1px;\n}\n\n.settings-page {\n display: block;\n position: relative;\n min-width: 0;\n min-height: 0;\n overflow-y: auto;\n background: var(--settings-bg);\n scrollbar-gutter: stable;\n}\n\n.settings-page__content {\n width: min(930px, calc(100% - 80px));\n margin-inline: auto;\n}\n\n.settings-page__content {\n min-width: 0;\n padding: 44px 0 56px;\n}\n\n.settings-section-label {\n min-height: auto;\n padding: 0 0 28px;\n color: var(--settings-text);\n font-size: 24px;\n font-weight: 600;\n line-height: 30px;\n}\n\n.settings-status-list,\n.settings-empty {\n overflow: hidden;\n background: var(--settings-panel);\n}\n\n.settings-status-row {\n display: grid;\n grid-template-columns: minmax(170px, 1fr) auto minmax(280px, 1.45fr);\n position: relative;\n align-items: center;\n min-height: 88px;\n gap: 28px;\n padding: 16px 0;\n}\n\n.settings-status-row:not(:last-child)::after {\n content: "";\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 1px;\n background: var(--settings-divider);\n}\n\n.settings-status-row__identity {\n display: inline-flex;\n align-items: center;\n min-width: 0;\n color: var(--settings-text);\n gap: 14px;\n font-size: 15px;\n font-weight: 500;\n line-height: 22px;\n}\n\n.settings-status-row__icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 44px;\n height: 44px;\n flex: none;\n color: var(--settings-muted);\n background: rgb(255 255 255 / 7%);\n border-radius: 50%;\n}\n\n.settings-status-badge {\n flex: none;\n padding: 5px 12px;\n color: var(--settings-muted);\n font-size: 13px;\n font-weight: 500;\n line-height: 18px;\n background: rgb(255 255 255 / 9%);\n border: 1px solid rgb(255 255 255 / 6%);\n border-radius: 6px;\n}\n\n.settings-status-row__detail {\n min-width: 0;\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 20px;\n}\n\n.settings-empty {\n display: flex;\n align-items: center;\n min-height: 72px;\n padding: 12px 16px;\n}\n\n.settings-empty > div {\n display: grid;\n min-width: 0;\n gap: 2px;\n}\n\n.settings-empty strong {\n color: var(--settings-text);\n font-size: 13px;\n font-weight: 500;\n line-height: 19px;\n}\n\n.settings-empty span {\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 19px;\n}\n\n.settings-page-error {\n padding: 16px;\n color: var(--settings-text);\n font-size: 13px;\n background: var(--settings-panel);\n border: 1px solid var(--settings-border);\n border-radius: 20px;\n}\n\n.settings-update-metadata {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 24px;\n margin-bottom: 24px;\n padding: 0 4px 20px;\n border-bottom: 1px solid var(--settings-divider);\n}\n\n.settings-update-metadata__item {\n display: grid;\n min-width: 0;\n gap: 4px;\n}\n\n.settings-update-metadata__item span {\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 18px;\n}\n\n.settings-update-metadata__item strong {\n min-width: 0;\n overflow-wrap: anywhere;\n color: var(--settings-text);\n font-size: 15px;\n font-weight: 500;\n line-height: 22px;\n}\n\n.settings-update-panel {\n display: grid;\n gap: 16px;\n min-height: 128px;\n padding: 20px;\n color: var(--settings-text);\n background: var(--settings-panel);\n border: 1px solid var(--settings-border);\n border-radius: 8px;\n}\n\n.settings-update-panel > strong,\n.settings-update-panel > span,\n.settings-update-summary,\n.settings-update-error {\n margin: 0;\n overflow-wrap: anywhere;\n font-size: 13px;\n line-height: 20px;\n}\n\n.settings-update-panel > span,\n.settings-update-summary {\n color: var(--settings-muted);\n}\n\n.settings-update-error {\n color: #ef4444;\n}\n\n.settings-update-progress {\n width: 100%;\n height: 8px;\n accent-color: #238be8;\n}\n\n.settings-update-progress-detail {\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 18px;\n}\n\n.settings-update-notes {\n display: grid;\n min-width: 0;\n gap: 12px;\n color: var(--settings-muted);\n font-size: 14px;\n line-height: 22px;\n overflow-wrap: anywhere;\n}\n\n.settings-update-notes > :first-child {\n margin-top: 0;\n}\n\n.settings-update-notes > :last-child {\n margin-bottom: 0;\n}\n\n.settings-update-notes h1,\n.settings-update-notes h2,\n.settings-update-notes h3,\n.settings-update-notes h4,\n.settings-update-notes h5,\n.settings-update-notes h6 {\n margin: 6px 0 0;\n color: var(--settings-text);\n font-weight: 600;\n}\n\n.settings-update-notes h1 {\n font-size: 18px;\n line-height: 26px;\n}\n\n.settings-update-notes h2 {\n font-size: 17px;\n line-height: 24px;\n}\n\n.settings-update-notes h3,\n.settings-update-notes h4,\n.settings-update-notes h5,\n.settings-update-notes h6 {\n font-size: 14px;\n line-height: 22px;\n}\n\n.settings-update-notes p,\n.settings-update-notes ul,\n.settings-update-notes ol,\n.settings-update-notes pre,\n.settings-update-notes blockquote {\n margin: 0;\n}\n\n.settings-update-notes ul,\n.settings-update-notes ol {\n padding-left: 24px;\n}\n\n.settings-update-notes li {\n padding-left: 4px;\n}\n\n.settings-update-notes li::marker {\n color: var(--settings-muted);\n font-size: 0.85em;\n}\n\n.settings-update-notes li + li {\n margin-top: 14px;\n}\n\n.settings-update-notes .release-note-translation {\n display: block;\n margin-top: 3px;\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 20px;\n}\n\n.settings-update-notes blockquote {\n padding: 8px 12px;\n color: var(--settings-muted);\n border-left: 3px solid var(--settings-focus);\n background: rgb(255 255 255 / 4%);\n}\n\n.settings-update-notes hr {\n width: 100%;\n margin: 2px 0;\n border: 0;\n border-top: 1px solid var(--settings-divider);\n}\n\n.settings-update-notes strong {\n color: var(--settings-text);\n font-weight: 600;\n}\n\n.settings-update-notes a {\n color: #7cb8ff;\n text-decoration: none;\n}\n\n.settings-update-notes a:hover {\n text-decoration: underline;\n}\n\n.settings-update-notes code {\n font-family: ui-monospace, "SFMono-Regular", Consolas, "Liberation Mono", monospace;\n font-size: 12px;\n}\n\n.settings-update-notes :not(pre) > code {\n padding: 1px 5px;\n background: rgb(255 255 255 / 8%);\n border-radius: 4px;\n}\n\n.settings-update-notes pre {\n min-width: 0;\n max-width: 100%;\n padding: 10px 12px;\n overflow-x: auto;\n overflow-y: hidden;\n background: rgb(0 0 0 / 28%);\n border-radius: 6px;\n}\n\n.settings-update-notes pre code {\n line-height: 18px;\n white-space: pre-wrap;\n}\n\n.settings-update-version-row {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: center;\n gap: 20px;\n min-height: 32px;\n color: var(--settings-muted);\n font-size: 13px;\n}\n\n.settings-update-version-row strong {\n color: var(--settings-text);\n font-size: 15px;\n}\n\n.settings-update-manual {\n display: grid;\n min-width: 0;\n gap: 6px;\n margin-top: 14px;\n padding-inline: 4px;\n}\n\n.settings-update-manual[hidden] {\n display: none;\n}\n\n.settings-update-manual span {\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 18px;\n}\n\n.settings-update-manual code {\n overflow-wrap: anywhere;\n color: var(--settings-text);\n font-family: ui-monospace, "SFMono-Regular", Consolas, "Liberation Mono", monospace;\n font-size: 12px;\n line-height: 18px;\n}\n\n.settings-update-actions {\n display: flex;\n min-width: 0;\n margin-top: 16px;\n}\n\n.settings-command-button,\n.settings-update-link {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: fit-content;\n min-height: 36px;\n gap: 8px;\n padding: 8px 12px;\n color: white;\n font: inherit;\n font-size: 13px;\n text-decoration: none;\n background: #1677d2;\n border: 1px solid #238be8;\n border-radius: 6px;\n cursor: pointer;\n}\n\n.settings-command-button--secondary,\n.settings-update-link {\n color: var(--settings-text);\n background: transparent;\n border-color: var(--settings-border);\n}\n\n.settings-command-button:hover,\n.settings-update-link:hover {\n filter: brightness(1.08);\n}\n\n.settings-command-button:focus-visible,\n.settings-update-link:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 2px;\n}\n\n.codexhost-settings-icon {\n display: block;\n flex: none;\n stroke: currentColor;\n}\n\n@media (max-width: 720px) {\n .codexhost-settings-dialog {\n width: calc(100vw - 16px);\n height: calc(100vh - 16px);\n border-radius: 10px;\n }\n\n .settings-layout {\n grid-template-columns: minmax(0, 1fr);\n grid-template-rows: auto minmax(0, 1fr);\n }\n\n .settings-sidebar {\n border-right: 0;\n border-bottom: 1px solid var(--settings-border);\n }\n\n .settings-header {\n height: 56px;\n padding-inline: 14px;\n }\n\n .settings-icon-button.settings-star-link {\n width: 28px;\n padding: 0;\n }\n\n .settings-star-link span {\n display: none;\n }\n\n .settings-sidebar {\n padding-top: 20px;\n }\n\n .settings-nav {\n flex: none;\n flex-direction: row;\n gap: 4px;\n padding: 7px 8px 8px;\n overflow-x: auto;\n overflow-y: hidden;\n }\n\n .settings-nav-button {\n width: auto;\n min-width: max-content;\n min-height: 34px;\n grid-template-columns: 16px auto;\n border-radius: 10px;\n }\n\n .settings-page__content {\n width: calc(100% - 40px);\n }\n\n .settings-page__content {\n padding-top: 32px;\n padding-bottom: 32px;\n }\n\n .settings-section-label {\n padding-bottom: 20px;\n font-size: 20px;\n line-height: 26px;\n }\n\n .settings-status-row {\n grid-template-columns: minmax(0, 1fr) auto;\n gap: 16px;\n }\n\n .settings-status-row__detail {\n grid-column: 1 / -1;\n margin: -8px 0 0 58px;\n }\n}\n\n@media (forced-colors: active) {\n :host,\n :host([data-theme="dark"]) {\n --settings-bg: Canvas;\n --settings-sidebar: Canvas;\n --settings-panel: Canvas;\n --settings-text: CanvasText;\n --settings-muted: GrayText;\n --settings-border: ButtonBorder;\n --settings-divider: ButtonBorder;\n --settings-hover: Highlight;\n --settings-active: Highlight;\n --settings-focus: Highlight;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n *,\n *::before,\n *::after {\n scroll-behavior: auto !important;\n }\n}\n';
|
|
19093
19397
|
|
|
19094
19398
|
// src/settings/shell.ts
|
|
19095
19399
|
var SETTINGS_SHELL_ATTRIBUTE = "data-codexhost-settings-shell";
|
package/bin/codexhost
CHANGED
|
Binary file
|