@flanksource/clicky-ui 0.2.4 → 0.2.6

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.
Files changed (189) hide show
  1. package/dist/components/Combobox.cjs +291 -0
  2. package/dist/components/Combobox.cjs.map +1 -0
  3. package/dist/components/Combobox.d.ts +59 -0
  4. package/dist/components/Combobox.d.ts.map +1 -0
  5. package/dist/components/Combobox.js +291 -0
  6. package/dist/components/Combobox.js.map +1 -0
  7. package/dist/components/FilterBar.cjs +153 -124
  8. package/dist/components/FilterBar.cjs.map +1 -1
  9. package/dist/components/FilterBar.d.ts +25 -1
  10. package/dist/components/FilterBar.d.ts.map +1 -1
  11. package/dist/components/FilterBar.js +153 -124
  12. package/dist/components/FilterBar.js.map +1 -1
  13. package/dist/components/FormatOptionsDropdown.cjs +62 -0
  14. package/dist/components/FormatOptionsDropdown.cjs.map +1 -0
  15. package/dist/components/FormatOptionsDropdown.d.ts +37 -0
  16. package/dist/components/FormatOptionsDropdown.d.ts.map +1 -0
  17. package/dist/components/FormatOptionsDropdown.js +62 -0
  18. package/dist/components/FormatOptionsDropdown.js.map +1 -0
  19. package/dist/components/SplitButton.cjs +87 -0
  20. package/dist/components/SplitButton.cjs.map +1 -0
  21. package/dist/components/SplitButton.d.ts +32 -0
  22. package/dist/components/SplitButton.d.ts.map +1 -0
  23. package/dist/components/SplitButton.js +87 -0
  24. package/dist/components/SplitButton.js.map +1 -0
  25. package/dist/components/icon-menu-picker.cjs +1 -1
  26. package/dist/components/icon-menu-picker.cjs.map +1 -1
  27. package/dist/components/icon-menu-picker.js +1 -1
  28. package/dist/components/icon-menu-picker.js.map +1 -1
  29. package/dist/components.cjs +7 -0
  30. package/dist/components.cjs.map +1 -1
  31. package/dist/components.d.ts +3 -0
  32. package/dist/components.d.ts.map +1 -1
  33. package/dist/components.js +7 -0
  34. package/dist/components.js.map +1 -1
  35. package/dist/data/Badge.d.ts +1 -1
  36. package/dist/data/ProgressBar.cjs +4 -2
  37. package/dist/data/ProgressBar.cjs.map +1 -1
  38. package/dist/data/ProgressBar.d.ts +1 -1
  39. package/dist/data/ProgressBar.d.ts.map +1 -1
  40. package/dist/data/ProgressBar.js +4 -2
  41. package/dist/data/ProgressBar.js.map +1 -1
  42. package/dist/data/StatusBreakdown.cjs +80 -0
  43. package/dist/data/StatusBreakdown.cjs.map +1 -0
  44. package/dist/data/StatusBreakdown.d.ts +36 -0
  45. package/dist/data/StatusBreakdown.d.ts.map +1 -0
  46. package/dist/data/StatusBreakdown.js +80 -0
  47. package/dist/data/StatusBreakdown.js.map +1 -0
  48. package/dist/data/TaskManager.cjs +162 -0
  49. package/dist/data/TaskManager.cjs.map +1 -0
  50. package/dist/data/TaskManager.d.ts +21 -0
  51. package/dist/data/TaskManager.d.ts.map +1 -0
  52. package/dist/data/TaskManager.js +162 -0
  53. package/dist/data/TaskManager.js.map +1 -0
  54. package/dist/data/TaskProgress.cjs +125 -0
  55. package/dist/data/TaskProgress.cjs.map +1 -0
  56. package/dist/data/TaskProgress.d.ts +20 -0
  57. package/dist/data/TaskProgress.d.ts.map +1 -0
  58. package/dist/data/TaskProgress.js +125 -0
  59. package/dist/data/TaskProgress.js.map +1 -0
  60. package/dist/data/TaskSnapshot.cjs +23 -0
  61. package/dist/data/TaskSnapshot.cjs.map +1 -0
  62. package/dist/data/TaskSnapshot.d.ts +49 -0
  63. package/dist/data/TaskSnapshot.d.ts.map +1 -0
  64. package/dist/data/TaskSnapshot.js +23 -0
  65. package/dist/data/TaskSnapshot.js.map +1 -0
  66. package/dist/data/TimeseriesGauge.cjs +144 -0
  67. package/dist/data/TimeseriesGauge.cjs.map +1 -0
  68. package/dist/data/TimeseriesGauge.d.ts +56 -0
  69. package/dist/data/TimeseriesGauge.d.ts.map +1 -0
  70. package/dist/data/TimeseriesGauge.js +144 -0
  71. package/dist/data/TimeseriesGauge.js.map +1 -0
  72. package/dist/data/TimeseriesPanel.axes.cjs +39 -0
  73. package/dist/data/TimeseriesPanel.axes.cjs.map +1 -0
  74. package/dist/data/TimeseriesPanel.axes.d.ts +28 -0
  75. package/dist/data/TimeseriesPanel.axes.d.ts.map +1 -0
  76. package/dist/data/TimeseriesPanel.axes.js +39 -0
  77. package/dist/data/TimeseriesPanel.axes.js.map +1 -0
  78. package/dist/data/TimeseriesPanel.cjs +324 -0
  79. package/dist/data/TimeseriesPanel.cjs.map +1 -0
  80. package/dist/data/TimeseriesPanel.d.ts +141 -0
  81. package/dist/data/TimeseriesPanel.d.ts.map +1 -0
  82. package/dist/data/TimeseriesPanel.js +324 -0
  83. package/dist/data/TimeseriesPanel.js.map +1 -0
  84. package/dist/data/Tree.cjs.map +1 -1
  85. package/dist/data/Tree.d.ts.map +1 -1
  86. package/dist/data/Tree.js.map +1 -1
  87. package/dist/data/TreeNode.cjs +44 -7
  88. package/dist/data/TreeNode.cjs.map +1 -1
  89. package/dist/data/TreeNode.d.ts +19 -1
  90. package/dist/data/TreeNode.d.ts.map +1 -1
  91. package/dist/data/TreeNode.js +44 -7
  92. package/dist/data/TreeNode.js.map +1 -1
  93. package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs +66 -44
  94. package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs.map +1 -1
  95. package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts +21 -1
  96. package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts.map +1 -1
  97. package/dist/data/diagnostics/DiagnosticsDetailPanel.js +65 -43
  98. package/dist/data/diagnostics/DiagnosticsDetailPanel.js.map +1 -1
  99. package/dist/data/diagnostics/DiagnosticsTree.cjs +2 -1
  100. package/dist/data/diagnostics/DiagnosticsTree.cjs.map +1 -1
  101. package/dist/data/diagnostics/DiagnosticsTree.js +2 -1
  102. package/dist/data/diagnostics/DiagnosticsTree.js.map +1 -1
  103. package/dist/data/diagnostics/FrameSourceWindow.cjs +37 -0
  104. package/dist/data/diagnostics/FrameSourceWindow.cjs.map +1 -0
  105. package/dist/data/diagnostics/FrameSourceWindow.d.ts +15 -0
  106. package/dist/data/diagnostics/FrameSourceWindow.d.ts.map +1 -0
  107. package/dist/data/diagnostics/FrameSourceWindow.js +37 -0
  108. package/dist/data/diagnostics/FrameSourceWindow.js.map +1 -0
  109. package/dist/data/diagnostics/JvmStackTrace.cjs +25 -12
  110. package/dist/data/diagnostics/JvmStackTrace.cjs.map +1 -1
  111. package/dist/data/diagnostics/JvmStackTrace.d.ts +8 -1
  112. package/dist/data/diagnostics/JvmStackTrace.d.ts.map +1 -1
  113. package/dist/data/diagnostics/JvmStackTrace.js +26 -13
  114. package/dist/data/diagnostics/JvmStackTrace.js.map +1 -1
  115. package/dist/data/diagnostics/ThreadCard.cjs +9 -2
  116. package/dist/data/diagnostics/ThreadCard.cjs.map +1 -1
  117. package/dist/data/diagnostics/ThreadCard.d.ts +3 -1
  118. package/dist/data/diagnostics/ThreadCard.d.ts.map +1 -1
  119. package/dist/data/diagnostics/ThreadCard.js +9 -2
  120. package/dist/data/diagnostics/ThreadCard.js.map +1 -1
  121. package/dist/data/diagnostics/jvm-stacktrace.cjs +10 -1
  122. package/dist/data/diagnostics/jvm-stacktrace.cjs.map +1 -1
  123. package/dist/data/diagnostics/jvm-stacktrace.d.ts.map +1 -1
  124. package/dist/data/diagnostics/jvm-stacktrace.js +10 -1
  125. package/dist/data/diagnostics/jvm-stacktrace.js.map +1 -1
  126. package/dist/data/diagnostics/utils.cjs +0 -12
  127. package/dist/data/diagnostics/utils.cjs.map +1 -1
  128. package/dist/data/diagnostics/utils.d.ts +1 -1
  129. package/dist/data/diagnostics/utils.d.ts.map +1 -1
  130. package/dist/data/diagnostics/utils.js +0 -12
  131. package/dist/data/diagnostics/utils.js.map +1 -1
  132. package/dist/data/task-status.cjs +108 -0
  133. package/dist/data/task-status.cjs.map +1 -0
  134. package/dist/data/task-status.d.ts +21 -0
  135. package/dist/data/task-status.d.ts.map +1 -0
  136. package/dist/data/task-status.js +108 -0
  137. package/dist/data/task-status.js.map +1 -0
  138. package/dist/data.cjs +27 -0
  139. package/dist/data.cjs.map +1 -1
  140. package/dist/data.d.ts +9 -1
  141. package/dist/data.d.ts.map +1 -1
  142. package/dist/data.js +27 -0
  143. package/dist/data.js.map +1 -1
  144. package/dist/hooks/use-task-run.cjs +137 -0
  145. package/dist/hooks/use-task-run.cjs.map +1 -0
  146. package/dist/hooks/use-task-run.d.ts +35 -0
  147. package/dist/hooks/use-task-run.d.ts.map +1 -0
  148. package/dist/hooks/use-task-run.js +137 -0
  149. package/dist/hooks/use-task-run.js.map +1 -0
  150. package/dist/hooks.cjs +3 -0
  151. package/dist/hooks.cjs.map +1 -1
  152. package/dist/hooks.d.ts +1 -0
  153. package/dist/hooks.d.ts.map +1 -1
  154. package/dist/hooks.js +3 -0
  155. package/dist/hooks.js.map +1 -1
  156. package/dist/index.cjs +43 -0
  157. package/dist/index.cjs.map +1 -1
  158. package/dist/index.js +43 -0
  159. package/dist/index.js.map +1 -1
  160. package/dist/lib/color.cjs +33 -0
  161. package/dist/lib/color.cjs.map +1 -0
  162. package/dist/lib/color.d.ts +10 -0
  163. package/dist/lib/color.d.ts.map +1 -0
  164. package/dist/lib/color.js +33 -0
  165. package/dist/lib/color.js.map +1 -0
  166. package/dist/lib/format.cjs +77 -0
  167. package/dist/lib/format.cjs.map +1 -0
  168. package/dist/lib/format.d.ts +30 -0
  169. package/dist/lib/format.d.ts.map +1 -0
  170. package/dist/lib/format.js +77 -0
  171. package/dist/lib/format.js.map +1 -0
  172. package/dist/overlay/DropdownMenu.cjs +18 -2
  173. package/dist/overlay/DropdownMenu.cjs.map +1 -1
  174. package/dist/overlay/DropdownMenu.d.ts +3 -1
  175. package/dist/overlay/DropdownMenu.d.ts.map +1 -1
  176. package/dist/overlay/DropdownMenu.js +18 -2
  177. package/dist/overlay/DropdownMenu.js.map +1 -1
  178. package/dist/rpc/types.cjs.map +1 -1
  179. package/dist/rpc/types.d.ts +4 -0
  180. package/dist/rpc/types.d.ts.map +1 -1
  181. package/dist/rpc/types.js.map +1 -1
  182. package/dist/styles.css +1 -1
  183. package/dist/utils.cjs +6 -0
  184. package/dist/utils.cjs.map +1 -1
  185. package/dist/utils.d.ts +1 -0
  186. package/dist/utils.d.ts.map +1 -1
  187. package/dist/utils.js +6 -0
  188. package/dist/utils.js.map +1 -1
  189. package/package.json +4 -1
@@ -70,7 +70,8 @@ function parseThreadBlock(block) {
70
70
  displayName: sanitizeJvmFunctionName(functionName),
71
71
  kind: "frame",
72
72
  runtime: isJvmRuntimeFrame(functionName),
73
- nativeMethod: src === "Native Method"
73
+ nativeMethod: src === "Native Method",
74
+ ...splitClassMethod(functionName)
74
75
  };
75
76
  const srcMatch = srcLineRe.exec(src);
76
77
  if (((_b = srcMatch == null ? void 0 : srcMatch.groups) == null ? void 0 : _b.file) && srcMatch.groups.line) {
@@ -176,6 +177,14 @@ const runtimePrefixes = ["java.", "javax.", "sun.", "jdk.", "com.sun.", "oracle.
176
177
  function isJvmRuntimeFrame(functionName) {
177
178
  return runtimePrefixes.some((p) => functionName.startsWith(p));
178
179
  }
180
+ function splitClassMethod(functionName) {
181
+ const lastDot = functionName.lastIndexOf(".");
182
+ if (lastDot <= 0) return {};
183
+ return {
184
+ class: functionName.slice(0, lastDot),
185
+ method: functionName.slice(lastDot + 1)
186
+ };
187
+ }
179
188
  function sanitizeJvmFunctionName(functionName) {
180
189
  const parts = functionName.split(".");
181
190
  if (parts.length < 2) return functionName;
@@ -1 +1 @@
1
- {"version":3,"file":"jvm-stacktrace.js","sources":["../../../src/data/diagnostics/jvm-stacktrace.ts"],"sourcesContent":["export interface ParsedThreadFrame {\n functionName: string;\n displayName: string;\n file?: string;\n line?: number;\n location?: string;\n kind: \"frame\" | \"locked\" | \"waiting_on\" | \"waiting_to_lock\" | \"parking\";\n runtime: boolean;\n nativeMethod: boolean;\n annotationText?: string;\n // Optional fully-qualified class name (e.g. \"com.example.admin.pas.Foo\").\n // Lets renderers filter or group by package without re-splitting\n // functionName. Populated by parseJavaStackTrace; left undefined by the\n // thread-dump parser since its frames are raw \"fn(src)\" pairs.\n class?: string;\n method?: string;\n // Optional source-context window populated by clicky.SourceResolver\n // (or its TS equivalent). sourceLines[line - sourceStartLine] is the focal\n // line. Empty/undefined when no resolver was attached.\n sourceLines?: string[];\n sourceLineNumbers?: number[];\n sourceStartLine?: number;\n sourceLanguage?: string;\n}\n\nexport interface ParsedThread {\n id: number;\n nid?: string;\n name: string;\n state: string;\n rawState: string;\n priority?: number;\n daemon?: boolean;\n frames: ParsedThreadFrame[];\n raw: string;\n userFrameCount: number;\n topFunction?: string;\n searchText: string;\n}\n\nconst headerRe = /^\"(?<name>[^\"]*)\"(?<rest>.*)$/;\nconst stateRe = /^\\s*java\\.lang\\.Thread\\.State:\\s+(?<state>[A-Z_]+)(?:\\s+\\((?<sub>[^)]+)\\))?/;\nconst frameRe = /^\\s*at\\s+(?<fn>[^\\s(]+)\\((?<src>[^)]+)\\)\\s*$/;\nconst srcLineRe = /^(?<file>[^:]+):(?<line>\\d+)$/;\nconst annotationRe =\n /^\\s*-\\s+(?<kind>locked|waiting on|waiting to lock|parking to wait for)\\b(?<rest>.*)$/;\n\nexport function parseJvmThreadDump(text: string): ParsedThread[] {\n const trimmed = text.trim();\n if (!trimmed) return [];\n\n // Split on blank lines OR on a new `\"...\"` header that follows immediately.\n const blocks = splitIntoThreadBlocks(trimmed);\n const threads: ParsedThread[] = [];\n\n for (const block of blocks) {\n const parsed = parseThreadBlock(block);\n if (parsed) threads.push(parsed);\n }\n return threads;\n}\n\nfunction splitIntoThreadBlocks(text: string): string[] {\n const out: string[] = [];\n let current: string[] = [];\n const lines = text.split(\"\\n\");\n for (const raw of lines) {\n const line = raw.replace(/\\r$/, \"\");\n if (line.startsWith('\"') && current.length > 0) {\n out.push(current.join(\"\\n\"));\n current = [line];\n } else {\n current.push(line);\n }\n }\n if (current.length > 0) out.push(current.join(\"\\n\"));\n return out;\n}\n\nfunction parseThreadBlock(block: string): ParsedThread | null {\n const lines = block.split(\"\\n\");\n const header = lines[0]?.trim() ?? \"\";\n const headerMatch = headerRe.exec(header);\n if (!headerMatch?.groups) return null;\n\n const name = headerMatch.groups.name;\n if (!name) return null;\n const rest = headerMatch.groups.rest ?? \"\";\n const idMatch = /#(\\d+)\\b/.exec(rest);\n const prioMatch = /\\bprio=(\\d+)/.exec(rest);\n const nidMatch = /\\bnid=(0x[0-9a-f]+)/i.exec(rest);\n const daemon = /\\bdaemon\\b/.test(rest);\n const headerStateTrail = extractHeaderStateTrail(rest);\n\n let rawState = headerStateTrail ?? \"\";\n let state = normalizeJvmState(rawState);\n const frames: ParsedThreadFrame[] = [];\n\n for (let i = 1; i < lines.length; i++) {\n const line = lines[i];\n if (line == null) continue;\n if (!line.trim()) continue;\n\n const stateMatch = stateRe.exec(line);\n if (stateMatch?.groups) {\n const primary = stateMatch.groups.state;\n if (!primary) continue;\n const sub = stateMatch.groups.sub;\n rawState = sub ? `${primary} (${sub})` : primary;\n state = normalizeJvmState(primary);\n continue;\n }\n\n const frameMatch = frameRe.exec(line);\n if (frameMatch?.groups) {\n const functionName = frameMatch.groups.fn;\n const src = frameMatch.groups.src;\n if (!functionName || !src) continue;\n const frame: ParsedThreadFrame = {\n functionName,\n displayName: sanitizeJvmFunctionName(functionName),\n kind: \"frame\",\n runtime: isJvmRuntimeFrame(functionName),\n nativeMethod: src === \"Native Method\",\n };\n const srcMatch = srcLineRe.exec(src);\n if (srcMatch?.groups?.file && srcMatch.groups.line) {\n frame.file = srcMatch.groups.file;\n frame.line = Number(srcMatch.groups.line);\n frame.location = `${frame.file}:${frame.line}`;\n } else if (src === \"Native Method\") {\n frame.location = \"Native Method\";\n } else {\n frame.location = src;\n }\n frames.push(frame);\n continue;\n }\n\n const annoMatch = annotationRe.exec(line);\n if (annoMatch?.groups?.kind) {\n const annotationKind = annoMatch.groups.kind;\n const kind = mapAnnotationKind(annotationKind);\n frames.push({\n functionName: annotationKind,\n displayName: annotationKind,\n kind,\n runtime: false,\n nativeMethod: false,\n annotationText: (annoMatch.groups.rest ?? \"\").trim(),\n });\n continue;\n }\n }\n\n const userFrameCount = frames.filter((f) => f.kind === \"frame\" && !f.runtime).length;\n const topFunction = frames.find((f) => f.kind === \"frame\")?.functionName;\n const searchText = [\n header,\n ...frames.map((f) => `${f.functionName} ${f.location ?? \"\"} ${f.annotationText ?? \"\"}`),\n ]\n .join(\"\\n\")\n .toLowerCase();\n\n return {\n id: idMatch ? Number(idMatch[1]) : deriveSyntheticId(name, rest),\n name,\n state: state || \"unknown\",\n rawState: rawState || \"\",\n daemon,\n frames,\n raw: block,\n userFrameCount,\n searchText,\n ...(nidMatch?.[1] !== undefined ? { nid: nidMatch[1] } : {}),\n ...(prioMatch?.[1] !== undefined ? { priority: Number(prioMatch[1]) } : {}),\n ...(topFunction !== undefined ? { topFunction } : {}),\n };\n}\n\nfunction extractHeaderStateTrail(rest: string): string | undefined {\n // Example header tails: \"... nid=0x1903 waiting on condition [0x...]\"\n // Capture the descriptor between nid=... and the trailing [address].\n const tail = rest.match(/nid=0x[0-9a-f]+\\s+(?<desc>[^[]+?)(?:\\s+\\[0x[0-9a-f]+\\])?\\s*$/i);\n return tail?.groups?.desc?.trim();\n}\n\nfunction deriveSyntheticId(name: string, rest: string): number {\n const tid = /\\btid=(0x[0-9a-f]+)/i.exec(rest);\n if (tid?.[1]) {\n // stable non-negative int derived from tid hex suffix\n const hex = tid[1].slice(2);\n const n = Number.parseInt(hex.slice(-8), 16);\n if (Number.isFinite(n)) return n;\n }\n // Fallback: hash of name\n let h = 0;\n for (let i = 0; i < name.length; i++) h = (h * 31 + name.charCodeAt(i)) | 0;\n return Math.abs(h);\n}\n\nfunction mapAnnotationKind(kind: string): ParsedThreadFrame[\"kind\"] {\n switch (kind) {\n case \"locked\":\n return \"locked\";\n case \"waiting on\":\n return \"waiting_on\";\n case \"waiting to lock\":\n return \"waiting_to_lock\";\n case \"parking to wait for\":\n return \"parking\";\n default:\n return \"frame\";\n }\n}\n\nexport function countThreadsByState(threads: ParsedThread[]): Map<string, number> {\n const counts = new Map<string, number>();\n for (const t of threads) counts.set(t.state, (counts.get(t.state) ?? 0) + 1);\n return counts;\n}\n\nfunction normalizeJvmState(value: string): string {\n if (!value) return \"\";\n const upper = value.trim().toUpperCase();\n if (upper.startsWith(\"RUNNABLE\")) return \"runnable\";\n if (upper.startsWith(\"TIMED_WAITING\")) return \"timed_waiting\";\n if (upper.startsWith(\"WAITING\")) return \"waiting\";\n if (upper.startsWith(\"BLOCKED\")) return \"blocked\";\n if (upper.startsWith(\"NEW\")) return \"new\";\n if (upper.startsWith(\"TERMINATED\")) return \"terminated\";\n // Header fragments like \"waiting on condition\", \"runnable\", \"sleeping\"\n const lower = value.trim().toLowerCase();\n if (lower.includes(\"runnable\")) return \"runnable\";\n if (lower.includes(\"waiting on condition\") || lower.includes(\"sleeping\")) return \"timed_waiting\";\n if (lower.includes(\"waiting\")) return \"waiting\";\n if (lower.includes(\"blocked\")) return \"blocked\";\n return lower.split(/\\s+/)[0] ?? \"\";\n}\n\nconst runtimePrefixes = [\"java.\", \"javax.\", \"sun.\", \"jdk.\", \"com.sun.\", \"or\" + \"acle.jrockit.\"];\nfunction isJvmRuntimeFrame(functionName: string): boolean {\n return runtimePrefixes.some((p) => functionName.startsWith(p));\n}\n\nfunction sanitizeJvmFunctionName(functionName: string): string {\n // e.g. \"com.example.App$Inner.method\" → \"App$Inner.method\"\n const parts = functionName.split(\".\");\n if (parts.length < 2) return functionName;\n const method = parts[parts.length - 1];\n const cls = parts[parts.length - 2];\n return `${cls}.${method}`;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jvm-stacktrace.js","sources":["../../../src/data/diagnostics/jvm-stacktrace.ts"],"sourcesContent":["export interface ParsedThreadFrame {\n functionName: string;\n displayName: string;\n file?: string;\n line?: number;\n location?: string;\n kind: \"frame\" | \"locked\" | \"waiting_on\" | \"waiting_to_lock\" | \"parking\";\n runtime: boolean;\n nativeMethod: boolean;\n annotationText?: string;\n // Optional fully-qualified class name (e.g. \"com.example.admin.pas.Foo\").\n // Lets renderers filter or group by package without re-splitting\n // functionName. Populated by parseJavaStackTrace; left undefined by the\n // thread-dump parser since its frames are raw \"fn(src)\" pairs.\n class?: string;\n method?: string;\n // Optional source-context window populated by clicky.SourceResolver\n // (or its TS equivalent). sourceLines[line - sourceStartLine] is the focal\n // line. Empty/undefined when no resolver was attached.\n sourceLines?: string[];\n sourceLineNumbers?: number[];\n sourceStartLine?: number;\n sourceLanguage?: string;\n}\n\nexport interface ParsedThread {\n id: number;\n nid?: string;\n name: string;\n state: string;\n rawState: string;\n priority?: number;\n daemon?: boolean;\n frames: ParsedThreadFrame[];\n raw: string;\n userFrameCount: number;\n topFunction?: string;\n searchText: string;\n}\n\nconst headerRe = /^\"(?<name>[^\"]*)\"(?<rest>.*)$/;\nconst stateRe = /^\\s*java\\.lang\\.Thread\\.State:\\s+(?<state>[A-Z_]+)(?:\\s+\\((?<sub>[^)]+)\\))?/;\nconst frameRe = /^\\s*at\\s+(?<fn>[^\\s(]+)\\((?<src>[^)]+)\\)\\s*$/;\nconst srcLineRe = /^(?<file>[^:]+):(?<line>\\d+)$/;\nconst annotationRe =\n /^\\s*-\\s+(?<kind>locked|waiting on|waiting to lock|parking to wait for)\\b(?<rest>.*)$/;\n\nexport function parseJvmThreadDump(text: string): ParsedThread[] {\n const trimmed = text.trim();\n if (!trimmed) return [];\n\n // Split on blank lines OR on a new `\"...\"` header that follows immediately.\n const blocks = splitIntoThreadBlocks(trimmed);\n const threads: ParsedThread[] = [];\n\n for (const block of blocks) {\n const parsed = parseThreadBlock(block);\n if (parsed) threads.push(parsed);\n }\n return threads;\n}\n\nfunction splitIntoThreadBlocks(text: string): string[] {\n const out: string[] = [];\n let current: string[] = [];\n const lines = text.split(\"\\n\");\n for (const raw of lines) {\n const line = raw.replace(/\\r$/, \"\");\n if (line.startsWith('\"') && current.length > 0) {\n out.push(current.join(\"\\n\"));\n current = [line];\n } else {\n current.push(line);\n }\n }\n if (current.length > 0) out.push(current.join(\"\\n\"));\n return out;\n}\n\nfunction parseThreadBlock(block: string): ParsedThread | null {\n const lines = block.split(\"\\n\");\n const header = lines[0]?.trim() ?? \"\";\n const headerMatch = headerRe.exec(header);\n if (!headerMatch?.groups) return null;\n\n const name = headerMatch.groups.name;\n if (!name) return null;\n const rest = headerMatch.groups.rest ?? \"\";\n const idMatch = /#(\\d+)\\b/.exec(rest);\n const prioMatch = /\\bprio=(\\d+)/.exec(rest);\n const nidMatch = /\\bnid=(0x[0-9a-f]+)/i.exec(rest);\n const daemon = /\\bdaemon\\b/.test(rest);\n const headerStateTrail = extractHeaderStateTrail(rest);\n\n let rawState = headerStateTrail ?? \"\";\n let state = normalizeJvmState(rawState);\n const frames: ParsedThreadFrame[] = [];\n\n for (let i = 1; i < lines.length; i++) {\n const line = lines[i];\n if (line == null) continue;\n if (!line.trim()) continue;\n\n const stateMatch = stateRe.exec(line);\n if (stateMatch?.groups) {\n const primary = stateMatch.groups.state;\n if (!primary) continue;\n const sub = stateMatch.groups.sub;\n rawState = sub ? `${primary} (${sub})` : primary;\n state = normalizeJvmState(primary);\n continue;\n }\n\n const frameMatch = frameRe.exec(line);\n if (frameMatch?.groups) {\n const functionName = frameMatch.groups.fn;\n const src = frameMatch.groups.src;\n if (!functionName || !src) continue;\n const frame: ParsedThreadFrame = {\n functionName,\n displayName: sanitizeJvmFunctionName(functionName),\n kind: \"frame\",\n runtime: isJvmRuntimeFrame(functionName),\n nativeMethod: src === \"Native Method\",\n ...splitClassMethod(functionName),\n };\n const srcMatch = srcLineRe.exec(src);\n if (srcMatch?.groups?.file && srcMatch.groups.line) {\n frame.file = srcMatch.groups.file;\n frame.line = Number(srcMatch.groups.line);\n frame.location = `${frame.file}:${frame.line}`;\n } else if (src === \"Native Method\") {\n frame.location = \"Native Method\";\n } else {\n frame.location = src;\n }\n frames.push(frame);\n continue;\n }\n\n const annoMatch = annotationRe.exec(line);\n if (annoMatch?.groups?.kind) {\n const annotationKind = annoMatch.groups.kind;\n const kind = mapAnnotationKind(annotationKind);\n frames.push({\n functionName: annotationKind,\n displayName: annotationKind,\n kind,\n runtime: false,\n nativeMethod: false,\n annotationText: (annoMatch.groups.rest ?? \"\").trim(),\n });\n continue;\n }\n }\n\n const userFrameCount = frames.filter((f) => f.kind === \"frame\" && !f.runtime).length;\n const topFunction = frames.find((f) => f.kind === \"frame\")?.functionName;\n const searchText = [\n header,\n ...frames.map((f) => `${f.functionName} ${f.location ?? \"\"} ${f.annotationText ?? \"\"}`),\n ]\n .join(\"\\n\")\n .toLowerCase();\n\n return {\n id: idMatch ? Number(idMatch[1]) : deriveSyntheticId(name, rest),\n name,\n state: state || \"unknown\",\n rawState: rawState || \"\",\n daemon,\n frames,\n raw: block,\n userFrameCount,\n searchText,\n ...(nidMatch?.[1] !== undefined ? { nid: nidMatch[1] } : {}),\n ...(prioMatch?.[1] !== undefined ? { priority: Number(prioMatch[1]) } : {}),\n ...(topFunction !== undefined ? { topFunction } : {}),\n };\n}\n\nfunction extractHeaderStateTrail(rest: string): string | undefined {\n // Example header tails: \"... nid=0x1903 waiting on condition [0x...]\"\n // Capture the descriptor between nid=... and the trailing [address].\n const tail = rest.match(/nid=0x[0-9a-f]+\\s+(?<desc>[^[]+?)(?:\\s+\\[0x[0-9a-f]+\\])?\\s*$/i);\n return tail?.groups?.desc?.trim();\n}\n\nfunction deriveSyntheticId(name: string, rest: string): number {\n const tid = /\\btid=(0x[0-9a-f]+)/i.exec(rest);\n if (tid?.[1]) {\n // stable non-negative int derived from tid hex suffix\n const hex = tid[1].slice(2);\n const n = Number.parseInt(hex.slice(-8), 16);\n if (Number.isFinite(n)) return n;\n }\n // Fallback: hash of name\n let h = 0;\n for (let i = 0; i < name.length; i++) h = (h * 31 + name.charCodeAt(i)) | 0;\n return Math.abs(h);\n}\n\nfunction mapAnnotationKind(kind: string): ParsedThreadFrame[\"kind\"] {\n switch (kind) {\n case \"locked\":\n return \"locked\";\n case \"waiting on\":\n return \"waiting_on\";\n case \"waiting to lock\":\n return \"waiting_to_lock\";\n case \"parking to wait for\":\n return \"parking\";\n default:\n return \"frame\";\n }\n}\n\nexport function countThreadsByState(threads: ParsedThread[]): Map<string, number> {\n const counts = new Map<string, number>();\n for (const t of threads) counts.set(t.state, (counts.get(t.state) ?? 0) + 1);\n return counts;\n}\n\nfunction normalizeJvmState(value: string): string {\n if (!value) return \"\";\n const upper = value.trim().toUpperCase();\n if (upper.startsWith(\"RUNNABLE\")) return \"runnable\";\n if (upper.startsWith(\"TIMED_WAITING\")) return \"timed_waiting\";\n if (upper.startsWith(\"WAITING\")) return \"waiting\";\n if (upper.startsWith(\"BLOCKED\")) return \"blocked\";\n if (upper.startsWith(\"NEW\")) return \"new\";\n if (upper.startsWith(\"TERMINATED\")) return \"terminated\";\n // Header fragments like \"waiting on condition\", \"runnable\", \"sleeping\"\n const lower = value.trim().toLowerCase();\n if (lower.includes(\"runnable\")) return \"runnable\";\n if (lower.includes(\"waiting on condition\") || lower.includes(\"sleeping\")) return \"timed_waiting\";\n if (lower.includes(\"waiting\")) return \"waiting\";\n if (lower.includes(\"blocked\")) return \"blocked\";\n return lower.split(/\\s+/)[0] ?? \"\";\n}\n\nconst runtimePrefixes = [\"java.\", \"javax.\", \"sun.\", \"jdk.\", \"com.sun.\", \"or\" + \"acle.jrockit.\"];\nfunction isJvmRuntimeFrame(functionName: string): boolean {\n return runtimePrefixes.some((p) => functionName.startsWith(p));\n}\n\n// splitClassMethod separates a JVM frame's `fully.qualified.Class.method` into\n// its class and method. The method is the last dot segment; everything before\n// is the (possibly inner) class. Returns no fields when the name has no dot, so\n// frames like a bare `<init>` are left without a class rather than guessed.\nfunction splitClassMethod(functionName: string): { class?: string; method?: string } {\n const lastDot = functionName.lastIndexOf(\".\");\n if (lastDot <= 0) return {};\n return {\n class: functionName.slice(0, lastDot),\n method: functionName.slice(lastDot + 1),\n };\n}\n\nfunction sanitizeJvmFunctionName(functionName: string): string {\n // e.g. \"com.example.App$Inner.method\" → \"App$Inner.method\"\n const parts = functionName.split(\".\");\n if (parts.length < 2) return functionName;\n const method = parts[parts.length - 1];\n const cls = parts[parts.length - 2];\n return `${cls}.${method}`;\n}\n"],"names":[],"mappings":"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"}
@@ -37,17 +37,6 @@ function processStateColor(status) {
37
37
  if (value.includes("wait") || value.includes("block")) return "text-blue-600";
38
38
  return "text-muted-foreground";
39
39
  }
40
- function formatBytes(value) {
41
- if (!value || value <= 0) return "0 B";
42
- const units = ["B", "KB", "MB", "GB", "TB"];
43
- let size = value;
44
- let unit = 0;
45
- while (size >= 1024 && unit < units.length - 1) {
46
- size /= 1024;
47
- unit++;
48
- }
49
- return `${size >= 10 || unit === 0 ? size.toFixed(0) : size.toFixed(1)} ${units[unit]}`;
50
- }
51
40
  function processLabel(node) {
52
41
  if (node.name) return node.name;
53
42
  if (node.command) {
@@ -58,7 +47,6 @@ function processLabel(node) {
58
47
  }
59
48
  exports.countProcesses = countProcesses;
60
49
  exports.findProcessByPID = findProcessByPID;
61
- exports.formatBytes = formatBytes;
62
50
  exports.processLabel = processLabel;
63
51
  exports.processStateColor = processStateColor;
64
52
  exports.processStateIcon = processStateIcon;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.cjs","sources":["../../../src/data/diagnostics/utils.ts"],"sourcesContent":["import type { StaticIconComponent } from \"../Icon\";\nimport {\n UiCircleFilled,\n UiPause,\n UiDebugStepOver,\n UiError,\n UiPlayCircle,\n UiWatch,\n} from \"../../icons\";\nimport type { ProcessNode } from \"./types\";\n\nexport function countProcesses(node?: ProcessNode): number {\n if (!node) return 0;\n return 1 + (node.children || []).reduce((sum, child) => sum + countProcesses(child), 0);\n}\n\nexport function findProcessByPID(node: ProcessNode | undefined, pid: number): ProcessNode | null {\n if (!node) return null;\n if (node.pid === pid) return node;\n for (const child of node.children || []) {\n const found = findProcessByPID(child, pid);\n if (found) return found;\n }\n return null;\n}\n\nexport function processStateIcon(status?: string): StaticIconComponent {\n const value = (status || \"\").toLowerCase();\n if (value.includes(\"run\")) return UiPlayCircle;\n if (value.includes(\"sleep\") || value.includes(\"idle\")) return UiWatch;\n if (value.includes(\"stop\") || value.includes(\"halt\")) return UiPause;\n if (value.includes(\"zombie\") || value.includes(\"dead\")) return UiError;\n if (value.includes(\"wait\") || value.includes(\"block\")) return UiDebugStepOver;\n return UiCircleFilled;\n}\n\nexport function processStateColor(status?: string): string {\n const value = (status || \"\").toLowerCase();\n if (value.includes(\"run\")) return \"text-green-600\";\n if (value.includes(\"sleep\") || value.includes(\"idle\")) return \"text-amber-500\";\n if (value.includes(\"stop\") || value.includes(\"halt\")) return \"text-orange-600\";\n if (value.includes(\"zombie\") || value.includes(\"dead\")) return \"text-red-600\";\n if (value.includes(\"wait\") || value.includes(\"block\")) return \"text-blue-600\";\n return \"text-muted-foreground\";\n}\n\nexport function formatBytes(value?: number): string {\n if (!value || value <= 0) return \"0 B\";\n const units = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\"];\n let size = value;\n let unit = 0;\n while (size >= 1024 && unit < units.length - 1) {\n size /= 1024;\n unit++;\n }\n return `${size >= 10 || unit === 0 ? size.toFixed(0) : size.toFixed(1)} ${units[unit]}`;\n}\n\nexport function processLabel(node: ProcessNode): string {\n if (node.name) return node.name;\n if (node.command) {\n const [first] = node.command.split(/\\s+/, 1);\n return first || `pid ${node.pid}`;\n }\n return `pid ${node.pid}`;\n}\n"],"names":["UiPlayCircle","UiWatch","UiPause","UiError","UiDebugStepOver","UiCircleFilled"],"mappings":";;;;;;;;AAWO,SAAS,eAAe,MAA4B;AACzD,MAAI,CAAC,KAAM,QAAO;AAClB,SAAO,KAAK,KAAK,YAAY,CAAA,GAAI,OAAO,CAAC,KAAK,UAAU,MAAM,eAAe,KAAK,GAAG,CAAC;AACxF;AAEO,SAAS,iBAAiB,MAA+B,KAAiC;AAC/F,MAAI,CAAC,KAAM,QAAO;AAClB,MAAI,KAAK,QAAQ,IAAK,QAAO;AAC7B,aAAW,SAAS,KAAK,YAAY,CAAA,GAAI;AACvC,UAAM,QAAQ,iBAAiB,OAAO,GAAG;AACzC,QAAI,MAAO,QAAO;AAAA,EACpB;AACA,SAAO;AACT;AAEO,SAAS,iBAAiB,QAAsC;AACrE,QAAM,SAAS,UAAU,IAAI,YAAA;AAC7B,MAAI,MAAM,SAAS,KAAK,EAAG,QAAOA,aAAAA;AAClC,MAAI,MAAM,SAAS,OAAO,KAAK,MAAM,SAAS,MAAM,EAAG,QAAOC,QAAAA;AAC9D,MAAI,MAAM,SAAS,MAAM,KAAK,MAAM,SAAS,MAAM,EAAG,QAAOC,QAAAA;AAC7D,MAAI,MAAM,SAAS,QAAQ,KAAK,MAAM,SAAS,MAAM,EAAG,QAAOC,QAAAA;AAC/D,MAAI,MAAM,SAAS,MAAM,KAAK,MAAM,SAAS,OAAO,EAAG,QAAOC,gBAAAA;AAC9D,SAAOC,eAAAA;AACT;AAEO,SAAS,kBAAkB,QAAyB;AACzD,QAAM,SAAS,UAAU,IAAI,YAAA;AAC7B,MAAI,MAAM,SAAS,KAAK,EAAG,QAAO;AAClC,MAAI,MAAM,SAAS,OAAO,KAAK,MAAM,SAAS,MAAM,EAAG,QAAO;AAC9D,MAAI,MAAM,SAAS,MAAM,KAAK,MAAM,SAAS,MAAM,EAAG,QAAO;AAC7D,MAAI,MAAM,SAAS,QAAQ,KAAK,MAAM,SAAS,MAAM,EAAG,QAAO;AAC/D,MAAI,MAAM,SAAS,MAAM,KAAK,MAAM,SAAS,OAAO,EAAG,QAAO;AAC9D,SAAO;AACT;AAEO,SAAS,YAAY,OAAwB;AAClD,MAAI,CAAC,SAAS,SAAS,EAAG,QAAO;AACjC,QAAM,QAAQ,CAAC,KAAK,MAAM,MAAM,MAAM,IAAI;AAC1C,MAAI,OAAO;AACX,MAAI,OAAO;AACX,SAAO,QAAQ,QAAQ,OAAO,MAAM,SAAS,GAAG;AAC9C,YAAQ;AACR;AAAA,EACF;AACA,SAAO,GAAG,QAAQ,MAAM,SAAS,IAAI,KAAK,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC;AACvF;AAEO,SAAS,aAAa,MAA2B;AACtD,MAAI,KAAK,KAAM,QAAO,KAAK;AAC3B,MAAI,KAAK,SAAS;AAChB,UAAM,CAAC,KAAK,IAAI,KAAK,QAAQ,MAAM,OAAO,CAAC;AAC3C,WAAO,SAAS,OAAO,KAAK,GAAG;AAAA,EACjC;AACA,SAAO,OAAO,KAAK,GAAG;AACxB;;;;;;;"}
1
+ {"version":3,"file":"utils.cjs","sources":["../../../src/data/diagnostics/utils.ts"],"sourcesContent":["import type { StaticIconComponent } from \"../Icon\";\nimport {\n UiCircleFilled,\n UiPause,\n UiDebugStepOver,\n UiError,\n UiPlayCircle,\n UiWatch,\n} from \"../../icons\";\nimport type { ProcessNode } from \"./types\";\n\nexport function countProcesses(node?: ProcessNode): number {\n if (!node) return 0;\n return 1 + (node.children || []).reduce((sum, child) => sum + countProcesses(child), 0);\n}\n\nexport function findProcessByPID(node: ProcessNode | undefined, pid: number): ProcessNode | null {\n if (!node) return null;\n if (node.pid === pid) return node;\n for (const child of node.children || []) {\n const found = findProcessByPID(child, pid);\n if (found) return found;\n }\n return null;\n}\n\nexport function processStateIcon(status?: string): StaticIconComponent {\n const value = (status || \"\").toLowerCase();\n if (value.includes(\"run\")) return UiPlayCircle;\n if (value.includes(\"sleep\") || value.includes(\"idle\")) return UiWatch;\n if (value.includes(\"stop\") || value.includes(\"halt\")) return UiPause;\n if (value.includes(\"zombie\") || value.includes(\"dead\")) return UiError;\n if (value.includes(\"wait\") || value.includes(\"block\")) return UiDebugStepOver;\n return UiCircleFilled;\n}\n\nexport function processStateColor(status?: string): string {\n const value = (status || \"\").toLowerCase();\n if (value.includes(\"run\")) return \"text-green-600\";\n if (value.includes(\"sleep\") || value.includes(\"idle\")) return \"text-amber-500\";\n if (value.includes(\"stop\") || value.includes(\"halt\")) return \"text-orange-600\";\n if (value.includes(\"zombie\") || value.includes(\"dead\")) return \"text-red-600\";\n if (value.includes(\"wait\") || value.includes(\"block\")) return \"text-blue-600\";\n return \"text-muted-foreground\";\n}\n\n// formatBytes lives in the shared lib/format module; re-exported here so the\n// diagnostics barrel (data.ts) and existing importers keep working unchanged.\nexport { formatBytes } from \"../../lib/format\";\n\nexport function processLabel(node: ProcessNode): string {\n if (node.name) return node.name;\n if (node.command) {\n const [first] = node.command.split(/\\s+/, 1);\n return first || `pid ${node.pid}`;\n }\n return `pid ${node.pid}`;\n}\n"],"names":["UiPlayCircle","UiWatch","UiPause","UiError","UiDebugStepOver","UiCircleFilled"],"mappings":";;;;;;;;AAWO,SAAS,eAAe,MAA4B;AACzD,MAAI,CAAC,KAAM,QAAO;AAClB,SAAO,KAAK,KAAK,YAAY,CAAA,GAAI,OAAO,CAAC,KAAK,UAAU,MAAM,eAAe,KAAK,GAAG,CAAC;AACxF;AAEO,SAAS,iBAAiB,MAA+B,KAAiC;AAC/F,MAAI,CAAC,KAAM,QAAO;AAClB,MAAI,KAAK,QAAQ,IAAK,QAAO;AAC7B,aAAW,SAAS,KAAK,YAAY,CAAA,GAAI;AACvC,UAAM,QAAQ,iBAAiB,OAAO,GAAG;AACzC,QAAI,MAAO,QAAO;AAAA,EACpB;AACA,SAAO;AACT;AAEO,SAAS,iBAAiB,QAAsC;AACrE,QAAM,SAAS,UAAU,IAAI,YAAA;AAC7B,MAAI,MAAM,SAAS,KAAK,EAAG,QAAOA,aAAAA;AAClC,MAAI,MAAM,SAAS,OAAO,KAAK,MAAM,SAAS,MAAM,EAAG,QAAOC,QAAAA;AAC9D,MAAI,MAAM,SAAS,MAAM,KAAK,MAAM,SAAS,MAAM,EAAG,QAAOC,QAAAA;AAC7D,MAAI,MAAM,SAAS,QAAQ,KAAK,MAAM,SAAS,MAAM,EAAG,QAAOC,QAAAA;AAC/D,MAAI,MAAM,SAAS,MAAM,KAAK,MAAM,SAAS,OAAO,EAAG,QAAOC,gBAAAA;AAC9D,SAAOC,eAAAA;AACT;AAEO,SAAS,kBAAkB,QAAyB;AACzD,QAAM,SAAS,UAAU,IAAI,YAAA;AAC7B,MAAI,MAAM,SAAS,KAAK,EAAG,QAAO;AAClC,MAAI,MAAM,SAAS,OAAO,KAAK,MAAM,SAAS,MAAM,EAAG,QAAO;AAC9D,MAAI,MAAM,SAAS,MAAM,KAAK,MAAM,SAAS,MAAM,EAAG,QAAO;AAC7D,MAAI,MAAM,SAAS,QAAQ,KAAK,MAAM,SAAS,MAAM,EAAG,QAAO;AAC/D,MAAI,MAAM,SAAS,MAAM,KAAK,MAAM,SAAS,OAAO,EAAG,QAAO;AAC9D,SAAO;AACT;AAMO,SAAS,aAAa,MAA2B;AACtD,MAAI,KAAK,KAAM,QAAO,KAAK;AAC3B,MAAI,KAAK,SAAS;AAChB,UAAM,CAAC,KAAK,IAAI,KAAK,QAAQ,MAAM,OAAO,CAAC;AAC3C,WAAO,SAAS,OAAO,KAAK,GAAG;AAAA,EACjC;AACA,SAAO,OAAO,KAAK,GAAG;AACxB;;;;;;"}
@@ -4,6 +4,6 @@ export declare function countProcesses(node?: ProcessNode): number;
4
4
  export declare function findProcessByPID(node: ProcessNode | undefined, pid: number): ProcessNode | null;
5
5
  export declare function processStateIcon(status?: string): StaticIconComponent;
6
6
  export declare function processStateColor(status?: string): string;
7
- export declare function formatBytes(value?: number): string;
7
+ export { formatBytes } from '../../lib/format';
8
8
  export declare function processLabel(node: ProcessNode): string;
9
9
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/data/diagnostics/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AASnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,wBAAgB,cAAc,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,CAGzD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAQ/F;AAED,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAQrE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAQzD;AAED,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAUlD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAOtD"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/data/diagnostics/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AASnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,wBAAgB,cAAc,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,CAGzD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAQ/F;AAED,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAQrE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAQzD;AAID,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAOtD"}
@@ -35,17 +35,6 @@ function processStateColor(status) {
35
35
  if (value.includes("wait") || value.includes("block")) return "text-blue-600";
36
36
  return "text-muted-foreground";
37
37
  }
38
- function formatBytes(value) {
39
- if (!value || value <= 0) return "0 B";
40
- const units = ["B", "KB", "MB", "GB", "TB"];
41
- let size = value;
42
- let unit = 0;
43
- while (size >= 1024 && unit < units.length - 1) {
44
- size /= 1024;
45
- unit++;
46
- }
47
- return `${size >= 10 || unit === 0 ? size.toFixed(0) : size.toFixed(1)} ${units[unit]}`;
48
- }
49
38
  function processLabel(node) {
50
39
  if (node.name) return node.name;
51
40
  if (node.command) {
@@ -57,7 +46,6 @@ function processLabel(node) {
57
46
  export {
58
47
  countProcesses,
59
48
  findProcessByPID,
60
- formatBytes,
61
49
  processLabel,
62
50
  processStateColor,
63
51
  processStateIcon
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../src/data/diagnostics/utils.ts"],"sourcesContent":["import type { StaticIconComponent } from \"../Icon\";\nimport {\n UiCircleFilled,\n UiPause,\n UiDebugStepOver,\n UiError,\n UiPlayCircle,\n UiWatch,\n} from \"../../icons\";\nimport type { ProcessNode } from \"./types\";\n\nexport function countProcesses(node?: ProcessNode): number {\n if (!node) return 0;\n return 1 + (node.children || []).reduce((sum, child) => sum + countProcesses(child), 0);\n}\n\nexport function findProcessByPID(node: ProcessNode | undefined, pid: number): ProcessNode | null {\n if (!node) return null;\n if (node.pid === pid) return node;\n for (const child of node.children || []) {\n const found = findProcessByPID(child, pid);\n if (found) return found;\n }\n return null;\n}\n\nexport function processStateIcon(status?: string): StaticIconComponent {\n const value = (status || \"\").toLowerCase();\n if (value.includes(\"run\")) return UiPlayCircle;\n if (value.includes(\"sleep\") || value.includes(\"idle\")) return UiWatch;\n if (value.includes(\"stop\") || value.includes(\"halt\")) return UiPause;\n if (value.includes(\"zombie\") || value.includes(\"dead\")) return UiError;\n if (value.includes(\"wait\") || value.includes(\"block\")) return UiDebugStepOver;\n return UiCircleFilled;\n}\n\nexport function processStateColor(status?: string): string {\n const value = (status || \"\").toLowerCase();\n if (value.includes(\"run\")) return \"text-green-600\";\n if (value.includes(\"sleep\") || value.includes(\"idle\")) return \"text-amber-500\";\n if (value.includes(\"stop\") || value.includes(\"halt\")) return \"text-orange-600\";\n if (value.includes(\"zombie\") || value.includes(\"dead\")) return \"text-red-600\";\n if (value.includes(\"wait\") || value.includes(\"block\")) return \"text-blue-600\";\n return \"text-muted-foreground\";\n}\n\nexport function formatBytes(value?: number): string {\n if (!value || value <= 0) return \"0 B\";\n const units = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\"];\n let size = value;\n let unit = 0;\n while (size >= 1024 && unit < units.length - 1) {\n size /= 1024;\n unit++;\n }\n return `${size >= 10 || unit === 0 ? size.toFixed(0) : size.toFixed(1)} ${units[unit]}`;\n}\n\nexport function processLabel(node: ProcessNode): string {\n if (node.name) return node.name;\n if (node.command) {\n const [first] = node.command.split(/\\s+/, 1);\n return first || `pid ${node.pid}`;\n }\n return `pid ${node.pid}`;\n}\n"],"names":[],"mappings":";;;;;;AAWO,SAAS,eAAe,MAA4B;AACzD,MAAI,CAAC,KAAM,QAAO;AAClB,SAAO,KAAK,KAAK,YAAY,CAAA,GAAI,OAAO,CAAC,KAAK,UAAU,MAAM,eAAe,KAAK,GAAG,CAAC;AACxF;AAEO,SAAS,iBAAiB,MAA+B,KAAiC;AAC/F,MAAI,CAAC,KAAM,QAAO;AAClB,MAAI,KAAK,QAAQ,IAAK,QAAO;AAC7B,aAAW,SAAS,KAAK,YAAY,CAAA,GAAI;AACvC,UAAM,QAAQ,iBAAiB,OAAO,GAAG;AACzC,QAAI,MAAO,QAAO;AAAA,EACpB;AACA,SAAO;AACT;AAEO,SAAS,iBAAiB,QAAsC;AACrE,QAAM,SAAS,UAAU,IAAI,YAAA;AAC7B,MAAI,MAAM,SAAS,KAAK,EAAG,QAAO;AAClC,MAAI,MAAM,SAAS,OAAO,KAAK,MAAM,SAAS,MAAM,EAAG,QAAO;AAC9D,MAAI,MAAM,SAAS,MAAM,KAAK,MAAM,SAAS,MAAM,EAAG,QAAO;AAC7D,MAAI,MAAM,SAAS,QAAQ,KAAK,MAAM,SAAS,MAAM,EAAG,QAAO;AAC/D,MAAI,MAAM,SAAS,MAAM,KAAK,MAAM,SAAS,OAAO,EAAG,QAAO;AAC9D,SAAO;AACT;AAEO,SAAS,kBAAkB,QAAyB;AACzD,QAAM,SAAS,UAAU,IAAI,YAAA;AAC7B,MAAI,MAAM,SAAS,KAAK,EAAG,QAAO;AAClC,MAAI,MAAM,SAAS,OAAO,KAAK,MAAM,SAAS,MAAM,EAAG,QAAO;AAC9D,MAAI,MAAM,SAAS,MAAM,KAAK,MAAM,SAAS,MAAM,EAAG,QAAO;AAC7D,MAAI,MAAM,SAAS,QAAQ,KAAK,MAAM,SAAS,MAAM,EAAG,QAAO;AAC/D,MAAI,MAAM,SAAS,MAAM,KAAK,MAAM,SAAS,OAAO,EAAG,QAAO;AAC9D,SAAO;AACT;AAEO,SAAS,YAAY,OAAwB;AAClD,MAAI,CAAC,SAAS,SAAS,EAAG,QAAO;AACjC,QAAM,QAAQ,CAAC,KAAK,MAAM,MAAM,MAAM,IAAI;AAC1C,MAAI,OAAO;AACX,MAAI,OAAO;AACX,SAAO,QAAQ,QAAQ,OAAO,MAAM,SAAS,GAAG;AAC9C,YAAQ;AACR;AAAA,EACF;AACA,SAAO,GAAG,QAAQ,MAAM,SAAS,IAAI,KAAK,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC;AACvF;AAEO,SAAS,aAAa,MAA2B;AACtD,MAAI,KAAK,KAAM,QAAO,KAAK;AAC3B,MAAI,KAAK,SAAS;AAChB,UAAM,CAAC,KAAK,IAAI,KAAK,QAAQ,MAAM,OAAO,CAAC;AAC3C,WAAO,SAAS,OAAO,KAAK,GAAG;AAAA,EACjC;AACA,SAAO,OAAO,KAAK,GAAG;AACxB;"}
1
+ {"version":3,"file":"utils.js","sources":["../../../src/data/diagnostics/utils.ts"],"sourcesContent":["import type { StaticIconComponent } from \"../Icon\";\nimport {\n UiCircleFilled,\n UiPause,\n UiDebugStepOver,\n UiError,\n UiPlayCircle,\n UiWatch,\n} from \"../../icons\";\nimport type { ProcessNode } from \"./types\";\n\nexport function countProcesses(node?: ProcessNode): number {\n if (!node) return 0;\n return 1 + (node.children || []).reduce((sum, child) => sum + countProcesses(child), 0);\n}\n\nexport function findProcessByPID(node: ProcessNode | undefined, pid: number): ProcessNode | null {\n if (!node) return null;\n if (node.pid === pid) return node;\n for (const child of node.children || []) {\n const found = findProcessByPID(child, pid);\n if (found) return found;\n }\n return null;\n}\n\nexport function processStateIcon(status?: string): StaticIconComponent {\n const value = (status || \"\").toLowerCase();\n if (value.includes(\"run\")) return UiPlayCircle;\n if (value.includes(\"sleep\") || value.includes(\"idle\")) return UiWatch;\n if (value.includes(\"stop\") || value.includes(\"halt\")) return UiPause;\n if (value.includes(\"zombie\") || value.includes(\"dead\")) return UiError;\n if (value.includes(\"wait\") || value.includes(\"block\")) return UiDebugStepOver;\n return UiCircleFilled;\n}\n\nexport function processStateColor(status?: string): string {\n const value = (status || \"\").toLowerCase();\n if (value.includes(\"run\")) return \"text-green-600\";\n if (value.includes(\"sleep\") || value.includes(\"idle\")) return \"text-amber-500\";\n if (value.includes(\"stop\") || value.includes(\"halt\")) return \"text-orange-600\";\n if (value.includes(\"zombie\") || value.includes(\"dead\")) return \"text-red-600\";\n if (value.includes(\"wait\") || value.includes(\"block\")) return \"text-blue-600\";\n return \"text-muted-foreground\";\n}\n\n// formatBytes lives in the shared lib/format module; re-exported here so the\n// diagnostics barrel (data.ts) and existing importers keep working unchanged.\nexport { formatBytes } from \"../../lib/format\";\n\nexport function processLabel(node: ProcessNode): string {\n if (node.name) return node.name;\n if (node.command) {\n const [first] = node.command.split(/\\s+/, 1);\n return first || `pid ${node.pid}`;\n }\n return `pid ${node.pid}`;\n}\n"],"names":[],"mappings":";;;;;;AAWO,SAAS,eAAe,MAA4B;AACzD,MAAI,CAAC,KAAM,QAAO;AAClB,SAAO,KAAK,KAAK,YAAY,CAAA,GAAI,OAAO,CAAC,KAAK,UAAU,MAAM,eAAe,KAAK,GAAG,CAAC;AACxF;AAEO,SAAS,iBAAiB,MAA+B,KAAiC;AAC/F,MAAI,CAAC,KAAM,QAAO;AAClB,MAAI,KAAK,QAAQ,IAAK,QAAO;AAC7B,aAAW,SAAS,KAAK,YAAY,CAAA,GAAI;AACvC,UAAM,QAAQ,iBAAiB,OAAO,GAAG;AACzC,QAAI,MAAO,QAAO;AAAA,EACpB;AACA,SAAO;AACT;AAEO,SAAS,iBAAiB,QAAsC;AACrE,QAAM,SAAS,UAAU,IAAI,YAAA;AAC7B,MAAI,MAAM,SAAS,KAAK,EAAG,QAAO;AAClC,MAAI,MAAM,SAAS,OAAO,KAAK,MAAM,SAAS,MAAM,EAAG,QAAO;AAC9D,MAAI,MAAM,SAAS,MAAM,KAAK,MAAM,SAAS,MAAM,EAAG,QAAO;AAC7D,MAAI,MAAM,SAAS,QAAQ,KAAK,MAAM,SAAS,MAAM,EAAG,QAAO;AAC/D,MAAI,MAAM,SAAS,MAAM,KAAK,MAAM,SAAS,OAAO,EAAG,QAAO;AAC9D,SAAO;AACT;AAEO,SAAS,kBAAkB,QAAyB;AACzD,QAAM,SAAS,UAAU,IAAI,YAAA;AAC7B,MAAI,MAAM,SAAS,KAAK,EAAG,QAAO;AAClC,MAAI,MAAM,SAAS,OAAO,KAAK,MAAM,SAAS,MAAM,EAAG,QAAO;AAC9D,MAAI,MAAM,SAAS,MAAM,KAAK,MAAM,SAAS,MAAM,EAAG,QAAO;AAC7D,MAAI,MAAM,SAAS,QAAQ,KAAK,MAAM,SAAS,MAAM,EAAG,QAAO;AAC/D,MAAI,MAAM,SAAS,MAAM,KAAK,MAAM,SAAS,OAAO,EAAG,QAAO;AAC9D,SAAO;AACT;AAMO,SAAS,aAAa,MAA2B;AACtD,MAAI,KAAK,KAAM,QAAO,KAAK;AAC3B,MAAI,KAAK,SAAS;AAChB,UAAM,CAAC,KAAK,IAAI,KAAK,QAAQ,MAAM,OAAO,CAAC;AAC3C,WAAO,SAAS,OAAO,KAAK,GAAG;AAAA,EACjC;AACA,SAAO,OAAO,KAAK,GAAG;AACxB;"}
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const STATUS_COLORS = {
4
+ success: "text-green-600",
5
+ PASS: "text-green-600",
6
+ completed: "text-green-600",
7
+ failed: "text-red-600",
8
+ FAIL: "text-red-600",
9
+ ERR: "text-red-600",
10
+ warning: "text-yellow-600",
11
+ running: "text-blue-600",
12
+ pending: "text-gray-400",
13
+ canceled: "text-gray-400",
14
+ SKIP: "text-gray-400"
15
+ };
16
+ const STATUS_ICONS = {
17
+ pending: "codicon:clock",
18
+ running: "svg-spinners:ring-resize",
19
+ success: "codicon:pass-filled",
20
+ PASS: "codicon:pass-filled",
21
+ completed: "codicon:pass-filled",
22
+ failed: "codicon:error",
23
+ FAIL: "codicon:error",
24
+ ERR: "codicon:error",
25
+ warning: "codicon:warning",
26
+ canceled: "codicon:circle-slash",
27
+ SKIP: "codicon:circle-slash"
28
+ };
29
+ const STATUS_BG = {
30
+ success: "bg-green-100",
31
+ completed: "bg-green-100",
32
+ PASS: "bg-green-100",
33
+ failed: "bg-red-100",
34
+ FAIL: "bg-red-100",
35
+ ERR: "bg-red-100",
36
+ warning: "bg-yellow-100",
37
+ running: "bg-blue-100",
38
+ pending: "bg-gray-100"
39
+ };
40
+ function taskStatusColor(s) {
41
+ return STATUS_COLORS[s] ?? "text-gray-500";
42
+ }
43
+ function taskStatusIcon(s) {
44
+ return STATUS_ICONS[s] ?? "codicon:circle-outline";
45
+ }
46
+ function taskStatusBg(s) {
47
+ return STATUS_BG[s] ?? "bg-gray-100";
48
+ }
49
+ function logLevelColor(level) {
50
+ switch (level) {
51
+ case "error":
52
+ return "text-red-500";
53
+ case "warn":
54
+ return "text-yellow-600";
55
+ case "debug":
56
+ return "text-gray-400";
57
+ default:
58
+ return "text-gray-500";
59
+ }
60
+ }
61
+ function taskSegments(counts) {
62
+ return [
63
+ { count: counts.ok, color: "bg-green-500", label: "passed" },
64
+ { count: counts.warn, color: "bg-yellow-400", label: "warnings" },
65
+ { count: counts.fail, color: "bg-red-500", label: "failed" },
66
+ { count: counts.run, color: "bg-blue-500", label: "running" },
67
+ { count: counts.pending, color: "bg-gray-300", label: "pending" }
68
+ ];
69
+ }
70
+ function bucketTasks(tasks) {
71
+ let ok = 0;
72
+ let warn = 0;
73
+ let fail = 0;
74
+ let run = 0;
75
+ let pending = 0;
76
+ for (const t of tasks) {
77
+ switch (t.status) {
78
+ case "success":
79
+ case "PASS":
80
+ ok += 1;
81
+ break;
82
+ case "warning":
83
+ warn += 1;
84
+ break;
85
+ case "failed":
86
+ case "FAIL":
87
+ case "ERR":
88
+ fail += 1;
89
+ break;
90
+ case "running":
91
+ run += 1;
92
+ break;
93
+ case "pending":
94
+ pending += 1;
95
+ break;
96
+ default:
97
+ ok += 1;
98
+ }
99
+ }
100
+ return { ok, warn, fail, run, pending };
101
+ }
102
+ exports.bucketTasks = bucketTasks;
103
+ exports.logLevelColor = logLevelColor;
104
+ exports.taskSegments = taskSegments;
105
+ exports.taskStatusBg = taskStatusBg;
106
+ exports.taskStatusColor = taskStatusColor;
107
+ exports.taskStatusIcon = taskStatusIcon;
108
+ //# sourceMappingURL=task-status.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-status.cjs","sources":["../../src/data/task-status.ts"],"sourcesContent":["import type { ProgressSegment } from \"./ProgressBar\";\nimport type { TaskSnapshot } from \"./TaskSnapshot\";\n\n// Status → presentation maps, ported from clicky's task UI (task/ui/src/utils.ts)\n// so the React and Preact renderers agree on icon/color semantics.\n\nconst STATUS_COLORS: Record<string, string> = {\n success: \"text-green-600\",\n PASS: \"text-green-600\",\n completed: \"text-green-600\",\n failed: \"text-red-600\",\n FAIL: \"text-red-600\",\n ERR: \"text-red-600\",\n warning: \"text-yellow-600\",\n running: \"text-blue-600\",\n pending: \"text-gray-400\",\n canceled: \"text-gray-400\",\n SKIP: \"text-gray-400\",\n};\n\nconst STATUS_ICONS: Record<string, string> = {\n pending: \"codicon:clock\",\n running: \"svg-spinners:ring-resize\",\n success: \"codicon:pass-filled\",\n PASS: \"codicon:pass-filled\",\n completed: \"codicon:pass-filled\",\n failed: \"codicon:error\",\n FAIL: \"codicon:error\",\n ERR: \"codicon:error\",\n warning: \"codicon:warning\",\n canceled: \"codicon:circle-slash\",\n SKIP: \"codicon:circle-slash\",\n};\n\nconst STATUS_BG: Record<string, string> = {\n success: \"bg-green-100\",\n completed: \"bg-green-100\",\n PASS: \"bg-green-100\",\n failed: \"bg-red-100\",\n FAIL: \"bg-red-100\",\n ERR: \"bg-red-100\",\n warning: \"bg-yellow-100\",\n running: \"bg-blue-100\",\n pending: \"bg-gray-100\",\n};\n\nexport function taskStatusColor(s: string): string {\n return STATUS_COLORS[s] ?? \"text-gray-500\";\n}\n\nexport function taskStatusIcon(s: string): string {\n return STATUS_ICONS[s] ?? \"codicon:circle-outline\";\n}\n\nexport function taskStatusBg(s: string): string {\n return STATUS_BG[s] ?? \"bg-gray-100\";\n}\n\nexport function logLevelColor(level: string): string {\n switch (level) {\n case \"error\":\n return \"text-red-500\";\n case \"warn\":\n return \"text-yellow-600\";\n case \"debug\":\n return \"text-gray-400\";\n default:\n return \"text-gray-500\";\n }\n}\n\n// taskSegments builds the colored progress-bar segments for a set of counts, in\n// the canonical clicky order (passed, warnings, failed, running, pending).\nexport function taskSegments(counts: {\n ok: number;\n warn: number;\n fail: number;\n run: number;\n pending: number;\n}): ProgressSegment[] {\n return [\n { count: counts.ok, color: \"bg-green-500\", label: \"passed\" },\n { count: counts.warn, color: \"bg-yellow-400\", label: \"warnings\" },\n { count: counts.fail, color: \"bg-red-500\", label: \"failed\" },\n { count: counts.run, color: \"bg-blue-500\", label: \"running\" },\n { count: counts.pending, color: \"bg-gray-300\", label: \"pending\" },\n ];\n}\n\n// bucketTasks tallies the child tasks of a group by status bucket.\nexport function bucketTasks(tasks: TaskSnapshot[]): {\n ok: number;\n warn: number;\n fail: number;\n run: number;\n pending: number;\n} {\n let ok = 0;\n let warn = 0;\n let fail = 0;\n let run = 0;\n let pending = 0;\n for (const t of tasks) {\n switch (t.status) {\n case \"success\":\n case \"PASS\":\n ok += 1;\n break;\n case \"warning\":\n warn += 1;\n break;\n case \"failed\":\n case \"FAIL\":\n case \"ERR\":\n fail += 1;\n break;\n case \"running\":\n run += 1;\n break;\n case \"pending\":\n pending += 1;\n break;\n default:\n ok += 1; // SKIP / canceled / completed count as done\n }\n }\n return { ok, warn, fail, run, pending };\n}\n"],"names":[],"mappings":";;AAMA,MAAM,gBAAwC;AAAA,EAC5C,SAAS;AAAA,EACT,MAAM;AAAA,EACN,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,KAAK;AAAA,EACL,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,UAAU;AAAA,EACV,MAAM;AACR;AAEA,MAAM,eAAuC;AAAA,EAC3C,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,MAAM;AAAA,EACN,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,KAAK;AAAA,EACL,SAAS;AAAA,EACT,UAAU;AAAA,EACV,MAAM;AACR;AAEA,MAAM,YAAoC;AAAA,EACxC,SAAS;AAAA,EACT,WAAW;AAAA,EACX,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,KAAK;AAAA,EACL,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AACX;AAEO,SAAS,gBAAgB,GAAmB;AACjD,SAAO,cAAc,CAAC,KAAK;AAC7B;AAEO,SAAS,eAAe,GAAmB;AAChD,SAAO,aAAa,CAAC,KAAK;AAC5B;AAEO,SAAS,aAAa,GAAmB;AAC9C,SAAO,UAAU,CAAC,KAAK;AACzB;AAEO,SAAS,cAAc,OAAuB;AACnD,UAAQ,OAAA;AAAA,IACN,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EAAA;AAEb;AAIO,SAAS,aAAa,QAMP;AACpB,SAAO;AAAA,IACL,EAAE,OAAO,OAAO,IAAI,OAAO,gBAAgB,OAAO,SAAA;AAAA,IAClD,EAAE,OAAO,OAAO,MAAM,OAAO,iBAAiB,OAAO,WAAA;AAAA,IACrD,EAAE,OAAO,OAAO,MAAM,OAAO,cAAc,OAAO,SAAA;AAAA,IAClD,EAAE,OAAO,OAAO,KAAK,OAAO,eAAe,OAAO,UAAA;AAAA,IAClD,EAAE,OAAO,OAAO,SAAS,OAAO,eAAe,OAAO,UAAA;AAAA,EAAU;AAEpE;AAGO,SAAS,YAAY,OAM1B;AACA,MAAI,KAAK;AACT,MAAI,OAAO;AACX,MAAI,OAAO;AACX,MAAI,MAAM;AACV,MAAI,UAAU;AACd,aAAW,KAAK,OAAO;AACrB,YAAQ,EAAE,QAAA;AAAA,MACR,KAAK;AAAA,MACL,KAAK;AACH,cAAM;AACN;AAAA,MACF,KAAK;AACH,gBAAQ;AACR;AAAA,MACF,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,gBAAQ;AACR;AAAA,MACF,KAAK;AACH,eAAO;AACP;AAAA,MACF,KAAK;AACH,mBAAW;AACX;AAAA,MACF;AACE,cAAM;AAAA,IAAA;AAAA,EAEZ;AACA,SAAO,EAAE,IAAI,MAAM,MAAM,KAAK,QAAA;AAChC;;;;;;;"}
@@ -0,0 +1,21 @@
1
+ import { ProgressSegment } from './ProgressBar';
2
+ import { TaskSnapshot } from './TaskSnapshot';
3
+ export declare function taskStatusColor(s: string): string;
4
+ export declare function taskStatusIcon(s: string): string;
5
+ export declare function taskStatusBg(s: string): string;
6
+ export declare function logLevelColor(level: string): string;
7
+ export declare function taskSegments(counts: {
8
+ ok: number;
9
+ warn: number;
10
+ fail: number;
11
+ run: number;
12
+ pending: number;
13
+ }): ProgressSegment[];
14
+ export declare function bucketTasks(tasks: TaskSnapshot[]): {
15
+ ok: number;
16
+ warn: number;
17
+ fail: number;
18
+ run: number;
19
+ pending: number;
20
+ };
21
+ //# sourceMappingURL=task-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-status.d.ts","sourceRoot":"","sources":["../../src/data/task-status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AA6CnD,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAWnD;AAID,wBAAgB,YAAY,CAAC,MAAM,EAAE;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,eAAe,EAAE,CAQpB;AAGD,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG;IAClD,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB,CA+BA"}
@@ -0,0 +1,108 @@
1
+ const STATUS_COLORS = {
2
+ success: "text-green-600",
3
+ PASS: "text-green-600",
4
+ completed: "text-green-600",
5
+ failed: "text-red-600",
6
+ FAIL: "text-red-600",
7
+ ERR: "text-red-600",
8
+ warning: "text-yellow-600",
9
+ running: "text-blue-600",
10
+ pending: "text-gray-400",
11
+ canceled: "text-gray-400",
12
+ SKIP: "text-gray-400"
13
+ };
14
+ const STATUS_ICONS = {
15
+ pending: "codicon:clock",
16
+ running: "svg-spinners:ring-resize",
17
+ success: "codicon:pass-filled",
18
+ PASS: "codicon:pass-filled",
19
+ completed: "codicon:pass-filled",
20
+ failed: "codicon:error",
21
+ FAIL: "codicon:error",
22
+ ERR: "codicon:error",
23
+ warning: "codicon:warning",
24
+ canceled: "codicon:circle-slash",
25
+ SKIP: "codicon:circle-slash"
26
+ };
27
+ const STATUS_BG = {
28
+ success: "bg-green-100",
29
+ completed: "bg-green-100",
30
+ PASS: "bg-green-100",
31
+ failed: "bg-red-100",
32
+ FAIL: "bg-red-100",
33
+ ERR: "bg-red-100",
34
+ warning: "bg-yellow-100",
35
+ running: "bg-blue-100",
36
+ pending: "bg-gray-100"
37
+ };
38
+ function taskStatusColor(s) {
39
+ return STATUS_COLORS[s] ?? "text-gray-500";
40
+ }
41
+ function taskStatusIcon(s) {
42
+ return STATUS_ICONS[s] ?? "codicon:circle-outline";
43
+ }
44
+ function taskStatusBg(s) {
45
+ return STATUS_BG[s] ?? "bg-gray-100";
46
+ }
47
+ function logLevelColor(level) {
48
+ switch (level) {
49
+ case "error":
50
+ return "text-red-500";
51
+ case "warn":
52
+ return "text-yellow-600";
53
+ case "debug":
54
+ return "text-gray-400";
55
+ default:
56
+ return "text-gray-500";
57
+ }
58
+ }
59
+ function taskSegments(counts) {
60
+ return [
61
+ { count: counts.ok, color: "bg-green-500", label: "passed" },
62
+ { count: counts.warn, color: "bg-yellow-400", label: "warnings" },
63
+ { count: counts.fail, color: "bg-red-500", label: "failed" },
64
+ { count: counts.run, color: "bg-blue-500", label: "running" },
65
+ { count: counts.pending, color: "bg-gray-300", label: "pending" }
66
+ ];
67
+ }
68
+ function bucketTasks(tasks) {
69
+ let ok = 0;
70
+ let warn = 0;
71
+ let fail = 0;
72
+ let run = 0;
73
+ let pending = 0;
74
+ for (const t of tasks) {
75
+ switch (t.status) {
76
+ case "success":
77
+ case "PASS":
78
+ ok += 1;
79
+ break;
80
+ case "warning":
81
+ warn += 1;
82
+ break;
83
+ case "failed":
84
+ case "FAIL":
85
+ case "ERR":
86
+ fail += 1;
87
+ break;
88
+ case "running":
89
+ run += 1;
90
+ break;
91
+ case "pending":
92
+ pending += 1;
93
+ break;
94
+ default:
95
+ ok += 1;
96
+ }
97
+ }
98
+ return { ok, warn, fail, run, pending };
99
+ }
100
+ export {
101
+ bucketTasks,
102
+ logLevelColor,
103
+ taskSegments,
104
+ taskStatusBg,
105
+ taskStatusColor,
106
+ taskStatusIcon
107
+ };
108
+ //# sourceMappingURL=task-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-status.js","sources":["../../src/data/task-status.ts"],"sourcesContent":["import type { ProgressSegment } from \"./ProgressBar\";\nimport type { TaskSnapshot } from \"./TaskSnapshot\";\n\n// Status → presentation maps, ported from clicky's task UI (task/ui/src/utils.ts)\n// so the React and Preact renderers agree on icon/color semantics.\n\nconst STATUS_COLORS: Record<string, string> = {\n success: \"text-green-600\",\n PASS: \"text-green-600\",\n completed: \"text-green-600\",\n failed: \"text-red-600\",\n FAIL: \"text-red-600\",\n ERR: \"text-red-600\",\n warning: \"text-yellow-600\",\n running: \"text-blue-600\",\n pending: \"text-gray-400\",\n canceled: \"text-gray-400\",\n SKIP: \"text-gray-400\",\n};\n\nconst STATUS_ICONS: Record<string, string> = {\n pending: \"codicon:clock\",\n running: \"svg-spinners:ring-resize\",\n success: \"codicon:pass-filled\",\n PASS: \"codicon:pass-filled\",\n completed: \"codicon:pass-filled\",\n failed: \"codicon:error\",\n FAIL: \"codicon:error\",\n ERR: \"codicon:error\",\n warning: \"codicon:warning\",\n canceled: \"codicon:circle-slash\",\n SKIP: \"codicon:circle-slash\",\n};\n\nconst STATUS_BG: Record<string, string> = {\n success: \"bg-green-100\",\n completed: \"bg-green-100\",\n PASS: \"bg-green-100\",\n failed: \"bg-red-100\",\n FAIL: \"bg-red-100\",\n ERR: \"bg-red-100\",\n warning: \"bg-yellow-100\",\n running: \"bg-blue-100\",\n pending: \"bg-gray-100\",\n};\n\nexport function taskStatusColor(s: string): string {\n return STATUS_COLORS[s] ?? \"text-gray-500\";\n}\n\nexport function taskStatusIcon(s: string): string {\n return STATUS_ICONS[s] ?? \"codicon:circle-outline\";\n}\n\nexport function taskStatusBg(s: string): string {\n return STATUS_BG[s] ?? \"bg-gray-100\";\n}\n\nexport function logLevelColor(level: string): string {\n switch (level) {\n case \"error\":\n return \"text-red-500\";\n case \"warn\":\n return \"text-yellow-600\";\n case \"debug\":\n return \"text-gray-400\";\n default:\n return \"text-gray-500\";\n }\n}\n\n// taskSegments builds the colored progress-bar segments for a set of counts, in\n// the canonical clicky order (passed, warnings, failed, running, pending).\nexport function taskSegments(counts: {\n ok: number;\n warn: number;\n fail: number;\n run: number;\n pending: number;\n}): ProgressSegment[] {\n return [\n { count: counts.ok, color: \"bg-green-500\", label: \"passed\" },\n { count: counts.warn, color: \"bg-yellow-400\", label: \"warnings\" },\n { count: counts.fail, color: \"bg-red-500\", label: \"failed\" },\n { count: counts.run, color: \"bg-blue-500\", label: \"running\" },\n { count: counts.pending, color: \"bg-gray-300\", label: \"pending\" },\n ];\n}\n\n// bucketTasks tallies the child tasks of a group by status bucket.\nexport function bucketTasks(tasks: TaskSnapshot[]): {\n ok: number;\n warn: number;\n fail: number;\n run: number;\n pending: number;\n} {\n let ok = 0;\n let warn = 0;\n let fail = 0;\n let run = 0;\n let pending = 0;\n for (const t of tasks) {\n switch (t.status) {\n case \"success\":\n case \"PASS\":\n ok += 1;\n break;\n case \"warning\":\n warn += 1;\n break;\n case \"failed\":\n case \"FAIL\":\n case \"ERR\":\n fail += 1;\n break;\n case \"running\":\n run += 1;\n break;\n case \"pending\":\n pending += 1;\n break;\n default:\n ok += 1; // SKIP / canceled / completed count as done\n }\n }\n return { ok, warn, fail, run, pending };\n}\n"],"names":[],"mappings":"AAMA,MAAM,gBAAwC;AAAA,EAC5C,SAAS;AAAA,EACT,MAAM;AAAA,EACN,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,KAAK;AAAA,EACL,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,UAAU;AAAA,EACV,MAAM;AACR;AAEA,MAAM,eAAuC;AAAA,EAC3C,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,MAAM;AAAA,EACN,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,KAAK;AAAA,EACL,SAAS;AAAA,EACT,UAAU;AAAA,EACV,MAAM;AACR;AAEA,MAAM,YAAoC;AAAA,EACxC,SAAS;AAAA,EACT,WAAW;AAAA,EACX,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,KAAK;AAAA,EACL,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AACX;AAEO,SAAS,gBAAgB,GAAmB;AACjD,SAAO,cAAc,CAAC,KAAK;AAC7B;AAEO,SAAS,eAAe,GAAmB;AAChD,SAAO,aAAa,CAAC,KAAK;AAC5B;AAEO,SAAS,aAAa,GAAmB;AAC9C,SAAO,UAAU,CAAC,KAAK;AACzB;AAEO,SAAS,cAAc,OAAuB;AACnD,UAAQ,OAAA;AAAA,IACN,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EAAA;AAEb;AAIO,SAAS,aAAa,QAMP;AACpB,SAAO;AAAA,IACL,EAAE,OAAO,OAAO,IAAI,OAAO,gBAAgB,OAAO,SAAA;AAAA,IAClD,EAAE,OAAO,OAAO,MAAM,OAAO,iBAAiB,OAAO,WAAA;AAAA,IACrD,EAAE,OAAO,OAAO,MAAM,OAAO,cAAc,OAAO,SAAA;AAAA,IAClD,EAAE,OAAO,OAAO,KAAK,OAAO,eAAe,OAAO,UAAA;AAAA,IAClD,EAAE,OAAO,OAAO,SAAS,OAAO,eAAe,OAAO,UAAA;AAAA,EAAU;AAEpE;AAGO,SAAS,YAAY,OAM1B;AACA,MAAI,KAAK;AACT,MAAI,OAAO;AACX,MAAI,OAAO;AACX,MAAI,MAAM;AACV,MAAI,UAAU;AACd,aAAW,KAAK,OAAO;AACrB,YAAQ,EAAE,QAAA;AAAA,MACR,KAAK;AAAA,MACL,KAAK;AACH,cAAM;AACN;AAAA,MACF,KAAK;AACH,gBAAQ;AACR;AAAA,MACF,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,gBAAQ;AACR;AAAA,MACF,KAAK;AACH,eAAO;AACP;AAAA,MACF,KAAK;AACH,mBAAW;AACX;AAAA,MACF;AACE,cAAM;AAAA,IAAA;AAAA,EAEZ;AACA,SAAO,EAAE,IAAI,MAAM,MAAM,KAAK,QAAA;AAChC;"}
package/dist/data.cjs CHANGED
@@ -26,15 +26,23 @@ const ProgressBar = require("./data/ProgressBar.cjs");
26
26
  const SignedDeltaBar = require("./data/SignedDeltaBar.cjs");
27
27
  const SortableHeader = require("./data/SortableHeader.cjs");
28
28
  const TabButton = require("./data/TabButton.cjs");
29
+ const TimeseriesPanel = require("./data/TimeseriesPanel.cjs");
30
+ const TimeseriesGauge = require("./data/TimeseriesGauge.cjs");
31
+ const StatusBreakdown = require("./data/StatusBreakdown.cjs");
29
32
  const Tree = require("./data/Tree.cjs");
30
33
  const TreeNode = require("./data/TreeNode.cjs");
31
34
  const TreeGroupHeader = require("./data/TreeGroupHeader.cjs");
35
+ const TaskSnapshot = require("./data/TaskSnapshot.cjs");
36
+ const taskStatus = require("./data/task-status.cjs");
37
+ const TaskProgress = require("./data/TaskProgress.cjs");
38
+ const TaskManager = require("./data/TaskManager.cjs");
32
39
  const DiagnosticsTree = require("./data/diagnostics/DiagnosticsTree.cjs");
33
40
  const DiagnosticsDetailPanel = require("./data/diagnostics/DiagnosticsDetailPanel.cjs");
34
41
  const utils = require("./data/diagnostics/utils.cjs");
35
42
  const stacktrace = require("./data/diagnostics/stacktrace.cjs");
36
43
  const jvmStacktrace = require("./data/diagnostics/jvm-stacktrace.cjs");
37
44
  const JvmStackTrace = require("./data/diagnostics/JvmStackTrace.cjs");
45
+ const FrameSourceWindow = require("./data/diagnostics/FrameSourceWindow.cjs");
38
46
  const RenderedStackTrace = require("./data/diagnostics/RenderedStackTrace.cjs");
39
47
  const stacktraceParse = require("./data/diagnostics/stacktrace-parse.cjs");
40
48
  const ErrorDetails = require("./data/diagnostics/ErrorDetails.cjs");
@@ -344,9 +352,26 @@ exports.ProgressBar = ProgressBar.ProgressBar;
344
352
  exports.SignedDeltaBar = SignedDeltaBar.SignedDeltaBar;
345
353
  exports.SortableHeader = SortableHeader.SortableHeader;
346
354
  exports.TabButton = TabButton.TabButton;
355
+ exports.TimeseriesPanel = TimeseriesPanel.TimeseriesPanel;
356
+ exports.resolveBreakdown = TimeseriesPanel.resolveBreakdown;
357
+ exports.resolveSeries = TimeseriesPanel.resolveSeries;
358
+ exports.TimeseriesGauge = TimeseriesGauge.TimeseriesGauge;
359
+ exports.StackedStatusBar = StatusBreakdown.StackedStatusBar;
360
+ exports.StatusRows = StatusBreakdown.StatusRows;
361
+ exports.segment = StatusBreakdown.segment;
347
362
  exports.Tree = Tree.Tree;
348
363
  exports.TreeNode = TreeNode.TreeNode;
349
364
  exports.TreeGroupHeader = TreeGroupHeader.TreeGroupHeader;
365
+ exports.allGroupsTerminal = TaskSnapshot.allGroupsTerminal;
366
+ exports.isTerminalStatus = TaskSnapshot.isTerminalStatus;
367
+ exports.bucketTasks = taskStatus.bucketTasks;
368
+ exports.logLevelColor = taskStatus.logLevelColor;
369
+ exports.taskSegments = taskStatus.taskSegments;
370
+ exports.taskStatusBg = taskStatus.taskStatusBg;
371
+ exports.taskStatusColor = taskStatus.taskStatusColor;
372
+ exports.taskStatusIcon = taskStatus.taskStatusIcon;
373
+ exports.TaskProgress = TaskProgress.TaskProgress;
374
+ exports.TaskManager = TaskManager.TaskManager;
350
375
  exports.DiagnosticsTree = DiagnosticsTree.DiagnosticsTree;
351
376
  exports.DiagnosticsDetailPanel = DiagnosticsDetailPanel.DiagnosticsDetailPanel;
352
377
  exports.countProcesses = utils.countProcesses;
@@ -363,6 +388,8 @@ exports.countThreadsByState = jvmStacktrace.countThreadsByState;
363
388
  exports.parseJvmThreadDump = jvmStacktrace.parseJvmThreadDump;
364
389
  exports.JvmStackFrameRow = JvmStackTrace.JvmStackFrameRow;
365
390
  exports.JvmStackTrace = JvmStackTrace.JvmStackTrace;
391
+ exports.FrameSourceWindow = FrameSourceWindow.FrameSourceWindow;
392
+ exports.frameHasSource = FrameSourceWindow.frameHasSource;
366
393
  exports.StackTrace = RenderedStackTrace.StackTrace;
367
394
  exports.parseJavaStackTrace = stacktraceParse.parseJavaStackTrace;
368
395
  exports.CopyBadge = ErrorDetails.CopyBadge;
package/dist/data.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"data.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"data.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/data.d.ts CHANGED
@@ -25,16 +25,24 @@ export { ProgressBar, type ProgressBarProps, type ProgressSegment } from './data
25
25
  export { SignedDeltaBar, type SignedDeltaBarProps } from './data/SignedDeltaBar';
26
26
  export { SortableHeader, type SortableHeaderProps } from './data/SortableHeader';
27
27
  export { TabButton, type TabButtonProps } from './data/TabButton';
28
+ export { TimeseriesPanel, resolveSeries, resolveBreakdown, type BreakdownItem, type ResolvedSeries, type TimeseriesPanelProps, type TimeseriesPoint, type TimeseriesResponse, type TimeseriesSeries, } from './data/TimeseriesPanel';
29
+ export { TimeseriesGauge, type GaugeSeries, type TimeseriesGaugeProps, } from './data/TimeseriesGauge';
30
+ export { StatusRows, StackedStatusBar, segment, type StatusSegment, type StatusRenderLink, } from './data/StatusBreakdown';
28
31
  export { Tree, type TreeProps } from './data/Tree';
29
32
  export { TreeNode, type TreeNodeProps, type TreeRowContext } from './data/TreeNode';
30
33
  export { TreeGroupHeader, type TreeGroupHeaderProps } from './data/TreeGroupHeader';
34
+ export { type LogEntry, type TaskSnapshot, type TaskRunMeta, isTerminalStatus, allGroupsTerminal, } from './data/TaskSnapshot';
35
+ export { taskStatusColor, taskStatusIcon, taskStatusBg, logLevelColor, taskSegments, bucketTasks, } from './data/task-status';
36
+ export { TaskProgress, type TaskProgressProps } from './data/TaskProgress';
37
+ export { TaskManager, type TaskManagerProps } from './data/TaskManager';
31
38
  export { DiagnosticsTree, type DiagnosticsTreeProps } from './data/diagnostics/DiagnosticsTree';
32
39
  export { DiagnosticsDetailPanel, type DiagnosticsDetailPanelProps, } from './data/diagnostics/DiagnosticsDetailPanel';
33
40
  export type { ProcessNode, StackCapture, RunMeta } from './data/diagnostics/types';
34
41
  export { findProcessByPID, countProcesses, processLabel, processStateIcon, processStateColor, } from './data/diagnostics/utils';
35
42
  export { parseGoroutineDump, countGoroutinesByState, parseStackDump, detectDumpFormat, countStackByState, type ParsedGoroutine, type ParsedGoroutineFrame, type ParsedStack, type DumpFormat, } from './data/diagnostics/stacktrace';
36
43
  export { parseJvmThreadDump, countThreadsByState, type ParsedThread, type ParsedThreadFrame, } from './data/diagnostics/jvm-stacktrace';
37
- export { JvmStackTrace, JvmStackFrameRow, type JvmStackTraceProps, } from './data/diagnostics/JvmStackTrace';
44
+ export { JvmStackTrace, JvmStackFrameRow, type JvmStackTraceProps, type JvmFrameSourceResolver, } from './data/diagnostics/JvmStackTrace';
45
+ export { FrameSourceWindow, frameHasSource, type FrameSource, } from './data/diagnostics/FrameSourceWindow';
38
46
  export { StackTrace, type StackTraceProps, type StackTraceSourceResolver, } from './data/diagnostics/RenderedStackTrace';
39
47
  export { parseJavaStackTrace, type ParsedStackFrame, type ParsedStackTrace, } from './data/diagnostics/stacktrace-parse';
40
48
  export { ErrorDetails, PrettyStackTrace, CopyBadge, type ErrorDetailsProps, } from './data/diagnostics/ErrorDetails';
@@ -1 +1 @@
1
- {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"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"}