dsh-context 0.24.0 → 0.25.2
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/lib/client.js +240 -205
- package/lib/index.d.ts +15 -3
- package/lib/index.js +29 -5
- package/package.json +5 -3
- package/lib/client.js.map +0 -1
package/lib/client.js
CHANGED
|
@@ -26,9 +26,10 @@ window.__ModuleLoader__.load({
|
|
|
26
26
|
"stats.injects": "注入",
|
|
27
27
|
"stats.compactions": "压缩",
|
|
28
28
|
"stats.prunes": "剪枝",
|
|
29
|
+
"stats.images": "图片",
|
|
29
30
|
"stats.cacheHit": "缓存命中",
|
|
30
31
|
"stats.cost": "预估费用",
|
|
31
|
-
"stats.costTip": "按 DeepSeek
|
|
32
|
+
"stats.costTip": "按 DeepSeek 官方刊例价估算整个会话的累计费用:输入区分缓存命中/未命中,输出含思考;按请求时间区分高峰(北京时间工作日 9:00–12:00、14:00–18:00)与空闲时段(半价,周末全天均为空闲时段)。适用于 deepseek-v4-flash / deepseek-v4-pro(不限 provider),价格写死在代码中,仅供参考。",
|
|
32
33
|
"stats.costPriceHead": "每百万 tokens 价格(高峰 | 空闲半价):",
|
|
33
34
|
"stats.costHit": "命中",
|
|
34
35
|
"stats.costMiss": "未命中",
|
|
@@ -112,14 +113,18 @@ window.__ModuleLoader__.load({
|
|
|
112
113
|
"rich.toRaw": "查看原始文本",
|
|
113
114
|
"block.thinking": "思考",
|
|
114
115
|
"block.answer": "回答",
|
|
116
|
+
"block.content": "内容",
|
|
117
|
+
"block.result": "结果",
|
|
118
|
+
"block.summary": "摘要",
|
|
115
119
|
"attach.images": "图片附件",
|
|
116
120
|
"attach.other": "其他内容",
|
|
117
121
|
"attach.image": "图片",
|
|
118
122
|
"attach.open": "查看原图",
|
|
119
123
|
"attach.loading": "…",
|
|
120
124
|
"attach.loadFailed": "加载失败 · 点击重试",
|
|
121
|
-
"attach.
|
|
122
|
-
"attach.
|
|
125
|
+
"attach.raw": "原图",
|
|
126
|
+
"attach.sent": "发送",
|
|
127
|
+
"attach.token": "Token",
|
|
123
128
|
"attach.tokensTip": "按 DeepSeek 官方图片尺寸换算(单图上限 384 tokens)估算的 token 消耗"
|
|
124
129
|
};
|
|
125
130
|
const DICT_EN = {
|
|
@@ -143,9 +148,10 @@ window.__ModuleLoader__.load({
|
|
|
143
148
|
"stats.injects": "Injections",
|
|
144
149
|
"stats.compactions": "Compactions",
|
|
145
150
|
"stats.prunes": "Prunes",
|
|
146
|
-
"stats.
|
|
147
|
-
"stats.
|
|
148
|
-
"stats.
|
|
151
|
+
"stats.images": "Images",
|
|
152
|
+
"stats.cacheHit": "Cache Hit",
|
|
153
|
+
"stats.cost": "Cost",
|
|
154
|
+
"stats.costTip": "Rough cumulative cost of the whole session at DeepSeek’s list prices: input split by cache hit/miss, output includes reasoning; each request is priced at the peak (Beijing Time weekdays 09:00–12:00, 14:00–18:00) or half-price off-peak rate by its time — weekends bill at off-peak all day. Applies to deepseek-v4-flash / deepseek-v4-pro on any provider; prices are hardcoded, for reference only.",
|
|
149
155
|
"stats.costPriceHead": "Per-1M-token rates (peak | off-peak at half price):",
|
|
150
156
|
"stats.costHit": "hit",
|
|
151
157
|
"stats.costMiss": "miss",
|
|
@@ -229,14 +235,18 @@ window.__ModuleLoader__.load({
|
|
|
229
235
|
"rich.toRaw": "View Raw Text",
|
|
230
236
|
"block.thinking": "Reasoning",
|
|
231
237
|
"block.answer": "Response",
|
|
238
|
+
"block.content": "Content",
|
|
239
|
+
"block.result": "Result",
|
|
240
|
+
"block.summary": "Summary",
|
|
232
241
|
"attach.images": "Images",
|
|
233
242
|
"attach.other": "Other content",
|
|
234
243
|
"attach.image": "Image",
|
|
235
244
|
"attach.open": "Open full image",
|
|
236
245
|
"attach.loading": "…",
|
|
237
246
|
"attach.loadFailed": "Load failed · click to retry",
|
|
238
|
-
"attach.
|
|
239
|
-
"attach.
|
|
247
|
+
"attach.raw": "Raw",
|
|
248
|
+
"attach.sent": "Sent",
|
|
249
|
+
"attach.token": "Token",
|
|
240
250
|
"attach.tokensTip": "Estimated token cost via DeepSeek's official image-size conversion (384-token cap per image)"
|
|
241
251
|
};
|
|
242
252
|
//#endregion
|
|
@@ -520,6 +530,7 @@ window.__ModuleLoader__.load({
|
|
|
520
530
|
events: objectsOf(data.events),
|
|
521
531
|
nodes: objectsOf(data.nodes),
|
|
522
532
|
droppedNodes: numOf(data.droppedNodes),
|
|
533
|
+
...typeof data.images === "number" ? { images: data.images } : {},
|
|
523
534
|
archive: objectsOf(data.archive),
|
|
524
535
|
...cost !== void 0 ? { cost } : {},
|
|
525
536
|
...typeof data.surfaceFloor === "number" ? { surfaceFloor: data.surfaceFloor } : {},
|
|
@@ -852,8 +863,10 @@ window.__ModuleLoader__.load({
|
|
|
852
863
|
/**
|
|
853
864
|
* One attachment card: a 64px cover tile (click opens the full image in a
|
|
854
865
|
* new tab; load failures retry on click) beside a metadata column — display
|
|
855
|
-
* name,
|
|
856
|
-
* records
|
|
866
|
+
* name, then one labeled row per known fact: Raw (the pre-normalization
|
|
867
|
+
* raster dsh 0.1.1 records when normalization reduced the image), Sent (the
|
|
868
|
+
* normalized raster the model receives, with its stored byte size), and the
|
|
869
|
+
* estimated provider-billed tokens. Unknown facts leave no row behind.
|
|
857
870
|
*/
|
|
858
871
|
function makeImageCard(kit) {
|
|
859
872
|
const { t, fmt } = kit;
|
|
@@ -881,13 +894,24 @@ window.__ModuleLoader__.load({
|
|
|
881
894
|
attempt
|
|
882
895
|
]);
|
|
883
896
|
const name = attachment.name ?? t("attach.image");
|
|
884
|
-
const
|
|
885
|
-
const
|
|
886
|
-
const
|
|
887
|
-
if (
|
|
888
|
-
|
|
889
|
-
|
|
897
|
+
const dimsOf = (w, h) => w !== void 0 && h !== void 0 ? `${w}×${h}` : null;
|
|
898
|
+
const rows = [];
|
|
899
|
+
const raw = attachment.originalDimensions !== void 0 ? dimsOf(attachment.originalDimensions.width, attachment.originalDimensions.height) : null;
|
|
900
|
+
if (raw !== null) rows.push({
|
|
901
|
+
label: t("attach.raw"),
|
|
902
|
+
value: raw
|
|
903
|
+
});
|
|
904
|
+
const sent = dimsOf(attachment.width, attachment.height);
|
|
905
|
+
if (sent !== null) rows.push({
|
|
906
|
+
label: t("attach.sent"),
|
|
907
|
+
value: attachment.bytes !== void 0 ? `${sent} · ${fmtBytes(attachment.bytes)}` : sent
|
|
908
|
+
});
|
|
890
909
|
const tokens = attachment.width !== void 0 && attachment.height !== void 0 ? estimateImageTokens(attachment.width, attachment.height) : null;
|
|
910
|
+
if (tokens !== null) rows.push({
|
|
911
|
+
label: t("attach.token"),
|
|
912
|
+
value: `≈${fmt(tokens)}`,
|
|
913
|
+
tip: t("attach.tokensTip")
|
|
914
|
+
});
|
|
891
915
|
const open = () => {
|
|
892
916
|
if (src === null) return;
|
|
893
917
|
try {
|
|
@@ -907,10 +931,11 @@ window.__ModuleLoader__.load({
|
|
|
907
931
|
}) : /* @__PURE__ */ React.createElement("span", { className: error ? "lc-att-err" : "lc-att-ph" }, error ? "⚠" : load === void 0 ? "🖼" : t("attach.loading"))), /* @__PURE__ */ React.createElement("div", { className: "lc-att-meta" }, /* @__PURE__ */ React.createElement("span", {
|
|
908
932
|
className: "lc-att-name",
|
|
909
933
|
title: name
|
|
910
|
-
}, name),
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
934
|
+
}, name), rows.map((r) => /* @__PURE__ */ React.createElement("span", {
|
|
935
|
+
key: r.label,
|
|
936
|
+
className: "lc-att-row",
|
|
937
|
+
title: r.tip
|
|
938
|
+
}, /* @__PURE__ */ React.createElement("b", { className: "lc-att-row-label" }, r.label), r.value))));
|
|
914
939
|
};
|
|
915
940
|
}
|
|
916
941
|
//#endregion
|
|
@@ -930,22 +955,14 @@ window.__ModuleLoader__.load({
|
|
|
930
955
|
props.onPick(m);
|
|
931
956
|
}
|
|
932
957
|
}, label);
|
|
933
|
-
return /* @__PURE__ */ React.createElement("span", { className: "lc-rich-seg"
|
|
958
|
+
return /* @__PURE__ */ React.createElement("span", { className: "lc-rich-seg" }, seg("raw", t("rich.raw"), t("rich.toRaw")), seg("md", t("rich.md"), t("rich.toMd")));
|
|
934
959
|
}
|
|
935
960
|
function RichText(props) {
|
|
936
|
-
if (props.mode === "md") return /* @__PURE__ */ React.createElement("div", { className:
|
|
937
|
-
return /* @__PURE__ */ React.createElement("pre", { className:
|
|
938
|
-
}
|
|
939
|
-
function RichCard(props) {
|
|
940
|
-
const [mode, setMode] = useRichMode();
|
|
941
|
-
return /* @__PURE__ */ React.createElement("div", { className: props.className ?? "lc-br-content" }, /* @__PURE__ */ React.createElement(RichSwitch, {
|
|
942
|
-
mode,
|
|
943
|
-
onPick: setMode
|
|
944
|
-
}), props.render(mode));
|
|
961
|
+
if (props.mode === "md") return /* @__PURE__ */ React.createElement("div", { className: "lc-ts-desc-md" }, /* @__PURE__ */ React.createElement(_deepseek_ai_dsh_client_ui_primitives.MarkdownText, { text: props.text }));
|
|
962
|
+
return /* @__PURE__ */ React.createElement("pre", { className: "lc-ts-desc-body" }, props.text);
|
|
945
963
|
}
|
|
946
964
|
return {
|
|
947
965
|
RichText,
|
|
948
|
-
RichCard,
|
|
949
966
|
RichSwitch,
|
|
950
967
|
useRichMode
|
|
951
968
|
};
|
|
@@ -1013,16 +1030,49 @@ window.__ModuleLoader__.load({
|
|
|
1013
1030
|
return /* @__PURE__ */ React.createElement("div", { className: "lc-ts-param-row" }, /* @__PURE__ */ React.createElement("span", { className: "lc-ts-param-name" }, props.name), /* @__PURE__ */ React.createElement("span", { className: "lc-ts-param-type" }, typeLabel), /* @__PURE__ */ React.createElement("span", { className: props.required ? "lc-ts-param-req" : "lc-ts-param-req-off" }, props.required ? "✓" : "·"), typeof desc === "string" && desc !== "" ? /* @__PURE__ */ React.createElement("span", { className: "lc-ts-param-desc" }, desc) : null);
|
|
1014
1031
|
}
|
|
1015
1032
|
/**
|
|
1033
|
+
* Section — the ONE detail chrome of the Context browser: a labeled card
|
|
1034
|
+
* (`lc-ts-card`) whose head carries the section title on the left and the
|
|
1035
|
+
* extras on the right (a count badge and/or the Raw/MD switch), with the
|
|
1036
|
+
* body below. Every expanded element renders as a stack of these — prose,
|
|
1037
|
+
* tool calls, parameter rows, image grids, and raw JSON all share the same
|
|
1038
|
+
* frame, so the reader scans one repeating anatomy instead of a different
|
|
1039
|
+
* layout per content kind.
|
|
1040
|
+
*/
|
|
1041
|
+
function Section(props) {
|
|
1042
|
+
return /* @__PURE__ */ React.createElement("div", { className: "lc-ts-card" }, /* @__PURE__ */ React.createElement("div", { className: "lc-ts-card-head" }, /* @__PURE__ */ React.createElement("b", { className: props.labelClass }, props.label), props.actions ?? null, props.count !== void 0 ? /* @__PURE__ */ React.createElement("span", { className: "lc-ts-card-count" }, props.count) : null), props.children);
|
|
1043
|
+
}
|
|
1044
|
+
/**
|
|
1045
|
+
* TextSection — a prose Section (system prompt, message/injection/summary
|
|
1046
|
+
* body, thinking, answer, tool description): the head's right edge carries
|
|
1047
|
+
* the Raw/MD switch and the body follows the per-card mode.
|
|
1048
|
+
*/
|
|
1049
|
+
function TextSection(props) {
|
|
1050
|
+
const { rich } = props;
|
|
1051
|
+
const [mode, setMode] = rich.useRichMode();
|
|
1052
|
+
return /* @__PURE__ */ React.createElement(Section, {
|
|
1053
|
+
label: props.label,
|
|
1054
|
+
actions: /* @__PURE__ */ React.createElement(rich.RichSwitch, {
|
|
1055
|
+
mode,
|
|
1056
|
+
onPick: setMode
|
|
1057
|
+
})
|
|
1058
|
+
}, /* @__PURE__ */ React.createElement(rich.RichText, {
|
|
1059
|
+
text: props.text,
|
|
1060
|
+
mode
|
|
1061
|
+
}));
|
|
1062
|
+
}
|
|
1063
|
+
/** RawSection — a dimmed text Section without a view switch (structured payloads: tool results, raw JSON). */
|
|
1064
|
+
function RawSection(props) {
|
|
1065
|
+
return /* @__PURE__ */ React.createElement(Section, { label: props.label }, /* @__PURE__ */ React.createElement("pre", { className: "lc-ts-desc-body lc-br-dim" }, props.text));
|
|
1066
|
+
}
|
|
1067
|
+
/**
|
|
1016
1068
|
* The full body of one expanded tool row: description, a parsed parameter
|
|
1017
1069
|
* table (when the schema carries one), and the raw JSON behind a toggle.
|
|
1018
1070
|
* Owns its own open/closed state for the JSON so two expanded tools stay
|
|
1019
|
-
* independent.
|
|
1020
|
-
* toggle in its head (per-card state via `rich.useRichMode`).
|
|
1071
|
+
* independent.
|
|
1021
1072
|
*/
|
|
1022
1073
|
function ToolSchema(props) {
|
|
1023
1074
|
const { rich } = props;
|
|
1024
1075
|
const [jsonOpen, setJsonOpen] = React.useState(false);
|
|
1025
|
-
const [descMode, setDescMode] = rich.useRichMode();
|
|
1026
1076
|
const params = React.useMemo(() => paramsOf(props.schema), [props.schema]);
|
|
1027
1077
|
const rows = React.useMemo(() => {
|
|
1028
1078
|
if (params === null) return [];
|
|
@@ -1042,16 +1092,14 @@ window.__ModuleLoader__.load({
|
|
|
1042
1092
|
return out;
|
|
1043
1093
|
}, [params]);
|
|
1044
1094
|
const schemaJson = React.useMemo(() => props.schema !== void 0 ? JSON.stringify(props.schema, null, 2) : "", [props.schema]);
|
|
1045
|
-
return /* @__PURE__ */ React.createElement(React.Fragment, null, props.description !== void 0 ? /* @__PURE__ */ React.createElement(
|
|
1046
|
-
|
|
1047
|
-
onPick: setDescMode,
|
|
1048
|
-
inHead: true
|
|
1049
|
-
})), /* @__PURE__ */ React.createElement(rich.RichText, {
|
|
1095
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, props.description !== void 0 ? /* @__PURE__ */ React.createElement(TextSection, {
|
|
1096
|
+
label: props.labels.desc,
|
|
1050
1097
|
text: props.description,
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1098
|
+
rich
|
|
1099
|
+
}) : null, params !== null && rows.length > 0 ? /* @__PURE__ */ React.createElement(Section, {
|
|
1100
|
+
label: props.labels.title,
|
|
1101
|
+
count: rows.length
|
|
1102
|
+
}, rows.map((r) => /* @__PURE__ */ React.createElement(ParamRow, {
|
|
1055
1103
|
key: r.name,
|
|
1056
1104
|
name: r.name,
|
|
1057
1105
|
schema: r.schema,
|
|
@@ -1062,62 +1110,87 @@ window.__ModuleLoader__.load({
|
|
|
1062
1110
|
onClick: () => {
|
|
1063
1111
|
setJsonOpen((o) => !o);
|
|
1064
1112
|
}
|
|
1065
|
-
}, (jsonOpen ? "▾ " : "▸ ") + (jsonOpen ? props.labels.hide : props.labels.show)), jsonOpen ? /* @__PURE__ */ React.createElement("pre", { className: "lc-
|
|
1113
|
+
}, (jsonOpen ? "▾ " : "▸ ") + (jsonOpen ? props.labels.hide : props.labels.show)), jsonOpen ? /* @__PURE__ */ React.createElement("pre", { className: "lc-ts-desc-body lc-br-dim" }, schemaJson) : null) : null);
|
|
1066
1114
|
}
|
|
1067
|
-
/**
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1115
|
+
/**
|
|
1116
|
+
* Render one message's content blocks as a uniform Section stack. Both
|
|
1117
|
+
* block vocabularies normalize here — raw durable blocks (`type`: text /
|
|
1118
|
+
* reasoning / tool-call / tool-result / image, arguments) and the
|
|
1119
|
+
* conversation snapshot's assistant blocks (`kind`: text / reasoning /
|
|
1120
|
+
* tool-call / image, argsRaw). Consecutive images group into one grid
|
|
1121
|
+
* section; `richable` bodies (messages, injections) carry the Raw/MD
|
|
1122
|
+
* switch while tool-result payloads stay raw (structured data, not prose)
|
|
1123
|
+
* and dim; nested tool-result blocks flatten into the same flow.
|
|
1124
|
+
*/
|
|
1125
|
+
function BlocksBody(props) {
|
|
1126
|
+
const { rich, img, labels } = props;
|
|
1127
|
+
const out = [];
|
|
1128
|
+
let images = [];
|
|
1129
|
+
const flushImages = () => {
|
|
1130
|
+
if (images.length === 0) return;
|
|
1131
|
+
const group = images;
|
|
1132
|
+
images = [];
|
|
1133
|
+
out.push(/* @__PURE__ */ React.createElement(Section, {
|
|
1134
|
+
key: "img" + String(out.length),
|
|
1135
|
+
label: labels.images,
|
|
1136
|
+
count: group.length
|
|
1137
|
+
}, /* @__PURE__ */ React.createElement("div", { className: "lc-att-grid" }, group.map((a, i) => /* @__PURE__ */ React.createElement(img.Card, {
|
|
1138
|
+
key: `${a.attachmentId}:${i}`,
|
|
1139
|
+
attachment: a,
|
|
1140
|
+
load: img.load
|
|
1141
|
+
})))));
|
|
1142
|
+
};
|
|
1143
|
+
for (const b of props.blocks) {
|
|
1144
|
+
const image = imageRefOf(b);
|
|
1145
|
+
if (image !== null) {
|
|
1146
|
+
images.push(image);
|
|
1147
|
+
continue;
|
|
1148
|
+
}
|
|
1149
|
+
flushImages();
|
|
1071
1150
|
const blk = b !== null && typeof b === "object" ? b : null;
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
key: i,
|
|
1151
|
+
const blockKind = blk !== null ? typeof blk.type === "string" ? blk.type : typeof blk.kind === "string" ? blk.kind : "" : "";
|
|
1152
|
+
if ((blockKind === "text" || blockKind === "reasoning") && typeof blk?.text === "string") {
|
|
1153
|
+
const label = blockKind === "reasoning" ? labels.thinking : props.textLabel;
|
|
1154
|
+
out.push(props.richable ? /* @__PURE__ */ React.createElement(TextSection, {
|
|
1155
|
+
key: out.length,
|
|
1156
|
+
label,
|
|
1079
1157
|
text: blk.text,
|
|
1080
|
-
|
|
1081
|
-
})
|
|
1158
|
+
rich
|
|
1159
|
+
}) : /* @__PURE__ */ React.createElement(RawSection, {
|
|
1160
|
+
key: out.length,
|
|
1161
|
+
label,
|
|
1162
|
+
text: blk.text
|
|
1163
|
+
}));
|
|
1164
|
+
continue;
|
|
1082
1165
|
}
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
return /* @__PURE__ */ React.createElement("div", { className: "lc-ts-card" }, /* @__PURE__ */ React.createElement("div", { className: "lc-ts-card-head" }, /* @__PURE__ */ React.createElement("b", null, props.label), /* @__PURE__ */ React.createElement(rich.RichSwitch, {
|
|
1112
|
-
mode,
|
|
1113
|
-
onPick: setMode,
|
|
1114
|
-
inHead: true
|
|
1115
|
-
})), /* @__PURE__ */ React.createElement(rich.RichText, {
|
|
1116
|
-
text: props.text,
|
|
1117
|
-
mode,
|
|
1118
|
-
rawClass: "lc-ts-desc-body",
|
|
1119
|
-
mdClass: "lc-ts-desc-md"
|
|
1120
|
-
}));
|
|
1166
|
+
if (blockKind === "tool-call") {
|
|
1167
|
+
out.push(/* @__PURE__ */ React.createElement(ToolCallCard, {
|
|
1168
|
+
key: out.length,
|
|
1169
|
+
name: typeof blk?.name === "string" ? blk.name : "?",
|
|
1170
|
+
argsRaw: blk?.argsRaw ?? blk?.arguments
|
|
1171
|
+
}));
|
|
1172
|
+
continue;
|
|
1173
|
+
}
|
|
1174
|
+
if (blockKind === "tool-result" && Array.isArray(blk?.content)) {
|
|
1175
|
+
out.push(/* @__PURE__ */ React.createElement(BlocksBody, {
|
|
1176
|
+
key: out.length,
|
|
1177
|
+
blocks: blk.content,
|
|
1178
|
+
richable: false,
|
|
1179
|
+
textLabel: labels.result,
|
|
1180
|
+
rich,
|
|
1181
|
+
img,
|
|
1182
|
+
labels
|
|
1183
|
+
}));
|
|
1184
|
+
continue;
|
|
1185
|
+
}
|
|
1186
|
+
out.push(/* @__PURE__ */ React.createElement(RawSection, {
|
|
1187
|
+
key: out.length,
|
|
1188
|
+
label: labels.other,
|
|
1189
|
+
text: JSON.stringify(b, null, 2)
|
|
1190
|
+
}));
|
|
1191
|
+
}
|
|
1192
|
+
flushImages();
|
|
1193
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, out);
|
|
1121
1194
|
}
|
|
1122
1195
|
/**
|
|
1123
1196
|
* Parse a call's raw argument payload into an object; null when the payload
|
|
@@ -1176,20 +1249,24 @@ window.__ModuleLoader__.load({
|
|
|
1176
1249
|
return null;
|
|
1177
1250
|
}
|
|
1178
1251
|
/**
|
|
1179
|
-
* One tool call as
|
|
1180
|
-
* card: the head names the call target (with the parsed argument
|
|
1181
|
-
* the body lists the arguments as name/value rows. Arguments that
|
|
1182
|
-
* a parseable JSON object fall back to the raw payload inside the
|
|
1183
|
-
* card. Shared by assistant tool-call blocks (`→`) and the call half
|
|
1184
|
-
* tool result (`←`).
|
|
1252
|
+
* One tool call as a Section, mirroring the tool-definition parameter
|
|
1253
|
+
* card: the head names the call target (mono, with the parsed argument
|
|
1254
|
+
* count), the body lists the arguments as name/value rows. Arguments that
|
|
1255
|
+
* are not a parseable JSON object fall back to the raw payload inside the
|
|
1256
|
+
* same card. Shared by assistant tool-call blocks (`→`) and the call half
|
|
1257
|
+
* of a tool result (`←`).
|
|
1185
1258
|
*/
|
|
1186
1259
|
function ToolCallCard(props) {
|
|
1187
1260
|
const args = React.useMemo(() => parseArgs(props.argsRaw), [props.argsRaw]);
|
|
1188
|
-
return /* @__PURE__ */ React.createElement(
|
|
1261
|
+
return /* @__PURE__ */ React.createElement(Section, {
|
|
1262
|
+
label: (props.arrow ?? "→") + " " + props.name,
|
|
1263
|
+
labelClass: "lc-ts-call-name",
|
|
1264
|
+
count: args !== null ? Object.keys(args).length : void 0
|
|
1265
|
+
}, args !== null ? Object.keys(args).map((k) => /* @__PURE__ */ React.createElement(CallArgRow, {
|
|
1189
1266
|
key: k,
|
|
1190
1267
|
name: k,
|
|
1191
1268
|
value: args[k]
|
|
1192
|
-
})) : typeof props.argsRaw === "string" && props.argsRaw !== "" ? /* @__PURE__ */ React.createElement("pre", { className: "lc-
|
|
1269
|
+
})) : typeof props.argsRaw === "string" && props.argsRaw !== "" ? /* @__PURE__ */ React.createElement("pre", { className: "lc-ts-desc-body lc-br-dim" }, props.argsRaw) : null);
|
|
1193
1270
|
}
|
|
1194
1271
|
/** One parsed call argument: the name on the left, the value on the right. */
|
|
1195
1272
|
function CallArgRow(props) {
|
|
@@ -1197,100 +1274,55 @@ window.__ModuleLoader__.load({
|
|
|
1197
1274
|
const text = typeof v === "string" ? v : v === void 0 ? "" : JSON.stringify(v);
|
|
1198
1275
|
return /* @__PURE__ */ React.createElement("div", { className: "lc-ts-arg-row" }, /* @__PURE__ */ React.createElement("span", { className: "lc-ts-param-name" }, props.name), /* @__PURE__ */ React.createElement("span", { className: "lc-ts-arg-val" }, text));
|
|
1199
1276
|
}
|
|
1200
|
-
/**
|
|
1277
|
+
/**
|
|
1278
|
+
* The actual content of one surface element, joined from the conversation
|
|
1279
|
+
* snapshot — rendered as a uniform Section stack (see BlocksBody); the
|
|
1280
|
+
* element row's open body wraps the stack in `lc-br-content`.
|
|
1281
|
+
*/
|
|
1201
1282
|
function NodeContent(props) {
|
|
1202
|
-
const { node, conv, rich, img } = props;
|
|
1203
|
-
const richable = node.cat === "user" || node.cat === "assistant" || node.cat === "inject";
|
|
1204
|
-
const wrap = (render) => richable ? /* @__PURE__ */ React.createElement(rich.RichCard, { render }) : /* @__PURE__ */ React.createElement("div", { className: "lc-br-content" }, render("raw"));
|
|
1283
|
+
const { node, conv, rich, img, labels } = props;
|
|
1205
1284
|
if (conv === void 0) {
|
|
1206
|
-
if (node.text === void 0 || node.text === "") return /* @__PURE__ */ React.createElement("div", { className: "lc-br-
|
|
1207
|
-
return
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
}), /* @__PURE__ */ React.createElement("div", { className: "lc-br-note" }, props.hint)));
|
|
1211
|
-
}
|
|
1212
|
-
if (conv.kind === "assistant" && Array.isArray(conv.blocks)) return /* @__PURE__ */ React.createElement("div", { className: "lc-br-content" }, conv.blocks.map((b, i) => {
|
|
1213
|
-
const blk = b;
|
|
1214
|
-
if (blk.kind === "text" && typeof blk.text === "string") return /* @__PURE__ */ React.createElement(BlockCard, {
|
|
1215
|
-
key: i,
|
|
1216
|
-
label: props.labels.answer,
|
|
1217
|
-
text: blk.text,
|
|
1285
|
+
if (node.text === void 0 || node.text === "") return /* @__PURE__ */ React.createElement("div", { className: "lc-br-note" }, props.hint);
|
|
1286
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(TextSection, {
|
|
1287
|
+
label: labels.content,
|
|
1288
|
+
text: node.text,
|
|
1218
1289
|
rich
|
|
1219
|
-
});
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
});
|
|
1231
|
-
const image = imageRefOf(b);
|
|
1232
|
-
if (image !== null) return /* @__PURE__ */ React.createElement(img.Card, {
|
|
1233
|
-
key: i,
|
|
1234
|
-
attachment: image,
|
|
1235
|
-
load: img.load
|
|
1236
|
-
});
|
|
1237
|
-
return null;
|
|
1238
|
-
}));
|
|
1239
|
-
if (conv.kind === "tool-result") return /* @__PURE__ */ React.createElement("div", { className: "lc-br-content" }, conv.call != null ? /* @__PURE__ */ React.createElement(ToolCallCard, {
|
|
1290
|
+
}), /* @__PURE__ */ React.createElement("div", { className: "lc-br-note" }, props.hint));
|
|
1291
|
+
}
|
|
1292
|
+
if (conv.kind === "assistant" && Array.isArray(conv.blocks)) return /* @__PURE__ */ React.createElement(BlocksBody, {
|
|
1293
|
+
blocks: conv.blocks,
|
|
1294
|
+
richable: true,
|
|
1295
|
+
textLabel: labels.answer,
|
|
1296
|
+
rich,
|
|
1297
|
+
img,
|
|
1298
|
+
labels
|
|
1299
|
+
});
|
|
1300
|
+
if (conv.kind === "tool-result") return /* @__PURE__ */ React.createElement(React.Fragment, null, conv.call != null ? /* @__PURE__ */ React.createElement(ToolCallCard, {
|
|
1240
1301
|
arrow: "←",
|
|
1241
1302
|
name: conv.call.name,
|
|
1242
1303
|
argsRaw: conv.call.argsRaw
|
|
1243
|
-
}) : null, Array.isArray(conv.content) ? /* @__PURE__ */ React.createElement(
|
|
1304
|
+
}) : null, Array.isArray(conv.content) ? /* @__PURE__ */ React.createElement(BlocksBody, {
|
|
1244
1305
|
blocks: conv.content,
|
|
1245
|
-
|
|
1306
|
+
richable: false,
|
|
1307
|
+
textLabel: labels.result,
|
|
1246
1308
|
rich,
|
|
1247
|
-
img
|
|
1309
|
+
img,
|
|
1310
|
+
labels
|
|
1248
1311
|
}) : null);
|
|
1249
|
-
if (conv.kind === "compaction") return
|
|
1312
|
+
if (conv.kind === "compaction") return typeof conv.summary === "string" && conv.summary !== "" ? /* @__PURE__ */ React.createElement(TextSection, {
|
|
1313
|
+
label: labels.summary,
|
|
1250
1314
|
text: conv.summary,
|
|
1251
|
-
|
|
1252
|
-
}) : null)
|
|
1253
|
-
if (Array.isArray(conv.content)) {
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
const images = [];
|
|
1263
|
-
const others = [];
|
|
1264
|
-
for (const b of blocks) {
|
|
1265
|
-
const blk = b;
|
|
1266
|
-
if (blk !== null && typeof blk === "object" && blk.type === "text" && typeof blk.text === "string") {
|
|
1267
|
-
texts.push(blk.text);
|
|
1268
|
-
continue;
|
|
1269
|
-
}
|
|
1270
|
-
const image = imageRefOf(b);
|
|
1271
|
-
if (image !== null) {
|
|
1272
|
-
images.push(image);
|
|
1273
|
-
continue;
|
|
1274
|
-
}
|
|
1275
|
-
others.push(b);
|
|
1276
|
-
}
|
|
1277
|
-
return /* @__PURE__ */ React.createElement("div", { className: "lc-br-content" }, texts.length > 0 ? /* @__PURE__ */ React.createElement(rich.RichCard, {
|
|
1278
|
-
className: "lc-br-rich-inline",
|
|
1279
|
-
render: (mode) => /* @__PURE__ */ React.createElement(React.Fragment, null, texts.map((text, i) => /* @__PURE__ */ React.createElement(rich.RichText, {
|
|
1280
|
-
key: i,
|
|
1281
|
-
text,
|
|
1282
|
-
mode
|
|
1283
|
-
})))
|
|
1284
|
-
}) : null, images.length > 0 ? /* @__PURE__ */ React.createElement("div", { className: "lc-ts-card" }, /* @__PURE__ */ React.createElement("div", { className: "lc-ts-card-head" }, /* @__PURE__ */ React.createElement("b", null, props.labels.images), /* @__PURE__ */ React.createElement("span", { className: "lc-ts-card-count" }, images.length)), /* @__PURE__ */ React.createElement("div", { className: "lc-att-grid" }, images.map((a, i) => /* @__PURE__ */ React.createElement(img.Card, {
|
|
1285
|
-
key: `${a.attachmentId}:${i}`,
|
|
1286
|
-
attachment: a,
|
|
1287
|
-
load: img.load
|
|
1288
|
-
})))) : null, others.length > 0 ? /* @__PURE__ */ React.createElement("div", { className: "lc-ts-card" }, /* @__PURE__ */ React.createElement("div", { className: "lc-ts-card-head" }, /* @__PURE__ */ React.createElement("b", null, props.labels.other), /* @__PURE__ */ React.createElement("span", { className: "lc-ts-card-count" }, others.length)), others.map((b, i) => /* @__PURE__ */ React.createElement("pre", {
|
|
1289
|
-
key: i,
|
|
1290
|
-
className: "lc-br-pre lc-br-dim"
|
|
1291
|
-
}, JSON.stringify(b, null, 2)))) : null);
|
|
1292
|
-
}
|
|
1293
|
-
return /* @__PURE__ */ React.createElement("div", { className: "lc-br-content" }, /* @__PURE__ */ React.createElement("div", { className: "lc-br-note" }, props.hint));
|
|
1315
|
+
rich
|
|
1316
|
+
}) : /* @__PURE__ */ React.createElement(React.Fragment, null);
|
|
1317
|
+
if (Array.isArray(conv.content)) return /* @__PURE__ */ React.createElement(BlocksBody, {
|
|
1318
|
+
blocks: conv.content,
|
|
1319
|
+
richable: true,
|
|
1320
|
+
textLabel: labels.content,
|
|
1321
|
+
rich,
|
|
1322
|
+
img,
|
|
1323
|
+
labels
|
|
1324
|
+
});
|
|
1325
|
+
return /* @__PURE__ */ React.createElement("div", { className: "lc-br-note" }, props.hint);
|
|
1294
1326
|
}
|
|
1295
1327
|
/** Group an assembled surface's nodes by category (for per-category counts). */
|
|
1296
1328
|
function byCatOf(asm) {
|
|
@@ -1405,8 +1437,9 @@ window.__ModuleLoader__.load({
|
|
|
1405
1437
|
const toggleElem = (key) => {
|
|
1406
1438
|
setOpenElem(openElem === key ? null : key);
|
|
1407
1439
|
};
|
|
1408
|
-
/** One expandable element row (preview line;
|
|
1409
|
-
|
|
1440
|
+
/** One expandable element row (preview line; the open body is the
|
|
1441
|
+
* uniform indented section stack — `lc-br-content`). */
|
|
1442
|
+
const elemRow = (key, tag, preview, tokens, time, body) => {
|
|
1410
1443
|
const open = openElem === key;
|
|
1411
1444
|
return /* @__PURE__ */ React.createElement("div", {
|
|
1412
1445
|
key,
|
|
@@ -1417,17 +1450,18 @@ window.__ModuleLoader__.load({
|
|
|
1417
1450
|
onClick: () => {
|
|
1418
1451
|
toggleElem(key);
|
|
1419
1452
|
}
|
|
1420
|
-
}, /* @__PURE__ */ React.createElement("span", { className: "lc-br-chev" + (open ? " lc-br-chev-on" : "") }, "▸"), tag !== null ? /* @__PURE__ */ React.createElement("span", { className: "lc-br-tag"
|
|
1453
|
+
}, /* @__PURE__ */ React.createElement("span", { className: "lc-br-chev" + (open ? " lc-br-chev-on" : "") }, "▸"), tag !== null ? /* @__PURE__ */ React.createElement("span", { className: "lc-br-tag" }, tag) : null, /* @__PURE__ */ React.createElement("span", { className: "lc-br-preview" }, preview), time !== void 0 ? /* @__PURE__ */ React.createElement("span", { className: "lc-br-time" }, fmtTime(time)) : null, /* @__PURE__ */ React.createElement("span", { className: "lc-br-tokens" }, "≈" + fmt(tokens))), open ? /* @__PURE__ */ React.createElement("div", { className: "lc-br-content" }, body) : null);
|
|
1421
1454
|
};
|
|
1422
1455
|
const catBody = (c) => {
|
|
1423
1456
|
if (c === "system") {
|
|
1424
1457
|
if (view.header === null) return /* @__PURE__ */ React.createElement("div", { className: "lc-br-note" }, t(headers === null ? "browser.noHeader" : "browser.noEpoch"));
|
|
1425
1458
|
const system = view.header.system;
|
|
1426
1459
|
if (system === void 0) return null;
|
|
1427
|
-
return elemRow("sys", null, system.replace(/\s+/g, " ").trim().slice(0, 80), breakdown.system, void 0, /* @__PURE__ */ React.createElement(
|
|
1460
|
+
return elemRow("sys", null, system.replace(/\s+/g, " ").trim().slice(0, 80), breakdown.system, void 0, /* @__PURE__ */ React.createElement(TextSection, {
|
|
1461
|
+
label: catLabel("system"),
|
|
1428
1462
|
text: system,
|
|
1429
|
-
|
|
1430
|
-
})
|
|
1463
|
+
rich
|
|
1464
|
+
}));
|
|
1431
1465
|
}
|
|
1432
1466
|
if (c === "tools") {
|
|
1433
1467
|
if (view.header === null) return /* @__PURE__ */ React.createElement("div", { className: "lc-br-note" }, t(headers === null ? "browser.noHeader" : "browser.noEpoch"));
|
|
@@ -1439,25 +1473,22 @@ window.__ModuleLoader__.load({
|
|
|
1439
1473
|
hide: t("tool.jsonHide")
|
|
1440
1474
|
};
|
|
1441
1475
|
return view.header.tools.slice().sort((a, b) => b.tokens - a.tokens).map((tool) => {
|
|
1442
|
-
return elemRow("tool:" + tool.name, null, tool.name, tool.tokens, void 0, /* @__PURE__ */ React.createElement(
|
|
1476
|
+
return elemRow("tool:" + tool.name, null, tool.name, tool.tokens, void 0, /* @__PURE__ */ React.createElement(ToolSchema, {
|
|
1443
1477
|
description: tool.description,
|
|
1444
1478
|
schema: tool.schema,
|
|
1445
1479
|
rich,
|
|
1446
1480
|
labels
|
|
1447
|
-
}))
|
|
1481
|
+
}));
|
|
1448
1482
|
});
|
|
1449
1483
|
}
|
|
1450
1484
|
return (byCat[c] ?? []).slice().reverse().map((n) => {
|
|
1451
1485
|
let tag = null;
|
|
1452
|
-
let inv = false;
|
|
1453
1486
|
let preview = nodeText(n);
|
|
1454
1487
|
if (n.cat === "tool") {
|
|
1455
1488
|
tag = (n.tool ?? "?") + (n.err ? " ⚠" : "");
|
|
1456
|
-
inv = true;
|
|
1457
1489
|
preview = callSummaryOf(bySeq.get(n.seq)) ?? t("node.toolResult") + (n.err ? " ⚠" : "");
|
|
1458
1490
|
} else if (n.cat === "assistant" && Array.isArray(n.calls) && n.calls.length > 0) {
|
|
1459
1491
|
tag = n.calls.join(" › ");
|
|
1460
|
-
inv = true;
|
|
1461
1492
|
preview = (n.text !== void 0 && n.text !== "" ? n.text : null) ?? blockSummaryOf(bySeq.get(n.seq)) ?? t("node.empty");
|
|
1462
1493
|
} else if (n.cat === "assistant" && (n.text === void 0 || n.text === "")) preview = blockSummaryOf(bySeq.get(n.seq)) ?? preview;
|
|
1463
1494
|
else if (n.cat === "inject" && !n.skill) {
|
|
@@ -1475,11 +1506,14 @@ window.__ModuleLoader__.load({
|
|
|
1475
1506
|
labels: {
|
|
1476
1507
|
thinking: t("block.thinking"),
|
|
1477
1508
|
answer: t("block.answer"),
|
|
1509
|
+
content: t("block.content"),
|
|
1510
|
+
result: t("block.result"),
|
|
1511
|
+
summary: t("block.summary"),
|
|
1478
1512
|
images: t("attach.images"),
|
|
1479
1513
|
other: t("attach.other")
|
|
1480
1514
|
},
|
|
1481
1515
|
hint: bySeq.get(n.seq) === void 0 && awaiting ? t("browser.loading") : t("browser.noContent")
|
|
1482
|
-
})
|
|
1516
|
+
}));
|
|
1483
1517
|
});
|
|
1484
1518
|
};
|
|
1485
1519
|
return /* @__PURE__ */ React.createElement("div", { className: "lc-card" }, /* @__PURE__ */ React.createElement("div", { className: "lc-card-title" }, /* @__PURE__ */ React.createElement("span", { className: "lc-card-title-text" }, t("browser.title")), /* @__PURE__ */ React.createElement("span", { className: "lc-br-hint" }, t("browser.deltaHint")), /* @__PURE__ */ React.createElement("select", {
|
|
@@ -1951,7 +1985,7 @@ window.__ModuleLoader__.load({
|
|
|
1951
1985
|
return function PluginInfo() {
|
|
1952
1986
|
const [latest, setLatest] = React.useState(null);
|
|
1953
1987
|
React.useEffect(() => {
|
|
1954
|
-
if ("0.
|
|
1988
|
+
if ("0.25.2".includes("-dev")) return;
|
|
1955
1989
|
let on = true;
|
|
1956
1990
|
fetchLatestVersion().then((v) => {
|
|
1957
1991
|
if (on && v) setLatest(v);
|
|
@@ -1960,8 +1994,8 @@ window.__ModuleLoader__.load({
|
|
|
1960
1994
|
on = false;
|
|
1961
1995
|
};
|
|
1962
1996
|
}, []);
|
|
1963
|
-
const update = latest !== null && isNewerVersion(latest, "0.
|
|
1964
|
-
const nameValue = ["dsh-context (v0.
|
|
1997
|
+
const update = latest !== null && isNewerVersion(latest, "0.25.2") ? latest : null;
|
|
1998
|
+
const nameValue = ["dsh-context (v0.25.2)"];
|
|
1965
1999
|
if (update) nameValue.push(/* @__PURE__ */ React.createElement("span", {
|
|
1966
2000
|
key: "update",
|
|
1967
2001
|
className: "lc-pi-update"
|
|
@@ -2160,7 +2194,7 @@ window.__ModuleLoader__.load({
|
|
|
2160
2194
|
className: "lc-stat-tip",
|
|
2161
2195
|
role: "tooltip"
|
|
2162
2196
|
}, tip));
|
|
2163
|
-
return /* @__PURE__ */ React.createElement("div", { className: "lc-card lc-col lc-col-stats" }, /* @__PURE__ */ React.createElement("div", { className: "lc-card-title" }, /* @__PURE__ */ React.createElement("span", { className: "lc-card-title-text" }, t("stats.title")), /* @__PURE__ */ React.createElement("span", { className: "lc-card-sub" }, t("stats.hint"))), /* @__PURE__ */ React.createElement("div", { className: "lc-stats" }, cell(t("stats.turns"), fmt(turns.size)), cell(t("stats.steps"), fmt(steps)), cell(t("stats.injects"), fmt(injects)), cell(t("stats.compactions"), fmt(compactions)), cell(t("stats.prunes"), fmt(prunes)), cell(t("stats.cacheHit"), hit === null ? "—" : hit + "%"), cell(t("stats.cost"), cost === null ? "—" : formatCost(cost, currency), costTip)));
|
|
2197
|
+
return /* @__PURE__ */ React.createElement("div", { className: "lc-card lc-col lc-col-stats" }, /* @__PURE__ */ React.createElement("div", { className: "lc-card-title" }, /* @__PURE__ */ React.createElement("span", { className: "lc-card-title-text" }, t("stats.title")), /* @__PURE__ */ React.createElement("span", { className: "lc-card-sub" }, t("stats.hint"))), /* @__PURE__ */ React.createElement("div", { className: "lc-stats" }, cell(t("stats.turns"), fmt(turns.size)), cell(t("stats.steps"), fmt(steps)), cell(t("stats.injects"), fmt(injects)), cell(t("stats.compactions"), fmt(compactions)), cell(t("stats.prunes"), fmt(prunes)), cell(t("stats.images"), fmt(props.images ?? 0)), cell(t("stats.cacheHit"), hit === null ? "—" : hit + "%"), cell(t("stats.cost"), cost === null ? "—" : formatCost(cost, currency), costTip)));
|
|
2164
2198
|
};
|
|
2165
2199
|
}
|
|
2166
2200
|
//#endregion
|
|
@@ -2493,6 +2527,7 @@ window.__ModuleLoader__.load({
|
|
|
2493
2527
|
requests,
|
|
2494
2528
|
events,
|
|
2495
2529
|
usage,
|
|
2530
|
+
images: data.images,
|
|
2496
2531
|
cost: data.cost,
|
|
2497
2532
|
locale: activeLocale
|
|
2498
2533
|
}), /* @__PURE__ */ React.createElement(PluginInfo, null)), /* @__PURE__ */ React.createElement("div", { className: "lc-cols" }, /* @__PURE__ */ React.createElement("div", { className: "lc-col" }, /* @__PURE__ */ React.createElement(CurrentComposition, {
|
|
@@ -2534,7 +2569,7 @@ window.__ModuleLoader__.load({
|
|
|
2534
2569
|
}), /* @__PURE__ */ React.createElement(RequestDetail, {
|
|
2535
2570
|
request: activeReq,
|
|
2536
2571
|
marker: activeReq !== null ? markerOf(activeReq) : void 0
|
|
2537
|
-
})))), /* @__PURE__ */ React.createElement("div", { className: "lc-col" }, /* @__PURE__ */ React.createElement(ContextBrowser, {
|
|
2572
|
+
})))), /* @__PURE__ */ React.createElement("div", { className: "lc-col lc-col-browser" }, /* @__PURE__ */ React.createElement(ContextBrowser, {
|
|
2538
2573
|
data,
|
|
2539
2574
|
headers,
|
|
2540
2575
|
useSession: props.useSession,
|
|
@@ -2576,7 +2611,7 @@ window.__ModuleLoader__.load({
|
|
|
2576
2611
|
}
|
|
2577
2612
|
//#endregion
|
|
2578
2613
|
//#region \0dsh-global-css:/home/runner/work/dsh-context/dsh-context/src/client/styles.css.mjs
|
|
2579
|
-
const css = ".lc-root{box-sizing:border-box;height:100%;color:var(--dsw-alias-label-primary);padding:16px 20px 32px;font-size:13px;overflow-y:auto}.lc-card{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);border-radius:10px;margin-bottom:14px;padding:14px 16px}.lc-card-title{align-items:baseline;gap:8px;margin-bottom:10px;font-weight:600;display:flex}.lc-card-title-text{white-space:nowrap;flex:none}.lc-stats{grid-template-columns:repeat(auto-fit,minmax(92px,1fr));gap:8px;display:grid}.lc-stat{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:8px;flex-direction:column;gap:2px;min-width:0;padding:8px 10px;display:flex}.lc-stat-label{color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;font-size:11px;font-weight:600;overflow:hidden}.lc-stat-value{color:var(--dsw-alias-label-primary);white-space:nowrap;text-overflow:ellipsis;text-align:center;font-size:14px;font-weight:600;overflow:hidden}.lc-stat-sub{color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;font-size:11px;overflow:hidden}.lc-stat-tipped{position:relative}.lc-stat-q{text-align:center;width:11px;height:11px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);cursor:help;border-radius:50%;margin-left:4px;font-size:9px;font-style:normal;font-weight:700;line-height:11px;display:inline-block}.lc-stat-tipped:hover .lc-stat-q{color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-primary)}.lc-stat-tip{z-index:6;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);width:max-content;max-width:280px;color:var(--dsw-alias-label-primary);pointer-events:none;opacity:0;border-radius:6px;padding:6px 10px;font-size:12px;font-weight:400;line-height:1.5;transition:opacity .12s;position:absolute;top:calc(100% + 6px);left:0;box-shadow:0 2px 8px #0000002e}.lc-stat-tipped:hover .lc-stat-tip{opacity:1}.lc-stat-tip-prices{border-top:1px dashed var(--dsw-alias-border-l1);margin-top:5px;padding-top:5px;display:block}.lc-stat-tip-head{font-weight:600;display:block}.lc-stat-tip-row{margin-top:2px;display:block}.lc-stat-tip-model{color:var(--dsw-alias-label-primary)}.lc-card-sub{color:var(--dsw-alias-label-secondary);font-size:12px;font-weight:400}.lc-gran,.lc-kinds{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:6px;gap:2px;margin-left:auto;padding:1px;display:flex}.lc-gran-btn{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:5px;padding:3px 8px;font-family:inherit;font-size:11px;line-height:1}.lc-gran-btn:hover{color:var(--dsw-alias-label-primary)}.lc-gran-on,.lc-gran-on:hover{background:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-foreground)}.lc-overview-num{align-items:baseline;gap:6px;margin-bottom:8px;display:flex}.lc-overview-num>b{font-size:20px}.lc-overview-num span{color:var(--dsw-alias-label-secondary)}.lc-overview-pct{margin-left:auto;font-size:11px}.lc-overview-pct b{color:var(--dsw-alias-label-primary);margin-right:4px;font-size:20px}.lc-stacked-wrap{width:100%;position:relative}.lc-stacked{background:#8080802e;border-radius:5px;width:100%;display:flex;position:relative;overflow:hidden}.lc-occupied-box{border:2px solid var(--dsw-alias-label-tertiary);box-sizing:border-box;pointer-events:none;opacity:0;box-shadow:0 0 0 1px var(--dsw-alias-bg-layer-2);border-radius:5px;transition:opacity .12s;position:absolute;top:0;bottom:0;left:0}.lc-occupied-box-on{opacity:1}.lc-bar-tip{z-index:5;white-space:nowrap;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);pointer-events:none;opacity:0;border-radius:6px;padding:3px 8px;font-size:12px;transition:opacity .12s;position:absolute;bottom:calc(100% + 6px);transform:translate(-50%);box-shadow:0 2px 8px #0000002e}.lc-bar-tip-on{opacity:1}.lc-stacked>div{height:100%}.lc-stacked-seg{transition:filter .12s,opacity .12s}.lc-stacked-free{box-sizing:border-box;transition:box-shadow .12s,opacity .12s}.lc-stacked-seg-on{filter:brightness(1.18)}.lc-reserve{z-index:1;pointer-events:auto;cursor:help;background:repeating-linear-gradient(45deg, color-mix(in srgb, var(--dsw-alias-state-warn-primary) 24%, transparent) 0 5px, transparent 5px 10px);position:absolute;top:0;bottom:0}.lc-stacked-free-on{border:2px dashed var(--dsw-alias-label-secondary);border-radius:3px}.lc-stacked-dim .lc-stacked-seg{opacity:.35}.lc-stacked-dim .lc-stacked-seg-on{opacity:1}.lc-stacked-dim .lc-stacked-free{opacity:.35}.lc-stacked-dim .lc-stacked-free-on{opacity:1}.lc-legend{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:6px 14px;margin-top:10px;display:grid}.lc-chip{min-width:0;color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:6px;align-items:center;gap:5px;padding:1px 6px;transition:background-color .12s;display:flex}.lc-chip-label{white-space:nowrap;text-overflow:ellipsis;min-width:0;font-weight:600;overflow:hidden}.lc-chip-nums{white-space:nowrap;flex:none;align-items:baseline;gap:6px;margin-left:auto;display:inline-flex}.lc-chip i,.lc-detail-row i,.lc-node i{border-radius:2px;width:8px;height:8px;display:inline-block}.lc-chip i{transition:box-shadow .12s}.lc-chip em{color:var(--dsw-alias-label-secondary);font-style:normal}.lc-chip-on{background:var(--dsw-alias-interactive-bg-hover);font-weight:600}.lc-chip-on i{box-shadow:0 0 0 1px var(--dsw-alias-brand-primary)}.lc-tools{color:var(--dsw-alias-label-secondary);flex-wrap:wrap;align-items:center;gap:6px;margin-top:10px;display:flex}.lc-tools-label,.lc-tools-more{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;padding:0;font-family:inherit;font-size:12px}.lc-tools-label:hover,.lc-tools-more:hover{text-decoration:underline}.lc-tool-chip{background:var(--dsw-alias-bg-layer-2);font:inherit;color:var(--dsw-alias-label-primary);cursor:pointer;border:0;border-radius:4px;padding:1px 7px;font-size:12px}.lc-tool-chip:hover{text-decoration:underline}.lc-chartrow{align-items:stretch;gap:6px;display:flex}.lc-axis{box-sizing:border-box;width:40px;height:150px;color:var(--dsw-alias-label-secondary);padding-top:18px;font-size:11px;position:relative}.lc-axis span{line-height:1;position:absolute;right:0}.lc-axis-top{top:13px}.lc-axis-mid{top:69px}.lc-axis-bot{top:125px}.lc-chart-scroll{scrollbar-width:thin;flex:1;min-width:0;padding-bottom:8px;position:relative;overflow:auto hidden}.lc-chart-fade{pointer-events:none;z-index:2;width:26px;position:absolute;top:0;bottom:0}.lc-chart-fade-l{background:linear-gradient(to right, var(--dsw-alias-bg-layer-1), transparent);left:0}.lc-chart-fade-r{background:linear-gradient(to left, var(--dsw-alias-bg-layer-1), transparent);right:0}.lc-chart{box-sizing:border-box;align-items:flex-end;gap:2px;width:max-content;min-width:100%;height:130px;padding-top:18px;display:flex;position:relative}.lc-grid{border-top:1px dashed var(--dsw-alias-border-l1);pointer-events:none;position:absolute;left:0;right:0}.lc-grid-top{top:18px}.lc-grid-mid{top:74px}.lc-bar{cursor:pointer;border-radius:2px;flex:none;align-items:flex-end;width:14px;height:100%;transition:opacity .12s,background-color .12s;display:flex;position:relative}.lc-chart-dim .lc-bar{opacity:.35}.lc-chart-dim .lc-bar-in-turn{opacity:1}.lc-chart-dim .lc-turn{opacity:.35}.lc-chart-dim .lc-turn-on{opacity:1}.lc-chart-tip{z-index:5;white-space:nowrap;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);pointer-events:none;border-radius:6px;padding:3px 8px;font-size:12px;position:absolute;top:0;transform:translate(-50%);box-shadow:0 2px 8px #0000002e}.lc-bar:hover{background:var(--dsw-alias-bg-layer-2)}.lc-bar-hovered{outline:1px dashed var(--dsw-alias-brand-primary);outline-offset:1px}.lc-bar-selected{outline:2px solid var(--dsw-alias-label-primary);outline-offset:1px}.lc-bar-in-turn{background:#80808024}.lc-bar-stack{flex-direction:column-reverse;width:100%;display:flex}.lc-bar-stack>div{width:100%}.lc-bar-marker{color:var(--dsw-alias-state-warn-primary);font-size:11px;position:absolute;top:-16px;left:50%;transform:translate(-50%)}.lc-turns{gap:2px;width:max-content;min-width:100%;margin-top:4px;display:flex}.lc-turn{box-sizing:border-box;text-align:center;color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;cursor:pointer;border-radius:3px;flex:none;height:14px;font-size:10px;font-weight:600;line-height:14px;transition:filter .12s,opacity .12s;overflow:hidden}.lc-turn-on{filter:brightness(1.35);color:var(--dsw-alias-label-primary)}.lc-detail{border-top:1px solid var(--dsw-alias-border-l1);margin-top:12px;padding-top:12px}.lc-detail-head{color:var(--dsw-alias-label-secondary);flex-wrap:wrap;gap:6px 16px;margin-bottom:8px;display:flex}.lc-detail-head b{color:var(--dsw-alias-label-primary)}.lc-detail-marker{color:var(--dsw-alias-state-warn-primary);background:var(--dsw-alias-bg-layer-2);border-radius:6px;padding:1px 7px;font-size:11px}.lc-detail-head .lc-actual{color:var(--dsw-alias-state-success-primary)}.lc-detail-tag{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-secondary);border-radius:4px;padding:0 6px;font-size:11px}.lc-detail-rows{grid-template-columns:1fr 1fr;gap:4px 24px;margin-top:10px;display:grid}.lc-detail-row{align-items:center;gap:8px;display:flex}.lc-detail-label{white-space:nowrap;min-width:70px;color:var(--dsw-alias-label-secondary)}.lc-bar-track{background:#8080802e;border-radius:3px;flex:1;height:5px;display:block;overflow:hidden}.lc-bar-fill{border-radius:3px;height:100%;display:block}.lc-detail-num{text-align:right;width:44px}.lc-detail-pct{text-align:right;width:34px;color:var(--dsw-alias-label-secondary)}.lc-cols{flex-wrap:wrap;gap:14px;margin-bottom:14px;display:flex}.lc-col{flex:1;min-width:280px}.lc-cols>.lc-card,.lc-col>.lc-card:last-child{margin-bottom:0}.lc-head>.lc-card:first-child{flex:7 1 0;min-width:360px}.lc-head>.lc-card:last-child{flex:3 1 0;min-width:220px}.lc-pi-grid{grid-template-columns:1fr;gap:8px;display:grid}.lc-pi-row{min-width:0;color:inherit;flex-direction:row;justify-content:space-between;align-items:baseline;gap:12px;text-decoration:none;display:flex}.lc-pi-row:hover .lc-pi-value{text-decoration:underline}.lc-pi-update{color:var(--dsw-alias-state-warn-primary);white-space:nowrap;margin-left:6px;font-size:11px}.lc-pi-label{color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;flex:none;font-size:11px;font-weight:600;overflow:hidden}.lc-pi-value{min-width:0;color:var(--dsw-alias-label-primary);white-space:nowrap;text-overflow:ellipsis;text-align:right;font-size:13px;font-weight:600;overflow:hidden}.lc-events,.lc-nodes{flex-direction:column;gap:2px;max-height:320px;display:flex;overflow-y:auto}.lc-event{align-items:center;gap:8px;padding:3px 0;display:flex}.lc-event-icon{text-align:center;width:18px;color:var(--dsw-alias-state-warn-primary)}.lc-event-icon.lc-event-inject{color:#a855f7}.lc-event-icon.lc-event-model{color:var(--dsw-alias-brand-primary)}.lc-kind{white-space:nowrap;border-radius:4px;flex:none;padding:1px 6px;font-size:10px;font-weight:600}.lc-kind-inject{background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 15%, transparent);color:var(--dsw-alias-state-success-primary)}.lc-kind-compaction{background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 15%, transparent);color:var(--dsw-alias-state-error-primary)}.lc-kind-prune{color:#8b5cf6;background:#8b5cf626}.lc-kind-model{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 15%, transparent);color:var(--dsw-alias-brand-primary)}.lc-event-label{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.lc-event-at{color:var(--dsw-alias-label-secondary);white-space:nowrap;flex:none;font-size:11px}.lc-event-tokens{color:var(--dsw-alias-state-success-primary);white-space:nowrap;font-weight:600}.lc-event-tokens.lc-up{color:var(--dsw-alias-state-warn-primary)}.lc-event-time{color:var(--dsw-alias-label-secondary);font-size:12px}.lc-node{align-items:center;gap:8px;padding:3px 0;display:flex}.lc-node-preview{text-overflow:ellipsis;white-space:nowrap;color:var(--dsw-alias-label-primary);flex:1;overflow:hidden}.lc-node-time{color:var(--dsw-alias-label-secondary);text-align:right;min-width:54px;font-size:12px}.lc-node-tokens{color:var(--dsw-alias-label-secondary)}.lc-nodes-more{color:var(--dsw-alias-label-secondary);padding:3px 0}.lc-empty{color:var(--dsw-alias-label-secondary);text-align:center;padding:18px 0}.lc-error{flex-direction:column;align-items:center;gap:8px;padding:40px 16px;display:flex}.lc-error-msg{color:var(--dsw-alias-state-error-primary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);overflow-wrap:anywhere;border-radius:6px;max-width:100%;padding:4px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.lc-error-retry{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;border-radius:6px;padding:4px 14px;font-size:12px}.lc-error-retry:hover{border-color:var(--dsw-alias-label-primary)}.lc-foot{color:var(--dsw-alias-label-secondary);margin-top:4px;font-size:12px}.lc-modal-backdrop{z-index:200;background:#00000073;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.lc-modal-card{box-sizing:border-box;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);width:min(720px,100vw - 48px);max-height:min(82vh,760px);box-shadow:var(--dsw-shadow-lv3,0 12px 32px #0006);color:var(--dsw-alias-label-primary);border-radius:12px;padding:16px 18px 18px;font-size:13px;overflow-y:auto}.lc-modal-head{align-items:baseline;gap:8px;margin-bottom:12px;display:flex}.lc-modal-title{font-size:14px;font-weight:600}.lc-modal-close{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:6px;margin-left:auto;padding:2px 6px;font-family:inherit;font-size:18px;line-height:1}.lc-modal-close:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2)}.lc-br-hint{color:var(--dsw-alias-label-secondary);white-space:nowrap;margin-left:auto;font-size:11px;font-weight:400}.lc-br-pick{font:inherit;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:6px;max-width:240px;padding:3px 6px;font-size:12px}.lc-br-meta{color:var(--dsw-alias-label-secondary);flex-wrap:wrap;gap:6px 16px;margin-bottom:8px;display:flex}.lc-br-meta b{color:var(--dsw-alias-label-primary)}.lc-br-meta .lc-actual{color:var(--dsw-alias-state-success-primary)}.lc-br-note{color:var(--dsw-alias-label-secondary);margin-top:8px;font-size:12px}.lc-br-cats{flex-direction:column;gap:4px;margin-top:10px;display:flex}.lc-br-cat{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:8px;overflow:hidden}.lc-br-cat-empty{opacity:.55}.lc-br-cat-row{width:100%;color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;text-align:left;background:0 0;border:0;align-items:center;gap:8px;padding:7px 10px;transition:background-color .12s;display:flex}.lc-br-cat-row:hover,.lc-br-cat-on{background:var(--dsw-alias-interactive-bg-hover)}.lc-br-cat-on i{box-shadow:0 0 0 1px var(--dsw-alias-brand-primary)}.lc-br-cat-row i{border-radius:2px;flex:none;width:8px;height:8px;transition:box-shadow .12s;display:inline-block}.lc-br-cat-label{font-weight:600}.lc-br-cat-count{color:var(--dsw-alias-label-secondary);white-space:nowrap;font-size:12px}.lc-br-count-grp{flex:1;align-items:center;gap:4px;min-width:0;display:inline-flex}.lc-br-chev{width:12px;color:var(--dsw-alias-label-secondary);flex:none;transition:transform .12s}.lc-br-chev-on{transform:rotate(90deg)}.lc-br-tokens{color:var(--dsw-alias-label-secondary);flex:none;font-size:12px}.lc-br-delta,.lc-br-tdelta{white-space:nowrap;border-radius:4px;flex:none;padding:0 5px;font-size:11px;font-weight:600}.lc-br-delta-up,.lc-br-tdelta-up{color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 15%, transparent)}.lc-br-delta-down,.lc-br-tdelta-down{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 15%, transparent)}.lc-br-tokens-grp{flex:none;align-items:center;gap:4px;min-width:0;display:inline-flex}.lc-br-pct{text-align:right;width:36px;color:var(--dsw-alias-label-secondary);flex:none;font-size:12px}.lc-br-body{border-top:1px solid var(--dsw-alias-border-l1);flex-direction:column;gap:2px;padding:4px 6px;display:flex}.lc-br-elem{border-radius:6px}.lc-br-elem-on{background:var(--dsw-alias-interactive-bg-active)}.lc-br-elem-row{width:100%;color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;text-align:left;background:0 0;border:0;border-radius:6px;align-items:center;gap:8px;padding:5px 6px;font-size:12px;transition:background-color .12s;display:flex}.lc-br-elem-row:hover{background:var(--dsw-alias-interactive-bg-hover)}.lc-br-tag{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);text-overflow:ellipsis;white-space:nowrap;border-radius:4px;flex:none;max-width:220px;padding:0 6px;font-size:11px;overflow:hidden}.lc-br-tag-inv{color:var(--dsw-alias-bg-layer-1);background:var(--dsw-alias-label-primary);border-color:#0000;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.lc-br-preview{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.lc-br-time{color:var(--dsw-alias-label-secondary);flex:none;font-size:11px}.lc-br-content{flex-direction:column;gap:6px;padding:2px 6px 8px 26px;display:flex}.lc-br-pre{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);white-space:pre-wrap;word-break:break-word;scrollbar-width:thin;border-radius:6px;max-height:320px;margin:0;padding:8px 10px;font-size:12px;line-height:1.55;overflow-y:auto}.lc-br-dim{color:var(--dsw-alias-label-secondary)}.lc-br-blk{flex-direction:column;gap:4px;display:flex}.lc-br-blk-label{color:var(--dsw-alias-label-secondary);font-size:11px;font-weight:600}.lc-ts-card{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:6px;overflow:hidden}.lc-ts-card-head{color:var(--dsw-alias-label-secondary);border-bottom:1px solid var(--dsw-alias-border-l1);align-items:center;gap:8px;padding:6px 10px;font-size:11px;font-weight:600;display:flex}.lc-ts-card-head b{color:var(--dsw-alias-label-primary)}.lc-ts-call-name{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px}.lc-ts-card-count{margin-left:auto}.lc-ts-desc-body{color:var(--dsw-alias-label-primary);white-space:pre-wrap;word-break:break-word;scrollbar-width:thin;max-height:160px;margin:0;padding:8px 10px;font-size:12px;line-height:1.55;overflow-y:auto}.lc-ts-param-row{border-top:1px solid var(--dsw-alias-border-l1);grid-template-columns:140px 90px 56px 1fr;align-items:baseline;gap:2px 10px;padding:6px 10px;font-size:12px;display:grid}.lc-ts-param-row:first-of-type{border-top:0}.lc-ts-param-name{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.lc-ts-param-type{color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;overflow:hidden}.lc-ts-param-req{color:var(--dsw-alias-state-warn-primary);font-size:11px;font-weight:600}.lc-ts-param-req-off{color:var(--dsw-alias-label-secondary);font-size:11px}.lc-ts-param-desc{color:var(--dsw-alias-label-secondary);grid-column:1/-1;line-height:1.5}.lc-ts-params-empty{color:var(--dsw-alias-label-secondary);padding:8px 10px;font-size:12px}.lc-ts-arg-row{border-top:1px solid var(--dsw-alias-border-l1);grid-template-columns:minmax(0,96px) 1fr;align-items:start;column-gap:12px;padding:6px 10px;font-size:12px;display:grid}.lc-ts-arg-row:first-of-type{border-top:0}.lc-ts-arg-row .lc-ts-param-name{text-overflow:unset;white-space:normal;overflow-wrap:anywhere;overflow:visible}.lc-ts-arg-val{color:var(--dsw-alias-label-primary);white-space:pre-wrap;word-break:break-word;scrollbar-width:thin;max-height:200px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;line-height:1.55;overflow-y:auto}.lc-ts-json{flex-direction:column;gap:4px;display:flex}.lc-ts-json-toggle{color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;background:0 0;border:0;align-self:flex-start;padding:0;font-size:11px}.lc-ts-json-toggle:hover{color:var(--dsw-alias-label-primary);text-decoration:underline}.lc-rich-seg{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:6px;align-self:flex-end;gap:2px;padding:1px;display:flex}.lc-rich-seg-btn{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:5px;padding:3px 8px;font-family:inherit;font-size:11px;line-height:1}.lc-rich-seg-btn:hover{color:var(--dsw-alias-label-primary)}.lc-rich-seg-on,.lc-rich-seg-on:hover{background:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-foreground)}.lc-rich-seg-head{align-self:auto;margin-left:auto}.lc-br-md{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);word-break:break-word;scrollbar-width:thin;border-radius:6px;max-height:320px;padding:4px 10px;font-size:12px;line-height:1.55;overflow-y:auto}.lc-ts-desc-md{color:var(--dsw-alias-label-primary);word-break:break-word;scrollbar-width:thin;max-height:160px;padding:4px 10px;font-size:12px;line-height:1.55;overflow-y:auto}.lc-br-md>div,.lc-ts-desc-md>div{font-size:13px;line-height:1.55}.lc-br-md div :is(h1,h2,h3,h4,h5,h6),.lc-ts-desc-md div :is(h1,h2,h3,h4,h5,h6){margin:10px 0 4px;font-size:13px;font-weight:600}.lc-br-md div p,.lc-ts-desc-md div p,.lc-br-md div pre,.lc-ts-desc-md div pre{margin:6px 0}.lc-br-md div :not(pre)>code,.lc-ts-desc-md div :not(pre)>code{box-decoration-break:clone;padding:1px 5px;line-height:1.3;font-size:1em!important}.lc-br-md div table code,.lc-ts-desc-md div table code{font-size:inherit}.lc-br-rich-inline{flex-direction:column;gap:6px;display:flex}.lc-ts-card .lc-br-pre{margin:8px 10px}.lc-att-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding:8px 10px;display:grid}.lc-att-item{align-items:center;gap:8px;min-width:0;display:flex}.lc-att-thumb{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);cursor:pointer;width:64px;height:64px;font:inherit;border-radius:6px;flex:none;justify-content:center;align-items:center;padding:0;display:flex;overflow:hidden}.lc-att-thumb img{object-fit:cover;width:100%;height:100%;display:block}.lc-att-ph,.lc-att-err{color:var(--dsw-alias-label-secondary);text-align:center;padding:2px;font-size:10px}.lc-att-meta{flex-direction:column;gap:2px;min-width:0;display:flex}.lc-att-name{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.lc-att-dims{color:var(--dsw-alias-label-secondary);font-size:11px}.lc-att-tokens{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;font-size:11px}";
|
|
2614
|
+
const css = ".lc-root{box-sizing:border-box;height:100%;color:var(--dsw-alias-label-primary);padding:16px 20px 32px;font-size:13px;overflow-y:auto}.lc-card{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);border-radius:10px;margin-bottom:14px;padding:14px 16px}.lc-card-title{align-items:baseline;gap:8px;margin-bottom:10px;font-weight:600;display:flex}.lc-card-title-text{white-space:nowrap;flex:none}.lc-stats{grid-template-columns:repeat(auto-fit,minmax(76px,1fr));gap:8px;display:grid}.lc-stat{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:8px;flex-direction:column;gap:2px;min-width:0;padding:8px;display:flex}.lc-stat-label{color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;font-size:11px;font-weight:600;overflow:hidden}.lc-stat-value{color:var(--dsw-alias-label-primary);white-space:nowrap;text-overflow:ellipsis;text-align:center;font-size:14px;font-weight:600;overflow:hidden}.lc-stat-sub{color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;font-size:11px;overflow:hidden}.lc-stat-tipped{position:relative}.lc-stat-q{text-align:center;width:11px;height:11px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);cursor:help;border-radius:50%;margin-left:4px;font-size:9px;font-style:normal;font-weight:700;line-height:11px;display:inline-block}.lc-stat-tipped:hover .lc-stat-q{color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-primary)}.lc-stat-tip{z-index:6;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);width:max-content;max-width:280px;color:var(--dsw-alias-label-primary);pointer-events:none;opacity:0;border-radius:6px;padding:6px 10px;font-size:12px;font-weight:400;line-height:1.5;transition:opacity .12s;position:absolute;top:calc(100% + 6px);left:0;box-shadow:0 2px 8px #0000002e}.lc-stat-tipped:hover .lc-stat-tip{opacity:1}.lc-stat-tip-prices{border-top:1px dashed var(--dsw-alias-border-l1);margin-top:5px;padding-top:5px;display:block}.lc-stat-tip-head{font-weight:600;display:block}.lc-stat-tip-row{margin-top:2px;display:block}.lc-stat-tip-model{color:var(--dsw-alias-label-primary)}.lc-card-sub{color:var(--dsw-alias-label-secondary);font-size:12px;font-weight:400}.lc-gran,.lc-kinds{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:6px;gap:2px;margin-left:auto;padding:1px;display:flex}.lc-gran-btn{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:5px;padding:3px 8px;font-family:inherit;font-size:11px;line-height:1}.lc-gran-btn:hover{color:var(--dsw-alias-label-primary)}.lc-gran-on,.lc-gran-on:hover{background:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-foreground)}.lc-overview-num{align-items:baseline;gap:6px;margin-bottom:8px;display:flex}.lc-overview-num>b{font-size:20px}.lc-overview-num span{color:var(--dsw-alias-label-secondary)}.lc-overview-pct{margin-left:auto;font-size:11px}.lc-overview-pct b{color:var(--dsw-alias-label-primary);margin-right:4px;font-size:20px}.lc-stacked-wrap{width:100%;position:relative}.lc-stacked{background:#8080802e;border-radius:5px;width:100%;display:flex;position:relative;overflow:hidden}.lc-occupied-box{border:2px solid var(--dsw-alias-label-tertiary);box-sizing:border-box;pointer-events:none;opacity:0;box-shadow:0 0 0 1px var(--dsw-alias-bg-layer-2);border-radius:5px;transition:opacity .12s;position:absolute;top:0;bottom:0;left:0}.lc-occupied-box-on{opacity:1}.lc-bar-tip{z-index:5;white-space:nowrap;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);pointer-events:none;opacity:0;border-radius:6px;padding:3px 8px;font-size:12px;transition:opacity .12s;position:absolute;bottom:calc(100% + 6px);transform:translate(-50%);box-shadow:0 2px 8px #0000002e}.lc-bar-tip-on{opacity:1}.lc-stacked>div{height:100%}.lc-stacked-seg{transition:filter .12s,opacity .12s}.lc-stacked-free{box-sizing:border-box;transition:box-shadow .12s,opacity .12s}.lc-stacked-seg-on{filter:brightness(1.18)}.lc-reserve{z-index:1;pointer-events:auto;cursor:help;background:repeating-linear-gradient(45deg, color-mix(in srgb, var(--dsw-alias-state-warn-primary) 24%, transparent) 0 5px, transparent 5px 10px);position:absolute;top:0;bottom:0}.lc-stacked-free-on{border:2px dashed var(--dsw-alias-label-secondary);border-radius:3px}.lc-stacked-dim .lc-stacked-seg{opacity:.35}.lc-stacked-dim .lc-stacked-seg-on{opacity:1}.lc-stacked-dim .lc-stacked-free{opacity:.35}.lc-stacked-dim .lc-stacked-free-on{opacity:1}.lc-legend{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:6px 14px;margin-top:10px;display:grid}.lc-chip{min-width:0;color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:6px;align-items:center;gap:5px;padding:1px 6px;transition:background-color .12s;display:flex}.lc-chip-label{white-space:nowrap;text-overflow:ellipsis;min-width:0;font-weight:600;overflow:hidden}.lc-chip-nums{white-space:nowrap;flex:none;align-items:baseline;gap:6px;margin-left:auto;display:inline-flex}.lc-chip i,.lc-detail-row i,.lc-node i{border-radius:2px;width:8px;height:8px;display:inline-block}.lc-chip i{transition:box-shadow .12s}.lc-chip em{color:var(--dsw-alias-label-secondary);font-style:normal}.lc-chip-on{background:var(--dsw-alias-interactive-bg-hover);font-weight:600}.lc-chip-on i{box-shadow:0 0 0 1px var(--dsw-alias-brand-primary)}.lc-tools{color:var(--dsw-alias-label-secondary);flex-wrap:wrap;align-items:center;gap:6px;margin-top:10px;display:flex}.lc-tools-label,.lc-tools-more{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;padding:0;font-family:inherit;font-size:12px}.lc-tools-label:hover,.lc-tools-more:hover{text-decoration:underline}.lc-tool-chip{background:var(--dsw-alias-bg-layer-2);font:inherit;color:var(--dsw-alias-label-primary);cursor:pointer;border:0;border-radius:4px;padding:1px 7px;font-size:12px}.lc-tool-chip:hover{text-decoration:underline}.lc-chartrow{align-items:stretch;gap:6px;display:flex}.lc-axis{box-sizing:border-box;width:40px;height:150px;color:var(--dsw-alias-label-secondary);padding-top:18px;font-size:11px;position:relative}.lc-axis span{line-height:1;position:absolute;right:0}.lc-axis-top{top:13px}.lc-axis-mid{top:69px}.lc-axis-bot{top:125px}.lc-chart-scroll{scrollbar-width:thin;flex:1;min-width:0;padding-bottom:8px;position:relative;overflow:auto hidden}.lc-chart-fade{pointer-events:none;z-index:2;width:26px;position:absolute;top:0;bottom:0}.lc-chart-fade-l{background:linear-gradient(to right, var(--dsw-alias-bg-layer-1), transparent);left:0}.lc-chart-fade-r{background:linear-gradient(to left, var(--dsw-alias-bg-layer-1), transparent);right:0}.lc-chart{box-sizing:border-box;align-items:flex-end;gap:2px;width:max-content;min-width:100%;height:130px;padding-top:18px;display:flex;position:relative}.lc-grid{border-top:1px dashed var(--dsw-alias-border-l1);pointer-events:none;position:absolute;left:0;right:0}.lc-grid-top{top:18px}.lc-grid-mid{top:74px}.lc-bar{cursor:pointer;border-radius:2px;flex:none;align-items:flex-end;width:14px;height:100%;transition:opacity .12s,background-color .12s;display:flex;position:relative}.lc-chart-dim .lc-bar{opacity:.35}.lc-chart-dim .lc-bar-in-turn{opacity:1}.lc-chart-dim .lc-turn{opacity:.35}.lc-chart-dim .lc-turn-on{opacity:1}.lc-chart-tip{z-index:5;white-space:nowrap;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);pointer-events:none;border-radius:6px;padding:3px 8px;font-size:12px;position:absolute;top:0;transform:translate(-50%);box-shadow:0 2px 8px #0000002e}.lc-bar:hover{background:var(--dsw-alias-bg-layer-2)}.lc-bar-hovered{outline:1px dashed var(--dsw-alias-brand-primary);outline-offset:1px}.lc-bar-selected{outline:2px solid var(--dsw-alias-label-primary);outline-offset:1px}.lc-bar-in-turn{background:#80808024}.lc-bar-stack{flex-direction:column-reverse;width:100%;display:flex}.lc-bar-stack>div{width:100%}.lc-bar-marker{color:var(--dsw-alias-state-warn-primary);font-size:11px;position:absolute;top:-16px;left:50%;transform:translate(-50%)}.lc-turns{gap:2px;width:max-content;min-width:100%;margin-top:4px;display:flex}.lc-turn{box-sizing:border-box;text-align:center;color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;cursor:pointer;border-radius:3px;flex:none;height:14px;font-size:10px;font-weight:600;line-height:14px;transition:filter .12s,opacity .12s;overflow:hidden}.lc-turn-on{filter:brightness(1.35);color:var(--dsw-alias-label-primary)}.lc-detail{border-top:1px solid var(--dsw-alias-border-l1);margin-top:12px;padding-top:12px}.lc-detail-head{color:var(--dsw-alias-label-secondary);flex-wrap:wrap;gap:6px 16px;margin-bottom:8px;display:flex}.lc-detail-head b{color:var(--dsw-alias-label-primary)}.lc-detail-marker{color:var(--dsw-alias-state-warn-primary);background:var(--dsw-alias-bg-layer-2);border-radius:6px;padding:1px 7px;font-size:11px}.lc-detail-head .lc-actual{color:var(--dsw-alias-state-success-primary)}.lc-detail-tag{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-secondary);border-radius:4px;padding:0 6px;font-size:11px}.lc-detail-rows{grid-template-columns:1fr 1fr;gap:4px 24px;margin-top:10px;display:grid}.lc-detail-row{align-items:center;gap:8px;display:flex}.lc-detail-label{white-space:nowrap;min-width:70px;color:var(--dsw-alias-label-secondary)}.lc-bar-track{background:#8080802e;border-radius:3px;flex:1;height:5px;display:block;overflow:hidden}.lc-bar-fill{border-radius:3px;height:100%;display:block}.lc-detail-num{text-align:right;width:44px}.lc-detail-pct{text-align:right;width:34px;color:var(--dsw-alias-label-secondary)}.lc-cols{flex-wrap:wrap;gap:14px;margin-bottom:14px;display:flex}.lc-col{flex:1;min-width:280px}.lc-cols>.lc-card,.lc-col>.lc-card:last-child{margin-bottom:0}.lc-col-browser{flex-direction:column;display:flex}.lc-col-browser>.lc-card{flex:1}.lc-head>.lc-card:first-child{flex:7 1 0;min-width:360px}.lc-head>.lc-card:last-child{flex:3 1 0;min-width:220px}.lc-pi-grid{grid-template-columns:1fr;gap:8px;display:grid}.lc-pi-row{min-width:0;color:inherit;flex-direction:row;justify-content:space-between;align-items:baseline;gap:12px;text-decoration:none;display:flex}.lc-pi-row:hover .lc-pi-value{text-decoration:underline}.lc-pi-update{color:var(--dsw-alias-state-warn-primary);white-space:nowrap;margin-left:6px;font-size:11px}.lc-pi-label{color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;flex:none;font-size:11px;font-weight:600;overflow:hidden}.lc-pi-value{min-width:0;color:var(--dsw-alias-label-primary);white-space:nowrap;text-overflow:ellipsis;text-align:right;font-size:13px;font-weight:600;overflow:hidden}.lc-events,.lc-nodes{flex-direction:column;gap:2px;max-height:320px;display:flex;overflow-y:auto}.lc-event{align-items:center;gap:8px;padding:3px 0;display:flex}.lc-event-icon{text-align:center;width:18px;color:var(--dsw-alias-state-warn-primary)}.lc-event-icon.lc-event-inject{color:#a855f7}.lc-event-icon.lc-event-model{color:var(--dsw-alias-brand-primary)}.lc-kind{white-space:nowrap;border-radius:4px;flex:none;padding:1px 6px;font-size:10px;font-weight:600}.lc-kind-inject{background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 15%, transparent);color:var(--dsw-alias-state-success-primary)}.lc-kind-compaction{background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 15%, transparent);color:var(--dsw-alias-state-error-primary)}.lc-kind-prune{color:#8b5cf6;background:#8b5cf626}.lc-kind-model{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 15%, transparent);color:var(--dsw-alias-brand-primary)}.lc-event-label{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.lc-event-at{color:var(--dsw-alias-label-secondary);white-space:nowrap;flex:none;font-size:11px}.lc-event-tokens{color:var(--dsw-alias-state-success-primary);white-space:nowrap;font-weight:600}.lc-event-tokens.lc-up{color:var(--dsw-alias-state-warn-primary)}.lc-event-time{color:var(--dsw-alias-label-secondary);font-size:12px}.lc-node{align-items:center;gap:8px;padding:3px 0;display:flex}.lc-node-preview{text-overflow:ellipsis;white-space:nowrap;color:var(--dsw-alias-label-primary);flex:1;overflow:hidden}.lc-node-time{color:var(--dsw-alias-label-secondary);text-align:right;min-width:54px;font-size:12px}.lc-node-tokens{color:var(--dsw-alias-label-secondary)}.lc-nodes-more{color:var(--dsw-alias-label-secondary);padding:3px 0}.lc-empty{color:var(--dsw-alias-label-secondary);text-align:center;padding:18px 0}.lc-error{flex-direction:column;align-items:center;gap:8px;padding:40px 16px;display:flex}.lc-error-msg{color:var(--dsw-alias-state-error-primary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);overflow-wrap:anywhere;border-radius:6px;max-width:100%;padding:4px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.lc-error-retry{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;border-radius:6px;padding:4px 14px;font-size:12px}.lc-error-retry:hover{border-color:var(--dsw-alias-label-primary)}.lc-foot{color:var(--dsw-alias-label-secondary);margin-top:4px;font-size:12px}.lc-modal-backdrop{z-index:200;background:#00000073;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.lc-modal-card{box-sizing:border-box;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);width:min(720px,100vw - 48px);max-height:min(82vh,760px);box-shadow:var(--dsw-shadow-lv3,0 12px 32px #0006);color:var(--dsw-alias-label-primary);border-radius:12px;padding:16px 18px 18px;font-size:13px;overflow-y:auto}.lc-modal-head{align-items:baseline;gap:8px;margin-bottom:12px;display:flex}.lc-modal-title{font-size:14px;font-weight:600}.lc-modal-close{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:6px;margin-left:auto;padding:2px 6px;font-family:inherit;font-size:18px;line-height:1}.lc-modal-close:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2)}.lc-br-hint{color:var(--dsw-alias-label-secondary);white-space:nowrap;margin-left:auto;font-size:11px;font-weight:400}.lc-br-pick{font:inherit;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:6px;max-width:240px;padding:3px 6px;font-size:12px}.lc-br-meta{color:var(--dsw-alias-label-secondary);flex-wrap:wrap;gap:6px 16px;margin-bottom:8px;display:flex}.lc-br-meta b{color:var(--dsw-alias-label-primary)}.lc-br-meta .lc-actual{color:var(--dsw-alias-state-success-primary)}.lc-br-note{color:var(--dsw-alias-label-secondary);margin-top:8px;font-size:12px}.lc-br-cats{flex-direction:column;gap:4px;margin-top:10px;display:flex}.lc-br-cat{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:8px;overflow:hidden}.lc-br-cat-empty{opacity:.55}.lc-br-cat-row{width:100%;color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;text-align:left;background:0 0;border:0;align-items:center;gap:8px;padding:7px 10px;transition:background-color .12s;display:flex}.lc-br-cat-row:hover,.lc-br-cat-on{background:var(--dsw-alias-interactive-bg-hover)}.lc-br-cat-on i{box-shadow:0 0 0 1px var(--dsw-alias-brand-primary)}.lc-br-cat-row i{border-radius:2px;flex:none;width:8px;height:8px;transition:box-shadow .12s;display:inline-block}.lc-br-cat-label{font-weight:600}.lc-br-cat-count{color:var(--dsw-alias-label-secondary);white-space:nowrap;font-size:12px}.lc-br-count-grp{flex:1;align-items:center;gap:4px;min-width:0;display:inline-flex}.lc-br-chev{width:12px;color:var(--dsw-alias-label-secondary);flex:none;transition:transform .12s}.lc-br-chev-on{transform:rotate(90deg)}.lc-br-tokens{color:var(--dsw-alias-label-secondary);flex:none;font-size:12px}.lc-br-delta,.lc-br-tdelta{white-space:nowrap;border-radius:4px;flex:none;padding:0 5px;font-size:11px;font-weight:600}.lc-br-delta-up,.lc-br-tdelta-up{color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 15%, transparent)}.lc-br-delta-down,.lc-br-tdelta-down{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 15%, transparent)}.lc-br-tokens-grp{flex:none;align-items:center;gap:4px;min-width:0;display:inline-flex}.lc-br-pct{text-align:right;width:36px;color:var(--dsw-alias-label-secondary);flex:none;font-size:12px}.lc-br-body{border-top:1px solid var(--dsw-alias-border-l1);flex-direction:column;gap:2px;padding:4px 6px;display:flex}.lc-br-elem{border-radius:6px}.lc-br-elem-on{background:var(--dsw-alias-interactive-bg-active)}.lc-br-elem-row{width:100%;color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;text-align:left;background:0 0;border:0;border-radius:6px;align-items:center;gap:8px;padding:5px 6px;font-size:12px;transition:background-color .12s;display:flex}.lc-br-elem-row:hover{background:var(--dsw-alias-interactive-bg-hover)}.lc-br-tag{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);text-overflow:ellipsis;white-space:nowrap;border-radius:4px;flex:none;max-width:220px;padding:0 6px;font-size:11px;overflow:hidden}.lc-br-preview{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.lc-br-time{color:var(--dsw-alias-label-secondary);flex:none;font-size:11px}.lc-br-content{flex-direction:column;gap:6px;padding:2px 6px 8px 26px;display:flex}.lc-br-dim{color:var(--dsw-alias-label-secondary)}.lc-ts-card{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:6px;overflow:hidden}.lc-ts-card-head{color:var(--dsw-alias-label-secondary);border-bottom:1px solid var(--dsw-alias-border-l1);align-items:center;gap:8px;padding:6px 10px;font-size:11px;font-weight:600;display:flex}.lc-ts-card-head b{color:var(--dsw-alias-label-primary)}.lc-ts-call-name{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px}.lc-ts-card-count{margin-left:auto}.lc-ts-desc-body{color:var(--dsw-alias-label-primary);white-space:pre-wrap;word-break:break-word;scrollbar-width:thin;max-height:320px;margin:0;padding:8px 10px;font-size:12px;line-height:1.55;overflow-y:auto}.lc-ts-param-row{border-top:1px solid var(--dsw-alias-border-l1);grid-template-columns:140px 90px 56px 1fr;align-items:baseline;gap:2px 10px;padding:6px 10px;font-size:12px;display:grid}.lc-ts-param-row:first-of-type{border-top:0}.lc-ts-param-name{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.lc-ts-param-type{color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;overflow:hidden}.lc-ts-param-req{color:var(--dsw-alias-state-warn-primary);font-size:11px;font-weight:600}.lc-ts-param-req-off{color:var(--dsw-alias-label-secondary);font-size:11px}.lc-ts-param-desc{color:var(--dsw-alias-label-secondary);grid-column:1/-1;line-height:1.5}.lc-ts-params-empty{color:var(--dsw-alias-label-secondary);padding:8px 10px;font-size:12px}.lc-ts-arg-row{border-top:1px solid var(--dsw-alias-border-l1);grid-template-columns:minmax(0,96px) 1fr;align-items:start;column-gap:12px;padding:6px 10px;font-size:12px;display:grid}.lc-ts-arg-row:first-of-type{border-top:0}.lc-ts-arg-row .lc-ts-param-name{text-overflow:unset;white-space:normal;overflow-wrap:anywhere;overflow:visible}.lc-ts-arg-val{color:var(--dsw-alias-label-primary);white-space:pre-wrap;word-break:break-word;scrollbar-width:thin;max-height:200px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;line-height:1.55;overflow-y:auto}.lc-ts-json{flex-direction:column;gap:4px;display:flex}.lc-ts-json-toggle{color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;background:0 0;border:0;align-self:flex-start;padding:0;font-size:11px}.lc-ts-json-toggle:hover{color:var(--dsw-alias-label-primary);text-decoration:underline}.lc-rich-seg{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:6px;gap:2px;margin-left:auto;padding:1px;display:flex}.lc-rich-seg-btn{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:5px;padding:3px 8px;font-family:inherit;font-size:11px;line-height:1}.lc-rich-seg-btn:hover{color:var(--dsw-alias-label-primary)}.lc-rich-seg-on,.lc-rich-seg-on:hover{background:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-foreground)}.lc-ts-desc-md{color:var(--dsw-alias-label-primary);word-break:break-word;scrollbar-width:thin;max-height:320px;padding:4px 10px;font-size:12px;line-height:1.55;overflow-y:auto}.lc-ts-desc-md>div{font-size:13px;line-height:1.55}.lc-ts-desc-md div :is(h1,h2,h3,h4,h5,h6){margin:10px 0 4px;font-size:13px;font-weight:600}.lc-ts-desc-md div p,.lc-ts-desc-md div pre{margin:6px 0}.lc-ts-desc-md div :not(pre)>code{box-decoration-break:clone;padding:1px 5px;line-height:1.3;font-size:1em!important}.lc-ts-desc-md div table code{font-size:inherit}.lc-att-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding:8px 10px;display:grid}.lc-att-item{align-items:center;gap:8px;min-width:0;display:flex}.lc-att-thumb{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);cursor:pointer;width:64px;height:64px;font:inherit;border-radius:6px;flex:none;justify-content:center;align-items:center;padding:0;display:flex;overflow:hidden}.lc-att-thumb img{object-fit:cover;width:100%;height:100%;display:block}.lc-att-ph,.lc-att-err{color:var(--dsw-alias-label-secondary);text-align:center;padding:2px;font-size:10px}.lc-att-meta{flex-direction:column;gap:2px;min-width:0;display:flex}.lc-att-name{color:var(--dsw-alias-label-primary);overflow-wrap:anywhere;word-break:break-word;font-size:12px;line-height:1.3}.lc-att-row{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;font-size:11px}.lc-att-row-label{min-width:3.2em;font-weight:400;display:inline-block}";
|
|
2580
2615
|
const tagId = "dsh-context/styles.css";
|
|
2581
2616
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
|
|
2582
2617
|
const tag = document.createElement("style");
|