webmux 0.16.0 → 0.18.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.
- package/backend/dist/server.js +113 -4
- package/bin/webmux.js +32 -4
- package/frontend/dist/assets/index-Cy8MTH3L.css +32 -0
- package/frontend/dist/assets/index-CzRnnD-H.js +148 -0
- package/frontend/dist/index.html +2 -2
- package/package.json +1 -1
- package/frontend/dist/assets/index-BgwdjtQn.js +0 -35
- package/frontend/dist/assets/index-Bt0UjBTn.css +0 -32
package/backend/dist/server.js
CHANGED
|
@@ -6906,6 +6906,7 @@ var require_public_api = __commonJS((exports) => {
|
|
|
6906
6906
|
|
|
6907
6907
|
// backend/src/server.ts
|
|
6908
6908
|
import { join as join6, resolve as resolve6 } from "path";
|
|
6909
|
+
import { mkdirSync } from "fs";
|
|
6909
6910
|
import { networkInterfaces } from "os";
|
|
6910
6911
|
|
|
6911
6912
|
// backend/src/lib/log.ts
|
|
@@ -7482,15 +7483,17 @@ function loadLocalProjectConfigOverlay(root) {
|
|
|
7482
7483
|
try {
|
|
7483
7484
|
const text = readLocalConfigFile(root).trim();
|
|
7484
7485
|
if (!text) {
|
|
7485
|
-
return { profiles: {}, lifecycleHooks: {} };
|
|
7486
|
+
return { worktreeRoot: null, profiles: {}, lifecycleHooks: {} };
|
|
7486
7487
|
}
|
|
7487
7488
|
const parsed = parseConfigDocument(text);
|
|
7489
|
+
const ws = isRecord(parsed.workspace) ? parsed.workspace : null;
|
|
7488
7490
|
return {
|
|
7491
|
+
worktreeRoot: ws && typeof ws.worktreeRoot === "string" ? ws.worktreeRoot : null,
|
|
7489
7492
|
profiles: parseProfiles(parsed.profiles, false),
|
|
7490
7493
|
lifecycleHooks: parseLifecycleHooks(parsed.lifecycleHooks)
|
|
7491
7494
|
};
|
|
7492
7495
|
} catch {
|
|
7493
|
-
return { profiles: {}, lifecycleHooks: {} };
|
|
7496
|
+
return { worktreeRoot: null, profiles: {}, lifecycleHooks: {} };
|
|
7494
7497
|
}
|
|
7495
7498
|
}
|
|
7496
7499
|
function mergeHookCommand(projectCommand, localCommand) {
|
|
@@ -7534,6 +7537,9 @@ function loadConfig(dir, options = {}) {
|
|
|
7534
7537
|
const localOverlay = loadLocalProjectConfigOverlay(root);
|
|
7535
7538
|
return {
|
|
7536
7539
|
...projectConfig,
|
|
7540
|
+
...localOverlay.worktreeRoot !== null ? {
|
|
7541
|
+
workspace: { ...projectConfig.workspace, worktreeRoot: localOverlay.worktreeRoot }
|
|
7542
|
+
} : {},
|
|
7537
7543
|
profiles: {
|
|
7538
7544
|
...cloneProfiles(projectConfig.profiles),
|
|
7539
7545
|
...cloneProfiles(localOverlay.profiles)
|
|
@@ -8515,7 +8521,10 @@ function listLocalGitBranches(cwd) {
|
|
|
8515
8521
|
function readGitWorktreeStatus(cwd) {
|
|
8516
8522
|
const dirtyOutput = runGit(["status", "--porcelain"], cwd);
|
|
8517
8523
|
const commit = tryRunGit(["rev-parse", "HEAD"], cwd);
|
|
8518
|
-
|
|
8524
|
+
let ahead = tryRunGit(["rev-list", "--count", "@{upstream}..HEAD"], cwd);
|
|
8525
|
+
if (!ahead.ok) {
|
|
8526
|
+
ahead = tryRunGit(["rev-list", "--count", "HEAD", "--not", "--remotes=origin"], cwd);
|
|
8527
|
+
}
|
|
8519
8528
|
return {
|
|
8520
8529
|
dirty: dirtyOutput.length > 0,
|
|
8521
8530
|
aheadCount: ahead.ok ? parseInt(ahead.stdout, 10) || 0 : 0,
|
|
@@ -8610,6 +8619,26 @@ class BunGitGateway {
|
|
|
8610
8619
|
currentBranch(repoRoot) {
|
|
8611
8620
|
return runGit(["branch", "--show-current"], repoRoot);
|
|
8612
8621
|
}
|
|
8622
|
+
readDiff(cwd) {
|
|
8623
|
+
const result = tryRunGit(["diff", "HEAD", "--no-color"], cwd);
|
|
8624
|
+
return result.ok ? result.stdout : "";
|
|
8625
|
+
}
|
|
8626
|
+
listUnpushedCommits(cwd) {
|
|
8627
|
+
let result = tryRunGit(["log", "--oneline", "@{upstream}..HEAD"], cwd);
|
|
8628
|
+
if (!result.ok) {
|
|
8629
|
+
result = tryRunGit(["log", "--oneline", "HEAD", "--not", "--remotes=origin"], cwd);
|
|
8630
|
+
}
|
|
8631
|
+
if (!result.ok || !result.stdout)
|
|
8632
|
+
return [];
|
|
8633
|
+
return result.stdout.split(`
|
|
8634
|
+
`).filter((line) => line.length > 0).map((line) => {
|
|
8635
|
+
const spaceIdx = line.indexOf(" ");
|
|
8636
|
+
return {
|
|
8637
|
+
hash: line.slice(0, spaceIdx),
|
|
8638
|
+
message: line.slice(spaceIdx + 1)
|
|
8639
|
+
};
|
|
8640
|
+
});
|
|
8641
|
+
}
|
|
8613
8642
|
}
|
|
8614
8643
|
|
|
8615
8644
|
// backend/src/domain/model.ts
|
|
@@ -9648,7 +9677,8 @@ function mapWorktreeSnapshot(state, now, creating, findLinearIssue) {
|
|
|
9648
9677
|
profile: state.profile,
|
|
9649
9678
|
agentName: state.agentName,
|
|
9650
9679
|
mux: state.session.exists,
|
|
9651
|
-
dirty: state.git.dirty
|
|
9680
|
+
dirty: state.git.dirty,
|
|
9681
|
+
unpushed: state.git.aheadCount > 0,
|
|
9652
9682
|
paneCount: state.session.paneCount,
|
|
9653
9683
|
status: creating ? "creating" : state.agent.lifecycle,
|
|
9654
9684
|
elapsed: formatElapsedSince(state.agent.lastStartedAt, now),
|
|
@@ -9667,6 +9697,7 @@ function mapCreatingWorktreeSnapshot(creating, findLinearIssue) {
|
|
|
9667
9697
|
agentName: creating.agentName,
|
|
9668
9698
|
mux: false,
|
|
9669
9699
|
dirty: false,
|
|
9700
|
+
unpushed: false,
|
|
9670
9701
|
paneCount: 0,
|
|
9671
9702
|
status: "creating",
|
|
9672
9703
|
elapsed: "",
|
|
@@ -10999,6 +11030,21 @@ async function apiGetLinearIssues() {
|
|
|
10999
11030
|
return errorResponse(result.error, 502);
|
|
11000
11031
|
return jsonResponse(result.data);
|
|
11001
11032
|
}
|
|
11033
|
+
var MAX_DIFF_BYTES = 200 * 1024;
|
|
11034
|
+
async function apiGetWorktreeDiff(name) {
|
|
11035
|
+
await reconciliationService.reconcile(PROJECT_DIR);
|
|
11036
|
+
const state = projectRuntime.getWorktreeByBranch(name);
|
|
11037
|
+
if (!state)
|
|
11038
|
+
return errorResponse(`Worktree not found: ${name}`, 404);
|
|
11039
|
+
const uncommitted = git.readDiff(state.path);
|
|
11040
|
+
const unpushedCommits = git.listUnpushedCommits(state.path);
|
|
11041
|
+
const truncated = uncommitted.length > MAX_DIFF_BYTES;
|
|
11042
|
+
return jsonResponse({
|
|
11043
|
+
uncommitted: truncated ? uncommitted.slice(0, MAX_DIFF_BYTES) : uncommitted,
|
|
11044
|
+
uncommittedTruncated: truncated,
|
|
11045
|
+
unpushedCommits
|
|
11046
|
+
});
|
|
11047
|
+
}
|
|
11002
11048
|
async function apiCiLogs(runId) {
|
|
11003
11049
|
if (!/^\d+$/.test(runId))
|
|
11004
11050
|
return errorResponse("Invalid run ID", 400);
|
|
@@ -11014,6 +11060,53 @@ async function apiCiLogs(runId) {
|
|
|
11014
11060
|
const stderr = (await new Response(proc.stderr).text()).trim();
|
|
11015
11061
|
return errorResponse(`Failed to fetch logs: ${stderr || "unknown error"}`, 502);
|
|
11016
11062
|
}
|
|
11063
|
+
var ALLOWED_IMAGE_TYPES = new Set([
|
|
11064
|
+
"image/png",
|
|
11065
|
+
"image/jpeg",
|
|
11066
|
+
"image/gif",
|
|
11067
|
+
"image/webp"
|
|
11068
|
+
]);
|
|
11069
|
+
var MAX_FILE_SIZE = 10 * 1024 * 1024;
|
|
11070
|
+
function sanitizeFilename(name) {
|
|
11071
|
+
const base = name.split("/").pop()?.split("\\").pop() ?? "upload";
|
|
11072
|
+
return base.replace(/[^a-zA-Z0-9._-]/g, "_") || "upload";
|
|
11073
|
+
}
|
|
11074
|
+
async function apiUploadFiles(name, req) {
|
|
11075
|
+
const state = projectRuntime.getWorktreeByBranch(name);
|
|
11076
|
+
if (!state)
|
|
11077
|
+
return errorResponse(`Worktree not found: ${name}`, 404);
|
|
11078
|
+
let formData;
|
|
11079
|
+
try {
|
|
11080
|
+
formData = await req.formData();
|
|
11081
|
+
} catch {
|
|
11082
|
+
return errorResponse("Invalid multipart form data", 400);
|
|
11083
|
+
}
|
|
11084
|
+
const entries = formData.getAll("files");
|
|
11085
|
+
if (entries.length === 0)
|
|
11086
|
+
return errorResponse("No files provided", 400);
|
|
11087
|
+
const uploadDir = `/tmp/webmux-uploads/${sanitizeFilename(name)}`;
|
|
11088
|
+
mkdirSync(uploadDir, { recursive: true });
|
|
11089
|
+
const results = [];
|
|
11090
|
+
for (const entry of entries) {
|
|
11091
|
+
if (!(entry instanceof File))
|
|
11092
|
+
continue;
|
|
11093
|
+
if (!ALLOWED_IMAGE_TYPES.has(entry.type)) {
|
|
11094
|
+
return errorResponse(`Unsupported file type: ${entry.type}`, 400);
|
|
11095
|
+
}
|
|
11096
|
+
if (entry.size > MAX_FILE_SIZE) {
|
|
11097
|
+
return errorResponse(`File too large: ${entry.name} (max 10MB)`, 400);
|
|
11098
|
+
}
|
|
11099
|
+
const safeName = `${Date.now()}_${sanitizeFilename(entry.name)}`;
|
|
11100
|
+
const destPath = join6(uploadDir, safeName);
|
|
11101
|
+
if (!resolve6(destPath).startsWith(uploadDir + "/")) {
|
|
11102
|
+
return errorResponse("Invalid filename", 400);
|
|
11103
|
+
}
|
|
11104
|
+
await Bun.write(destPath, entry);
|
|
11105
|
+
results.push({ path: destPath });
|
|
11106
|
+
}
|
|
11107
|
+
log.info(`[upload] branch=${name} files=${results.length}`);
|
|
11108
|
+
return jsonResponse({ files: results });
|
|
11109
|
+
}
|
|
11017
11110
|
Bun.serve({
|
|
11018
11111
|
port: PORT,
|
|
11019
11112
|
idleTimeout: 255,
|
|
@@ -11069,6 +11162,14 @@ Bun.serve({
|
|
|
11069
11162
|
return catching(`POST /api/worktrees/${name}/send`, () => apiSendPrompt(name, req));
|
|
11070
11163
|
}
|
|
11071
11164
|
},
|
|
11165
|
+
"/api/worktrees/:name/upload": {
|
|
11166
|
+
POST: (req) => {
|
|
11167
|
+
const name = decodeURIComponent(req.params.name);
|
|
11168
|
+
if (!isValidWorktreeName(name))
|
|
11169
|
+
return errorResponse("Invalid worktree name", 400);
|
|
11170
|
+
return catching(`POST /api/worktrees/${name}/upload`, () => apiUploadFiles(name, req));
|
|
11171
|
+
}
|
|
11172
|
+
},
|
|
11072
11173
|
"/api/worktrees/:name/merge": {
|
|
11073
11174
|
POST: (req) => {
|
|
11074
11175
|
const name = decodeURIComponent(req.params.name);
|
|
@@ -11077,6 +11178,14 @@ Bun.serve({
|
|
|
11077
11178
|
return catching(`POST /api/worktrees/${name}/merge`, () => apiMergeWorktree(name));
|
|
11078
11179
|
}
|
|
11079
11180
|
},
|
|
11181
|
+
"/api/worktrees/:name/diff": {
|
|
11182
|
+
GET: (req) => {
|
|
11183
|
+
const name = decodeURIComponent(req.params.name);
|
|
11184
|
+
if (!isValidWorktreeName(name))
|
|
11185
|
+
return errorResponse("Invalid worktree name", 400);
|
|
11186
|
+
return catching(`GET /api/worktrees/${name}/diff`, () => apiGetWorktreeDiff(name));
|
|
11187
|
+
}
|
|
11188
|
+
},
|
|
11080
11189
|
"/api/linear/issues": {
|
|
11081
11190
|
GET: () => catching("GET /api/linear/issues", () => apiGetLinearIssues())
|
|
11082
11191
|
},
|
package/bin/webmux.js
CHANGED
|
@@ -172,7 +172,10 @@ function listLocalGitBranches(cwd) {
|
|
|
172
172
|
function readGitWorktreeStatus(cwd) {
|
|
173
173
|
const dirtyOutput = runGit(["status", "--porcelain"], cwd);
|
|
174
174
|
const commit = tryRunGit(["rev-parse", "HEAD"], cwd);
|
|
175
|
-
|
|
175
|
+
let ahead = tryRunGit(["rev-list", "--count", "@{upstream}..HEAD"], cwd);
|
|
176
|
+
if (!ahead.ok) {
|
|
177
|
+
ahead = tryRunGit(["rev-list", "--count", "HEAD", "--not", "--remotes=origin"], cwd);
|
|
178
|
+
}
|
|
176
179
|
return {
|
|
177
180
|
dirty: dirtyOutput.length > 0,
|
|
178
181
|
aheadCount: ahead.ok ? parseInt(ahead.stdout, 10) || 0 : 0,
|
|
@@ -267,6 +270,26 @@ class BunGitGateway {
|
|
|
267
270
|
currentBranch(repoRoot) {
|
|
268
271
|
return runGit(["branch", "--show-current"], repoRoot);
|
|
269
272
|
}
|
|
273
|
+
readDiff(cwd) {
|
|
274
|
+
const result = tryRunGit(["diff", "HEAD", "--no-color"], cwd);
|
|
275
|
+
return result.ok ? result.stdout : "";
|
|
276
|
+
}
|
|
277
|
+
listUnpushedCommits(cwd) {
|
|
278
|
+
let result = tryRunGit(["log", "--oneline", "@{upstream}..HEAD"], cwd);
|
|
279
|
+
if (!result.ok) {
|
|
280
|
+
result = tryRunGit(["log", "--oneline", "HEAD", "--not", "--remotes=origin"], cwd);
|
|
281
|
+
}
|
|
282
|
+
if (!result.ok || !result.stdout)
|
|
283
|
+
return [];
|
|
284
|
+
return result.stdout.split(`
|
|
285
|
+
`).filter((line) => line.length > 0).map((line) => {
|
|
286
|
+
const spaceIdx = line.indexOf(" ");
|
|
287
|
+
return {
|
|
288
|
+
hash: line.slice(0, spaceIdx),
|
|
289
|
+
message: line.slice(spaceIdx + 1)
|
|
290
|
+
};
|
|
291
|
+
});
|
|
292
|
+
}
|
|
270
293
|
}
|
|
271
294
|
var init_git = () => {};
|
|
272
295
|
|
|
@@ -9901,15 +9924,17 @@ function loadLocalProjectConfigOverlay(root) {
|
|
|
9901
9924
|
try {
|
|
9902
9925
|
const text = readLocalConfigFile(root).trim();
|
|
9903
9926
|
if (!text) {
|
|
9904
|
-
return { profiles: {}, lifecycleHooks: {} };
|
|
9927
|
+
return { worktreeRoot: null, profiles: {}, lifecycleHooks: {} };
|
|
9905
9928
|
}
|
|
9906
9929
|
const parsed = parseConfigDocument(text);
|
|
9930
|
+
const ws = isRecord3(parsed.workspace) ? parsed.workspace : null;
|
|
9907
9931
|
return {
|
|
9932
|
+
worktreeRoot: ws && typeof ws.worktreeRoot === "string" ? ws.worktreeRoot : null,
|
|
9908
9933
|
profiles: parseProfiles(parsed.profiles, false),
|
|
9909
9934
|
lifecycleHooks: parseLifecycleHooks(parsed.lifecycleHooks)
|
|
9910
9935
|
};
|
|
9911
9936
|
} catch {
|
|
9912
|
-
return { profiles: {}, lifecycleHooks: {} };
|
|
9937
|
+
return { worktreeRoot: null, profiles: {}, lifecycleHooks: {} };
|
|
9913
9938
|
}
|
|
9914
9939
|
}
|
|
9915
9940
|
function mergeHookCommand(projectCommand, localCommand) {
|
|
@@ -9953,6 +9978,9 @@ function loadConfig(dir, options = {}) {
|
|
|
9953
9978
|
const localOverlay = loadLocalProjectConfigOverlay(root);
|
|
9954
9979
|
return {
|
|
9955
9980
|
...projectConfig,
|
|
9981
|
+
...localOverlay.worktreeRoot !== null ? {
|
|
9982
|
+
workspace: { ...projectConfig.workspace, worktreeRoot: localOverlay.worktreeRoot }
|
|
9983
|
+
} : {},
|
|
9956
9984
|
profiles: {
|
|
9957
9985
|
...cloneProfiles(projectConfig.profiles),
|
|
9958
9986
|
...cloneProfiles(localOverlay.profiles)
|
|
@@ -12444,7 +12472,7 @@ import { fileURLToPath } from "url";
|
|
|
12444
12472
|
// package.json
|
|
12445
12473
|
var package_default = {
|
|
12446
12474
|
name: "webmux",
|
|
12447
|
-
version: "0.
|
|
12475
|
+
version: "0.18.0",
|
|
12448
12476
|
description: "Web dashboard for workmux \u2014 browser UI with embedded terminals, PR monitoring, and CI integration",
|
|
12449
12477
|
type: "module",
|
|
12450
12478
|
repository: {
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-outline-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-surface:#0d1117;--color-sidebar:#161b22;--color-topbar:#1c2128;--color-hover:#21262d;--color-active:#1f6feb33;--color-edge:#30363d;--color-primary:#e6edf3;--color-muted:#8b949e;--color-accent:#58a6ff;--color-merged:#a78bfa;--color-danger:#f85149;--color-success:#3fb950;--color-warning:#d29922}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing) * 0)}.-top-0\.5{top:calc(var(--spacing) * -.5)}.top-2{top:calc(var(--spacing) * 2)}.-right-0\.5{right:calc(var(--spacing) * -.5)}.right-2{right:calc(var(--spacing) * 2)}.right-4{right:calc(var(--spacing) * 4)}.bottom-4{bottom:calc(var(--spacing) * 4)}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing) * 0)}.-mt-2{margin-top:calc(var(--spacing) * -2)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.-ml-1{margin-left:calc(var(--spacing) * -1)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-3{margin-left:calc(var(--spacing) * 3)}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-dvh{height:100dvh}.max-h-48{max-height:calc(var(--spacing) * 48)}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-\[60vh\]{max-height:60vh}.max-h-\[300px\]{max-height:300px}.max-h-\[400px\]{max-height:400px}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-12{min-height:calc(var(--spacing) * 12)}.w-1{width:calc(var(--spacing) * 1)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-8{width:calc(var(--spacing) * 8)}.w-\[90\%\]{width:90%}.w-full{width:100%}.max-w-\[90\%\]{max-width:90%}.max-w-\[380px\]{max-width:380px}.max-w-\[560px\]{max-width:560px}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:calc(var(--spacing) * 0)}.flex-1{flex:1}.flex-shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.cursor-col-resize{cursor:col-resize}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-y{resize:vertical}.list-none{list-style-type:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-\[var\(--color-accent\)\],.border-accent{border-color:var(--color-accent)}.border-accent\/40{border-color:#58a6ff66}@supports (color:color-mix(in lab,red,red)){.border-accent\/40{border-color:color-mix(in oklab,var(--color-accent) 40%,transparent)}}.border-danger{border-color:var(--color-danger)}.border-danger\/35{border-color:#f8514959}@supports (color:color-mix(in lab,red,red)){.border-danger\/35{border-color:color-mix(in oklab,var(--color-danger) 35%,transparent)}}.border-danger\/40{border-color:#f8514966}@supports (color:color-mix(in lab,red,red)){.border-danger\/40{border-color:color-mix(in oklab,var(--color-danger) 40%,transparent)}}.border-edge{border-color:var(--color-edge)}.border-merged\/35{border-color:#a78bfa59}@supports (color:color-mix(in lab,red,red)){.border-merged\/35{border-color:color-mix(in oklab,var(--color-merged) 35%,transparent)}}.border-success\/30{border-color:#3fb9504d}@supports (color:color-mix(in lab,red,red)){.border-success\/30{border-color:color-mix(in oklab,var(--color-success) 30%,transparent)}}.border-success\/40{border-color:#3fb95066}@supports (color:color-mix(in lab,red,red)){.border-success\/40{border-color:color-mix(in oklab,var(--color-success) 40%,transparent)}}.border-transparent{border-color:#0000}.border-warning\/40{border-color:#d2992266}@supports (color:color-mix(in lab,red,red)){.border-warning\/40{border-color:color-mix(in oklab,var(--color-warning) 40%,transparent)}}.bg-accent{background-color:var(--color-accent)}.bg-accent\/10{background-color:#58a6ff1a}@supports (color:color-mix(in lab,red,red)){.bg-accent\/10{background-color:color-mix(in oklab,var(--color-accent) 10%,transparent)}}.bg-active{background-color:var(--color-active)}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.bg-danger{background-color:var(--color-danger)}.bg-danger\/5{background-color:#f851490d}@supports (color:color-mix(in lab,red,red)){.bg-danger\/5{background-color:color-mix(in oklab,var(--color-danger) 5%,transparent)}}.bg-danger\/15{background-color:#f8514926}@supports (color:color-mix(in lab,red,red)){.bg-danger\/15{background-color:color-mix(in oklab,var(--color-danger) 15%,transparent)}}.bg-danger\/20{background-color:#f8514933}@supports (color:color-mix(in lab,red,red)){.bg-danger\/20{background-color:color-mix(in oklab,var(--color-danger) 20%,transparent)}}.bg-hover{background-color:var(--color-hover)}.bg-merged\/8{background-color:#a78bfa14}@supports (color:color-mix(in lab,red,red)){.bg-merged\/8{background-color:color-mix(in oklab,var(--color-merged) 8%,transparent)}}.bg-merged\/20{background-color:#a78bfa33}@supports (color:color-mix(in lab,red,red)){.bg-merged\/20{background-color:color-mix(in oklab,var(--color-merged) 20%,transparent)}}.bg-muted{background-color:var(--color-muted)}.bg-muted\/20{background-color:#8b949e33}@supports (color:color-mix(in lab,red,red)){.bg-muted\/20{background-color:color-mix(in oklab,var(--color-muted) 20%,transparent)}}.bg-sidebar{background-color:var(--color-sidebar)}.bg-success{background-color:var(--color-success)}.bg-success\/5{background-color:#3fb9500d}@supports (color:color-mix(in lab,red,red)){.bg-success\/5{background-color:color-mix(in oklab,var(--color-success) 5%,transparent)}}.bg-success\/15{background-color:#3fb95026}@supports (color:color-mix(in lab,red,red)){.bg-success\/15{background-color:color-mix(in oklab,var(--color-success) 15%,transparent)}}.bg-success\/20{background-color:#3fb95033}@supports (color:color-mix(in lab,red,red)){.bg-success\/20{background-color:color-mix(in oklab,var(--color-success) 20%,transparent)}}.bg-surface{background-color:var(--color-surface)}.bg-surface\/60{background-color:#0d111799}@supports (color:color-mix(in lab,red,red)){.bg-surface\/60{background-color:color-mix(in oklab,var(--color-surface) 60%,transparent)}}.bg-topbar{background-color:var(--color-topbar)}.bg-transparent{background-color:#0000}.bg-warning{background-color:var(--color-warning)}.bg-warning\/5{background-color:#d299220d}@supports (color:color-mix(in lab,red,red)){.bg-warning\/5{background-color:color-mix(in oklab,var(--color-warning) 5%,transparent)}}.bg-warning\/15{background-color:#d2992226}@supports (color:color-mix(in lab,red,red)){.bg-warning\/15{background-color:color-mix(in oklab,var(--color-warning) 15%,transparent)}}.p-0{padding:calc(var(--spacing) * 0)}.p-1{padding:calc(var(--spacing) * 1)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-8{padding-block:calc(var(--spacing) * 8)}.pr-5{padding-right:calc(var(--spacing) * 5)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.08em\]{--tw-tracking:.08em;letter-spacing:.08em}.whitespace-pre-wrap{white-space:pre-wrap}.text-accent{color:var(--color-accent)}.text-accent\/60{color:#58a6ff99}@supports (color:color-mix(in lab,red,red)){.text-accent\/60{color:color-mix(in oklab,var(--color-accent) 60%,transparent)}}.text-accent\/80{color:#58a6ffcc}@supports (color:color-mix(in lab,red,red)){.text-accent\/80{color:color-mix(in oklab,var(--color-accent) 80%,transparent)}}.text-danger{color:var(--color-danger)}.text-inherit{color:inherit}.text-merged{color:var(--color-merged)}.text-muted{color:var(--color-muted)}.text-muted\/50{color:#8b949e80}@supports (color:color-mix(in lab,red,red)){.text-muted\/50{color:color-mix(in oklab,var(--color-muted) 50%,transparent)}}.text-primary{color:var(--color-primary)}.text-primary\/80{color:#e6edf3cc}@supports (color:color-mix(in lab,red,red)){.text-primary\/80{color:color-mix(in oklab,var(--color-primary) 80%,transparent)}}.text-success{color:var(--color-success)}.text-warning{color:var(--color-warning)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.no-underline{text-decoration-line:none}.accent-\[var\(--accent\)\]{accent-color:var(--accent)}.accent-accent{accent-color:var(--color-accent)}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\:text-muted::placeholder{color:var(--color-muted)}.placeholder\:text-muted\/50::placeholder{color:#8b949e80}@supports (color:color-mix(in lab,red,red)){.placeholder\:text-muted\/50::placeholder{color:color-mix(in oklab,var(--color-muted) 50%,transparent)}}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media(hover:hover){.hover\:border-edge:hover{border-color:var(--color-edge)}.hover\:bg-accent\/10:hover{background-color:#58a6ff1a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-accent\/10:hover{background-color:color-mix(in oklab,var(--color-accent) 10%,transparent)}}.hover\:bg-accent\/50:hover{background-color:#58a6ff80}@supports (color:color-mix(in lab,red,red)){.hover\:bg-accent\/50:hover{background-color:color-mix(in oklab,var(--color-accent) 50%,transparent)}}.hover\:bg-danger\/10:hover{background-color:#f851491a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-danger\/10:hover{background-color:color-mix(in oklab,var(--color-danger) 10%,transparent)}}.hover\:bg-hover:hover{background-color:var(--color-hover)}.hover\:bg-warning\/10:hover{background-color:#d299221a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-warning\/10:hover{background-color:color-mix(in oklab,var(--color-warning) 10%,transparent)}}.hover\:text-danger:hover{color:var(--color-danger)}.hover\:text-primary:hover{color:var(--color-primary)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-90:hover{opacity:.9}}.focus\:border-accent:focus{border-color:var(--color-accent)}.focus-visible\:z-10:focus-visible{z-index:10}.focus-visible\:bg-hover:focus-visible{background-color:var(--color-hover)}.focus-visible\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-accent:focus-visible{--tw-ring-color:var(--color-accent)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-inset:focus-visible{--tw-ring-inset:inset}.active\:bg-active:active{background-color:var(--color-active)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}@media(min-width:48rem){.md\:max-h-\[70vh\]{max-height:70vh}.md\:max-w-\[440px\]{max-width:440px}}}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif}dialog[open]{margin:auto}dialog::backdrop{background:#0009}dialog textarea{font-family:inherit}dialog textarea:focus{border-color:var(--color-accent);outline:none}@keyframes spin{to{transform:rotate(360deg)}}.spinner{border:1.5px solid;border-top-color:#0000;border-radius:50%;width:12px;height:12px;animation:.6s linear infinite spin;display:inline-block}.xterm{width:100%;height:100%}.xterm .xterm-viewport{overscroll-behavior-y:contain}@media(max-width:768px){html,body{width:100%;height:100dvh;position:fixed;overflow:hidden}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@keyframes pulse{50%{opacity:.5}}.more-dropdown.svelte-gwjq7z{position:absolute;top:100%;right:0;margin-top:.25rem;width:max-content;max-width:80vw;border-radius:.5rem;border:1px solid var(--color-edge);background:var(--color-topbar);box-shadow:0 4px 12px #0006;z-index:50}.bell-dropdown.svelte-gwjq7z{position:absolute;top:100%;right:0;margin-top:.25rem;width:18rem;border-radius:.5rem;border:1px solid var(--color-edge);background:var(--color-topbar);box-shadow:0 4px 12px #0006;z-index:50}/**
|
|
2
|
+
* Copyright (c) 2014 The xterm.js authors. All rights reserved.
|
|
3
|
+
* Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)
|
|
4
|
+
* https://github.com/chjj/term.js
|
|
5
|
+
* @license MIT
|
|
6
|
+
*
|
|
7
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
8
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
9
|
+
* in the Software without restriction, including without limitation the rights
|
|
10
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
11
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
12
|
+
* furnished to do so, subject to the following conditions:
|
|
13
|
+
*
|
|
14
|
+
* The above copyright notice and this permission notice shall be included in
|
|
15
|
+
* all copies or substantial portions of the Software.
|
|
16
|
+
*
|
|
17
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
18
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
19
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
20
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
21
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
22
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
23
|
+
* THE SOFTWARE.
|
|
24
|
+
*
|
|
25
|
+
* Originally forked from (with the author's permission):
|
|
26
|
+
* Fabrice Bellard's javascript vt100 for jslinux:
|
|
27
|
+
* http://bellard.org/jslinux/
|
|
28
|
+
* Copyright (c) 2011 Fabrice Bellard
|
|
29
|
+
* The original design remains. The terminal itself
|
|
30
|
+
* has been extended to include xterm CSI codes, among
|
|
31
|
+
* other features.
|
|
32
|
+
*/.xterm{cursor:text;position:relative;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;right:0;left:0;top:0;bottom:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm .xterm-scroll-area{visibility:hidden}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{position:absolute;left:0;top:0;bottom:0;right:0;z-index:10;color:transparent;pointer-events:none}.xterm .xterm-accessibility-tree:not(.debug) *::selection{color:transparent}.xterm .xterm-accessibility-tree{-webkit-user-select:text;user-select:text;white-space:pre}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{text-decoration:double underline}.xterm-underline-3{text-decoration:wavy underline}.xterm-underline-4{text-decoration:dotted underline}.xterm-underline-5{text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{text-decoration:overline double underline}.xterm-overline.xterm-underline-3{text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;position:absolute;top:0;right:0;pointer-events:none}.xterm-decoration-top{z-index:2;position:relative}.toggle.svelte-1ljwtyv{position:relative;width:32px;height:18px;border-radius:9px;border:1px solid var(--color-edge);background:var(--color-hover);cursor:pointer;padding:0;transition:background .15s,border-color .15s;flex-shrink:0}.toggle.svelte-1ljwtyv:disabled{opacity:.5;cursor:not-allowed}.toggle.on.svelte-1ljwtyv{background:var(--color-accent);border-color:var(--color-accent)}.knob.svelte-1ljwtyv{position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;background:var(--color-primary);transition:transform .15s}.toggle.svelte-1ljwtyv:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.toggle.on.svelte-1ljwtyv .knob:where(.svelte-1ljwtyv){transform:translate(14px)}:host,:root{--d2h-bg-color:#fff;--d2h-border-color:#ddd;--d2h-dim-color:rgba(0,0,0,.3);--d2h-line-border-color:#eee;--d2h-file-header-bg-color:#f7f7f7;--d2h-file-header-border-color:#d8d8d8;--d2h-empty-placeholder-bg-color:#f1f1f1;--d2h-empty-placeholder-border-color:#e1e1e1;--d2h-selected-color:#c8e1ff;--d2h-ins-bg-color:#dfd;--d2h-ins-border-color:#b4e2b4;--d2h-ins-highlight-bg-color:#97f295;--d2h-ins-label-color:#399839;--d2h-del-bg-color:#fee8e9;--d2h-del-border-color:#e9aeae;--d2h-del-highlight-bg-color:#ffb6ba;--d2h-del-label-color:#c33;--d2h-change-del-color:#fdf2d0;--d2h-change-ins-color:#ded;--d2h-info-bg-color:#f8fafd;--d2h-info-border-color:#d5e4f2;--d2h-change-label-color:#d0b44c;--d2h-moved-label-color:#3572b0;--d2h-dark-color:#e6edf3;--d2h-dark-bg-color:#0d1117;--d2h-dark-border-color:#30363d;--d2h-dark-dim-color:#6e7681;--d2h-dark-line-border-color:#21262d;--d2h-dark-file-header-bg-color:#161b22;--d2h-dark-file-header-border-color:#30363d;--d2h-dark-empty-placeholder-bg-color:hsla(215,8%,47%,.1);--d2h-dark-empty-placeholder-border-color:#30363d;--d2h-dark-selected-color:rgba(56,139,253,.1);--d2h-dark-ins-bg-color:rgba(46,160,67,.15);--d2h-dark-ins-border-color:rgba(46,160,67,.4);--d2h-dark-ins-highlight-bg-color:rgba(46,160,67,.4);--d2h-dark-ins-label-color:#3fb950;--d2h-dark-del-bg-color:rgba(248,81,73,.1);--d2h-dark-del-border-color:rgba(248,81,73,.4);--d2h-dark-del-highlight-bg-color:rgba(248,81,73,.4);--d2h-dark-del-label-color:#f85149;--d2h-dark-change-del-color:rgba(210,153,34,.2);--d2h-dark-change-ins-color:rgba(46,160,67,.25);--d2h-dark-info-bg-color:rgba(56,139,253,.1);--d2h-dark-info-border-color:rgba(56,139,253,.4);--d2h-dark-change-label-color:#d29922;--d2h-dark-moved-label-color:#3572b0}.d2h-wrapper{text-align:left}.d2h-file-header{background-color:#f7f7f7;background-color:var(--d2h-file-header-bg-color);border-bottom:1px solid #d8d8d8;border-bottom:1px solid var(--d2h-file-header-border-color);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;height:35px;padding:5px 10px}.d2h-file-header.d2h-sticky-header{position:sticky;top:0;z-index:1}.d2h-file-stats{display:-webkit-box;display:-ms-flexbox;display:flex;font-size:14px;margin-left:auto}.d2h-lines-added{border:1px solid #b4e2b4;border:1px solid var(--d2h-ins-border-color);border-radius:5px 0 0 5px;color:#399839;color:var(--d2h-ins-label-color);padding:2px;text-align:right;vertical-align:middle}.d2h-lines-deleted{border:1px solid #e9aeae;border:1px solid var(--d2h-del-border-color);border-radius:0 5px 5px 0;color:#c33;color:var(--d2h-del-label-color);margin-left:1px;padding:2px;text-align:left;vertical-align:middle}.d2h-file-name-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:15px;width:100%}.d2h-file-name{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.d2h-file-wrapper{border:1px solid #ddd;border:1px solid var(--d2h-border-color);border-radius:3px;margin-bottom:1em}.d2h-file-collapse{-webkit-box-pack:end;-ms-flex-pack:end;cursor:pointer;display:none;font-size:12px;justify-content:flex-end;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border:1px solid #ddd;border:1px solid var(--d2h-border-color);border-radius:3px;padding:4px 8px}.d2h-file-collapse.d2h-selected{background-color:#c8e1ff;background-color:var(--d2h-selected-color)}.d2h-file-collapse-input{margin:0 4px 0 0}.d2h-diff-table{border-collapse:collapse;font-family:Menlo,Consolas,monospace;font-size:13px;width:100%}.d2h-files-diff{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.d2h-file-diff{overflow-y:hidden}.d2h-file-diff.d2h-d-none,.d2h-files-diff.d2h-d-none{display:none}.d2h-file-side-diff{display:inline-block;overflow-x:scroll;overflow-y:hidden;width:50%}.d2h-code-line{padding:0 8em;width:calc(100% - 16em)}.d2h-code-line,.d2h-code-side-line{display:inline-block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap}.d2h-code-side-line{padding:0 4.5em;width:calc(100% - 9em)}.d2h-code-line-ctn{background:none;display:inline-block;padding:0;word-wrap:normal;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;vertical-align:middle;white-space:pre;width:100%}.d2h-code-line del,.d2h-code-side-line del{background-color:#ffb6ba;background-color:var(--d2h-del-highlight-bg-color)}.d2h-code-line del,.d2h-code-line ins,.d2h-code-side-line del,.d2h-code-side-line ins{border-radius:.2em;display:inline-block;margin-top:-1px;-webkit-text-decoration:none;text-decoration:none}.d2h-code-line ins,.d2h-code-side-line ins{background-color:#97f295;background-color:var(--d2h-ins-highlight-bg-color);text-align:left}.d2h-code-line-prefix{background:none;display:inline;padding:0;word-wrap:normal;white-space:pre}.line-num1{float:left}.line-num1,.line-num2{-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;padding:0 .5em;text-overflow:ellipsis;width:3.5em}.line-num2{float:right}.d2h-code-linenumber{background-color:#fff;background-color:var(--d2h-bg-color);border:solid #eee;border:solid var(--d2h-line-border-color);border-width:0 1px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#0000004d;color:var(--d2h-dim-color);cursor:pointer;display:inline-block;position:absolute;text-align:right;width:7.5em}.d2h-code-linenumber:after{content:""}.d2h-code-side-linenumber{background-color:#fff;background-color:var(--d2h-bg-color);border:solid #eee;border:solid var(--d2h-line-border-color);border-width:0 1px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#0000004d;color:var(--d2h-dim-color);cursor:pointer;display:inline-block;overflow:hidden;padding:0 .5em;position:absolute;text-align:right;text-overflow:ellipsis;width:4em}.d2h-code-side-linenumber:after{content:""}.d2h-code-side-emptyplaceholder,.d2h-emptyplaceholder{background-color:#f1f1f1;background-color:var(--d2h-empty-placeholder-bg-color);border-color:#e1e1e1;border-color:var(--d2h-empty-placeholder-border-color)}.d2h-code-line-prefix,.d2h-code-linenumber,.d2h-code-side-linenumber,.d2h-emptyplaceholder{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.d2h-code-linenumber,.d2h-code-side-linenumber{direction:rtl}.d2h-del{background-color:#fee8e9;background-color:var(--d2h-del-bg-color);border-color:#e9aeae;border-color:var(--d2h-del-border-color)}.d2h-ins{background-color:#dfd;background-color:var(--d2h-ins-bg-color);border-color:#b4e2b4;border-color:var(--d2h-ins-border-color)}.d2h-info{background-color:#f8fafd;background-color:var(--d2h-info-bg-color);border-color:#d5e4f2;border-color:var(--d2h-info-border-color);color:#0000004d;color:var(--d2h-dim-color)}.d2h-file-diff .d2h-del.d2h-change{background-color:#fdf2d0;background-color:var(--d2h-change-del-color)}.d2h-file-diff .d2h-ins.d2h-change{background-color:#ded;background-color:var(--d2h-change-ins-color)}.d2h-file-list-wrapper{margin-bottom:10px}.d2h-file-list-wrapper a{-webkit-text-decoration:none;text-decoration:none}.d2h-file-list-wrapper a,.d2h-file-list-wrapper a:visited{color:#3572b0;color:var(--d2h-moved-label-color)}.d2h-file-list-header{text-align:left}.d2h-file-list-title{font-weight:700}.d2h-file-list-line{display:-webkit-box;display:-ms-flexbox;display:flex;text-align:left}.d2h-file-list{display:block;list-style:none;margin:0;padding:0}.d2h-file-list>li{border-bottom:1px solid #ddd;border-bottom:1px solid var(--d2h-border-color);margin:0;padding:5px 10px}.d2h-file-list>li:last-child{border-bottom:none}.d2h-file-switch{cursor:pointer;display:none;font-size:10px}.d2h-icon{fill:currentColor;margin-right:10px;vertical-align:middle}.d2h-deleted{color:#c33;color:var(--d2h-del-label-color)}.d2h-added{color:#399839;color:var(--d2h-ins-label-color)}.d2h-changed{color:#d0b44c;color:var(--d2h-change-label-color)}.d2h-moved{color:#3572b0;color:var(--d2h-moved-label-color)}.d2h-tag{background-color:#fff;background-color:var(--d2h-bg-color);display:-webkit-box;display:-ms-flexbox;display:flex;font-size:10px;margin-left:5px;padding:0 2px}.d2h-deleted-tag{border:1px solid #c33;border:1px solid var(--d2h-del-label-color)}.d2h-added-tag{border:1px solid #399839;border:1px solid var(--d2h-ins-label-color)}.d2h-changed-tag{border:1px solid #d0b44c;border:1px solid var(--d2h-change-label-color)}.d2h-moved-tag{border:1px solid #3572b0;border:1px solid var(--d2h-moved-label-color)}.d2h-dark-color-scheme{background-color:#0d1117;background-color:var(--d2h-dark-bg-color);color:#e6edf3;color:var(--d2h-dark-color)}.d2h-dark-color-scheme .d2h-file-header{background-color:#161b22;background-color:var(--d2h-dark-file-header-bg-color);border-bottom:#30363d;border-bottom:var(--d2h-dark-file-header-border-color)}.d2h-dark-color-scheme .d2h-lines-added{border:1px solid rgba(46,160,67,.4);border:1px solid var(--d2h-dark-ins-border-color);color:#3fb950;color:var(--d2h-dark-ins-label-color)}.d2h-dark-color-scheme .d2h-lines-deleted{border:1px solid rgba(248,81,73,.4);border:1px solid var(--d2h-dark-del-border-color);color:#f85149;color:var(--d2h-dark-del-label-color)}.d2h-dark-color-scheme .d2h-code-line del,.d2h-dark-color-scheme .d2h-code-side-line del{background-color:#f8514966;background-color:var(--d2h-dark-del-highlight-bg-color)}.d2h-dark-color-scheme .d2h-code-line ins,.d2h-dark-color-scheme .d2h-code-side-line ins{background-color:#2ea04366;background-color:var(--d2h-dark-ins-highlight-bg-color)}.d2h-dark-color-scheme .d2h-diff-tbody{border-color:#30363d;border-color:var(--d2h-dark-border-color)}.d2h-dark-color-scheme .d2h-code-side-linenumber{background-color:#0d1117;background-color:var(--d2h-dark-bg-color);border-color:#21262d;border-color:var(--d2h-dark-line-border-color);color:#6e7681;color:var(--d2h-dark-dim-color)}.d2h-dark-color-scheme .d2h-files-diff .d2h-code-side-emptyplaceholder,.d2h-dark-color-scheme .d2h-files-diff .d2h-emptyplaceholder{background-color:#6e76811a;background-color:var(--d2h-dark-empty-placeholder-bg-color);border-color:#30363d;border-color:var(--d2h-dark-empty-placeholder-border-color)}.d2h-dark-color-scheme .d2h-code-linenumber{background-color:#0d1117;background-color:var(--d2h-dark-bg-color);border-color:#21262d;border-color:var(--d2h-dark-line-border-color);color:#6e7681;color:var(--d2h-dark-dim-color)}.d2h-dark-color-scheme .d2h-del{background-color:#f851491a;background-color:var(--d2h-dark-del-bg-color);border-color:#f8514966;border-color:var(--d2h-dark-del-border-color)}.d2h-dark-color-scheme .d2h-ins{background-color:#2ea04326;background-color:var(--d2h-dark-ins-bg-color);border-color:#2ea04366;border-color:var(--d2h-dark-ins-border-color)}.d2h-dark-color-scheme .d2h-info{background-color:#388bfd1a;background-color:var(--d2h-dark-info-bg-color);border-color:#388bfd66;border-color:var(--d2h-dark-info-border-color);color:#6e7681;color:var(--d2h-dark-dim-color)}.d2h-dark-color-scheme .d2h-file-diff .d2h-del.d2h-change{background-color:#d2992233;background-color:var(--d2h-dark-change-del-color)}.d2h-dark-color-scheme .d2h-file-diff .d2h-ins.d2h-change{background-color:#2ea04340;background-color:var(--d2h-dark-change-ins-color)}.d2h-dark-color-scheme .d2h-file-wrapper{border:1px solid #30363d;border:1px solid var(--d2h-dark-border-color)}.d2h-dark-color-scheme .d2h-file-collapse{border:1px solid #0d1117;border:1px solid var(--d2h-dark-bg-color)}.d2h-dark-color-scheme .d2h-file-collapse.d2h-selected{background-color:#388bfd1a;background-color:var(--d2h-dark-selected-color)}.d2h-dark-color-scheme .d2h-file-list-wrapper a,.d2h-dark-color-scheme .d2h-file-list-wrapper a:visited{color:#3572b0;color:var(--d2h-dark-moved-label-color)}.d2h-dark-color-scheme .d2h-file-list>li{border-bottom:1px solid #0d1117;border-bottom:1px solid var(--d2h-dark-bg-color)}.d2h-dark-color-scheme .d2h-deleted{color:#f85149;color:var(--d2h-dark-del-label-color)}.d2h-dark-color-scheme .d2h-added{color:#3fb950;color:var(--d2h-dark-ins-label-color)}.d2h-dark-color-scheme .d2h-changed{color:#d29922;color:var(--d2h-dark-change-label-color)}.d2h-dark-color-scheme .d2h-moved{color:#3572b0;color:var(--d2h-dark-moved-label-color)}.d2h-dark-color-scheme .d2h-tag{background-color:#0d1117;background-color:var(--d2h-dark-bg-color)}.d2h-dark-color-scheme .d2h-deleted-tag{border:1px solid #f85149;border:1px solid var(--d2h-dark-del-label-color)}.d2h-dark-color-scheme .d2h-added-tag{border:1px solid #3fb950;border:1px solid var(--d2h-dark-ins-label-color)}.d2h-dark-color-scheme .d2h-changed-tag{border:1px solid #d29922;border:1px solid var(--d2h-dark-change-label-color)}.d2h-dark-color-scheme .d2h-moved-tag{border:1px solid #3572b0;border:1px solid var(--d2h-dark-moved-label-color)}@media(prefers-color-scheme:dark){.d2h-auto-color-scheme{background-color:#0d1117;background-color:var(--d2h-dark-bg-color);color:#e6edf3;color:var(--d2h-dark-color)}.d2h-auto-color-scheme .d2h-file-header{background-color:#161b22;background-color:var(--d2h-dark-file-header-bg-color);border-bottom:#30363d;border-bottom:var(--d2h-dark-file-header-border-color)}.d2h-auto-color-scheme .d2h-lines-added{border:1px solid rgba(46,160,67,.4);border:1px solid var(--d2h-dark-ins-border-color);color:#3fb950;color:var(--d2h-dark-ins-label-color)}.d2h-auto-color-scheme .d2h-lines-deleted{border:1px solid rgba(248,81,73,.4);border:1px solid var(--d2h-dark-del-border-color);color:#f85149;color:var(--d2h-dark-del-label-color)}.d2h-auto-color-scheme .d2h-code-line del,.d2h-auto-color-scheme .d2h-code-side-line del{background-color:#f8514966;background-color:var(--d2h-dark-del-highlight-bg-color)}.d2h-auto-color-scheme .d2h-code-line ins,.d2h-auto-color-scheme .d2h-code-side-line ins{background-color:#2ea04366;background-color:var(--d2h-dark-ins-highlight-bg-color)}.d2h-auto-color-scheme .d2h-diff-tbody{border-color:#30363d;border-color:var(--d2h-dark-border-color)}.d2h-auto-color-scheme .d2h-code-side-linenumber{background-color:#0d1117;background-color:var(--d2h-dark-bg-color);border-color:#21262d;border-color:var(--d2h-dark-line-border-color);color:#6e7681;color:var(--d2h-dark-dim-color)}.d2h-auto-color-scheme .d2h-files-diff .d2h-code-side-emptyplaceholder,.d2h-auto-color-scheme .d2h-files-diff .d2h-emptyplaceholder{background-color:#6e76811a;background-color:var(--d2h-dark-empty-placeholder-bg-color);border-color:#30363d;border-color:var(--d2h-dark-empty-placeholder-border-color)}.d2h-auto-color-scheme .d2h-code-linenumber{background-color:#0d1117;background-color:var(--d2h-dark-bg-color);border-color:#21262d;border-color:var(--d2h-dark-line-border-color);color:#6e7681;color:var(--d2h-dark-dim-color)}.d2h-auto-color-scheme .d2h-del{background-color:#f851491a;background-color:var(--d2h-dark-del-bg-color);border-color:#f8514966;border-color:var(--d2h-dark-del-border-color)}.d2h-auto-color-scheme .d2h-ins{background-color:#2ea04326;background-color:var(--d2h-dark-ins-bg-color);border-color:#2ea04366;border-color:var(--d2h-dark-ins-border-color)}.d2h-auto-color-scheme .d2h-info{background-color:#388bfd1a;background-color:var(--d2h-dark-info-bg-color);border-color:#388bfd66;border-color:var(--d2h-dark-info-border-color);color:#6e7681;color:var(--d2h-dark-dim-color)}.d2h-auto-color-scheme .d2h-file-diff .d2h-del.d2h-change{background-color:#d2992233;background-color:var(--d2h-dark-change-del-color)}.d2h-auto-color-scheme .d2h-file-diff .d2h-ins.d2h-change{background-color:#2ea04340;background-color:var(--d2h-dark-change-ins-color)}.d2h-auto-color-scheme .d2h-file-wrapper{border:1px solid #30363d;border:1px solid var(--d2h-dark-border-color)}.d2h-auto-color-scheme .d2h-file-collapse{border:1px solid #0d1117;border:1px solid var(--d2h-dark-bg-color)}.d2h-auto-color-scheme .d2h-file-collapse.d2h-selected{background-color:#388bfd1a;background-color:var(--d2h-dark-selected-color)}.d2h-auto-color-scheme .d2h-file-list-wrapper a,.d2h-auto-color-scheme .d2h-file-list-wrapper a:visited{color:#3572b0;color:var(--d2h-dark-moved-label-color)}.d2h-auto-color-scheme .d2h-file-list>li{border-bottom:1px solid #0d1117;border-bottom:1px solid var(--d2h-dark-bg-color)}.d2h-dark-color-scheme .d2h-deleted{color:#f85149;color:var(--d2h-dark-del-label-color)}.d2h-auto-color-scheme .d2h-added{color:#3fb950;color:var(--d2h-dark-ins-label-color)}.d2h-auto-color-scheme .d2h-changed{color:#d29922;color:var(--d2h-dark-change-label-color)}.d2h-auto-color-scheme .d2h-moved{color:#3572b0;color:var(--d2h-dark-moved-label-color)}.d2h-auto-color-scheme .d2h-tag{background-color:#0d1117;background-color:var(--d2h-dark-bg-color)}.d2h-auto-color-scheme .d2h-deleted-tag{border:1px solid #f85149;border:1px solid var(--d2h-dark-del-label-color)}.d2h-auto-color-scheme .d2h-added-tag{border:1px solid #3fb950;border:1px solid var(--d2h-dark-ins-label-color)}.d2h-auto-color-scheme .d2h-changed-tag{border:1px solid #d29922;border:1px solid var(--d2h-dark-change-label-color)}.d2h-auto-color-scheme .d2h-moved-tag{border:1px solid #3572b0;border:1px solid var(--d2h-dark-moved-label-color)}}@media(max-width:768px){.diff-dialog{max-width:100vw!important;width:100%!important;height:100dvh;max-height:100dvh;margin:0;border-radius:0!important;font-size:11px}}.tab-btn.svelte-12rjmc4{padding:4px 12px;font-size:11px;border-radius:4px;border:1px solid var(--color-edge);background:transparent;color:var(--color-muted);cursor:pointer}.tab-btn.svelte-12rjmc4:hover{color:var(--color-primary);background:var(--color-hover)}.tab-btn.active.svelte-12rjmc4{background:var(--color-surface);color:var(--color-primary);border-color:var(--color-accent)}.tab-btn.svelte-12rjmc4:disabled{opacity:.4;cursor:default}.tab-btn.svelte-12rjmc4:disabled:hover{color:var(--color-muted);background:transparent}.diff-container.svelte-12rjmc4{font-size:12px}.diff-container.svelte-12rjmc4 .d2h-wrapper{background:transparent}.diff-container.svelte-12rjmc4 .d2h-file-header{background:var(--color-surface);border-color:var(--color-edge);color:var(--color-primary)}.diff-container.svelte-12rjmc4 .d2h-file-name{color:var(--color-primary)}.diff-container.svelte-12rjmc4 .d2h-code-linenumber,.diff-container.svelte-12rjmc4 .d2h-code-line{color:var(--color-primary);font-size:11px}.diff-container.svelte-12rjmc4 .d2h-code-line-ctn{color:var(--color-primary)}.diff-container.svelte-12rjmc4 td.d2h-code-linenumber{border-color:var(--color-edge);position:static}@media(max-width:768px){.diff-container.svelte-12rjmc4{max-height:calc(100dvh - 8rem)!important;font-size:10px}.diff-container.svelte-12rjmc4 .d2h-code-line,.diff-container.svelte-12rjmc4 .d2h-code-linenumber{font-size:10px;padding:0 4px}}.pane-bar.svelte-19vlwaa{padding-bottom:env(safe-area-inset-bottom,0px)}.pane-active.svelte-19vlwaa{box-shadow:inset 0 2px 0 0 var(--color-accent)}.toast.svelte-1974bvt{display:flex;align-items:flex-start;gap:.5rem;padding:.75rem;border-radius:.5rem;border:1px solid var(--color-edge);background:var(--color-topbar);box-shadow:0 4px 12px #0006;animation:svelte-1974bvt-slide-in .2s ease-out}@keyframes svelte-1974bvt-slide-in{0%{opacity:0;transform:translate(1rem)}to{opacity:1;transform:translate(0)}}
|