@flanksource/clicky-ui 0.2.14 → 0.2.15

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 (461) hide show
  1. package/dist/chat.cjs +20 -0
  2. package/dist/chat.cjs.map +1 -0
  3. package/dist/chat.d.ts +2 -0
  4. package/dist/chat.d.ts.map +1 -0
  5. package/dist/chat.js +20 -0
  6. package/dist/chat.js.map +1 -0
  7. package/dist/components/Combobox.cjs +5 -3
  8. package/dist/components/Combobox.cjs.map +1 -1
  9. package/dist/components/Combobox.d.ts +2 -0
  10. package/dist/components/Combobox.d.ts.map +1 -1
  11. package/dist/components/Combobox.js +5 -3
  12. package/dist/components/Combobox.js.map +1 -1
  13. package/dist/components/DateTimePicker.cjs +3 -1
  14. package/dist/components/DateTimePicker.cjs.map +1 -1
  15. package/dist/components/DateTimePicker.d.ts +5 -1
  16. package/dist/components/DateTimePicker.d.ts.map +1 -1
  17. package/dist/components/DateTimePicker.js +3 -1
  18. package/dist/components/DateTimePicker.js.map +1 -1
  19. package/dist/components/FilterBar.cjs +8 -41
  20. package/dist/components/FilterBar.cjs.map +1 -1
  21. package/dist/components/FilterBar.d.ts +0 -2
  22. package/dist/components/FilterBar.d.ts.map +1 -1
  23. package/dist/components/FilterBar.js +3 -36
  24. package/dist/components/FilterBar.js.map +1 -1
  25. package/dist/components/FormatOptionsDropdown.cjs +2 -18
  26. package/dist/components/FormatOptionsDropdown.cjs.map +1 -1
  27. package/dist/components/FormatOptionsDropdown.d.ts +1 -17
  28. package/dist/components/FormatOptionsDropdown.d.ts.map +1 -1
  29. package/dist/components/FormatOptionsDropdown.js +1 -17
  30. package/dist/components/FormatOptionsDropdown.js.map +1 -1
  31. package/dist/components/JsonSchemaForm.cjs +128 -12
  32. package/dist/components/JsonSchemaForm.cjs.map +1 -1
  33. package/dist/components/JsonSchemaForm.d.ts +1 -1
  34. package/dist/components/JsonSchemaForm.d.ts.map +1 -1
  35. package/dist/components/JsonSchemaForm.js +131 -15
  36. package/dist/components/JsonSchemaForm.js.map +1 -1
  37. package/dist/components/SecretKeySelector.cjs +0 -1
  38. package/dist/components/SecretKeySelector.cjs.map +1 -1
  39. package/dist/components/SecretKeySelector.d.ts +0 -2
  40. package/dist/components/SecretKeySelector.d.ts.map +1 -1
  41. package/dist/components/SecretKeySelector.js +1 -2
  42. package/dist/components/SecretKeySelector.js.map +1 -1
  43. package/dist/components/TreePickerField.cjs +137 -0
  44. package/dist/components/TreePickerField.cjs.map +1 -0
  45. package/dist/components/TreePickerField.d.ts +30 -0
  46. package/dist/components/TreePickerField.d.ts.map +1 -0
  47. package/dist/components/TreePickerField.js +137 -0
  48. package/dist/components/TreePickerField.js.map +1 -0
  49. package/dist/components/WorkloadPicker.cjs +6 -81
  50. package/dist/components/WorkloadPicker.cjs.map +1 -1
  51. package/dist/components/WorkloadPicker.d.ts +1 -20
  52. package/dist/components/WorkloadPicker.d.ts.map +1 -1
  53. package/dist/components/WorkloadPicker.js +3 -78
  54. package/dist/components/WorkloadPicker.js.map +1 -1
  55. package/dist/components/button-variants.cjs +30 -0
  56. package/dist/components/button-variants.cjs.map +1 -0
  57. package/dist/components/button-variants.d.ts +5 -0
  58. package/dist/components/button-variants.d.ts.map +1 -0
  59. package/dist/components/button-variants.js +30 -0
  60. package/dist/components/button-variants.js.map +1 -0
  61. package/dist/components/button.cjs +11 -82
  62. package/dist/components/button.cjs.map +1 -1
  63. package/dist/components/button.d.ts +1 -5
  64. package/dist/components/button.d.ts.map +1 -1
  65. package/dist/components/button.js +5 -76
  66. package/dist/components/button.js.map +1 -1
  67. package/dist/components/filter-bar-utils.cjs +37 -0
  68. package/dist/components/filter-bar-utils.cjs.map +1 -0
  69. package/dist/components/filter-bar-utils.d.ts +4 -0
  70. package/dist/components/filter-bar-utils.d.ts.map +1 -0
  71. package/dist/components/filter-bar-utils.js +37 -0
  72. package/dist/components/filter-bar-utils.js.map +1 -0
  73. package/dist/components/format-options.cjs +20 -0
  74. package/dist/components/format-options.cjs.map +1 -0
  75. package/dist/components/format-options.d.ts +18 -0
  76. package/dist/components/format-options.d.ts.map +1 -0
  77. package/dist/components/format-options.js +20 -0
  78. package/dist/components/format-options.js.map +1 -0
  79. package/dist/components/json-schema-form-array.cjs +13 -17
  80. package/dist/components/json-schema-form-array.cjs.map +1 -1
  81. package/dist/components/json-schema-form-array.d.ts +1 -2
  82. package/dist/components/json-schema-form-array.d.ts.map +1 -1
  83. package/dist/components/json-schema-form-array.js +3 -7
  84. package/dist/components/json-schema-form-array.js.map +1 -1
  85. package/dist/components/json-schema-form-fields.cjs +90 -232
  86. package/dist/components/json-schema-form-fields.cjs.map +1 -1
  87. package/dist/components/json-schema-form-fields.d.ts +51 -6
  88. package/dist/components/json-schema-form-fields.d.ts.map +1 -1
  89. package/dist/components/json-schema-form-fields.js +82 -224
  90. package/dist/components/json-schema-form-fields.js.map +1 -1
  91. package/dist/components/json-schema-form-object.cjs +149 -0
  92. package/dist/components/json-schema-form-object.cjs.map +1 -0
  93. package/dist/components/json-schema-form-object.d.ts +10 -0
  94. package/dist/components/json-schema-form-object.d.ts.map +1 -0
  95. package/dist/components/json-schema-form-object.js +149 -0
  96. package/dist/components/json-schema-form-object.js.map +1 -0
  97. package/dist/components/json-schema-form-preferences.cjs +41 -0
  98. package/dist/components/json-schema-form-preferences.cjs.map +1 -0
  99. package/dist/components/json-schema-form-preferences.d.ts +10 -0
  100. package/dist/components/json-schema-form-preferences.d.ts.map +1 -0
  101. package/dist/components/json-schema-form-preferences.js +41 -0
  102. package/dist/components/json-schema-form-preferences.js.map +1 -0
  103. package/dist/components/json-schema-form-render.cjs +43 -72
  104. package/dist/components/json-schema-form-render.cjs.map +1 -1
  105. package/dist/components/json-schema-form-render.d.ts +5 -33
  106. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  107. package/dist/components/json-schema-form-render.js +41 -70
  108. package/dist/components/json-schema-form-render.js.map +1 -1
  109. package/dist/components/json-schema-form-resolve.cjs +9 -1
  110. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  111. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  112. package/dist/components/json-schema-form-resolve.js +9 -1
  113. package/dist/components/json-schema-form-resolve.js.map +1 -1
  114. package/dist/components/json-schema-form-types.d.ts +58 -1
  115. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  116. package/dist/components/json-schema-form-utils.cjs +96 -0
  117. package/dist/components/json-schema-form-utils.cjs.map +1 -0
  118. package/dist/components/json-schema-form-utils.d.ts +17 -0
  119. package/dist/components/json-schema-form-utils.d.ts.map +1 -0
  120. package/dist/components/json-schema-form-utils.js +96 -0
  121. package/dist/components/json-schema-form-utils.js.map +1 -0
  122. package/dist/components/loading.cjs +109 -0
  123. package/dist/components/loading.cjs.map +1 -0
  124. package/dist/components/loading.d.ts +27 -0
  125. package/dist/components/loading.d.ts.map +1 -0
  126. package/dist/components/loading.js +109 -0
  127. package/dist/components/loading.js.map +1 -0
  128. package/dist/components/workload-picker-utils.cjs +88 -0
  129. package/dist/components/workload-picker-utils.cjs.map +1 -0
  130. package/dist/components/workload-picker-utils.d.ts +34 -0
  131. package/dist/components/workload-picker-utils.d.ts.map +1 -0
  132. package/dist/components/workload-picker-utils.js +88 -0
  133. package/dist/components/workload-picker-utils.js.map +1 -0
  134. package/dist/components.cjs +18 -6
  135. package/dist/components.cjs.map +1 -1
  136. package/dist/components.d.ts +10 -3
  137. package/dist/components.d.ts.map +1 -1
  138. package/dist/components.js +16 -4
  139. package/dist/components.js.map +1 -1
  140. package/dist/data/Badge.cjs +11 -91
  141. package/dist/data/Badge.cjs.map +1 -1
  142. package/dist/data/Badge.d.ts +1 -5
  143. package/dist/data/Badge.d.ts.map +1 -1
  144. package/dist/data/Badge.js +11 -91
  145. package/dist/data/Badge.js.map +1 -1
  146. package/dist/data/Clicky.cjs +4 -3
  147. package/dist/data/Clicky.cjs.map +1 -1
  148. package/dist/data/Clicky.d.ts.map +1 -1
  149. package/dist/data/Clicky.js +4 -3
  150. package/dist/data/Clicky.js.map +1 -1
  151. package/dist/data/DataTable.cjs +161 -156
  152. package/dist/data/DataTable.cjs.map +1 -1
  153. package/dist/data/DataTable.d.ts +25 -4
  154. package/dist/data/DataTable.d.ts.map +1 -1
  155. package/dist/data/DataTable.js +140 -135
  156. package/dist/data/DataTable.js.map +1 -1
  157. package/dist/data/FilterPill.cjs +3 -0
  158. package/dist/data/FilterPill.cjs.map +1 -1
  159. package/dist/data/FilterPill.d.ts.map +1 -1
  160. package/dist/data/FilterPill.js +3 -0
  161. package/dist/data/FilterPill.js.map +1 -1
  162. package/dist/data/Icon.cjs +7 -7
  163. package/dist/data/Icon.cjs.map +1 -1
  164. package/dist/data/Icon.js +7 -7
  165. package/dist/data/Icon.js.map +1 -1
  166. package/dist/data/LogDetails.cjs +5 -14
  167. package/dist/data/LogDetails.cjs.map +1 -1
  168. package/dist/data/LogDetails.d.ts +8 -4
  169. package/dist/data/LogDetails.d.ts.map +1 -1
  170. package/dist/data/LogDetails.js +4 -13
  171. package/dist/data/LogDetails.js.map +1 -1
  172. package/dist/data/LogsTable.cjs +6 -165
  173. package/dist/data/LogsTable.cjs.map +1 -1
  174. package/dist/data/LogsTable.d.ts +2 -15
  175. package/dist/data/LogsTable.d.ts.map +1 -1
  176. package/dist/data/LogsTable.js +6 -165
  177. package/dist/data/LogsTable.js.map +1 -1
  178. package/dist/data/TimeseriesPanel.axes.cjs.map +1 -1
  179. package/dist/data/TimeseriesPanel.axes.js.map +1 -1
  180. package/dist/data/TreeNode.cjs +13 -7
  181. package/dist/data/TreeNode.cjs.map +1 -1
  182. package/dist/data/TreeNode.d.ts.map +1 -1
  183. package/dist/data/TreeNode.js +13 -7
  184. package/dist/data/TreeNode.js.map +1 -1
  185. package/dist/data/badge-variants.cjs +85 -0
  186. package/dist/data/badge-variants.cjs.map +1 -0
  187. package/dist/data/badge-variants.d.ts +6 -0
  188. package/dist/data/badge-variants.d.ts.map +1 -0
  189. package/dist/data/badge-variants.js +85 -0
  190. package/dist/data/badge-variants.js.map +1 -0
  191. package/dist/data/cache-browser/CacheBrowser.cjs +59 -0
  192. package/dist/data/cache-browser/CacheBrowser.cjs.map +1 -0
  193. package/dist/data/cache-browser/CacheBrowser.d.ts +26 -0
  194. package/dist/data/cache-browser/CacheBrowser.d.ts.map +1 -0
  195. package/dist/data/cache-browser/CacheBrowser.js +59 -0
  196. package/dist/data/cache-browser/CacheBrowser.js.map +1 -0
  197. package/dist/data/cache-browser/CacheDetailPanel.cjs +193 -0
  198. package/dist/data/cache-browser/CacheDetailPanel.cjs.map +1 -0
  199. package/dist/data/cache-browser/CacheDetailPanel.d.ts +20 -0
  200. package/dist/data/cache-browser/CacheDetailPanel.d.ts.map +1 -0
  201. package/dist/data/cache-browser/CacheDetailPanel.js +193 -0
  202. package/dist/data/cache-browser/CacheDetailPanel.js.map +1 -0
  203. package/dist/data/cache-browser/CacheStatsOverview.cjs +126 -0
  204. package/dist/data/cache-browser/CacheStatsOverview.cjs.map +1 -0
  205. package/dist/data/cache-browser/CacheStatsOverview.d.ts +17 -0
  206. package/dist/data/cache-browser/CacheStatsOverview.d.ts.map +1 -0
  207. package/dist/data/cache-browser/CacheStatsOverview.js +126 -0
  208. package/dist/data/cache-browser/CacheStatsOverview.js.map +1 -0
  209. package/dist/data/cache-browser/CacheTree.cjs +189 -0
  210. package/dist/data/cache-browser/CacheTree.cjs.map +1 -0
  211. package/dist/data/cache-browser/CacheTree.d.ts +27 -0
  212. package/dist/data/cache-browser/CacheTree.d.ts.map +1 -0
  213. package/dist/data/cache-browser/CacheTree.js +189 -0
  214. package/dist/data/cache-browser/CacheTree.js.map +1 -0
  215. package/dist/data/cache-browser/CacheValue.cjs +86 -0
  216. package/dist/data/cache-browser/CacheValue.cjs.map +1 -0
  217. package/dist/data/cache-browser/CacheValue.d.ts +11 -0
  218. package/dist/data/cache-browser/CacheValue.d.ts.map +1 -0
  219. package/dist/data/cache-browser/CacheValue.js +86 -0
  220. package/dist/data/cache-browser/CacheValue.js.map +1 -0
  221. package/dist/data/cache-browser/adapter.cjs +52 -0
  222. package/dist/data/cache-browser/adapter.cjs.map +1 -0
  223. package/dist/data/cache-browser/adapter.d.ts +48 -0
  224. package/dist/data/cache-browser/adapter.d.ts.map +1 -0
  225. package/dist/data/cache-browser/adapter.js +52 -0
  226. package/dist/data/cache-browser/adapter.js.map +1 -0
  227. package/dist/data/cache-browser/api.cjs +42 -0
  228. package/dist/data/cache-browser/api.cjs.map +1 -0
  229. package/dist/data/cache-browser/api.d.ts +33 -0
  230. package/dist/data/cache-browser/api.d.ts.map +1 -0
  231. package/dist/data/cache-browser/api.js +42 -0
  232. package/dist/data/cache-browser/api.js.map +1 -0
  233. package/dist/data/cache-browser/index.d.ts +9 -0
  234. package/dist/data/cache-browser/index.d.ts.map +1 -0
  235. package/dist/data/cache-browser/types.cjs +7 -0
  236. package/dist/data/cache-browser/types.cjs.map +1 -0
  237. package/dist/data/cache-browser/types.d.ts +78 -0
  238. package/dist/data/cache-browser/types.d.ts.map +1 -0
  239. package/dist/data/cache-browser/types.js +7 -0
  240. package/dist/data/cache-browser/types.js.map +1 -0
  241. package/dist/data/cells/TagList.cjs +4 -101
  242. package/dist/data/cells/TagList.cjs.map +1 -1
  243. package/dist/data/cells/TagList.d.ts +1 -49
  244. package/dist/data/cells/TagList.d.ts.map +1 -1
  245. package/dist/data/cells/TagList.js +3 -100
  246. package/dist/data/cells/TagList.js.map +1 -1
  247. package/dist/data/cells/Timestamp.cjs +3 -192
  248. package/dist/data/cells/Timestamp.cjs.map +1 -1
  249. package/dist/data/cells/Timestamp.d.ts +1 -50
  250. package/dist/data/cells/Timestamp.d.ts.map +1 -1
  251. package/dist/data/cells/Timestamp.js +2 -191
  252. package/dist/data/cells/Timestamp.js.map +1 -1
  253. package/dist/data/cells/tag-utils.cjs +103 -0
  254. package/dist/data/cells/tag-utils.cjs.map +1 -0
  255. package/dist/data/cells/tag-utils.d.ts +51 -0
  256. package/dist/data/cells/tag-utils.d.ts.map +1 -0
  257. package/dist/data/cells/tag-utils.js +103 -0
  258. package/dist/data/cells/tag-utils.js.map +1 -0
  259. package/dist/data/cells/timestamp-format.cjs +193 -0
  260. package/dist/data/cells/timestamp-format.cjs.map +1 -0
  261. package/dist/data/cells/timestamp-format.d.ts +51 -0
  262. package/dist/data/cells/timestamp-format.d.ts.map +1 -0
  263. package/dist/data/cells/timestamp-format.js +193 -0
  264. package/dist/data/cells/timestamp-format.js.map +1 -0
  265. package/dist/data/chat/Chat.cjs +48 -0
  266. package/dist/data/chat/Chat.cjs.map +1 -0
  267. package/dist/data/chat/Chat.d.ts +26 -0
  268. package/dist/data/chat/Chat.d.ts.map +1 -0
  269. package/dist/data/chat/Chat.fixtures.d.ts +6 -0
  270. package/dist/data/chat/Chat.fixtures.d.ts.map +1 -0
  271. package/dist/data/chat/Chat.js +48 -0
  272. package/dist/data/chat/Chat.js.map +1 -0
  273. package/dist/data/chat/Conversation.cjs +34 -0
  274. package/dist/data/chat/Conversation.cjs.map +1 -0
  275. package/dist/data/chat/Conversation.d.ts +11 -0
  276. package/dist/data/chat/Conversation.d.ts.map +1 -0
  277. package/dist/data/chat/Conversation.js +34 -0
  278. package/dist/data/chat/Conversation.js.map +1 -0
  279. package/dist/data/chat/Message.cjs +44 -0
  280. package/dist/data/chat/Message.cjs.map +1 -0
  281. package/dist/data/chat/Message.d.ts +10 -0
  282. package/dist/data/chat/Message.d.ts.map +1 -0
  283. package/dist/data/chat/Message.js +44 -0
  284. package/dist/data/chat/Message.js.map +1 -0
  285. package/dist/data/chat/PromptInput.cjs +61 -0
  286. package/dist/data/chat/PromptInput.cjs.map +1 -0
  287. package/dist/data/chat/PromptInput.d.ts +16 -0
  288. package/dist/data/chat/PromptInput.d.ts.map +1 -0
  289. package/dist/data/chat/PromptInput.js +61 -0
  290. package/dist/data/chat/PromptInput.js.map +1 -0
  291. package/dist/data/chat/ToolCall.cjs +92 -0
  292. package/dist/data/chat/ToolCall.cjs.map +1 -0
  293. package/dist/data/chat/ToolCall.d.ts +14 -0
  294. package/dist/data/chat/ToolCall.d.ts.map +1 -0
  295. package/dist/data/chat/ToolCall.js +92 -0
  296. package/dist/data/chat/ToolCall.js.map +1 -0
  297. package/dist/data/chat/clickyOperationsToTools.cjs +73 -0
  298. package/dist/data/chat/clickyOperationsToTools.cjs.map +1 -0
  299. package/dist/data/chat/clickyOperationsToTools.d.ts +10 -0
  300. package/dist/data/chat/clickyOperationsToTools.d.ts.map +1 -0
  301. package/dist/data/chat/clickyOperationsToTools.js +73 -0
  302. package/dist/data/chat/clickyOperationsToTools.js.map +1 -0
  303. package/dist/data/chat/index.d.ts +8 -0
  304. package/dist/data/chat/index.d.ts.map +1 -0
  305. package/dist/data/chat/types.cjs +18 -0
  306. package/dist/data/chat/types.cjs.map +1 -0
  307. package/dist/data/chat/types.d.ts +41 -0
  308. package/dist/data/chat/types.d.ts.map +1 -0
  309. package/dist/data/chat/types.js +18 -0
  310. package/dist/data/chat/types.js.map +1 -0
  311. package/dist/data/data-table-utils.cjs +55 -0
  312. package/dist/data/data-table-utils.cjs.map +1 -0
  313. package/dist/data/data-table-utils.d.ts +24 -0
  314. package/dist/data/data-table-utils.d.ts.map +1 -0
  315. package/dist/data/data-table-utils.js +55 -0
  316. package/dist/data/data-table-utils.js.map +1 -0
  317. package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs +2 -1
  318. package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs.map +1 -1
  319. package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts.map +1 -1
  320. package/dist/data/diagnostics/DiagnosticsDetailPanel.js +3 -2
  321. package/dist/data/diagnostics/DiagnosticsDetailPanel.js.map +1 -1
  322. package/dist/data/diagnostics/GoroutineCard.cjs +3 -22
  323. package/dist/data/diagnostics/GoroutineCard.cjs.map +1 -1
  324. package/dist/data/diagnostics/GoroutineCard.d.ts +0 -2
  325. package/dist/data/diagnostics/GoroutineCard.d.ts.map +1 -1
  326. package/dist/data/diagnostics/GoroutineCard.js +2 -21
  327. package/dist/data/diagnostics/GoroutineCard.js.map +1 -1
  328. package/dist/data/diagnostics/ThreadCard.cjs +3 -38
  329. package/dist/data/diagnostics/ThreadCard.cjs.map +1 -1
  330. package/dist/data/diagnostics/ThreadCard.d.ts +0 -2
  331. package/dist/data/diagnostics/ThreadCard.d.ts.map +1 -1
  332. package/dist/data/diagnostics/ThreadCard.js +2 -37
  333. package/dist/data/diagnostics/ThreadCard.js.map +1 -1
  334. package/dist/data/diagnostics/state-styles.cjs +59 -0
  335. package/dist/data/diagnostics/state-styles.cjs.map +1 -0
  336. package/dist/data/diagnostics/state-styles.d.ts +5 -0
  337. package/dist/data/diagnostics/state-styles.d.ts.map +1 -0
  338. package/dist/data/diagnostics/state-styles.js +59 -0
  339. package/dist/data/diagnostics/state-styles.js.map +1 -0
  340. package/dist/data/logs-normalize.cjs +166 -0
  341. package/dist/data/logs-normalize.cjs.map +1 -0
  342. package/dist/data/logs-normalize.d.ts +16 -0
  343. package/dist/data/logs-normalize.d.ts.map +1 -0
  344. package/dist/data/logs-normalize.js +166 -0
  345. package/dist/data/logs-normalize.js.map +1 -0
  346. package/dist/data/task-status.cjs +19 -19
  347. package/dist/data/task-status.cjs.map +1 -1
  348. package/dist/data/task-status.js +19 -19
  349. package/dist/data/task-status.js.map +1 -1
  350. package/dist/data/version-info.cjs +3 -3
  351. package/dist/data/version-info.js +3 -3
  352. package/dist/data.cjs +43 -18
  353. package/dist/data.cjs.map +1 -1
  354. package/dist/data.d.ts +11 -5
  355. package/dist/data.d.ts.map +1 -1
  356. package/dist/data.js +30 -5
  357. package/dist/data.js.map +1 -1
  358. package/dist/hooks/density-provider.cjs +38 -0
  359. package/dist/hooks/density-provider.cjs.map +1 -0
  360. package/dist/hooks/density-provider.d.ts +20 -0
  361. package/dist/hooks/density-provider.d.ts.map +1 -0
  362. package/dist/hooks/density-provider.js +38 -0
  363. package/dist/hooks/density-provider.js.map +1 -0
  364. package/dist/hooks/theme-provider.cjs +43 -0
  365. package/dist/hooks/theme-provider.cjs.map +1 -0
  366. package/dist/hooks/theme-provider.d.ts +9 -0
  367. package/dist/hooks/theme-provider.d.ts.map +1 -0
  368. package/dist/hooks/theme-provider.js +43 -0
  369. package/dist/hooks/theme-provider.js.map +1 -0
  370. package/dist/hooks/use-density.cjs +8 -37
  371. package/dist/hooks/use-density.cjs.map +1 -1
  372. package/dist/hooks/use-density.d.ts +5 -20
  373. package/dist/hooks/use-density.d.ts.map +1 -1
  374. package/dist/hooks/use-density.js +9 -38
  375. package/dist/hooks/use-density.js.map +1 -1
  376. package/dist/hooks/use-theme.cjs +10 -43
  377. package/dist/hooks/use-theme.cjs.map +1 -1
  378. package/dist/hooks/use-theme.d.ts +6 -9
  379. package/dist/hooks/use-theme.d.ts.map +1 -1
  380. package/dist/hooks/use-theme.js +11 -44
  381. package/dist/hooks/use-theme.js.map +1 -1
  382. package/dist/hooks.cjs +5 -2
  383. package/dist/hooks.cjs.map +1 -1
  384. package/dist/hooks.d.ts +4 -2
  385. package/dist/hooks.d.ts.map +1 -1
  386. package/dist/hooks.js +5 -2
  387. package/dist/hooks.js.map +1 -1
  388. package/dist/icons/changeIconAliases.cjs +13 -13
  389. package/dist/icons/changeIconAliases.cjs.map +1 -1
  390. package/dist/icons/changeIconAliases.d.ts.map +1 -1
  391. package/dist/icons/changeIconAliases.js +13 -13
  392. package/dist/icons/changeIconAliases.js.map +1 -1
  393. package/dist/index.cjs +71 -30
  394. package/dist/index.cjs.map +1 -1
  395. package/dist/index.js +53 -12
  396. package/dist/index.js.map +1 -1
  397. package/dist/overlay/DropdownMenu.cjs +2 -0
  398. package/dist/overlay/DropdownMenu.cjs.map +1 -1
  399. package/dist/overlay/DropdownMenu.d.ts +3 -1
  400. package/dist/overlay/DropdownMenu.d.ts.map +1 -1
  401. package/dist/overlay/DropdownMenu.js +2 -0
  402. package/dist/overlay/DropdownMenu.js.map +1 -1
  403. package/dist/overlay/Modal.cjs +11 -4
  404. package/dist/overlay/Modal.cjs.map +1 -1
  405. package/dist/overlay/Modal.d.ts +1 -1
  406. package/dist/overlay/Modal.d.ts.map +1 -1
  407. package/dist/overlay/Modal.js +11 -4
  408. package/dist/overlay/Modal.js.map +1 -1
  409. package/dist/overlay/modalStack.cjs +35 -0
  410. package/dist/overlay/modalStack.cjs.map +1 -0
  411. package/dist/overlay/modalStack.d.ts +13 -0
  412. package/dist/overlay/modalStack.d.ts.map +1 -0
  413. package/dist/overlay/modalStack.js +35 -0
  414. package/dist/overlay/modalStack.js.map +1 -0
  415. package/dist/rpc/AcceptPicker.cjs +2 -18
  416. package/dist/rpc/AcceptPicker.cjs.map +1 -1
  417. package/dist/rpc/AcceptPicker.d.ts +1 -41
  418. package/dist/rpc/AcceptPicker.d.ts.map +1 -1
  419. package/dist/rpc/AcceptPicker.js +2 -18
  420. package/dist/rpc/AcceptPicker.js.map +1 -1
  421. package/dist/rpc/CommandOutput.cjs +1 -1
  422. package/dist/rpc/CommandOutput.cjs.map +1 -1
  423. package/dist/rpc/CommandOutput.js +1 -1
  424. package/dist/rpc/CommandOutput.js.map +1 -1
  425. package/dist/rpc/EndpointList.cjs +1 -1
  426. package/dist/rpc/EndpointList.cjs.map +1 -1
  427. package/dist/rpc/EndpointList.js +1 -1
  428. package/dist/rpc/EndpointList.js.map +1 -1
  429. package/dist/rpc/OperationCatalog.cjs +23 -41
  430. package/dist/rpc/OperationCatalog.cjs.map +1 -1
  431. package/dist/rpc/OperationCatalog.d.ts.map +1 -1
  432. package/dist/rpc/OperationCatalog.js +24 -42
  433. package/dist/rpc/OperationCatalog.js.map +1 -1
  434. package/dist/rpc/OperationCommandPage.cjs.map +1 -1
  435. package/dist/rpc/OperationCommandPage.d.ts.map +1 -1
  436. package/dist/rpc/OperationCommandPage.js.map +1 -1
  437. package/dist/rpc/accept-options.cjs +20 -0
  438. package/dist/rpc/accept-options.cjs.map +1 -0
  439. package/dist/rpc/accept-options.d.ts +42 -0
  440. package/dist/rpc/accept-options.d.ts.map +1 -0
  441. package/dist/rpc/accept-options.js +20 -0
  442. package/dist/rpc/accept-options.js.map +1 -0
  443. package/dist/rpc/classify.cjs +15 -4
  444. package/dist/rpc/classify.cjs.map +1 -1
  445. package/dist/rpc/classify.d.ts.map +1 -1
  446. package/dist/rpc/classify.js +15 -4
  447. package/dist/rpc/classify.js.map +1 -1
  448. package/dist/rpc/clickyMetadata.cjs +13 -3
  449. package/dist/rpc/clickyMetadata.cjs.map +1 -1
  450. package/dist/rpc/clickyMetadata.d.ts +2 -0
  451. package/dist/rpc/clickyMetadata.d.ts.map +1 -1
  452. package/dist/rpc/clickyMetadata.js +14 -4
  453. package/dist/rpc/clickyMetadata.js.map +1 -1
  454. package/dist/rpc.cjs +3 -2
  455. package/dist/rpc.cjs.map +1 -1
  456. package/dist/rpc.d.ts +2 -1
  457. package/dist/rpc.d.ts.map +1 -1
  458. package/dist/rpc.js +2 -1
  459. package/dist/rpc.js.map +1 -1
  460. package/dist/styles.css +1 -1
  461. package/package.json +16 -1
@@ -2,193 +2,11 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const utils = require("../../lib/utils.cjs");
5
- function parseTimestamp(value) {
6
- if (value == null) return null;
7
- if (value instanceof Date) return Number.isNaN(value.getTime()) ? null : value;
8
- if (typeof value === "number") {
9
- const ms = value < 1e12 ? value * 1e3 : value;
10
- const d = new Date(ms);
11
- return Number.isNaN(d.getTime()) ? null : d;
12
- }
13
- if (typeof value === "string") {
14
- const trimmed = value.trim();
15
- if (!trimmed) return null;
16
- const d = new Date(trimmed);
17
- return Number.isNaN(d.getTime()) ? null : d;
18
- }
19
- return null;
20
- }
21
- const UNIT_MS = {
22
- s: 1e3,
23
- m: 6e4,
24
- h: 36e5,
25
- d: 864e5,
26
- w: 6048e5
27
- };
28
- const RELATIVE_PATTERN = /^now\s*([+-])\s*(\d+)\s*([smhdwMqy])$/;
29
- const ANCHORED_PATTERN = /^now\/([wMqy])(?:\s*([+-])\s*(\d+)\s*([wMqy]))?$/;
30
- function resolveDateMath(value, now = /* @__PURE__ */ new Date()) {
31
- if (value == null) return null;
32
- if (typeof value === "string") {
33
- const trimmed = value.trim();
34
- if (!trimmed) return null;
35
- if (trimmed.toLowerCase() === "now") return new Date(now.getTime());
36
- const anchoredMatch = trimmed.match(ANCHORED_PATTERN);
37
- if (anchoredMatch) {
38
- const [, anchor, sign, amount, unit] = anchoredMatch;
39
- let anchored = startOfPeriod(now, anchor);
40
- if (sign && amount && unit) {
41
- anchored = addPeriod(anchored, unit, Number(amount) * (sign === "-" ? -1 : 1));
42
- }
43
- return anchored;
44
- }
45
- const match = trimmed.match(RELATIVE_PATTERN);
46
- if (match) {
47
- const [, sign, amount, unit] = match;
48
- const calendarUnit = unit;
49
- if (isCalendarUnit(calendarUnit)) {
50
- return addPeriod(now, calendarUnit, Number(amount) * (sign === "-" ? -1 : 1));
51
- }
52
- const unitMs = UNIT_MS[calendarUnit.toLowerCase()];
53
- if (!unitMs) return null;
54
- const delta = Number(amount) * unitMs * (sign === "-" ? -1 : 1);
55
- return new Date(now.getTime() + delta);
56
- }
57
- }
58
- return parseTimestamp(value);
59
- }
60
- function isCalendarUnit(unit) {
61
- return unit === "M" || unit === "q" || unit === "y";
62
- }
63
- function startOfPeriod(date, unit) {
64
- const year = date.getUTCFullYear();
65
- const month = date.getUTCMonth();
66
- const day = date.getUTCDate();
67
- if (unit === "w") {
68
- const start = new Date(Date.UTC(year, month, day));
69
- const dayOfWeek = start.getUTCDay();
70
- const daysSinceMonday = (dayOfWeek + 6) % 7;
71
- start.setUTCDate(start.getUTCDate() - daysSinceMonday);
72
- return start;
73
- }
74
- if (unit === "M") return new Date(Date.UTC(year, month, 1));
75
- if (unit === "q") return new Date(Date.UTC(year, Math.floor(month / 3) * 3, 1));
76
- if (unit === "y") return new Date(Date.UTC(year, 0, 1));
77
- return new Date(date.getTime());
78
- }
79
- function addPeriod(date, unit, amount) {
80
- const next = new Date(date.getTime());
81
- if (unit === "w") {
82
- next.setUTCDate(next.getUTCDate() + amount * 7);
83
- } else if (unit === "M") {
84
- next.setUTCMonth(next.getUTCMonth() + amount);
85
- } else if (unit === "q") {
86
- next.setUTCMonth(next.getUTCMonth() + amount * 3);
87
- } else if (unit === "y") {
88
- next.setUTCFullYear(next.getUTCFullYear() + amount);
89
- } else {
90
- const unitMs = UNIT_MS[unit.toLowerCase()];
91
- if (unitMs) next.setTime(next.getTime() + amount * unitMs);
92
- }
93
- return next;
94
- }
95
- const MS_PER_MINUTE = 6e4;
96
- const MS_PER_DAY = 864e5;
97
- function chooseTimestampFormat(values) {
98
- if (values.length === 0) return "iso";
99
- let min = Infinity;
100
- let max = -Infinity;
101
- for (const d of values) {
102
- const t = d.getTime();
103
- if (t < min) min = t;
104
- if (t > max) max = t;
105
- }
106
- const span = max - min;
107
- if (span <= MS_PER_MINUTE) return "relative";
108
- const minDate = new Date(min);
109
- const maxDate = new Date(max);
110
- if (minDate.getFullYear() === maxDate.getFullYear() && minDate.getMonth() === maxDate.getMonth() && minDate.getDate() === maxDate.getDate()) {
111
- return "time";
112
- }
113
- if (minDate.getFullYear() === maxDate.getFullYear() && span <= MS_PER_DAY * 365) {
114
- return "short";
115
- }
116
- return "iso";
117
- }
118
- function formatTimestamp(date, format, now = /* @__PURE__ */ new Date()) {
119
- switch (format) {
120
- case "relative":
121
- return formatRelativeTime(date, now);
122
- case "time":
123
- return date.toLocaleTimeString(void 0, {
124
- hour: "2-digit",
125
- minute: "2-digit",
126
- second: "2-digit"
127
- });
128
- case "short":
129
- return date.toLocaleString(void 0, {
130
- month: "short",
131
- day: "numeric",
132
- hour: "2-digit",
133
- minute: "2-digit"
134
- });
135
- case "iso":
136
- default:
137
- return formatIso(date);
138
- }
139
- }
140
- function formatIso(date) {
141
- const yyyy = date.getFullYear();
142
- const mm = String(date.getMonth() + 1).padStart(2, "0");
143
- const dd = String(date.getDate()).padStart(2, "0");
144
- const hh = String(date.getHours()).padStart(2, "0");
145
- const min = String(date.getMinutes()).padStart(2, "0");
146
- return `${yyyy}-${mm}-${dd} ${hh}:${min}`;
147
- }
148
- function formatRelativeTime(date, now = /* @__PURE__ */ new Date()) {
149
- const diffMs = now.getTime() - date.getTime();
150
- const future = diffMs < 0;
151
- const abs = Math.abs(diffMs);
152
- const sec = Math.round(abs / 1e3);
153
- let value;
154
- if (sec < 1) value = "just now";
155
- else if (sec < 60) value = `${sec}s`;
156
- else if (sec < 3600) value = `${Math.round(sec / 60)}m`;
157
- else if (sec < 86400) value = `${Math.round(sec / 3600)}h`;
158
- else value = `${Math.round(sec / 86400)}d`;
159
- if (value === "just now") return value;
160
- return future ? `in ${value}` : `${value} ago`;
161
- }
162
- function formatDateTimeRelative(value, now = /* @__PURE__ */ new Date()) {
163
- const parsed = parseTimestamp(value);
164
- if (!parsed) return typeof value === "string" ? value : "";
165
- const absolute = parsed.toLocaleString(void 0, {
166
- year: "numeric",
167
- month: "short",
168
- day: "numeric",
169
- hour: "2-digit",
170
- minute: "2-digit"
171
- });
172
- const relative = formatRelativeTime(parsed, now);
173
- return relative === "just now" ? absolute : `${absolute} (${relative})`;
174
- }
175
- function modeToFormat(mode, dataFormat) {
176
- switch (mode) {
177
- case "absolute":
178
- return "iso";
179
- case "relative":
180
- return "relative";
181
- case "time":
182
- return "time";
183
- case "auto":
184
- default:
185
- return dataFormat;
186
- }
187
- }
5
+ const timestampFormat = require("./timestamp-format.cjs");
188
6
  function Timestamp({ value, format, showTitleOnHover = true, className }) {
189
- const parsed = parseTimestamp(value);
7
+ const parsed = timestampFormat.parseTimestamp(value);
190
8
  if (!parsed) return /* @__PURE__ */ jsxRuntime.jsx("span", { className: utils.cn("text-muted-foreground", className), children: "—" });
191
- const display = formatTimestamp(parsed, format);
9
+ const display = timestampFormat.formatTimestamp(parsed, format);
192
10
  const title = showTitleOnHover ? parsed.toISOString() : void 0;
193
11
  return /* @__PURE__ */ jsxRuntime.jsx(
194
12
  "span",
@@ -200,11 +18,4 @@ function Timestamp({ value, format, showTitleOnHover = true, className }) {
200
18
  );
201
19
  }
202
20
  exports.Timestamp = Timestamp;
203
- exports.chooseTimestampFormat = chooseTimestampFormat;
204
- exports.formatDateTimeRelative = formatDateTimeRelative;
205
- exports.formatRelativeTime = formatRelativeTime;
206
- exports.formatTimestamp = formatTimestamp;
207
- exports.modeToFormat = modeToFormat;
208
- exports.parseTimestamp = parseTimestamp;
209
- exports.resolveDateMath = resolveDateMath;
210
21
  //# sourceMappingURL=Timestamp.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Timestamp.cjs","sources":["../../../src/data/cells/Timestamp.tsx"],"sourcesContent":["import { cn } from \"../../lib/utils\";\nimport type { TimeRangePresetGroup } from \"../../components/TimeRange\";\n\nexport type TimestampMode = \"auto\" | \"absolute\" | \"relative\" | \"time\";\n\nexport type TimestampFormat = \"relative\" | \"time\" | \"short\" | \"iso\";\n\nexport type TimestampOptions = {\n /** Rendering mode for timestamp cells. */\n mode?: TimestampMode;\n /** Show the full timestamp in a tooltip even for absolute/ISO formats. */\n alwaysShowFullOnHover?: boolean;\n /**\n * When the column is on a DataTable with `autoFilter`, DataTable mounts a\n * \"Time range\" picker (matching the trace UI) and filters rows whose\n * timestamp falls outside the selected range. Set `false` to suppress.\n */\n autoRangeFilter?: boolean;\n /** Override the trace-style preset list (\"Last 15 minutes\", etc.). */\n rangePresets?: Array<{ label: string; from: string; to: string } | TimeRangePresetGroup>;\n /** Enable absolute date+time input and timezone selection for range filters. */\n timeEnabled?: boolean;\n /** Default timezone used when encoding absolute date+time range values. */\n timeZone?: string;\n /** Selectable timezones shown when `timeEnabled` is true. */\n timeZones?: string[];\n /**\n * Default range applied on first render. Either side may use date-math\n * (`now-24h`, `now`) or any value parseable by `parseTimestamp`.\n */\n defaultRange?: { from?: string; to?: string };\n};\n\nexport function parseTimestamp(value: unknown): Date | null {\n if (value == null) return null;\n if (value instanceof Date) return Number.isNaN(value.getTime()) ? null : value;\n\n if (typeof value === \"number\") {\n const ms = value < 1e12 ? value * 1000 : value;\n const d = new Date(ms);\n return Number.isNaN(d.getTime()) ? null : d;\n }\n\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (!trimmed) return null;\n const d = new Date(trimmed);\n return Number.isNaN(d.getTime()) ? null : d;\n }\n\n return null;\n}\n\nconst UNIT_MS: Record<string, number> = {\n s: 1_000,\n m: 60_000,\n h: 3_600_000,\n d: 86_400_000,\n w: 604_800_000,\n};\n\nconst RELATIVE_PATTERN = /^now\\s*([+-])\\s*(\\d+)\\s*([smhdwMqy])$/;\nconst ANCHORED_PATTERN = /^now\\/([wMqy])(?:\\s*([+-])\\s*(\\d+)\\s*([wMqy]))?$/;\n\n/**\n * Resolves date-math strings to an absolute Date. Recognised forms:\n * - \"now\"\n * - \"now-15m\", \"now-1h\", \"now+30s\", \"now-7d\", \"now-2w\" (units: s/m/h/d/w/M/q/y)\n * - \"now/w\", \"now/M\", \"now/q\", \"now/y\" with optional calendar offsets\n * - any value parseable by `parseTimestamp` (ISO, epoch ms/s, Date)\n * Returns null for unparseable input.\n */\nexport function resolveDateMath(value: unknown, now: Date = new Date()): Date | null {\n if (value == null) return null;\n\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (!trimmed) return null;\n\n if (trimmed.toLowerCase() === \"now\") return new Date(now.getTime());\n\n const anchoredMatch = trimmed.match(ANCHORED_PATTERN);\n if (anchoredMatch) {\n const [, anchor, sign, amount, unit] = anchoredMatch;\n let anchored = startOfPeriod(now, anchor!);\n if (sign && amount && unit) {\n anchored = addPeriod(anchored, unit, Number(amount) * (sign === \"-\" ? -1 : 1));\n }\n return anchored;\n }\n\n const match = trimmed.match(RELATIVE_PATTERN);\n if (match) {\n const [, sign, amount, unit] = match;\n const calendarUnit = unit!;\n if (isCalendarUnit(calendarUnit)) {\n return addPeriod(now, calendarUnit, Number(amount) * (sign === \"-\" ? -1 : 1));\n }\n const unitMs = UNIT_MS[calendarUnit.toLowerCase()];\n if (!unitMs) return null;\n const delta = Number(amount) * unitMs * (sign === \"-\" ? -1 : 1);\n return new Date(now.getTime() + delta);\n }\n }\n\n return parseTimestamp(value);\n}\n\nfunction isCalendarUnit(unit: string) {\n return unit === \"M\" || unit === \"q\" || unit === \"y\";\n}\n\nfunction startOfPeriod(date: Date, unit: string) {\n const year = date.getUTCFullYear();\n const month = date.getUTCMonth();\n const day = date.getUTCDate();\n\n if (unit === \"w\") {\n const start = new Date(Date.UTC(year, month, day));\n const dayOfWeek = start.getUTCDay();\n const daysSinceMonday = (dayOfWeek + 6) % 7;\n start.setUTCDate(start.getUTCDate() - daysSinceMonday);\n return start;\n }\n if (unit === \"M\") return new Date(Date.UTC(year, month, 1));\n if (unit === \"q\") return new Date(Date.UTC(year, Math.floor(month / 3) * 3, 1));\n if (unit === \"y\") return new Date(Date.UTC(year, 0, 1));\n return new Date(date.getTime());\n}\n\nfunction addPeriod(date: Date, unit: string, amount: number) {\n const next = new Date(date.getTime());\n if (unit === \"w\") {\n next.setUTCDate(next.getUTCDate() + amount * 7);\n } else if (unit === \"M\") {\n next.setUTCMonth(next.getUTCMonth() + amount);\n } else if (unit === \"q\") {\n next.setUTCMonth(next.getUTCMonth() + amount * 3);\n } else if (unit === \"y\") {\n next.setUTCFullYear(next.getUTCFullYear() + amount);\n } else {\n const unitMs = UNIT_MS[unit.toLowerCase()];\n if (unitMs) next.setTime(next.getTime() + amount * unitMs);\n }\n return next;\n}\n\nconst MS_PER_MINUTE = 60_000;\nconst MS_PER_DAY = 86_400_000;\n\nexport function chooseTimestampFormat(values: Date[]): TimestampFormat {\n if (values.length === 0) return \"iso\";\n\n let min = Infinity;\n let max = -Infinity;\n for (const d of values) {\n const t = d.getTime();\n if (t < min) min = t;\n if (t > max) max = t;\n }\n const span = max - min;\n\n if (span <= MS_PER_MINUTE) return \"relative\";\n\n const minDate = new Date(min);\n const maxDate = new Date(max);\n\n if (\n minDate.getFullYear() === maxDate.getFullYear() &&\n minDate.getMonth() === maxDate.getMonth() &&\n minDate.getDate() === maxDate.getDate()\n ) {\n return \"time\";\n }\n\n if (minDate.getFullYear() === maxDate.getFullYear() && span <= MS_PER_DAY * 365) {\n return \"short\";\n }\n\n return \"iso\";\n}\n\nexport function formatTimestamp(\n date: Date,\n format: TimestampFormat,\n now: Date = new Date(),\n): string {\n switch (format) {\n case \"relative\":\n return formatRelativeTime(date, now);\n case \"time\":\n return date.toLocaleTimeString(undefined, {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n });\n case \"short\":\n return date.toLocaleString(undefined, {\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n case \"iso\":\n default:\n return formatIso(date);\n }\n}\n\nfunction formatIso(date: Date): string {\n const yyyy = date.getFullYear();\n const mm = String(date.getMonth() + 1).padStart(2, \"0\");\n const dd = String(date.getDate()).padStart(2, \"0\");\n const hh = String(date.getHours()).padStart(2, \"0\");\n const min = String(date.getMinutes()).padStart(2, \"0\");\n return `${yyyy}-${mm}-${dd} ${hh}:${min}`;\n}\n\n// formatRelativeTime renders a compact \"30s ago\" / \"in 5m\" / \"just now\" string.\nexport function formatRelativeTime(date: Date, now: Date = new Date()): string {\n const diffMs = now.getTime() - date.getTime();\n const future = diffMs < 0;\n const abs = Math.abs(diffMs);\n const sec = Math.round(abs / 1000);\n\n let value: string;\n if (sec < 1) value = \"just now\";\n else if (sec < 60) value = `${sec}s`;\n else if (sec < 3600) value = `${Math.round(sec / 60)}m`;\n else if (sec < 86400) value = `${Math.round(sec / 3600)}h`;\n else value = `${Math.round(sec / 86400)}d`;\n\n if (value === \"just now\") return value;\n return future ? `in ${value}` : `${value} ago`;\n}\n\n// formatDateTimeRelative renders a value as an absolute locale date+time plus a\n// parenthesised relative hint, e.g. \"Apr 15, 2026, 12:00 PM (2h ago)\". It is the\n// shared \"locale + relative\" presentation used for date-typed values across the\n// form, filter, and combobox surfaces. Unparseable strings pass through\n// unchanged (so a template token or freeform value is preserved); nullish input\n// yields an empty string. The hint is dropped when the value reads \"just now\".\nexport function formatDateTimeRelative(value: unknown, now: Date = new Date()): string {\n const parsed = parseTimestamp(value);\n if (!parsed) return typeof value === \"string\" ? value : \"\";\n const absolute = parsed.toLocaleString(undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n const relative = formatRelativeTime(parsed, now);\n return relative === \"just now\" ? absolute : `${absolute} (${relative})`;\n}\n\nexport function modeToFormat(mode: TimestampMode, dataFormat: TimestampFormat): TimestampFormat {\n switch (mode) {\n case \"absolute\":\n return \"iso\";\n case \"relative\":\n return \"relative\";\n case \"time\":\n return \"time\";\n case \"auto\":\n default:\n return dataFormat;\n }\n}\n\nexport type TimestampProps = {\n value: unknown;\n format: TimestampFormat;\n showTitleOnHover?: boolean;\n className?: string;\n};\n\nexport function Timestamp({ value, format, showTitleOnHover = true, className }: TimestampProps) {\n const parsed = parseTimestamp(value);\n if (!parsed) return <span className={cn(\"text-muted-foreground\", className)}>—</span>;\n\n const display = formatTimestamp(parsed, format);\n const title = showTitleOnHover ? parsed.toISOString() : undefined;\n\n return (\n <span\n className={cn(\"tabular-nums whitespace-nowrap text-muted-foreground\", className)}\n title={title}\n >\n {display}\n </span>\n );\n}\n"],"names":["jsx","cn"],"mappings":";;;;AAiCO,SAAS,eAAe,OAA6B;AAC1D,MAAI,SAAS,KAAM,QAAO;AAC1B,MAAI,iBAAiB,KAAM,QAAO,OAAO,MAAM,MAAM,QAAA,CAAS,IAAI,OAAO;AAEzE,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,KAAK,QAAQ,OAAO,QAAQ,MAAO;AACzC,UAAM,IAAI,IAAI,KAAK,EAAE;AACrB,WAAO,OAAO,MAAM,EAAE,QAAA,CAAS,IAAI,OAAO;AAAA,EAC5C;AAEA,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,UAAU,MAAM,KAAA;AACtB,QAAI,CAAC,QAAS,QAAO;AACrB,UAAM,IAAI,IAAI,KAAK,OAAO;AAC1B,WAAO,OAAO,MAAM,EAAE,QAAA,CAAS,IAAI,OAAO;AAAA,EAC5C;AAEA,SAAO;AACT;AAEA,MAAM,UAAkC;AAAA,EACtC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;AAEA,MAAM,mBAAmB;AACzB,MAAM,mBAAmB;AAUlB,SAAS,gBAAgB,OAAgB,MAAY,oBAAI,QAAqB;AACnF,MAAI,SAAS,KAAM,QAAO;AAE1B,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,UAAU,MAAM,KAAA;AACtB,QAAI,CAAC,QAAS,QAAO;AAErB,QAAI,QAAQ,kBAAkB,cAAc,IAAI,KAAK,IAAI,SAAS;AAElE,UAAM,gBAAgB,QAAQ,MAAM,gBAAgB;AACpD,QAAI,eAAe;AACjB,YAAM,CAAA,EAAG,QAAQ,MAAM,QAAQ,IAAI,IAAI;AACvC,UAAI,WAAW,cAAc,KAAK,MAAO;AACzC,UAAI,QAAQ,UAAU,MAAM;AAC1B,mBAAW,UAAU,UAAU,MAAM,OAAO,MAAM,KAAK,SAAS,MAAM,KAAK,EAAE;AAAA,MAC/E;AACA,aAAO;AAAA,IACT;AAEA,UAAM,QAAQ,QAAQ,MAAM,gBAAgB;AAC5C,QAAI,OAAO;AACT,YAAM,GAAG,MAAM,QAAQ,IAAI,IAAI;AAC/B,YAAM,eAAe;AACrB,UAAI,eAAe,YAAY,GAAG;AAChC,eAAO,UAAU,KAAK,cAAc,OAAO,MAAM,KAAK,SAAS,MAAM,KAAK,EAAE;AAAA,MAC9E;AACA,YAAM,SAAS,QAAQ,aAAa,YAAA,CAAa;AACjD,UAAI,CAAC,OAAQ,QAAO;AACpB,YAAM,QAAQ,OAAO,MAAM,IAAI,UAAU,SAAS,MAAM,KAAK;AAC7D,aAAO,IAAI,KAAK,IAAI,QAAA,IAAY,KAAK;AAAA,IACvC;AAAA,EACF;AAEA,SAAO,eAAe,KAAK;AAC7B;AAEA,SAAS,eAAe,MAAc;AACpC,SAAO,SAAS,OAAO,SAAS,OAAO,SAAS;AAClD;AAEA,SAAS,cAAc,MAAY,MAAc;AAC/C,QAAM,OAAO,KAAK,eAAA;AAClB,QAAM,QAAQ,KAAK,YAAA;AACnB,QAAM,MAAM,KAAK,WAAA;AAEjB,MAAI,SAAS,KAAK;AAChB,UAAM,QAAQ,IAAI,KAAK,KAAK,IAAI,MAAM,OAAO,GAAG,CAAC;AACjD,UAAM,YAAY,MAAM,UAAA;AACxB,UAAM,mBAAmB,YAAY,KAAK;AAC1C,UAAM,WAAW,MAAM,WAAA,IAAe,eAAe;AACrD,WAAO;AAAA,EACT;AACA,MAAI,SAAS,IAAK,QAAO,IAAI,KAAK,KAAK,IAAI,MAAM,OAAO,CAAC,CAAC;AAC1D,MAAI,SAAS,IAAK,QAAO,IAAI,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;AAC9E,MAAI,SAAS,IAAK,QAAO,IAAI,KAAK,KAAK,IAAI,MAAM,GAAG,CAAC,CAAC;AACtD,SAAO,IAAI,KAAK,KAAK,SAAS;AAChC;AAEA,SAAS,UAAU,MAAY,MAAc,QAAgB;AAC3D,QAAM,OAAO,IAAI,KAAK,KAAK,SAAS;AACpC,MAAI,SAAS,KAAK;AAChB,SAAK,WAAW,KAAK,WAAA,IAAe,SAAS,CAAC;AAAA,EAChD,WAAW,SAAS,KAAK;AACvB,SAAK,YAAY,KAAK,YAAA,IAAgB,MAAM;AAAA,EAC9C,WAAW,SAAS,KAAK;AACvB,SAAK,YAAY,KAAK,YAAA,IAAgB,SAAS,CAAC;AAAA,EAClD,WAAW,SAAS,KAAK;AACvB,SAAK,eAAe,KAAK,eAAA,IAAmB,MAAM;AAAA,EACpD,OAAO;AACL,UAAM,SAAS,QAAQ,KAAK,YAAA,CAAa;AACzC,QAAI,OAAQ,MAAK,QAAQ,KAAK,QAAA,IAAY,SAAS,MAAM;AAAA,EAC3D;AACA,SAAO;AACT;AAEA,MAAM,gBAAgB;AACtB,MAAM,aAAa;AAEZ,SAAS,sBAAsB,QAAiC;AACrE,MAAI,OAAO,WAAW,EAAG,QAAO;AAEhC,MAAI,MAAM;AACV,MAAI,MAAM;AACV,aAAW,KAAK,QAAQ;AACtB,UAAM,IAAI,EAAE,QAAA;AACZ,QAAI,IAAI,IAAK,OAAM;AACnB,QAAI,IAAI,IAAK,OAAM;AAAA,EACrB;AACA,QAAM,OAAO,MAAM;AAEnB,MAAI,QAAQ,cAAe,QAAO;AAElC,QAAM,UAAU,IAAI,KAAK,GAAG;AAC5B,QAAM,UAAU,IAAI,KAAK,GAAG;AAE5B,MACE,QAAQ,YAAA,MAAkB,QAAQ,YAAA,KAClC,QAAQ,SAAA,MAAe,QAAQ,cAC/B,QAAQ,cAAc,QAAQ,WAC9B;AACA,WAAO;AAAA,EACT;AAEA,MAAI,QAAQ,kBAAkB,QAAQ,iBAAiB,QAAQ,aAAa,KAAK;AAC/E,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,gBACd,MACA,QACA,MAAY,oBAAI,QACR;AACR,UAAQ,QAAA;AAAA,IACN,KAAK;AACH,aAAO,mBAAmB,MAAM,GAAG;AAAA,IACrC,KAAK;AACH,aAAO,KAAK,mBAAmB,QAAW;AAAA,QACxC,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,QAAQ;AAAA,MAAA,CACT;AAAA,IACH,KAAK;AACH,aAAO,KAAK,eAAe,QAAW;AAAA,QACpC,OAAO;AAAA,QACP,KAAK;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,MAAA,CACT;AAAA,IACH,KAAK;AAAA,IACL;AACE,aAAO,UAAU,IAAI;AAAA,EAAA;AAE3B;AAEA,SAAS,UAAU,MAAoB;AACrC,QAAM,OAAO,KAAK,YAAA;AAClB,QAAM,KAAK,OAAO,KAAK,SAAA,IAAa,CAAC,EAAE,SAAS,GAAG,GAAG;AACtD,QAAM,KAAK,OAAO,KAAK,QAAA,CAAS,EAAE,SAAS,GAAG,GAAG;AACjD,QAAM,KAAK,OAAO,KAAK,SAAA,CAAU,EAAE,SAAS,GAAG,GAAG;AAClD,QAAM,MAAM,OAAO,KAAK,WAAA,CAAY,EAAE,SAAS,GAAG,GAAG;AACrD,SAAO,GAAG,IAAI,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG;AACzC;AAGO,SAAS,mBAAmB,MAAY,MAAY,oBAAI,QAAgB;AAC7E,QAAM,SAAS,IAAI,QAAA,IAAY,KAAK,QAAA;AACpC,QAAM,SAAS,SAAS;AACxB,QAAM,MAAM,KAAK,IAAI,MAAM;AAC3B,QAAM,MAAM,KAAK,MAAM,MAAM,GAAI;AAEjC,MAAI;AACJ,MAAI,MAAM,EAAG,SAAQ;AAAA,WACZ,MAAM,GAAI,SAAQ,GAAG,GAAG;AAAA,WACxB,MAAM,KAAM,SAAQ,GAAG,KAAK,MAAM,MAAM,EAAE,CAAC;AAAA,WAC3C,MAAM,MAAO,SAAQ,GAAG,KAAK,MAAM,MAAM,IAAI,CAAC;AAAA,eAC1C,GAAG,KAAK,MAAM,MAAM,KAAK,CAAC;AAEvC,MAAI,UAAU,WAAY,QAAO;AACjC,SAAO,SAAS,MAAM,KAAK,KAAK,GAAG,KAAK;AAC1C;AAQO,SAAS,uBAAuB,OAAgB,MAAY,oBAAI,QAAgB;AACrF,QAAM,SAAS,eAAe,KAAK;AACnC,MAAI,CAAC,OAAQ,QAAO,OAAO,UAAU,WAAW,QAAQ;AACxD,QAAM,WAAW,OAAO,eAAe,QAAW;AAAA,IAChD,MAAM;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA,CACT;AACD,QAAM,WAAW,mBAAmB,QAAQ,GAAG;AAC/C,SAAO,aAAa,aAAa,WAAW,GAAG,QAAQ,KAAK,QAAQ;AACtE;AAEO,SAAS,aAAa,MAAqB,YAA8C;AAC9F,UAAQ,MAAA;AAAA,IACN,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL;AACE,aAAO;AAAA,EAAA;AAEb;AASO,SAAS,UAAU,EAAE,OAAO,QAAQ,mBAAmB,MAAM,aAA6B;AAC/F,QAAM,SAAS,eAAe,KAAK;AACnC,MAAI,CAAC,OAAQ,QAAOA,2BAAAA,IAAC,QAAA,EAAK,WAAWC,MAAAA,GAAG,yBAAyB,SAAS,GAAG,UAAA,IAAA,CAAC;AAE9E,QAAM,UAAU,gBAAgB,QAAQ,MAAM;AAC9C,QAAM,QAAQ,mBAAmB,OAAO,YAAA,IAAgB;AAExD,SACED,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC,MAAAA,GAAG,wDAAwD,SAAS;AAAA,MAC/E;AAAA,MAEC,UAAA;AAAA,IAAA;AAAA,EAAA;AAGP;;;;;;;;;"}
1
+ {"version":3,"file":"Timestamp.cjs","sources":["../../../src/data/cells/Timestamp.tsx"],"sourcesContent":["import { cn } from \"../../lib/utils\";\nimport { formatTimestamp, parseTimestamp, type TimestampFormat } from \"./timestamp-format\";\n\nexport type TimestampProps = {\n value: unknown;\n format: TimestampFormat;\n showTitleOnHover?: boolean;\n className?: string;\n};\n\nexport function Timestamp({ value, format, showTitleOnHover = true, className }: TimestampProps) {\n const parsed = parseTimestamp(value);\n if (!parsed) return <span className={cn(\"text-muted-foreground\", className)}>—</span>;\n\n const display = formatTimestamp(parsed, format);\n const title = showTitleOnHover ? parsed.toISOString() : undefined;\n\n return (\n <span\n className={cn(\"tabular-nums whitespace-nowrap text-muted-foreground\", className)}\n title={title}\n >\n {display}\n </span>\n );\n}\n"],"names":["parseTimestamp","jsx","cn","formatTimestamp"],"mappings":";;;;;AAUO,SAAS,UAAU,EAAE,OAAO,QAAQ,mBAAmB,MAAM,aAA6B;AAC/F,QAAM,SAASA,gBAAAA,eAAe,KAAK;AACnC,MAAI,CAAC,OAAQ,QAAOC,2BAAAA,IAAC,QAAA,EAAK,WAAWC,MAAAA,GAAG,yBAAyB,SAAS,GAAG,UAAA,IAAA,CAAC;AAE9E,QAAM,UAAUC,gBAAAA,gBAAgB,QAAQ,MAAM;AAC9C,QAAM,QAAQ,mBAAmB,OAAO,YAAA,IAAgB;AAExD,SACEF,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC,MAAAA,GAAG,wDAAwD,SAAS;AAAA,MAC/E;AAAA,MAEC,UAAA;AAAA,IAAA;AAAA,EAAA;AAGP;;"}
@@ -1,53 +1,4 @@
1
- import { TimeRangePresetGroup } from '../../components/TimeRange';
2
- export type TimestampMode = "auto" | "absolute" | "relative" | "time";
3
- export type TimestampFormat = "relative" | "time" | "short" | "iso";
4
- export type TimestampOptions = {
5
- /** Rendering mode for timestamp cells. */
6
- mode?: TimestampMode;
7
- /** Show the full timestamp in a tooltip even for absolute/ISO formats. */
8
- alwaysShowFullOnHover?: boolean;
9
- /**
10
- * When the column is on a DataTable with `autoFilter`, DataTable mounts a
11
- * "Time range" picker (matching the trace UI) and filters rows whose
12
- * timestamp falls outside the selected range. Set `false` to suppress.
13
- */
14
- autoRangeFilter?: boolean;
15
- /** Override the trace-style preset list ("Last 15 minutes", etc.). */
16
- rangePresets?: Array<{
17
- label: string;
18
- from: string;
19
- to: string;
20
- } | TimeRangePresetGroup>;
21
- /** Enable absolute date+time input and timezone selection for range filters. */
22
- timeEnabled?: boolean;
23
- /** Default timezone used when encoding absolute date+time range values. */
24
- timeZone?: string;
25
- /** Selectable timezones shown when `timeEnabled` is true. */
26
- timeZones?: string[];
27
- /**
28
- * Default range applied on first render. Either side may use date-math
29
- * (`now-24h`, `now`) or any value parseable by `parseTimestamp`.
30
- */
31
- defaultRange?: {
32
- from?: string;
33
- to?: string;
34
- };
35
- };
36
- export declare function parseTimestamp(value: unknown): Date | null;
37
- /**
38
- * Resolves date-math strings to an absolute Date. Recognised forms:
39
- * - "now"
40
- * - "now-15m", "now-1h", "now+30s", "now-7d", "now-2w" (units: s/m/h/d/w/M/q/y)
41
- * - "now/w", "now/M", "now/q", "now/y" with optional calendar offsets
42
- * - any value parseable by `parseTimestamp` (ISO, epoch ms/s, Date)
43
- * Returns null for unparseable input.
44
- */
45
- export declare function resolveDateMath(value: unknown, now?: Date): Date | null;
46
- export declare function chooseTimestampFormat(values: Date[]): TimestampFormat;
47
- export declare function formatTimestamp(date: Date, format: TimestampFormat, now?: Date): string;
48
- export declare function formatRelativeTime(date: Date, now?: Date): string;
49
- export declare function formatDateTimeRelative(value: unknown, now?: Date): string;
50
- export declare function modeToFormat(mode: TimestampMode, dataFormat: TimestampFormat): TimestampFormat;
1
+ import { TimestampFormat } from './timestamp-format';
51
2
  export type TimestampProps = {
52
3
  value: unknown;
53
4
  format: TimestampFormat;
@@ -1 +1 @@
1
- {"version":3,"file":"Timestamp.d.ts","sourceRoot":"","sources":["../../../src/data/cells/Timestamp.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEvE,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;AAEtE,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;AAEpE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,0CAA0C;IAC1C,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,0EAA0E;IAC1E,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,sEAAsE;IACtE,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,oBAAoB,CAAC,CAAC;IACzF,gFAAgF;IAChF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB;;;OAGG;IACH,YAAY,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C,CAAC;AAEF,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CAkB1D;AAaD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,GAAE,IAAiB,GAAG,IAAI,GAAG,IAAI,CAkCnF;AA4CD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,eAAe,CA8BrE;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,eAAe,EACvB,GAAG,GAAE,IAAiB,GACrB,MAAM,CAqBR;AAYD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CAe7E;AAQD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CAYrF;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,GAAG,eAAe,CAY9F;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAuB,EAAE,SAAS,EAAE,EAAE,cAAc,2CAe9F"}
1
+ {"version":3,"file":"Timestamp.d.ts","sourceRoot":"","sources":["../../../src/data/cells/Timestamp.tsx"],"names":[],"mappings":"AACA,OAAO,EAAmC,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE3F,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAuB,EAAE,SAAS,EAAE,EAAE,cAAc,2CAe9F"}
@@ -1,188 +1,6 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { cn } from "../../lib/utils.js";
3
- function parseTimestamp(value) {
4
- if (value == null) return null;
5
- if (value instanceof Date) return Number.isNaN(value.getTime()) ? null : value;
6
- if (typeof value === "number") {
7
- const ms = value < 1e12 ? value * 1e3 : value;
8
- const d = new Date(ms);
9
- return Number.isNaN(d.getTime()) ? null : d;
10
- }
11
- if (typeof value === "string") {
12
- const trimmed = value.trim();
13
- if (!trimmed) return null;
14
- const d = new Date(trimmed);
15
- return Number.isNaN(d.getTime()) ? null : d;
16
- }
17
- return null;
18
- }
19
- const UNIT_MS = {
20
- s: 1e3,
21
- m: 6e4,
22
- h: 36e5,
23
- d: 864e5,
24
- w: 6048e5
25
- };
26
- const RELATIVE_PATTERN = /^now\s*([+-])\s*(\d+)\s*([smhdwMqy])$/;
27
- const ANCHORED_PATTERN = /^now\/([wMqy])(?:\s*([+-])\s*(\d+)\s*([wMqy]))?$/;
28
- function resolveDateMath(value, now = /* @__PURE__ */ new Date()) {
29
- if (value == null) return null;
30
- if (typeof value === "string") {
31
- const trimmed = value.trim();
32
- if (!trimmed) return null;
33
- if (trimmed.toLowerCase() === "now") return new Date(now.getTime());
34
- const anchoredMatch = trimmed.match(ANCHORED_PATTERN);
35
- if (anchoredMatch) {
36
- const [, anchor, sign, amount, unit] = anchoredMatch;
37
- let anchored = startOfPeriod(now, anchor);
38
- if (sign && amount && unit) {
39
- anchored = addPeriod(anchored, unit, Number(amount) * (sign === "-" ? -1 : 1));
40
- }
41
- return anchored;
42
- }
43
- const match = trimmed.match(RELATIVE_PATTERN);
44
- if (match) {
45
- const [, sign, amount, unit] = match;
46
- const calendarUnit = unit;
47
- if (isCalendarUnit(calendarUnit)) {
48
- return addPeriod(now, calendarUnit, Number(amount) * (sign === "-" ? -1 : 1));
49
- }
50
- const unitMs = UNIT_MS[calendarUnit.toLowerCase()];
51
- if (!unitMs) return null;
52
- const delta = Number(amount) * unitMs * (sign === "-" ? -1 : 1);
53
- return new Date(now.getTime() + delta);
54
- }
55
- }
56
- return parseTimestamp(value);
57
- }
58
- function isCalendarUnit(unit) {
59
- return unit === "M" || unit === "q" || unit === "y";
60
- }
61
- function startOfPeriod(date, unit) {
62
- const year = date.getUTCFullYear();
63
- const month = date.getUTCMonth();
64
- const day = date.getUTCDate();
65
- if (unit === "w") {
66
- const start = new Date(Date.UTC(year, month, day));
67
- const dayOfWeek = start.getUTCDay();
68
- const daysSinceMonday = (dayOfWeek + 6) % 7;
69
- start.setUTCDate(start.getUTCDate() - daysSinceMonday);
70
- return start;
71
- }
72
- if (unit === "M") return new Date(Date.UTC(year, month, 1));
73
- if (unit === "q") return new Date(Date.UTC(year, Math.floor(month / 3) * 3, 1));
74
- if (unit === "y") return new Date(Date.UTC(year, 0, 1));
75
- return new Date(date.getTime());
76
- }
77
- function addPeriod(date, unit, amount) {
78
- const next = new Date(date.getTime());
79
- if (unit === "w") {
80
- next.setUTCDate(next.getUTCDate() + amount * 7);
81
- } else if (unit === "M") {
82
- next.setUTCMonth(next.getUTCMonth() + amount);
83
- } else if (unit === "q") {
84
- next.setUTCMonth(next.getUTCMonth() + amount * 3);
85
- } else if (unit === "y") {
86
- next.setUTCFullYear(next.getUTCFullYear() + amount);
87
- } else {
88
- const unitMs = UNIT_MS[unit.toLowerCase()];
89
- if (unitMs) next.setTime(next.getTime() + amount * unitMs);
90
- }
91
- return next;
92
- }
93
- const MS_PER_MINUTE = 6e4;
94
- const MS_PER_DAY = 864e5;
95
- function chooseTimestampFormat(values) {
96
- if (values.length === 0) return "iso";
97
- let min = Infinity;
98
- let max = -Infinity;
99
- for (const d of values) {
100
- const t = d.getTime();
101
- if (t < min) min = t;
102
- if (t > max) max = t;
103
- }
104
- const span = max - min;
105
- if (span <= MS_PER_MINUTE) return "relative";
106
- const minDate = new Date(min);
107
- const maxDate = new Date(max);
108
- if (minDate.getFullYear() === maxDate.getFullYear() && minDate.getMonth() === maxDate.getMonth() && minDate.getDate() === maxDate.getDate()) {
109
- return "time";
110
- }
111
- if (minDate.getFullYear() === maxDate.getFullYear() && span <= MS_PER_DAY * 365) {
112
- return "short";
113
- }
114
- return "iso";
115
- }
116
- function formatTimestamp(date, format, now = /* @__PURE__ */ new Date()) {
117
- switch (format) {
118
- case "relative":
119
- return formatRelativeTime(date, now);
120
- case "time":
121
- return date.toLocaleTimeString(void 0, {
122
- hour: "2-digit",
123
- minute: "2-digit",
124
- second: "2-digit"
125
- });
126
- case "short":
127
- return date.toLocaleString(void 0, {
128
- month: "short",
129
- day: "numeric",
130
- hour: "2-digit",
131
- minute: "2-digit"
132
- });
133
- case "iso":
134
- default:
135
- return formatIso(date);
136
- }
137
- }
138
- function formatIso(date) {
139
- const yyyy = date.getFullYear();
140
- const mm = String(date.getMonth() + 1).padStart(2, "0");
141
- const dd = String(date.getDate()).padStart(2, "0");
142
- const hh = String(date.getHours()).padStart(2, "0");
143
- const min = String(date.getMinutes()).padStart(2, "0");
144
- return `${yyyy}-${mm}-${dd} ${hh}:${min}`;
145
- }
146
- function formatRelativeTime(date, now = /* @__PURE__ */ new Date()) {
147
- const diffMs = now.getTime() - date.getTime();
148
- const future = diffMs < 0;
149
- const abs = Math.abs(diffMs);
150
- const sec = Math.round(abs / 1e3);
151
- let value;
152
- if (sec < 1) value = "just now";
153
- else if (sec < 60) value = `${sec}s`;
154
- else if (sec < 3600) value = `${Math.round(sec / 60)}m`;
155
- else if (sec < 86400) value = `${Math.round(sec / 3600)}h`;
156
- else value = `${Math.round(sec / 86400)}d`;
157
- if (value === "just now") return value;
158
- return future ? `in ${value}` : `${value} ago`;
159
- }
160
- function formatDateTimeRelative(value, now = /* @__PURE__ */ new Date()) {
161
- const parsed = parseTimestamp(value);
162
- if (!parsed) return typeof value === "string" ? value : "";
163
- const absolute = parsed.toLocaleString(void 0, {
164
- year: "numeric",
165
- month: "short",
166
- day: "numeric",
167
- hour: "2-digit",
168
- minute: "2-digit"
169
- });
170
- const relative = formatRelativeTime(parsed, now);
171
- return relative === "just now" ? absolute : `${absolute} (${relative})`;
172
- }
173
- function modeToFormat(mode, dataFormat) {
174
- switch (mode) {
175
- case "absolute":
176
- return "iso";
177
- case "relative":
178
- return "relative";
179
- case "time":
180
- return "time";
181
- case "auto":
182
- default:
183
- return dataFormat;
184
- }
185
- }
3
+ import { parseTimestamp, formatTimestamp } from "./timestamp-format.js";
186
4
  function Timestamp({ value, format, showTitleOnHover = true, className }) {
187
5
  const parsed = parseTimestamp(value);
188
6
  if (!parsed) return /* @__PURE__ */ jsx("span", { className: cn("text-muted-foreground", className), children: "—" });
@@ -198,13 +16,6 @@ function Timestamp({ value, format, showTitleOnHover = true, className }) {
198
16
  );
199
17
  }
200
18
  export {
201
- Timestamp,
202
- chooseTimestampFormat,
203
- formatDateTimeRelative,
204
- formatRelativeTime,
205
- formatTimestamp,
206
- modeToFormat,
207
- parseTimestamp,
208
- resolveDateMath
19
+ Timestamp
209
20
  };
210
21
  //# sourceMappingURL=Timestamp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Timestamp.js","sources":["../../../src/data/cells/Timestamp.tsx"],"sourcesContent":["import { cn } from \"../../lib/utils\";\nimport type { TimeRangePresetGroup } from \"../../components/TimeRange\";\n\nexport type TimestampMode = \"auto\" | \"absolute\" | \"relative\" | \"time\";\n\nexport type TimestampFormat = \"relative\" | \"time\" | \"short\" | \"iso\";\n\nexport type TimestampOptions = {\n /** Rendering mode for timestamp cells. */\n mode?: TimestampMode;\n /** Show the full timestamp in a tooltip even for absolute/ISO formats. */\n alwaysShowFullOnHover?: boolean;\n /**\n * When the column is on a DataTable with `autoFilter`, DataTable mounts a\n * \"Time range\" picker (matching the trace UI) and filters rows whose\n * timestamp falls outside the selected range. Set `false` to suppress.\n */\n autoRangeFilter?: boolean;\n /** Override the trace-style preset list (\"Last 15 minutes\", etc.). */\n rangePresets?: Array<{ label: string; from: string; to: string } | TimeRangePresetGroup>;\n /** Enable absolute date+time input and timezone selection for range filters. */\n timeEnabled?: boolean;\n /** Default timezone used when encoding absolute date+time range values. */\n timeZone?: string;\n /** Selectable timezones shown when `timeEnabled` is true. */\n timeZones?: string[];\n /**\n * Default range applied on first render. Either side may use date-math\n * (`now-24h`, `now`) or any value parseable by `parseTimestamp`.\n */\n defaultRange?: { from?: string; to?: string };\n};\n\nexport function parseTimestamp(value: unknown): Date | null {\n if (value == null) return null;\n if (value instanceof Date) return Number.isNaN(value.getTime()) ? null : value;\n\n if (typeof value === \"number\") {\n const ms = value < 1e12 ? value * 1000 : value;\n const d = new Date(ms);\n return Number.isNaN(d.getTime()) ? null : d;\n }\n\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (!trimmed) return null;\n const d = new Date(trimmed);\n return Number.isNaN(d.getTime()) ? null : d;\n }\n\n return null;\n}\n\nconst UNIT_MS: Record<string, number> = {\n s: 1_000,\n m: 60_000,\n h: 3_600_000,\n d: 86_400_000,\n w: 604_800_000,\n};\n\nconst RELATIVE_PATTERN = /^now\\s*([+-])\\s*(\\d+)\\s*([smhdwMqy])$/;\nconst ANCHORED_PATTERN = /^now\\/([wMqy])(?:\\s*([+-])\\s*(\\d+)\\s*([wMqy]))?$/;\n\n/**\n * Resolves date-math strings to an absolute Date. Recognised forms:\n * - \"now\"\n * - \"now-15m\", \"now-1h\", \"now+30s\", \"now-7d\", \"now-2w\" (units: s/m/h/d/w/M/q/y)\n * - \"now/w\", \"now/M\", \"now/q\", \"now/y\" with optional calendar offsets\n * - any value parseable by `parseTimestamp` (ISO, epoch ms/s, Date)\n * Returns null for unparseable input.\n */\nexport function resolveDateMath(value: unknown, now: Date = new Date()): Date | null {\n if (value == null) return null;\n\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (!trimmed) return null;\n\n if (trimmed.toLowerCase() === \"now\") return new Date(now.getTime());\n\n const anchoredMatch = trimmed.match(ANCHORED_PATTERN);\n if (anchoredMatch) {\n const [, anchor, sign, amount, unit] = anchoredMatch;\n let anchored = startOfPeriod(now, anchor!);\n if (sign && amount && unit) {\n anchored = addPeriod(anchored, unit, Number(amount) * (sign === \"-\" ? -1 : 1));\n }\n return anchored;\n }\n\n const match = trimmed.match(RELATIVE_PATTERN);\n if (match) {\n const [, sign, amount, unit] = match;\n const calendarUnit = unit!;\n if (isCalendarUnit(calendarUnit)) {\n return addPeriod(now, calendarUnit, Number(amount) * (sign === \"-\" ? -1 : 1));\n }\n const unitMs = UNIT_MS[calendarUnit.toLowerCase()];\n if (!unitMs) return null;\n const delta = Number(amount) * unitMs * (sign === \"-\" ? -1 : 1);\n return new Date(now.getTime() + delta);\n }\n }\n\n return parseTimestamp(value);\n}\n\nfunction isCalendarUnit(unit: string) {\n return unit === \"M\" || unit === \"q\" || unit === \"y\";\n}\n\nfunction startOfPeriod(date: Date, unit: string) {\n const year = date.getUTCFullYear();\n const month = date.getUTCMonth();\n const day = date.getUTCDate();\n\n if (unit === \"w\") {\n const start = new Date(Date.UTC(year, month, day));\n const dayOfWeek = start.getUTCDay();\n const daysSinceMonday = (dayOfWeek + 6) % 7;\n start.setUTCDate(start.getUTCDate() - daysSinceMonday);\n return start;\n }\n if (unit === \"M\") return new Date(Date.UTC(year, month, 1));\n if (unit === \"q\") return new Date(Date.UTC(year, Math.floor(month / 3) * 3, 1));\n if (unit === \"y\") return new Date(Date.UTC(year, 0, 1));\n return new Date(date.getTime());\n}\n\nfunction addPeriod(date: Date, unit: string, amount: number) {\n const next = new Date(date.getTime());\n if (unit === \"w\") {\n next.setUTCDate(next.getUTCDate() + amount * 7);\n } else if (unit === \"M\") {\n next.setUTCMonth(next.getUTCMonth() + amount);\n } else if (unit === \"q\") {\n next.setUTCMonth(next.getUTCMonth() + amount * 3);\n } else if (unit === \"y\") {\n next.setUTCFullYear(next.getUTCFullYear() + amount);\n } else {\n const unitMs = UNIT_MS[unit.toLowerCase()];\n if (unitMs) next.setTime(next.getTime() + amount * unitMs);\n }\n return next;\n}\n\nconst MS_PER_MINUTE = 60_000;\nconst MS_PER_DAY = 86_400_000;\n\nexport function chooseTimestampFormat(values: Date[]): TimestampFormat {\n if (values.length === 0) return \"iso\";\n\n let min = Infinity;\n let max = -Infinity;\n for (const d of values) {\n const t = d.getTime();\n if (t < min) min = t;\n if (t > max) max = t;\n }\n const span = max - min;\n\n if (span <= MS_PER_MINUTE) return \"relative\";\n\n const minDate = new Date(min);\n const maxDate = new Date(max);\n\n if (\n minDate.getFullYear() === maxDate.getFullYear() &&\n minDate.getMonth() === maxDate.getMonth() &&\n minDate.getDate() === maxDate.getDate()\n ) {\n return \"time\";\n }\n\n if (minDate.getFullYear() === maxDate.getFullYear() && span <= MS_PER_DAY * 365) {\n return \"short\";\n }\n\n return \"iso\";\n}\n\nexport function formatTimestamp(\n date: Date,\n format: TimestampFormat,\n now: Date = new Date(),\n): string {\n switch (format) {\n case \"relative\":\n return formatRelativeTime(date, now);\n case \"time\":\n return date.toLocaleTimeString(undefined, {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n });\n case \"short\":\n return date.toLocaleString(undefined, {\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n case \"iso\":\n default:\n return formatIso(date);\n }\n}\n\nfunction formatIso(date: Date): string {\n const yyyy = date.getFullYear();\n const mm = String(date.getMonth() + 1).padStart(2, \"0\");\n const dd = String(date.getDate()).padStart(2, \"0\");\n const hh = String(date.getHours()).padStart(2, \"0\");\n const min = String(date.getMinutes()).padStart(2, \"0\");\n return `${yyyy}-${mm}-${dd} ${hh}:${min}`;\n}\n\n// formatRelativeTime renders a compact \"30s ago\" / \"in 5m\" / \"just now\" string.\nexport function formatRelativeTime(date: Date, now: Date = new Date()): string {\n const diffMs = now.getTime() - date.getTime();\n const future = diffMs < 0;\n const abs = Math.abs(diffMs);\n const sec = Math.round(abs / 1000);\n\n let value: string;\n if (sec < 1) value = \"just now\";\n else if (sec < 60) value = `${sec}s`;\n else if (sec < 3600) value = `${Math.round(sec / 60)}m`;\n else if (sec < 86400) value = `${Math.round(sec / 3600)}h`;\n else value = `${Math.round(sec / 86400)}d`;\n\n if (value === \"just now\") return value;\n return future ? `in ${value}` : `${value} ago`;\n}\n\n// formatDateTimeRelative renders a value as an absolute locale date+time plus a\n// parenthesised relative hint, e.g. \"Apr 15, 2026, 12:00 PM (2h ago)\". It is the\n// shared \"locale + relative\" presentation used for date-typed values across the\n// form, filter, and combobox surfaces. Unparseable strings pass through\n// unchanged (so a template token or freeform value is preserved); nullish input\n// yields an empty string. The hint is dropped when the value reads \"just now\".\nexport function formatDateTimeRelative(value: unknown, now: Date = new Date()): string {\n const parsed = parseTimestamp(value);\n if (!parsed) return typeof value === \"string\" ? value : \"\";\n const absolute = parsed.toLocaleString(undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n const relative = formatRelativeTime(parsed, now);\n return relative === \"just now\" ? absolute : `${absolute} (${relative})`;\n}\n\nexport function modeToFormat(mode: TimestampMode, dataFormat: TimestampFormat): TimestampFormat {\n switch (mode) {\n case \"absolute\":\n return \"iso\";\n case \"relative\":\n return \"relative\";\n case \"time\":\n return \"time\";\n case \"auto\":\n default:\n return dataFormat;\n }\n}\n\nexport type TimestampProps = {\n value: unknown;\n format: TimestampFormat;\n showTitleOnHover?: boolean;\n className?: string;\n};\n\nexport function Timestamp({ value, format, showTitleOnHover = true, className }: TimestampProps) {\n const parsed = parseTimestamp(value);\n if (!parsed) return <span className={cn(\"text-muted-foreground\", className)}>—</span>;\n\n const display = formatTimestamp(parsed, format);\n const title = showTitleOnHover ? parsed.toISOString() : undefined;\n\n return (\n <span\n className={cn(\"tabular-nums whitespace-nowrap text-muted-foreground\", className)}\n title={title}\n >\n {display}\n </span>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Timestamp.js","sources":["../../../src/data/cells/Timestamp.tsx"],"sourcesContent":["import { cn } from \"../../lib/utils\";\nimport { formatTimestamp, parseTimestamp, type TimestampFormat } from \"./timestamp-format\";\n\nexport type TimestampProps = {\n value: unknown;\n format: TimestampFormat;\n showTitleOnHover?: boolean;\n className?: string;\n};\n\nexport function Timestamp({ value, format, showTitleOnHover = true, className }: TimestampProps) {\n const parsed = parseTimestamp(value);\n if (!parsed) return <span className={cn(\"text-muted-foreground\", className)}>—</span>;\n\n const display = formatTimestamp(parsed, format);\n const title = showTitleOnHover ? parsed.toISOString() : undefined;\n\n return (\n <span\n className={cn(\"tabular-nums whitespace-nowrap text-muted-foreground\", className)}\n title={title}\n >\n {display}\n </span>\n );\n}\n"],"names":[],"mappings":";;;AAUO,SAAS,UAAU,EAAE,OAAO,QAAQ,mBAAmB,MAAM,aAA6B;AAC/F,QAAM,SAAS,eAAe,KAAK;AACnC,MAAI,CAAC,OAAQ,QAAO,oBAAC,QAAA,EAAK,WAAW,GAAG,yBAAyB,SAAS,GAAG,UAAA,IAAA,CAAC;AAE9E,QAAM,UAAU,gBAAgB,QAAQ,MAAM;AAC9C,QAAM,QAAQ,mBAAmB,OAAO,YAAA,IAAgB;AAExD,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,GAAG,wDAAwD,SAAS;AAAA,MAC/E;AAAA,MAEC,UAAA;AAAA,IAAA;AAAA,EAAA;AAGP;"}
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const react = require("react");
4
+ function normalizeTags(value, separator = "=") {
5
+ if (value == null) return [];
6
+ if (Array.isArray(value)) {
7
+ return value.map((entry) => normalizeOne(entry, separator)).filter((tag) => tag.value !== "");
8
+ }
9
+ if (typeof value === "object") {
10
+ return Object.entries(value).map(([key, raw]) => {
11
+ if (raw == null) return null;
12
+ const valueStr = String(raw).trim();
13
+ if (!valueStr) return null;
14
+ return {
15
+ key,
16
+ value: valueStr,
17
+ display: `${key}${separator}${valueStr}`,
18
+ token: `${key}${separator}${valueStr}`
19
+ };
20
+ }).filter((tag) => tag !== null);
21
+ }
22
+ return [];
23
+ }
24
+ function normalizeOne(entry, separator) {
25
+ if (typeof entry === "string") {
26
+ const trimmed = entry.trim();
27
+ const eq = trimmed.indexOf("=");
28
+ const colon = trimmed.indexOf(":");
29
+ const splitAt = eq >= 0 && (colon < 0 || eq < colon) ? eq : colon >= 0 && colon < trimmed.length - 1 ? colon : -1;
30
+ if (splitAt > 0) {
31
+ const key2 = trimmed.slice(0, splitAt);
32
+ const value2 = trimmed.slice(splitAt + 1);
33
+ return {
34
+ key: key2,
35
+ value: value2,
36
+ display: `${key2}${separator}${value2}`,
37
+ token: `${key2}${separator}${value2}`
38
+ };
39
+ }
40
+ return { value: trimmed, display: trimmed, token: trimmed };
41
+ }
42
+ const key = "key" in entry && typeof entry.key === "string" ? entry.key : "name" in entry && typeof entry.name === "string" ? entry.name : void 0;
43
+ const value = String(entry.value ?? "").trim();
44
+ if (key) {
45
+ return {
46
+ key,
47
+ value,
48
+ display: `${key}${separator}${value}`,
49
+ token: `${key}${separator}${value}`
50
+ };
51
+ }
52
+ return { value, display: value, token: value };
53
+ }
54
+ function tagFilterTokens(value, separator = "=") {
55
+ return normalizeTags(value, separator).map((tag) => tag.token);
56
+ }
57
+ function splitTagToken(token, separator = "=") {
58
+ const idx = token.indexOf(separator);
59
+ if (idx <= 0) return { key: "", value: token };
60
+ return {
61
+ key: token.slice(0, idx),
62
+ value: token.slice(idx + separator.length)
63
+ };
64
+ }
65
+ const noop = {
66
+ getMode: () => "neutral",
67
+ toggleInclude: () => {
68
+ },
69
+ toggleExclude: () => {
70
+ }
71
+ };
72
+ const TagActionsContext = react.createContext(noop);
73
+ function useTagActions() {
74
+ return react.useContext(TagActionsContext);
75
+ }
76
+ function tagActionsFromRecord(value, onChange) {
77
+ return {
78
+ getMode: (token) => value[token] ?? "neutral",
79
+ toggleInclude: (token) => {
80
+ const next = { ...value };
81
+ if (next[token] === "include") delete next[token];
82
+ else next[token] = "include";
83
+ onChange(next);
84
+ },
85
+ toggleExclude: (token) => {
86
+ const next = { ...value };
87
+ if (next[token] === "exclude") delete next[token];
88
+ else next[token] = "exclude";
89
+ onChange(next);
90
+ }
91
+ };
92
+ }
93
+ function useTagActionsValue(value, onChange) {
94
+ return react.useMemo(() => tagActionsFromRecord(value, onChange), [value, onChange]);
95
+ }
96
+ exports.TagActionsContext = TagActionsContext;
97
+ exports.normalizeTags = normalizeTags;
98
+ exports.splitTagToken = splitTagToken;
99
+ exports.tagActionsFromRecord = tagActionsFromRecord;
100
+ exports.tagFilterTokens = tagFilterTokens;
101
+ exports.useTagActions = useTagActions;
102
+ exports.useTagActionsValue = useTagActionsValue;
103
+ //# sourceMappingURL=tag-utils.cjs.map