@flanksource/clicky-ui 0.3.22 → 0.3.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/CountryFlag.cjs +55 -0
- package/dist/components/CountryFlag.cjs.map +1 -0
- package/dist/components/CountryFlag.d.ts +8 -0
- package/dist/components/CountryFlag.d.ts.map +1 -0
- package/dist/components/CountryFlag.js +38 -0
- package/dist/components/CountryFlag.js.map +1 -0
- package/dist/components/CountryPicker.cjs +35 -0
- package/dist/components/CountryPicker.cjs.map +1 -0
- package/dist/components/CountryPicker.d.ts +4 -0
- package/dist/components/CountryPicker.d.ts.map +1 -0
- package/dist/components/CountryPicker.js +35 -0
- package/dist/components/CountryPicker.js.map +1 -0
- package/dist/components/SplitButton.cjs +3 -2
- package/dist/components/SplitButton.cjs.map +1 -1
- package/dist/components/SplitButton.d.ts +6 -1
- package/dist/components/SplitButton.d.ts.map +1 -1
- package/dist/components/SplitButton.js +3 -2
- package/dist/components/SplitButton.js.map +1 -1
- package/dist/components/country-options.cjs +34 -0
- package/dist/components/country-options.cjs.map +1 -0
- package/dist/components/country-options.d.ts +8 -0
- package/dist/components/country-options.d.ts.map +1 -0
- package/dist/components/country-options.js +34 -0
- package/dist/components/country-options.js.map +1 -0
- package/dist/components.cjs +11 -0
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.ts +4 -0
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +11 -0
- package/dist/components.js.map +1 -1
- package/dist/data/Clicky.cjs +4 -1
- package/dist/data/Clicky.cjs.map +1 -1
- package/dist/data/Clicky.d.ts.map +1 -1
- package/dist/data/Clicky.js +4 -1
- package/dist/data/Clicky.js.map +1 -1
- package/dist/data/CodeDiff.cjs +3 -18
- package/dist/data/CodeDiff.cjs.map +1 -1
- package/dist/data/CodeDiff.d.ts.map +1 -1
- package/dist/data/CodeDiff.js +3 -18
- package/dist/data/CodeDiff.js.map +1 -1
- package/dist/data/DataTable.cjs +182 -64
- package/dist/data/DataTable.cjs.map +1 -1
- package/dist/data/DataTable.d.ts +9 -1
- package/dist/data/DataTable.d.ts.map +1 -1
- package/dist/data/DataTable.grouping.cjs +26 -0
- package/dist/data/DataTable.grouping.cjs.map +1 -1
- package/dist/data/DataTable.grouping.d.ts +38 -0
- package/dist/data/DataTable.grouping.d.ts.map +1 -1
- package/dist/data/DataTable.grouping.js +26 -0
- package/dist/data/DataTable.grouping.js.map +1 -1
- package/dist/data/DataTable.js +183 -65
- package/dist/data/DataTable.js.map +1 -1
- package/dist/data/DataTableGroupingControls.cjs +84 -0
- package/dist/data/DataTableGroupingControls.cjs.map +1 -0
- package/dist/data/DataTableGroupingControls.d.ts +17 -0
- package/dist/data/DataTableGroupingControls.d.ts.map +1 -0
- package/dist/data/DataTableGroupingControls.js +84 -0
- package/dist/data/DataTableGroupingControls.js.map +1 -0
- package/dist/data/HighlightedTokens.cjs +21 -0
- package/dist/data/HighlightedTokens.cjs.map +1 -0
- package/dist/data/HighlightedTokens.d.ts +6 -0
- package/dist/data/HighlightedTokens.d.ts.map +1 -0
- package/dist/data/HighlightedTokens.js +21 -0
- package/dist/data/HighlightedTokens.js.map +1 -0
- package/dist/data/ai/AdvancedChatConfig.cjs +3 -0
- package/dist/data/ai/AdvancedChatConfig.cjs.map +1 -1
- package/dist/data/ai/AdvancedChatConfig.d.ts +2 -1
- package/dist/data/ai/AdvancedChatConfig.d.ts.map +1 -1
- package/dist/data/ai/AdvancedChatConfig.js +3 -0
- package/dist/data/ai/AdvancedChatConfig.js.map +1 -1
- package/dist/data/ai/ChatWindow.cjs +77 -4
- package/dist/data/ai/ChatWindow.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.js +78 -5
- package/dist/data/ai/ChatWindow.js.map +1 -1
- package/dist/data/ai/ChatWindow.runtime.cjs +19 -4
- package/dist/data/ai/ChatWindow.runtime.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.runtime.d.ts +2 -0
- package/dist/data/ai/ChatWindow.runtime.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.runtime.js +19 -4
- package/dist/data/ai/ChatWindow.runtime.js.map +1 -1
- package/dist/data/ai/ChatWindow.test-utils.d.ts +2 -1
- package/dist/data/ai/ChatWindow.test-utils.d.ts.map +1 -1
- package/dist/data/ai/ToolPreferences.cjs +8 -1
- package/dist/data/ai/ToolPreferences.cjs.map +1 -1
- package/dist/data/ai/ToolPreferences.d.ts +2 -1
- package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
- package/dist/data/ai/ToolPreferences.js +8 -1
- package/dist/data/ai/ToolPreferences.js.map +1 -1
- package/dist/data/chat/Chat.cjs +26 -3
- package/dist/data/chat/Chat.cjs.map +1 -1
- package/dist/data/chat/Chat.d.ts +9 -1
- package/dist/data/chat/Chat.d.ts.map +1 -1
- package/dist/data/chat/Chat.js +26 -3
- package/dist/data/chat/Chat.js.map +1 -1
- package/dist/data/chat/ChatRuntimeToolbar.cjs +2 -0
- package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -1
- package/dist/data/chat/ChatRuntimeToolbar.d.ts +2 -1
- package/dist/data/chat/ChatRuntimeToolbar.d.ts.map +1 -1
- package/dist/data/chat/ChatRuntimeToolbar.js +2 -0
- package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -1
- package/dist/data/chat/Message.cjs +36 -1
- package/dist/data/chat/Message.cjs.map +1 -1
- package/dist/data/chat/Message.d.ts +1 -1
- package/dist/data/chat/Message.d.ts.map +1 -1
- package/dist/data/chat/Message.js +37 -2
- package/dist/data/chat/Message.js.map +1 -1
- package/dist/data/chat/approval.cjs +17 -0
- package/dist/data/chat/approval.cjs.map +1 -1
- package/dist/data/chat/approval.d.ts +5 -0
- package/dist/data/chat/approval.d.ts.map +1 -1
- package/dist/data/chat/approval.js +17 -0
- package/dist/data/chat/approval.js.map +1 -1
- package/dist/data/chat/fork-seed.cjs +22 -0
- package/dist/data/chat/fork-seed.cjs.map +1 -0
- package/dist/data/chat/fork-seed.d.ts +8 -0
- package/dist/data/chat/fork-seed.d.ts.map +1 -0
- package/dist/data/chat/fork-seed.js +22 -0
- package/dist/data/chat/fork-seed.js.map +1 -0
- package/dist/data/code-highlight.cjs +0 -6
- package/dist/data/code-highlight.cjs.map +1 -1
- package/dist/data/code-highlight.d.ts +4 -3
- package/dist/data/code-highlight.d.ts.map +1 -1
- package/dist/data/code-highlight.js +1 -7
- package/dist/data/code-highlight.js.map +1 -1
- package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs +6 -2
- package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs.map +1 -1
- package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts +8 -1
- package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts.map +1 -1
- package/dist/data/diagnostics/DiagnosticsDetailPanel.js +6 -2
- package/dist/data/diagnostics/DiagnosticsDetailPanel.js.map +1 -1
- package/dist/data/diagnostics/ErrorDetails.cjs +29 -5
- package/dist/data/diagnostics/ErrorDetails.cjs.map +1 -1
- package/dist/data/diagnostics/ErrorDetails.d.ts +3 -1
- package/dist/data/diagnostics/ErrorDetails.d.ts.map +1 -1
- package/dist/data/diagnostics/ErrorDetails.js +29 -5
- package/dist/data/diagnostics/ErrorDetails.js.map +1 -1
- package/dist/data/diagnostics/FrameSourceWindow.cjs +54 -24
- package/dist/data/diagnostics/FrameSourceWindow.cjs.map +1 -1
- package/dist/data/diagnostics/FrameSourceWindow.d.ts +2 -1
- package/dist/data/diagnostics/FrameSourceWindow.d.ts.map +1 -1
- package/dist/data/diagnostics/FrameSourceWindow.js +54 -24
- package/dist/data/diagnostics/FrameSourceWindow.js.map +1 -1
- package/dist/data/diagnostics/FrameSourceWindow.utils.cjs.map +1 -1
- package/dist/data/diagnostics/FrameSourceWindow.utils.d.ts +3 -0
- package/dist/data/diagnostics/FrameSourceWindow.utils.d.ts.map +1 -1
- package/dist/data/diagnostics/FrameSourceWindow.utils.js.map +1 -1
- package/dist/data/diagnostics/JvmStackTrace.cjs +14 -30
- package/dist/data/diagnostics/JvmStackTrace.cjs.map +1 -1
- package/dist/data/diagnostics/JvmStackTrace.d.ts +6 -9
- package/dist/data/diagnostics/JvmStackTrace.d.ts.map +1 -1
- package/dist/data/diagnostics/JvmStackTrace.js +15 -31
- package/dist/data/diagnostics/JvmStackTrace.js.map +1 -1
- package/dist/data/diagnostics/RenderedStackTrace.cjs +14 -144
- package/dist/data/diagnostics/RenderedStackTrace.cjs.map +1 -1
- package/dist/data/diagnostics/RenderedStackTrace.d.ts +6 -6
- package/dist/data/diagnostics/RenderedStackTrace.d.ts.map +1 -1
- package/dist/data/diagnostics/RenderedStackTrace.js +15 -145
- package/dist/data/diagnostics/RenderedStackTrace.js.map +1 -1
- package/dist/data/diagnostics/StackFrameRow.cjs +65 -0
- package/dist/data/diagnostics/StackFrameRow.cjs.map +1 -0
- package/dist/data/diagnostics/StackFrameRow.d.ts +13 -0
- package/dist/data/diagnostics/StackFrameRow.d.ts.map +1 -0
- package/dist/data/diagnostics/StackFrameRow.js +65 -0
- package/dist/data/diagnostics/StackFrameRow.js.map +1 -0
- package/dist/data/diagnostics/ThreadCard.cjs +9 -2
- package/dist/data/diagnostics/ThreadCard.cjs.map +1 -1
- package/dist/data/diagnostics/ThreadCard.d.ts +3 -1
- package/dist/data/diagnostics/ThreadCard.d.ts.map +1 -1
- package/dist/data/diagnostics/ThreadCard.js +9 -2
- package/dist/data/diagnostics/ThreadCard.js.map +1 -1
- package/dist/data/diagnostics/frame-heuristics.cjs +26 -0
- package/dist/data/diagnostics/frame-heuristics.cjs.map +1 -0
- package/dist/data/diagnostics/frame-heuristics.d.ts +5 -0
- package/dist/data/diagnostics/frame-heuristics.d.ts.map +1 -0
- package/dist/data/diagnostics/frame-heuristics.js +26 -0
- package/dist/data/diagnostics/frame-heuristics.js.map +1 -0
- package/dist/data/diagnostics/jvm-stacktrace.cjs +5 -7
- package/dist/data/diagnostics/jvm-stacktrace.cjs.map +1 -1
- package/dist/data/diagnostics/jvm-stacktrace.d.ts.map +1 -1
- package/dist/data/diagnostics/jvm-stacktrace.js +5 -7
- package/dist/data/diagnostics/jvm-stacktrace.js.map +1 -1
- package/dist/data/diagnostics/stacktrace-parse.cjs +4 -9
- package/dist/data/diagnostics/stacktrace-parse.cjs.map +1 -1
- package/dist/data/diagnostics/stacktrace-parse.d.ts.map +1 -1
- package/dist/data/diagnostics/stacktrace-parse.js +4 -9
- package/dist/data/diagnostics/stacktrace-parse.js.map +1 -1
- package/dist/data/runtime/RuntimeBar.cjs +3 -0
- package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBar.d.ts +3 -1
- package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBar.js +3 -0
- package/dist/data/runtime/RuntimeBar.js.map +1 -1
- package/dist/data/runtime/RuntimeBarCombo.cjs +15 -1
- package/dist/data/runtime/RuntimeBarCombo.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBarCombo.d.ts +2 -1
- package/dist/data/runtime/RuntimeBarCombo.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBarCombo.js +15 -1
- package/dist/data/runtime/RuntimeBarCombo.js.map +1 -1
- package/dist/data/runtime/RuntimeBarSegments.cjs +7 -0
- package/dist/data/runtime/RuntimeBarSegments.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBarSegments.d.ts +2 -1
- package/dist/data/runtime/RuntimeBarSegments.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBarSegments.js +7 -0
- package/dist/data/runtime/RuntimeBarSegments.js.map +1 -1
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.js +3 -3
- package/dist/data.cjs +7 -1
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +4 -2
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +8 -2
- package/dist/data.js.map +1 -1
- package/dist/index.cjs +18 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +19 -2
- package/dist/index.js.map +1 -1
- package/dist/rpc/CommandForm.cjs +8 -18
- package/dist/rpc/CommandForm.cjs.map +1 -1
- package/dist/rpc/CommandForm.d.ts +8 -2
- package/dist/rpc/CommandForm.d.ts.map +1 -1
- package/dist/rpc/CommandForm.js +9 -19
- package/dist/rpc/CommandForm.js.map +1 -1
- package/dist/rpc/OperationActionDialog.cjs +3 -3
- package/dist/rpc/OperationActionDialog.cjs.map +1 -1
- package/dist/rpc/OperationActionDialog.js +3 -3
- package/dist/rpc/OperationActionDialog.js.map +1 -1
- package/dist/rpc/OperationCommandPage.cjs +7 -7
- package/dist/rpc/OperationCommandPage.cjs.map +1 -1
- package/dist/rpc/OperationCommandPage.d.ts.map +1 -1
- package/dist/rpc/OperationCommandPage.js +7 -7
- package/dist/rpc/OperationCommandPage.js.map +1 -1
- package/dist/rpc/apiClient.cjs +17 -3
- package/dist/rpc/apiClient.cjs.map +1 -1
- package/dist/rpc/apiClient.d.ts +4 -4
- package/dist/rpc/apiClient.d.ts.map +1 -1
- package/dist/rpc/apiClient.js +17 -3
- package/dist/rpc/apiClient.js.map +1 -1
- package/dist/rpc/formMetadata.cjs +5 -9
- package/dist/rpc/formMetadata.cjs.map +1 -1
- package/dist/rpc/formMetadata.d.ts +3 -3
- package/dist/rpc/formMetadata.d.ts.map +1 -1
- package/dist/rpc/formMetadata.js +5 -9
- package/dist/rpc/formMetadata.js.map +1 -1
- package/dist/rpc/rpc-story.fixtures.d.ts.map +1 -1
- package/dist/rpc/types.cjs.map +1 -1
- package/dist/rpc/types.d.ts +1 -0
- package/dist/rpc/types.d.ts.map +1 -1
- package/dist/rpc/types.js.map +1 -1
- package/dist/rpc/useOperations.cjs.map +1 -1
- package/dist/rpc/useOperations.d.ts +4 -4
- package/dist/rpc/useOperations.d.ts.map +1 -1
- package/dist/rpc/useOperations.js.map +1 -1
- package/dist/rpc.d.ts +2 -2
- package/dist/rpc.d.ts.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +2 -1
|
@@ -1,33 +1,63 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
const react = require("react");
|
|
5
|
+
const codeHighlight = require("../code-highlight.cjs");
|
|
6
|
+
const HighlightedTokens = require("../HighlightedTokens.cjs");
|
|
7
|
+
function FrameSourceWindow({
|
|
8
|
+
frame,
|
|
9
|
+
className
|
|
10
|
+
}) {
|
|
11
|
+
const lines = react.useMemo(() => frame.sourceLines ?? [], [frame.sourceLines]);
|
|
7
12
|
const start = frame.sourceStartLine ?? 0;
|
|
8
13
|
const numbers = frame.sourceLineNumbers;
|
|
9
14
|
const focal = frame.line ?? -1;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
15
|
+
const language = frame.sourceLanguage;
|
|
16
|
+
const [tokens, setTokens] = react.useState(null);
|
|
17
|
+
react.useEffect(() => {
|
|
18
|
+
if (lines.length === 0) {
|
|
19
|
+
setTokens(null);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
let cancelled = false;
|
|
23
|
+
codeHighlight.highlightToLines(lines.join("\n"), { lang: language }).then((out) => {
|
|
24
|
+
if (!cancelled) setTokens(out);
|
|
25
|
+
});
|
|
26
|
+
return () => {
|
|
27
|
+
cancelled = true;
|
|
28
|
+
};
|
|
29
|
+
}, [lines, language]);
|
|
30
|
+
if (lines.length === 0) return null;
|
|
31
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
32
|
+
"div",
|
|
33
|
+
{
|
|
34
|
+
className: [
|
|
35
|
+
"mx-3 mb-2 ml-12 overflow-x-auto rounded border border-border/60 bg-muted/30 py-1 font-mono text-[11px] leading-relaxed",
|
|
36
|
+
className
|
|
37
|
+
].filter(Boolean).join(" "),
|
|
38
|
+
children: lines.map((source, i) => {
|
|
39
|
+
const lineNumber = (numbers == null ? void 0 : numbers[i]) ?? start + i;
|
|
40
|
+
const isFocal = lineNumber === focal;
|
|
41
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
42
|
+
"div",
|
|
43
|
+
{
|
|
44
|
+
className: [
|
|
45
|
+
"grid min-w-max grid-cols-[3.5rem_minmax(24rem,1fr)] gap-3 px-2",
|
|
46
|
+
isFocal ? "bg-red-500/10 font-semibold text-red-800 dark:text-red-300" : "text-foreground"
|
|
47
|
+
].join(" "),
|
|
48
|
+
children: [
|
|
49
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "select-none text-right text-muted-foreground", children: [
|
|
50
|
+
isFocal ? ">" : "",
|
|
51
|
+
lineNumber
|
|
52
|
+
] }),
|
|
53
|
+
/* @__PURE__ */ jsxRuntime.jsx("code", { className: "whitespace-pre", children: source ? /* @__PURE__ */ jsxRuntime.jsx(HighlightedTokens.HighlightedTokens, { tokens: tokens == null ? void 0 : tokens[i], content: source }) : " " })
|
|
54
|
+
]
|
|
55
|
+
},
|
|
56
|
+
`${lineNumber}-${i}`
|
|
57
|
+
);
|
|
58
|
+
})
|
|
59
|
+
}
|
|
60
|
+
);
|
|
31
61
|
}
|
|
32
62
|
exports.FrameSourceWindow = FrameSourceWindow;
|
|
33
63
|
//# sourceMappingURL=FrameSourceWindow.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FrameSourceWindow.cjs","sources":["../../../src/data/diagnostics/FrameSourceWindow.tsx"],"sourcesContent":["import type { FrameSource } from \"./FrameSourceWindow.utils\";\n\n// FrameSourceWindow renders a decompiled / resolved source window beneath a\n// stack frame: a gutter of absolute line numbers with the focal line (the one\n// the frame points at) highlighted. It is the
|
|
1
|
+
{"version":3,"file":"FrameSourceWindow.cjs","sources":["../../../src/data/diagnostics/FrameSourceWindow.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\nimport { highlightToLines, type HighlightedLine } from \"../code-highlight\";\nimport { HighlightedTokens } from \"../HighlightedTokens\";\nimport type { FrameSource } from \"./FrameSourceWindow.utils\";\n\n// FrameSourceWindow renders a decompiled / resolved source window beneath a\n// stack frame: a gutter of absolute line numbers with the focal line (the one\n// the frame points at) highlighted. It is the single source-window renderer,\n// shared by the JVM thread-dump frames, the exception stack-trace frames, and\n// frameless callers that have source but no stack (a template error, a single\n// decompiled class).\n//\n// The gutter is painted explicitly rather than by embedding Shiki's own `<pre>`,\n// because `sourceLineNumbers` is frequently NOT a contiguous run: arthas `jad`\n// returns bytecode-keyed line numbers with gaps. A CSS-counter gutter would\n// silently renumber those. Tokenizing via `highlightToLines` keeps the\n// highlighting while letting us own the numbering — the same trade CodeDiff makes.\nexport function FrameSourceWindow({\n frame,\n className,\n}: {\n frame: FrameSource;\n className?: string;\n}) {\n const lines = useMemo(() => frame.sourceLines ?? [], [frame.sourceLines]);\n const start = frame.sourceStartLine ?? 0;\n const numbers = frame.sourceLineNumbers;\n const focal = frame.line ?? -1;\n // No default language: this renderer is shared by JVM frames, exception frames\n // and frameless callers, so a Go dump or a template error must not be coloured\n // with Java grammar. `highlightToLines` returns null without a language and\n // `HighlightedTokens` then paints the plain source.\n const language = frame.sourceLanguage;\n\n const [tokens, setTokens] = useState<HighlightedLine[] | null>(null);\n\n useEffect(() => {\n if (lines.length === 0) {\n setTokens(null);\n return;\n }\n let cancelled = false;\n highlightToLines(lines.join(\"\\n\"), { lang: language }).then((out) => {\n if (!cancelled) setTokens(out);\n });\n return () => {\n cancelled = true;\n };\n }, [lines, language]);\n\n if (lines.length === 0) return null;\n\n return (\n <div\n className={[\n \"mx-3 mb-2 ml-12 overflow-x-auto rounded border border-border/60 bg-muted/30 py-1 font-mono text-[11px] leading-relaxed\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {lines.map((source, i) => {\n const lineNumber = numbers?.[i] ?? start + i;\n const isFocal = lineNumber === focal;\n return (\n <div\n key={`${lineNumber}-${i}`}\n className={[\n \"grid min-w-max grid-cols-[3.5rem_minmax(24rem,1fr)] gap-3 px-2\",\n isFocal ? \"bg-red-500/10 font-semibold text-red-800 dark:text-red-300\" : \"text-foreground\",\n ].join(\" \")}\n >\n <span className=\"select-none text-right text-muted-foreground\">\n {isFocal ? \">\" : \"\"}\n {lineNumber}\n </span>\n <code className=\"whitespace-pre\">\n {source ? <HighlightedTokens tokens={tokens?.[i]} content={source} /> : \" \"}\n </code>\n </div>\n );\n })}\n </div>\n );\n}\n"],"names":["useMemo","useState","useEffect","highlightToLines","jsx","jsxs","HighlightedTokens"],"mappings":";;;;;;AAiBO,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AACF,GAGG;AACD,QAAM,QAAQA,MAAAA,QAAQ,MAAM,MAAM,eAAe,IAAI,CAAC,MAAM,WAAW,CAAC;AACxE,QAAM,QAAQ,MAAM,mBAAmB;AACvC,QAAM,UAAU,MAAM;AACtB,QAAM,QAAQ,MAAM,QAAQ;AAK5B,QAAM,WAAW,MAAM;AAEvB,QAAM,CAAC,QAAQ,SAAS,IAAIC,MAAAA,SAAmC,IAAI;AAEnEC,QAAAA,UAAU,MAAM;AACd,QAAI,MAAM,WAAW,GAAG;AACtB,gBAAU,IAAI;AACd;AAAA,IACF;AACA,QAAI,YAAY;AAChBC,kBAAAA,iBAAiB,MAAM,KAAK,IAAI,GAAG,EAAE,MAAM,UAAU,EAAE,KAAK,CAAC,QAAQ;AACnE,UAAI,CAAC,UAAW,WAAU,GAAG;AAAA,IAC/B,CAAC;AACD,WAAO,MAAM;AACX,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,OAAO,QAAQ,CAAC;AAEpB,MAAI,MAAM,WAAW,EAAG,QAAO;AAE/B,SACEC,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MAEV,UAAA,MAAM,IAAI,CAAC,QAAQ,MAAM;AACxB,cAAM,cAAa,mCAAU,OAAM,QAAQ;AAC3C,cAAM,UAAU,eAAe;AAC/B,eACEC,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YAEC,WAAW;AAAA,cACT;AAAA,cACA,UAAU,+DAA+D;AAAA,YAAA,EACzE,KAAK,GAAG;AAAA,YAEV,UAAA;AAAA,cAAAA,2BAAAA,KAAC,QAAA,EAAK,WAAU,gDACb,UAAA;AAAA,gBAAA,UAAU,MAAM;AAAA,gBAChB;AAAA,cAAA,GACH;AAAA,cACAD,2BAAAA,IAAC,QAAA,EAAK,WAAU,kBACb,mBAASA,+BAACE,kBAAAA,mBAAA,EAAkB,QAAQ,iCAAS,IAAI,SAAS,OAAA,CAAQ,IAAK,IAAA,CAC1E;AAAA,YAAA;AAAA,UAAA;AAAA,UAZK,GAAG,UAAU,IAAI,CAAC;AAAA,QAAA;AAAA,MAe7B,CAAC;AAAA,IAAA;AAAA,EAAA;AAGP;;"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { FrameSource } from './FrameSourceWindow.utils';
|
|
2
|
-
export declare function FrameSourceWindow({ frame }: {
|
|
2
|
+
export declare function FrameSourceWindow({ frame, className, }: {
|
|
3
3
|
frame: FrameSource;
|
|
4
|
+
className?: string;
|
|
4
5
|
}): import("react/jsx-runtime").JSX.Element | null;
|
|
5
6
|
//# sourceMappingURL=FrameSourceWindow.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FrameSourceWindow.d.ts","sourceRoot":"","sources":["../../../src/data/diagnostics/FrameSourceWindow.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FrameSourceWindow.d.ts","sourceRoot":"","sources":["../../../src/data/diagnostics/FrameSourceWindow.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAc7D,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,SAAS,GACV,EAAE;IACD,KAAK,EAAE,WAAW,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,kDA6DA"}
|
|
@@ -1,31 +1,61 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import { useMemo, useState, useEffect } from "react";
|
|
3
|
+
import { highlightToLines } from "../code-highlight.js";
|
|
4
|
+
import { HighlightedTokens } from "../HighlightedTokens.js";
|
|
5
|
+
function FrameSourceWindow({
|
|
6
|
+
frame,
|
|
7
|
+
className
|
|
8
|
+
}) {
|
|
9
|
+
const lines = useMemo(() => frame.sourceLines ?? [], [frame.sourceLines]);
|
|
5
10
|
const start = frame.sourceStartLine ?? 0;
|
|
6
11
|
const numbers = frame.sourceLineNumbers;
|
|
7
12
|
const focal = frame.line ?? -1;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
13
|
+
const language = frame.sourceLanguage;
|
|
14
|
+
const [tokens, setTokens] = useState(null);
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
if (lines.length === 0) {
|
|
17
|
+
setTokens(null);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
let cancelled = false;
|
|
21
|
+
highlightToLines(lines.join("\n"), { lang: language }).then((out) => {
|
|
22
|
+
if (!cancelled) setTokens(out);
|
|
23
|
+
});
|
|
24
|
+
return () => {
|
|
25
|
+
cancelled = true;
|
|
26
|
+
};
|
|
27
|
+
}, [lines, language]);
|
|
28
|
+
if (lines.length === 0) return null;
|
|
29
|
+
return /* @__PURE__ */ jsx(
|
|
30
|
+
"div",
|
|
31
|
+
{
|
|
32
|
+
className: [
|
|
33
|
+
"mx-3 mb-2 ml-12 overflow-x-auto rounded border border-border/60 bg-muted/30 py-1 font-mono text-[11px] leading-relaxed",
|
|
34
|
+
className
|
|
35
|
+
].filter(Boolean).join(" "),
|
|
36
|
+
children: lines.map((source, i) => {
|
|
37
|
+
const lineNumber = (numbers == null ? void 0 : numbers[i]) ?? start + i;
|
|
38
|
+
const isFocal = lineNumber === focal;
|
|
39
|
+
return /* @__PURE__ */ jsxs(
|
|
40
|
+
"div",
|
|
41
|
+
{
|
|
42
|
+
className: [
|
|
43
|
+
"grid min-w-max grid-cols-[3.5rem_minmax(24rem,1fr)] gap-3 px-2",
|
|
44
|
+
isFocal ? "bg-red-500/10 font-semibold text-red-800 dark:text-red-300" : "text-foreground"
|
|
45
|
+
].join(" "),
|
|
46
|
+
children: [
|
|
47
|
+
/* @__PURE__ */ jsxs("span", { className: "select-none text-right text-muted-foreground", children: [
|
|
48
|
+
isFocal ? ">" : "",
|
|
49
|
+
lineNumber
|
|
50
|
+
] }),
|
|
51
|
+
/* @__PURE__ */ jsx("code", { className: "whitespace-pre", children: source ? /* @__PURE__ */ jsx(HighlightedTokens, { tokens: tokens == null ? void 0 : tokens[i], content: source }) : " " })
|
|
52
|
+
]
|
|
53
|
+
},
|
|
54
|
+
`${lineNumber}-${i}`
|
|
55
|
+
);
|
|
56
|
+
})
|
|
57
|
+
}
|
|
58
|
+
);
|
|
29
59
|
}
|
|
30
60
|
export {
|
|
31
61
|
FrameSourceWindow
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FrameSourceWindow.js","sources":["../../../src/data/diagnostics/FrameSourceWindow.tsx"],"sourcesContent":["import type { FrameSource } from \"./FrameSourceWindow.utils\";\n\n// FrameSourceWindow renders a decompiled / resolved source window beneath a\n// stack frame: a gutter of absolute line numbers with the focal line (the one\n// the frame points at) highlighted. It is the
|
|
1
|
+
{"version":3,"file":"FrameSourceWindow.js","sources":["../../../src/data/diagnostics/FrameSourceWindow.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\nimport { highlightToLines, type HighlightedLine } from \"../code-highlight\";\nimport { HighlightedTokens } from \"../HighlightedTokens\";\nimport type { FrameSource } from \"./FrameSourceWindow.utils\";\n\n// FrameSourceWindow renders a decompiled / resolved source window beneath a\n// stack frame: a gutter of absolute line numbers with the focal line (the one\n// the frame points at) highlighted. It is the single source-window renderer,\n// shared by the JVM thread-dump frames, the exception stack-trace frames, and\n// frameless callers that have source but no stack (a template error, a single\n// decompiled class).\n//\n// The gutter is painted explicitly rather than by embedding Shiki's own `<pre>`,\n// because `sourceLineNumbers` is frequently NOT a contiguous run: arthas `jad`\n// returns bytecode-keyed line numbers with gaps. A CSS-counter gutter would\n// silently renumber those. Tokenizing via `highlightToLines` keeps the\n// highlighting while letting us own the numbering — the same trade CodeDiff makes.\nexport function FrameSourceWindow({\n frame,\n className,\n}: {\n frame: FrameSource;\n className?: string;\n}) {\n const lines = useMemo(() => frame.sourceLines ?? [], [frame.sourceLines]);\n const start = frame.sourceStartLine ?? 0;\n const numbers = frame.sourceLineNumbers;\n const focal = frame.line ?? -1;\n // No default language: this renderer is shared by JVM frames, exception frames\n // and frameless callers, so a Go dump or a template error must not be coloured\n // with Java grammar. `highlightToLines` returns null without a language and\n // `HighlightedTokens` then paints the plain source.\n const language = frame.sourceLanguage;\n\n const [tokens, setTokens] = useState<HighlightedLine[] | null>(null);\n\n useEffect(() => {\n if (lines.length === 0) {\n setTokens(null);\n return;\n }\n let cancelled = false;\n highlightToLines(lines.join(\"\\n\"), { lang: language }).then((out) => {\n if (!cancelled) setTokens(out);\n });\n return () => {\n cancelled = true;\n };\n }, [lines, language]);\n\n if (lines.length === 0) return null;\n\n return (\n <div\n className={[\n \"mx-3 mb-2 ml-12 overflow-x-auto rounded border border-border/60 bg-muted/30 py-1 font-mono text-[11px] leading-relaxed\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {lines.map((source, i) => {\n const lineNumber = numbers?.[i] ?? start + i;\n const isFocal = lineNumber === focal;\n return (\n <div\n key={`${lineNumber}-${i}`}\n className={[\n \"grid min-w-max grid-cols-[3.5rem_minmax(24rem,1fr)] gap-3 px-2\",\n isFocal ? \"bg-red-500/10 font-semibold text-red-800 dark:text-red-300\" : \"text-foreground\",\n ].join(\" \")}\n >\n <span className=\"select-none text-right text-muted-foreground\">\n {isFocal ? \">\" : \"\"}\n {lineNumber}\n </span>\n <code className=\"whitespace-pre\">\n {source ? <HighlightedTokens tokens={tokens?.[i]} content={source} /> : \" \"}\n </code>\n </div>\n );\n })}\n </div>\n );\n}\n"],"names":[],"mappings":";;;;AAiBO,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AACF,GAGG;AACD,QAAM,QAAQ,QAAQ,MAAM,MAAM,eAAe,IAAI,CAAC,MAAM,WAAW,CAAC;AACxE,QAAM,QAAQ,MAAM,mBAAmB;AACvC,QAAM,UAAU,MAAM;AACtB,QAAM,QAAQ,MAAM,QAAQ;AAK5B,QAAM,WAAW,MAAM;AAEvB,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAmC,IAAI;AAEnE,YAAU,MAAM;AACd,QAAI,MAAM,WAAW,GAAG;AACtB,gBAAU,IAAI;AACd;AAAA,IACF;AACA,QAAI,YAAY;AAChB,qBAAiB,MAAM,KAAK,IAAI,GAAG,EAAE,MAAM,UAAU,EAAE,KAAK,CAAC,QAAQ;AACnE,UAAI,CAAC,UAAW,WAAU,GAAG;AAAA,IAC/B,CAAC;AACD,WAAO,MAAM;AACX,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,OAAO,QAAQ,CAAC;AAEpB,MAAI,MAAM,WAAW,EAAG,QAAO;AAE/B,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MAEV,UAAA,MAAM,IAAI,CAAC,QAAQ,MAAM;AACxB,cAAM,cAAa,mCAAU,OAAM,QAAQ;AAC3C,cAAM,UAAU,eAAe;AAC/B,eACE;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,WAAW;AAAA,cACT;AAAA,cACA,UAAU,+DAA+D;AAAA,YAAA,EACzE,KAAK,GAAG;AAAA,YAEV,UAAA;AAAA,cAAA,qBAAC,QAAA,EAAK,WAAU,gDACb,UAAA;AAAA,gBAAA,UAAU,MAAM;AAAA,gBAChB;AAAA,cAAA,GACH;AAAA,cACA,oBAAC,QAAA,EAAK,WAAU,kBACb,mBAAS,oBAAC,mBAAA,EAAkB,QAAQ,iCAAS,IAAI,SAAS,OAAA,CAAQ,IAAK,IAAA,CAC1E;AAAA,YAAA;AAAA,UAAA;AAAA,UAZK,GAAG,UAAU,IAAI,CAAC;AAAA,QAAA;AAAA,MAe7B,CAAC;AAAA,IAAA;AAAA,EAAA;AAGP;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FrameSourceWindow.utils.cjs","sources":["../../../src/data/diagnostics/FrameSourceWindow.utils.ts"],"sourcesContent":["export interface FrameSource {\n /** Source lines around the focal line. */\n sourceLines?: string[];\n /** Absolute line number for each entry in sourceLines (preferred gutter). */\n sourceLineNumbers?: number[];\n /** Line number of sourceLines[0] when sourceLineNumbers is absent. */\n sourceStartLine?: number;\n /** The frame's focal line, highlighted when it falls inside the window. */\n line?: number;\n}\n\nexport function frameHasSource(frame: FrameSource): boolean {\n return !!frame.sourceLines && frame.sourceLines.length > 0;\n}\n"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"FrameSourceWindow.utils.cjs","sources":["../../../src/data/diagnostics/FrameSourceWindow.utils.ts"],"sourcesContent":["export interface FrameSource {\n /** Source lines around the focal line. */\n sourceLines?: string[];\n /** Absolute line number for each entry in sourceLines (preferred gutter). */\n sourceLineNumbers?: number[];\n /** Line number of sourceLines[0] when sourceLineNumbers is absent. */\n sourceStartLine?: number;\n /** The frame's focal line, highlighted when it falls inside the window. */\n line?: number;\n /** Highlighter language for the window's contents. Omit when unknown: the\n * window then renders plain, un-tokenized source rather than guessing. */\n sourceLanguage?: string;\n}\n\nexport function frameHasSource(frame: FrameSource): boolean {\n return !!frame.sourceLines && frame.sourceLines.length > 0;\n}\n"],"names":[],"mappings":";;AAcO,SAAS,eAAe,OAA6B;AAC1D,SAAO,CAAC,CAAC,MAAM,eAAe,MAAM,YAAY,SAAS;AAC3D;;"}
|
|
@@ -7,6 +7,9 @@ export interface FrameSource {
|
|
|
7
7
|
sourceStartLine?: number;
|
|
8
8
|
/** The frame's focal line, highlighted when it falls inside the window. */
|
|
9
9
|
line?: number;
|
|
10
|
+
/** Highlighter language for the window's contents. Omit when unknown: the
|
|
11
|
+
* window then renders plain, un-tokenized source rather than guessing. */
|
|
12
|
+
sourceLanguage?: string;
|
|
10
13
|
}
|
|
11
14
|
export declare function frameHasSource(frame: FrameSource): boolean;
|
|
12
15
|
//# sourceMappingURL=FrameSourceWindow.utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FrameSourceWindow.utils.d.ts","sourceRoot":"","sources":["../../../src/data/diagnostics/FrameSourceWindow.utils.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,6EAA6E;IAC7E,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,sEAAsE;IACtE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"FrameSourceWindow.utils.d.ts","sourceRoot":"","sources":["../../../src/data/diagnostics/FrameSourceWindow.utils.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,6EAA6E;IAC7E,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,sEAAsE;IACtE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;+EAC2E;IAC3E,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAE1D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FrameSourceWindow.utils.js","sources":["../../../src/data/diagnostics/FrameSourceWindow.utils.ts"],"sourcesContent":["export interface FrameSource {\n /** Source lines around the focal line. */\n sourceLines?: string[];\n /** Absolute line number for each entry in sourceLines (preferred gutter). */\n sourceLineNumbers?: number[];\n /** Line number of sourceLines[0] when sourceLineNumbers is absent. */\n sourceStartLine?: number;\n /** The frame's focal line, highlighted when it falls inside the window. */\n line?: number;\n}\n\nexport function frameHasSource(frame: FrameSource): boolean {\n return !!frame.sourceLines && frame.sourceLines.length > 0;\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FrameSourceWindow.utils.js","sources":["../../../src/data/diagnostics/FrameSourceWindow.utils.ts"],"sourcesContent":["export interface FrameSource {\n /** Source lines around the focal line. */\n sourceLines?: string[];\n /** Absolute line number for each entry in sourceLines (preferred gutter). */\n sourceLineNumbers?: number[];\n /** Line number of sourceLines[0] when sourceLineNumbers is absent. */\n sourceStartLine?: number;\n /** The frame's focal line, highlighted when it falls inside the window. */\n line?: number;\n /** Highlighter language for the window's contents. Omit when unknown: the\n * window then renders plain, un-tokenized source rather than guessing. */\n sourceLanguage?: string;\n}\n\nexport function frameHasSource(frame: FrameSource): boolean {\n return !!frame.sourceLines && frame.sourceLines.length > 0;\n}\n"],"names":[],"mappings":"AAcO,SAAS,eAAe,OAA6B;AAC1D,SAAO,CAAC,CAAC,MAAM,eAAe,MAAM,YAAY,SAAS;AAC3D;"}
|
|
@@ -1,46 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
-
const
|
|
5
|
-
const FrameSourceWindow = require("./FrameSourceWindow.cjs");
|
|
6
|
-
const FrameSourceWindow_utils = require("./FrameSourceWindow.utils.cjs");
|
|
7
|
-
const UiLock = require("../../icons/components/UiLock.cjs");
|
|
8
|
-
const UiSync = require("../../icons/components/UiSync.cjs");
|
|
9
|
-
const UiWatch = require("../../icons/components/UiWatch.cjs");
|
|
10
|
-
const UiChip = require("../../icons/components/UiChip.cjs");
|
|
11
|
-
const UiDebugStepOver = require("../../icons/components/UiDebugStepOver.cjs");
|
|
12
|
-
const UiMethod = require("../../icons/components/UiMethod.cjs");
|
|
4
|
+
const StackFrameRow = require("./StackFrameRow.cjs");
|
|
13
5
|
function JvmStackTrace({
|
|
14
6
|
frames,
|
|
15
7
|
hideRuntimeOnly = false,
|
|
16
8
|
className,
|
|
17
|
-
resolveSource
|
|
9
|
+
resolveSource,
|
|
10
|
+
frameActions
|
|
18
11
|
}) {
|
|
19
12
|
const visibleFrames = hideRuntimeOnly ? frames.filter((frame) => frame.kind !== "frame" || !frame.runtime) : frames;
|
|
20
13
|
if (visibleFrames.length === 0) return null;
|
|
21
14
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className, children: visibleFrames.map((frame, index) => {
|
|
22
15
|
const resolved = resolveSource == null ? void 0 : resolveSource(frame);
|
|
23
|
-
const
|
|
24
|
-
|
|
16
|
+
const { line: _ignored, ...source } = resolved ?? {};
|
|
17
|
+
const withSource = resolved ? { ...frame, ...source } : frame;
|
|
18
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
19
|
+
StackFrameRow.StackFrameRow,
|
|
20
|
+
{
|
|
21
|
+
frame: withSource,
|
|
22
|
+
index,
|
|
23
|
+
...frameActions ? { frameActions } : {}
|
|
24
|
+
},
|
|
25
|
+
`${frame.functionName}-${index}`
|
|
26
|
+
);
|
|
25
27
|
}) });
|
|
26
28
|
}
|
|
27
|
-
function JvmStackFrameRow({ frame }) {
|
|
28
|
-
const isAnno = frame.kind !== "frame";
|
|
29
|
-
const icon = isAnno ? frame.kind === "locked" ? UiLock.UiLock : frame.kind === "waiting_to_lock" ? UiSync.UiSync : UiWatch.UiWatch : frame.nativeMethod ? UiChip.UiChip : frame.runtime ? UiDebugStepOver.UiDebugStepOver : UiMethod.UiMethod;
|
|
30
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: frame.runtime ? "text-muted-foreground" : "text-foreground", children: [
|
|
31
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-1.5", children: [
|
|
32
|
-
/* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon, className: "mt-0.5 shrink-0 text-[11px]" }),
|
|
33
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "break-all font-mono text-[11px] font-semibold leading-4", children: isAnno ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
34
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "opacity-70", children: frame.functionName }),
|
|
35
|
-
frame.annotationText && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-2 font-normal opacity-80", children: frame.annotationText })
|
|
36
|
-
] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
37
|
-
frame.displayName,
|
|
38
|
-
frame.location && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-2 text-[10px] font-normal opacity-80", children: frame.location })
|
|
39
|
-
] }) }) })
|
|
40
|
-
] }),
|
|
41
|
-
!isAnno && FrameSourceWindow_utils.frameHasSource(frame) && /* @__PURE__ */ jsxRuntime.jsx(FrameSourceWindow.FrameSourceWindow, { frame })
|
|
42
|
-
] });
|
|
43
|
-
}
|
|
44
|
-
exports.JvmStackFrameRow = JvmStackFrameRow;
|
|
45
29
|
exports.JvmStackTrace = JvmStackTrace;
|
|
46
30
|
//# sourceMappingURL=JvmStackTrace.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JvmStackTrace.cjs","sources":["../../../src/data/diagnostics/JvmStackTrace.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"JvmStackTrace.cjs","sources":["../../../src/data/diagnostics/JvmStackTrace.tsx"],"sourcesContent":["import type { ParsedThreadFrame } from \"./jvm-stacktrace\";\nimport type { FrameSource } from \"./FrameSourceWindow.utils\";\nimport { StackFrameRow, type StackFrameActions } from \"./StackFrameRow\";\n\n// JvmFrameSourceResolver returns a source window for a frame, or undefined when\n// no source is available (a missing class must never blank out the frame). Used\n// to augment the rendered thread dump with decompiled source in place. Shares\n// its return shape with StackTraceSourceResolver so one resolver can serve both\n// the thread-dump and the exception surfaces.\nexport type JvmFrameSourceResolver = (frame: ParsedThreadFrame) => FrameSource | undefined;\n\nexport type JvmStackTraceProps = {\n frames: ParsedThreadFrame[];\n hideRuntimeOnly?: boolean;\n className?: string;\n /** Optional resolver that supplies inline source under each frame. */\n resolveSource?: JvmFrameSourceResolver;\n /** Trailing per-frame actions, revealed on hover/focus. */\n frameActions?: StackFrameActions;\n};\n\n// JvmStackTrace renders a parsed thread dump: frames plus the lock/monitor\n// annotation entries interleaved with them. It is a bare frame list — the\n// thread's own header, state badge and controls belong to the surrounding card\n// (see ThreadCard / DiagnosticsDetailPanel). Frames render through the shared\n// StackFrameRow, so they match an exception stack trace exactly.\nexport function JvmStackTrace({\n frames,\n hideRuntimeOnly = false,\n className,\n resolveSource,\n frameActions,\n}: JvmStackTraceProps) {\n const visibleFrames = hideRuntimeOnly\n ? frames.filter((frame) => frame.kind !== \"frame\" || !frame.runtime)\n : frames;\n\n if (visibleFrames.length === 0) return null;\n\n return (\n <div className={className}>\n {visibleFrames.map((frame, index) => {\n const resolved = resolveSource?.(frame);\n // `line` stays the frame's own — see the note in RenderedStackTrace.\n const { line: _ignored, ...source } = resolved ?? {};\n const withSource = resolved ? { ...frame, ...source } : frame;\n return (\n <StackFrameRow\n key={`${frame.functionName}-${index}`}\n frame={withSource}\n index={index}\n {...(frameActions ? { frameActions } : {})}\n />\n );\n })}\n </div>\n );\n}\n"],"names":["jsx","StackFrameRow"],"mappings":";;;;AA0BO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA,kBAAkB;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AACF,GAAuB;AACrB,QAAM,gBAAgB,kBAClB,OAAO,OAAO,CAAC,UAAU,MAAM,SAAS,WAAW,CAAC,MAAM,OAAO,IACjE;AAEJ,MAAI,cAAc,WAAW,EAAG,QAAO;AAEvC,wCACG,OAAA,EAAI,WACF,wBAAc,IAAI,CAAC,OAAO,UAAU;AACnC,UAAM,WAAW,+CAAgB;AAEjC,UAAM,EAAE,MAAM,UAAU,GAAG,OAAA,IAAW,YAAY,CAAA;AAClD,UAAM,aAAa,WAAW,EAAE,GAAG,OAAO,GAAG,WAAW;AACxD,WACEA,2BAAAA;AAAAA,MAACC,cAAAA;AAAAA,MAAA;AAAA,QAEC,OAAO;AAAA,QACP;AAAA,QACC,GAAI,eAAe,EAAE,iBAAiB,CAAA;AAAA,MAAC;AAAA,MAHnC,GAAG,MAAM,YAAY,IAAI,KAAK;AAAA,IAAA;AAAA,EAMzC,CAAC,EAAA,CACH;AAEJ;;"}
|
|
@@ -1,18 +1,15 @@
|
|
|
1
1
|
import { ParsedThreadFrame } from './jvm-stacktrace';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
sourceStartLine?: number;
|
|
6
|
-
} | undefined;
|
|
2
|
+
import { FrameSource } from './FrameSourceWindow.utils';
|
|
3
|
+
import { StackFrameActions } from './StackFrameRow';
|
|
4
|
+
export type JvmFrameSourceResolver = (frame: ParsedThreadFrame) => FrameSource | undefined;
|
|
7
5
|
export type JvmStackTraceProps = {
|
|
8
6
|
frames: ParsedThreadFrame[];
|
|
9
7
|
hideRuntimeOnly?: boolean;
|
|
10
8
|
className?: string;
|
|
11
9
|
/** Optional resolver that supplies inline source under each frame. */
|
|
12
10
|
resolveSource?: JvmFrameSourceResolver;
|
|
11
|
+
/** Trailing per-frame actions, revealed on hover/focus. */
|
|
12
|
+
frameActions?: StackFrameActions;
|
|
13
13
|
};
|
|
14
|
-
export declare function JvmStackTrace({ frames, hideRuntimeOnly, className, resolveSource, }: JvmStackTraceProps): import("react/jsx-runtime").JSX.Element | null;
|
|
15
|
-
export declare function JvmStackFrameRow({ frame }: {
|
|
16
|
-
frame: ParsedThreadFrame;
|
|
17
|
-
}): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export declare function JvmStackTrace({ frames, hideRuntimeOnly, className, resolveSource, frameActions, }: JvmStackTraceProps): import("react/jsx-runtime").JSX.Element | null;
|
|
18
15
|
//# sourceMappingURL=JvmStackTrace.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JvmStackTrace.d.ts","sourceRoot":"","sources":["../../../src/data/diagnostics/JvmStackTrace.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"JvmStackTrace.d.ts","sourceRoot":"","sources":["../../../src/data/diagnostics/JvmStackTrace.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAOxE,MAAM,MAAM,sBAAsB,GAAG,CAAC,KAAK,EAAE,iBAAiB,KAAK,WAAW,GAAG,SAAS,CAAC;AAE3F,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,aAAa,CAAC,EAAE,sBAAsB,CAAC;IACvC,2DAA2D;IAC3D,YAAY,CAAC,EAAE,iBAAiB,CAAC;CAClC,CAAC;AAOF,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,eAAuB,EACvB,SAAS,EACT,aAAa,EACb,YAAY,GACb,EAAE,kBAAkB,kDAyBpB"}
|
|
@@ -1,46 +1,30 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { FrameSourceWindow } from "./FrameSourceWindow.js";
|
|
4
|
-
import { frameHasSource } from "./FrameSourceWindow.utils.js";
|
|
5
|
-
import { UiLock } from "../../icons/components/UiLock.js";
|
|
6
|
-
import { UiSync } from "../../icons/components/UiSync.js";
|
|
7
|
-
import { UiWatch } from "../../icons/components/UiWatch.js";
|
|
8
|
-
import { UiChip } from "../../icons/components/UiChip.js";
|
|
9
|
-
import { UiDebugStepOver } from "../../icons/components/UiDebugStepOver.js";
|
|
10
|
-
import { UiMethod } from "../../icons/components/UiMethod.js";
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { StackFrameRow } from "./StackFrameRow.js";
|
|
11
3
|
function JvmStackTrace({
|
|
12
4
|
frames,
|
|
13
5
|
hideRuntimeOnly = false,
|
|
14
6
|
className,
|
|
15
|
-
resolveSource
|
|
7
|
+
resolveSource,
|
|
8
|
+
frameActions
|
|
16
9
|
}) {
|
|
17
10
|
const visibleFrames = hideRuntimeOnly ? frames.filter((frame) => frame.kind !== "frame" || !frame.runtime) : frames;
|
|
18
11
|
if (visibleFrames.length === 0) return null;
|
|
19
12
|
return /* @__PURE__ */ jsx("div", { className, children: visibleFrames.map((frame, index) => {
|
|
20
13
|
const resolved = resolveSource == null ? void 0 : resolveSource(frame);
|
|
21
|
-
const
|
|
22
|
-
|
|
14
|
+
const { line: _ignored, ...source } = resolved ?? {};
|
|
15
|
+
const withSource = resolved ? { ...frame, ...source } : frame;
|
|
16
|
+
return /* @__PURE__ */ jsx(
|
|
17
|
+
StackFrameRow,
|
|
18
|
+
{
|
|
19
|
+
frame: withSource,
|
|
20
|
+
index,
|
|
21
|
+
...frameActions ? { frameActions } : {}
|
|
22
|
+
},
|
|
23
|
+
`${frame.functionName}-${index}`
|
|
24
|
+
);
|
|
23
25
|
}) });
|
|
24
26
|
}
|
|
25
|
-
function JvmStackFrameRow({ frame }) {
|
|
26
|
-
const isAnno = frame.kind !== "frame";
|
|
27
|
-
const icon = isAnno ? frame.kind === "locked" ? UiLock : frame.kind === "waiting_to_lock" ? UiSync : UiWatch : frame.nativeMethod ? UiChip : frame.runtime ? UiDebugStepOver : UiMethod;
|
|
28
|
-
return /* @__PURE__ */ jsxs("div", { className: frame.runtime ? "text-muted-foreground" : "text-foreground", children: [
|
|
29
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-start gap-1.5", children: [
|
|
30
|
-
/* @__PURE__ */ jsx(Icon, { icon, className: "mt-0.5 shrink-0 text-[11px]" }),
|
|
31
|
-
/* @__PURE__ */ jsx("div", { className: "min-w-0", children: /* @__PURE__ */ jsx("div", { className: "break-all font-mono text-[11px] font-semibold leading-4", children: isAnno ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
32
|
-
/* @__PURE__ */ jsx("span", { className: "opacity-70", children: frame.functionName }),
|
|
33
|
-
frame.annotationText && /* @__PURE__ */ jsx("span", { className: "ml-2 font-normal opacity-80", children: frame.annotationText })
|
|
34
|
-
] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
35
|
-
frame.displayName,
|
|
36
|
-
frame.location && /* @__PURE__ */ jsx("span", { className: "ml-2 text-[10px] font-normal opacity-80", children: frame.location })
|
|
37
|
-
] }) }) })
|
|
38
|
-
] }),
|
|
39
|
-
!isAnno && frameHasSource(frame) && /* @__PURE__ */ jsx(FrameSourceWindow, { frame })
|
|
40
|
-
] });
|
|
41
|
-
}
|
|
42
27
|
export {
|
|
43
|
-
JvmStackFrameRow,
|
|
44
28
|
JvmStackTrace
|
|
45
29
|
};
|
|
46
30
|
//# sourceMappingURL=JvmStackTrace.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JvmStackTrace.js","sources":["../../../src/data/diagnostics/JvmStackTrace.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"JvmStackTrace.js","sources":["../../../src/data/diagnostics/JvmStackTrace.tsx"],"sourcesContent":["import type { ParsedThreadFrame } from \"./jvm-stacktrace\";\nimport type { FrameSource } from \"./FrameSourceWindow.utils\";\nimport { StackFrameRow, type StackFrameActions } from \"./StackFrameRow\";\n\n// JvmFrameSourceResolver returns a source window for a frame, or undefined when\n// no source is available (a missing class must never blank out the frame). Used\n// to augment the rendered thread dump with decompiled source in place. Shares\n// its return shape with StackTraceSourceResolver so one resolver can serve both\n// the thread-dump and the exception surfaces.\nexport type JvmFrameSourceResolver = (frame: ParsedThreadFrame) => FrameSource | undefined;\n\nexport type JvmStackTraceProps = {\n frames: ParsedThreadFrame[];\n hideRuntimeOnly?: boolean;\n className?: string;\n /** Optional resolver that supplies inline source under each frame. */\n resolveSource?: JvmFrameSourceResolver;\n /** Trailing per-frame actions, revealed on hover/focus. */\n frameActions?: StackFrameActions;\n};\n\n// JvmStackTrace renders a parsed thread dump: frames plus the lock/monitor\n// annotation entries interleaved with them. It is a bare frame list — the\n// thread's own header, state badge and controls belong to the surrounding card\n// (see ThreadCard / DiagnosticsDetailPanel). Frames render through the shared\n// StackFrameRow, so they match an exception stack trace exactly.\nexport function JvmStackTrace({\n frames,\n hideRuntimeOnly = false,\n className,\n resolveSource,\n frameActions,\n}: JvmStackTraceProps) {\n const visibleFrames = hideRuntimeOnly\n ? frames.filter((frame) => frame.kind !== \"frame\" || !frame.runtime)\n : frames;\n\n if (visibleFrames.length === 0) return null;\n\n return (\n <div className={className}>\n {visibleFrames.map((frame, index) => {\n const resolved = resolveSource?.(frame);\n // `line` stays the frame's own — see the note in RenderedStackTrace.\n const { line: _ignored, ...source } = resolved ?? {};\n const withSource = resolved ? { ...frame, ...source } : frame;\n return (\n <StackFrameRow\n key={`${frame.functionName}-${index}`}\n frame={withSource}\n index={index}\n {...(frameActions ? { frameActions } : {})}\n />\n );\n })}\n </div>\n );\n}\n"],"names":[],"mappings":";;AA0BO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA,kBAAkB;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AACF,GAAuB;AACrB,QAAM,gBAAgB,kBAClB,OAAO,OAAO,CAAC,UAAU,MAAM,SAAS,WAAW,CAAC,MAAM,OAAO,IACjE;AAEJ,MAAI,cAAc,WAAW,EAAG,QAAO;AAEvC,6BACG,OAAA,EAAI,WACF,wBAAc,IAAI,CAAC,OAAO,UAAU;AACnC,UAAM,WAAW,+CAAgB;AAEjC,UAAM,EAAE,MAAM,UAAU,GAAG,OAAA,IAAW,YAAY,CAAA;AAClD,UAAM,aAAa,WAAW,EAAE,GAAG,OAAO,GAAG,WAAW;AACxD,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,OAAO;AAAA,QACP;AAAA,QACC,GAAI,eAAe,EAAE,iBAAiB,CAAA;AAAA,MAAC;AAAA,MAHnC,GAAG,MAAM,YAAY,IAAI,KAAK;AAAA,IAAA;AAAA,EAMzC,CAAC,EAAA,CACH;AAEJ;"}
|