@mastra/playground-ui 60.0.0-alpha.1 → 60.0.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/components/LogsDataList.cjs.js +0 -2
  2. package/dist/components/LogsDataList.cjs.js.map +1 -1
  3. package/dist/components/LogsDataList.es.js +0 -2
  4. package/dist/components/LogsDataList.es.js.map +1 -1
  5. package/dist/components/MainSidebar.cjs.js +11 -125
  6. package/dist/components/MainSidebar.cjs.js.map +1 -1
  7. package/dist/components/MainSidebar.es.js +1 -120
  8. package/dist/components/MainSidebar.es.js.map +1 -1
  9. package/dist/domains/scores/components/trace-scores-tab.cjs.js +0 -1
  10. package/dist/domains/scores/components/trace-scores-tab.cjs.js.map +1 -1
  11. package/dist/domains/scores/components/trace-scores-tab.es.js +0 -1
  12. package/dist/domains/scores/components/trace-scores-tab.es.js.map +1 -1
  13. package/dist/domains/traces/components/traces-page-skeleton.cjs.js +0 -2
  14. package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
  15. package/dist/domains/traces/components/traces-page-skeleton.es.js +0 -2
  16. package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
  17. package/dist/domains/workflows/hooks/use-workflow-runs.cjs.js +3 -3
  18. package/dist/domains/workflows/hooks/use-workflow-runs.cjs.js.map +1 -1
  19. package/dist/domains/workflows/hooks/use-workflow-runs.es.js +3 -3
  20. package/dist/domains/workflows/hooks/use-workflow-runs.es.js.map +1 -1
  21. package/dist/domains/workflows/runs/workflow-run-list.cjs.js +7 -7
  22. package/dist/domains/workflows/runs/workflow-run-list.cjs.js.map +1 -1
  23. package/dist/domains/workflows/runs/workflow-run-list.es.js +8 -8
  24. package/dist/domains/workflows/runs/workflow-run-list.es.js.map +1 -1
  25. package/dist/ee/signals/components/entity-index-list.cjs.js +0 -2
  26. package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
  27. package/dist/ee/signals/components/entity-index-list.es.js +0 -2
  28. package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
  29. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +0 -1
  30. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
  31. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +0 -1
  32. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
  33. package/dist/{main-sidebar-link-active-C9QPj3D6.js → main-sidebar-BEXzGkDX.js} +118 -6
  34. package/dist/main-sidebar-BEXzGkDX.js.map +1 -0
  35. package/dist/{main-sidebar-link-active-UEuukSeT.cjs → main-sidebar-jbUd9Rz8.cjs} +117 -4
  36. package/dist/main-sidebar-jbUd9Rz8.cjs.map +1 -0
  37. package/dist/new/sidebar.cjs.js +32 -32
  38. package/dist/new/sidebar.cjs.js.map +1 -1
  39. package/dist/new/sidebar.es.js +2 -2
  40. package/dist/src/domains/workflows/hooks/use-workflow-runs.d.ts +6 -1
  41. package/package.json +6 -6
  42. package/dist/main-sidebar-link-active-C9QPj3D6.js.map +0 -1
  43. package/dist/main-sidebar-link-active-UEuukSeT.cjs.map +0 -1
@@ -4,8 +4,6 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
 
5
5
  const logsDataList = require('../logs-data-list-lJK0yGYj.cjs');
6
6
  const dataListSkeleton = require('../data-list-skeleton-CgbWqYky.cjs');
7
- require('react');
8
- require('../keyboard/keyboard-shortcuts-context.cjs.js');
9
7
 
10
8
 
11
9
 
@@ -1 +1 @@
1
- {"version":3,"file":"LogsDataList.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
1
+ {"version":3,"file":"LogsDataList.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
@@ -1,5 +1,3 @@
1
1
  export { L as LogsDataList } from '../logs-data-list-BKE5vYZR.js';
2
2
  export { D as LogsDataListSkeleton } from '../data-list-skeleton-BrSh9Y_3.js';
3
- import 'react';
4
- import '../keyboard/keyboard-shortcuts-context.es.js';
5
3
  //# sourceMappingURL=LogsDataList.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LogsDataList.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
1
+ {"version":3,"file":"LogsDataList.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -2,132 +2,18 @@
2
2
 
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
 
5
- const jsxRuntime = require('react/jsx-runtime');
6
- const utils_cn = require('../cn-DG0X1KEP.cjs');
7
- const mainSidebarLinkActive = require('../main-sidebar-link-active-UEuukSeT.cjs');
8
- const reactVisuallyHidden = require('@radix-ui/react-visually-hidden');
9
- const React = require('react');
5
+ const mainSidebar = require('../main-sidebar-jbUd9Rz8.cjs');
10
6
 
11
- function MainSidebarBottom({ className, children, ...props }) {
12
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: utils_cn.cn("mt-auto", className), ...props, children });
13
- }
14
7
 
15
- function MainSidebarNavHeader({
16
- children,
17
- className,
18
- state: stateProp,
19
- href,
20
- isActive,
21
- LinkComponent: LinkProp,
22
- ...props
23
- }) {
24
- const ctx = mainSidebarLinkActive.useMaybeSidebarState();
25
- const state = stateProp ?? ctx?.state ?? "default";
26
- const isMobile = ctx?.isMobile ?? false;
27
- const Link = LinkProp ?? ctx?.LinkComponent ?? "a";
28
- const showTitle = state === "default" && !isMobile;
29
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: utils_cn.cn("mt-2 mb-0.5 flex min-h-8 min-w-0 items-center", className), children: showTitle ? /* @__PURE__ */ jsxRuntime.jsx(
30
- "header",
31
- {
32
- ...props,
33
- className: utils_cn.cn("max-w-full min-w-0 truncate pl-3 text-column", {
34
- "text-foreground": isActive,
35
- "text-muted-foreground/70": !isActive
36
- }),
37
- children: href ? /* @__PURE__ */ jsxRuntime.jsx(
38
- Link,
39
- {
40
- href,
41
- className: utils_cn.cn("block min-w-0 truncate transition-colors duration-normal", {
42
- "hover:text-foreground": !isActive,
43
- "text-foreground": isActive
44
- }),
45
- children
46
- }
47
- ) : children
48
- }
49
- ) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
50
- /* @__PURE__ */ jsxRuntime.jsx(reactVisuallyHidden.VisuallyHidden, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx("header", { ...props, children }) }),
51
- /* @__PURE__ */ jsxRuntime.jsx("div", { "aria-hidden": "true", className: "mx-3 h-px flex-1 bg-border" })
52
- ] }) });
53
- }
54
8
 
55
- function getLinkKey(link) {
56
- return `${link.url}:${link.name}`;
57
- }
58
- function MainSidebarSectionLink({ link, activeCandidates, level = 0, isActive }) {
59
- const childLinks = link.children ?? [];
60
- return /* @__PURE__ */ jsxRuntime.jsx(
61
- mainSidebarLinkActive.MainSidebarNavLink,
62
- {
63
- link,
64
- isActive: isActive?.(link, activeCandidates) ?? link.isActive,
65
- level,
66
- subItems: childLinks.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(mainSidebarLinkActive.MainSidebarNavList, { className: "mt-0.5", children: childLinks.map((child) => /* @__PURE__ */ jsxRuntime.jsx(
67
- MainSidebarSectionLink,
68
- {
69
- link: child,
70
- activeCandidates,
71
- level: level + 1,
72
- isActive
73
- },
74
- getLinkKey(child)
75
- )) }) : null
76
- }
77
- );
78
- }
79
- function MainSidebarSections({ sections, isActive, className }) {
80
- const baseId = React.useId();
81
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: sections.map((section) => {
82
- const showSeparator = section.links.length > 0 && section.separator;
83
- const headerId = section.title ? `${baseId}-${section.key}` : void 0;
84
- return /* @__PURE__ */ jsxRuntime.jsxs(
85
- mainSidebarLinkActive.MainSidebarNavSection,
86
- {
87
- className,
88
- "aria-labelledby": headerId,
89
- "aria-label": !headerId ? section.key : void 0,
90
- children: [
91
- showSeparator ? /* @__PURE__ */ jsxRuntime.jsx(mainSidebarLinkActive.MainSidebarNavSeparator, {}) : null,
92
- section.title ? /* @__PURE__ */ jsxRuntime.jsx(MainSidebarNavHeader, { id: headerId, href: section.href, isActive: section.isHeaderActive, children: section.title }) : null,
93
- /* @__PURE__ */ jsxRuntime.jsx(mainSidebarLinkActive.MainSidebarNavList, { children: section.links.map((link) => /* @__PURE__ */ jsxRuntime.jsx(
94
- MainSidebarSectionLink,
95
- {
96
- link,
97
- activeCandidates: section.links,
98
- isActive
99
- },
100
- getLinkKey(link)
101
- )) })
102
- ]
103
- },
104
- section.key
105
- );
106
- }) });
107
- }
108
-
109
- const MainSidebar = Object.assign(mainSidebarLinkActive.MainSidebarRoot, {
110
- Bottom: MainSidebarBottom,
111
- Nav: mainSidebarLinkActive.MainSidebarNav,
112
- NavSection: mainSidebarLinkActive.MainSidebarNavSection,
113
- NavLink: mainSidebarLinkActive.MainSidebarNavLink,
114
- NavLabel: mainSidebarLinkActive.MainSidebarNavLabel,
115
- NavHeader: MainSidebarNavHeader,
116
- NavList: mainSidebarLinkActive.MainSidebarNavList,
117
- NavSeparator: mainSidebarLinkActive.MainSidebarNavSeparator,
118
- Sections: MainSidebarSections,
119
- Trigger: mainSidebarLinkActive.MainSidebarTrigger,
120
- MobileTrigger: mainSidebarLinkActive.MainSidebarMobileTrigger
121
- });
122
-
123
- exports.MainSidebarMobileTrigger = mainSidebarLinkActive.MainSidebarMobileTrigger;
124
- exports.MainSidebarProvider = mainSidebarLinkActive.MainSidebarProvider;
125
- exports.MainSidebarTrigger = mainSidebarLinkActive.MainSidebarTrigger;
126
- exports.getIsLinkActive = mainSidebarLinkActive.getIsLinkActive;
127
- exports.navItemClasses = mainSidebarLinkActive.navItemClasses;
128
- exports.useMainSidebar = mainSidebarLinkActive.useMainSidebar;
129
- exports.useMaybeSidebar = mainSidebarLinkActive.useMaybeSidebar;
130
- exports.useMaybeSidebarState = mainSidebarLinkActive.useMaybeSidebarState;
131
- exports.useMobileDrawer = mainSidebarLinkActive.useMobileDrawer;
132
- exports.MainSidebar = MainSidebar;
9
+ exports.MainSidebar = mainSidebar.MainSidebar;
10
+ exports.MainSidebarMobileTrigger = mainSidebar.MainSidebarMobileTrigger;
11
+ exports.MainSidebarProvider = mainSidebar.MainSidebarProvider;
12
+ exports.MainSidebarTrigger = mainSidebar.MainSidebarTrigger;
13
+ exports.getIsLinkActive = mainSidebar.getIsLinkActive;
14
+ exports.navItemClasses = mainSidebar.navItemClasses;
15
+ exports.useMainSidebar = mainSidebar.useMainSidebar;
16
+ exports.useMaybeSidebar = mainSidebar.useMaybeSidebar;
17
+ exports.useMaybeSidebarState = mainSidebar.useMaybeSidebarState;
18
+ exports.useMobileDrawer = mainSidebar.useMobileDrawer;
133
19
  //# sourceMappingURL=MainSidebar.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MainSidebar.cjs.js","sources":["../../src/ds/components/MainSidebar/main-sidebar-bottom.tsx","../../src/ds/components/MainSidebar/main-sidebar-nav-header.tsx","../../src/ds/components/MainSidebar/main-sidebar-sections.tsx","../../src/ds/components/MainSidebar/main-sidebar.ts"],"sourcesContent":["import type { ComponentPropsWithoutRef } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarBottomProps = ComponentPropsWithoutRef<'div'>;\n\nexport function MainSidebarBottom({ className, children, ...props }: MainSidebarBottomProps) {\n return (\n <div className={cn('mt-auto', className)} {...props}>\n {children}\n </div>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport type { SidebarState } from './main-sidebar-context';\nimport { useMaybeSidebarState } from './main-sidebar-context';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\nimport type { LinkComponent } from '@/ds/types/link-component';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarNavHeaderProps = Omit<ComponentPropsWithoutRef<'header'>, 'children'> & {\n children?: React.ReactNode;\n state?: SidebarState;\n href?: string;\n isActive?: boolean;\n LinkComponent?: LinkComponent;\n};\nexport function MainSidebarNavHeader({\n children,\n className,\n state: stateProp,\n href,\n isActive,\n LinkComponent: LinkProp,\n ...props\n}: MainSidebarNavHeaderProps) {\n const ctx = useMaybeSidebarState();\n const state: SidebarState = stateProp ?? ctx?.state ?? 'default';\n const isMobile = ctx?.isMobile ?? false;\n const Link: LinkComponent = LinkProp ?? ctx?.LinkComponent ?? 'a';\n const showTitle = state === 'default' && !isMobile;\n\n return (\n <div className={cn('mt-2 mb-0.5 flex min-h-8 min-w-0 items-center', className)}>\n {showTitle ? (\n <header\n {...props}\n className={cn('max-w-full min-w-0 truncate pl-3 text-column', {\n 'text-foreground': isActive,\n 'text-muted-foreground/70': !isActive,\n })}\n >\n {href ? (\n <Link\n href={href}\n className={cn('block min-w-0 truncate transition-colors duration-normal', {\n 'hover:text-foreground': !isActive,\n 'text-foreground': isActive,\n })}\n >\n {children}\n </Link>\n ) : (\n children\n )}\n </header>\n ) : (\n <>\n <VisuallyHidden asChild>\n <header {...props}>{children}</header>\n </VisuallyHidden>\n <div aria-hidden=\"true\" className=\"mx-3 h-px flex-1 bg-border\" />\n </>\n )}\n </div>\n );\n}\n","import { useId } from 'react';\nimport { MainSidebarNavHeader } from './main-sidebar-nav-header';\nimport { MainSidebarNavLink } from './main-sidebar-nav-link';\nimport type { NavLink } from './main-sidebar-nav-link';\nimport { MainSidebarNavList } from './main-sidebar-nav-list';\nimport { MainSidebarNavSection } from './main-sidebar-nav-section';\nimport type { NavSection } from './main-sidebar-nav-section';\nimport { MainSidebarNavSeparator } from './main-sidebar-nav-separator';\n\nexport type MainSidebarSectionsProps = {\n sections: NavSection[];\n /**\n * Called per link to decide the active state. Receives the section's links so\n * callers can use section-aware active logic without re-scanning `sections`\n * from the outside. Default: each link's `isActive`.\n */\n isActive?: (link: NavLink, activeCandidates: NavLink[]) => boolean;\n className?: string;\n};\n\ntype MainSidebarSectionLinkProps = {\n link: NavLink;\n activeCandidates: NavLink[];\n level?: number;\n isActive?: MainSidebarSectionsProps['isActive'];\n};\n\nfunction getLinkKey(link: NavLink) {\n return `${link.url}:${link.name}`;\n}\n\nfunction MainSidebarSectionLink({ link, activeCandidates, level = 0, isActive }: MainSidebarSectionLinkProps) {\n const childLinks = link.children ?? [];\n\n return (\n <MainSidebarNavLink\n link={link}\n isActive={isActive?.(link, activeCandidates) ?? link.isActive}\n level={level}\n subItems={\n childLinks.length > 0 ? (\n <MainSidebarNavList className=\"mt-0.5\">\n {childLinks.map(child => (\n <MainSidebarSectionLink\n key={getLinkKey(child)}\n link={child}\n activeCandidates={activeCandidates}\n level={level + 1}\n isActive={isActive}\n />\n ))}\n </MainSidebarNavList>\n ) : null\n }\n />\n );\n}\n\nexport function MainSidebarSections({ sections, isActive, className }: MainSidebarSectionsProps) {\n const baseId = useId();\n\n return (\n <>\n {sections.map(section => {\n const showSeparator = section.links.length > 0 && section.separator;\n const headerId = section.title ? `${baseId}-${section.key}` : undefined;\n return (\n <MainSidebarNavSection\n key={section.key}\n className={className}\n aria-labelledby={headerId}\n aria-label={!headerId ? section.key : undefined}\n >\n {/* Render separator and header independently — a section can have\n both (titled group preceded by a divider). */}\n {showSeparator ? <MainSidebarNavSeparator /> : null}\n {section.title ? (\n <MainSidebarNavHeader id={headerId} href={section.href} isActive={section.isHeaderActive}>\n {section.title}\n </MainSidebarNavHeader>\n ) : null}\n <MainSidebarNavList>\n {section.links.map(link => (\n <MainSidebarSectionLink\n key={getLinkKey(link)}\n link={link}\n activeCandidates={section.links}\n isActive={isActive}\n />\n ))}\n </MainSidebarNavList>\n </MainSidebarNavSection>\n );\n })}\n </>\n );\n}\n","import { MainSidebarBottom } from './main-sidebar-bottom';\nimport { MainSidebarMobileTrigger } from './main-sidebar-mobile-trigger';\nimport { MainSidebarNav } from './main-sidebar-nav';\nimport { MainSidebarNavHeader } from './main-sidebar-nav-header';\nimport { MainSidebarNavLabel } from './main-sidebar-nav-label';\nimport { MainSidebarNavLink } from './main-sidebar-nav-link';\nimport { MainSidebarNavList } from './main-sidebar-nav-list';\nimport { MainSidebarNavSection } from './main-sidebar-nav-section';\nimport { MainSidebarNavSeparator } from './main-sidebar-nav-separator';\nimport { MainSidebarRoot } from './main-sidebar-root';\nimport { MainSidebarSections } from './main-sidebar-sections';\nimport { MainSidebarTrigger } from './main-sidebar-trigger';\n\nexport type { MainSidebarStateContextValue, MobileDrawerContextValue, SidebarState } from './main-sidebar-context';\nexport { useMainSidebar, useMaybeSidebar, useMaybeSidebarState, useMobileDrawer } from './main-sidebar-context';\nexport { MainSidebarProvider, type MainSidebarProviderProps } from './main-sidebar-provider';\nexport { navItemClasses } from './main-sidebar-nav-item-classes';\nexport { type MainSidebarNavItemSize } from './main-sidebar-nav-item-classes';\nexport { type NavLink } from './main-sidebar-nav-link';\nexport { type NavSection } from './main-sidebar-nav-section';\nexport { MainSidebarTrigger } from './main-sidebar-trigger';\nexport { MainSidebarMobileTrigger } from './main-sidebar-mobile-trigger';\nexport { getIsLinkActive } from './main-sidebar-link-active';\n\nexport const MainSidebar = Object.assign(MainSidebarRoot, {\n Bottom: MainSidebarBottom,\n Nav: MainSidebarNav,\n NavSection: MainSidebarNavSection,\n NavLink: MainSidebarNavLink,\n NavLabel: MainSidebarNavLabel,\n NavHeader: MainSidebarNavHeader,\n NavList: MainSidebarNavList,\n NavSeparator: MainSidebarNavSeparator,\n Sections: MainSidebarSections,\n Trigger: MainSidebarTrigger,\n MobileTrigger: MainSidebarMobileTrigger,\n});\n"],"names":["jsx","cn","useMaybeSidebarState","jsxs","Fragment","VisuallyHidden","MainSidebarNavLink","MainSidebarNavList","useId","MainSidebarNavSection","MainSidebarNavSeparator","MainSidebarRoot","MainSidebarNav","MainSidebarNavLabel","MainSidebarTrigger","MainSidebarMobileTrigger"],"mappings":";;;;;;;;;;AAKO,SAAS,kBAAkB,EAAE,SAAA,EAAW,QAAA,EAAU,GAAG,OAAM,EAA2B;AAC3F,EAAA,uBACEA,cAAA,CAAC,SAAI,SAAA,EAAWC,WAAA,CAAG,WAAW,SAAS,CAAA,EAAI,GAAG,KAAA,EAC3C,QAAA,EACH,CAAA;AAEJ;;ACGO,SAAS,oBAAA,CAAqB;AAAA,EACnC,QAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA,EAAO,SAAA;AAAA,EACP,IAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA,EAAe,QAAA;AAAA,EACf,GAAG;AACL,CAAA,EAA8B;AAC5B,EAAA,MAAM,MAAMC,0CAAA,EAAqB;AACjC,EAAA,MAAM,KAAA,GAAsB,SAAA,IAAa,GAAA,EAAK,KAAA,IAAS,SAAA;AACvD,EAAA,MAAM,QAAA,GAAW,KAAK,QAAA,IAAY,KAAA;AAClC,EAAA,MAAM,IAAA,GAAsB,QAAA,IAAY,GAAA,EAAK,aAAA,IAAiB,GAAA;AAC9D,EAAA,MAAM,SAAA,GAAY,KAAA,KAAU,SAAA,IAAa,CAAC,QAAA;AAE1C,EAAA,sCACG,KAAA,EAAA,EAAI,SAAA,EAAWD,YAAG,+CAAA,EAAiD,SAAS,GAC1E,QAAA,EAAA,SAAA,mBACCD,cAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,SAAA,EAAWC,YAAG,8CAAA,EAAgD;AAAA,QAC5D,iBAAA,EAAmB,QAAA;AAAA,QACnB,4BAA4B,CAAC;AAAA,OAC9B,CAAA;AAAA,MAEA,QAAA,EAAA,IAAA,mBACCD,cAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,IAAA;AAAA,UACA,SAAA,EAAWC,YAAG,0DAAA,EAA4D;AAAA,YACxE,yBAAyB,CAAC,QAAA;AAAA,YAC1B,iBAAA,EAAmB;AAAA,WACpB,CAAA;AAAA,UAEA;AAAA;AAAA,OACH,GAEA;AAAA;AAAA,sBAIJE,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAJ,cAAA,CAACK,kCAAA,EAAA,EAAe,SAAO,IAAA,EACrB,QAAA,kBAAAL,cAAA,CAAC,YAAQ,GAAG,KAAA,EAAQ,UAAS,CAAA,EAC/B,CAAA;AAAA,oBACAA,cAAA,CAAC,KAAA,EAAA,EAAI,aAAA,EAAY,MAAA,EAAO,WAAU,4BAAA,EAA6B;AAAA,GAAA,EACjE,CAAA,EAEJ,CAAA;AAEJ;;ACpCA,SAAS,WAAW,IAAA,EAAe;AACjC,EAAA,OAAO,CAAA,EAAG,IAAA,CAAK,GAAG,CAAA,CAAA,EAAI,KAAK,IAAI,CAAA,CAAA;AACjC;AAEA,SAAS,uBAAuB,EAAE,IAAA,EAAM,kBAAkB,KAAA,GAAQ,CAAA,EAAG,UAAS,EAAgC;AAC5G,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,QAAA,IAAY,EAAC;AAErC,EAAA,uBACEA,cAAA;AAAA,IAACM,wCAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,QAAA,EAAU,QAAA,GAAW,IAAA,EAAM,gBAAgB,KAAK,IAAA,CAAK,QAAA;AAAA,MACrD,KAAA;AAAA,MACA,QAAA,EACE,UAAA,CAAW,MAAA,GAAS,CAAA,mBAClBN,cAAA,CAACO,4CAAmB,SAAA,EAAU,QAAA,EAC3B,QAAA,EAAA,UAAA,CAAW,GAAA,CAAI,CAAA,KAAA,qBACdP,cAAA;AAAA,QAAC,sBAAA;AAAA,QAAA;AAAA,UAEC,IAAA,EAAM,KAAA;AAAA,UACN,gBAAA;AAAA,UACA,OAAO,KAAA,GAAQ,CAAA;AAAA,UACf;AAAA,SAAA;AAAA,QAJK,WAAW,KAAK;AAAA,OAMxB,GACH,CAAA,GACE;AAAA;AAAA,GAER;AAEJ;AAEO,SAAS,mBAAA,CAAoB,EAAE,QAAA,EAAU,QAAA,EAAU,WAAU,EAA6B;AAC/F,EAAA,MAAM,SAASQ,WAAA,EAAM;AAErB,EAAA,uBACER,cAAA,CAAAI,mBAAA,EAAA,EACG,QAAA,EAAA,QAAA,CAAS,GAAA,CAAI,CAAA,OAAA,KAAW;AACvB,IAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,KAAA,CAAM,MAAA,GAAS,KAAK,OAAA,CAAQ,SAAA;AAC1D,IAAA,MAAM,QAAA,GAAW,QAAQ,KAAA,GAAQ,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,OAAA,CAAQ,GAAG,CAAA,CAAA,GAAK,MAAA;AAC9D,IAAA,uBACED,eAAA;AAAA,MAACM,2CAAA;AAAA,MAAA;AAAA,QAEC,SAAA;AAAA,QACA,iBAAA,EAAiB,QAAA;AAAA,QACjB,YAAA,EAAY,CAAC,QAAA,GAAW,OAAA,CAAQ,GAAA,GAAM,MAAA;AAAA,QAIrC,QAAA,EAAA;AAAA,UAAA,aAAA,mBAAgBT,cAAA,CAACU,iDAAwB,CAAA,GAAK,IAAA;AAAA,UAC9C,OAAA,CAAQ,KAAA,mBACPV,cAAA,CAAC,oBAAA,EAAA,EAAqB,IAAI,QAAA,EAAU,IAAA,EAAM,OAAA,CAAQ,IAAA,EAAM,QAAA,EAAU,OAAA,CAAQ,cAAA,EACvE,QAAA,EAAA,OAAA,CAAQ,OACX,CAAA,GACE,IAAA;AAAA,0BACJA,cAAA,CAACO,wCAAA,EAAA,EACE,QAAA,EAAA,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,IAAA,qBACjBP,cAAA;AAAA,YAAC,sBAAA;AAAA,YAAA;AAAA,cAEC,IAAA;AAAA,cACA,kBAAkB,OAAA,CAAQ,KAAA;AAAA,cAC1B;AAAA,aAAA;AAAA,YAHK,WAAW,IAAI;AAAA,WAKvB,CAAA,EACH;AAAA;AAAA,OAAA;AAAA,MAtBK,OAAA,CAAQ;AAAA,KAuBf;AAAA,EAEJ,CAAC,CAAA,EACH,CAAA;AAEJ;;ACxEO,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAOW,qCAAA,EAAiB;AAAA,EACxD,MAAA,EAAQ,iBAAA;AAAA,EACR,GAAA,EAAKC,oCAAA;AAAA,EACL,UAAA,EAAYH,2CAAA;AAAA,EACZ,OAAA,EAASH,wCAAA;AAAA,EACT,QAAA,EAAUO,yCAAA;AAAA,EACV,SAAA,EAAW,oBAAA;AAAA,EACX,OAAA,EAASN,wCAAA;AAAA,EACT,YAAA,EAAcG,6CAAA;AAAA,EACd,QAAA,EAAU,mBAAA;AAAA,EACV,OAAA,EAASI,wCAAA;AAAA,EACT,aAAA,EAAeC;AACjB,CAAC;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"MainSidebar.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;"}
@@ -1,121 +1,2 @@
1
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
- import { c as cn } from '../cn-65Adrsfj.js';
3
- import { u as useMaybeSidebarState, M as MainSidebarNavSection, a as MainSidebarNavSeparator, b as MainSidebarNavList, c as MainSidebarNavLink, d as MainSidebarRoot, e as MainSidebarMobileTrigger, f as MainSidebarTrigger, g as MainSidebarNavLabel, h as MainSidebarNav } from '../main-sidebar-link-active-C9QPj3D6.js';
4
- export { i as MainSidebarProvider, j as getIsLinkActive, n as navItemClasses, k as useMainSidebar, l as useMaybeSidebar, m as useMobileDrawer } from '../main-sidebar-link-active-C9QPj3D6.js';
5
- import { VisuallyHidden } from '@radix-ui/react-visually-hidden';
6
- import { useId } from 'react';
7
-
8
- function MainSidebarBottom({ className, children, ...props }) {
9
- return /* @__PURE__ */ jsx("div", { className: cn("mt-auto", className), ...props, children });
10
- }
11
-
12
- function MainSidebarNavHeader({
13
- children,
14
- className,
15
- state: stateProp,
16
- href,
17
- isActive,
18
- LinkComponent: LinkProp,
19
- ...props
20
- }) {
21
- const ctx = useMaybeSidebarState();
22
- const state = stateProp ?? ctx?.state ?? "default";
23
- const isMobile = ctx?.isMobile ?? false;
24
- const Link = LinkProp ?? ctx?.LinkComponent ?? "a";
25
- const showTitle = state === "default" && !isMobile;
26
- return /* @__PURE__ */ jsx("div", { className: cn("mt-2 mb-0.5 flex min-h-8 min-w-0 items-center", className), children: showTitle ? /* @__PURE__ */ jsx(
27
- "header",
28
- {
29
- ...props,
30
- className: cn("max-w-full min-w-0 truncate pl-3 text-column", {
31
- "text-foreground": isActive,
32
- "text-muted-foreground/70": !isActive
33
- }),
34
- children: href ? /* @__PURE__ */ jsx(
35
- Link,
36
- {
37
- href,
38
- className: cn("block min-w-0 truncate transition-colors duration-normal", {
39
- "hover:text-foreground": !isActive,
40
- "text-foreground": isActive
41
- }),
42
- children
43
- }
44
- ) : children
45
- }
46
- ) : /* @__PURE__ */ jsxs(Fragment, { children: [
47
- /* @__PURE__ */ jsx(VisuallyHidden, { asChild: true, children: /* @__PURE__ */ jsx("header", { ...props, children }) }),
48
- /* @__PURE__ */ jsx("div", { "aria-hidden": "true", className: "mx-3 h-px flex-1 bg-border" })
49
- ] }) });
50
- }
51
-
52
- function getLinkKey(link) {
53
- return `${link.url}:${link.name}`;
54
- }
55
- function MainSidebarSectionLink({ link, activeCandidates, level = 0, isActive }) {
56
- const childLinks = link.children ?? [];
57
- return /* @__PURE__ */ jsx(
58
- MainSidebarNavLink,
59
- {
60
- link,
61
- isActive: isActive?.(link, activeCandidates) ?? link.isActive,
62
- level,
63
- subItems: childLinks.length > 0 ? /* @__PURE__ */ jsx(MainSidebarNavList, { className: "mt-0.5", children: childLinks.map((child) => /* @__PURE__ */ jsx(
64
- MainSidebarSectionLink,
65
- {
66
- link: child,
67
- activeCandidates,
68
- level: level + 1,
69
- isActive
70
- },
71
- getLinkKey(child)
72
- )) }) : null
73
- }
74
- );
75
- }
76
- function MainSidebarSections({ sections, isActive, className }) {
77
- const baseId = useId();
78
- return /* @__PURE__ */ jsx(Fragment, { children: sections.map((section) => {
79
- const showSeparator = section.links.length > 0 && section.separator;
80
- const headerId = section.title ? `${baseId}-${section.key}` : void 0;
81
- return /* @__PURE__ */ jsxs(
82
- MainSidebarNavSection,
83
- {
84
- className,
85
- "aria-labelledby": headerId,
86
- "aria-label": !headerId ? section.key : void 0,
87
- children: [
88
- showSeparator ? /* @__PURE__ */ jsx(MainSidebarNavSeparator, {}) : null,
89
- section.title ? /* @__PURE__ */ jsx(MainSidebarNavHeader, { id: headerId, href: section.href, isActive: section.isHeaderActive, children: section.title }) : null,
90
- /* @__PURE__ */ jsx(MainSidebarNavList, { children: section.links.map((link) => /* @__PURE__ */ jsx(
91
- MainSidebarSectionLink,
92
- {
93
- link,
94
- activeCandidates: section.links,
95
- isActive
96
- },
97
- getLinkKey(link)
98
- )) })
99
- ]
100
- },
101
- section.key
102
- );
103
- }) });
104
- }
105
-
106
- const MainSidebar = Object.assign(MainSidebarRoot, {
107
- Bottom: MainSidebarBottom,
108
- Nav: MainSidebarNav,
109
- NavSection: MainSidebarNavSection,
110
- NavLink: MainSidebarNavLink,
111
- NavLabel: MainSidebarNavLabel,
112
- NavHeader: MainSidebarNavHeader,
113
- NavList: MainSidebarNavList,
114
- NavSeparator: MainSidebarNavSeparator,
115
- Sections: MainSidebarSections,
116
- Trigger: MainSidebarTrigger,
117
- MobileTrigger: MainSidebarMobileTrigger
118
- });
119
-
120
- export { MainSidebar, MainSidebarMobileTrigger, MainSidebarTrigger, useMaybeSidebarState };
1
+ export { M as MainSidebar, a as MainSidebarMobileTrigger, b as MainSidebarProvider, c as MainSidebarTrigger, g as getIsLinkActive, n as navItemClasses, u as useMainSidebar, d as useMaybeSidebar, e as useMaybeSidebarState, f as useMobileDrawer } from '../main-sidebar-BEXzGkDX.js';
121
2
  //# sourceMappingURL=MainSidebar.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MainSidebar.es.js","sources":["../../src/ds/components/MainSidebar/main-sidebar-bottom.tsx","../../src/ds/components/MainSidebar/main-sidebar-nav-header.tsx","../../src/ds/components/MainSidebar/main-sidebar-sections.tsx","../../src/ds/components/MainSidebar/main-sidebar.ts"],"sourcesContent":["import type { ComponentPropsWithoutRef } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarBottomProps = ComponentPropsWithoutRef<'div'>;\n\nexport function MainSidebarBottom({ className, children, ...props }: MainSidebarBottomProps) {\n return (\n <div className={cn('mt-auto', className)} {...props}>\n {children}\n </div>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport type { SidebarState } from './main-sidebar-context';\nimport { useMaybeSidebarState } from './main-sidebar-context';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\nimport type { LinkComponent } from '@/ds/types/link-component';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarNavHeaderProps = Omit<ComponentPropsWithoutRef<'header'>, 'children'> & {\n children?: React.ReactNode;\n state?: SidebarState;\n href?: string;\n isActive?: boolean;\n LinkComponent?: LinkComponent;\n};\nexport function MainSidebarNavHeader({\n children,\n className,\n state: stateProp,\n href,\n isActive,\n LinkComponent: LinkProp,\n ...props\n}: MainSidebarNavHeaderProps) {\n const ctx = useMaybeSidebarState();\n const state: SidebarState = stateProp ?? ctx?.state ?? 'default';\n const isMobile = ctx?.isMobile ?? false;\n const Link: LinkComponent = LinkProp ?? ctx?.LinkComponent ?? 'a';\n const showTitle = state === 'default' && !isMobile;\n\n return (\n <div className={cn('mt-2 mb-0.5 flex min-h-8 min-w-0 items-center', className)}>\n {showTitle ? (\n <header\n {...props}\n className={cn('max-w-full min-w-0 truncate pl-3 text-column', {\n 'text-foreground': isActive,\n 'text-muted-foreground/70': !isActive,\n })}\n >\n {href ? (\n <Link\n href={href}\n className={cn('block min-w-0 truncate transition-colors duration-normal', {\n 'hover:text-foreground': !isActive,\n 'text-foreground': isActive,\n })}\n >\n {children}\n </Link>\n ) : (\n children\n )}\n </header>\n ) : (\n <>\n <VisuallyHidden asChild>\n <header {...props}>{children}</header>\n </VisuallyHidden>\n <div aria-hidden=\"true\" className=\"mx-3 h-px flex-1 bg-border\" />\n </>\n )}\n </div>\n );\n}\n","import { useId } from 'react';\nimport { MainSidebarNavHeader } from './main-sidebar-nav-header';\nimport { MainSidebarNavLink } from './main-sidebar-nav-link';\nimport type { NavLink } from './main-sidebar-nav-link';\nimport { MainSidebarNavList } from './main-sidebar-nav-list';\nimport { MainSidebarNavSection } from './main-sidebar-nav-section';\nimport type { NavSection } from './main-sidebar-nav-section';\nimport { MainSidebarNavSeparator } from './main-sidebar-nav-separator';\n\nexport type MainSidebarSectionsProps = {\n sections: NavSection[];\n /**\n * Called per link to decide the active state. Receives the section's links so\n * callers can use section-aware active logic without re-scanning `sections`\n * from the outside. Default: each link's `isActive`.\n */\n isActive?: (link: NavLink, activeCandidates: NavLink[]) => boolean;\n className?: string;\n};\n\ntype MainSidebarSectionLinkProps = {\n link: NavLink;\n activeCandidates: NavLink[];\n level?: number;\n isActive?: MainSidebarSectionsProps['isActive'];\n};\n\nfunction getLinkKey(link: NavLink) {\n return `${link.url}:${link.name}`;\n}\n\nfunction MainSidebarSectionLink({ link, activeCandidates, level = 0, isActive }: MainSidebarSectionLinkProps) {\n const childLinks = link.children ?? [];\n\n return (\n <MainSidebarNavLink\n link={link}\n isActive={isActive?.(link, activeCandidates) ?? link.isActive}\n level={level}\n subItems={\n childLinks.length > 0 ? (\n <MainSidebarNavList className=\"mt-0.5\">\n {childLinks.map(child => (\n <MainSidebarSectionLink\n key={getLinkKey(child)}\n link={child}\n activeCandidates={activeCandidates}\n level={level + 1}\n isActive={isActive}\n />\n ))}\n </MainSidebarNavList>\n ) : null\n }\n />\n );\n}\n\nexport function MainSidebarSections({ sections, isActive, className }: MainSidebarSectionsProps) {\n const baseId = useId();\n\n return (\n <>\n {sections.map(section => {\n const showSeparator = section.links.length > 0 && section.separator;\n const headerId = section.title ? `${baseId}-${section.key}` : undefined;\n return (\n <MainSidebarNavSection\n key={section.key}\n className={className}\n aria-labelledby={headerId}\n aria-label={!headerId ? section.key : undefined}\n >\n {/* Render separator and header independently — a section can have\n both (titled group preceded by a divider). */}\n {showSeparator ? <MainSidebarNavSeparator /> : null}\n {section.title ? (\n <MainSidebarNavHeader id={headerId} href={section.href} isActive={section.isHeaderActive}>\n {section.title}\n </MainSidebarNavHeader>\n ) : null}\n <MainSidebarNavList>\n {section.links.map(link => (\n <MainSidebarSectionLink\n key={getLinkKey(link)}\n link={link}\n activeCandidates={section.links}\n isActive={isActive}\n />\n ))}\n </MainSidebarNavList>\n </MainSidebarNavSection>\n );\n })}\n </>\n );\n}\n","import { MainSidebarBottom } from './main-sidebar-bottom';\nimport { MainSidebarMobileTrigger } from './main-sidebar-mobile-trigger';\nimport { MainSidebarNav } from './main-sidebar-nav';\nimport { MainSidebarNavHeader } from './main-sidebar-nav-header';\nimport { MainSidebarNavLabel } from './main-sidebar-nav-label';\nimport { MainSidebarNavLink } from './main-sidebar-nav-link';\nimport { MainSidebarNavList } from './main-sidebar-nav-list';\nimport { MainSidebarNavSection } from './main-sidebar-nav-section';\nimport { MainSidebarNavSeparator } from './main-sidebar-nav-separator';\nimport { MainSidebarRoot } from './main-sidebar-root';\nimport { MainSidebarSections } from './main-sidebar-sections';\nimport { MainSidebarTrigger } from './main-sidebar-trigger';\n\nexport type { MainSidebarStateContextValue, MobileDrawerContextValue, SidebarState } from './main-sidebar-context';\nexport { useMainSidebar, useMaybeSidebar, useMaybeSidebarState, useMobileDrawer } from './main-sidebar-context';\nexport { MainSidebarProvider, type MainSidebarProviderProps } from './main-sidebar-provider';\nexport { navItemClasses } from './main-sidebar-nav-item-classes';\nexport { type MainSidebarNavItemSize } from './main-sidebar-nav-item-classes';\nexport { type NavLink } from './main-sidebar-nav-link';\nexport { type NavSection } from './main-sidebar-nav-section';\nexport { MainSidebarTrigger } from './main-sidebar-trigger';\nexport { MainSidebarMobileTrigger } from './main-sidebar-mobile-trigger';\nexport { getIsLinkActive } from './main-sidebar-link-active';\n\nexport const MainSidebar = Object.assign(MainSidebarRoot, {\n Bottom: MainSidebarBottom,\n Nav: MainSidebarNav,\n NavSection: MainSidebarNavSection,\n NavLink: MainSidebarNavLink,\n NavLabel: MainSidebarNavLabel,\n NavHeader: MainSidebarNavHeader,\n NavList: MainSidebarNavList,\n NavSeparator: MainSidebarNavSeparator,\n Sections: MainSidebarSections,\n Trigger: MainSidebarTrigger,\n MobileTrigger: MainSidebarMobileTrigger,\n});\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MainSidebar.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -8,7 +8,6 @@ const React = require('react');
8
8
  const domains_scores_hooks_useTraceSpanScores = require('../hooks/use-trace-span-scores.cjs.js');
9
9
  const Button = require('../../../Button-BAMnPqos.cjs');
10
10
  const dataList = require('../../../data-list-RI8c32dk.cjs');
11
- require('../../../keyboard/keyboard-shortcuts-context.cjs.js');
12
11
  const EmptyState = require('../../../EmptyState-2XQgeju6.cjs');
13
12
  const metricsKpiCard = require('../../../metrics-kpi-card-DoIeHfv6.cjs');
14
13
  const spinner = require('../../../spinner-BCpN7LL9.cjs');
@@ -1 +1 @@
1
- {"version":3,"file":"trace-scores-tab.cjs.js","sources":["../../../../src/domains/scores/components/trace-scores-tab.tsx"],"sourcesContent":["import type { ClientScoreRowData, ListScoresResponse } from '@mastra/client-js';\nimport { ExternalLinkIcon } from 'lucide-react';\nimport { useState } from 'react';\nimport { useTraceSpanScores } from '../hooks/use-trace-span-scores';\nimport { Button } from '@/ds/components/Button';\nimport { DataList } from '@/ds/components/DataList';\nimport { EmptyState } from '@/ds/components/EmptyState';\nimport { MetricsKpiCard } from '@/ds/components/MetricsKpiCard';\nimport { Spinner } from '@/ds/components/Spinner';\nimport { getShortId } from '@/ds/components/Text';\nimport { Txt } from '@/ds/components/Txt';\nimport { controlStateColorTransition } from '@/ds/primitives/transitions';\nimport { quietTextHover } from '@/ds/primitives/typography';\nimport { useLinkComponent } from '@/lib/framework';\nimport { cn } from '@/utils/cn';\nimport { formatDate } from '@/utils/date-format';\n\nconst REASON_PREVIEW_LENGTH = 100;\n\nexport type TraceScoresTabProps = {\n traceId: string;\n spanId: string;\n onScoreSelect: (scoreId: string) => void;\n};\n\n/**\n * Scores for the trace's anchor span, one card per scoring. Owns its own pagination:\n * mount it with a `key` on the trace/anchor pair so a page index never leaks across traces.\n */\nexport function TraceScoresTab({ traceId, spanId, onScoreSelect }: TraceScoresTabProps) {\n const [page, setPage] = useState(0);\n const { data: scoresData, isLoading } = useTraceSpanScores({ traceId, spanId, page });\n\n if (isLoading) {\n return (\n <div className=\"flex justify-center py-6\">\n <Spinner size=\"md\" variant=\"pulse\" className=\"text-placeholder\" />\n </div>\n );\n }\n\n const scores = scoresData?.scores ?? [];\n\n if (scores.length === 0) {\n return <EmptyState titleSlot=\"No scores yet\" descriptionSlot=\"Score this trace to see results here.\" />;\n }\n\n return (\n <div className=\"grid content-start gap-3\">\n {scores.map(score => (\n <TraceScoreCard key={score.id} score={score} onSelect={() => onScoreSelect(score.id)} />\n ))}\n <TraceScoresPagination pagination={scoresData?.pagination} onPageChange={setPage} />\n </div>\n );\n}\n\nfunction TraceScoreCard({ score, onSelect }: { score: ClientScoreRowData; onSelect: () => void }) {\n const createdAt = new Date(score.createdAt);\n const scorerName = String(score.scorer?.name || score.scorer?.id || 'Scorer');\n const { Link, paths } = useLinkComponent();\n\n return (\n <MetricsKpiCard className=\"min-w-0\">\n <button\n type=\"button\"\n onClick={onSelect}\n aria-label={`Score ${getShortId(score.id)}`}\n className=\"grid gap-1 text-left\"\n >\n <MetricsKpiCard.Label>{scorerName}</MetricsKpiCard.Label>\n <MetricsKpiCard.Value>{String(score.score)}</MetricsKpiCard.Value>\n <span className=\"text-meta text-muted-foreground tabular-nums\">\n <Txt as=\"span\" variant=\"meta\" font=\"mono\">\n {getShortId(score.id)}\n </Txt>{' '}\n · {formatDate(createdAt, 'date-time-seconds')}\n </span>\n </button>\n {score.reason && <TraceScoreReason reason={score.reason} />}\n <Button\n render={<Link href={`${paths.scorerLink(score.scorerId)}?scoreId=${score.id}`} />}\n variant=\"ghost\"\n size=\"sm\"\n className=\"-ml-2 justify-self-start\"\n icon={<ExternalLinkIcon />}\n >\n Open scorer run\n </Button>\n </MetricsKpiCard>\n );\n}\n\nfunction TraceScoreReason({ reason }: { reason: string }) {\n const [expanded, setExpanded] = useState(false);\n const isLong = reason.length > REASON_PREVIEW_LENGTH;\n const text = isLong && !expanded ? `${reason.slice(0, REASON_PREVIEW_LENGTH).trimEnd()}…` : reason;\n\n return (\n <p className=\"text-caption text-placeholder\">\n {text}\n {isLong && (\n <>\n {' '}\n <button\n type=\"button\"\n onClick={() => setExpanded(value => !value)}\n className={cn(quietTextHover, controlStateColorTransition, 'underline underline-offset-2')}\n >\n {expanded ? 'Read less' : 'Read more'}\n </button>\n </>\n )}\n </p>\n );\n}\n\nfunction TraceScoresPagination({\n pagination,\n onPageChange,\n}: {\n pagination?: ListScoresResponse['pagination'];\n onPageChange: (page: number) => void;\n}) {\n const currentPage = pagination?.page ?? 0;\n if (currentPage === 0 && !pagination?.hasMore) return null;\n\n return (\n <DataList.Pagination\n currentPage={currentPage}\n hasMore={pagination?.hasMore}\n onNextPage={() => onPageChange(currentPage + 1)}\n onPrevPage={() => onPageChange(currentPage - 1)}\n />\n );\n}\n"],"names":["useState","useTraceSpanScores","jsx","Spinner","EmptyState","jsxs","useLinkComponent","MetricsKpiCard","getShortId","Txt","formatDate","Button","ExternalLinkIcon","Fragment","cn","quietTextHover","controlStateColorTransition","DataList"],"mappings":"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"}
1
+ {"version":3,"file":"trace-scores-tab.cjs.js","sources":["../../../../src/domains/scores/components/trace-scores-tab.tsx"],"sourcesContent":["import type { ClientScoreRowData, ListScoresResponse } from '@mastra/client-js';\nimport { ExternalLinkIcon } from 'lucide-react';\nimport { useState } from 'react';\nimport { useTraceSpanScores } from '../hooks/use-trace-span-scores';\nimport { Button } from '@/ds/components/Button';\nimport { DataList } from '@/ds/components/DataList';\nimport { EmptyState } from '@/ds/components/EmptyState';\nimport { MetricsKpiCard } from '@/ds/components/MetricsKpiCard';\nimport { Spinner } from '@/ds/components/Spinner';\nimport { getShortId } from '@/ds/components/Text';\nimport { Txt } from '@/ds/components/Txt';\nimport { controlStateColorTransition } from '@/ds/primitives/transitions';\nimport { quietTextHover } from '@/ds/primitives/typography';\nimport { useLinkComponent } from '@/lib/framework';\nimport { cn } from '@/utils/cn';\nimport { formatDate } from '@/utils/date-format';\n\nconst REASON_PREVIEW_LENGTH = 100;\n\nexport type TraceScoresTabProps = {\n traceId: string;\n spanId: string;\n onScoreSelect: (scoreId: string) => void;\n};\n\n/**\n * Scores for the trace's anchor span, one card per scoring. Owns its own pagination:\n * mount it with a `key` on the trace/anchor pair so a page index never leaks across traces.\n */\nexport function TraceScoresTab({ traceId, spanId, onScoreSelect }: TraceScoresTabProps) {\n const [page, setPage] = useState(0);\n const { data: scoresData, isLoading } = useTraceSpanScores({ traceId, spanId, page });\n\n if (isLoading) {\n return (\n <div className=\"flex justify-center py-6\">\n <Spinner size=\"md\" variant=\"pulse\" className=\"text-placeholder\" />\n </div>\n );\n }\n\n const scores = scoresData?.scores ?? [];\n\n if (scores.length === 0) {\n return <EmptyState titleSlot=\"No scores yet\" descriptionSlot=\"Score this trace to see results here.\" />;\n }\n\n return (\n <div className=\"grid content-start gap-3\">\n {scores.map(score => (\n <TraceScoreCard key={score.id} score={score} onSelect={() => onScoreSelect(score.id)} />\n ))}\n <TraceScoresPagination pagination={scoresData?.pagination} onPageChange={setPage} />\n </div>\n );\n}\n\nfunction TraceScoreCard({ score, onSelect }: { score: ClientScoreRowData; onSelect: () => void }) {\n const createdAt = new Date(score.createdAt);\n const scorerName = String(score.scorer?.name || score.scorer?.id || 'Scorer');\n const { Link, paths } = useLinkComponent();\n\n return (\n <MetricsKpiCard className=\"min-w-0\">\n <button\n type=\"button\"\n onClick={onSelect}\n aria-label={`Score ${getShortId(score.id)}`}\n className=\"grid gap-1 text-left\"\n >\n <MetricsKpiCard.Label>{scorerName}</MetricsKpiCard.Label>\n <MetricsKpiCard.Value>{String(score.score)}</MetricsKpiCard.Value>\n <span className=\"text-meta text-muted-foreground tabular-nums\">\n <Txt as=\"span\" variant=\"meta\" font=\"mono\">\n {getShortId(score.id)}\n </Txt>{' '}\n · {formatDate(createdAt, 'date-time-seconds')}\n </span>\n </button>\n {score.reason && <TraceScoreReason reason={score.reason} />}\n <Button\n render={<Link href={`${paths.scorerLink(score.scorerId)}?scoreId=${score.id}`} />}\n variant=\"ghost\"\n size=\"sm\"\n className=\"-ml-2 justify-self-start\"\n icon={<ExternalLinkIcon />}\n >\n Open scorer run\n </Button>\n </MetricsKpiCard>\n );\n}\n\nfunction TraceScoreReason({ reason }: { reason: string }) {\n const [expanded, setExpanded] = useState(false);\n const isLong = reason.length > REASON_PREVIEW_LENGTH;\n const text = isLong && !expanded ? `${reason.slice(0, REASON_PREVIEW_LENGTH).trimEnd()}…` : reason;\n\n return (\n <p className=\"text-caption text-placeholder\">\n {text}\n {isLong && (\n <>\n {' '}\n <button\n type=\"button\"\n onClick={() => setExpanded(value => !value)}\n className={cn(quietTextHover, controlStateColorTransition, 'underline underline-offset-2')}\n >\n {expanded ? 'Read less' : 'Read more'}\n </button>\n </>\n )}\n </p>\n );\n}\n\nfunction TraceScoresPagination({\n pagination,\n onPageChange,\n}: {\n pagination?: ListScoresResponse['pagination'];\n onPageChange: (page: number) => void;\n}) {\n const currentPage = pagination?.page ?? 0;\n if (currentPage === 0 && !pagination?.hasMore) return null;\n\n return (\n <DataList.Pagination\n currentPage={currentPage}\n hasMore={pagination?.hasMore}\n onNextPage={() => onPageChange(currentPage + 1)}\n onPrevPage={() => onPageChange(currentPage - 1)}\n />\n );\n}\n"],"names":["useState","useTraceSpanScores","jsx","Spinner","EmptyState","jsxs","useLinkComponent","MetricsKpiCard","getShortId","Txt","formatDate","Button","ExternalLinkIcon","Fragment","cn","quietTextHover","controlStateColorTransition","DataList"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAiBA,MAAM,qBAAA,GAAwB,GAAA;AAYvB,SAAS,cAAA,CAAe,EAAE,OAAA,EAAS,MAAA,EAAQ,eAAc,EAAwB;AACtF,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,eAAS,CAAC,CAAA;AAClC,EAAA,MAAM,EAAE,IAAA,EAAM,UAAA,EAAY,SAAA,EAAU,GAAIC,2DAAmB,EAAE,OAAA,EAAS,MAAA,EAAQ,IAAA,EAAM,CAAA;AAEpF,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBACEC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACb,QAAA,kBAAAA,cAAA,CAACC,eAAA,EAAA,EAAQ,IAAA,EAAK,IAAA,EAAK,OAAA,EAAQ,OAAA,EAAQ,SAAA,EAAU,kBAAA,EAAmB,CAAA,EAClE,CAAA;AAAA,EAEJ;AAEA,EAAA,MAAM,MAAA,GAAS,UAAA,EAAY,MAAA,IAAU,EAAC;AAEtC,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,IAAA,uBAAOD,cAAA,CAACE,qBAAA,EAAA,EAAW,SAAA,EAAU,eAAA,EAAgB,iBAAgB,uCAAA,EAAwC,CAAA;AAAA,EACvG;AAEA,EAAA,uBACEC,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACZ,QAAA,EAAA;AAAA,IAAA,MAAA,CAAO,GAAA,CAAI,CAAA,KAAA,qBACVH,cAAA,CAAC,cAAA,EAAA,EAA8B,KAAA,EAAc,QAAA,EAAU,MAAM,aAAA,CAAc,KAAA,CAAM,EAAE,CAAA,EAAA,EAA9D,KAAA,CAAM,EAA2D,CACvF,CAAA;AAAA,mCACA,qBAAA,EAAA,EAAsB,UAAA,EAAY,UAAA,EAAY,UAAA,EAAY,cAAc,OAAA,EAAS;AAAA,GAAA,EACpF,CAAA;AAEJ;AAEA,SAAS,cAAA,CAAe,EAAE,KAAA,EAAO,QAAA,EAAS,EAAwD;AAChG,EAAA,MAAM,SAAA,GAAY,IAAI,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AAC1C,EAAA,MAAM,UAAA,GAAa,OAAO,KAAA,CAAM,MAAA,EAAQ,QAAQ,KAAA,CAAM,MAAA,EAAQ,MAAM,QAAQ,CAAA;AAC5E,EAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAII,8BAAA,EAAiB;AAEzC,EAAA,uBACED,eAAA,CAACE,6BAAA,EAAA,EAAe,SAAA,EAAU,SAAA,EACxB,QAAA,EAAA;AAAA,oBAAAF,eAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,QAAA;AAAA,QACT,YAAA,EAAY,CAAA,MAAA,EAASG,qBAAA,CAAW,KAAA,CAAM,EAAE,CAAC,CAAA,CAAA;AAAA,QACzC,SAAA,EAAU,sBAAA;AAAA,QAEV,QAAA,EAAA;AAAA,0BAAAN,cAAA,CAACK,6BAAA,CAAe,KAAA,EAAf,EAAsB,QAAA,EAAA,UAAA,EAAW,CAAA;AAAA,yCACjCA,6BAAA,CAAe,KAAA,EAAf,EAAsB,QAAA,EAAA,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,EAAE,CAAA;AAAA,0BAC3CF,eAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8CAAA,EACd,QAAA,EAAA;AAAA,4BAAAH,cAAA,CAACO,OAAA,EAAA,EAAI,EAAA,EAAG,MAAA,EAAO,OAAA,EAAQ,MAAA,EAAO,MAAK,MAAA,EAChC,QAAA,EAAAD,qBAAA,CAAW,KAAA,CAAM,EAAE,CAAA,EACtB,CAAA;AAAA,YAAO,GAAA;AAAA,YAAI,IAAA;AAAA,YACRE,2BAAA,CAAW,WAAW,mBAAmB;AAAA,WAAA,EAC9C;AAAA;AAAA;AAAA,KACF;AAAA,IACC,MAAM,MAAA,oBAAUR,cAAA,CAAC,gBAAA,EAAA,EAAiB,MAAA,EAAQ,MAAM,MAAA,EAAQ,CAAA;AAAA,oBACzDA,cAAA;AAAA,MAACS,aAAA;AAAA,MAAA;AAAA,QACC,MAAA,kBAAQT,cAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAM,CAAA,EAAG,KAAA,CAAM,UAAA,CAAW,KAAA,CAAM,QAAQ,CAAC,CAAA,SAAA,EAAY,KAAA,CAAM,EAAE,CAAA,CAAA,EAAI,CAAA;AAAA,QAC/E,OAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAK,IAAA;AAAA,QACL,SAAA,EAAU,0BAAA;AAAA,QACV,IAAA,iCAAOU,4BAAA,EAAA,EAAiB,CAAA;AAAA,QACzB,QAAA,EAAA;AAAA;AAAA;AAED,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,gBAAA,CAAiB,EAAE,MAAA,EAAO,EAAuB;AACxD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIZ,eAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,MAAA,GAAS,OAAO,MAAA,GAAS,qBAAA;AAC/B,EAAA,MAAM,IAAA,GAAO,MAAA,IAAU,CAAC,QAAA,GAAW,CAAA,EAAG,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,qBAAqB,CAAA,CAAE,OAAA,EAAS,CAAA,CAAA,CAAA,GAAM,MAAA;AAE5F,EAAA,uBACEK,eAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BAAA,EACV,QAAA,EAAA;AAAA,IAAA,IAAA;AAAA,IACA,0BACCA,eAAA,CAAAQ,mBAAA,EAAA,EACG,QAAA,EAAA;AAAA,MAAA,GAAA;AAAA,sBACDX,cAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,MAAM,WAAA,CAAY,CAAA,KAAA,KAAS,CAAC,KAAK,CAAA;AAAA,UAC1C,SAAA,EAAWY,WAAA,CAAGC,oCAAA,EAAgBC,kDAAA,EAA6B,8BAA8B,CAAA;AAAA,UAExF,qBAAW,WAAA,GAAc;AAAA;AAAA;AAC5B,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAEA,SAAS,qBAAA,CAAsB;AAAA,EAC7B,UAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,MAAM,WAAA,GAAc,YAAY,IAAA,IAAQ,CAAA;AACxC,EAAA,IAAI,WAAA,KAAgB,CAAA,IAAK,CAAC,UAAA,EAAY,SAAS,OAAO,IAAA;AAEtD,EAAA,uBACEd,cAAA;AAAA,IAACe,iBAAA,CAAS,UAAA;AAAA,IAAT;AAAA,MACC,WAAA;AAAA,MACA,SAAS,UAAA,EAAY,OAAA;AAAA,MACrB,UAAA,EAAY,MAAM,YAAA,CAAa,WAAA,GAAc,CAAC,CAAA;AAAA,MAC9C,UAAA,EAAY,MAAM,YAAA,CAAa,WAAA,GAAc,CAAC;AAAA;AAAA,GAChD;AAEJ;;;;"}
@@ -4,7 +4,6 @@ import { useState } from 'react';
4
4
  import { useTraceSpanScores } from '../hooks/use-trace-span-scores.es.js';
5
5
  import { B as Button } from '../../../Button-B8nF87ai.js';
6
6
  import { D as DataList } from '../../../data-list-5-nRJbEO.js';
7
- import '../../../keyboard/keyboard-shortcuts-context.es.js';
8
7
  import { E as EmptyState } from '../../../EmptyState-Bc4nJ9QH.js';
9
8
  import { M as MetricsKpiCard } from '../../../metrics-kpi-card-BVCuXeDa.js';
10
9
  import { S as Spinner } from '../../../spinner-ylbE0TJA.js';
@@ -1 +1 @@
1
- {"version":3,"file":"trace-scores-tab.es.js","sources":["../../../../src/domains/scores/components/trace-scores-tab.tsx"],"sourcesContent":["import type { ClientScoreRowData, ListScoresResponse } from '@mastra/client-js';\nimport { ExternalLinkIcon } from 'lucide-react';\nimport { useState } from 'react';\nimport { useTraceSpanScores } from '../hooks/use-trace-span-scores';\nimport { Button } from '@/ds/components/Button';\nimport { DataList } from '@/ds/components/DataList';\nimport { EmptyState } from '@/ds/components/EmptyState';\nimport { MetricsKpiCard } from '@/ds/components/MetricsKpiCard';\nimport { Spinner } from '@/ds/components/Spinner';\nimport { getShortId } from '@/ds/components/Text';\nimport { Txt } from '@/ds/components/Txt';\nimport { controlStateColorTransition } from '@/ds/primitives/transitions';\nimport { quietTextHover } from '@/ds/primitives/typography';\nimport { useLinkComponent } from '@/lib/framework';\nimport { cn } from '@/utils/cn';\nimport { formatDate } from '@/utils/date-format';\n\nconst REASON_PREVIEW_LENGTH = 100;\n\nexport type TraceScoresTabProps = {\n traceId: string;\n spanId: string;\n onScoreSelect: (scoreId: string) => void;\n};\n\n/**\n * Scores for the trace's anchor span, one card per scoring. Owns its own pagination:\n * mount it with a `key` on the trace/anchor pair so a page index never leaks across traces.\n */\nexport function TraceScoresTab({ traceId, spanId, onScoreSelect }: TraceScoresTabProps) {\n const [page, setPage] = useState(0);\n const { data: scoresData, isLoading } = useTraceSpanScores({ traceId, spanId, page });\n\n if (isLoading) {\n return (\n <div className=\"flex justify-center py-6\">\n <Spinner size=\"md\" variant=\"pulse\" className=\"text-placeholder\" />\n </div>\n );\n }\n\n const scores = scoresData?.scores ?? [];\n\n if (scores.length === 0) {\n return <EmptyState titleSlot=\"No scores yet\" descriptionSlot=\"Score this trace to see results here.\" />;\n }\n\n return (\n <div className=\"grid content-start gap-3\">\n {scores.map(score => (\n <TraceScoreCard key={score.id} score={score} onSelect={() => onScoreSelect(score.id)} />\n ))}\n <TraceScoresPagination pagination={scoresData?.pagination} onPageChange={setPage} />\n </div>\n );\n}\n\nfunction TraceScoreCard({ score, onSelect }: { score: ClientScoreRowData; onSelect: () => void }) {\n const createdAt = new Date(score.createdAt);\n const scorerName = String(score.scorer?.name || score.scorer?.id || 'Scorer');\n const { Link, paths } = useLinkComponent();\n\n return (\n <MetricsKpiCard className=\"min-w-0\">\n <button\n type=\"button\"\n onClick={onSelect}\n aria-label={`Score ${getShortId(score.id)}`}\n className=\"grid gap-1 text-left\"\n >\n <MetricsKpiCard.Label>{scorerName}</MetricsKpiCard.Label>\n <MetricsKpiCard.Value>{String(score.score)}</MetricsKpiCard.Value>\n <span className=\"text-meta text-muted-foreground tabular-nums\">\n <Txt as=\"span\" variant=\"meta\" font=\"mono\">\n {getShortId(score.id)}\n </Txt>{' '}\n · {formatDate(createdAt, 'date-time-seconds')}\n </span>\n </button>\n {score.reason && <TraceScoreReason reason={score.reason} />}\n <Button\n render={<Link href={`${paths.scorerLink(score.scorerId)}?scoreId=${score.id}`} />}\n variant=\"ghost\"\n size=\"sm\"\n className=\"-ml-2 justify-self-start\"\n icon={<ExternalLinkIcon />}\n >\n Open scorer run\n </Button>\n </MetricsKpiCard>\n );\n}\n\nfunction TraceScoreReason({ reason }: { reason: string }) {\n const [expanded, setExpanded] = useState(false);\n const isLong = reason.length > REASON_PREVIEW_LENGTH;\n const text = isLong && !expanded ? `${reason.slice(0, REASON_PREVIEW_LENGTH).trimEnd()}…` : reason;\n\n return (\n <p className=\"text-caption text-placeholder\">\n {text}\n {isLong && (\n <>\n {' '}\n <button\n type=\"button\"\n onClick={() => setExpanded(value => !value)}\n className={cn(quietTextHover, controlStateColorTransition, 'underline underline-offset-2')}\n >\n {expanded ? 'Read less' : 'Read more'}\n </button>\n </>\n )}\n </p>\n );\n}\n\nfunction TraceScoresPagination({\n pagination,\n onPageChange,\n}: {\n pagination?: ListScoresResponse['pagination'];\n onPageChange: (page: number) => void;\n}) {\n const currentPage = pagination?.page ?? 0;\n if (currentPage === 0 && !pagination?.hasMore) return null;\n\n return (\n <DataList.Pagination\n currentPage={currentPage}\n hasMore={pagination?.hasMore}\n onNextPage={() => onPageChange(currentPage + 1)}\n onPrevPage={() => onPageChange(currentPage - 1)}\n />\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trace-scores-tab.es.js","sources":["../../../../src/domains/scores/components/trace-scores-tab.tsx"],"sourcesContent":["import type { ClientScoreRowData, ListScoresResponse } from '@mastra/client-js';\nimport { ExternalLinkIcon } from 'lucide-react';\nimport { useState } from 'react';\nimport { useTraceSpanScores } from '../hooks/use-trace-span-scores';\nimport { Button } from '@/ds/components/Button';\nimport { DataList } from '@/ds/components/DataList';\nimport { EmptyState } from '@/ds/components/EmptyState';\nimport { MetricsKpiCard } from '@/ds/components/MetricsKpiCard';\nimport { Spinner } from '@/ds/components/Spinner';\nimport { getShortId } from '@/ds/components/Text';\nimport { Txt } from '@/ds/components/Txt';\nimport { controlStateColorTransition } from '@/ds/primitives/transitions';\nimport { quietTextHover } from '@/ds/primitives/typography';\nimport { useLinkComponent } from '@/lib/framework';\nimport { cn } from '@/utils/cn';\nimport { formatDate } from '@/utils/date-format';\n\nconst REASON_PREVIEW_LENGTH = 100;\n\nexport type TraceScoresTabProps = {\n traceId: string;\n spanId: string;\n onScoreSelect: (scoreId: string) => void;\n};\n\n/**\n * Scores for the trace's anchor span, one card per scoring. Owns its own pagination:\n * mount it with a `key` on the trace/anchor pair so a page index never leaks across traces.\n */\nexport function TraceScoresTab({ traceId, spanId, onScoreSelect }: TraceScoresTabProps) {\n const [page, setPage] = useState(0);\n const { data: scoresData, isLoading } = useTraceSpanScores({ traceId, spanId, page });\n\n if (isLoading) {\n return (\n <div className=\"flex justify-center py-6\">\n <Spinner size=\"md\" variant=\"pulse\" className=\"text-placeholder\" />\n </div>\n );\n }\n\n const scores = scoresData?.scores ?? [];\n\n if (scores.length === 0) {\n return <EmptyState titleSlot=\"No scores yet\" descriptionSlot=\"Score this trace to see results here.\" />;\n }\n\n return (\n <div className=\"grid content-start gap-3\">\n {scores.map(score => (\n <TraceScoreCard key={score.id} score={score} onSelect={() => onScoreSelect(score.id)} />\n ))}\n <TraceScoresPagination pagination={scoresData?.pagination} onPageChange={setPage} />\n </div>\n );\n}\n\nfunction TraceScoreCard({ score, onSelect }: { score: ClientScoreRowData; onSelect: () => void }) {\n const createdAt = new Date(score.createdAt);\n const scorerName = String(score.scorer?.name || score.scorer?.id || 'Scorer');\n const { Link, paths } = useLinkComponent();\n\n return (\n <MetricsKpiCard className=\"min-w-0\">\n <button\n type=\"button\"\n onClick={onSelect}\n aria-label={`Score ${getShortId(score.id)}`}\n className=\"grid gap-1 text-left\"\n >\n <MetricsKpiCard.Label>{scorerName}</MetricsKpiCard.Label>\n <MetricsKpiCard.Value>{String(score.score)}</MetricsKpiCard.Value>\n <span className=\"text-meta text-muted-foreground tabular-nums\">\n <Txt as=\"span\" variant=\"meta\" font=\"mono\">\n {getShortId(score.id)}\n </Txt>{' '}\n · {formatDate(createdAt, 'date-time-seconds')}\n </span>\n </button>\n {score.reason && <TraceScoreReason reason={score.reason} />}\n <Button\n render={<Link href={`${paths.scorerLink(score.scorerId)}?scoreId=${score.id}`} />}\n variant=\"ghost\"\n size=\"sm\"\n className=\"-ml-2 justify-self-start\"\n icon={<ExternalLinkIcon />}\n >\n Open scorer run\n </Button>\n </MetricsKpiCard>\n );\n}\n\nfunction TraceScoreReason({ reason }: { reason: string }) {\n const [expanded, setExpanded] = useState(false);\n const isLong = reason.length > REASON_PREVIEW_LENGTH;\n const text = isLong && !expanded ? `${reason.slice(0, REASON_PREVIEW_LENGTH).trimEnd()}…` : reason;\n\n return (\n <p className=\"text-caption text-placeholder\">\n {text}\n {isLong && (\n <>\n {' '}\n <button\n type=\"button\"\n onClick={() => setExpanded(value => !value)}\n className={cn(quietTextHover, controlStateColorTransition, 'underline underline-offset-2')}\n >\n {expanded ? 'Read less' : 'Read more'}\n </button>\n </>\n )}\n </p>\n );\n}\n\nfunction TraceScoresPagination({\n pagination,\n onPageChange,\n}: {\n pagination?: ListScoresResponse['pagination'];\n onPageChange: (page: number) => void;\n}) {\n const currentPage = pagination?.page ?? 0;\n if (currentPage === 0 && !pagination?.hasMore) return null;\n\n return (\n <DataList.Pagination\n currentPage={currentPage}\n hasMore={pagination?.hasMore}\n onNextPage={() => onPageChange(currentPage + 1)}\n onPrevPage={() => onPageChange(currentPage - 1)}\n />\n );\n}\n"],"names":[],"mappings":"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"}
@@ -5,8 +5,6 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
5
5
  const jsxRuntime = require('react/jsx-runtime');
6
6
  const domains_traces_traceListColumns = require('../trace-list-columns.cjs.js');
7
7
  const dataListSkeleton = require('../../../data-list-skeleton-CgbWqYky.cjs');
8
- require('react');
9
- require('../../../keyboard/keyboard-shortcuts-context.cjs.js');
10
8
  const skeleton = require('../../../skeleton-cXUjPrq9.cjs');
11
9
 
12
10
  function TracesPageSkeleton({ columnPreferences = domains_traces_traceListColumns.DEFAULT_TRACE_COLUMN_PREFERENCES }) {
@@ -1 +1 @@
1
- {"version":3,"file":"traces-page-skeleton.cjs.js","sources":["../../../../src/domains/traces/components/traces-page-skeleton.tsx"],"sourcesContent":["import { buildTraceListColumns, DEFAULT_TRACE_COLUMN_PREFERENCES } from '../trace-list-columns';\nimport type { TraceColumnPreferences } from '../trace-list-columns';\nimport { DataListSkeleton } from '@/ds/components/DataList';\nimport { Skeleton } from '@/ds/components/Skeleton';\n\nexport type TracesPageSkeletonProps = {\n columnPreferences?: TraceColumnPreferences;\n};\n\n/**\n * Page-level placeholder shown while filter-field discovery is pending: a toolbar-height\n * bar stands in for the FilterBar and the usual list skeleton for the trace rows.\n */\nexport function TracesPageSkeleton({ columnPreferences = DEFAULT_TRACE_COLUMN_PREFERENCES }: TracesPageSkeletonProps) {\n const columns = buildTraceListColumns(columnPreferences);\n return (\n <div\n className=\"flex h-full min-h-0 flex-col gap-2\"\n role=\"status\"\n aria-label=\"Loading traces\"\n data-testid=\"traces-page-skeleton\"\n >\n <div className=\"flex items-center gap-2\">\n <Skeleton className=\"h-control-md min-w-64 flex-1\" />\n <Skeleton className=\"h-control-md w-28\" />\n </div>\n <DataListSkeleton columns={columns} fit=\"container\" />\n </div>\n );\n}\n"],"names":["DEFAULT_TRACE_COLUMN_PREFERENCES","buildTraceListColumns","jsxs","jsx","Skeleton","DataListSkeleton"],"mappings":";;;;;;;;;;;AAaO,SAAS,kBAAA,CAAmB,EAAE,iBAAA,GAAoBA,gEAAA,EAAiC,EAA4B;AACpH,EAAA,MAAM,OAAA,GAAUC,sDAAsB,iBAAiB,CAAA;AACvD,EAAA,uBACEC,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,oCAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAW,gBAAA;AAAA,MACX,aAAA,EAAY,sBAAA;AAAA,MAEZ,QAAA,EAAA;AAAA,wBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,0BAAAC,cAAA,CAACC,iBAAA,EAAA,EAAS,WAAU,8BAAA,EAA+B,CAAA;AAAA,0BACnDD,cAAA,CAACC,iBAAA,EAAA,EAAS,SAAA,EAAU,mBAAA,EAAoB;AAAA,SAAA,EAC1C,CAAA;AAAA,wBACAD,cAAA,CAACE,iCAAA,EAAA,EAAiB,OAAA,EAAkB,GAAA,EAAI,WAAA,EAAY;AAAA;AAAA;AAAA,GACtD;AAEJ;;;;"}
1
+ {"version":3,"file":"traces-page-skeleton.cjs.js","sources":["../../../../src/domains/traces/components/traces-page-skeleton.tsx"],"sourcesContent":["import { buildTraceListColumns, DEFAULT_TRACE_COLUMN_PREFERENCES } from '../trace-list-columns';\nimport type { TraceColumnPreferences } from '../trace-list-columns';\nimport { DataListSkeleton } from '@/ds/components/DataList';\nimport { Skeleton } from '@/ds/components/Skeleton';\n\nexport type TracesPageSkeletonProps = {\n columnPreferences?: TraceColumnPreferences;\n};\n\n/**\n * Page-level placeholder shown while filter-field discovery is pending: a toolbar-height\n * bar stands in for the FilterBar and the usual list skeleton for the trace rows.\n */\nexport function TracesPageSkeleton({ columnPreferences = DEFAULT_TRACE_COLUMN_PREFERENCES }: TracesPageSkeletonProps) {\n const columns = buildTraceListColumns(columnPreferences);\n return (\n <div\n className=\"flex h-full min-h-0 flex-col gap-2\"\n role=\"status\"\n aria-label=\"Loading traces\"\n data-testid=\"traces-page-skeleton\"\n >\n <div className=\"flex items-center gap-2\">\n <Skeleton className=\"h-control-md min-w-64 flex-1\" />\n <Skeleton className=\"h-control-md w-28\" />\n </div>\n <DataListSkeleton columns={columns} fit=\"container\" />\n </div>\n );\n}\n"],"names":["DEFAULT_TRACE_COLUMN_PREFERENCES","buildTraceListColumns","jsxs","jsx","Skeleton","DataListSkeleton"],"mappings":";;;;;;;;;AAaO,SAAS,kBAAA,CAAmB,EAAE,iBAAA,GAAoBA,gEAAA,EAAiC,EAA4B;AACpH,EAAA,MAAM,OAAA,GAAUC,sDAAsB,iBAAiB,CAAA;AACvD,EAAA,uBACEC,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,oCAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAW,gBAAA;AAAA,MACX,aAAA,EAAY,sBAAA;AAAA,MAEZ,QAAA,EAAA;AAAA,wBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,0BAAAC,cAAA,CAACC,iBAAA,EAAA,EAAS,WAAU,8BAAA,EAA+B,CAAA;AAAA,0BACnDD,cAAA,CAACC,iBAAA,EAAA,EAAS,SAAA,EAAU,mBAAA,EAAoB;AAAA,SAAA,EAC1C,CAAA;AAAA,wBACAD,cAAA,CAACE,iCAAA,EAAA,EAAiB,OAAA,EAAkB,GAAA,EAAI,WAAA,EAAY;AAAA;AAAA;AAAA,GACtD;AAEJ;;;;"}
@@ -1,8 +1,6 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { buildTraceListColumns, DEFAULT_TRACE_COLUMN_PREFERENCES } from '../trace-list-columns.es.js';
3
3
  import { D as DataListSkeleton } from '../../../data-list-skeleton-BrSh9Y_3.js';
4
- import 'react';
5
- import '../../../keyboard/keyboard-shortcuts-context.es.js';
6
4
  import { S as Skeleton } from '../../../skeleton-BsRAXyh5.js';
7
5
 
8
6
  function TracesPageSkeleton({ columnPreferences = DEFAULT_TRACE_COLUMN_PREFERENCES }) {
@@ -1 +1 @@
1
- {"version":3,"file":"traces-page-skeleton.es.js","sources":["../../../../src/domains/traces/components/traces-page-skeleton.tsx"],"sourcesContent":["import { buildTraceListColumns, DEFAULT_TRACE_COLUMN_PREFERENCES } from '../trace-list-columns';\nimport type { TraceColumnPreferences } from '../trace-list-columns';\nimport { DataListSkeleton } from '@/ds/components/DataList';\nimport { Skeleton } from '@/ds/components/Skeleton';\n\nexport type TracesPageSkeletonProps = {\n columnPreferences?: TraceColumnPreferences;\n};\n\n/**\n * Page-level placeholder shown while filter-field discovery is pending: a toolbar-height\n * bar stands in for the FilterBar and the usual list skeleton for the trace rows.\n */\nexport function TracesPageSkeleton({ columnPreferences = DEFAULT_TRACE_COLUMN_PREFERENCES }: TracesPageSkeletonProps) {\n const columns = buildTraceListColumns(columnPreferences);\n return (\n <div\n className=\"flex h-full min-h-0 flex-col gap-2\"\n role=\"status\"\n aria-label=\"Loading traces\"\n data-testid=\"traces-page-skeleton\"\n >\n <div className=\"flex items-center gap-2\">\n <Skeleton className=\"h-control-md min-w-64 flex-1\" />\n <Skeleton className=\"h-control-md w-28\" />\n </div>\n <DataListSkeleton columns={columns} fit=\"container\" />\n </div>\n );\n}\n"],"names":[],"mappings":";;;;;;;AAaO,SAAS,kBAAA,CAAmB,EAAE,iBAAA,GAAoB,gCAAA,EAAiC,EAA4B;AACpH,EAAA,MAAM,OAAA,GAAU,sBAAsB,iBAAiB,CAAA;AACvD,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,oCAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAW,gBAAA;AAAA,MACX,aAAA,EAAY,sBAAA;AAAA,MAEZ,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,QAAA,EAAA,EAAS,WAAU,8BAAA,EAA+B,CAAA;AAAA,0BACnD,GAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,mBAAA,EAAoB;AAAA,SAAA,EAC1C,CAAA;AAAA,wBACA,GAAA,CAAC,gBAAA,EAAA,EAAiB,OAAA,EAAkB,GAAA,EAAI,WAAA,EAAY;AAAA;AAAA;AAAA,GACtD;AAEJ;;;;"}
1
+ {"version":3,"file":"traces-page-skeleton.es.js","sources":["../../../../src/domains/traces/components/traces-page-skeleton.tsx"],"sourcesContent":["import { buildTraceListColumns, DEFAULT_TRACE_COLUMN_PREFERENCES } from '../trace-list-columns';\nimport type { TraceColumnPreferences } from '../trace-list-columns';\nimport { DataListSkeleton } from '@/ds/components/DataList';\nimport { Skeleton } from '@/ds/components/Skeleton';\n\nexport type TracesPageSkeletonProps = {\n columnPreferences?: TraceColumnPreferences;\n};\n\n/**\n * Page-level placeholder shown while filter-field discovery is pending: a toolbar-height\n * bar stands in for the FilterBar and the usual list skeleton for the trace rows.\n */\nexport function TracesPageSkeleton({ columnPreferences = DEFAULT_TRACE_COLUMN_PREFERENCES }: TracesPageSkeletonProps) {\n const columns = buildTraceListColumns(columnPreferences);\n return (\n <div\n className=\"flex h-full min-h-0 flex-col gap-2\"\n role=\"status\"\n aria-label=\"Loading traces\"\n data-testid=\"traces-page-skeleton\"\n >\n <div className=\"flex items-center gap-2\">\n <Skeleton className=\"h-control-md min-w-64 flex-1\" />\n <Skeleton className=\"h-control-md w-28\" />\n </div>\n <DataListSkeleton columns={columns} fit=\"container\" />\n </div>\n );\n}\n"],"names":[],"mappings":";;;;;AAaO,SAAS,kBAAA,CAAmB,EAAE,iBAAA,GAAoB,gCAAA,EAAiC,EAA4B;AACpH,EAAA,MAAM,OAAA,GAAU,sBAAsB,iBAAiB,CAAA;AACvD,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,oCAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAW,gBAAA;AAAA,MACX,aAAA,EAAY,sBAAA;AAAA,MAEZ,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,QAAA,EAAA,EAAS,WAAU,8BAAA,EAA+B,CAAA;AAAA,0BACnD,GAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,mBAAA,EAAoB;AAAA,SAAA,EAC1C,CAAA;AAAA,wBACA,GAAA,CAAC,gBAAA,EAAA,EAAiB,OAAA,EAAkB,GAAA,EAAI,WAAA,EAAY;AAAA;AAAA;AAAA,GACtD;AAEJ;;;;"}
@@ -23,12 +23,12 @@ function selectUniqueRuns(data) {
23
23
  return true;
24
24
  });
25
25
  }
26
- const useWorkflowRuns = (workflowId, { enabled = true } = {}) => {
26
+ const useWorkflowRuns = (workflowId, { enabled = true, summary = false } = {}) => {
27
27
  const client = react.useMastraClient();
28
28
  const { inView: isEndOfListInView, setRef: setEndOfListElement } = hooks_useInView.useInView();
29
29
  const query = reactQuery.useInfiniteQuery({
30
- queryKey: ["workflow-runs", workflowId],
31
- queryFn: ({ pageParam }) => client.getWorkflow(workflowId).runs({ limit: PER_PAGE, offset: pageParam * PER_PAGE }),
30
+ queryKey: ["workflow-runs", workflowId, { summary }],
31
+ queryFn: ({ pageParam }) => client.getWorkflow(workflowId).runs({ limit: PER_PAGE, offset: pageParam * PER_PAGE, ...summary ? { summary: true } : {} }),
32
32
  initialPageParam: 0,
33
33
  getNextPageParam: getWorkflowRunsNextPageParam,
34
34
  select: selectUniqueRuns,
@@ -1 +1 @@
1
- {"version":3,"file":"use-workflow-runs.cjs.js","sources":["../../../../src/domains/workflows/hooks/use-workflow-runs.ts"],"sourcesContent":["import type { GetWorkflowRunByIdResponse, MastraClient } from '@mastra/client-js';\nimport { useMastraClient } from '@mastra/react';\nimport type { UseMutationResult, UseQueryOptions } from '@tanstack/react-query';\nimport { useInfiniteQuery, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useInView } from '@/hooks/use-in-view';\nimport { toast } from '@/utils/toast';\n\ntype WorkflowRuns = Awaited<ReturnType<ReturnType<MastraClient['getWorkflow']>['runs']>>;\n\nexport const PER_PAGE = 20;\n\nexport function getWorkflowRunsNextPageParam(lastPage: WorkflowRuns, _allPages: unknown, lastPageParam: number) {\n if (lastPage.runs.length < PER_PAGE) {\n return undefined;\n }\n return lastPageParam + 1;\n}\n\nexport function selectUniqueRuns(data: { pages: WorkflowRuns[] }) {\n const seen = new Set<string>();\n return data.pages\n .flatMap(page => page.runs)\n .filter(run => {\n if (seen.has(run.runId)) return false;\n seen.add(run.runId);\n return true;\n });\n}\n\nexport const useWorkflowRuns = (workflowId: string, { enabled = true }: { enabled?: boolean } = {}) => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n const query = useInfiniteQuery({\n queryKey: ['workflow-runs', workflowId],\n queryFn: ({ pageParam }) => client.getWorkflow(workflowId).runs({ limit: PER_PAGE, offset: pageParam * PER_PAGE }),\n initialPageParam: 0,\n getNextPageParam: getWorkflowRunsNextPageParam,\n select: selectUniqueRuns,\n retry: false,\n enabled,\n refetchInterval: 5000,\n });\n\n const { hasNextPage, isFetchingNextPage, fetchNextPage } = query;\n\n useEffect(() => {\n if (isEndOfListInView && hasNextPage && !isFetchingNextPage) {\n void fetchNextPage();\n }\n }, [isEndOfListInView, hasNextPage, isFetchingNextPage, fetchNextPage]);\n\n return { ...query, setEndOfListElement };\n};\n\nexport const workflowRunQueryKey = (workflowId: string, runId: string) => ['workflow-run', workflowId, runId] as const;\n\nexport const useWorkflowRun = (\n workflowId: string,\n runId: string,\n refetchInterval?: UseQueryOptions<GetWorkflowRunByIdResponse>['refetchInterval'],\n) => {\n const client = useMastraClient();\n return useQuery({\n queryKey: workflowRunQueryKey(workflowId, runId),\n queryFn: () => client.getWorkflow(workflowId).runById(runId),\n enabled: Boolean(workflowId && runId),\n gcTime: 0,\n staleTime: 0,\n refetchInterval,\n });\n};\n\nexport const useDeleteWorkflowRun = (workflowId: string): UseMutationResult<unknown, Error, { runId: string }> => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ runId }: { runId: string }) => client.getWorkflow(workflowId).deleteRunById(runId),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['workflow-runs', workflowId] });\n toast.success('Workflow run deleted successfully');\n },\n onError: () => {\n toast.error('Failed to delete workflow run');\n },\n });\n};\n"],"names":["useMastraClient","useInView","useInfiniteQuery","useEffect","useQuery","useQueryClient","useMutation","toast"],"mappings":"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"}
1
+ {"version":3,"file":"use-workflow-runs.cjs.js","sources":["../../../../src/domains/workflows/hooks/use-workflow-runs.ts"],"sourcesContent":["import type { GetWorkflowRunByIdResponse, MastraClient } from '@mastra/client-js';\nimport { useMastraClient } from '@mastra/react';\nimport type { UseMutationResult, UseQueryOptions } from '@tanstack/react-query';\nimport { useInfiniteQuery, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useInView } from '@/hooks/use-in-view';\nimport { toast } from '@/utils/toast';\n\ntype WorkflowRuns = Awaited<ReturnType<ReturnType<MastraClient['getWorkflow']>['runs']>>;\n\nexport const PER_PAGE = 20;\n\nexport function getWorkflowRunsNextPageParam(lastPage: WorkflowRuns, _allPages: unknown, lastPageParam: number) {\n if (lastPage.runs.length < PER_PAGE) {\n return undefined;\n }\n return lastPageParam + 1;\n}\n\nexport function selectUniqueRuns(data: { pages: WorkflowRuns[] }) {\n const seen = new Set<string>();\n return data.pages\n .flatMap(page => page.runs)\n .filter(run => {\n if (seen.has(run.runId)) return false;\n seen.add(run.runId);\n return true;\n });\n}\n\n/**\n * `summary: true` asks the server to reduce each run snapshot to `{ status, timestamp }`,\n * avoiding transfer of full snapshots when only list metadata is displayed.\n */\nexport const useWorkflowRuns = (\n workflowId: string,\n { enabled = true, summary = false }: { enabled?: boolean; summary?: boolean } = {},\n) => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n const query = useInfiniteQuery({\n queryKey: ['workflow-runs', workflowId, { summary }],\n queryFn: ({ pageParam }) =>\n client\n .getWorkflow(workflowId)\n .runs({ limit: PER_PAGE, offset: pageParam * PER_PAGE, ...(summary ? { summary: true } : {}) }),\n initialPageParam: 0,\n getNextPageParam: getWorkflowRunsNextPageParam,\n select: selectUniqueRuns,\n retry: false,\n enabled,\n refetchInterval: 5000,\n });\n\n const { hasNextPage, isFetchingNextPage, fetchNextPage } = query;\n\n useEffect(() => {\n if (isEndOfListInView && hasNextPage && !isFetchingNextPage) {\n void fetchNextPage();\n }\n }, [isEndOfListInView, hasNextPage, isFetchingNextPage, fetchNextPage]);\n\n return { ...query, setEndOfListElement };\n};\n\nexport const workflowRunQueryKey = (workflowId: string, runId: string) => ['workflow-run', workflowId, runId] as const;\n\nexport const useWorkflowRun = (\n workflowId: string,\n runId: string,\n refetchInterval?: UseQueryOptions<GetWorkflowRunByIdResponse>['refetchInterval'],\n) => {\n const client = useMastraClient();\n return useQuery({\n queryKey: workflowRunQueryKey(workflowId, runId),\n queryFn: () => client.getWorkflow(workflowId).runById(runId),\n enabled: Boolean(workflowId && runId),\n gcTime: 0,\n staleTime: 0,\n refetchInterval,\n });\n};\n\nexport const useDeleteWorkflowRun = (workflowId: string): UseMutationResult<unknown, Error, { runId: string }> => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ runId }: { runId: string }) => client.getWorkflow(workflowId).deleteRunById(runId),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['workflow-runs', workflowId] });\n toast.success('Workflow run deleted successfully');\n },\n onError: () => {\n toast.error('Failed to delete workflow run');\n },\n });\n};\n"],"names":["useMastraClient","useInView","useInfiniteQuery","useEffect","useQuery","useQueryClient","useMutation","toast"],"mappings":"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"}
@@ -19,12 +19,12 @@ function selectUniqueRuns(data) {
19
19
  return true;
20
20
  });
21
21
  }
22
- const useWorkflowRuns = (workflowId, { enabled = true } = {}) => {
22
+ const useWorkflowRuns = (workflowId, { enabled = true, summary = false } = {}) => {
23
23
  const client = useMastraClient();
24
24
  const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();
25
25
  const query = useInfiniteQuery({
26
- queryKey: ["workflow-runs", workflowId],
27
- queryFn: ({ pageParam }) => client.getWorkflow(workflowId).runs({ limit: PER_PAGE, offset: pageParam * PER_PAGE }),
26
+ queryKey: ["workflow-runs", workflowId, { summary }],
27
+ queryFn: ({ pageParam }) => client.getWorkflow(workflowId).runs({ limit: PER_PAGE, offset: pageParam * PER_PAGE, ...summary ? { summary: true } : {} }),
28
28
  initialPageParam: 0,
29
29
  getNextPageParam: getWorkflowRunsNextPageParam,
30
30
  select: selectUniqueRuns,