@flanksource/clicky-ui 0.1.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. package/README.md +29 -2
  2. package/dist/api-explorer.d.ts +5 -0
  3. package/dist/api-explorer.d.ts.map +1 -0
  4. package/dist/api-explorer.js +25 -0
  5. package/dist/api-explorer.js.map +1 -0
  6. package/dist/clicky.d.ts +2 -0
  7. package/dist/clicky.d.ts.map +1 -0
  8. package/dist/clicky.js +5 -0
  9. package/dist/clicky.js.map +1 -0
  10. package/dist/components/DatePicker.d.ts +18 -0
  11. package/dist/components/DatePicker.d.ts.map +1 -0
  12. package/dist/components/DatePicker.js +63 -0
  13. package/dist/components/DatePicker.js.map +1 -0
  14. package/dist/components/DateTimePicker.d.ts +18 -0
  15. package/dist/components/DateTimePicker.d.ts.map +1 -0
  16. package/dist/components/DateTimePicker.js +84 -0
  17. package/dist/components/DateTimePicker.js.map +1 -0
  18. package/dist/components/FilterBar.d.ts +180 -0
  19. package/dist/components/FilterBar.d.ts.map +1 -0
  20. package/dist/components/FilterBar.js +1685 -0
  21. package/dist/components/FilterBar.js.map +1 -0
  22. package/dist/components/MultiSelect.d.ts +19 -0
  23. package/dist/components/MultiSelect.d.ts.map +1 -0
  24. package/dist/components/MultiSelect.js +143 -0
  25. package/dist/components/MultiSelect.js.map +1 -0
  26. package/dist/components/RangeSlider.d.ts +16 -0
  27. package/dist/components/RangeSlider.d.ts.map +1 -0
  28. package/dist/components/RangeSlider.js +92 -0
  29. package/dist/components/RangeSlider.js.map +1 -0
  30. package/dist/components/button.d.ts +21 -0
  31. package/dist/components/button.d.ts.map +1 -0
  32. package/dist/components/button.js +126 -0
  33. package/dist/components/button.js.map +1 -0
  34. package/dist/components/density-switcher.d.ts +7 -0
  35. package/dist/components/density-switcher.d.ts.map +1 -0
  36. package/dist/components/density-switcher.js +32 -0
  37. package/dist/components/density-switcher.js.map +1 -0
  38. package/dist/components/icon-menu-picker.d.ts +23 -0
  39. package/dist/components/icon-menu-picker.d.ts.map +1 -0
  40. package/dist/components/icon-menu-picker.js +192 -0
  41. package/dist/components/icon-menu-picker.js.map +1 -0
  42. package/dist/components/select.d.ts +15 -0
  43. package/dist/components/select.d.ts.map +1 -0
  44. package/dist/components/select.js +39 -0
  45. package/dist/components/select.js.map +1 -0
  46. package/dist/components/theme-switcher.d.ts +7 -0
  47. package/dist/components/theme-switcher.d.ts.map +1 -0
  48. package/dist/components/theme-switcher.js +42 -0
  49. package/dist/components/theme-switcher.js.map +1 -0
  50. package/dist/components.d.ts +15 -0
  51. package/dist/components.d.ts.map +1 -0
  52. package/dist/components.js +33 -0
  53. package/dist/components.js.map +1 -0
  54. package/dist/data/AnsiHtml.d.ts +7 -0
  55. package/dist/data/AnsiHtml.d.ts.map +1 -0
  56. package/dist/data/AnsiHtml.js +71 -0
  57. package/dist/data/AnsiHtml.js.map +1 -0
  58. package/dist/data/Avatar.d.ts +32 -0
  59. package/dist/data/Avatar.d.ts.map +1 -0
  60. package/dist/data/Avatar.js +201 -0
  61. package/dist/data/Avatar.js.map +1 -0
  62. package/dist/data/AvatarBadge.d.ts +26 -0
  63. package/dist/data/AvatarBadge.d.ts.map +1 -0
  64. package/dist/data/AvatarBadge.js +104 -0
  65. package/dist/data/AvatarBadge.js.map +1 -0
  66. package/dist/data/Badge.d.ts +44 -0
  67. package/dist/data/Badge.d.ts.map +1 -0
  68. package/dist/data/Badge.js +667 -0
  69. package/dist/data/Badge.js.map +1 -0
  70. package/dist/data/Clicky.d.ts +147 -0
  71. package/dist/data/Clicky.d.ts.map +1 -0
  72. package/dist/data/Clicky.fixtures.d.ts +3 -0
  73. package/dist/data/Clicky.fixtures.d.ts.map +1 -0
  74. package/dist/data/Clicky.js +1960 -0
  75. package/dist/data/Clicky.js.map +1 -0
  76. package/dist/data/DataTable.d.ts +95 -0
  77. package/dist/data/DataTable.d.ts.map +1 -0
  78. package/dist/data/DataTable.js +1464 -0
  79. package/dist/data/DataTable.js.map +1 -0
  80. package/dist/data/FilterPill.d.ts +29 -0
  81. package/dist/data/FilterPill.d.ts.map +1 -0
  82. package/dist/data/FilterPill.js +153 -0
  83. package/dist/data/FilterPill.js.map +1 -0
  84. package/dist/data/Gauge.d.ts +15 -0
  85. package/dist/data/Gauge.d.ts.map +1 -0
  86. package/dist/data/Gauge.js +63 -0
  87. package/dist/data/Gauge.js.map +1 -0
  88. package/dist/data/Icon.d.ts +53 -0
  89. package/dist/data/Icon.d.ts.map +1 -0
  90. package/dist/data/Icon.js +115 -0
  91. package/dist/data/Icon.js.map +1 -0
  92. package/dist/data/JsonView.d.ts +8 -0
  93. package/dist/data/JsonView.d.ts.map +1 -0
  94. package/dist/data/JsonView.js +74 -0
  95. package/dist/data/JsonView.js.map +1 -0
  96. package/dist/data/KeyValueList.d.ts +17 -0
  97. package/dist/data/KeyValueList.d.ts.map +1 -0
  98. package/dist/data/KeyValueList.js +33 -0
  99. package/dist/data/KeyValueList.js.map +1 -0
  100. package/dist/data/LogViewer.d.ts +10 -0
  101. package/dist/data/LogViewer.d.ts.map +1 -0
  102. package/dist/data/LogViewer.js +46 -0
  103. package/dist/data/LogViewer.js.map +1 -0
  104. package/dist/data/LogsTable.d.ts +27 -0
  105. package/dist/data/LogsTable.d.ts.map +1 -0
  106. package/dist/data/LogsTable.js +580 -0
  107. package/dist/data/LogsTable.js.map +1 -0
  108. package/dist/data/Markdown.d.ts +6 -0
  109. package/dist/data/Markdown.d.ts.map +1 -0
  110. package/dist/data/Markdown.js +59 -0
  111. package/dist/data/Markdown.js.map +1 -0
  112. package/dist/data/MatrixTable.d.ts +22 -0
  113. package/dist/data/MatrixTable.d.ts.map +1 -0
  114. package/dist/data/MatrixTable.js +164 -0
  115. package/dist/data/MatrixTable.js.map +1 -0
  116. package/dist/data/MethodBadge.d.ts +6 -0
  117. package/dist/data/MethodBadge.d.ts.map +1 -0
  118. package/dist/data/MethodBadge.js +18 -0
  119. package/dist/data/MethodBadge.js.map +1 -0
  120. package/dist/data/ProgressBar.d.ts +13 -0
  121. package/dist/data/ProgressBar.d.ts.map +1 -0
  122. package/dist/data/ProgressBar.js +34 -0
  123. package/dist/data/ProgressBar.js.map +1 -0
  124. package/dist/data/SortableHeader.d.ts +12 -0
  125. package/dist/data/SortableHeader.d.ts.map +1 -0
  126. package/dist/data/SortableHeader.js +33 -0
  127. package/dist/data/SortableHeader.js.map +1 -0
  128. package/dist/data/TabButton.d.ts +12 -0
  129. package/dist/data/TabButton.d.ts.map +1 -0
  130. package/dist/data/TabButton.js +45 -0
  131. package/dist/data/TabButton.js.map +1 -0
  132. package/dist/data/Tree.d.ts +35 -0
  133. package/dist/data/Tree.d.ts.map +1 -0
  134. package/dist/data/Tree.js +236 -0
  135. package/dist/data/Tree.js.map +1 -0
  136. package/dist/data/TreeGroupHeader.d.ts +11 -0
  137. package/dist/data/TreeGroupHeader.d.ts.map +1 -0
  138. package/dist/data/TreeGroupHeader.js +41 -0
  139. package/dist/data/TreeGroupHeader.js.map +1 -0
  140. package/dist/data/TreeNode.d.ts +43 -0
  141. package/dist/data/TreeNode.d.ts.map +1 -0
  142. package/dist/data/TreeNode.js +100 -0
  143. package/dist/data/TreeNode.js.map +1 -0
  144. package/dist/data/cells/StatusDot.d.ts +11 -0
  145. package/dist/data/cells/StatusDot.d.ts.map +1 -0
  146. package/dist/data/cells/StatusDot.js +38 -0
  147. package/dist/data/cells/StatusDot.js.map +1 -0
  148. package/dist/data/cells/TagList.d.ts +59 -0
  149. package/dist/data/cells/TagList.d.ts.map +1 -0
  150. package/dist/data/cells/TagList.js +257 -0
  151. package/dist/data/cells/TagList.js.map +1 -0
  152. package/dist/data/cells/Timestamp.d.ts +46 -0
  153. package/dist/data/cells/Timestamp.d.ts.map +1 -0
  154. package/dist/data/cells/Timestamp.js +146 -0
  155. package/dist/data/cells/Timestamp.js.map +1 -0
  156. package/dist/data/cells/status-mapping.d.ts +8 -0
  157. package/dist/data/cells/status-mapping.d.ts.map +1 -0
  158. package/dist/data/cells/status-mapping.js +44 -0
  159. package/dist/data/cells/status-mapping.js.map +1 -0
  160. package/dist/data/code-highlight.d.ts +12 -0
  161. package/dist/data/code-highlight.d.ts.map +1 -0
  162. package/dist/data/code-highlight.js +28 -0
  163. package/dist/data/code-highlight.js.map +1 -0
  164. package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts +9 -0
  165. package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts.map +1 -0
  166. package/dist/data/diagnostics/DiagnosticsDetailPanel.js +445 -0
  167. package/dist/data/diagnostics/DiagnosticsDetailPanel.js.map +1 -0
  168. package/dist/data/diagnostics/DiagnosticsTree.d.ts +9 -0
  169. package/dist/data/diagnostics/DiagnosticsTree.d.ts.map +1 -0
  170. package/dist/data/diagnostics/DiagnosticsTree.js +78 -0
  171. package/dist/data/diagnostics/DiagnosticsTree.js.map +1 -0
  172. package/dist/data/diagnostics/ErrorDetails.d.ts +20 -0
  173. package/dist/data/diagnostics/ErrorDetails.d.ts.map +1 -0
  174. package/dist/data/diagnostics/ErrorDetails.js +157 -0
  175. package/dist/data/diagnostics/ErrorDetails.js.map +1 -0
  176. package/dist/data/diagnostics/GoroutineCard.d.ts +10 -0
  177. package/dist/data/diagnostics/GoroutineCard.d.ts.map +1 -0
  178. package/dist/data/diagnostics/GoroutineCard.js +75 -0
  179. package/dist/data/diagnostics/GoroutineCard.js.map +1 -0
  180. package/dist/data/diagnostics/JvmStackTrace.d.ts +11 -0
  181. package/dist/data/diagnostics/JvmStackTrace.d.ts.map +1 -0
  182. package/dist/data/diagnostics/JvmStackTrace.js +26 -0
  183. package/dist/data/diagnostics/JvmStackTrace.js.map +1 -0
  184. package/dist/data/diagnostics/RenderedStackTrace.d.ts +18 -0
  185. package/dist/data/diagnostics/RenderedStackTrace.d.ts.map +1 -0
  186. package/dist/data/diagnostics/RenderedStackTrace.js +235 -0
  187. package/dist/data/diagnostics/RenderedStackTrace.js.map +1 -0
  188. package/dist/data/diagnostics/ThreadCard.d.ts +10 -0
  189. package/dist/data/diagnostics/ThreadCard.d.ts.map +1 -0
  190. package/dist/data/diagnostics/ThreadCard.js +78 -0
  191. package/dist/data/diagnostics/ThreadCard.js.map +1 -0
  192. package/dist/data/diagnostics/error-diagnostics.d.ts +26 -0
  193. package/dist/data/diagnostics/error-diagnostics.d.ts.map +1 -0
  194. package/dist/data/diagnostics/error-diagnostics.js +108 -0
  195. package/dist/data/diagnostics/error-diagnostics.js.map +1 -0
  196. package/dist/data/diagnostics/fixtures.d.ts +3 -0
  197. package/dist/data/diagnostics/fixtures.d.ts.map +1 -0
  198. package/dist/data/diagnostics/jvm-stacktrace.d.ts +34 -0
  199. package/dist/data/diagnostics/jvm-stacktrace.d.ts.map +1 -0
  200. package/dist/data/diagnostics/jvm-stacktrace.js +190 -0
  201. package/dist/data/diagnostics/jvm-stacktrace.js.map +1 -0
  202. package/dist/data/diagnostics/stacktrace-parse.d.ts +11 -0
  203. package/dist/data/diagnostics/stacktrace-parse.d.ts.map +1 -0
  204. package/dist/data/diagnostics/stacktrace-parse.js +87 -0
  205. package/dist/data/diagnostics/stacktrace-parse.js.map +1 -0
  206. package/dist/data/diagnostics/stacktrace.d.ts +38 -0
  207. package/dist/data/diagnostics/stacktrace.d.ts.map +1 -0
  208. package/dist/data/diagnostics/stacktrace.js +119 -0
  209. package/dist/data/diagnostics/stacktrace.js.map +1 -0
  210. package/dist/data/diagnostics/types.d.ts +30 -0
  211. package/dist/data/diagnostics/types.d.ts.map +1 -0
  212. package/dist/data/diagnostics/utils.d.ts +8 -0
  213. package/dist/data/diagnostics/utils.d.ts.map +1 -0
  214. package/dist/data/diagnostics/utils.js +59 -0
  215. package/dist/data/diagnostics/utils.js.map +1 -0
  216. package/dist/data/har/HarPanel.d.ts +9 -0
  217. package/dist/data/har/HarPanel.d.ts.map +1 -0
  218. package/dist/data/har/HarPanel.js +175 -0
  219. package/dist/data/har/HarPanel.js.map +1 -0
  220. package/dist/data/har/fixtures.d.ts +3 -0
  221. package/dist/data/har/fixtures.d.ts.map +1 -0
  222. package/dist/data/har/types.d.ts +47 -0
  223. package/dist/data/har/types.d.ts.map +1 -0
  224. package/dist/data.d.ts +39 -0
  225. package/dist/data.d.ts.map +1 -0
  226. package/dist/data.js +109 -0
  227. package/dist/data.js.map +1 -0
  228. package/dist/hooks/use-density.d.ts +22 -0
  229. package/dist/hooks/use-density.d.ts.map +1 -0
  230. package/dist/hooks/use-density.js +54 -0
  231. package/dist/hooks/use-density.js.map +1 -0
  232. package/dist/hooks/use-history-route.d.ts +6 -0
  233. package/dist/hooks/use-history-route.d.ts.map +1 -0
  234. package/dist/hooks/use-history-route.js +31 -0
  235. package/dist/hooks/use-history-route.js.map +1 -0
  236. package/dist/hooks/use-sort.d.ts +17 -0
  237. package/dist/hooks/use-sort.d.ts.map +1 -0
  238. package/dist/hooks/use-sort.js +42 -0
  239. package/dist/hooks/use-sort.js.map +1 -0
  240. package/dist/hooks/use-theme.d.ts +17 -0
  241. package/dist/hooks/use-theme.d.ts.map +1 -0
  242. package/dist/hooks/use-theme.js +68 -0
  243. package/dist/hooks/use-theme.js.map +1 -0
  244. package/dist/hooks.d.ts +5 -0
  245. package/dist/hooks.d.ts.map +1 -0
  246. package/dist/hooks.js +14 -0
  247. package/dist/hooks.js.map +1 -0
  248. package/dist/index.d.ts +7 -0
  249. package/dist/index.d.ts.map +1 -0
  250. package/dist/index.js +195 -0
  251. package/dist/index.js.map +1 -0
  252. package/dist/layout/Section.d.ts +23 -0
  253. package/dist/layout/Section.d.ts.map +1 -0
  254. package/dist/layout/Section.js +73 -0
  255. package/dist/layout/Section.js.map +1 -0
  256. package/dist/layout/SplitPane.d.ts +13 -0
  257. package/dist/layout/SplitPane.d.ts.map +1 -0
  258. package/dist/layout/SplitPane.js +72 -0
  259. package/dist/layout/SplitPane.js.map +1 -0
  260. package/dist/lib/palette.d.ts +4 -0
  261. package/dist/lib/palette.d.ts.map +1 -0
  262. package/dist/lib/palette.js +35 -0
  263. package/dist/lib/palette.js.map +1 -0
  264. package/dist/lib/size.d.ts +6 -0
  265. package/dist/lib/size.d.ts.map +1 -0
  266. package/dist/lib/size.js +14 -0
  267. package/dist/lib/size.js.map +1 -0
  268. package/dist/lib/utils.d.ts +3 -0
  269. package/dist/lib/utils.d.ts.map +1 -0
  270. package/dist/lib/utils.js +9 -0
  271. package/dist/lib/utils.js.map +1 -0
  272. package/dist/overlay/HoverCard.d.ts +13 -0
  273. package/dist/overlay/HoverCard.d.ts.map +1 -0
  274. package/dist/overlay/HoverCard.js +170 -0
  275. package/dist/overlay/HoverCard.js.map +1 -0
  276. package/dist/overlay/Modal.d.ts +17 -0
  277. package/dist/overlay/Modal.d.ts.map +1 -0
  278. package/dist/overlay/Modal.js +91 -0
  279. package/dist/overlay/Modal.js.map +1 -0
  280. package/dist/rpc/AcceptPicker.d.ts +52 -0
  281. package/dist/rpc/AcceptPicker.d.ts.map +1 -0
  282. package/dist/rpc/AcceptPicker.js +126 -0
  283. package/dist/rpc/AcceptPicker.js.map +1 -0
  284. package/dist/rpc/ApiExplorer.d.ts +11 -0
  285. package/dist/rpc/ApiExplorer.d.ts.map +1 -0
  286. package/dist/rpc/ApiExplorer.js +37 -0
  287. package/dist/rpc/ApiExplorer.js.map +1 -0
  288. package/dist/rpc/CommandForm.d.ts +15 -0
  289. package/dist/rpc/CommandForm.d.ts.map +1 -0
  290. package/dist/rpc/CommandForm.js +356 -0
  291. package/dist/rpc/CommandForm.js.map +1 -0
  292. package/dist/rpc/CommandOutput.d.ts +11 -0
  293. package/dist/rpc/CommandOutput.d.ts.map +1 -0
  294. package/dist/rpc/CommandOutput.js +195 -0
  295. package/dist/rpc/CommandOutput.js.map +1 -0
  296. package/dist/rpc/EndpointList.d.ts +18 -0
  297. package/dist/rpc/EndpointList.d.ts.map +1 -0
  298. package/dist/rpc/EndpointList.js +56 -0
  299. package/dist/rpc/EndpointList.js.map +1 -0
  300. package/dist/rpc/EntityExplorerApp.d.ts +15 -0
  301. package/dist/rpc/EntityExplorerApp.d.ts.map +1 -0
  302. package/dist/rpc/EntityExplorerApp.js +282 -0
  303. package/dist/rpc/EntityExplorerApp.js.map +1 -0
  304. package/dist/rpc/ExecutionResult.d.ts +14 -0
  305. package/dist/rpc/ExecutionResult.d.ts.map +1 -0
  306. package/dist/rpc/ExecutionResult.js +51 -0
  307. package/dist/rpc/ExecutionResult.js.map +1 -0
  308. package/dist/rpc/FilterForm.d.ts +22 -0
  309. package/dist/rpc/FilterForm.d.ts.map +1 -0
  310. package/dist/rpc/FilterForm.js +392 -0
  311. package/dist/rpc/FilterForm.js.map +1 -0
  312. package/dist/rpc/InlineError.d.ts +7 -0
  313. package/dist/rpc/InlineError.d.ts.map +1 -0
  314. package/dist/rpc/InlineError.js +54 -0
  315. package/dist/rpc/InlineError.js.map +1 -0
  316. package/dist/rpc/OperationActionDialog.d.ts +12 -0
  317. package/dist/rpc/OperationActionDialog.d.ts.map +1 -0
  318. package/dist/rpc/OperationActionDialog.js +105 -0
  319. package/dist/rpc/OperationActionDialog.js.map +1 -0
  320. package/dist/rpc/OperationCatalog.d.ts +21 -0
  321. package/dist/rpc/OperationCatalog.d.ts.map +1 -0
  322. package/dist/rpc/OperationCatalog.js +339 -0
  323. package/dist/rpc/OperationCatalog.js.map +1 -0
  324. package/dist/rpc/OperationCommandPage.d.ts +22 -0
  325. package/dist/rpc/OperationCommandPage.d.ts.map +1 -0
  326. package/dist/rpc/OperationCommandPage.js +484 -0
  327. package/dist/rpc/OperationCommandPage.js.map +1 -0
  328. package/dist/rpc/OperationEntityPage.d.ts +23 -0
  329. package/dist/rpc/OperationEntityPage.d.ts.map +1 -0
  330. package/dist/rpc/OperationEntityPage.js +218 -0
  331. package/dist/rpc/OperationEntityPage.js.map +1 -0
  332. package/dist/rpc/classify.d.ts +8 -0
  333. package/dist/rpc/classify.d.ts.map +1 -0
  334. package/dist/rpc/classify.js +76 -0
  335. package/dist/rpc/classify.js.map +1 -0
  336. package/dist/rpc/clickyMetadata.d.ts +12 -0
  337. package/dist/rpc/clickyMetadata.d.ts.map +1 -0
  338. package/dist/rpc/clickyMetadata.js +71 -0
  339. package/dist/rpc/clickyMetadata.js.map +1 -0
  340. package/dist/rpc/formMetadata.d.ts +27 -0
  341. package/dist/rpc/formMetadata.d.ts.map +1 -0
  342. package/dist/rpc/formMetadata.js +250 -0
  343. package/dist/rpc/formMetadata.js.map +1 -0
  344. package/dist/rpc/types.d.ts +109 -0
  345. package/dist/rpc/types.d.ts.map +1 -0
  346. package/dist/rpc/types.js +8 -0
  347. package/dist/rpc/types.js.map +1 -0
  348. package/dist/rpc/useOperations.d.ts +346 -0
  349. package/dist/rpc/useOperations.d.ts.map +1 -0
  350. package/dist/rpc/useOperations.js +31 -0
  351. package/dist/rpc/useOperations.js.map +1 -0
  352. package/dist/rpc.d.ts +14 -0
  353. package/dist/rpc.d.ts.map +1 -0
  354. package/dist/rpc.js +37 -0
  355. package/dist/rpc.js.map +1 -0
  356. package/dist/styles.css +2 -0
  357. package/dist/styles.d.ts +1 -0
  358. package/dist/styles.d.ts.map +1 -0
  359. package/dist/styles.js +2 -0
  360. package/dist/styles.js.map +1 -0
  361. package/dist/tailwind-preset.d.ts +4 -0
  362. package/dist/tailwind-preset.d.ts.map +1 -0
  363. package/dist/tailwind-preset.js +69 -0
  364. package/dist/tailwind-preset.js.map +1 -0
  365. package/dist/utils.d.ts +4 -0
  366. package/dist/utils.d.ts.map +1 -0
  367. package/dist/utils.js +12 -0
  368. package/dist/utils.js.map +1 -0
  369. package/package.json +83 -40
  370. package/dist/index.d.mts +0 -834
  371. package/dist/index.d.mts.map +0 -1
  372. package/dist/index.mjs +0 -2918
  373. package/dist/index.mjs.map +0 -1
  374. package/dist/tailwind-preset.d.mts +0 -7
  375. package/dist/tailwind-preset.d.mts.map +0 -1
  376. package/dist/tailwind-preset.mjs +0 -64
  377. package/dist/tailwind-preset.mjs.map +0 -1
  378. package/src/styles/tokens.css +0 -78
@@ -0,0 +1,580 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { useState, useMemo } from "react";
3
+ import { cn } from "../lib/utils.js";
4
+ import { Modal } from "../overlay/Modal.js";
5
+ import { AnsiHtml } from "./AnsiHtml.js";
6
+ import { DataTable } from "./DataTable.js";
7
+ import { Icon } from "./Icon.js";
8
+ const ANSI_PATTERN = new RegExp(`${String.fromCharCode(27)}\\[[0-9;?]*[ -/]*[@-~]`);
9
+ const DEFAULT_LOG_COLUMNS = [
10
+ {
11
+ key: "timestamp",
12
+ label: "Timestamp",
13
+ kind: "timestamp",
14
+ shrink: true,
15
+ minWidth: 180
16
+ },
17
+ {
18
+ key: "level",
19
+ label: "Level",
20
+ kind: "status",
21
+ shrink: true,
22
+ minWidth: 96,
23
+ status: { showLabel: true }
24
+ },
25
+ { key: "pod", label: "Pod", shrink: true, minWidth: 180 },
26
+ { key: "logger", label: "Logger", shrink: true, minWidth: 220 },
27
+ { key: "thread", label: "Thread", shrink: true, minWidth: 180 },
28
+ {
29
+ key: "message",
30
+ label: "Message",
31
+ grow: true,
32
+ minWidth: 360,
33
+ cellClassName: "font-mono text-xs",
34
+ render: (value) => {
35
+ const text = typeof value === "string" ? value : value == null ? "" : String(value);
36
+ if (!ANSI_PATTERN.test(text)) return text;
37
+ return /* @__PURE__ */ jsx(AnsiHtml, { as: "span", text, className: "whitespace-pre-wrap break-words" });
38
+ }
39
+ },
40
+ { key: "tags", label: "Tags", kind: "tags", grow: true, tags: { maxVisible: 4 } }
41
+ ];
42
+ const DEFAULT_SORT = {
43
+ key: "timestamp",
44
+ dir: "desc"
45
+ };
46
+ const JSON_PARSE_FAILED = Symbol("json-parse-failed");
47
+ function LogsTable({
48
+ logs,
49
+ columns,
50
+ dark = true,
51
+ showRawDetails = true,
52
+ className,
53
+ autoFilter = true,
54
+ defaultSort,
55
+ getRowId,
56
+ renderExpandedRow,
57
+ showDensityControl = false,
58
+ showFullscreenControl = true,
59
+ fullscreenTitle = "Logs",
60
+ ...tableProps
61
+ }) {
62
+ const [fullscreenOpen, setFullscreenOpen] = useState(false);
63
+ const rows = useMemo(() => normalizeLogsTableRows(logs), [logs]);
64
+ const resolvedRenderExpandedRow = renderExpandedRow ?? (showRawDetails ? renderLogDetails : void 0);
65
+ const renderTable = () => /* @__PURE__ */ jsx(
66
+ LogsDataTable,
67
+ {
68
+ ...tableProps,
69
+ rows,
70
+ columns: columns ?? DEFAULT_LOG_COLUMNS,
71
+ autoFilter,
72
+ defaultSort: defaultSort ?? DEFAULT_SORT,
73
+ showDensityControl,
74
+ ...getRowId ? { getRowId } : {},
75
+ ...resolvedRenderExpandedRow ? { renderExpandedRow: resolvedRenderExpandedRow } : {}
76
+ }
77
+ );
78
+ return /* @__PURE__ */ jsxs(
79
+ "div",
80
+ {
81
+ ...dark ? { "data-theme": "dark" } : {},
82
+ className: cn(
83
+ "relative flex min-h-0 flex-col",
84
+ dark && "rounded-md bg-background p-2 text-foreground",
85
+ className
86
+ ),
87
+ children: [
88
+ showFullscreenControl && /* @__PURE__ */ jsx(
89
+ "button",
90
+ {
91
+ type: "button",
92
+ "aria-label": "Open logs full screen",
93
+ title: "Open logs full screen",
94
+ className: "absolute right-3 top-3 z-10 inline-flex h-8 w-8 items-center justify-center rounded-md border border-input bg-background text-muted-foreground shadow-sm transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
95
+ onClick: () => setFullscreenOpen(true),
96
+ children: /* @__PURE__ */ jsx(Icon, { name: "codicon:screen-full", className: "text-sm" })
97
+ }
98
+ ),
99
+ renderTable(),
100
+ /* @__PURE__ */ jsx(
101
+ Modal,
102
+ {
103
+ open: fullscreenOpen,
104
+ onClose: () => setFullscreenOpen(false),
105
+ title: fullscreenTitle,
106
+ size: "full",
107
+ className: "h-[95vh]",
108
+ children: /* @__PURE__ */ jsx(
109
+ "div",
110
+ {
111
+ ...dark ? { "data-theme": "dark" } : {},
112
+ className: cn("flex h-full min-h-0 flex-col", dark && "bg-background text-foreground"),
113
+ children: renderTable()
114
+ }
115
+ )
116
+ }
117
+ )
118
+ ]
119
+ }
120
+ );
121
+ }
122
+ function LogsDataTable({
123
+ rows,
124
+ columns,
125
+ autoFilter,
126
+ defaultSort,
127
+ getRowId,
128
+ renderExpandedRow,
129
+ showDensityControl,
130
+ ...tableProps
131
+ }) {
132
+ return /* @__PURE__ */ jsx(
133
+ DataTable,
134
+ {
135
+ ...tableProps,
136
+ data: rows,
137
+ columns,
138
+ density: "compact",
139
+ autoFilter,
140
+ getRowId: getRowId ?? ((row) => row.id),
141
+ showDensityControl,
142
+ defaultSort,
143
+ ...renderExpandedRow ? { renderExpandedRow } : {}
144
+ }
145
+ );
146
+ }
147
+ function normalizeLogsTableRows(logs) {
148
+ const entries = typeof logs === "string" ? splitLogLines(logs) : logs;
149
+ return entries.map((entry, index) => normalizeLogEntry(entry, index));
150
+ }
151
+ function splitLogLines(logs) {
152
+ return logs.split(/\r?\n/).filter((line) => line.length > 0);
153
+ }
154
+ function normalizeLogEntry(entry, index) {
155
+ const parsedOuterValue = typeof entry === "string" ? tryParseJson(entry) : entry;
156
+ const parsedOuter = parsedOuterValue === JSON_PARSE_FAILED ? entry : parsedOuterValue;
157
+ const outer = asRecord(parsedOuter);
158
+ const outerLine = stringValue(outer == null ? void 0 : outer.line);
159
+ const parsedLineValue = outerLine ? tryParseJson(outerLine) : JSON_PARSE_FAILED;
160
+ const parsedLine = parsedLineValue === JSON_PARSE_FAILED ? void 0 : parsedLineValue;
161
+ const inner = asRecord(parsedLine) ?? (outerLine ? void 0 : outer);
162
+ const labels = asRecord(outer == null ? void 0 : outer.labels);
163
+ const timestamp = firstString(
164
+ pick(outer, "timestamp"),
165
+ pick(inner, "@timestamp"),
166
+ pick(outer, "ts"),
167
+ pick(inner, "timestamp"),
168
+ pick(outer, "time"),
169
+ pick(inner, "time")
170
+ );
171
+ const level = firstString(
172
+ pick(inner, "log.level"),
173
+ pick(inner, "level"),
174
+ pick(outer, "level"),
175
+ pick(outer, "severity"),
176
+ pick(inner, "severity")
177
+ );
178
+ const pod = firstString(
179
+ pick(outer, "pod"),
180
+ pick(labels, "pod"),
181
+ pick(inner, "kubernetes.pod.name")
182
+ );
183
+ const namespace = firstString(
184
+ pick(outer, "namespace"),
185
+ pick(labels, "namespace"),
186
+ pick(inner, "kubernetes.namespace")
187
+ );
188
+ const container = firstString(
189
+ pick(outer, "container"),
190
+ pick(labels, "container"),
191
+ pick(inner, "container.name")
192
+ );
193
+ const service = firstString(
194
+ pick(inner, "service.name"),
195
+ pick(inner, "service"),
196
+ pick(outer, "service"),
197
+ pick(labels, "service")
198
+ );
199
+ const dataset = firstString(pick(inner, "event.dataset"), pick(inner, "dataset"));
200
+ const logger = firstString(
201
+ pick(inner, "log.logger"),
202
+ pick(inner, "logger"),
203
+ pick(outer, "logger")
204
+ );
205
+ const thread = firstString(
206
+ pick(inner, "process.thread.name"),
207
+ pick(inner, "thread"),
208
+ pick(outer, "thread")
209
+ );
210
+ const message = firstString(
211
+ pick(inner, "message"),
212
+ pick(inner, "msg"),
213
+ pick(outer, "message"),
214
+ outerLine,
215
+ typeof entry === "string" ? entry : void 0
216
+ );
217
+ const tags = buildTags({
218
+ namespace,
219
+ container,
220
+ service,
221
+ dataset,
222
+ ecsVersion: firstString(pick(inner, "ecs.version")),
223
+ labels
224
+ });
225
+ return {
226
+ id: `${index}:${timestamp || pod || message || stableString(entry)}`,
227
+ timestamp,
228
+ level,
229
+ pod,
230
+ logger,
231
+ thread,
232
+ message,
233
+ tags,
234
+ line: outerLine ?? (typeof entry === "string" ? entry : stableString(entry)),
235
+ raw: parsedOuter,
236
+ ...parsedLine !== void 0 ? { parsedLine } : {}
237
+ };
238
+ }
239
+ function buildTags({
240
+ namespace,
241
+ container,
242
+ service,
243
+ dataset,
244
+ ecsVersion,
245
+ labels
246
+ }) {
247
+ const tags = [];
248
+ const seen = /* @__PURE__ */ new Set();
249
+ const addTag = (key, value) => {
250
+ const valueString = stringValue(value);
251
+ if (!valueString) return;
252
+ const tag = `${key}=${valueString}`;
253
+ if (seen.has(tag)) return;
254
+ seen.add(tag);
255
+ tags.push(tag);
256
+ };
257
+ addTag("namespace", namespace);
258
+ addTag("container", container);
259
+ addTag("service", service);
260
+ addTag("dataset", dataset);
261
+ addTag("ecs.version", ecsVersion);
262
+ if (labels) {
263
+ for (const [key, value] of Object.entries(labels)) {
264
+ addTag(key, value);
265
+ }
266
+ }
267
+ return tags;
268
+ }
269
+ function renderLogDetails(row) {
270
+ return /* @__PURE__ */ jsx(LogDetails, { row });
271
+ }
272
+ function LogDetails({ row }) {
273
+ const [openPaths, setOpenPaths] = useState({});
274
+ const setPathOpen = (path, open) => {
275
+ setOpenPaths((current) => ({ ...current, [path]: open }));
276
+ };
277
+ const details = useMemo(() => buildProcessedLogDetails(row), [row]);
278
+ return /* @__PURE__ */ jsx("div", { className: "space-y-density-3 text-xs", children: /* @__PURE__ */ jsx(
279
+ PropertiesDescriptionList,
280
+ {
281
+ value: details,
282
+ path: "details",
283
+ openPaths,
284
+ setPathOpen
285
+ }
286
+ ) });
287
+ }
288
+ function PropertiesDescriptionList({
289
+ value,
290
+ path,
291
+ openPaths,
292
+ setPathOpen,
293
+ depth = 0
294
+ }) {
295
+ const entries = getValueEntries(value);
296
+ if (entries.length === 0) {
297
+ return /* @__PURE__ */ jsx(LogValueSummary, { value });
298
+ }
299
+ return /* @__PURE__ */ jsx(
300
+ "dl",
301
+ {
302
+ className: cn(
303
+ "divide-y divide-border rounded-md border border-border bg-muted/20",
304
+ depth > 0 && "mt-density-1"
305
+ ),
306
+ children: entries.map(([key, entryValue]) => {
307
+ const keyText = String(key);
308
+ const label = formatPropertyLabel(keyText);
309
+ const entryPath = `${path}.${keyText}`;
310
+ const expandable = isExpandableValue(entryValue);
311
+ const open = openPaths[entryPath] ?? depth < 1;
312
+ return /* @__PURE__ */ jsxs(
313
+ "div",
314
+ {
315
+ className: "grid min-w-0 grid-cols-[minmax(8rem,14rem)_minmax(0,1fr)] gap-density-3 px-density-2 py-density-1.5",
316
+ children: [
317
+ /* @__PURE__ */ jsx(
318
+ "dt",
319
+ {
320
+ "aria-label": label,
321
+ className: "min-w-0 truncate font-mono text-[11px] text-muted-foreground",
322
+ children: label
323
+ }
324
+ ),
325
+ /* @__PURE__ */ jsxs("dd", { className: "min-w-0 space-y-density-1", children: [
326
+ /* @__PURE__ */ jsx(
327
+ LogDetailsValueLine,
328
+ {
329
+ label,
330
+ path: entryPath,
331
+ value: entryValue,
332
+ expandable,
333
+ open,
334
+ setPathOpen
335
+ }
336
+ ),
337
+ expandable && open && /* @__PURE__ */ jsx(
338
+ PropertiesDescriptionList,
339
+ {
340
+ value: entryValue,
341
+ path: entryPath,
342
+ openPaths,
343
+ setPathOpen,
344
+ depth: depth + 1
345
+ }
346
+ )
347
+ ] })
348
+ ]
349
+ },
350
+ entryPath
351
+ );
352
+ })
353
+ }
354
+ );
355
+ }
356
+ function LogDetailsValueLine({
357
+ label,
358
+ path,
359
+ value,
360
+ expandable,
361
+ open,
362
+ setPathOpen
363
+ }) {
364
+ return /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-start gap-density-1", children: [
365
+ /* @__PURE__ */ jsxs("span", { className: "inline-flex shrink-0 items-center gap-0.5 pt-0.5", children: [
366
+ /* @__PURE__ */ jsx(
367
+ LogDetailsActionButton,
368
+ {
369
+ label: `Expand ${label}`,
370
+ icon: "lucide:zoom-in",
371
+ disabled: !expandable || open,
372
+ onClick: () => setPathOpen(path, true)
373
+ }
374
+ ),
375
+ /* @__PURE__ */ jsx(
376
+ LogDetailsActionButton,
377
+ {
378
+ label: `Collapse ${label}`,
379
+ icon: "lucide:zoom-out",
380
+ disabled: !expandable || !open,
381
+ onClick: () => setPathOpen(path, false)
382
+ }
383
+ )
384
+ ] }),
385
+ /* @__PURE__ */ jsx("div", { className: "min-w-0 max-w-full", children: expandable ? /* @__PURE__ */ jsx(LogValueSummary, { value }) : /* @__PURE__ */ jsx(LogScalarValue, { value }) }),
386
+ /* @__PURE__ */ jsx(
387
+ LogDetailsActionButton,
388
+ {
389
+ label: `Copy ${label}`,
390
+ icon: "lucide:copy",
391
+ onClick: () => copyLogDetailsValue(value)
392
+ }
393
+ )
394
+ ] });
395
+ }
396
+ function LogDetailsActionButton({
397
+ label,
398
+ icon,
399
+ disabled,
400
+ onClick
401
+ }) {
402
+ return /* @__PURE__ */ jsx(
403
+ "button",
404
+ {
405
+ type: "button",
406
+ "aria-label": label,
407
+ title: label,
408
+ disabled,
409
+ className: cn(
410
+ "inline-flex h-5 w-5 items-center justify-center rounded text-muted-foreground",
411
+ "hover:bg-accent hover:text-foreground",
412
+ "disabled:opacity-35 disabled:hover:bg-transparent disabled:hover:text-muted-foreground"
413
+ ),
414
+ onClick: (event) => {
415
+ event.stopPropagation();
416
+ onClick();
417
+ },
418
+ children: /* @__PURE__ */ jsx(Icon, { name: icon, className: "text-xs" })
419
+ }
420
+ );
421
+ }
422
+ function LogValueSummary({ value }) {
423
+ if (Array.isArray(value)) {
424
+ return /* @__PURE__ */ jsxs("span", { className: "font-mono text-muted-foreground", children: [
425
+ "[",
426
+ value.length,
427
+ " items]"
428
+ ] });
429
+ }
430
+ const record = asRecord(value);
431
+ if (record) {
432
+ const count = Object.keys(record).length;
433
+ return /* @__PURE__ */ jsxs("span", { className: "font-mono text-muted-foreground", children: [
434
+ "{ ",
435
+ count,
436
+ " properties",
437
+ " }"
438
+ ] });
439
+ }
440
+ return /* @__PURE__ */ jsx(LogScalarValue, { value });
441
+ }
442
+ function LogScalarValue({ value }) {
443
+ if (value === null || value === void 0) {
444
+ return /* @__PURE__ */ jsx("span", { className: "font-mono italic text-muted-foreground", children: "null" });
445
+ }
446
+ if (typeof value === "string") {
447
+ return /* @__PURE__ */ jsx("pre", { className: "max-h-48 overflow-auto whitespace-pre-wrap break-words font-mono text-[11px] leading-relaxed text-foreground", children: value });
448
+ }
449
+ if (typeof value === "number" || typeof value === "boolean") {
450
+ return /* @__PURE__ */ jsx("span", { className: "font-mono text-blue-700 dark:text-blue-400", children: String(value) });
451
+ }
452
+ return /* @__PURE__ */ jsx("pre", { className: "max-h-48 overflow-auto whitespace-pre-wrap break-words font-mono text-[11px] leading-relaxed text-foreground", children: stablePrettyString(value) });
453
+ }
454
+ function getValueEntries(value) {
455
+ if (Array.isArray(value)) {
456
+ return value.map((entry, index) => [index, entry]);
457
+ }
458
+ return Object.entries(asRecord(value) ?? {});
459
+ }
460
+ function isExpandableValue(value) {
461
+ return getValueEntries(value).length > 0;
462
+ }
463
+ function stablePrettyString(value) {
464
+ if (typeof value === "string") return value;
465
+ try {
466
+ return JSON.stringify(value, null, 2);
467
+ } catch {
468
+ return String(value);
469
+ }
470
+ }
471
+ function copyLogDetailsValue(value) {
472
+ var _a;
473
+ if (typeof navigator !== "undefined" && ((_a = navigator.clipboard) == null ? void 0 : _a.writeText)) {
474
+ Promise.resolve(navigator.clipboard.writeText(stablePrettyString(value))).catch(
475
+ () => void 0
476
+ );
477
+ }
478
+ }
479
+ function buildProcessedLogDetails(row) {
480
+ const attributes = buildProcessedLogAttributes(row);
481
+ return stripEmptyProperties({
482
+ timestamp: row.timestamp,
483
+ level: row.level,
484
+ pod: row.pod,
485
+ logger: row.logger,
486
+ thread: row.thread,
487
+ message: row.message,
488
+ tags: row.tags,
489
+ ...Object.keys(attributes).length > 0 ? { attributes } : {}
490
+ });
491
+ }
492
+ function buildProcessedLogAttributes(row) {
493
+ const attributes = {
494
+ ...asRecord(row.raw),
495
+ ...asRecord(row.parsedLine)
496
+ };
497
+ const hiddenKeys = /* @__PURE__ */ new Set([
498
+ "@timestamp",
499
+ "container",
500
+ "event.dataset",
501
+ "labels",
502
+ "level",
503
+ "line",
504
+ "log.level",
505
+ "log.logger",
506
+ "logger",
507
+ "message",
508
+ "msg",
509
+ "pod",
510
+ "process.thread.name",
511
+ "service",
512
+ "service.name",
513
+ "severity",
514
+ "thread",
515
+ "time",
516
+ "timestamp"
517
+ ]);
518
+ return stripEmptyProperties(
519
+ Object.fromEntries(Object.entries(attributes).filter(([key]) => !hiddenKeys.has(key)))
520
+ );
521
+ }
522
+ function formatPropertyLabel(key) {
523
+ return key.replace(/[_-]+/g, " ").replace(/\.+/g, " ").replace(/\b\w/g, (letter) => letter.toUpperCase());
524
+ }
525
+ function stripEmptyProperties(record) {
526
+ return Object.fromEntries(
527
+ Object.entries(record).filter(([, value]) => {
528
+ if (value == null) return false;
529
+ if (typeof value === "string") return value.trim().length > 0;
530
+ if (Array.isArray(value)) return value.length > 0;
531
+ return true;
532
+ })
533
+ );
534
+ }
535
+ function tryParseJson(value) {
536
+ try {
537
+ return JSON.parse(value);
538
+ } catch {
539
+ return JSON_PARSE_FAILED;
540
+ }
541
+ }
542
+ function asRecord(value) {
543
+ return value && typeof value === "object" && !Array.isArray(value) ? value : void 0;
544
+ }
545
+ function pick(record, path) {
546
+ if (!record) return void 0;
547
+ if (Object.prototype.hasOwnProperty.call(record, path)) return record[path];
548
+ return path.split(".").reduce((current, key) => {
549
+ if (current && typeof current === "object") {
550
+ return current[key];
551
+ }
552
+ return void 0;
553
+ }, record);
554
+ }
555
+ function firstString(...values) {
556
+ for (const value of values) {
557
+ const string = stringValue(value);
558
+ if (string) return string;
559
+ }
560
+ return "";
561
+ }
562
+ function stringValue(value) {
563
+ if (value == null) return "";
564
+ if (typeof value === "string") return value.trim();
565
+ if (typeof value === "number" || typeof value === "boolean") return String(value);
566
+ return "";
567
+ }
568
+ function stableString(value) {
569
+ if (typeof value === "string") return value;
570
+ try {
571
+ return JSON.stringify(value);
572
+ } catch {
573
+ return String(value);
574
+ }
575
+ }
576
+ export {
577
+ LogsTable,
578
+ normalizeLogsTableRows
579
+ };
580
+ //# sourceMappingURL=LogsTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LogsTable.js","sources":["../../src/data/LogsTable.tsx"],"sourcesContent":["import { useMemo, useState, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Modal } from \"../overlay/Modal\";\nimport { AnsiHtml } from \"./AnsiHtml\";\nimport { DataTable, type DataTableColumn, type DataTableProps } from \"./DataTable\";\nimport { Icon } from \"./Icon\";\n\nexport type LogsTableInput = string | Record<string, unknown>;\n\nexport type LogsTableRow = {\n id: string;\n timestamp: string;\n level: string;\n pod: string;\n logger: string;\n thread: string;\n message: string;\n tags: string[];\n line: string;\n parsedLine?: unknown;\n raw: unknown;\n};\n\nexport type LogsTableProps = Omit<\n DataTableProps<LogsTableRow>,\n \"data\" | \"columns\" | \"density\" | \"defaultDensity\"\n> & {\n logs: string | LogsTableInput[];\n columns?: DataTableColumn<LogsTableRow>[];\n dark?: boolean;\n showRawDetails?: boolean;\n showFullscreenControl?: boolean;\n fullscreenTitle?: ReactNode;\n};\n\n// Matches CSI / SGR escape sequences (e.g. \"\\x1b[31m\"). Used to skip the\n// AnsiHtml render for plain messages so the cell stays a fast text node.\nconst ANSI_PATTERN = new RegExp(`${String.fromCharCode(27)}\\\\[[0-9;?]*[ -/]*[@-~]`);\n\nconst DEFAULT_LOG_COLUMNS: DataTableColumn<LogsTableRow>[] = [\n {\n key: \"timestamp\",\n label: \"Timestamp\",\n kind: \"timestamp\",\n shrink: true,\n minWidth: 180,\n },\n {\n key: \"level\",\n label: \"Level\",\n kind: \"status\",\n shrink: true,\n minWidth: 96,\n status: { showLabel: true },\n },\n { key: \"pod\", label: \"Pod\", shrink: true, minWidth: 180 },\n { key: \"logger\", label: \"Logger\", shrink: true, minWidth: 220 },\n { key: \"thread\", label: \"Thread\", shrink: true, minWidth: 180 },\n {\n key: \"message\",\n label: \"Message\",\n grow: true,\n minWidth: 360,\n cellClassName: \"font-mono text-xs\",\n render: (value) => {\n const text = typeof value === \"string\" ? value : value == null ? \"\" : String(value);\n if (!ANSI_PATTERN.test(text)) return text;\n return <AnsiHtml as=\"span\" text={text} className=\"whitespace-pre-wrap break-words\" />;\n },\n },\n { key: \"tags\", label: \"Tags\", kind: \"tags\", grow: true, tags: { maxVisible: 4 } },\n];\n\nconst DEFAULT_SORT = {\n key: \"timestamp\",\n dir: \"desc\",\n} satisfies NonNullable<DataTableProps<LogsTableRow>[\"defaultSort\"]>;\nconst JSON_PARSE_FAILED = Symbol(\"json-parse-failed\");\n\nexport function LogsTable({\n logs,\n columns,\n dark = true,\n showRawDetails = true,\n className,\n autoFilter = true,\n defaultSort,\n getRowId,\n renderExpandedRow,\n showDensityControl = false,\n showFullscreenControl = true,\n fullscreenTitle = \"Logs\",\n ...tableProps\n}: LogsTableProps) {\n const [fullscreenOpen, setFullscreenOpen] = useState(false);\n const rows = useMemo(() => normalizeLogsTableRows(logs), [logs]);\n const resolvedRenderExpandedRow =\n renderExpandedRow ?? (showRawDetails ? renderLogDetails : undefined);\n const renderTable = () => (\n <LogsDataTable\n {...tableProps}\n rows={rows}\n columns={columns ?? DEFAULT_LOG_COLUMNS}\n autoFilter={autoFilter}\n defaultSort={defaultSort ?? DEFAULT_SORT}\n showDensityControl={showDensityControl}\n {...(getRowId ? { getRowId } : {})}\n {...(resolvedRenderExpandedRow ? { renderExpandedRow: resolvedRenderExpandedRow } : {})}\n />\n );\n\n return (\n <div\n {...(dark ? { \"data-theme\": \"dark\" } : {})}\n className={cn(\n \"relative flex min-h-0 flex-col\",\n dark && \"rounded-md bg-background p-2 text-foreground\",\n className,\n )}\n >\n {showFullscreenControl && (\n <button\n type=\"button\"\n aria-label=\"Open logs full screen\"\n title=\"Open logs full screen\"\n className=\"absolute right-3 top-3 z-10 inline-flex h-8 w-8 items-center justify-center rounded-md border border-input bg-background text-muted-foreground shadow-sm transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n onClick={() => setFullscreenOpen(true)}\n >\n <Icon name=\"codicon:screen-full\" className=\"text-sm\" />\n </button>\n )}\n {renderTable()}\n <Modal\n open={fullscreenOpen}\n onClose={() => setFullscreenOpen(false)}\n title={fullscreenTitle}\n size=\"full\"\n className=\"h-[95vh]\"\n >\n <div\n {...(dark ? { \"data-theme\": \"dark\" } : {})}\n className={cn(\"flex h-full min-h-0 flex-col\", dark && \"bg-background text-foreground\")}\n >\n {renderTable()}\n </div>\n </Modal>\n </div>\n );\n}\n\nfunction LogsDataTable({\n rows,\n columns,\n autoFilter,\n defaultSort,\n getRowId,\n renderExpandedRow,\n showDensityControl,\n ...tableProps\n}: Omit<\n DataTableProps<LogsTableRow>,\n | \"data\"\n | \"density\"\n | \"defaultDensity\"\n | \"columns\"\n | \"autoFilter\"\n | \"defaultSort\"\n | \"getRowId\"\n | \"renderExpandedRow\"\n | \"showDensityControl\"\n> & {\n rows: LogsTableRow[];\n columns: DataTableColumn<LogsTableRow>[];\n autoFilter: boolean;\n defaultSort: NonNullable<DataTableProps<LogsTableRow>[\"defaultSort\"]>;\n getRowId?: NonNullable<DataTableProps<LogsTableRow>[\"getRowId\"]>;\n renderExpandedRow?: NonNullable<DataTableProps<LogsTableRow>[\"renderExpandedRow\"]>;\n showDensityControl: boolean;\n}) {\n return (\n <DataTable\n {...tableProps}\n data={rows}\n columns={columns}\n density=\"compact\"\n autoFilter={autoFilter}\n getRowId={getRowId ?? ((row) => row.id)}\n showDensityControl={showDensityControl}\n defaultSort={defaultSort}\n {...(renderExpandedRow ? { renderExpandedRow } : {})}\n />\n );\n}\n\nexport function normalizeLogsTableRows(logs: string | LogsTableInput[]): LogsTableRow[] {\n const entries = typeof logs === \"string\" ? splitLogLines(logs) : logs;\n return entries.map((entry, index) => normalizeLogEntry(entry, index));\n}\n\nfunction splitLogLines(logs: string): string[] {\n return logs.split(/\\r?\\n/).filter((line) => line.length > 0);\n}\n\nfunction normalizeLogEntry(entry: LogsTableInput, index: number): LogsTableRow {\n const parsedOuterValue = typeof entry === \"string\" ? tryParseJson(entry) : entry;\n const parsedOuter = parsedOuterValue === JSON_PARSE_FAILED ? entry : parsedOuterValue;\n const outer = asRecord(parsedOuter);\n const outerLine = stringValue(outer?.line);\n const parsedLineValue = outerLine ? tryParseJson(outerLine) : JSON_PARSE_FAILED;\n const parsedLine = parsedLineValue === JSON_PARSE_FAILED ? undefined : parsedLineValue;\n const inner = asRecord(parsedLine) ?? (outerLine ? undefined : outer);\n const labels = asRecord(outer?.labels);\n\n const timestamp = firstString(\n pick(outer, \"timestamp\"),\n pick(inner, \"@timestamp\"),\n pick(outer, \"ts\"),\n pick(inner, \"timestamp\"),\n pick(outer, \"time\"),\n pick(inner, \"time\"),\n );\n const level = firstString(\n pick(inner, \"log.level\"),\n pick(inner, \"level\"),\n pick(outer, \"level\"),\n pick(outer, \"severity\"),\n pick(inner, \"severity\"),\n );\n const pod = firstString(\n pick(outer, \"pod\"),\n pick(labels, \"pod\"),\n pick(inner, \"kubernetes.pod.name\"),\n );\n const namespace = firstString(\n pick(outer, \"namespace\"),\n pick(labels, \"namespace\"),\n pick(inner, \"kubernetes.namespace\"),\n );\n const container = firstString(\n pick(outer, \"container\"),\n pick(labels, \"container\"),\n pick(inner, \"container.name\"),\n );\n const service = firstString(\n pick(inner, \"service.name\"),\n pick(inner, \"service\"),\n pick(outer, \"service\"),\n pick(labels, \"service\"),\n );\n const dataset = firstString(pick(inner, \"event.dataset\"), pick(inner, \"dataset\"));\n const logger = firstString(\n pick(inner, \"log.logger\"),\n pick(inner, \"logger\"),\n pick(outer, \"logger\"),\n );\n const thread = firstString(\n pick(inner, \"process.thread.name\"),\n pick(inner, \"thread\"),\n pick(outer, \"thread\"),\n );\n const message = firstString(\n pick(inner, \"message\"),\n pick(inner, \"msg\"),\n pick(outer, \"message\"),\n outerLine,\n typeof entry === \"string\" ? entry : undefined,\n );\n\n const tags = buildTags({\n namespace,\n container,\n service,\n dataset,\n ecsVersion: firstString(pick(inner, \"ecs.version\")),\n labels,\n });\n\n return {\n id: `${index}:${timestamp || pod || message || stableString(entry)}`,\n timestamp,\n level,\n pod,\n logger,\n thread,\n message,\n tags,\n line: outerLine ?? (typeof entry === \"string\" ? entry : stableString(entry)),\n raw: parsedOuter,\n ...(parsedLine !== undefined ? { parsedLine } : {}),\n };\n}\n\nfunction buildTags({\n namespace,\n container,\n service,\n dataset,\n ecsVersion,\n labels,\n}: {\n namespace: string;\n container: string;\n service: string;\n dataset: string;\n ecsVersion: string;\n labels: Record<string, unknown> | undefined;\n}) {\n const tags: string[] = [];\n const seen = new Set<string>();\n const addTag = (key: string, value: unknown) => {\n const valueString = stringValue(value);\n if (!valueString) return;\n const tag = `${key}=${valueString}`;\n if (seen.has(tag)) return;\n seen.add(tag);\n tags.push(tag);\n };\n\n addTag(\"namespace\", namespace);\n addTag(\"container\", container);\n addTag(\"service\", service);\n addTag(\"dataset\", dataset);\n addTag(\"ecs.version\", ecsVersion);\n\n if (labels) {\n for (const [key, value] of Object.entries(labels)) {\n addTag(key, value);\n }\n }\n\n return tags;\n}\n\nfunction renderLogDetails(row: LogsTableRow): ReactNode {\n return <LogDetails row={row} />;\n}\n\nfunction LogDetails({ row }: { row: LogsTableRow }) {\n const [openPaths, setOpenPaths] = useState<Record<string, boolean>>({});\n const setPathOpen = (path: string, open: boolean) => {\n setOpenPaths((current) => ({ ...current, [path]: open }));\n };\n const details = useMemo(() => buildProcessedLogDetails(row), [row]);\n\n return (\n <div className=\"space-y-density-3 text-xs\">\n <PropertiesDescriptionList\n value={details}\n path=\"details\"\n openPaths={openPaths}\n setPathOpen={setPathOpen}\n />\n </div>\n );\n}\n\nfunction PropertiesDescriptionList({\n value,\n path,\n openPaths,\n setPathOpen,\n depth = 0,\n}: {\n value: unknown;\n path: string;\n openPaths: Record<string, boolean>;\n setPathOpen: (path: string, open: boolean) => void;\n depth?: number;\n}) {\n const entries = getValueEntries(value);\n if (entries.length === 0) {\n return <LogValueSummary value={value} />;\n }\n\n return (\n <dl\n className={cn(\n \"divide-y divide-border rounded-md border border-border bg-muted/20\",\n depth > 0 && \"mt-density-1\",\n )}\n >\n {entries.map(([key, entryValue]) => {\n const keyText = String(key);\n const label = formatPropertyLabel(keyText);\n const entryPath = `${path}.${keyText}`;\n const expandable = isExpandableValue(entryValue);\n const open = openPaths[entryPath] ?? depth < 1;\n\n return (\n <div\n key={entryPath}\n className=\"grid min-w-0 grid-cols-[minmax(8rem,14rem)_minmax(0,1fr)] gap-density-3 px-density-2 py-density-1.5\"\n >\n <dt\n aria-label={label}\n className=\"min-w-0 truncate font-mono text-[11px] text-muted-foreground\"\n >\n {label}\n </dt>\n <dd className=\"min-w-0 space-y-density-1\">\n <LogDetailsValueLine\n label={label}\n path={entryPath}\n value={entryValue}\n expandable={expandable}\n open={open}\n setPathOpen={setPathOpen}\n />\n {expandable && open && (\n <PropertiesDescriptionList\n value={entryValue}\n path={entryPath}\n openPaths={openPaths}\n setPathOpen={setPathOpen}\n depth={depth + 1}\n />\n )}\n </dd>\n </div>\n );\n })}\n </dl>\n );\n}\n\nfunction LogDetailsValueLine({\n label,\n path,\n value,\n expandable,\n open,\n setPathOpen,\n}: {\n label: string;\n path: string;\n value: unknown;\n expandable: boolean;\n open: boolean;\n setPathOpen: (path: string, open: boolean) => void;\n}) {\n return (\n <div className=\"flex min-w-0 items-start gap-density-1\">\n <span className=\"inline-flex shrink-0 items-center gap-0.5 pt-0.5\">\n <LogDetailsActionButton\n label={`Expand ${label}`}\n icon=\"lucide:zoom-in\"\n disabled={!expandable || open}\n onClick={() => setPathOpen(path, true)}\n />\n <LogDetailsActionButton\n label={`Collapse ${label}`}\n icon=\"lucide:zoom-out\"\n disabled={!expandable || !open}\n onClick={() => setPathOpen(path, false)}\n />\n </span>\n <div className=\"min-w-0 max-w-full\">\n {expandable ? <LogValueSummary value={value} /> : <LogScalarValue value={value} />}\n </div>\n <LogDetailsActionButton\n label={`Copy ${label}`}\n icon=\"lucide:copy\"\n onClick={() => copyLogDetailsValue(value)}\n />\n </div>\n );\n}\n\nfunction LogDetailsActionButton({\n label,\n icon,\n disabled,\n onClick,\n}: {\n label: string;\n icon: string;\n disabled?: boolean;\n onClick: () => void;\n}) {\n return (\n <button\n type=\"button\"\n aria-label={label}\n title={label}\n disabled={disabled}\n className={cn(\n \"inline-flex h-5 w-5 items-center justify-center rounded text-muted-foreground\",\n \"hover:bg-accent hover:text-foreground\",\n \"disabled:opacity-35 disabled:hover:bg-transparent disabled:hover:text-muted-foreground\",\n )}\n onClick={(event) => {\n event.stopPropagation();\n onClick();\n }}\n >\n <Icon name={icon} className=\"text-xs\" />\n </button>\n );\n}\n\nfunction LogValueSummary({ value }: { value: unknown }) {\n if (Array.isArray(value)) {\n return <span className=\"font-mono text-muted-foreground\">[{value.length} items]</span>;\n }\n const record = asRecord(value);\n if (record) {\n const count = Object.keys(record).length;\n return (\n <span className=\"font-mono text-muted-foreground\">\n {\"{ \"}\n {count} properties{\" }\"}\n </span>\n );\n }\n return <LogScalarValue value={value} />;\n}\n\nfunction LogScalarValue({ value }: { value: unknown }) {\n if (value === null || value === undefined) {\n return <span className=\"font-mono italic text-muted-foreground\">null</span>;\n }\n\n if (typeof value === \"string\") {\n return (\n <pre className=\"max-h-48 overflow-auto whitespace-pre-wrap break-words font-mono text-[11px] leading-relaxed text-foreground\">\n {value}\n </pre>\n );\n }\n\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return <span className=\"font-mono text-blue-700 dark:text-blue-400\">{String(value)}</span>;\n }\n\n return (\n <pre className=\"max-h-48 overflow-auto whitespace-pre-wrap break-words font-mono text-[11px] leading-relaxed text-foreground\">\n {stablePrettyString(value)}\n </pre>\n );\n}\n\nfunction getValueEntries(value: unknown): Array<[string | number, unknown]> {\n if (Array.isArray(value)) {\n return value.map((entry, index) => [index, entry]);\n }\n return Object.entries(asRecord(value) ?? {});\n}\n\nfunction isExpandableValue(value: unknown) {\n return getValueEntries(value).length > 0;\n}\n\nfunction stablePrettyString(value: unknown): string {\n if (typeof value === \"string\") return value;\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n\nfunction copyLogDetailsValue(value: unknown) {\n if (typeof navigator !== \"undefined\" && navigator.clipboard?.writeText) {\n Promise.resolve(navigator.clipboard.writeText(stablePrettyString(value))).catch(\n () => undefined,\n );\n }\n}\n\nfunction buildProcessedLogDetails(row: LogsTableRow): Record<string, unknown> {\n const attributes = buildProcessedLogAttributes(row);\n return stripEmptyProperties({\n timestamp: row.timestamp,\n level: row.level,\n pod: row.pod,\n logger: row.logger,\n thread: row.thread,\n message: row.message,\n tags: row.tags,\n ...(Object.keys(attributes).length > 0 ? { attributes } : {}),\n });\n}\n\nfunction buildProcessedLogAttributes(row: LogsTableRow): Record<string, unknown> {\n const attributes = {\n ...asRecord(row.raw),\n ...asRecord(row.parsedLine),\n };\n const hiddenKeys = new Set([\n \"@timestamp\",\n \"container\",\n \"event.dataset\",\n \"labels\",\n \"level\",\n \"line\",\n \"log.level\",\n \"log.logger\",\n \"logger\",\n \"message\",\n \"msg\",\n \"pod\",\n \"process.thread.name\",\n \"service\",\n \"service.name\",\n \"severity\",\n \"thread\",\n \"time\",\n \"timestamp\",\n ]);\n\n return stripEmptyProperties(\n Object.fromEntries(Object.entries(attributes).filter(([key]) => !hiddenKeys.has(key))),\n );\n}\n\nfunction formatPropertyLabel(key: string): string {\n return key\n .replace(/[_-]+/g, \" \")\n .replace(/\\.+/g, \" \")\n .replace(/\\b\\w/g, (letter) => letter.toUpperCase());\n}\n\nfunction stripEmptyProperties(record: Record<string, unknown>): Record<string, unknown> {\n return Object.fromEntries(\n Object.entries(record).filter(([, value]) => {\n if (value == null) return false;\n if (typeof value === \"string\") return value.trim().length > 0;\n if (Array.isArray(value)) return value.length > 0;\n return true;\n }),\n );\n}\n\nfunction tryParseJson(value: string): unknown | typeof JSON_PARSE_FAILED {\n try {\n return JSON.parse(value) as unknown;\n } catch {\n return JSON_PARSE_FAILED;\n }\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined;\n}\n\nfunction pick(record: Record<string, unknown> | undefined, path: string): unknown {\n if (!record) return undefined;\n if (Object.prototype.hasOwnProperty.call(record, path)) return record[path];\n return path.split(\".\").reduce<unknown>((current, key) => {\n if (current && typeof current === \"object\") {\n return (current as Record<string, unknown>)[key];\n }\n return undefined;\n }, record);\n}\n\nfunction firstString(...values: unknown[]): string {\n for (const value of values) {\n const string = stringValue(value);\n if (string) return string;\n }\n return \"\";\n}\n\nfunction stringValue(value: unknown): string {\n if (value == null) return \"\";\n if (typeof value === \"string\") return value.trim();\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n return \"\";\n}\n\nfunction stableString(value: unknown): string {\n if (typeof value === \"string\") return value;\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type MarkdownProps = {
2
+ text: string;
3
+ className?: string;
4
+ };
5
+ export declare function Markdown({ text, className }: MarkdownProps): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=Markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Markdown.d.ts","sourceRoot":"","sources":["../../src/data/Markdown.tsx"],"names":[],"mappings":"AAGA,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAyDF,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,aAAa,2CA4B1D"}