@flanksource/clicky-ui 0.2.13 → 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 (466) 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 +1 -2
  38. package/dist/components/SecretKeySelector.cjs.map +1 -1
  39. package/dist/components/SecretKeySelector.d.ts +5 -3
  40. package/dist/components/SecretKeySelector.d.ts.map +1 -1
  41. package/dist/components/SecretKeySelector.js +2 -3
  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/TimeseriesCoreBars.cjs +8 -1
  179. package/dist/data/TimeseriesCoreBars.cjs.map +1 -1
  180. package/dist/data/TimeseriesCoreBars.d.ts.map +1 -1
  181. package/dist/data/TimeseriesCoreBars.js +8 -1
  182. package/dist/data/TimeseriesCoreBars.js.map +1 -1
  183. package/dist/data/TimeseriesPanel.axes.cjs.map +1 -1
  184. package/dist/data/TimeseriesPanel.axes.js.map +1 -1
  185. package/dist/data/TreeNode.cjs +13 -7
  186. package/dist/data/TreeNode.cjs.map +1 -1
  187. package/dist/data/TreeNode.d.ts.map +1 -1
  188. package/dist/data/TreeNode.js +13 -7
  189. package/dist/data/TreeNode.js.map +1 -1
  190. package/dist/data/badge-variants.cjs +85 -0
  191. package/dist/data/badge-variants.cjs.map +1 -0
  192. package/dist/data/badge-variants.d.ts +6 -0
  193. package/dist/data/badge-variants.d.ts.map +1 -0
  194. package/dist/data/badge-variants.js +85 -0
  195. package/dist/data/badge-variants.js.map +1 -0
  196. package/dist/data/cache-browser/CacheBrowser.cjs +59 -0
  197. package/dist/data/cache-browser/CacheBrowser.cjs.map +1 -0
  198. package/dist/data/cache-browser/CacheBrowser.d.ts +26 -0
  199. package/dist/data/cache-browser/CacheBrowser.d.ts.map +1 -0
  200. package/dist/data/cache-browser/CacheBrowser.js +59 -0
  201. package/dist/data/cache-browser/CacheBrowser.js.map +1 -0
  202. package/dist/data/cache-browser/CacheDetailPanel.cjs +193 -0
  203. package/dist/data/cache-browser/CacheDetailPanel.cjs.map +1 -0
  204. package/dist/data/cache-browser/CacheDetailPanel.d.ts +20 -0
  205. package/dist/data/cache-browser/CacheDetailPanel.d.ts.map +1 -0
  206. package/dist/data/cache-browser/CacheDetailPanel.js +193 -0
  207. package/dist/data/cache-browser/CacheDetailPanel.js.map +1 -0
  208. package/dist/data/cache-browser/CacheStatsOverview.cjs +126 -0
  209. package/dist/data/cache-browser/CacheStatsOverview.cjs.map +1 -0
  210. package/dist/data/cache-browser/CacheStatsOverview.d.ts +17 -0
  211. package/dist/data/cache-browser/CacheStatsOverview.d.ts.map +1 -0
  212. package/dist/data/cache-browser/CacheStatsOverview.js +126 -0
  213. package/dist/data/cache-browser/CacheStatsOverview.js.map +1 -0
  214. package/dist/data/cache-browser/CacheTree.cjs +189 -0
  215. package/dist/data/cache-browser/CacheTree.cjs.map +1 -0
  216. package/dist/data/cache-browser/CacheTree.d.ts +27 -0
  217. package/dist/data/cache-browser/CacheTree.d.ts.map +1 -0
  218. package/dist/data/cache-browser/CacheTree.js +189 -0
  219. package/dist/data/cache-browser/CacheTree.js.map +1 -0
  220. package/dist/data/cache-browser/CacheValue.cjs +86 -0
  221. package/dist/data/cache-browser/CacheValue.cjs.map +1 -0
  222. package/dist/data/cache-browser/CacheValue.d.ts +11 -0
  223. package/dist/data/cache-browser/CacheValue.d.ts.map +1 -0
  224. package/dist/data/cache-browser/CacheValue.js +86 -0
  225. package/dist/data/cache-browser/CacheValue.js.map +1 -0
  226. package/dist/data/cache-browser/adapter.cjs +52 -0
  227. package/dist/data/cache-browser/adapter.cjs.map +1 -0
  228. package/dist/data/cache-browser/adapter.d.ts +48 -0
  229. package/dist/data/cache-browser/adapter.d.ts.map +1 -0
  230. package/dist/data/cache-browser/adapter.js +52 -0
  231. package/dist/data/cache-browser/adapter.js.map +1 -0
  232. package/dist/data/cache-browser/api.cjs +42 -0
  233. package/dist/data/cache-browser/api.cjs.map +1 -0
  234. package/dist/data/cache-browser/api.d.ts +33 -0
  235. package/dist/data/cache-browser/api.d.ts.map +1 -0
  236. package/dist/data/cache-browser/api.js +42 -0
  237. package/dist/data/cache-browser/api.js.map +1 -0
  238. package/dist/data/cache-browser/index.d.ts +9 -0
  239. package/dist/data/cache-browser/index.d.ts.map +1 -0
  240. package/dist/data/cache-browser/types.cjs +7 -0
  241. package/dist/data/cache-browser/types.cjs.map +1 -0
  242. package/dist/data/cache-browser/types.d.ts +78 -0
  243. package/dist/data/cache-browser/types.d.ts.map +1 -0
  244. package/dist/data/cache-browser/types.js +7 -0
  245. package/dist/data/cache-browser/types.js.map +1 -0
  246. package/dist/data/cells/TagList.cjs +4 -101
  247. package/dist/data/cells/TagList.cjs.map +1 -1
  248. package/dist/data/cells/TagList.d.ts +1 -49
  249. package/dist/data/cells/TagList.d.ts.map +1 -1
  250. package/dist/data/cells/TagList.js +3 -100
  251. package/dist/data/cells/TagList.js.map +1 -1
  252. package/dist/data/cells/Timestamp.cjs +3 -192
  253. package/dist/data/cells/Timestamp.cjs.map +1 -1
  254. package/dist/data/cells/Timestamp.d.ts +1 -50
  255. package/dist/data/cells/Timestamp.d.ts.map +1 -1
  256. package/dist/data/cells/Timestamp.js +2 -191
  257. package/dist/data/cells/Timestamp.js.map +1 -1
  258. package/dist/data/cells/tag-utils.cjs +103 -0
  259. package/dist/data/cells/tag-utils.cjs.map +1 -0
  260. package/dist/data/cells/tag-utils.d.ts +51 -0
  261. package/dist/data/cells/tag-utils.d.ts.map +1 -0
  262. package/dist/data/cells/tag-utils.js +103 -0
  263. package/dist/data/cells/tag-utils.js.map +1 -0
  264. package/dist/data/cells/timestamp-format.cjs +193 -0
  265. package/dist/data/cells/timestamp-format.cjs.map +1 -0
  266. package/dist/data/cells/timestamp-format.d.ts +51 -0
  267. package/dist/data/cells/timestamp-format.d.ts.map +1 -0
  268. package/dist/data/cells/timestamp-format.js +193 -0
  269. package/dist/data/cells/timestamp-format.js.map +1 -0
  270. package/dist/data/chat/Chat.cjs +48 -0
  271. package/dist/data/chat/Chat.cjs.map +1 -0
  272. package/dist/data/chat/Chat.d.ts +26 -0
  273. package/dist/data/chat/Chat.d.ts.map +1 -0
  274. package/dist/data/chat/Chat.fixtures.d.ts +6 -0
  275. package/dist/data/chat/Chat.fixtures.d.ts.map +1 -0
  276. package/dist/data/chat/Chat.js +48 -0
  277. package/dist/data/chat/Chat.js.map +1 -0
  278. package/dist/data/chat/Conversation.cjs +34 -0
  279. package/dist/data/chat/Conversation.cjs.map +1 -0
  280. package/dist/data/chat/Conversation.d.ts +11 -0
  281. package/dist/data/chat/Conversation.d.ts.map +1 -0
  282. package/dist/data/chat/Conversation.js +34 -0
  283. package/dist/data/chat/Conversation.js.map +1 -0
  284. package/dist/data/chat/Message.cjs +44 -0
  285. package/dist/data/chat/Message.cjs.map +1 -0
  286. package/dist/data/chat/Message.d.ts +10 -0
  287. package/dist/data/chat/Message.d.ts.map +1 -0
  288. package/dist/data/chat/Message.js +44 -0
  289. package/dist/data/chat/Message.js.map +1 -0
  290. package/dist/data/chat/PromptInput.cjs +61 -0
  291. package/dist/data/chat/PromptInput.cjs.map +1 -0
  292. package/dist/data/chat/PromptInput.d.ts +16 -0
  293. package/dist/data/chat/PromptInput.d.ts.map +1 -0
  294. package/dist/data/chat/PromptInput.js +61 -0
  295. package/dist/data/chat/PromptInput.js.map +1 -0
  296. package/dist/data/chat/ToolCall.cjs +92 -0
  297. package/dist/data/chat/ToolCall.cjs.map +1 -0
  298. package/dist/data/chat/ToolCall.d.ts +14 -0
  299. package/dist/data/chat/ToolCall.d.ts.map +1 -0
  300. package/dist/data/chat/ToolCall.js +92 -0
  301. package/dist/data/chat/ToolCall.js.map +1 -0
  302. package/dist/data/chat/clickyOperationsToTools.cjs +73 -0
  303. package/dist/data/chat/clickyOperationsToTools.cjs.map +1 -0
  304. package/dist/data/chat/clickyOperationsToTools.d.ts +10 -0
  305. package/dist/data/chat/clickyOperationsToTools.d.ts.map +1 -0
  306. package/dist/data/chat/clickyOperationsToTools.js +73 -0
  307. package/dist/data/chat/clickyOperationsToTools.js.map +1 -0
  308. package/dist/data/chat/index.d.ts +8 -0
  309. package/dist/data/chat/index.d.ts.map +1 -0
  310. package/dist/data/chat/types.cjs +18 -0
  311. package/dist/data/chat/types.cjs.map +1 -0
  312. package/dist/data/chat/types.d.ts +41 -0
  313. package/dist/data/chat/types.d.ts.map +1 -0
  314. package/dist/data/chat/types.js +18 -0
  315. package/dist/data/chat/types.js.map +1 -0
  316. package/dist/data/data-table-utils.cjs +55 -0
  317. package/dist/data/data-table-utils.cjs.map +1 -0
  318. package/dist/data/data-table-utils.d.ts +24 -0
  319. package/dist/data/data-table-utils.d.ts.map +1 -0
  320. package/dist/data/data-table-utils.js +55 -0
  321. package/dist/data/data-table-utils.js.map +1 -0
  322. package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs +2 -1
  323. package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs.map +1 -1
  324. package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts.map +1 -1
  325. package/dist/data/diagnostics/DiagnosticsDetailPanel.js +3 -2
  326. package/dist/data/diagnostics/DiagnosticsDetailPanel.js.map +1 -1
  327. package/dist/data/diagnostics/GoroutineCard.cjs +3 -22
  328. package/dist/data/diagnostics/GoroutineCard.cjs.map +1 -1
  329. package/dist/data/diagnostics/GoroutineCard.d.ts +0 -2
  330. package/dist/data/diagnostics/GoroutineCard.d.ts.map +1 -1
  331. package/dist/data/diagnostics/GoroutineCard.js +2 -21
  332. package/dist/data/diagnostics/GoroutineCard.js.map +1 -1
  333. package/dist/data/diagnostics/ThreadCard.cjs +3 -38
  334. package/dist/data/diagnostics/ThreadCard.cjs.map +1 -1
  335. package/dist/data/diagnostics/ThreadCard.d.ts +0 -2
  336. package/dist/data/diagnostics/ThreadCard.d.ts.map +1 -1
  337. package/dist/data/diagnostics/ThreadCard.js +2 -37
  338. package/dist/data/diagnostics/ThreadCard.js.map +1 -1
  339. package/dist/data/diagnostics/state-styles.cjs +59 -0
  340. package/dist/data/diagnostics/state-styles.cjs.map +1 -0
  341. package/dist/data/diagnostics/state-styles.d.ts +5 -0
  342. package/dist/data/diagnostics/state-styles.d.ts.map +1 -0
  343. package/dist/data/diagnostics/state-styles.js +59 -0
  344. package/dist/data/diagnostics/state-styles.js.map +1 -0
  345. package/dist/data/logs-normalize.cjs +166 -0
  346. package/dist/data/logs-normalize.cjs.map +1 -0
  347. package/dist/data/logs-normalize.d.ts +16 -0
  348. package/dist/data/logs-normalize.d.ts.map +1 -0
  349. package/dist/data/logs-normalize.js +166 -0
  350. package/dist/data/logs-normalize.js.map +1 -0
  351. package/dist/data/task-status.cjs +19 -19
  352. package/dist/data/task-status.cjs.map +1 -1
  353. package/dist/data/task-status.js +19 -19
  354. package/dist/data/task-status.js.map +1 -1
  355. package/dist/data/version-info.cjs +3 -3
  356. package/dist/data/version-info.js +3 -3
  357. package/dist/data.cjs +43 -18
  358. package/dist/data.cjs.map +1 -1
  359. package/dist/data.d.ts +11 -5
  360. package/dist/data.d.ts.map +1 -1
  361. package/dist/data.js +30 -5
  362. package/dist/data.js.map +1 -1
  363. package/dist/hooks/density-provider.cjs +38 -0
  364. package/dist/hooks/density-provider.cjs.map +1 -0
  365. package/dist/hooks/density-provider.d.ts +20 -0
  366. package/dist/hooks/density-provider.d.ts.map +1 -0
  367. package/dist/hooks/density-provider.js +38 -0
  368. package/dist/hooks/density-provider.js.map +1 -0
  369. package/dist/hooks/theme-provider.cjs +43 -0
  370. package/dist/hooks/theme-provider.cjs.map +1 -0
  371. package/dist/hooks/theme-provider.d.ts +9 -0
  372. package/dist/hooks/theme-provider.d.ts.map +1 -0
  373. package/dist/hooks/theme-provider.js +43 -0
  374. package/dist/hooks/theme-provider.js.map +1 -0
  375. package/dist/hooks/use-density.cjs +8 -37
  376. package/dist/hooks/use-density.cjs.map +1 -1
  377. package/dist/hooks/use-density.d.ts +5 -20
  378. package/dist/hooks/use-density.d.ts.map +1 -1
  379. package/dist/hooks/use-density.js +9 -38
  380. package/dist/hooks/use-density.js.map +1 -1
  381. package/dist/hooks/use-theme.cjs +10 -43
  382. package/dist/hooks/use-theme.cjs.map +1 -1
  383. package/dist/hooks/use-theme.d.ts +6 -9
  384. package/dist/hooks/use-theme.d.ts.map +1 -1
  385. package/dist/hooks/use-theme.js +11 -44
  386. package/dist/hooks/use-theme.js.map +1 -1
  387. package/dist/hooks.cjs +5 -2
  388. package/dist/hooks.cjs.map +1 -1
  389. package/dist/hooks.d.ts +4 -2
  390. package/dist/hooks.d.ts.map +1 -1
  391. package/dist/hooks.js +5 -2
  392. package/dist/hooks.js.map +1 -1
  393. package/dist/icons/changeIconAliases.cjs +13 -13
  394. package/dist/icons/changeIconAliases.cjs.map +1 -1
  395. package/dist/icons/changeIconAliases.d.ts.map +1 -1
  396. package/dist/icons/changeIconAliases.js +13 -13
  397. package/dist/icons/changeIconAliases.js.map +1 -1
  398. package/dist/index.cjs +71 -30
  399. package/dist/index.cjs.map +1 -1
  400. package/dist/index.js +53 -12
  401. package/dist/index.js.map +1 -1
  402. package/dist/overlay/DropdownMenu.cjs +2 -0
  403. package/dist/overlay/DropdownMenu.cjs.map +1 -1
  404. package/dist/overlay/DropdownMenu.d.ts +3 -1
  405. package/dist/overlay/DropdownMenu.d.ts.map +1 -1
  406. package/dist/overlay/DropdownMenu.js +2 -0
  407. package/dist/overlay/DropdownMenu.js.map +1 -1
  408. package/dist/overlay/Modal.cjs +11 -4
  409. package/dist/overlay/Modal.cjs.map +1 -1
  410. package/dist/overlay/Modal.d.ts +1 -1
  411. package/dist/overlay/Modal.d.ts.map +1 -1
  412. package/dist/overlay/Modal.js +11 -4
  413. package/dist/overlay/Modal.js.map +1 -1
  414. package/dist/overlay/modalStack.cjs +35 -0
  415. package/dist/overlay/modalStack.cjs.map +1 -0
  416. package/dist/overlay/modalStack.d.ts +13 -0
  417. package/dist/overlay/modalStack.d.ts.map +1 -0
  418. package/dist/overlay/modalStack.js +35 -0
  419. package/dist/overlay/modalStack.js.map +1 -0
  420. package/dist/rpc/AcceptPicker.cjs +2 -18
  421. package/dist/rpc/AcceptPicker.cjs.map +1 -1
  422. package/dist/rpc/AcceptPicker.d.ts +1 -41
  423. package/dist/rpc/AcceptPicker.d.ts.map +1 -1
  424. package/dist/rpc/AcceptPicker.js +2 -18
  425. package/dist/rpc/AcceptPicker.js.map +1 -1
  426. package/dist/rpc/CommandOutput.cjs +1 -1
  427. package/dist/rpc/CommandOutput.cjs.map +1 -1
  428. package/dist/rpc/CommandOutput.js +1 -1
  429. package/dist/rpc/CommandOutput.js.map +1 -1
  430. package/dist/rpc/EndpointList.cjs +1 -1
  431. package/dist/rpc/EndpointList.cjs.map +1 -1
  432. package/dist/rpc/EndpointList.js +1 -1
  433. package/dist/rpc/EndpointList.js.map +1 -1
  434. package/dist/rpc/OperationCatalog.cjs +23 -41
  435. package/dist/rpc/OperationCatalog.cjs.map +1 -1
  436. package/dist/rpc/OperationCatalog.d.ts.map +1 -1
  437. package/dist/rpc/OperationCatalog.js +24 -42
  438. package/dist/rpc/OperationCatalog.js.map +1 -1
  439. package/dist/rpc/OperationCommandPage.cjs.map +1 -1
  440. package/dist/rpc/OperationCommandPage.d.ts.map +1 -1
  441. package/dist/rpc/OperationCommandPage.js.map +1 -1
  442. package/dist/rpc/accept-options.cjs +20 -0
  443. package/dist/rpc/accept-options.cjs.map +1 -0
  444. package/dist/rpc/accept-options.d.ts +42 -0
  445. package/dist/rpc/accept-options.d.ts.map +1 -0
  446. package/dist/rpc/accept-options.js +20 -0
  447. package/dist/rpc/accept-options.js.map +1 -0
  448. package/dist/rpc/classify.cjs +15 -4
  449. package/dist/rpc/classify.cjs.map +1 -1
  450. package/dist/rpc/classify.d.ts.map +1 -1
  451. package/dist/rpc/classify.js +15 -4
  452. package/dist/rpc/classify.js.map +1 -1
  453. package/dist/rpc/clickyMetadata.cjs +13 -3
  454. package/dist/rpc/clickyMetadata.cjs.map +1 -1
  455. package/dist/rpc/clickyMetadata.d.ts +2 -0
  456. package/dist/rpc/clickyMetadata.d.ts.map +1 -1
  457. package/dist/rpc/clickyMetadata.js +14 -4
  458. package/dist/rpc/clickyMetadata.js.map +1 -1
  459. package/dist/rpc.cjs +3 -2
  460. package/dist/rpc.cjs.map +1 -1
  461. package/dist/rpc.d.ts +2 -1
  462. package/dist/rpc.d.ts.map +1 -1
  463. package/dist/rpc.js +2 -1
  464. package/dist/rpc.js.map +1 -1
  465. package/dist/styles.css +1 -1
  466. package/package.json +16 -1
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
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
+ }
186
+ exports.chooseTimestampFormat = chooseTimestampFormat;
187
+ exports.formatDateTimeRelative = formatDateTimeRelative;
188
+ exports.formatRelativeTime = formatRelativeTime;
189
+ exports.formatTimestamp = formatTimestamp;
190
+ exports.modeToFormat = modeToFormat;
191
+ exports.parseTimestamp = parseTimestamp;
192
+ exports.resolveDateMath = resolveDateMath;
193
+ //# sourceMappingURL=timestamp-format.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timestamp-format.cjs","sources":["../../../src/data/cells/timestamp-format.ts"],"sourcesContent":["import 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"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
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;
51
+ //# sourceMappingURL=timestamp-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timestamp-format.d.ts","sourceRoot":"","sources":["../../../src/data/cells/timestamp-format.ts"],"names":[],"mappings":"AAAA,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"}
@@ -0,0 +1,193 @@
1
+ function parseTimestamp(value) {
2
+ if (value == null) return null;
3
+ if (value instanceof Date) return Number.isNaN(value.getTime()) ? null : value;
4
+ if (typeof value === "number") {
5
+ const ms = value < 1e12 ? value * 1e3 : value;
6
+ const d = new Date(ms);
7
+ return Number.isNaN(d.getTime()) ? null : d;
8
+ }
9
+ if (typeof value === "string") {
10
+ const trimmed = value.trim();
11
+ if (!trimmed) return null;
12
+ const d = new Date(trimmed);
13
+ return Number.isNaN(d.getTime()) ? null : d;
14
+ }
15
+ return null;
16
+ }
17
+ const UNIT_MS = {
18
+ s: 1e3,
19
+ m: 6e4,
20
+ h: 36e5,
21
+ d: 864e5,
22
+ w: 6048e5
23
+ };
24
+ const RELATIVE_PATTERN = /^now\s*([+-])\s*(\d+)\s*([smhdwMqy])$/;
25
+ const ANCHORED_PATTERN = /^now\/([wMqy])(?:\s*([+-])\s*(\d+)\s*([wMqy]))?$/;
26
+ function resolveDateMath(value, now = /* @__PURE__ */ new Date()) {
27
+ if (value == null) return null;
28
+ if (typeof value === "string") {
29
+ const trimmed = value.trim();
30
+ if (!trimmed) return null;
31
+ if (trimmed.toLowerCase() === "now") return new Date(now.getTime());
32
+ const anchoredMatch = trimmed.match(ANCHORED_PATTERN);
33
+ if (anchoredMatch) {
34
+ const [, anchor, sign, amount, unit] = anchoredMatch;
35
+ let anchored = startOfPeriod(now, anchor);
36
+ if (sign && amount && unit) {
37
+ anchored = addPeriod(anchored, unit, Number(amount) * (sign === "-" ? -1 : 1));
38
+ }
39
+ return anchored;
40
+ }
41
+ const match = trimmed.match(RELATIVE_PATTERN);
42
+ if (match) {
43
+ const [, sign, amount, unit] = match;
44
+ const calendarUnit = unit;
45
+ if (isCalendarUnit(calendarUnit)) {
46
+ return addPeriod(now, calendarUnit, Number(amount) * (sign === "-" ? -1 : 1));
47
+ }
48
+ const unitMs = UNIT_MS[calendarUnit.toLowerCase()];
49
+ if (!unitMs) return null;
50
+ const delta = Number(amount) * unitMs * (sign === "-" ? -1 : 1);
51
+ return new Date(now.getTime() + delta);
52
+ }
53
+ }
54
+ return parseTimestamp(value);
55
+ }
56
+ function isCalendarUnit(unit) {
57
+ return unit === "M" || unit === "q" || unit === "y";
58
+ }
59
+ function startOfPeriod(date, unit) {
60
+ const year = date.getUTCFullYear();
61
+ const month = date.getUTCMonth();
62
+ const day = date.getUTCDate();
63
+ if (unit === "w") {
64
+ const start = new Date(Date.UTC(year, month, day));
65
+ const dayOfWeek = start.getUTCDay();
66
+ const daysSinceMonday = (dayOfWeek + 6) % 7;
67
+ start.setUTCDate(start.getUTCDate() - daysSinceMonday);
68
+ return start;
69
+ }
70
+ if (unit === "M") return new Date(Date.UTC(year, month, 1));
71
+ if (unit === "q") return new Date(Date.UTC(year, Math.floor(month / 3) * 3, 1));
72
+ if (unit === "y") return new Date(Date.UTC(year, 0, 1));
73
+ return new Date(date.getTime());
74
+ }
75
+ function addPeriod(date, unit, amount) {
76
+ const next = new Date(date.getTime());
77
+ if (unit === "w") {
78
+ next.setUTCDate(next.getUTCDate() + amount * 7);
79
+ } else if (unit === "M") {
80
+ next.setUTCMonth(next.getUTCMonth() + amount);
81
+ } else if (unit === "q") {
82
+ next.setUTCMonth(next.getUTCMonth() + amount * 3);
83
+ } else if (unit === "y") {
84
+ next.setUTCFullYear(next.getUTCFullYear() + amount);
85
+ } else {
86
+ const unitMs = UNIT_MS[unit.toLowerCase()];
87
+ if (unitMs) next.setTime(next.getTime() + amount * unitMs);
88
+ }
89
+ return next;
90
+ }
91
+ const MS_PER_MINUTE = 6e4;
92
+ const MS_PER_DAY = 864e5;
93
+ function chooseTimestampFormat(values) {
94
+ if (values.length === 0) return "iso";
95
+ let min = Infinity;
96
+ let max = -Infinity;
97
+ for (const d of values) {
98
+ const t = d.getTime();
99
+ if (t < min) min = t;
100
+ if (t > max) max = t;
101
+ }
102
+ const span = max - min;
103
+ if (span <= MS_PER_MINUTE) return "relative";
104
+ const minDate = new Date(min);
105
+ const maxDate = new Date(max);
106
+ if (minDate.getFullYear() === maxDate.getFullYear() && minDate.getMonth() === maxDate.getMonth() && minDate.getDate() === maxDate.getDate()) {
107
+ return "time";
108
+ }
109
+ if (minDate.getFullYear() === maxDate.getFullYear() && span <= MS_PER_DAY * 365) {
110
+ return "short";
111
+ }
112
+ return "iso";
113
+ }
114
+ function formatTimestamp(date, format, now = /* @__PURE__ */ new Date()) {
115
+ switch (format) {
116
+ case "relative":
117
+ return formatRelativeTime(date, now);
118
+ case "time":
119
+ return date.toLocaleTimeString(void 0, {
120
+ hour: "2-digit",
121
+ minute: "2-digit",
122
+ second: "2-digit"
123
+ });
124
+ case "short":
125
+ return date.toLocaleString(void 0, {
126
+ month: "short",
127
+ day: "numeric",
128
+ hour: "2-digit",
129
+ minute: "2-digit"
130
+ });
131
+ case "iso":
132
+ default:
133
+ return formatIso(date);
134
+ }
135
+ }
136
+ function formatIso(date) {
137
+ const yyyy = date.getFullYear();
138
+ const mm = String(date.getMonth() + 1).padStart(2, "0");
139
+ const dd = String(date.getDate()).padStart(2, "0");
140
+ const hh = String(date.getHours()).padStart(2, "0");
141
+ const min = String(date.getMinutes()).padStart(2, "0");
142
+ return `${yyyy}-${mm}-${dd} ${hh}:${min}`;
143
+ }
144
+ function formatRelativeTime(date, now = /* @__PURE__ */ new Date()) {
145
+ const diffMs = now.getTime() - date.getTime();
146
+ const future = diffMs < 0;
147
+ const abs = Math.abs(diffMs);
148
+ const sec = Math.round(abs / 1e3);
149
+ let value;
150
+ if (sec < 1) value = "just now";
151
+ else if (sec < 60) value = `${sec}s`;
152
+ else if (sec < 3600) value = `${Math.round(sec / 60)}m`;
153
+ else if (sec < 86400) value = `${Math.round(sec / 3600)}h`;
154
+ else value = `${Math.round(sec / 86400)}d`;
155
+ if (value === "just now") return value;
156
+ return future ? `in ${value}` : `${value} ago`;
157
+ }
158
+ function formatDateTimeRelative(value, now = /* @__PURE__ */ new Date()) {
159
+ const parsed = parseTimestamp(value);
160
+ if (!parsed) return typeof value === "string" ? value : "";
161
+ const absolute = parsed.toLocaleString(void 0, {
162
+ year: "numeric",
163
+ month: "short",
164
+ day: "numeric",
165
+ hour: "2-digit",
166
+ minute: "2-digit"
167
+ });
168
+ const relative = formatRelativeTime(parsed, now);
169
+ return relative === "just now" ? absolute : `${absolute} (${relative})`;
170
+ }
171
+ function modeToFormat(mode, dataFormat) {
172
+ switch (mode) {
173
+ case "absolute":
174
+ return "iso";
175
+ case "relative":
176
+ return "relative";
177
+ case "time":
178
+ return "time";
179
+ case "auto":
180
+ default:
181
+ return dataFormat;
182
+ }
183
+ }
184
+ export {
185
+ chooseTimestampFormat,
186
+ formatDateTimeRelative,
187
+ formatRelativeTime,
188
+ formatTimestamp,
189
+ modeToFormat,
190
+ parseTimestamp,
191
+ resolveDateMath
192
+ };
193
+ //# sourceMappingURL=timestamp-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timestamp-format.js","sources":["../../../src/data/cells/timestamp-format.ts"],"sourcesContent":["import 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"],"names":[],"mappings":"AAgCO,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;"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const react = require("react");
5
+ const react$1 = require("@ai-sdk/react");
6
+ const ai = require("ai");
7
+ const utils = require("../../lib/utils.cjs");
8
+ const Conversation = require("./Conversation.cjs");
9
+ const PromptInput = require("./PromptInput.cjs");
10
+ function Chat({
11
+ api = "/api/chat",
12
+ model,
13
+ reasoningEffort,
14
+ body,
15
+ transport,
16
+ initialMessages,
17
+ placeholder,
18
+ emptyState,
19
+ className
20
+ }) {
21
+ const resolvedTransport = react.useMemo(() => {
22
+ if (transport) {
23
+ return transport;
24
+ }
25
+ return new ai.DefaultChatTransport({
26
+ api,
27
+ body: { ...body, ...model ? { model } : {}, ...reasoningEffort ? { reasoningEffort } : {} }
28
+ });
29
+ }, [transport, api, body, model, reasoningEffort]);
30
+ const { messages, sendMessage, status, stop } = react$1.useChat({
31
+ transport: resolvedTransport,
32
+ ...initialMessages ? { messages: initialMessages } : {}
33
+ });
34
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: utils.cn("flex h-full flex-col", className), children: [
35
+ /* @__PURE__ */ jsxRuntime.jsx(Conversation.Conversation, { messages, emptyState }),
36
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-4 pt-0", children: /* @__PURE__ */ jsxRuntime.jsx(
37
+ PromptInput.PromptInput,
38
+ {
39
+ status,
40
+ onStop: () => void stop(),
41
+ placeholder,
42
+ onSubmit: (text) => void sendMessage({ text })
43
+ }
44
+ ) })
45
+ ] });
46
+ }
47
+ exports.Chat = Chat;
48
+ //# sourceMappingURL=Chat.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Chat.cjs","sources":["../../../src/data/chat/Chat.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport { useChat } from \"@ai-sdk/react\";\nimport { DefaultChatTransport, type ChatTransport, type UIMessage } from \"ai\";\nimport { cn } from \"../../lib/utils\";\nimport { Conversation } from \"./Conversation\";\nimport { PromptInput } from \"./PromptInput\";\n\nexport type ChatProps = {\n /** Endpoint that speaks the AI SDK v6 UI Message Stream protocol.\n * Ignored when `transport` is supplied. Defaults to \"/api/chat\". */\n api?: string;\n /** Selected `provider/model` id, forwarded in the request body. */\n model?: string;\n /** Reasoning effort (`low` | `medium` | `high`), forwarded in the request body. */\n reasoningEffort?: string;\n /** Extra fields merged into every request body (e.g. tool scoping). */\n body?: Record<string, unknown>;\n /** Pre-built transport. Supply a mock in stories/tests; otherwise a\n * DefaultChatTransport is constructed from `api`/`body`. */\n transport?: ChatTransport<UIMessage>;\n /** Initial messages to seed the conversation. */\n initialMessages?: UIMessage[];\n placeholder?: string;\n emptyState?: React.ReactNode;\n className?: string;\n};\n\n/** Self-contained AI chat: a streaming conversation log over a prompt input,\n * driven by the AI SDK `useChat` hook against a v6-compatible `/api/chat`. The\n * backend owns model selection and tool execution; `model`, `reasoningEffort`\n * and `body` are forwarded in the request body for it to honor. */\nexport function Chat({\n api = \"/api/chat\",\n model,\n reasoningEffort,\n body,\n transport,\n initialMessages,\n placeholder,\n emptyState,\n className,\n}: ChatProps) {\n const resolvedTransport = useMemo<ChatTransport<UIMessage>>(() => {\n if (transport) {\n return transport;\n }\n return new DefaultChatTransport({\n api,\n body: { ...body, ...(model ? { model } : {}), ...(reasoningEffort ? { reasoningEffort } : {}) },\n });\n }, [transport, api, body, model, reasoningEffort]);\n\n const { messages, sendMessage, status, stop } = useChat<UIMessage>({\n transport: resolvedTransport,\n ...(initialMessages ? { messages: initialMessages } : {}),\n });\n\n return (\n <div className={cn(\"flex h-full flex-col\", className)}>\n <Conversation messages={messages} emptyState={emptyState} />\n <div className=\"p-4 pt-0\">\n <PromptInput\n status={status}\n onStop={() => void stop()}\n placeholder={placeholder}\n onSubmit={(text) => void sendMessage({ text })}\n />\n </div>\n </div>\n );\n}\n"],"names":["useMemo","DefaultChatTransport","useChat","cn","jsx","Conversation","PromptInput"],"mappings":";;;;;;;;;AA+BO,SAAS,KAAK;AAAA,EACnB,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAc;AACZ,QAAM,oBAAoBA,MAAAA,QAAkC,MAAM;AAChE,QAAI,WAAW;AACb,aAAO;AAAA,IACT;AACA,WAAO,IAAIC,GAAAA,qBAAqB;AAAA,MAC9B;AAAA,MACA,MAAM,EAAE,GAAG,MAAM,GAAI,QAAQ,EAAE,UAAU,CAAA,GAAK,GAAI,kBAAkB,EAAE,gBAAA,IAAoB,CAAA,EAAC;AAAA,IAAG,CAC/F;AAAA,EACH,GAAG,CAAC,WAAW,KAAK,MAAM,OAAO,eAAe,CAAC;AAEjD,QAAM,EAAE,UAAU,aAAa,QAAQ,KAAA,IAASC,QAAAA,QAAmB;AAAA,IACjE,WAAW;AAAA,IACX,GAAI,kBAAkB,EAAE,UAAU,oBAAoB,CAAA;AAAA,EAAC,CACxD;AAED,yCACG,OAAA,EAAI,WAAWC,MAAAA,GAAG,wBAAwB,SAAS,GAClD,UAAA;AAAA,IAAAC,2BAAAA,IAACC,aAAAA,cAAA,EAAa,UAAoB,WAAA,CAAwB;AAAA,IAC1DD,2BAAAA,IAAC,OAAA,EAAI,WAAU,YACb,UAAAA,2BAAAA;AAAAA,MAACE,YAAAA;AAAAA,MAAA;AAAA,QACC;AAAA,QACA,QAAQ,MAAM,KAAK,KAAA;AAAA,QACnB;AAAA,QACA,UAAU,CAAC,SAAS,KAAK,YAAY,EAAE,MAAM;AAAA,MAAA;AAAA,IAAA,EAC/C,CACF;AAAA,EAAA,GACF;AAEJ;;"}
@@ -0,0 +1,26 @@
1
+ import { ChatTransport, UIMessage } from 'ai';
2
+ export type ChatProps = {
3
+ /** Endpoint that speaks the AI SDK v6 UI Message Stream protocol.
4
+ * Ignored when `transport` is supplied. Defaults to "/api/chat". */
5
+ api?: string;
6
+ /** Selected `provider/model` id, forwarded in the request body. */
7
+ model?: string;
8
+ /** Reasoning effort (`low` | `medium` | `high`), forwarded in the request body. */
9
+ reasoningEffort?: string;
10
+ /** Extra fields merged into every request body (e.g. tool scoping). */
11
+ body?: Record<string, unknown>;
12
+ /** Pre-built transport. Supply a mock in stories/tests; otherwise a
13
+ * DefaultChatTransport is constructed from `api`/`body`. */
14
+ transport?: ChatTransport<UIMessage>;
15
+ /** Initial messages to seed the conversation. */
16
+ initialMessages?: UIMessage[];
17
+ placeholder?: string;
18
+ emptyState?: React.ReactNode;
19
+ className?: string;
20
+ };
21
+ /** Self-contained AI chat: a streaming conversation log over a prompt input,
22
+ * driven by the AI SDK `useChat` hook against a v6-compatible `/api/chat`. The
23
+ * backend owns model selection and tool execution; `model`, `reasoningEffort`
24
+ * and `body` are forwarded in the request body for it to honor. */
25
+ export declare function Chat({ api, model, reasoningEffort, body, transport, initialMessages, placeholder, emptyState, className, }: ChatProps): import("react/jsx-runtime").JSX.Element;
26
+ //# sourceMappingURL=Chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../../src/data/chat/Chat.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAwB,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,IAAI,CAAC;AAK9E,MAAM,MAAM,SAAS,GAAG;IACtB;yEACqE;IACrE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mFAAmF;IACnF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B;iEAC6D;IAC7D,SAAS,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IACrC,iDAAiD;IACjD,eAAe,CAAC,EAAE,SAAS,EAAE,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;oEAGoE;AACpE,wBAAgB,IAAI,CAAC,EACnB,GAAiB,EACjB,KAAK,EACL,eAAe,EACf,IAAI,EACJ,SAAS,EACT,eAAe,EACf,WAAW,EACX,UAAU,EACV,SAAS,GACV,EAAE,SAAS,2CA6BX"}
@@ -0,0 +1,6 @@
1
+ import { ChatTransport, UIMessage } from 'ai';
2
+ /** A mock ChatTransport that replies with a markdown text turn, then a tool
3
+ * round-trip turn on the next submission. Use in stories/tests to drive the
4
+ * Chat UI without a backend. */
5
+ export declare function mockChatTransport(delayMs?: number): ChatTransport<UIMessage>;
6
+ //# sourceMappingURL=Chat.fixtures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Chat.fixtures.d.ts","sourceRoot":"","sources":["../../../src/data/chat/Chat.fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAkB,MAAM,IAAI,CAAC;AAyDnE;;iCAEiC;AACjC,wBAAgB,iBAAiB,CAAC,OAAO,SAAM,GAAG,aAAa,CAAC,SAAS,CAAC,CAWzE"}
@@ -0,0 +1,48 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { useMemo } from "react";
3
+ import { useChat } from "@ai-sdk/react";
4
+ import { DefaultChatTransport } from "ai";
5
+ import { cn } from "../../lib/utils.js";
6
+ import { Conversation } from "./Conversation.js";
7
+ import { PromptInput } from "./PromptInput.js";
8
+ function Chat({
9
+ api = "/api/chat",
10
+ model,
11
+ reasoningEffort,
12
+ body,
13
+ transport,
14
+ initialMessages,
15
+ placeholder,
16
+ emptyState,
17
+ className
18
+ }) {
19
+ const resolvedTransport = useMemo(() => {
20
+ if (transport) {
21
+ return transport;
22
+ }
23
+ return new DefaultChatTransport({
24
+ api,
25
+ body: { ...body, ...model ? { model } : {}, ...reasoningEffort ? { reasoningEffort } : {} }
26
+ });
27
+ }, [transport, api, body, model, reasoningEffort]);
28
+ const { messages, sendMessage, status, stop } = useChat({
29
+ transport: resolvedTransport,
30
+ ...initialMessages ? { messages: initialMessages } : {}
31
+ });
32
+ return /* @__PURE__ */ jsxs("div", { className: cn("flex h-full flex-col", className), children: [
33
+ /* @__PURE__ */ jsx(Conversation, { messages, emptyState }),
34
+ /* @__PURE__ */ jsx("div", { className: "p-4 pt-0", children: /* @__PURE__ */ jsx(
35
+ PromptInput,
36
+ {
37
+ status,
38
+ onStop: () => void stop(),
39
+ placeholder,
40
+ onSubmit: (text) => void sendMessage({ text })
41
+ }
42
+ ) })
43
+ ] });
44
+ }
45
+ export {
46
+ Chat
47
+ };
48
+ //# sourceMappingURL=Chat.js.map