@mastra/playground-ui 35.0.0 → 35.1.0-alpha.1

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 (220) hide show
  1. package/CHANGELOG.md +86 -0
  2. package/dist/{code-block-C4Zp_ewI.cjs → code-block-BPI6hA9o.cjs} +2 -2
  3. package/dist/{code-block-C4Zp_ewI.cjs.map → code-block-BPI6hA9o.cjs.map} +1 -1
  4. package/dist/{code-block-CnRVTecy.js → code-block-BdjHwqE4.js} +2 -2
  5. package/dist/{code-block-CnRVTecy.js.map → code-block-BdjHwqE4.js.map} +1 -1
  6. package/dist/{code-editor-DuX_CPRv.js → code-editor-CxHGOvdY.js} +3 -3
  7. package/dist/{code-editor-DuX_CPRv.js.map → code-editor-CxHGOvdY.js.map} +1 -1
  8. package/dist/{code-editor-LhRB_wMh.cjs → code-editor-DVWPuq12.cjs} +3 -3
  9. package/dist/{code-editor-LhRB_wMh.cjs.map → code-editor-DVWPuq12.cjs.map} +1 -1
  10. package/dist/combobox-DQdRtI_v.cjs +245 -0
  11. package/dist/combobox-DQdRtI_v.cjs.map +1 -0
  12. package/dist/combobox-DvRTz5eL.js +223 -0
  13. package/dist/combobox-DvRTz5eL.js.map +1 -0
  14. package/dist/{command-DPEUOKZw.js → command-CkFCH229.js} +86 -43
  15. package/dist/command-CkFCH229.js.map +1 -0
  16. package/dist/{command-D0tQ1Lpz.cjs → command-EI7t_0WS.cjs} +86 -43
  17. package/dist/command-EI7t_0WS.cjs.map +1 -0
  18. package/dist/components/CodeBlock.cjs.js +1 -1
  19. package/dist/components/CodeBlock.es.js +1 -1
  20. package/dist/components/CodeEditor.cjs.js +1 -1
  21. package/dist/components/CodeEditor.es.js +1 -1
  22. package/dist/components/Columns.cjs.js +1 -1
  23. package/dist/components/Columns.es.js +1 -1
  24. package/dist/components/Combobox.cjs.js +2 -4
  25. package/dist/components/Combobox.cjs.js.map +1 -1
  26. package/dist/components/Combobox.es.js +1 -2
  27. package/dist/components/Combobox.es.js.map +1 -1
  28. package/dist/components/Command.cjs.js +1 -1
  29. package/dist/components/Command.es.js +1 -1
  30. package/dist/components/CopyButton.cjs.js +1 -1
  31. package/dist/components/CopyButton.es.js +1 -1
  32. package/dist/components/DataCodeSection.cjs.js +1 -1
  33. package/dist/components/DataCodeSection.es.js +1 -1
  34. package/dist/components/DataDetailsPanel.cjs.js +1 -1
  35. package/dist/components/DataDetailsPanel.es.js +1 -1
  36. package/dist/components/DataKeysAndValues.cjs.js +1 -1
  37. package/dist/components/DataKeysAndValues.es.js +1 -1
  38. package/dist/components/DataList.cjs.js +2 -2
  39. package/dist/components/DataList.es.js +2 -2
  40. package/dist/components/DataPanel.cjs.js +1 -1
  41. package/dist/components/DataPanel.es.js +1 -1
  42. package/dist/components/Dialog.cjs.js +1 -1
  43. package/dist/components/Dialog.es.js +1 -1
  44. package/dist/components/HorizontalBars.cjs.js +1 -1
  45. package/dist/components/HorizontalBars.es.js +1 -1
  46. package/dist/components/LogsDataList.cjs.js +2 -2
  47. package/dist/components/LogsDataList.es.js +2 -2
  48. package/dist/components/MainSidebar.cjs.js +1 -1
  49. package/dist/components/MainSidebar.es.js +1 -1
  50. package/dist/components/MarkdownRenderer.cjs.js +1 -1
  51. package/dist/components/MarkdownRenderer.es.js +1 -1
  52. package/dist/components/MetricsDataTable.cjs.js +1 -1
  53. package/dist/components/MetricsDataTable.es.js +1 -1
  54. package/dist/components/PropertyFilter.cjs.js +1 -1
  55. package/dist/components/PropertyFilter.es.js +1 -1
  56. package/dist/components/ScrollArea.cjs.js +1 -1
  57. package/dist/components/ScrollArea.es.js +1 -1
  58. package/dist/components/SideDialog.cjs.js +1 -1
  59. package/dist/components/SideDialog.es.js +1 -1
  60. package/dist/components/Truncate.cjs.js +1 -1
  61. package/dist/components/Truncate.es.js +1 -1
  62. package/dist/{copy-button-BfiqaCtC.js → copy-button-RffVknBA.js} +2 -2
  63. package/dist/{copy-button-BfiqaCtC.js.map → copy-button-RffVknBA.js.map} +1 -1
  64. package/dist/{copy-button-BaAuAgdC.cjs → copy-button-ler9dH8g.cjs} +3 -3
  65. package/dist/{copy-button-BaAuAgdC.cjs.map → copy-button-ler9dH8g.cjs.map} +1 -1
  66. package/dist/{data-code-section-MygZlpwo.js → data-code-section-BBBffVVs.js} +3 -3
  67. package/dist/{data-code-section-MygZlpwo.js.map → data-code-section-BBBffVVs.js.map} +1 -1
  68. package/dist/{data-code-section-BtFzBCox.cjs → data-code-section-ChVXPz-i.cjs} +3 -3
  69. package/dist/{data-code-section-BtFzBCox.cjs.map → data-code-section-ChVXPz-i.cjs.map} +1 -1
  70. package/dist/{data-keys-and-values-BSeQG7jb.js → data-keys-and-values-C3pzr_d1.js} +2 -2
  71. package/dist/{data-keys-and-values-BSeQG7jb.js.map → data-keys-and-values-C3pzr_d1.js.map} +1 -1
  72. package/dist/{data-keys-and-values-Spy2O_IE.cjs → data-keys-and-values-KIwfkmc7.cjs} +3 -3
  73. package/dist/{data-keys-and-values-Spy2O_IE.cjs.map → data-keys-and-values-KIwfkmc7.cjs.map} +1 -1
  74. package/dist/{data-list-skeleton-COjCBzBF.cjs → data-list-skeleton-BlOwAki1.cjs} +5 -15
  75. package/dist/data-list-skeleton-BlOwAki1.cjs.map +1 -0
  76. package/dist/{data-list-skeleton-DmAqHgws.js → data-list-skeleton-DD7ljjgS.js} +5 -15
  77. package/dist/data-list-skeleton-DD7ljjgS.js.map +1 -0
  78. package/dist/{data-panel-DToYF7cH.cjs → data-panel-DBxE_3ux.cjs} +2 -2
  79. package/dist/{data-panel-DToYF7cH.cjs.map → data-panel-DBxE_3ux.cjs.map} +1 -1
  80. package/dist/{data-panel-DumaHQiP.js → data-panel-DPVF9Yok.js} +2 -2
  81. package/dist/{data-panel-DumaHQiP.js.map → data-panel-DPVF9Yok.js.map} +1 -1
  82. package/dist/{dialog-46zkb32X.cjs → dialog-C0gOGKEK.cjs} +31 -29
  83. package/dist/dialog-C0gOGKEK.cjs.map +1 -0
  84. package/dist/{dialog-CSSfcjSX.js → dialog-DTLHod4X.js} +31 -29
  85. package/dist/dialog-DTLHod4X.js.map +1 -0
  86. package/dist/dialog.css +2 -2
  87. package/dist/hooks/use-autoscroll.cjs.js +110 -0
  88. package/dist/hooks/use-autoscroll.cjs.js.map +1 -0
  89. package/dist/hooks/use-autoscroll.d.ts +2 -0
  90. package/dist/hooks/use-autoscroll.es.js +106 -0
  91. package/dist/hooks/use-autoscroll.es.js.map +1 -0
  92. package/dist/hooks/use-copy-to-clipboard.cjs.js +11 -0
  93. package/dist/hooks/use-copy-to-clipboard.cjs.js.map +1 -0
  94. package/dist/hooks/use-copy-to-clipboard.d.ts +2 -0
  95. package/dist/hooks/use-copy-to-clipboard.es.js +3 -0
  96. package/dist/hooks/use-copy-to-clipboard.es.js.map +1 -0
  97. package/dist/hooks/use-in-view.cjs.js +22 -0
  98. package/dist/hooks/use-in-view.cjs.js.map +1 -0
  99. package/dist/hooks/use-in-view.d.ts +2 -0
  100. package/dist/hooks/use-in-view.es.js +18 -0
  101. package/dist/hooks/use-in-view.es.js.map +1 -0
  102. package/dist/hooks/use-is-mobile.cjs.js +21 -0
  103. package/dist/hooks/use-is-mobile.cjs.js.map +1 -0
  104. package/dist/hooks/use-is-mobile.d.ts +2 -0
  105. package/dist/hooks/use-is-mobile.es.js +17 -0
  106. package/dist/hooks/use-is-mobile.es.js.map +1 -0
  107. package/dist/hooks/use-keyboard-shortcut-label.cjs.js +29 -0
  108. package/dist/hooks/use-keyboard-shortcut-label.cjs.js.map +1 -0
  109. package/dist/hooks/use-keyboard-shortcut-label.d.ts +2 -0
  110. package/dist/hooks/use-keyboard-shortcut-label.es.js +24 -0
  111. package/dist/hooks/use-keyboard-shortcut-label.es.js.map +1 -0
  112. package/dist/{horizontal-bars-DjLETHvH.js → horizontal-bars-r1aEIHUc.js} +2 -2
  113. package/dist/{horizontal-bars-DjLETHvH.js.map → horizontal-bars-r1aEIHUc.js.map} +1 -1
  114. package/dist/{horizontal-bars-C9qp4r47.cjs → horizontal-bars-uPFpgihX.cjs} +2 -2
  115. package/dist/{horizontal-bars-C9qp4r47.cjs.map → horizontal-bars-uPFpgihX.cjs.map} +1 -1
  116. package/dist/index.cjs.js +88 -79
  117. package/dist/index.cjs.js.map +1 -1
  118. package/dist/index.css +55 -30
  119. package/dist/index.es.js +72 -69
  120. package/dist/index.es.js.map +1 -1
  121. package/dist/{logs-data-list-kzBMv1MW.cjs → logs-data-list-3qmFjBz8.cjs} +2 -2
  122. package/dist/{logs-data-list-kzBMv1MW.cjs.map → logs-data-list-3qmFjBz8.cjs.map} +1 -1
  123. package/dist/{logs-data-list-Bkf7oWlx.js → logs-data-list-Dh6c7URj.js} +2 -2
  124. package/dist/{logs-data-list-Bkf7oWlx.js.map → logs-data-list-Dh6c7URj.js.map} +1 -1
  125. package/dist/{main-sidebar-Djs_3tGw.cjs → main-sidebar-ByHmwU4R.cjs} +6 -5
  126. package/dist/main-sidebar-ByHmwU4R.cjs.map +1 -0
  127. package/dist/{main-sidebar-1GVDTtcD.js → main-sidebar-DJSorgYQ.js} +6 -5
  128. package/dist/main-sidebar-DJSorgYQ.js.map +1 -0
  129. package/dist/{markdown-renderer-DyUlVfRt.cjs → markdown-renderer-Dyg_1QXx.cjs} +2 -2
  130. package/dist/{markdown-renderer-DyUlVfRt.cjs.map → markdown-renderer-Dyg_1QXx.cjs.map} +1 -1
  131. package/dist/{markdown-renderer-BYSrmn0E.js → markdown-renderer-QftQuP4g.js} +2 -2
  132. package/dist/{markdown-renderer-BYSrmn0E.js.map → markdown-renderer-QftQuP4g.js.map} +1 -1
  133. package/dist/{metrics-data-table-D7vx2WEJ.cjs → metrics-data-table-AjAA-dqH.cjs} +2 -2
  134. package/dist/{metrics-data-table-D7vx2WEJ.cjs.map → metrics-data-table-AjAA-dqH.cjs.map} +1 -1
  135. package/dist/{metrics-data-table-DryqJWoI.js → metrics-data-table-hSmtDNck.js} +2 -2
  136. package/dist/{metrics-data-table-DryqJWoI.js.map → metrics-data-table-hSmtDNck.js.map} +1 -1
  137. package/dist/{multi-column-BzL86JPK.cjs → multi-column-BLRjYB5N.cjs} +3 -2
  138. package/dist/{multi-column-BzL86JPK.cjs.map → multi-column-BLRjYB5N.cjs.map} +1 -1
  139. package/dist/{multi-column-C1sXoVG3.js → multi-column-e_-j_rrO.js} +3 -2
  140. package/dist/{multi-column-C1sXoVG3.js.map → multi-column-e_-j_rrO.js.map} +1 -1
  141. package/dist/{property-filter-creator-DU8pl6-6.cjs → property-filter-creator-CaG_zPdy.cjs} +4 -3
  142. package/dist/property-filter-creator-CaG_zPdy.cjs.map +1 -0
  143. package/dist/{property-filter-creator-B9tK0VY3.js → property-filter-creator-Cl9E6wxf.js} +4 -3
  144. package/dist/property-filter-creator-Cl9E6wxf.js.map +1 -0
  145. package/dist/scroll-area-BtcyzOxO.cjs +243 -0
  146. package/dist/scroll-area-BtcyzOxO.cjs.map +1 -0
  147. package/dist/scroll-area-DjZ6nTm5.js +221 -0
  148. package/dist/scroll-area-DjZ6nTm5.js.map +1 -0
  149. package/dist/src/ds/components/Combobox/combobox-styles.d.ts +5 -12
  150. package/dist/src/ds/components/Combobox/combobox.d.ts +13 -4
  151. package/dist/src/ds/components/Combobox/combobox.stories.d.ts +1 -0
  152. package/dist/src/ds/components/Combobox/index.d.ts +0 -1
  153. package/dist/src/ds/components/Command/command.d.ts +5 -1
  154. package/dist/src/ds/components/Command/command.stories.d.ts +1 -0
  155. package/dist/src/ds/components/DataList/data-list-root.d.ts +3 -4
  156. package/dist/src/ds/components/Dialog/dialog.d.ts +2 -0
  157. package/dist/src/ds/components/MainSidebar/main-sidebar-nav-item-classes.d.ts +12 -0
  158. package/dist/src/ds/components/MainSidebar/main-sidebar-nav-link.d.ts +0 -13
  159. package/dist/src/ds/components/MainSidebar/main-sidebar.d.ts +2 -1
  160. package/dist/src/ds/components/ScrollArea/scroll-area.d.ts +12 -0
  161. package/dist/src/ds/components/ScrollArea/scroll-area.stories.d.ts +2 -0
  162. package/dist/src/hooks/use-copy-to-clipboard.d.ts +9 -1
  163. package/dist/src/hooks/use-keyboard-shortcut-label.d.ts +2 -0
  164. package/dist/src/index.d.ts +1 -1
  165. package/dist/src/lib/file/index.d.ts +1 -0
  166. package/dist/src/lib/file/schemes.d.ts +26 -0
  167. package/dist/{traces-data-list-BPTKzaN6.cjs → traces-data-list-BNmnKyDD.cjs} +8 -3
  168. package/dist/traces-data-list-BNmnKyDD.cjs.map +1 -0
  169. package/dist/{traces-data-list-CB7frfpp.js → traces-data-list-DRyI45Ke.js} +8 -3
  170. package/dist/traces-data-list-DRyI45Ke.js.map +1 -0
  171. package/dist/{truncate-C9bKR_02.js → truncate-B8_8wx-G.js} +2 -2
  172. package/dist/{truncate-C9bKR_02.js.map → truncate-B8_8wx-G.js.map} +1 -1
  173. package/dist/{truncate-RL2aHd1a.cjs → truncate-Csk5KmAy.cjs} +2 -2
  174. package/dist/{truncate-RL2aHd1a.cjs.map → truncate-Csk5KmAy.cjs.map} +1 -1
  175. package/dist/use-copy-to-clipboard-D7L_l6_x.js +127 -0
  176. package/dist/use-copy-to-clipboard-D7L_l6_x.js.map +1 -0
  177. package/dist/use-copy-to-clipboard-DHaJCGet.cjs +131 -0
  178. package/dist/use-copy-to-clipboard-DHaJCGet.cjs.map +1 -0
  179. package/package.json +12 -6
  180. package/dist/combobox-B2TriE9Z.cjs +0 -77
  181. package/dist/combobox-B2TriE9Z.cjs.map +0 -1
  182. package/dist/combobox-q2xPfCZc.js +0 -75
  183. package/dist/combobox-q2xPfCZc.js.map +0 -1
  184. package/dist/command-D0tQ1Lpz.cjs.map +0 -1
  185. package/dist/command-DPEUOKZw.js.map +0 -1
  186. package/dist/components/ScrollableContainer.cjs.js +0 -10
  187. package/dist/components/ScrollableContainer.cjs.js.map +0 -1
  188. package/dist/components/ScrollableContainer.d.ts +0 -2
  189. package/dist/components/ScrollableContainer.es.js +0 -2
  190. package/dist/components/ScrollableContainer.es.js.map +0 -1
  191. package/dist/data-list-skeleton-COjCBzBF.cjs.map +0 -1
  192. package/dist/data-list-skeleton-DmAqHgws.js.map +0 -1
  193. package/dist/dialog-46zkb32X.cjs.map +0 -1
  194. package/dist/dialog-CSSfcjSX.js.map +0 -1
  195. package/dist/main-sidebar-1GVDTtcD.js.map +0 -1
  196. package/dist/main-sidebar-Djs_3tGw.cjs.map +0 -1
  197. package/dist/multi-combobox-DkFLK64B.cjs +0 -193
  198. package/dist/multi-combobox-DkFLK64B.cjs.map +0 -1
  199. package/dist/multi-combobox-Y3gT0MqV.js +0 -189
  200. package/dist/multi-combobox-Y3gT0MqV.js.map +0 -1
  201. package/dist/property-filter-creator-B9tK0VY3.js.map +0 -1
  202. package/dist/property-filter-creator-DU8pl6-6.cjs.map +0 -1
  203. package/dist/scroll-area-BqJfcT94.cjs +0 -230
  204. package/dist/scroll-area-BqJfcT94.cjs.map +0 -1
  205. package/dist/scroll-area-BtDqmqBK.js +0 -208
  206. package/dist/scroll-area-BtDqmqBK.js.map +0 -1
  207. package/dist/scrollable-container-BqOFHwdb.js +0 -151
  208. package/dist/scrollable-container-BqOFHwdb.js.map +0 -1
  209. package/dist/scrollable-container-Btq-TfCL.cjs +0 -153
  210. package/dist/scrollable-container-Btq-TfCL.cjs.map +0 -1
  211. package/dist/src/ds/components/Combobox/multi-combobox.d.ts +0 -22
  212. package/dist/src/ds/components/ScrollableContainer/index.d.ts +0 -1
  213. package/dist/src/ds/components/ScrollableContainer/scrollable-container.d.ts +0 -8
  214. package/dist/src/ds/components/ScrollableContainer/scrollable-container.stories.d.ts +0 -10
  215. package/dist/traces-data-list-BPTKzaN6.cjs.map +0 -1
  216. package/dist/traces-data-list-CB7frfpp.js.map +0 -1
  217. package/dist/use-copy-to-clipboard-CGqfkXnN.js +0 -73
  218. package/dist/use-copy-to-clipboard-CGqfkXnN.js.map +0 -1
  219. package/dist/use-copy-to-clipboard-CQgIuR1c.cjs +0 -77
  220. package/dist/use-copy-to-clipboard-CQgIuR1c.cjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"scrollable-container-BqOFHwdb.js","sources":["../src/ds/components/ScrollableContainer/scrollable-container.tsx"],"sourcesContent":["import React, { useRef, useState, useEffect, useCallback } from 'react';\nimport { cn } from '@/lib/utils';\n\nconst INDICATOR_WIDTH = 40;\nconst INDICATOR_HEIGHT = 150;\nconst INDICATOR_SPACE = 10;\n\nexport type ScrollableContainerProps = {\n className?: string;\n children: React.ReactNode;\n scrollSpeed?: number; // Optional prop to set scroll speed (pixels per interval)\n scrollIntervalTime?: number; // Optional prop to set scroll interval time (ms)\n};\n\nexport const ScrollableContainer = ({\n className,\n children,\n scrollSpeed = 100,\n scrollIntervalTime = 20,\n}: ScrollableContainerProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const scrollInterval = useRef<ReturnType<typeof setInterval> | null>(null);\n\n const [containerHeight, setContainerHeight] = useState(0);\n const [containerRight, setContainerRight] = useState(0);\n const [containerTop, setContainerTop] = useState(0);\n const [containerLeft, setContainerLeft] = useState(0);\n const [showRightIndicator, setShowRightIndicator] = useState(false);\n const [showLeftIndicator, setShowLeftIndicator] = useState(false);\n\n useEffect(() => {\n const updatePositions = () => {\n if (!containerRef.current) return;\n\n // Update container dimensions\n const canScrollRight =\n containerRef.current.scrollLeft < containerRef.current.scrollWidth - containerRef.current.clientWidth;\n setShowRightIndicator(canScrollRight);\n setContainerHeight(containerRef.current.clientHeight);\n\n // Calculate container's edges relative to viewport\n const rect = containerRef.current.getBoundingClientRect();\n setContainerRight(rect.right);\n setContainerLeft(rect.left);\n setContainerTop(rect.top);\n };\n\n // Initial update\n updatePositions();\n\n // Observe resize\n const resizeObserver = new ResizeObserver(updatePositions);\n if (containerRef.current) {\n resizeObserver.observe(containerRef.current);\n }\n\n // Handle scroll\n const handleScroll = () => {\n if (!containerRef.current) return;\n\n // Check if we can scroll in either direction\n const canScrollLeft = containerRef.current.scrollLeft > 0;\n const canScrollRight =\n containerRef.current.scrollLeft < containerRef.current.scrollWidth - containerRef.current.clientWidth;\n\n // Update indicator states\n setShowLeftIndicator(canScrollLeft);\n setShowRightIndicator(canScrollRight);\n\n // Update positions\n updatePositions();\n };\n\n // Add scroll listener\n containerRef?.current?.addEventListener('scroll', handleScroll);\n\n const container = containerRef.current;\n\n return () => {\n if (container) {\n resizeObserver.unobserve(container);\n container.removeEventListener('scroll', handleScroll);\n }\n };\n }, []);\n\n const ScrollIndicator = ({\n isVisible,\n position,\n containerHeight,\n containerTop,\n containerRight,\n onStartScrolling,\n onStopScrolling,\n }: {\n isVisible: boolean;\n position: 'left' | 'right';\n containerHeight: number;\n containerTop: number;\n containerRight: number;\n onStartScrolling: (e: React.MouseEvent | React.TouchEvent) => void;\n onStopScrolling: () => void;\n }) => {\n if (!isVisible) return null;\n\n const styles = {\n top: containerHeight < INDICATOR_HEIGHT ? containerTop : containerTop + (containerHeight - INDICATOR_HEIGHT) / 2,\n width: INDICATOR_WIDTH,\n height: containerHeight < INDICATOR_HEIGHT ? `${containerHeight}px` : `${INDICATOR_HEIGHT}px`,\n } as const;\n\n return (\n <button\n onMouseDown={onStartScrolling}\n onTouchStart={onStartScrolling}\n onMouseUp={onStopScrolling}\n onTouchEnd={onStopScrolling}\n onTouchCancel={onStopScrolling}\n className=\"bg-surface4 text-neutral3 border-surface5 hover:border-neutral3 fixed z-10 flex items-center justify-center rounded-lg border text-2xl hover:text-white\"\n style={{\n ...styles,\n left:\n position === 'left' ? containerLeft + INDICATOR_SPACE : containerRight - INDICATOR_WIDTH - INDICATOR_SPACE,\n }}\n >\n {' '}\n {position === 'left' ? '«' : '»'}\n </button>\n );\n };\n\n const startScrolling = useCallback(\n (direction: 'left' | 'right', e?: React.MouseEvent | React.TouchEvent) => {\n // Prevent default to avoid any text selection or other default behaviors\n e?.preventDefault();\n e?.stopPropagation();\n\n // Clear any existing interval to prevent duplicates\n if (scrollInterval.current) {\n clearInterval(scrollInterval.current);\n scrollInterval.current = null;\n }\n\n // Initial scroll to handle the first click immediately\n if (containerRef.current) {\n containerRef.current.scrollBy({\n left: direction === 'right' ? scrollSpeed * 2 : -scrollSpeed * 2,\n behavior: 'smooth',\n });\n }\n\n // Then start the interval for continuous scrolling\n scrollInterval.current = setInterval(() => {\n if (containerRef.current) {\n containerRef.current.scrollBy({\n left: direction === 'right' ? scrollSpeed : -scrollSpeed,\n behavior: 'smooth',\n });\n }\n }, scrollIntervalTime);\n },\n [scrollSpeed, scrollIntervalTime],\n );\n\n const stopScrolling = useCallback(() => {\n if (scrollInterval.current) {\n clearInterval(scrollInterval.current);\n scrollInterval.current = null;\n }\n }, []);\n\n return (\n <div ref={containerRef} className={cn('relative max-h-full overflow-auto', className)}>\n {children}\n <ScrollIndicator\n isVisible={showLeftIndicator}\n position=\"left\"\n containerHeight={containerHeight}\n containerTop={containerTop}\n containerRight={containerRight}\n onStartScrolling={e => startScrolling('left', e)}\n onStopScrolling={stopScrolling}\n />\n <ScrollIndicator\n isVisible={showRightIndicator}\n position=\"right\"\n containerHeight={containerHeight}\n containerTop={containerTop}\n containerRight={containerRight}\n onStartScrolling={e => startScrolling('right', e)}\n onStopScrolling={stopScrolling}\n />\n </div>\n );\n};\n"],"names":["containerHeight","containerTop","containerRight"],"mappings":"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"}
@@ -1,153 +0,0 @@
1
- 'use strict';
2
-
3
- const jsxRuntime = require('react/jsx-runtime');
4
- const React = require('react');
5
- const utils = require('./utils-vA5sWo9W.cjs');
6
-
7
- const INDICATOR_WIDTH = 40;
8
- const INDICATOR_HEIGHT = 150;
9
- const INDICATOR_SPACE = 10;
10
- const ScrollableContainer = ({
11
- className,
12
- children,
13
- scrollSpeed = 100,
14
- scrollIntervalTime = 20
15
- }) => {
16
- const containerRef = React.useRef(null);
17
- const scrollInterval = React.useRef(null);
18
- const [containerHeight, setContainerHeight] = React.useState(0);
19
- const [containerRight, setContainerRight] = React.useState(0);
20
- const [containerTop, setContainerTop] = React.useState(0);
21
- const [containerLeft, setContainerLeft] = React.useState(0);
22
- const [showRightIndicator, setShowRightIndicator] = React.useState(false);
23
- const [showLeftIndicator, setShowLeftIndicator] = React.useState(false);
24
- React.useEffect(() => {
25
- const updatePositions = () => {
26
- if (!containerRef.current) return;
27
- const canScrollRight = containerRef.current.scrollLeft < containerRef.current.scrollWidth - containerRef.current.clientWidth;
28
- setShowRightIndicator(canScrollRight);
29
- setContainerHeight(containerRef.current.clientHeight);
30
- const rect = containerRef.current.getBoundingClientRect();
31
- setContainerRight(rect.right);
32
- setContainerLeft(rect.left);
33
- setContainerTop(rect.top);
34
- };
35
- updatePositions();
36
- const resizeObserver = new ResizeObserver(updatePositions);
37
- if (containerRef.current) {
38
- resizeObserver.observe(containerRef.current);
39
- }
40
- const handleScroll = () => {
41
- if (!containerRef.current) return;
42
- const canScrollLeft = containerRef.current.scrollLeft > 0;
43
- const canScrollRight = containerRef.current.scrollLeft < containerRef.current.scrollWidth - containerRef.current.clientWidth;
44
- setShowLeftIndicator(canScrollLeft);
45
- setShowRightIndicator(canScrollRight);
46
- updatePositions();
47
- };
48
- containerRef?.current?.addEventListener("scroll", handleScroll);
49
- const container = containerRef.current;
50
- return () => {
51
- if (container) {
52
- resizeObserver.unobserve(container);
53
- container.removeEventListener("scroll", handleScroll);
54
- }
55
- };
56
- }, []);
57
- const ScrollIndicator = ({
58
- isVisible,
59
- position,
60
- containerHeight: containerHeight2,
61
- containerTop: containerTop2,
62
- containerRight: containerRight2,
63
- onStartScrolling,
64
- onStopScrolling
65
- }) => {
66
- if (!isVisible) return null;
67
- const styles = {
68
- top: containerHeight2 < INDICATOR_HEIGHT ? containerTop2 : containerTop2 + (containerHeight2 - INDICATOR_HEIGHT) / 2,
69
- width: INDICATOR_WIDTH,
70
- height: containerHeight2 < INDICATOR_HEIGHT ? `${containerHeight2}px` : `${INDICATOR_HEIGHT}px`
71
- };
72
- return /* @__PURE__ */ jsxRuntime.jsxs(
73
- "button",
74
- {
75
- onMouseDown: onStartScrolling,
76
- onTouchStart: onStartScrolling,
77
- onMouseUp: onStopScrolling,
78
- onTouchEnd: onStopScrolling,
79
- onTouchCancel: onStopScrolling,
80
- className: "bg-surface4 text-neutral3 border-surface5 hover:border-neutral3 fixed z-10 flex items-center justify-center rounded-lg border text-2xl hover:text-white",
81
- style: {
82
- ...styles,
83
- left: position === "left" ? containerLeft + INDICATOR_SPACE : containerRight2 - INDICATOR_WIDTH - INDICATOR_SPACE
84
- },
85
- children: [
86
- " ",
87
- position === "left" ? "«" : "»"
88
- ]
89
- }
90
- );
91
- };
92
- const startScrolling = React.useCallback(
93
- (direction, e) => {
94
- e?.preventDefault();
95
- e?.stopPropagation();
96
- if (scrollInterval.current) {
97
- clearInterval(scrollInterval.current);
98
- scrollInterval.current = null;
99
- }
100
- if (containerRef.current) {
101
- containerRef.current.scrollBy({
102
- left: direction === "right" ? scrollSpeed * 2 : -scrollSpeed * 2,
103
- behavior: "smooth"
104
- });
105
- }
106
- scrollInterval.current = setInterval(() => {
107
- if (containerRef.current) {
108
- containerRef.current.scrollBy({
109
- left: direction === "right" ? scrollSpeed : -scrollSpeed,
110
- behavior: "smooth"
111
- });
112
- }
113
- }, scrollIntervalTime);
114
- },
115
- [scrollSpeed, scrollIntervalTime]
116
- );
117
- const stopScrolling = React.useCallback(() => {
118
- if (scrollInterval.current) {
119
- clearInterval(scrollInterval.current);
120
- scrollInterval.current = null;
121
- }
122
- }, []);
123
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: containerRef, className: utils.cn("relative max-h-full overflow-auto", className), children: [
124
- children,
125
- /* @__PURE__ */ jsxRuntime.jsx(
126
- ScrollIndicator,
127
- {
128
- isVisible: showLeftIndicator,
129
- position: "left",
130
- containerHeight,
131
- containerTop,
132
- containerRight,
133
- onStartScrolling: (e) => startScrolling("left", e),
134
- onStopScrolling: stopScrolling
135
- }
136
- ),
137
- /* @__PURE__ */ jsxRuntime.jsx(
138
- ScrollIndicator,
139
- {
140
- isVisible: showRightIndicator,
141
- position: "right",
142
- containerHeight,
143
- containerTop,
144
- containerRight,
145
- onStartScrolling: (e) => startScrolling("right", e),
146
- onStopScrolling: stopScrolling
147
- }
148
- )
149
- ] });
150
- };
151
-
152
- exports.ScrollableContainer = ScrollableContainer;
153
- //# sourceMappingURL=scrollable-container-Btq-TfCL.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scrollable-container-Btq-TfCL.cjs","sources":["../src/ds/components/ScrollableContainer/scrollable-container.tsx"],"sourcesContent":["import React, { useRef, useState, useEffect, useCallback } from 'react';\nimport { cn } from '@/lib/utils';\n\nconst INDICATOR_WIDTH = 40;\nconst INDICATOR_HEIGHT = 150;\nconst INDICATOR_SPACE = 10;\n\nexport type ScrollableContainerProps = {\n className?: string;\n children: React.ReactNode;\n scrollSpeed?: number; // Optional prop to set scroll speed (pixels per interval)\n scrollIntervalTime?: number; // Optional prop to set scroll interval time (ms)\n};\n\nexport const ScrollableContainer = ({\n className,\n children,\n scrollSpeed = 100,\n scrollIntervalTime = 20,\n}: ScrollableContainerProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const scrollInterval = useRef<ReturnType<typeof setInterval> | null>(null);\n\n const [containerHeight, setContainerHeight] = useState(0);\n const [containerRight, setContainerRight] = useState(0);\n const [containerTop, setContainerTop] = useState(0);\n const [containerLeft, setContainerLeft] = useState(0);\n const [showRightIndicator, setShowRightIndicator] = useState(false);\n const [showLeftIndicator, setShowLeftIndicator] = useState(false);\n\n useEffect(() => {\n const updatePositions = () => {\n if (!containerRef.current) return;\n\n // Update container dimensions\n const canScrollRight =\n containerRef.current.scrollLeft < containerRef.current.scrollWidth - containerRef.current.clientWidth;\n setShowRightIndicator(canScrollRight);\n setContainerHeight(containerRef.current.clientHeight);\n\n // Calculate container's edges relative to viewport\n const rect = containerRef.current.getBoundingClientRect();\n setContainerRight(rect.right);\n setContainerLeft(rect.left);\n setContainerTop(rect.top);\n };\n\n // Initial update\n updatePositions();\n\n // Observe resize\n const resizeObserver = new ResizeObserver(updatePositions);\n if (containerRef.current) {\n resizeObserver.observe(containerRef.current);\n }\n\n // Handle scroll\n const handleScroll = () => {\n if (!containerRef.current) return;\n\n // Check if we can scroll in either direction\n const canScrollLeft = containerRef.current.scrollLeft > 0;\n const canScrollRight =\n containerRef.current.scrollLeft < containerRef.current.scrollWidth - containerRef.current.clientWidth;\n\n // Update indicator states\n setShowLeftIndicator(canScrollLeft);\n setShowRightIndicator(canScrollRight);\n\n // Update positions\n updatePositions();\n };\n\n // Add scroll listener\n containerRef?.current?.addEventListener('scroll', handleScroll);\n\n const container = containerRef.current;\n\n return () => {\n if (container) {\n resizeObserver.unobserve(container);\n container.removeEventListener('scroll', handleScroll);\n }\n };\n }, []);\n\n const ScrollIndicator = ({\n isVisible,\n position,\n containerHeight,\n containerTop,\n containerRight,\n onStartScrolling,\n onStopScrolling,\n }: {\n isVisible: boolean;\n position: 'left' | 'right';\n containerHeight: number;\n containerTop: number;\n containerRight: number;\n onStartScrolling: (e: React.MouseEvent | React.TouchEvent) => void;\n onStopScrolling: () => void;\n }) => {\n if (!isVisible) return null;\n\n const styles = {\n top: containerHeight < INDICATOR_HEIGHT ? containerTop : containerTop + (containerHeight - INDICATOR_HEIGHT) / 2,\n width: INDICATOR_WIDTH,\n height: containerHeight < INDICATOR_HEIGHT ? `${containerHeight}px` : `${INDICATOR_HEIGHT}px`,\n } as const;\n\n return (\n <button\n onMouseDown={onStartScrolling}\n onTouchStart={onStartScrolling}\n onMouseUp={onStopScrolling}\n onTouchEnd={onStopScrolling}\n onTouchCancel={onStopScrolling}\n className=\"bg-surface4 text-neutral3 border-surface5 hover:border-neutral3 fixed z-10 flex items-center justify-center rounded-lg border text-2xl hover:text-white\"\n style={{\n ...styles,\n left:\n position === 'left' ? containerLeft + INDICATOR_SPACE : containerRight - INDICATOR_WIDTH - INDICATOR_SPACE,\n }}\n >\n {' '}\n {position === 'left' ? '«' : '»'}\n </button>\n );\n };\n\n const startScrolling = useCallback(\n (direction: 'left' | 'right', e?: React.MouseEvent | React.TouchEvent) => {\n // Prevent default to avoid any text selection or other default behaviors\n e?.preventDefault();\n e?.stopPropagation();\n\n // Clear any existing interval to prevent duplicates\n if (scrollInterval.current) {\n clearInterval(scrollInterval.current);\n scrollInterval.current = null;\n }\n\n // Initial scroll to handle the first click immediately\n if (containerRef.current) {\n containerRef.current.scrollBy({\n left: direction === 'right' ? scrollSpeed * 2 : -scrollSpeed * 2,\n behavior: 'smooth',\n });\n }\n\n // Then start the interval for continuous scrolling\n scrollInterval.current = setInterval(() => {\n if (containerRef.current) {\n containerRef.current.scrollBy({\n left: direction === 'right' ? scrollSpeed : -scrollSpeed,\n behavior: 'smooth',\n });\n }\n }, scrollIntervalTime);\n },\n [scrollSpeed, scrollIntervalTime],\n );\n\n const stopScrolling = useCallback(() => {\n if (scrollInterval.current) {\n clearInterval(scrollInterval.current);\n scrollInterval.current = null;\n }\n }, []);\n\n return (\n <div ref={containerRef} className={cn('relative max-h-full overflow-auto', className)}>\n {children}\n <ScrollIndicator\n isVisible={showLeftIndicator}\n position=\"left\"\n containerHeight={containerHeight}\n containerTop={containerTop}\n containerRight={containerRight}\n onStartScrolling={e => startScrolling('left', e)}\n onStopScrolling={stopScrolling}\n />\n <ScrollIndicator\n isVisible={showRightIndicator}\n position=\"right\"\n containerHeight={containerHeight}\n containerTop={containerTop}\n containerRight={containerRight}\n onStartScrolling={e => startScrolling('right', e)}\n onStopScrolling={stopScrolling}\n />\n </div>\n );\n};\n"],"names":["useRef","useState","useEffect","containerHeight","containerTop","containerRight","jsxs","useCallback","cn","jsx"],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- import { ComboboxOption } from './combobox';
2
- import { ComboboxVariant } from './combobox-styles';
3
- import { TextButtonSize } from '../Button/Button';
4
- import * as React from 'react';
5
- export type { ComboboxOption };
6
- export type MultiComboboxProps = {
7
- options: ComboboxOption[];
8
- value?: string[];
9
- onValueChange?: (value: string[]) => void;
10
- placeholder?: string;
11
- searchPlaceholder?: string;
12
- emptyText?: string;
13
- className?: string;
14
- disabled?: boolean;
15
- variant?: ComboboxVariant;
16
- size?: TextButtonSize;
17
- open?: boolean;
18
- onOpenChange?: (open: boolean) => void;
19
- container?: HTMLElement | ShadowRoot | null | React.RefObject<HTMLElement | ShadowRoot | null>;
20
- error?: string;
21
- };
22
- export declare function MultiCombobox({ options, value, onValueChange, placeholder, searchPlaceholder, emptyText, className, disabled, variant, size, open, onOpenChange, container, error, }: MultiComboboxProps): import("react/jsx-runtime").JSX.Element;
@@ -1 +0,0 @@
1
- export * from './scrollable-container';
@@ -1,8 +0,0 @@
1
- import { default as React } from 'react';
2
- export type ScrollableContainerProps = {
3
- className?: string;
4
- children: React.ReactNode;
5
- scrollSpeed?: number;
6
- scrollIntervalTime?: number;
7
- };
8
- export declare const ScrollableContainer: ({ className, children, scrollSpeed, scrollIntervalTime, }: ScrollableContainerProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,10 +0,0 @@
1
- import { Meta, StoryObj } from '@storybook/react-vite';
2
- import { ScrollableContainer } from './scrollable-container';
3
- declare const meta: Meta<typeof ScrollableContainer>;
4
- export default meta;
5
- type Story = StoryObj<typeof ScrollableContainer>;
6
- export declare const Default: Story;
7
- export declare const CardGallery: Story;
8
- export declare const FastScroll: Story;
9
- export declare const SlowScroll: Story;
10
- export declare const Badges: Story;
@@ -1 +0,0 @@
1
- {"version":3,"file":"traces-data-list-BPTKzaN6.cjs","sources":["../src/ds/components/DataList/data-list-pagination.tsx","../src/ds/components/DataList/data-list-row-static.tsx","../src/ds/components/DataList/data-list-subheader.tsx","../src/ds/components/DataList/data-list-subheading.tsx","../src/ds/components/DataList/data-list-top-cells.tsx","../src/ds/components/DataList/data-list.tsx","../src/ds/components/DataList/ScoresDataList/scores-data-list-cells.tsx","../src/ds/components/DataList/ScoresDataList/scores-data-list.tsx","../src/ds/components/DataList/TracesDataList/traces-data-list-cells.tsx","../src/ds/components/DataList/TracesDataList/traces-data-list.tsx"],"sourcesContent":["import { ArrowLeftIcon, ArrowRightIcon } from 'lucide-react';\nimport { Button } from '@/ds/components/Button';\n\nexport type DataListPaginationProps = {\n currentPage?: number;\n hasMore?: boolean;\n onNextPage?: () => void;\n onPrevPage?: () => void;\n};\n\nexport function DataListPagination({ currentPage, hasMore, onNextPage, onPrevPage }: DataListPaginationProps) {\n const showNavigation = (typeof currentPage === 'number' && currentPage > 0) || hasMore;\n\n return (\n <div className=\"col-span-full flex py-4 items-center justify-center text-neutral3 text-ui-md gap-8\">\n <span>\n Page <b>{currentPage ? currentPage + 1 : '1'}</b>\n </span>\n {showNavigation && (\n <div className=\"flex gap-4\">\n {typeof currentPage === 'number' && currentPage > 0 && (\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={onPrevPage}>\n <ArrowLeftIcon />\n Previous\n </Button>\n )}\n {hasMore && (\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={onNextPage}>\n Next\n <ArrowRightIcon />\n </Button>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { forwardRef } from 'react';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { useDataListRowWrapperContext } from './data-list-row-wrapper-context';\nimport { dataListRowStaticStyles, dataListRowVariants } from './shared';\nimport type { DataListRowSharedProps } from './shared';\nimport { cn } from '@/lib/utils';\n\nexport type DataListRowStaticProps = ComponentPropsWithoutRef<'div'> & DataListRowSharedProps;\n\n/**\n * Non-interactive row. Use when a row should *display* like a regular row but\n * has no link target or click handler\n */\nexport const DataListRowStatic = forwardRef<HTMLDivElement, DataListRowStaticProps>(\n ({ children, className, flushLeft, flushRight, colStart, colEnd, featured, variant, style, ...rest }, ref) => {\n const isWrapped = useDataListRowWrapperContext();\n const hasColumnOverride = colStart !== undefined || colEnd !== undefined;\n const resolvedStyle = hasColumnOverride ? { ...style, gridColumn: `${colStart ?? 1} / ${colEnd ?? -1}` } : style;\n return (\n <div\n ref={ref}\n className={cn(\n isWrapped\n ? 'grid grid-cols-subgrid gap-8 px-5 transition-colors duration-200 rounded-lg'\n : dataListRowStaticStyles,\n !isWrapped && flushLeft && 'ml-0!',\n !isWrapped && flushRight && 'mr-0!',\n // `!` so the selection fill wins over borderless table root styling\n // (higher-specificity descendant rules); same color in `default`.\n featured && 'bg-surface4!',\n dataListRowVariants({ variant }),\n className,\n )}\n style={resolvedStyle}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\nDataListRowStatic.displayName = 'DataListRowStatic';\n","import { forwardRef } from 'react';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type DataListSubheaderProps = ComponentPropsWithoutRef<'div'>;\n\nexport const DataListSubheader = forwardRef<HTMLDivElement, DataListSubheaderProps>(\n ({ children, className, ...rest }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'data-list-subheader relative isolate col-span-full px-4 py-3 border-none text-ui-md text-neutral4 font-medium mx-1',\n 'before:absolute before:inset-x-0 before:inset-y-1 before:bg-surface4 before:rounded-md before:-z-1',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\nDataListSubheader.displayName = 'DataListSubheader';\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type DataListSubHeadingProps = {\n children: ReactNode;\n className?: string;\n};\n\nexport function DataListSubHeading({ children, className }: DataListSubHeadingProps) {\n return <span className={cn('text-ui-sm text-neutral2 font-normal', className)}>{children}</span>;\n}\n","import { forwardRef } from 'react';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type DataListTopCellsProps = ComponentPropsWithoutRef<'div'> & {\n /**\n * Drop the group's default left margin. Use when this sits as the second\n * child of a gap-0 `DataList.Top`, beside a `DataList.TopSelectCell` that\n * owns the leading column.\n */\n flushLeft?: boolean;\n /**\n * Place the group starting at this column line, spanning through to the\n * last column. Defaults to the full grid (`col-span-full`). Use when this\n * sits beside a leading cell that owns column 1.\n */\n colStart?: number;\n};\n\n/**\n * Non-interactive header equivalent of `DataList.RowButton`. Groups a set of\n * `DataList.TopCell`s with the same horizontal layout (gap, mx, px) as\n * `RowButton`, so columns inside a wrapped `Top` line up cell-for-cell with the\n * columns inside a wrapped `Row`.\n */\nexport const DataListTopCells = forwardRef<HTMLDivElement, DataListTopCellsProps>(\n ({ children, className, flushLeft, colStart, style, ...rest }, ref) => {\n return (\n <div\n ref={ref}\n className={cn('grid grid-cols-subgrid gap-8 col-span-full px-5', flushLeft && 'pl-0!', className)}\n style={colStart ? { ...style, gridColumn: `${colStart} / -1` } : style}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\nDataListTopCells.displayName = 'DataListTopCells';\n","import {\n DataListCell,\n DataListTextCell,\n DataListNameCell,\n DataListDescriptionCell,\n DataListIdCell,\n DataListSelectCell,\n DataListMonoCell,\n DataListDateCell,\n DataListTimeCell,\n} from './data-list-cells';\nimport { DataListNextPageLoading } from './data-list-next-page-loading';\nimport { DataListNoMatch } from './data-list-no-match';\nimport { DataListPagination } from './data-list-pagination';\nimport { DataListRoot } from './data-list-root';\nimport { DataListRowButton } from './data-list-row-button';\nimport { DataListRowLink } from './data-list-row-link';\nimport { DataListRowStatic } from './data-list-row-static';\nimport { DataListRowWrapper } from './data-list-row-wrapper';\nimport { DataListSpacer } from './data-list-spacer';\nimport { DataListSubheader } from './data-list-subheader';\nimport { DataListSubHeading } from './data-list-subheading';\nimport { DataListTop } from './data-list-top';\nimport {\n DataListTopCell,\n DataListTopCellWithTooltip,\n DataListTopCellSmart,\n DataListTopSelectCell,\n} from './data-list-top-cell';\nimport { DataListTopCells } from './data-list-top-cells';\n\nexport const DataList = Object.assign(DataListRoot, {\n Top: DataListTop,\n TopCells: DataListTopCells,\n TopCell: DataListTopCell,\n TopCellWithTooltip: DataListTopCellWithTooltip,\n TopCellSmart: DataListTopCellSmart,\n RowWrapper: DataListRowWrapper,\n RowButton: DataListRowButton,\n RowLink: DataListRowLink,\n RowStatic: DataListRowStatic,\n Cell: DataListCell,\n TextCell: DataListTextCell,\n NameCell: DataListNameCell,\n DescriptionCell: DataListDescriptionCell,\n IdCell: DataListIdCell,\n MonoCell: DataListMonoCell,\n DateCell: DataListDateCell,\n TimeCell: DataListTimeCell,\n SelectCell: DataListSelectCell,\n TopSelectCell: DataListTopSelectCell,\n NoMatch: DataListNoMatch,\n Subheader: DataListSubheader,\n SubHeading: DataListSubHeading,\n Spacer: DataListSpacer,\n NextPageLoading: DataListNextPageLoading,\n Pagination: DataListPagination,\n});\n","import { format, isToday } from 'date-fns';\nimport { DataListCell } from '../data-list-cells';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction toDate(value: Date | string): Date | null {\n const date = value instanceof Date ? value : new Date(value);\n return isNaN(date.getTime()) ? null : date;\n}\n\n// ---------------------------------------------------------------------------\n// DateCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListDateCellProps {\n timestamp: Date | string;\n}\n\nexport function ScoresDataListDateCell({ timestamp }: ScoresDataListDateCellProps) {\n const date = toDate(timestamp);\n return (\n <DataListCell height=\"compact\" className=\"text-ui-smd text-neutral2\">\n {date ? (isToday(date) ? 'Today' : format(date, 'MMM dd')) : '-'}\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// TimeCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListTimeCellProps {\n timestamp: Date | string;\n}\n\nexport function ScoresDataListTimeCell({ timestamp }: ScoresDataListTimeCellProps) {\n const date = toDate(timestamp);\n return (\n <DataListCell height=\"compact\" className=\"text-ui-smd text-neutral3\">\n {date ? format(date, 'h:mm:ss aaa') : '-'}\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// InputCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListInputCellProps {\n input?: unknown;\n}\n\nexport function ScoresDataListInputCell({ input }: ScoresDataListInputCellProps) {\n return (\n <DataListCell height=\"compact\" className=\"min-w-0\">\n <span className=\"block text-neutral3 text-ui-smd font-mono truncate\">\n {input != null ? JSON.stringify(input) : '-'}\n </span>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// EntityCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListEntityCellProps {\n entityId?: string | null;\n}\n\nexport function ScoresDataListEntityCell({ entityId }: ScoresDataListEntityCellProps) {\n return (\n <DataListCell height=\"compact\" className=\"min-w-0\">\n <span className=\"block text-ui-smd truncate\">{entityId || '-'}</span>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// ScoreCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListScoreCellProps {\n score?: unknown;\n}\n\nexport function ScoresDataListScoreCell({ score }: ScoresDataListScoreCellProps) {\n const display = score == null ? '-' : typeof score === 'object' ? JSON.stringify(score) : String(score);\n return (\n <DataListCell height=\"compact\" className=\"text-ui-smd font-mono text-neutral3\">\n {display}\n </DataListCell>\n );\n}\n","import type { ComponentProps } from 'react';\nimport { DataListNextPageLoading } from '../data-list-next-page-loading';\nimport { DataListNoMatch } from '../data-list-no-match';\nimport { DataListRoot } from '../data-list-root';\nimport { DataListRowButton } from '../data-list-row-button';\nimport { DataListTop } from '../data-list-top';\nimport { DataListTopCell } from '../data-list-top-cell';\nimport {\n ScoresDataListDateCell,\n ScoresDataListTimeCell,\n ScoresDataListInputCell,\n ScoresDataListEntityCell,\n ScoresDataListScoreCell,\n} from './scores-data-list-cells';\n\nfunction ScoresDataListRoot(props: ComponentProps<typeof DataListRoot>) {\n return <DataListRoot {...props} />;\n}\n\nexport const ScoresDataList = Object.assign(ScoresDataListRoot, {\n Top: DataListTop,\n TopCell: DataListTopCell,\n RowButton: DataListRowButton,\n NoMatch: DataListNoMatch,\n NextPageLoading: DataListNextPageLoading,\n DateCell: ScoresDataListDateCell,\n TimeCell: ScoresDataListTimeCell,\n InputCell: ScoresDataListInputCell,\n EntityCell: ScoresDataListEntityCell,\n ScoreCell: ScoresDataListScoreCell,\n});\n","import { EntityType } from '@mastra/core/observability';\nimport { CornerDownRightIcon, ListTreeIcon } from 'lucide-react';\nimport { DataListCell, DataListMonoCell } from '../data-list-cells';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\nimport { AgentIcon } from '@/ds/icons/AgentIcon';\nimport { WorkflowIcon } from '@/ds/icons/WorkflowIcon';\nimport { Colors } from '@/ds/tokens/colors';\nimport { cn } from '@/lib/utils';\n\n// ---------------------------------------------------------------------------\n// NameCell\n// ---------------------------------------------------------------------------\n\nexport interface TracesDataListNameCellProps {\n name?: string | null;\n /** `null`/missing → root span (Trace). Set → nested span (Subtrace). Drives the leading level icon. */\n parentSpanId?: string | null;\n /** When true, the leading level icon is wrapped in a Trace/Subtrace tooltip. Off by default —\n * only meaningful in branches mode, where rows mix root traces and subtraces. */\n showLevelTooltip?: boolean;\n}\n\nexport function TracesDataListNameCell({ name, parentSpanId, showLevelTooltip }: TracesDataListNameCellProps) {\n const isRoot = parentSpanId == null;\n const Icon = isRoot ? ListTreeIcon : CornerDownRightIcon;\n const label = isRoot ? 'Trace' : 'Subtrace';\n const icon = (\n <span aria-label={label} className=\"inline-flex shrink-0\">\n <Icon className={cn('size-4 shrink-0', isRoot ? 'text-neutral3' : 'text-neutral2')} aria-hidden />\n </span>\n );\n return (\n <DataListCell height=\"compact\" className=\"text-neutral4 text-ui-smd min-w-0 flex items-center gap-2\">\n {showLevelTooltip ? (\n <Tooltip>\n <TooltipTrigger asChild>{icon}</TooltipTrigger>\n <TooltipContent>{label}</TooltipContent>\n </Tooltip>\n ) : (\n icon\n )}\n <span className=\"min-w-0 truncate\">{name || '-'}</span>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// InputCell\n// ---------------------------------------------------------------------------\n\nexport interface TracesDataListInputCellProps {\n input?: string | null;\n}\n\nexport function TracesDataListInputCell({ input }: TracesDataListInputCellProps) {\n return <DataListMonoCell>{input || '-'}</DataListMonoCell>;\n}\n\n// ---------------------------------------------------------------------------\n// EntityCell\n// ---------------------------------------------------------------------------\n\nfunction EntityTypeIcon({ entityType, className }: { entityType: string; className?: string }) {\n const iconClass = cn('size-3.5 shrink-0 text-neutral2', className);\n const normalizedEntityType = entityType.toLowerCase();\n\n switch (normalizedEntityType) {\n case EntityType.AGENT:\n return <AgentIcon className={iconClass} aria-hidden />;\n case 'workflow':\n case EntityType.WORKFLOW_RUN:\n return <WorkflowIcon className={iconClass} aria-hidden />;\n default:\n return null;\n }\n}\n\nexport interface TracesDataListEntityCellProps {\n entityType?: string | null;\n entityName?: string | null;\n}\n\nexport function TracesDataListEntityCell({ entityType, entityName }: TracesDataListEntityCellProps) {\n const type = entityType ?? '';\n\n return (\n <DataListCell height=\"compact\" className=\"flex min-w-0 items-center gap-2\">\n <EntityTypeIcon entityType={type} />\n {entityName ? <span className=\"min-w-0 text-ui-smd truncate\">{entityName}</span> : '-'}\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// StatusCell\n// ---------------------------------------------------------------------------\n\nconst STATUS_CONFIG: Record<string, { label: string; color: string }> = {\n completed: { label: 'OK', color: Colors.accent2 },\n ok: { label: 'OK', color: Colors.accent2 },\n error: { label: 'ERR', color: Colors.error },\n unset: { label: '-', color: Colors.neutral4 },\n};\n\nexport interface TracesDataListStatusCellProps {\n status?: string | null;\n}\n\nexport function TracesDataListStatusCell({ status }: TracesDataListStatusCellProps) {\n const key = (status ?? 'unset').toLowerCase();\n const config = STATUS_CONFIG[key] ?? STATUS_CONFIG['unset'];\n\n return (\n <DataListCell height=\"compact\">\n <span className=\"uppercase text-ui-sm font-semibold\" style={{ color: config.color }}>\n {config.label}\n </span>\n </DataListCell>\n );\n}\n","import type { ComponentProps } from 'react';\nimport { DataListDateCell, DataListIdCell, DataListTimeCell } from '../data-list-cells';\nimport { DataListNextPageLoading } from '../data-list-next-page-loading';\nimport { DataListNoMatch } from '../data-list-no-match';\nimport { DataListRoot } from '../data-list-root';\nimport { DataListRowButton } from '../data-list-row-button';\nimport { DataListSpacer } from '../data-list-spacer';\nimport { DataListSubheader } from '../data-list-subheader';\nimport { DataListSubHeading } from '../data-list-subheading';\nimport { DataListTop } from '../data-list-top';\nimport { DataListTopCell, DataListTopCellWithTooltip } from '../data-list-top-cell';\nimport {\n TracesDataListNameCell,\n TracesDataListInputCell,\n TracesDataListEntityCell,\n TracesDataListStatusCell,\n} from './traces-data-list-cells';\n\nfunction TracesDataListRoot(props: ComponentProps<typeof DataListRoot>) {\n return <DataListRoot {...props} />;\n}\n\nexport const TracesDataList = Object.assign(TracesDataListRoot, {\n Top: DataListTop,\n TopCell: DataListTopCell,\n TopCellWithTooltip: DataListTopCellWithTooltip,\n RowButton: DataListRowButton,\n NoMatch: DataListNoMatch,\n Subheader: DataListSubheader,\n SubHeading: DataListSubHeading,\n Spacer: DataListSpacer,\n IdCell: DataListIdCell,\n DateCell: DataListDateCell,\n TimeCell: DataListTimeCell,\n NameCell: TracesDataListNameCell,\n InputCell: TracesDataListInputCell,\n EntityCell: TracesDataListEntityCell,\n StatusCell: TracesDataListStatusCell,\n NextPageLoading: DataListNextPageLoading,\n});\n"],"names":["jsxs","jsx","Button","ArrowLeftIcon","ArrowRightIcon","forwardRef","useDataListRowWrapperContext","cn","dataListRowStaticStyles","dataListRowVariants","DataListRoot","DataListTop","DataListTopCell","DataListTopCellWithTooltip","DataListTopCellSmart","DataListRowWrapper","DataListRowButton","DataListRowLink","DataListCell","DataListTextCell","DataListNameCell","DataListDescriptionCell","DataListIdCell","DataListMonoCell","DataListDateCell","DataListTimeCell","DataListSelectCell","DataListTopSelectCell","DataListNoMatch","DataListSpacer","DataListNextPageLoading","isToday","format","ListTreeIcon","CornerDownRightIcon","Tooltip","TooltipTrigger","TooltipContent","EntityType","AgentIcon","WorkflowIcon","Colors"],"mappings":";;;;;;;;;;;;;AAUO,SAAS,mBAAmB,EAAE,WAAA,EAAa,OAAA,EAAS,UAAA,EAAY,YAAW,EAA4B;AAC5G,EAAA,MAAM,cAAA,GAAkB,OAAO,WAAA,KAAgB,QAAA,IAAY,cAAc,CAAA,IAAM,OAAA;AAE/E,EAAA,uBACEA,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oFAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA;AAAA,MAAA,OAAA;AAAA,sBACCC,cAAA,CAAC,GAAA,EAAA,EAAG,QAAA,EAAA,WAAA,GAAc,WAAA,GAAc,IAAI,GAAA,EAAI;AAAA,KAAA,EAC/C,CAAA;AAAA,IACC,cAAA,oBACCD,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACZ,QAAA,EAAA;AAAA,MAAA,OAAO,WAAA,KAAgB,QAAA,IAAY,WAAA,GAAc,CAAA,oBAChDA,eAAA,CAACE,aAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,OAAA,EAAQ,SAAA,EAAU,IAAA,EAAK,IAAA,EAAK,SAAS,UAAA,EACzD,QAAA,EAAA;AAAA,wBAAAD,cAAA,CAACE,yBAAA,EAAA,EAAc,CAAA;AAAA,QAAE;AAAA,OAAA,EAEnB,CAAA;AAAA,MAED,OAAA,oBACCH,eAAA,CAACE,aAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAQ,SAAA,EAAU,IAAA,EAAK,IAAA,EAAK,OAAA,EAAS,UAAA,EAAY,QAAA,EAAA;AAAA,QAAA,MAAA;AAAA,uCAEpEE,0BAAA,EAAA,EAAe;AAAA,OAAA,EAClB;AAAA,KAAA,EAEJ;AAAA,GAAA,EAEJ,CAAA;AAEJ;;ACvBO,MAAM,iBAAA,GAAoBC,gBAAA;AAAA,EAC/B,CAAC,EAAE,QAAA,EAAU,SAAA,EAAW,WAAW,UAAA,EAAY,QAAA,EAAU,MAAA,EAAQ,QAAA,EAAU,OAAA,EAAS,KAAA,EAAO,GAAG,IAAA,IAAQ,GAAA,KAAQ;AAC5G,IAAA,MAAM,YAAYC,6CAAA,EAA6B;AAC/C,IAAA,MAAM,iBAAA,GAAoB,QAAA,KAAa,MAAA,IAAa,MAAA,KAAW,MAAA;AAC/D,IAAA,MAAM,aAAA,GAAgB,iBAAA,GAAoB,EAAE,GAAG,KAAA,EAAO,UAAA,EAAY,CAAA,EAAG,QAAA,IAAY,CAAC,CAAA,GAAA,EAAM,MAAA,IAAU,EAAE,IAAG,GAAI,KAAA;AAC3G,IAAA,uBACEL,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAWM,QAAA;AAAA,UACT,YACI,6EAAA,GACAC,wCAAA;AAAA,UACJ,CAAC,aAAa,SAAA,IAAa,OAAA;AAAA,UAC3B,CAAC,aAAa,UAAA,IAAc,OAAA;AAAA;AAAA;AAAA,UAG5B,QAAA,IAAY,cAAA;AAAA,UACZC,oCAAA,CAAoB,EAAE,OAAA,EAAS,CAAA;AAAA,UAC/B;AAAA,SACF;AAAA,QACA,KAAA,EAAO,aAAA;AAAA,QACN,GAAG,IAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AACF,CAAA;AAEA,iBAAA,CAAkB,WAAA,GAAc,mBAAA;;ACpCzB,MAAM,iBAAA,GAAoBJ,gBAAA;AAAA,EAC/B,CAAC,EAAE,QAAA,EAAU,WAAW,GAAG,IAAA,IAAQ,GAAA,KAAQ;AACzC,IAAA,uBACEJ,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAWM,QAAA;AAAA,UACT,oHAAA;AAAA,UACA,oGAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,IAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AACF,CAAA;AAEA,iBAAA,CAAkB,WAAA,GAAc,mBAAA;;AChBzB,SAAS,kBAAA,CAAmB,EAAE,QAAA,EAAU,SAAA,EAAU,EAA4B;AACnF,EAAA,sCAAQ,MAAA,EAAA,EAAK,SAAA,EAAWA,SAAG,sCAAA,EAAwC,SAAS,GAAI,QAAA,EAAS,CAAA;AAC3F;;ACeO,MAAM,gBAAA,GAAmBF,gBAAA;AAAA,EAC9B,CAAC,EAAE,QAAA,EAAU,SAAA,EAAW,SAAA,EAAW,UAAU,KAAA,EAAO,GAAG,IAAA,EAAK,EAAG,GAAA,KAAQ;AACrE,IAAA,uBACEJ,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAWM,QAAA,CAAG,iDAAA,EAAmD,SAAA,IAAa,SAAS,SAAS,CAAA;AAAA,QAChG,KAAA,EAAO,WAAW,EAAE,GAAG,OAAO,UAAA,EAAY,CAAA,EAAG,QAAQ,CAAA,KAAA,CAAA,EAAQ,GAAI,KAAA;AAAA,QAChE,GAAG,IAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AACF,CAAA;AAEA,gBAAA,CAAiB,WAAA,GAAc,kBAAA;;ACTxB,MAAM,QAAA,GAAW,MAAA,CAAO,MAAA,CAAOG,6BAAA,EAAc;AAAA,EAClD,GAAA,EAAKC,4BAAA;AAAA,EACL,QAAA,EAAU,gBAAA;AAAA,EACV,OAAA,EAASC,gCAAA;AAAA,EACT,kBAAA,EAAoBC,2CAAA;AAAA,EACpB,YAAA,EAAcC,qCAAA;AAAA,EACd,UAAA,EAAYC,mCAAA;AAAA,EACZ,SAAA,EAAWC,kCAAA;AAAA,EACX,OAAA,EAASC,gCAAA;AAAA,EACT,SAAA,EAAW,iBAAA;AAAA,EACX,IAAA,EAAMC,6BAAA;AAAA,EACN,QAAA,EAAUC,iCAAA;AAAA,EACV,QAAA,EAAUC,iCAAA;AAAA,EACV,eAAA,EAAiBC,wCAAA;AAAA,EACjB,MAAA,EAAQC,+BAAA;AAAA,EACR,QAAA,EAAUC,iCAAA;AAAA,EACV,QAAA,EAAUC,iCAAA;AAAA,EACV,QAAA,EAAUC,iCAAA;AAAA,EACV,UAAA,EAAYC,mCAAA;AAAA,EACZ,aAAA,EAAeC,sCAAA;AAAA,EACf,OAAA,EAASC,gCAAA;AAAA,EACT,SAAA,EAAW,iBAAA;AAAA,EACX,UAAA,EAAY,kBAAA;AAAA,EACZ,MAAA,EAAQC,+BAAA;AAAA,EACR,eAAA,EAAiBC,wCAAA;AAAA,EACjB,UAAA,EAAY;AACd,CAAC;;AClDD,SAAS,OAAO,KAAA,EAAmC;AACjD,EAAA,MAAM,OAAO,KAAA,YAAiB,IAAA,GAAO,KAAA,GAAQ,IAAI,KAAK,KAAK,CAAA;AAC3D,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,IAAI,IAAA,GAAO,IAAA;AACxC;AAUO,SAAS,sBAAA,CAAuB,EAAE,SAAA,EAAU,EAAgC;AACjF,EAAA,MAAM,IAAA,GAAO,OAAO,SAAS,CAAA;AAC7B,EAAA,uBACE7B,cAAA,CAACiB,6BAAA,EAAA,EAAa,MAAA,EAAO,SAAA,EAAU,WAAU,2BAAA,EACtC,QAAA,EAAA,IAAA,GAAQa,eAAA,CAAQ,IAAI,IAAI,OAAA,GAAUC,cAAA,CAAO,IAAA,EAAM,QAAQ,IAAK,GAAA,EAC/D,CAAA;AAEJ;AAUO,SAAS,sBAAA,CAAuB,EAAE,SAAA,EAAU,EAAgC;AACjF,EAAA,MAAM,IAAA,GAAO,OAAO,SAAS,CAAA;AAC7B,EAAA,uBACE/B,cAAA,CAACiB,6BAAA,EAAA,EAAa,MAAA,EAAO,SAAA,EAAU,SAAA,EAAU,2BAAA,EACtC,QAAA,EAAA,IAAA,GAAOc,cAAA,CAAO,IAAA,EAAM,aAAa,CAAA,GAAI,GAAA,EACxC,CAAA;AAEJ;AAUO,SAAS,uBAAA,CAAwB,EAAE,KAAA,EAAM,EAAiC;AAC/E,EAAA,sCACGd,6BAAA,EAAA,EAAa,MAAA,EAAO,SAAA,EAAU,SAAA,EAAU,WACvC,QAAA,kBAAAjB,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oDAAA,EACb,mBAAS,IAAA,GAAO,IAAA,CAAK,UAAU,KAAK,CAAA,GAAI,KAC3C,CAAA,EACF,CAAA;AAEJ;AAUO,SAAS,wBAAA,CAAyB,EAAE,QAAA,EAAS,EAAkC;AACpF,EAAA,uBACEA,cAAA,CAACiB,6BAAA,EAAA,EAAa,MAAA,EAAO,SAAA,EAAU,SAAA,EAAU,SAAA,EACvC,QAAA,kBAAAjB,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4BAAA,EAA8B,QAAA,EAAA,QAAA,IAAY,GAAA,EAAI,CAAA,EAChE,CAAA;AAEJ;AAUO,SAAS,uBAAA,CAAwB,EAAE,KAAA,EAAM,EAAiC;AAC/E,EAAA,MAAM,OAAA,GAAU,KAAA,IAAS,IAAA,GAAO,GAAA,GAAM,OAAO,KAAA,KAAU,QAAA,GAAW,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA;AACtG,EAAA,sCACGiB,6BAAA,EAAA,EAAa,MAAA,EAAO,SAAA,EAAU,SAAA,EAAU,uCACtC,QAAA,EAAA,OAAA,EACH,CAAA;AAEJ;;AChFA,SAAS,mBAAmB,KAAA,EAA4C;AACtE,EAAA,uBAAOjB,cAAA,CAACS,6BAAA,EAAA,EAAc,GAAG,KAAA,EAAO,CAAA;AAClC;AAEO,MAAM,cAAA,GAAiB,MAAA,CAAO,MAAA,CAAO,kBAAA,EAAoB;AAAA,EAC9D,GAAA,EAAKC,4BAAA;AAAA,EACL,OAAA,EAASC,gCAAA;AAAA,EACT,SAAA,EAAWI,kCAAA;AAAA,EACX,OAAA,EAASY,gCAAA;AAAA,EACT,eAAA,EAAiBE,wCAAA;AAAA,EACjB,QAAA,EAAU,sBAAA;AAAA,EACV,QAAA,EAAU,sBAAA;AAAA,EACV,SAAA,EAAW,uBAAA;AAAA,EACX,UAAA,EAAY,wBAAA;AAAA,EACZ,SAAA,EAAW;AACb,CAAC;;ACRM,SAAS,sBAAA,CAAuB,EAAE,IAAA,EAAM,YAAA,EAAc,kBAAiB,EAAgC;AAC5G,EAAA,MAAM,SAAS,YAAA,IAAgB,IAAA;AAC/B,EAAA,MAAM,IAAA,GAAO,SAASG,wBAAA,GAAeC,+BAAA;AACrC,EAAA,MAAM,KAAA,GAAQ,SAAS,OAAA,GAAU,UAAA;AACjC,EAAA,MAAM,uBACJjC,cAAA,CAAC,MAAA,EAAA,EAAK,cAAY,KAAA,EAAO,SAAA,EAAU,wBACjC,QAAA,kBAAAA,cAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAWM,QAAA,CAAG,mBAAmB,MAAA,GAAS,eAAA,GAAkB,eAAe,CAAA,EAAG,aAAA,EAAW,MAAC,CAAA,EAClG,CAAA;AAEF,EAAA,uBACEP,eAAA,CAACkB,6BAAA,EAAA,EAAa,MAAA,EAAO,SAAA,EAAU,WAAU,2DAAA,EACtC,QAAA,EAAA;AAAA,IAAA,gBAAA,mCACEiB,eAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAlC,cAAA,CAACmC,sBAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EAAE,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,sBAC9BnC,cAAA,CAACoC,0BAAgB,QAAA,EAAA,KAAA,EAAM;AAAA,KAAA,EACzB,CAAA,GAEA,IAAA;AAAA,oBAEFpC,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAA,EAAoB,kBAAQ,GAAA,EAAI;AAAA,GAAA,EAClD,CAAA;AAEJ;AAUO,SAAS,uBAAA,CAAwB,EAAE,KAAA,EAAM,EAAiC;AAC/E,EAAA,uBAAOA,cAAA,CAACsB,iCAAA,EAAA,EAAkB,QAAA,EAAA,KAAA,IAAS,GAAA,EAAI,CAAA;AACzC;AAMA,SAAS,cAAA,CAAe,EAAE,UAAA,EAAY,SAAA,EAAU,EAA+C;AAC7F,EAAA,MAAM,SAAA,GAAYhB,QAAA,CAAG,iCAAA,EAAmC,SAAS,CAAA;AACjE,EAAA,MAAM,oBAAA,GAAuB,WAAW,WAAA,EAAY;AAEpD,EAAA,QAAQ,oBAAA;AAAsB,IAC5B,KAAK+B,wBAAA,CAAW,KAAA;AACd,MAAA,uBAAOrC,cAAA,CAACsC,0BAAA,EAAA,EAAU,SAAA,EAAW,SAAA,EAAW,eAAW,IAAA,EAAC,CAAA;AAAA,IACtD,KAAK,UAAA;AAAA,IACL,KAAKD,wBAAA,CAAW,YAAA;AACd,MAAA,uBAAOrC,cAAA,CAACuC,6BAAA,EAAA,EAAa,SAAA,EAAW,SAAA,EAAW,eAAW,IAAA,EAAC,CAAA;AAAA,IACzD;AACE,MAAA,OAAO,IAAA;AAAA;AAEb;AAOO,SAAS,wBAAA,CAAyB,EAAE,UAAA,EAAY,UAAA,EAAW,EAAkC;AAClG,EAAA,MAAM,OAAO,UAAA,IAAc,EAAA;AAE3B,EAAA,uBACExC,eAAA,CAACkB,6BAAA,EAAA,EAAa,MAAA,EAAO,SAAA,EAAU,WAAU,iCAAA,EACvC,QAAA,EAAA;AAAA,oBAAAjB,cAAA,CAAC,cAAA,EAAA,EAAe,YAAY,IAAA,EAAM,CAAA;AAAA,IACjC,6BAAaA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8BAAA,EAAgC,sBAAW,CAAA,GAAU;AAAA,GAAA,EACrF,CAAA;AAEJ;AAMA,MAAM,aAAA,GAAkE;AAAA,EACtE,WAAW,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAOwC,gBAAO,OAAA,EAAQ;AAAA,EAChD,IAAI,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAOA,gBAAO,OAAA,EAAQ;AAAA,EACzC,OAAO,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAOA,gBAAO,KAAA,EAAM;AAAA,EAC3C,OAAO,EAAE,KAAA,EAAO,GAAA,EAAK,KAAA,EAAOA,gBAAO,QAAA;AACrC,CAAA;AAMO,SAAS,wBAAA,CAAyB,EAAE,MAAA,EAAO,EAAkC;AAClF,EAAA,MAAM,GAAA,GAAA,CAAO,MAAA,IAAU,OAAA,EAAS,WAAA,EAAY;AAC5C,EAAA,MAAM,MAAA,GAAS,aAAA,CAAc,GAAG,CAAA,IAAK,cAAc,OAAO,CAAA;AAE1D,EAAA,sCACGvB,6BAAA,EAAA,EAAa,MAAA,EAAO,SAAA,EACnB,QAAA,kBAAAjB,cAAA,CAAC,UAAK,SAAA,EAAU,oCAAA,EAAqC,KAAA,EAAO,EAAE,OAAO,MAAA,CAAO,KAAA,EAAM,EAC/E,QAAA,EAAA,MAAA,CAAO,OACV,CAAA,EACF,CAAA;AAEJ;;ACrGA,SAAS,mBAAmB,KAAA,EAA4C;AACtE,EAAA,uBAAOA,cAAA,CAACS,6BAAA,EAAA,EAAc,GAAG,KAAA,EAAO,CAAA;AAClC;AAEO,MAAM,cAAA,GAAiB,MAAA,CAAO,MAAA,CAAO,kBAAA,EAAoB;AAAA,EAC9D,GAAA,EAAKC,4BAAA;AAAA,EACL,OAAA,EAASC,gCAAA;AAAA,EACT,kBAAA,EAAoBC,2CAAA;AAAA,EACpB,SAAA,EAAWG,kCAAA;AAAA,EACX,OAAA,EAASY,gCAAA;AAAA,EACT,SAAA,EAAW,iBAAA;AAAA,EACX,UAAA,EAAY,kBAAA;AAAA,EACZ,MAAA,EAAQC,+BAAA;AAAA,EACR,MAAA,EAAQP,+BAAA;AAAA,EACR,QAAA,EAAUE,iCAAA;AAAA,EACV,QAAA,EAAUC,iCAAA;AAAA,EACV,QAAA,EAAU,sBAAA;AAAA,EACV,SAAA,EAAW,uBAAA;AAAA,EACX,UAAA,EAAY,wBAAA;AAAA,EACZ,UAAA,EAAY,wBAAA;AAAA,EACZ,eAAA,EAAiBK;AACnB,CAAC;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"traces-data-list-CB7frfpp.js","sources":["../src/ds/components/DataList/data-list-pagination.tsx","../src/ds/components/DataList/data-list-row-static.tsx","../src/ds/components/DataList/data-list-subheader.tsx","../src/ds/components/DataList/data-list-subheading.tsx","../src/ds/components/DataList/data-list-top-cells.tsx","../src/ds/components/DataList/data-list.tsx","../src/ds/components/DataList/ScoresDataList/scores-data-list-cells.tsx","../src/ds/components/DataList/ScoresDataList/scores-data-list.tsx","../src/ds/components/DataList/TracesDataList/traces-data-list-cells.tsx","../src/ds/components/DataList/TracesDataList/traces-data-list.tsx"],"sourcesContent":["import { ArrowLeftIcon, ArrowRightIcon } from 'lucide-react';\nimport { Button } from '@/ds/components/Button';\n\nexport type DataListPaginationProps = {\n currentPage?: number;\n hasMore?: boolean;\n onNextPage?: () => void;\n onPrevPage?: () => void;\n};\n\nexport function DataListPagination({ currentPage, hasMore, onNextPage, onPrevPage }: DataListPaginationProps) {\n const showNavigation = (typeof currentPage === 'number' && currentPage > 0) || hasMore;\n\n return (\n <div className=\"col-span-full flex py-4 items-center justify-center text-neutral3 text-ui-md gap-8\">\n <span>\n Page <b>{currentPage ? currentPage + 1 : '1'}</b>\n </span>\n {showNavigation && (\n <div className=\"flex gap-4\">\n {typeof currentPage === 'number' && currentPage > 0 && (\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={onPrevPage}>\n <ArrowLeftIcon />\n Previous\n </Button>\n )}\n {hasMore && (\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={onNextPage}>\n Next\n <ArrowRightIcon />\n </Button>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { forwardRef } from 'react';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { useDataListRowWrapperContext } from './data-list-row-wrapper-context';\nimport { dataListRowStaticStyles, dataListRowVariants } from './shared';\nimport type { DataListRowSharedProps } from './shared';\nimport { cn } from '@/lib/utils';\n\nexport type DataListRowStaticProps = ComponentPropsWithoutRef<'div'> & DataListRowSharedProps;\n\n/**\n * Non-interactive row. Use when a row should *display* like a regular row but\n * has no link target or click handler\n */\nexport const DataListRowStatic = forwardRef<HTMLDivElement, DataListRowStaticProps>(\n ({ children, className, flushLeft, flushRight, colStart, colEnd, featured, variant, style, ...rest }, ref) => {\n const isWrapped = useDataListRowWrapperContext();\n const hasColumnOverride = colStart !== undefined || colEnd !== undefined;\n const resolvedStyle = hasColumnOverride ? { ...style, gridColumn: `${colStart ?? 1} / ${colEnd ?? -1}` } : style;\n return (\n <div\n ref={ref}\n className={cn(\n isWrapped\n ? 'grid grid-cols-subgrid gap-8 px-5 transition-colors duration-200 rounded-lg'\n : dataListRowStaticStyles,\n !isWrapped && flushLeft && 'ml-0!',\n !isWrapped && flushRight && 'mr-0!',\n // `!` so the selection fill wins over borderless table root styling\n // (higher-specificity descendant rules); same color in `default`.\n featured && 'bg-surface4!',\n dataListRowVariants({ variant }),\n className,\n )}\n style={resolvedStyle}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\nDataListRowStatic.displayName = 'DataListRowStatic';\n","import { forwardRef } from 'react';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type DataListSubheaderProps = ComponentPropsWithoutRef<'div'>;\n\nexport const DataListSubheader = forwardRef<HTMLDivElement, DataListSubheaderProps>(\n ({ children, className, ...rest }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'data-list-subheader relative isolate col-span-full px-4 py-3 border-none text-ui-md text-neutral4 font-medium mx-1',\n 'before:absolute before:inset-x-0 before:inset-y-1 before:bg-surface4 before:rounded-md before:-z-1',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\nDataListSubheader.displayName = 'DataListSubheader';\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type DataListSubHeadingProps = {\n children: ReactNode;\n className?: string;\n};\n\nexport function DataListSubHeading({ children, className }: DataListSubHeadingProps) {\n return <span className={cn('text-ui-sm text-neutral2 font-normal', className)}>{children}</span>;\n}\n","import { forwardRef } from 'react';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type DataListTopCellsProps = ComponentPropsWithoutRef<'div'> & {\n /**\n * Drop the group's default left margin. Use when this sits as the second\n * child of a gap-0 `DataList.Top`, beside a `DataList.TopSelectCell` that\n * owns the leading column.\n */\n flushLeft?: boolean;\n /**\n * Place the group starting at this column line, spanning through to the\n * last column. Defaults to the full grid (`col-span-full`). Use when this\n * sits beside a leading cell that owns column 1.\n */\n colStart?: number;\n};\n\n/**\n * Non-interactive header equivalent of `DataList.RowButton`. Groups a set of\n * `DataList.TopCell`s with the same horizontal layout (gap, mx, px) as\n * `RowButton`, so columns inside a wrapped `Top` line up cell-for-cell with the\n * columns inside a wrapped `Row`.\n */\nexport const DataListTopCells = forwardRef<HTMLDivElement, DataListTopCellsProps>(\n ({ children, className, flushLeft, colStart, style, ...rest }, ref) => {\n return (\n <div\n ref={ref}\n className={cn('grid grid-cols-subgrid gap-8 col-span-full px-5', flushLeft && 'pl-0!', className)}\n style={colStart ? { ...style, gridColumn: `${colStart} / -1` } : style}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\nDataListTopCells.displayName = 'DataListTopCells';\n","import {\n DataListCell,\n DataListTextCell,\n DataListNameCell,\n DataListDescriptionCell,\n DataListIdCell,\n DataListSelectCell,\n DataListMonoCell,\n DataListDateCell,\n DataListTimeCell,\n} from './data-list-cells';\nimport { DataListNextPageLoading } from './data-list-next-page-loading';\nimport { DataListNoMatch } from './data-list-no-match';\nimport { DataListPagination } from './data-list-pagination';\nimport { DataListRoot } from './data-list-root';\nimport { DataListRowButton } from './data-list-row-button';\nimport { DataListRowLink } from './data-list-row-link';\nimport { DataListRowStatic } from './data-list-row-static';\nimport { DataListRowWrapper } from './data-list-row-wrapper';\nimport { DataListSpacer } from './data-list-spacer';\nimport { DataListSubheader } from './data-list-subheader';\nimport { DataListSubHeading } from './data-list-subheading';\nimport { DataListTop } from './data-list-top';\nimport {\n DataListTopCell,\n DataListTopCellWithTooltip,\n DataListTopCellSmart,\n DataListTopSelectCell,\n} from './data-list-top-cell';\nimport { DataListTopCells } from './data-list-top-cells';\n\nexport const DataList = Object.assign(DataListRoot, {\n Top: DataListTop,\n TopCells: DataListTopCells,\n TopCell: DataListTopCell,\n TopCellWithTooltip: DataListTopCellWithTooltip,\n TopCellSmart: DataListTopCellSmart,\n RowWrapper: DataListRowWrapper,\n RowButton: DataListRowButton,\n RowLink: DataListRowLink,\n RowStatic: DataListRowStatic,\n Cell: DataListCell,\n TextCell: DataListTextCell,\n NameCell: DataListNameCell,\n DescriptionCell: DataListDescriptionCell,\n IdCell: DataListIdCell,\n MonoCell: DataListMonoCell,\n DateCell: DataListDateCell,\n TimeCell: DataListTimeCell,\n SelectCell: DataListSelectCell,\n TopSelectCell: DataListTopSelectCell,\n NoMatch: DataListNoMatch,\n Subheader: DataListSubheader,\n SubHeading: DataListSubHeading,\n Spacer: DataListSpacer,\n NextPageLoading: DataListNextPageLoading,\n Pagination: DataListPagination,\n});\n","import { format, isToday } from 'date-fns';\nimport { DataListCell } from '../data-list-cells';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction toDate(value: Date | string): Date | null {\n const date = value instanceof Date ? value : new Date(value);\n return isNaN(date.getTime()) ? null : date;\n}\n\n// ---------------------------------------------------------------------------\n// DateCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListDateCellProps {\n timestamp: Date | string;\n}\n\nexport function ScoresDataListDateCell({ timestamp }: ScoresDataListDateCellProps) {\n const date = toDate(timestamp);\n return (\n <DataListCell height=\"compact\" className=\"text-ui-smd text-neutral2\">\n {date ? (isToday(date) ? 'Today' : format(date, 'MMM dd')) : '-'}\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// TimeCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListTimeCellProps {\n timestamp: Date | string;\n}\n\nexport function ScoresDataListTimeCell({ timestamp }: ScoresDataListTimeCellProps) {\n const date = toDate(timestamp);\n return (\n <DataListCell height=\"compact\" className=\"text-ui-smd text-neutral3\">\n {date ? format(date, 'h:mm:ss aaa') : '-'}\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// InputCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListInputCellProps {\n input?: unknown;\n}\n\nexport function ScoresDataListInputCell({ input }: ScoresDataListInputCellProps) {\n return (\n <DataListCell height=\"compact\" className=\"min-w-0\">\n <span className=\"block text-neutral3 text-ui-smd font-mono truncate\">\n {input != null ? JSON.stringify(input) : '-'}\n </span>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// EntityCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListEntityCellProps {\n entityId?: string | null;\n}\n\nexport function ScoresDataListEntityCell({ entityId }: ScoresDataListEntityCellProps) {\n return (\n <DataListCell height=\"compact\" className=\"min-w-0\">\n <span className=\"block text-ui-smd truncate\">{entityId || '-'}</span>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// ScoreCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListScoreCellProps {\n score?: unknown;\n}\n\nexport function ScoresDataListScoreCell({ score }: ScoresDataListScoreCellProps) {\n const display = score == null ? '-' : typeof score === 'object' ? JSON.stringify(score) : String(score);\n return (\n <DataListCell height=\"compact\" className=\"text-ui-smd font-mono text-neutral3\">\n {display}\n </DataListCell>\n );\n}\n","import type { ComponentProps } from 'react';\nimport { DataListNextPageLoading } from '../data-list-next-page-loading';\nimport { DataListNoMatch } from '../data-list-no-match';\nimport { DataListRoot } from '../data-list-root';\nimport { DataListRowButton } from '../data-list-row-button';\nimport { DataListTop } from '../data-list-top';\nimport { DataListTopCell } from '../data-list-top-cell';\nimport {\n ScoresDataListDateCell,\n ScoresDataListTimeCell,\n ScoresDataListInputCell,\n ScoresDataListEntityCell,\n ScoresDataListScoreCell,\n} from './scores-data-list-cells';\n\nfunction ScoresDataListRoot(props: ComponentProps<typeof DataListRoot>) {\n return <DataListRoot {...props} />;\n}\n\nexport const ScoresDataList = Object.assign(ScoresDataListRoot, {\n Top: DataListTop,\n TopCell: DataListTopCell,\n RowButton: DataListRowButton,\n NoMatch: DataListNoMatch,\n NextPageLoading: DataListNextPageLoading,\n DateCell: ScoresDataListDateCell,\n TimeCell: ScoresDataListTimeCell,\n InputCell: ScoresDataListInputCell,\n EntityCell: ScoresDataListEntityCell,\n ScoreCell: ScoresDataListScoreCell,\n});\n","import { EntityType } from '@mastra/core/observability';\nimport { CornerDownRightIcon, ListTreeIcon } from 'lucide-react';\nimport { DataListCell, DataListMonoCell } from '../data-list-cells';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\nimport { AgentIcon } from '@/ds/icons/AgentIcon';\nimport { WorkflowIcon } from '@/ds/icons/WorkflowIcon';\nimport { Colors } from '@/ds/tokens/colors';\nimport { cn } from '@/lib/utils';\n\n// ---------------------------------------------------------------------------\n// NameCell\n// ---------------------------------------------------------------------------\n\nexport interface TracesDataListNameCellProps {\n name?: string | null;\n /** `null`/missing → root span (Trace). Set → nested span (Subtrace). Drives the leading level icon. */\n parentSpanId?: string | null;\n /** When true, the leading level icon is wrapped in a Trace/Subtrace tooltip. Off by default —\n * only meaningful in branches mode, where rows mix root traces and subtraces. */\n showLevelTooltip?: boolean;\n}\n\nexport function TracesDataListNameCell({ name, parentSpanId, showLevelTooltip }: TracesDataListNameCellProps) {\n const isRoot = parentSpanId == null;\n const Icon = isRoot ? ListTreeIcon : CornerDownRightIcon;\n const label = isRoot ? 'Trace' : 'Subtrace';\n const icon = (\n <span aria-label={label} className=\"inline-flex shrink-0\">\n <Icon className={cn('size-4 shrink-0', isRoot ? 'text-neutral3' : 'text-neutral2')} aria-hidden />\n </span>\n );\n return (\n <DataListCell height=\"compact\" className=\"text-neutral4 text-ui-smd min-w-0 flex items-center gap-2\">\n {showLevelTooltip ? (\n <Tooltip>\n <TooltipTrigger asChild>{icon}</TooltipTrigger>\n <TooltipContent>{label}</TooltipContent>\n </Tooltip>\n ) : (\n icon\n )}\n <span className=\"min-w-0 truncate\">{name || '-'}</span>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// InputCell\n// ---------------------------------------------------------------------------\n\nexport interface TracesDataListInputCellProps {\n input?: string | null;\n}\n\nexport function TracesDataListInputCell({ input }: TracesDataListInputCellProps) {\n return <DataListMonoCell>{input || '-'}</DataListMonoCell>;\n}\n\n// ---------------------------------------------------------------------------\n// EntityCell\n// ---------------------------------------------------------------------------\n\nfunction EntityTypeIcon({ entityType, className }: { entityType: string; className?: string }) {\n const iconClass = cn('size-3.5 shrink-0 text-neutral2', className);\n const normalizedEntityType = entityType.toLowerCase();\n\n switch (normalizedEntityType) {\n case EntityType.AGENT:\n return <AgentIcon className={iconClass} aria-hidden />;\n case 'workflow':\n case EntityType.WORKFLOW_RUN:\n return <WorkflowIcon className={iconClass} aria-hidden />;\n default:\n return null;\n }\n}\n\nexport interface TracesDataListEntityCellProps {\n entityType?: string | null;\n entityName?: string | null;\n}\n\nexport function TracesDataListEntityCell({ entityType, entityName }: TracesDataListEntityCellProps) {\n const type = entityType ?? '';\n\n return (\n <DataListCell height=\"compact\" className=\"flex min-w-0 items-center gap-2\">\n <EntityTypeIcon entityType={type} />\n {entityName ? <span className=\"min-w-0 text-ui-smd truncate\">{entityName}</span> : '-'}\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// StatusCell\n// ---------------------------------------------------------------------------\n\nconst STATUS_CONFIG: Record<string, { label: string; color: string }> = {\n completed: { label: 'OK', color: Colors.accent2 },\n ok: { label: 'OK', color: Colors.accent2 },\n error: { label: 'ERR', color: Colors.error },\n unset: { label: '-', color: Colors.neutral4 },\n};\n\nexport interface TracesDataListStatusCellProps {\n status?: string | null;\n}\n\nexport function TracesDataListStatusCell({ status }: TracesDataListStatusCellProps) {\n const key = (status ?? 'unset').toLowerCase();\n const config = STATUS_CONFIG[key] ?? STATUS_CONFIG['unset'];\n\n return (\n <DataListCell height=\"compact\">\n <span className=\"uppercase text-ui-sm font-semibold\" style={{ color: config.color }}>\n {config.label}\n </span>\n </DataListCell>\n );\n}\n","import type { ComponentProps } from 'react';\nimport { DataListDateCell, DataListIdCell, DataListTimeCell } from '../data-list-cells';\nimport { DataListNextPageLoading } from '../data-list-next-page-loading';\nimport { DataListNoMatch } from '../data-list-no-match';\nimport { DataListRoot } from '../data-list-root';\nimport { DataListRowButton } from '../data-list-row-button';\nimport { DataListSpacer } from '../data-list-spacer';\nimport { DataListSubheader } from '../data-list-subheader';\nimport { DataListSubHeading } from '../data-list-subheading';\nimport { DataListTop } from '../data-list-top';\nimport { DataListTopCell, DataListTopCellWithTooltip } from '../data-list-top-cell';\nimport {\n TracesDataListNameCell,\n TracesDataListInputCell,\n TracesDataListEntityCell,\n TracesDataListStatusCell,\n} from './traces-data-list-cells';\n\nfunction TracesDataListRoot(props: ComponentProps<typeof DataListRoot>) {\n return <DataListRoot {...props} />;\n}\n\nexport const TracesDataList = Object.assign(TracesDataListRoot, {\n Top: DataListTop,\n TopCell: DataListTopCell,\n TopCellWithTooltip: DataListTopCellWithTooltip,\n RowButton: DataListRowButton,\n NoMatch: DataListNoMatch,\n Subheader: DataListSubheader,\n SubHeading: DataListSubHeading,\n Spacer: DataListSpacer,\n IdCell: DataListIdCell,\n DateCell: DataListDateCell,\n TimeCell: DataListTimeCell,\n NameCell: TracesDataListNameCell,\n InputCell: TracesDataListInputCell,\n EntityCell: TracesDataListEntityCell,\n StatusCell: TracesDataListStatusCell,\n NextPageLoading: DataListNextPageLoading,\n});\n"],"names":[],"mappings":"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"}
@@ -1,73 +0,0 @@
1
- import React__default, { useState, useRef, useCallback } from 'react';
2
- import { jsx } from 'react/jsx-runtime';
3
- import { toast as toast$1, Toaster as Toaster$1 } from 'sonner';
4
- import { c as cn } from './utils-CzYGxqbG.js';
5
-
6
- import './use-copy-to-clipboard.css';const Toaster = ({ className, toastOptions, ...rest }) => /* @__PURE__ */ jsx(
7
- Toaster$1,
8
- {
9
- ...rest,
10
- closeButton: true,
11
- richColors: true,
12
- className: cn("mastra-toaster", className),
13
- toastOptions: { duration: 5e3, ...toastOptions }
14
- }
15
- );
16
- const forEachOrOnce = (message, emit) => Array.isArray(message) ? message.map(emit) : emit(message);
17
- const toast = (message, options = {}) => {
18
- if (Array.isArray(message)) return message.map((m) => toast$1(m, options));
19
- if (React__default.isValidElement(message) || typeof message === "string") return toast$1(message, options);
20
- throw new Error("Invalid message type");
21
- };
22
- toast.success = (message, options = {}) => forEachOrOnce(message, (m) => toast$1.success(m, options));
23
- toast.error = (message, options = {}) => forEachOrOnce(message, (m) => toast$1.error(m, options));
24
- toast.warning = (message, options = {}) => forEachOrOnce(message, (m) => toast$1.warning(m, options));
25
- toast.info = (message, options = {}) => forEachOrOnce(message, (m) => toast$1.info(m, options));
26
- toast.custom = (message, options = {}) => toast$1(message, options);
27
- toast.dismiss = (toastId) => toast$1.dismiss(toastId);
28
- toast.promise = ({
29
- myPromise,
30
- loadingMessage,
31
- successMessage,
32
- errorMessage,
33
- onSuccess,
34
- onError,
35
- options = {}
36
- }) => toast$1.promise(myPromise, {
37
- loading: loadingMessage ?? "Loading...",
38
- success: (data) => {
39
- onSuccess?.(data);
40
- return successMessage;
41
- },
42
- error: (err) => {
43
- onError?.(err);
44
- if (errorMessage) return errorMessage;
45
- if (err instanceof Error) return err.message;
46
- return "Error...";
47
- },
48
- ...options
49
- });
50
-
51
- function useCopyToClipboard({ text, copyMessage = "Copied to clipboard!" }) {
52
- const [isCopied, setIsCopied] = useState(false);
53
- const timeoutRef = useRef(null);
54
- const handleCopy = useCallback(() => {
55
- navigator.clipboard.writeText(text).then(() => {
56
- toast.success(copyMessage);
57
- setIsCopied(true);
58
- if (timeoutRef.current) {
59
- clearTimeout(timeoutRef.current);
60
- timeoutRef.current = null;
61
- }
62
- timeoutRef.current = setTimeout(() => {
63
- setIsCopied(false);
64
- }, 2e3);
65
- }).catch(() => {
66
- toast.error("Failed to copy to clipboard.");
67
- });
68
- }, [text, copyMessage]);
69
- return { isCopied, handleCopy };
70
- }
71
-
72
- export { Toaster as T, toast as t, useCopyToClipboard as u };
73
- //# sourceMappingURL=use-copy-to-clipboard-CGqfkXnN.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-copy-to-clipboard-CGqfkXnN.js","sources":["../src/lib/toast.tsx","../src/hooks/use-copy-to-clipboard.ts"],"sourcesContent":["import type { ReactNode } from 'react';\nimport React from 'react';\nimport type { ExternalToast, ToasterProps } from 'sonner';\nimport { toast as sonnerToast, Toaster as SonnerToaster } from 'sonner';\n\nimport { cn } from '@/lib/utils';\n\nimport './toast.css';\n\n// All theming lives in `.mastra-toaster` (see toast.css) — sonner reads --success-bg / --error-bg / etc.\n// from richColors mode. `rest` is spread first so callers can't override the closeButton / richColors\n// contract (sonner's per-type tinted colors only kick in with richColors, and the close button is the\n// only built-in dismiss affordance we expose).\nexport const Toaster = ({ className, toastOptions, ...rest }: ToasterProps) => (\n <SonnerToaster\n {...rest}\n closeButton\n richColors\n className={cn('mastra-toaster', className)}\n toastOptions={{ duration: 5000, ...toastOptions }}\n />\n);\n\n// Forward sonner's return value so callers can update/dismiss by id later.\nconst forEachOrOnce = <M, R>(message: M | M[], emit: (m: M) => R): R | R[] =>\n Array.isArray(message) ? message.map(emit) : emit(message);\n\nexport const toast = (message: string | string[] | ReactNode, options: ExternalToast = {}) => {\n if (Array.isArray(message)) return message.map(m => sonnerToast(m, options));\n if (React.isValidElement(message) || typeof message === 'string') return sonnerToast(message, options);\n throw new Error('Invalid message type');\n};\n\ntoast.success = (message: string | string[], options: ExternalToast = {}) =>\n forEachOrOnce(message, m => sonnerToast.success(m, options));\ntoast.error = (message: string | string[], options: ExternalToast = {}) =>\n forEachOrOnce(message, m => sonnerToast.error(m, options));\ntoast.warning = (message: string | string[], options: ExternalToast = {}) =>\n forEachOrOnce(message, m => sonnerToast.warning(m, options));\ntoast.info = (message: string | string[], options: ExternalToast = {}) =>\n forEachOrOnce(message, m => sonnerToast.info(m, options));\n\ntoast.custom = (message: ReactNode, options: ExternalToast = {}) => sonnerToast(message, options);\n\ntoast.dismiss = (toastId?: string | number) => sonnerToast.dismiss(toastId);\n\ntoast.promise = <T,>({\n myPromise,\n loadingMessage,\n successMessage,\n errorMessage,\n onSuccess,\n onError,\n options = {},\n}: {\n myPromise: Promise<T>;\n successMessage: string;\n loadingMessage?: string;\n errorMessage?: string;\n onSuccess?: (data: T) => void;\n onError?: (err: unknown) => void;\n options?: ExternalToast;\n}) =>\n sonnerToast.promise(myPromise, {\n loading: loadingMessage ?? 'Loading...',\n success: (data: T) => {\n onSuccess?.(data);\n return successMessage;\n },\n error: (err: unknown) => {\n onError?.(err);\n if (errorMessage) return errorMessage;\n if (err instanceof Error) return err.message;\n return 'Error...';\n },\n ...options,\n });\n","import { useCallback, useRef, useState } from 'react';\nimport { toast } from '@/lib/toast';\n\ntype UseCopyToClipboardProps = {\n text: string;\n copyMessage?: string;\n};\n\nexport function useCopyToClipboard({ text, copyMessage = 'Copied to clipboard!' }: UseCopyToClipboardProps) {\n const [isCopied, setIsCopied] = useState(false);\n const timeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n const handleCopy = useCallback(() => {\n navigator.clipboard\n .writeText(text)\n .then(() => {\n toast.success(copyMessage);\n setIsCopied(true);\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n timeoutRef.current = setTimeout(() => {\n setIsCopied(false);\n }, 2000);\n })\n .catch(() => {\n toast.error('Failed to copy to clipboard.');\n });\n }, [text, copyMessage]);\n\n return { isCopied, handleCopy };\n}\n"],"names":["SonnerToaster","sonnerToast","React"],"mappings":";;;;;AAaO,MAAM,UAAU,CAAC,EAAE,WAAW,YAAA,EAAc,GAAG,MAAK,qBACzD,GAAA;AAAA,EAACA,SAAA;AAAA,EAAA;AAAA,IACE,GAAG,IAAA;AAAA,IACJ,WAAA,EAAW,IAAA;AAAA,IACX,UAAA,EAAU,IAAA;AAAA,IACV,SAAA,EAAW,EAAA,CAAG,gBAAA,EAAkB,SAAS,CAAA;AAAA,IACzC,YAAA,EAAc,EAAE,QAAA,EAAU,GAAA,EAAM,GAAG,YAAA;AAAa;AAClD;AAIF,MAAM,aAAA,GAAgB,CAAO,OAAA,EAAkB,IAAA,KAC7C,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,GAAI,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,GAAI,KAAK,OAAO,CAAA;AAEpD,MAAM,KAAA,GAAQ,CAAC,OAAA,EAAwC,OAAA,GAAyB,EAAC,KAAM;AAC5F,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAA,KAAKC,OAAA,CAAY,CAAA,EAAG,OAAO,CAAC,CAAA;AAC3E,EAAA,IAAIC,cAAA,CAAM,cAAA,CAAe,OAAO,CAAA,IAAK,OAAO,YAAY,QAAA,EAAU,OAAOD,OAAA,CAAY,OAAA,EAAS,OAAO,CAAA;AACrG,EAAA,MAAM,IAAI,MAAM,sBAAsB,CAAA;AACxC;AAEA,KAAA,CAAM,OAAA,GAAU,CAAC,OAAA,EAA4B,OAAA,GAAyB,EAAC,KACrE,aAAA,CAAc,OAAA,EAAS,CAAA,CAAA,KAAKA,OAAA,CAAY,OAAA,CAAQ,CAAA,EAAG,OAAO,CAAC,CAAA;AAC7D,KAAA,CAAM,KAAA,GAAQ,CAAC,OAAA,EAA4B,OAAA,GAAyB,EAAC,KACnE,aAAA,CAAc,OAAA,EAAS,CAAA,CAAA,KAAKA,OAAA,CAAY,KAAA,CAAM,CAAA,EAAG,OAAO,CAAC,CAAA;AAC3D,KAAA,CAAM,OAAA,GAAU,CAAC,OAAA,EAA4B,OAAA,GAAyB,EAAC,KACrE,aAAA,CAAc,OAAA,EAAS,CAAA,CAAA,KAAKA,OAAA,CAAY,OAAA,CAAQ,CAAA,EAAG,OAAO,CAAC,CAAA;AAC7D,KAAA,CAAM,IAAA,GAAO,CAAC,OAAA,EAA4B,OAAA,GAAyB,EAAC,KAClE,aAAA,CAAc,OAAA,EAAS,CAAA,CAAA,KAAKA,OAAA,CAAY,IAAA,CAAK,CAAA,EAAG,OAAO,CAAC,CAAA;AAE1D,KAAA,CAAM,MAAA,GAAS,CAAC,OAAA,EAAoB,OAAA,GAAyB,EAAC,KAAMA,OAAA,CAAY,SAAS,OAAO,CAAA;AAEhG,KAAA,CAAM,OAAA,GAAU,CAAC,OAAA,KAA8BA,OAAA,CAAY,QAAQ,OAAO,CAAA;AAE1E,KAAA,CAAM,UAAU,CAAK;AAAA,EACnB,SAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAU;AACZ,CAAA,KASEA,OAAA,CAAY,QAAQ,SAAA,EAAW;AAAA,EAC7B,SAAS,cAAA,IAAkB,YAAA;AAAA,EAC3B,OAAA,EAAS,CAAC,IAAA,KAAY;AACpB,IAAA,SAAA,GAAY,IAAI,CAAA;AAChB,IAAA,OAAO,cAAA;AAAA,EACT,CAAA;AAAA,EACA,KAAA,EAAO,CAAC,GAAA,KAAiB;AACvB,IAAA,OAAA,GAAU,GAAG,CAAA;AACb,IAAA,IAAI,cAAc,OAAO,YAAA;AACzB,IAAA,IAAI,GAAA,YAAe,KAAA,EAAO,OAAO,GAAA,CAAI,OAAA;AACrC,IAAA,OAAO,UAAA;AAAA,EACT,CAAA;AAAA,EACA,GAAG;AACL,CAAC,CAAA;;ACpEI,SAAS,kBAAA,CAAmB,EAAE,IAAA,EAAM,WAAA,GAAc,wBAAuB,EAA4B;AAC1G,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,UAAA,GAAa,OAA8B,IAAI,CAAA;AAErD,EAAA,MAAM,UAAA,GAAa,YAAY,MAAM;AACnC,IAAA,SAAA,CAAU,SAAA,CACP,SAAA,CAAU,IAAI,CAAA,CACd,KAAK,MAAM;AACV,MAAA,KAAA,CAAM,QAAQ,WAAW,CAAA;AACzB,MAAA,WAAA,CAAY,IAAI,CAAA;AAChB,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,YAAA,CAAa,WAAW,OAAO,CAAA;AAC/B,QAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,MACvB;AACA,MAAA,UAAA,CAAW,OAAA,GAAU,WAAW,MAAM;AACpC,QAAA,WAAA,CAAY,KAAK,CAAA;AAAA,MACnB,GAAG,GAAI,CAAA;AAAA,IACT,CAAC,CAAA,CACA,KAAA,CAAM,MAAM;AACX,MAAA,KAAA,CAAM,MAAM,8BAA8B,CAAA;AAAA,IAC5C,CAAC,CAAA;AAAA,EACL,CAAA,EAAG,CAAC,IAAA,EAAM,WAAW,CAAC,CAAA;AAEtB,EAAA,OAAO,EAAE,UAAU,UAAA,EAAW;AAChC;;;;"}
@@ -1,77 +0,0 @@
1
- 'use strict';
2
-
3
- require('./use-copy-to-clipboard.css');const React = require('react');
4
- const jsxRuntime = require('react/jsx-runtime');
5
- const sonner = require('sonner');
6
- const utils = require('./utils-vA5sWo9W.cjs');
7
-
8
- const Toaster = ({ className, toastOptions, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx(
9
- sonner.Toaster,
10
- {
11
- ...rest,
12
- closeButton: true,
13
- richColors: true,
14
- className: utils.cn("mastra-toaster", className),
15
- toastOptions: { duration: 5e3, ...toastOptions }
16
- }
17
- );
18
- const forEachOrOnce = (message, emit) => Array.isArray(message) ? message.map(emit) : emit(message);
19
- const toast = (message, options = {}) => {
20
- if (Array.isArray(message)) return message.map((m) => sonner.toast(m, options));
21
- if (React.isValidElement(message) || typeof message === "string") return sonner.toast(message, options);
22
- throw new Error("Invalid message type");
23
- };
24
- toast.success = (message, options = {}) => forEachOrOnce(message, (m) => sonner.toast.success(m, options));
25
- toast.error = (message, options = {}) => forEachOrOnce(message, (m) => sonner.toast.error(m, options));
26
- toast.warning = (message, options = {}) => forEachOrOnce(message, (m) => sonner.toast.warning(m, options));
27
- toast.info = (message, options = {}) => forEachOrOnce(message, (m) => sonner.toast.info(m, options));
28
- toast.custom = (message, options = {}) => sonner.toast(message, options);
29
- toast.dismiss = (toastId) => sonner.toast.dismiss(toastId);
30
- toast.promise = ({
31
- myPromise,
32
- loadingMessage,
33
- successMessage,
34
- errorMessage,
35
- onSuccess,
36
- onError,
37
- options = {}
38
- }) => sonner.toast.promise(myPromise, {
39
- loading: loadingMessage ?? "Loading...",
40
- success: (data) => {
41
- onSuccess?.(data);
42
- return successMessage;
43
- },
44
- error: (err) => {
45
- onError?.(err);
46
- if (errorMessage) return errorMessage;
47
- if (err instanceof Error) return err.message;
48
- return "Error...";
49
- },
50
- ...options
51
- });
52
-
53
- function useCopyToClipboard({ text, copyMessage = "Copied to clipboard!" }) {
54
- const [isCopied, setIsCopied] = React.useState(false);
55
- const timeoutRef = React.useRef(null);
56
- const handleCopy = React.useCallback(() => {
57
- navigator.clipboard.writeText(text).then(() => {
58
- toast.success(copyMessage);
59
- setIsCopied(true);
60
- if (timeoutRef.current) {
61
- clearTimeout(timeoutRef.current);
62
- timeoutRef.current = null;
63
- }
64
- timeoutRef.current = setTimeout(() => {
65
- setIsCopied(false);
66
- }, 2e3);
67
- }).catch(() => {
68
- toast.error("Failed to copy to clipboard.");
69
- });
70
- }, [text, copyMessage]);
71
- return { isCopied, handleCopy };
72
- }
73
-
74
- exports.Toaster = Toaster;
75
- exports.toast = toast;
76
- exports.useCopyToClipboard = useCopyToClipboard;
77
- //# sourceMappingURL=use-copy-to-clipboard-CQgIuR1c.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-copy-to-clipboard-CQgIuR1c.cjs","sources":["../src/lib/toast.tsx","../src/hooks/use-copy-to-clipboard.ts"],"sourcesContent":["import type { ReactNode } from 'react';\nimport React from 'react';\nimport type { ExternalToast, ToasterProps } from 'sonner';\nimport { toast as sonnerToast, Toaster as SonnerToaster } from 'sonner';\n\nimport { cn } from '@/lib/utils';\n\nimport './toast.css';\n\n// All theming lives in `.mastra-toaster` (see toast.css) — sonner reads --success-bg / --error-bg / etc.\n// from richColors mode. `rest` is spread first so callers can't override the closeButton / richColors\n// contract (sonner's per-type tinted colors only kick in with richColors, and the close button is the\n// only built-in dismiss affordance we expose).\nexport const Toaster = ({ className, toastOptions, ...rest }: ToasterProps) => (\n <SonnerToaster\n {...rest}\n closeButton\n richColors\n className={cn('mastra-toaster', className)}\n toastOptions={{ duration: 5000, ...toastOptions }}\n />\n);\n\n// Forward sonner's return value so callers can update/dismiss by id later.\nconst forEachOrOnce = <M, R>(message: M | M[], emit: (m: M) => R): R | R[] =>\n Array.isArray(message) ? message.map(emit) : emit(message);\n\nexport const toast = (message: string | string[] | ReactNode, options: ExternalToast = {}) => {\n if (Array.isArray(message)) return message.map(m => sonnerToast(m, options));\n if (React.isValidElement(message) || typeof message === 'string') return sonnerToast(message, options);\n throw new Error('Invalid message type');\n};\n\ntoast.success = (message: string | string[], options: ExternalToast = {}) =>\n forEachOrOnce(message, m => sonnerToast.success(m, options));\ntoast.error = (message: string | string[], options: ExternalToast = {}) =>\n forEachOrOnce(message, m => sonnerToast.error(m, options));\ntoast.warning = (message: string | string[], options: ExternalToast = {}) =>\n forEachOrOnce(message, m => sonnerToast.warning(m, options));\ntoast.info = (message: string | string[], options: ExternalToast = {}) =>\n forEachOrOnce(message, m => sonnerToast.info(m, options));\n\ntoast.custom = (message: ReactNode, options: ExternalToast = {}) => sonnerToast(message, options);\n\ntoast.dismiss = (toastId?: string | number) => sonnerToast.dismiss(toastId);\n\ntoast.promise = <T,>({\n myPromise,\n loadingMessage,\n successMessage,\n errorMessage,\n onSuccess,\n onError,\n options = {},\n}: {\n myPromise: Promise<T>;\n successMessage: string;\n loadingMessage?: string;\n errorMessage?: string;\n onSuccess?: (data: T) => void;\n onError?: (err: unknown) => void;\n options?: ExternalToast;\n}) =>\n sonnerToast.promise(myPromise, {\n loading: loadingMessage ?? 'Loading...',\n success: (data: T) => {\n onSuccess?.(data);\n return successMessage;\n },\n error: (err: unknown) => {\n onError?.(err);\n if (errorMessage) return errorMessage;\n if (err instanceof Error) return err.message;\n return 'Error...';\n },\n ...options,\n });\n","import { useCallback, useRef, useState } from 'react';\nimport { toast } from '@/lib/toast';\n\ntype UseCopyToClipboardProps = {\n text: string;\n copyMessage?: string;\n};\n\nexport function useCopyToClipboard({ text, copyMessage = 'Copied to clipboard!' }: UseCopyToClipboardProps) {\n const [isCopied, setIsCopied] = useState(false);\n const timeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n const handleCopy = useCallback(() => {\n navigator.clipboard\n .writeText(text)\n .then(() => {\n toast.success(copyMessage);\n setIsCopied(true);\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n timeoutRef.current = setTimeout(() => {\n setIsCopied(false);\n }, 2000);\n })\n .catch(() => {\n toast.error('Failed to copy to clipboard.');\n });\n }, [text, copyMessage]);\n\n return { isCopied, handleCopy };\n}\n"],"names":["jsx","SonnerToaster","cn","sonnerToast","useState","useRef","useCallback"],"mappings":"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"}