@mastra/playground-ui 38.0.0-alpha.6 → 38.0.0-alpha.7

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 (38) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/{Entity-Bwbh0iLW.cjs → Entity-BYv3HxFw.cjs} +3 -2
  3. package/dist/{Entity-Bwbh0iLW.cjs.map → Entity-BYv3HxFw.cjs.map} +1 -1
  4. package/dist/{Entity-CyYGTYWL.js → Entity-Bm2Ej7Is.js} +3 -2
  5. package/dist/{Entity-CyYGTYWL.js.map → Entity-Bm2Ej7Is.js.map} +1 -1
  6. package/dist/components/Columns.cjs.js +1 -1
  7. package/dist/components/Columns.es.js +1 -1
  8. package/dist/components/Entity.cjs.js +1 -1
  9. package/dist/components/Entity.es.js +1 -1
  10. package/dist/components/EntityHeader.cjs.js +1 -1
  11. package/dist/components/EntityHeader.es.js +1 -1
  12. package/dist/components/RuleBuilder.cjs.js +1 -1
  13. package/dist/components/RuleBuilder.es.js +1 -1
  14. package/dist/ee/signals/components/signal-details-page.cjs.js +1 -0
  15. package/dist/ee/signals/components/signal-details-page.cjs.js.map +1 -1
  16. package/dist/ee/signals/components/signal-details-page.es.js +1 -0
  17. package/dist/ee/signals/components/signal-details-page.es.js.map +1 -1
  18. package/dist/{entity-header-C8I47AfB.js → entity-header-0O1DTUKq.js} +2 -1
  19. package/dist/{entity-header-C8I47AfB.js.map → entity-header-0O1DTUKq.js.map} +1 -1
  20. package/dist/{entity-header-FXlDOgXp.cjs → entity-header-DqFtpiMx.cjs} +2 -1
  21. package/dist/{entity-header-FXlDOgXp.cjs.map → entity-header-DqFtpiMx.cjs.map} +1 -1
  22. package/dist/index.cjs.js +137 -137
  23. package/dist/index.es.js +66 -66
  24. package/dist/{multi-column-BR3a4MvZ.js → multi-column-DzAz6aWn.js} +2 -1
  25. package/dist/{multi-column-BR3a4MvZ.js.map → multi-column-DzAz6aWn.js.map} +1 -1
  26. package/dist/{multi-column-DGAsiBPq.cjs → multi-column-IfbHfooJ.cjs} +2 -1
  27. package/dist/{multi-column-DGAsiBPq.cjs.map → multi-column-IfbHfooJ.cjs.map} +1 -1
  28. package/dist/resize/collapsible-panel.cjs.js +1 -1
  29. package/dist/resize/collapsible-panel.es.js +1 -1
  30. package/dist/resize/panel-drawer.cjs.js +2 -1
  31. package/dist/resize/panel-drawer.cjs.js.map +1 -1
  32. package/dist/resize/panel-drawer.es.js +2 -1
  33. package/dist/resize/panel-drawer.es.js.map +1 -1
  34. package/dist/{rule-builder-CN5HwvJ3.cjs → rule-builder-BGlwYc1Q.cjs} +2 -2
  35. package/dist/{rule-builder-CN5HwvJ3.cjs.map → rule-builder-BGlwYc1Q.cjs.map} +1 -1
  36. package/dist/{rule-builder-B7J3z1Gd.js → rule-builder-DYON077L.js} +2 -2
  37. package/dist/{rule-builder-B7J3z1Gd.js.map → rule-builder-DYON077L.js.map} +1 -1
  38. package/package.json +7 -7
package/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # @mastra/playground-ui
2
2
 
3
+ ## 38.0.0-alpha.7
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [[`8be63b0`](https://github.com/mastra-ai/mastra/commit/8be63b015fb8d72cea1220f05e7dc3bb997cc249), [`345eecc`](https://github.com/mastra-ai/mastra/commit/345eecce6ba519b5d987f0e10b5de4c8e5734580), [`ee14cae`](https://github.com/mastra-ai/mastra/commit/ee14cae244805783bde518a6142de28b744b169c)]:
8
+ - @mastra/core@1.48.0-alpha.7
9
+ - @mastra/client-js@1.29.0-alpha.7
10
+ - @mastra/react@1.2.1-alpha.7
11
+
3
12
  ## 38.0.0-alpha.6
4
13
 
5
14
  ### Patch Changes
@@ -2,8 +2,9 @@
2
2
 
3
3
  const jsxRuntime = require('react/jsx-runtime');
4
4
  const Txt = require('./Txt-BT8_EkuZ.cjs');
5
- const utils_cn = require('./cn-vA5sWo9W.cjs');
6
5
  const icons_Icon = require('./icons/Icon.cjs.js');
6
+ require('lucide-react');
7
+ const utils_cn = require('./cn-vA5sWo9W.cjs');
7
8
 
8
9
  const Entity = ({ children, className, onClick }) => {
9
10
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -45,4 +46,4 @@ exports.EntityContent = EntityContent;
45
46
  exports.EntityDescription = EntityDescription;
46
47
  exports.EntityIcon = EntityIcon;
47
48
  exports.EntityName = EntityName;
48
- //# sourceMappingURL=Entity-Bwbh0iLW.cjs.map
49
+ //# sourceMappingURL=Entity-BYv3HxFw.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Entity-Bwbh0iLW.cjs","sources":["../src/ds/components/Entity/Entity.tsx"],"sourcesContent":["import { Txt } from '../Txt';\nimport { Icon } from '@/ds/icons';\nimport { cn } from '@/lib/utils';\n\nexport interface EntityProps {\n children: React.ReactNode;\n className?: string;\n onClick?: () => void;\n style?: React.CSSProperties;\n}\n\nexport const Entity = ({ children, className, onClick }: EntityProps) => {\n return (\n <div\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={e => {\n if (!onClick) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick?.();\n }\n }}\n className={cn(\n 'flex gap-3 group/entity bg-surface3 rounded-xl border border-border1 py-3 px-4',\n onClick && 'cursor-pointer hover:bg-surface4 transition-all',\n className,\n )}\n onClick={onClick}\n >\n {children}\n </div>\n );\n};\n\nexport const EntityIcon = ({ children, className, style }: EntityProps) => {\n return (\n <Icon size=\"lg\" className={cn('text-neutral3 mt-1 shrink-0', className)} style={style}>\n {children}\n </Icon>\n );\n};\n\nexport const EntityName = ({ children, className }: EntityProps) => {\n return (\n <Txt as=\"p\" variant=\"ui-lg\" className={cn('text-neutral6 font-medium', className)}>\n {children}\n </Txt>\n );\n};\n\nexport const EntityDescription = ({ children, className }: EntityProps) => {\n return (\n <Txt as=\"div\" variant=\"ui-sm\" className={cn('text-neutral3', className)}>\n {children}\n </Txt>\n );\n};\n\nexport const EntityContent = ({ children, className }: EntityProps) => {\n return <div className={cn('flex-1 w-full', className)}>{children}</div>;\n};\n"],"names":["jsx","cn","Icon","Txt"],"mappings":";;;;;;;AAWO,MAAM,SAAS,CAAC,EAAE,QAAA,EAAU,SAAA,EAAW,SAAQ,KAAmB;AACvE,EAAA,uBACEA,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,QAAA,EAAU,UAAU,CAAA,GAAI,MAAA;AAAA,MACxB,WAAW,CAAA,CAAA,KAAK;AACd,QAAA,IAAI,CAAC,OAAA,EAAS;AACd,QAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,OAAA,IAAU;AAAA,QACZ;AAAA,MACF,CAAA;AAAA,MACA,SAAA,EAAWC,WAAA;AAAA,QACT,gFAAA;AAAA,QACA,OAAA,IAAW,iDAAA;AAAA,QACX;AAAA,OACF;AAAA,MACA,OAAA;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ;AAEO,MAAM,aAAa,CAAC,EAAE,QAAA,EAAU,SAAA,EAAW,OAAM,KAAmB;AACzE,EAAA,uBACED,cAAA,CAACE,eAAA,EAAA,EAAK,IAAA,EAAK,IAAA,EAAK,SAAA,EAAWD,YAAG,6BAAA,EAA+B,SAAS,CAAA,EAAG,KAAA,EACtE,QAAA,EACH,CAAA;AAEJ;AAEO,MAAM,UAAA,GAAa,CAAC,EAAE,QAAA,EAAU,WAAU,KAAmB;AAClE,EAAA,uBACED,cAAA,CAACG,OAAA,EAAA,EAAI,EAAA,EAAG,GAAA,EAAI,OAAA,EAAQ,OAAA,EAAQ,SAAA,EAAWF,WAAA,CAAG,2BAAA,EAA6B,SAAS,CAAA,EAC7E,QAAA,EACH,CAAA;AAEJ;AAEO,MAAM,iBAAA,GAAoB,CAAC,EAAE,QAAA,EAAU,WAAU,KAAmB;AACzE,EAAA,uBACED,cAAA,CAACG,OAAA,EAAA,EAAI,EAAA,EAAG,KAAA,EAAM,OAAA,EAAQ,OAAA,EAAQ,SAAA,EAAWF,WAAA,CAAG,eAAA,EAAiB,SAAS,CAAA,EACnE,QAAA,EACH,CAAA;AAEJ;AAEO,MAAM,aAAA,GAAgB,CAAC,EAAE,QAAA,EAAU,WAAU,KAAmB;AACrE,EAAA,sCAAQ,KAAA,EAAA,EAAI,SAAA,EAAWA,YAAG,eAAA,EAAiB,SAAS,GAAI,QAAA,EAAS,CAAA;AACnE;;;;;;;;"}
1
+ {"version":3,"file":"Entity-BYv3HxFw.cjs","sources":["../src/ds/components/Entity/Entity.tsx"],"sourcesContent":["import { Txt } from '../Txt';\nimport { Icon } from '@/ds/icons';\nimport { cn } from '@/lib/utils';\n\nexport interface EntityProps {\n children: React.ReactNode;\n className?: string;\n onClick?: () => void;\n style?: React.CSSProperties;\n}\n\nexport const Entity = ({ children, className, onClick }: EntityProps) => {\n return (\n <div\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={e => {\n if (!onClick) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick?.();\n }\n }}\n className={cn(\n 'flex gap-3 group/entity bg-surface3 rounded-xl border border-border1 py-3 px-4',\n onClick && 'cursor-pointer hover:bg-surface4 transition-all',\n className,\n )}\n onClick={onClick}\n >\n {children}\n </div>\n );\n};\n\nexport const EntityIcon = ({ children, className, style }: EntityProps) => {\n return (\n <Icon size=\"lg\" className={cn('text-neutral3 mt-1 shrink-0', className)} style={style}>\n {children}\n </Icon>\n );\n};\n\nexport const EntityName = ({ children, className }: EntityProps) => {\n return (\n <Txt as=\"p\" variant=\"ui-lg\" className={cn('text-neutral6 font-medium', className)}>\n {children}\n </Txt>\n );\n};\n\nexport const EntityDescription = ({ children, className }: EntityProps) => {\n return (\n <Txt as=\"div\" variant=\"ui-sm\" className={cn('text-neutral3', className)}>\n {children}\n </Txt>\n );\n};\n\nexport const EntityContent = ({ children, className }: EntityProps) => {\n return <div className={cn('flex-1 w-full', className)}>{children}</div>;\n};\n"],"names":["jsx","cn","Icon","Txt"],"mappings":";;;;;;;;AAWO,MAAM,SAAS,CAAC,EAAE,QAAA,EAAU,SAAA,EAAW,SAAQ,KAAmB;AACvE,EAAA,uBACEA,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,QAAA,EAAU,UAAU,CAAA,GAAI,MAAA;AAAA,MACxB,WAAW,CAAA,CAAA,KAAK;AACd,QAAA,IAAI,CAAC,OAAA,EAAS;AACd,QAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,OAAA,IAAU;AAAA,QACZ;AAAA,MACF,CAAA;AAAA,MACA,SAAA,EAAWC,WAAA;AAAA,QACT,gFAAA;AAAA,QACA,OAAA,IAAW,iDAAA;AAAA,QACX;AAAA,OACF;AAAA,MACA,OAAA;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ;AAEO,MAAM,aAAa,CAAC,EAAE,QAAA,EAAU,SAAA,EAAW,OAAM,KAAmB;AACzE,EAAA,uBACED,cAAA,CAACE,eAAA,EAAA,EAAK,IAAA,EAAK,IAAA,EAAK,SAAA,EAAWD,YAAG,6BAAA,EAA+B,SAAS,CAAA,EAAG,KAAA,EACtE,QAAA,EACH,CAAA;AAEJ;AAEO,MAAM,UAAA,GAAa,CAAC,EAAE,QAAA,EAAU,WAAU,KAAmB;AAClE,EAAA,uBACED,cAAA,CAACG,OAAA,EAAA,EAAI,EAAA,EAAG,GAAA,EAAI,OAAA,EAAQ,OAAA,EAAQ,SAAA,EAAWF,WAAA,CAAG,2BAAA,EAA6B,SAAS,CAAA,EAC7E,QAAA,EACH,CAAA;AAEJ;AAEO,MAAM,iBAAA,GAAoB,CAAC,EAAE,QAAA,EAAU,WAAU,KAAmB;AACzE,EAAA,uBACED,cAAA,CAACG,OAAA,EAAA,EAAI,EAAA,EAAG,KAAA,EAAM,OAAA,EAAQ,OAAA,EAAQ,SAAA,EAAWF,WAAA,CAAG,eAAA,EAAiB,SAAS,CAAA,EACnE,QAAA,EACH,CAAA;AAEJ;AAEO,MAAM,aAAA,GAAgB,CAAC,EAAE,QAAA,EAAU,WAAU,KAAmB;AACrE,EAAA,sCAAQ,KAAA,EAAA,EAAI,SAAA,EAAWA,YAAG,eAAA,EAAiB,SAAS,GAAI,QAAA,EAAS,CAAA;AACnE;;;;;;;;"}
@@ -1,7 +1,8 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { T as Txt } from './Txt-p33XTnu8.js';
3
- import { c as cn } from './cn-BakJzhuv.js';
4
3
  import { Icon } from './icons/Icon.es.js';
4
+ import 'lucide-react';
5
+ import { c as cn } from './cn-BakJzhuv.js';
5
6
 
6
7
  const Entity = ({ children, className, onClick }) => {
7
8
  return /* @__PURE__ */ jsx(
@@ -39,4 +40,4 @@ const EntityContent = ({ children, className }) => {
39
40
  };
40
41
 
41
42
  export { Entity as E, EntityContent as a, EntityDescription as b, EntityIcon as c, EntityName as d };
42
- //# sourceMappingURL=Entity-CyYGTYWL.js.map
43
+ //# sourceMappingURL=Entity-Bm2Ej7Is.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Entity-CyYGTYWL.js","sources":["../src/ds/components/Entity/Entity.tsx"],"sourcesContent":["import { Txt } from '../Txt';\nimport { Icon } from '@/ds/icons';\nimport { cn } from '@/lib/utils';\n\nexport interface EntityProps {\n children: React.ReactNode;\n className?: string;\n onClick?: () => void;\n style?: React.CSSProperties;\n}\n\nexport const Entity = ({ children, className, onClick }: EntityProps) => {\n return (\n <div\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={e => {\n if (!onClick) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick?.();\n }\n }}\n className={cn(\n 'flex gap-3 group/entity bg-surface3 rounded-xl border border-border1 py-3 px-4',\n onClick && 'cursor-pointer hover:bg-surface4 transition-all',\n className,\n )}\n onClick={onClick}\n >\n {children}\n </div>\n );\n};\n\nexport const EntityIcon = ({ children, className, style }: EntityProps) => {\n return (\n <Icon size=\"lg\" className={cn('text-neutral3 mt-1 shrink-0', className)} style={style}>\n {children}\n </Icon>\n );\n};\n\nexport const EntityName = ({ children, className }: EntityProps) => {\n return (\n <Txt as=\"p\" variant=\"ui-lg\" className={cn('text-neutral6 font-medium', className)}>\n {children}\n </Txt>\n );\n};\n\nexport const EntityDescription = ({ children, className }: EntityProps) => {\n return (\n <Txt as=\"div\" variant=\"ui-sm\" className={cn('text-neutral3', className)}>\n {children}\n </Txt>\n );\n};\n\nexport const EntityContent = ({ children, className }: EntityProps) => {\n return <div className={cn('flex-1 w-full', className)}>{children}</div>;\n};\n"],"names":[],"mappings":";;;;;AAWO,MAAM,SAAS,CAAC,EAAE,QAAA,EAAU,SAAA,EAAW,SAAQ,KAAmB;AACvE,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,QAAA,EAAU,UAAU,CAAA,GAAI,MAAA;AAAA,MACxB,WAAW,CAAA,CAAA,KAAK;AACd,QAAA,IAAI,CAAC,OAAA,EAAS;AACd,QAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,OAAA,IAAU;AAAA,QACZ;AAAA,MACF,CAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,gFAAA;AAAA,QACA,OAAA,IAAW,iDAAA;AAAA,QACX;AAAA,OACF;AAAA,MACA,OAAA;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ;AAEO,MAAM,aAAa,CAAC,EAAE,QAAA,EAAU,SAAA,EAAW,OAAM,KAAmB;AACzE,EAAA,uBACE,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,IAAA,EAAK,SAAA,EAAW,GAAG,6BAAA,EAA+B,SAAS,CAAA,EAAG,KAAA,EACtE,QAAA,EACH,CAAA;AAEJ;AAEO,MAAM,UAAA,GAAa,CAAC,EAAE,QAAA,EAAU,WAAU,KAAmB;AAClE,EAAA,uBACE,GAAA,CAAC,GAAA,EAAA,EAAI,EAAA,EAAG,GAAA,EAAI,OAAA,EAAQ,OAAA,EAAQ,SAAA,EAAW,EAAA,CAAG,2BAAA,EAA6B,SAAS,CAAA,EAC7E,QAAA,EACH,CAAA;AAEJ;AAEO,MAAM,iBAAA,GAAoB,CAAC,EAAE,QAAA,EAAU,WAAU,KAAmB;AACzE,EAAA,uBACE,GAAA,CAAC,GAAA,EAAA,EAAI,EAAA,EAAG,KAAA,EAAM,OAAA,EAAQ,OAAA,EAAQ,SAAA,EAAW,EAAA,CAAG,eAAA,EAAiB,SAAS,CAAA,EACnE,QAAA,EACH,CAAA;AAEJ;AAEO,MAAM,aAAA,GAAgB,CAAC,EAAE,QAAA,EAAU,WAAU,KAAmB;AACrE,EAAA,2BAAQ,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,eAAA,EAAiB,SAAS,GAAI,QAAA,EAAS,CAAA;AACnE;;;;"}
1
+ {"version":3,"file":"Entity-Bm2Ej7Is.js","sources":["../src/ds/components/Entity/Entity.tsx"],"sourcesContent":["import { Txt } from '../Txt';\nimport { Icon } from '@/ds/icons';\nimport { cn } from '@/lib/utils';\n\nexport interface EntityProps {\n children: React.ReactNode;\n className?: string;\n onClick?: () => void;\n style?: React.CSSProperties;\n}\n\nexport const Entity = ({ children, className, onClick }: EntityProps) => {\n return (\n <div\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={e => {\n if (!onClick) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick?.();\n }\n }}\n className={cn(\n 'flex gap-3 group/entity bg-surface3 rounded-xl border border-border1 py-3 px-4',\n onClick && 'cursor-pointer hover:bg-surface4 transition-all',\n className,\n )}\n onClick={onClick}\n >\n {children}\n </div>\n );\n};\n\nexport const EntityIcon = ({ children, className, style }: EntityProps) => {\n return (\n <Icon size=\"lg\" className={cn('text-neutral3 mt-1 shrink-0', className)} style={style}>\n {children}\n </Icon>\n );\n};\n\nexport const EntityName = ({ children, className }: EntityProps) => {\n return (\n <Txt as=\"p\" variant=\"ui-lg\" className={cn('text-neutral6 font-medium', className)}>\n {children}\n </Txt>\n );\n};\n\nexport const EntityDescription = ({ children, className }: EntityProps) => {\n return (\n <Txt as=\"div\" variant=\"ui-sm\" className={cn('text-neutral3', className)}>\n {children}\n </Txt>\n );\n};\n\nexport const EntityContent = ({ children, className }: EntityProps) => {\n return <div className={cn('flex-1 w-full', className)}>{children}</div>;\n};\n"],"names":[],"mappings":";;;;;;AAWO,MAAM,SAAS,CAAC,EAAE,QAAA,EAAU,SAAA,EAAW,SAAQ,KAAmB;AACvE,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,QAAA,EAAU,UAAU,CAAA,GAAI,MAAA;AAAA,MACxB,WAAW,CAAA,CAAA,KAAK;AACd,QAAA,IAAI,CAAC,OAAA,EAAS;AACd,QAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,OAAA,IAAU;AAAA,QACZ;AAAA,MACF,CAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,gFAAA;AAAA,QACA,OAAA,IAAW,iDAAA;AAAA,QACX;AAAA,OACF;AAAA,MACA,OAAA;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ;AAEO,MAAM,aAAa,CAAC,EAAE,QAAA,EAAU,SAAA,EAAW,OAAM,KAAmB;AACzE,EAAA,uBACE,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,IAAA,EAAK,SAAA,EAAW,GAAG,6BAAA,EAA+B,SAAS,CAAA,EAAG,KAAA,EACtE,QAAA,EACH,CAAA;AAEJ;AAEO,MAAM,UAAA,GAAa,CAAC,EAAE,QAAA,EAAU,WAAU,KAAmB;AAClE,EAAA,uBACE,GAAA,CAAC,GAAA,EAAA,EAAI,EAAA,EAAG,GAAA,EAAI,OAAA,EAAQ,OAAA,EAAQ,SAAA,EAAW,EAAA,CAAG,2BAAA,EAA6B,SAAS,CAAA,EAC7E,QAAA,EACH,CAAA;AAEJ;AAEO,MAAM,iBAAA,GAAoB,CAAC,EAAE,QAAA,EAAU,WAAU,KAAmB;AACzE,EAAA,uBACE,GAAA,CAAC,GAAA,EAAA,EAAI,EAAA,EAAG,KAAA,EAAM,OAAA,EAAQ,OAAA,EAAQ,SAAA,EAAW,EAAA,CAAG,eAAA,EAAiB,SAAS,CAAA,EACnE,QAAA,EACH,CAAA;AAEJ;AAEO,MAAM,aAAA,GAAgB,CAAC,EAAE,QAAA,EAAU,WAAU,KAAmB;AACrE,EAAA,2BAAQ,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,eAAA,EAAiB,SAAS,GAAI,QAAA,EAAS,CAAA;AACnE;;;;"}
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
 
5
- const multiColumn = require('../multi-column-DGAsiBPq.cjs');
5
+ const multiColumn = require('../multi-column-IfbHfooJ.cjs');
6
6
 
7
7
 
8
8
 
@@ -1,2 +1,2 @@
1
- export { C as Column, a as Columns, M as MultiColumn } from '../multi-column-BR3a4MvZ.js';
1
+ export { C as Column, a as Columns, M as MultiColumn } from '../multi-column-DzAz6aWn.js';
2
2
  //# sourceMappingURL=Columns.es.js.map
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
 
5
- const Entity = require('../Entity-Bwbh0iLW.cjs');
5
+ const Entity = require('../Entity-BYv3HxFw.cjs');
6
6
 
7
7
 
8
8
 
@@ -1,2 +1,2 @@
1
- export { E as Entity, a as EntityContent, b as EntityDescription, c as EntityIcon, d as EntityName } from '../Entity-CyYGTYWL.js';
1
+ export { E as Entity, a as EntityContent, b as EntityDescription, c as EntityIcon, d as EntityName } from '../Entity-Bm2Ej7Is.js';
2
2
  //# sourceMappingURL=Entity.es.js.map
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
 
5
- const entityHeader = require('../entity-header-FXlDOgXp.cjs');
5
+ const entityHeader = require('../entity-header-DqFtpiMx.cjs');
6
6
 
7
7
 
8
8
 
@@ -1,2 +1,2 @@
1
- export { E as EntityHeader } from '../entity-header-C8I47AfB.js';
1
+ export { E as EntityHeader } from '../entity-header-0O1DTUKq.js';
2
2
  //# sourceMappingURL=EntityHeader.es.js.map
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
 
5
- const ruleBuilder = require('../rule-builder-CN5HwvJ3.cjs');
5
+ const ruleBuilder = require('../rule-builder-BGlwYc1Q.cjs');
6
6
 
7
7
 
8
8
 
@@ -1,2 +1,2 @@
1
- export { R as RuleBuilder } from '../rule-builder-B7J3z1Gd.js';
1
+ export { R as RuleBuilder } from '../rule-builder-DYON077L.js';
2
2
  //# sourceMappingURL=RuleBuilder.es.js.map
@@ -6,6 +6,7 @@ const jsxRuntime = require('react/jsx-runtime');
6
6
  const React = require('react');
7
7
  require('@mastra/react');
8
8
  require('@tanstack/react-query');
9
+ require('../../../toast-Bh4WQDyj.cjs');
9
10
  const domains_traces_hooks_useTraces = require('../../../domains/traces/hooks/use-traces.cjs.js');
10
11
  require('../../../domains/traces/trace-filters.cjs.js');
11
12
  const scatterPlotChart = require('../../../scatter-plot-chart-CFZO31md.cjs');
@@ -1 +1 @@
1
- {"version":3,"file":"signal-details-page.cjs.js","sources":["../../../../src/ee/signals/components/signal-details-page.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { useTraces } from '../../../domains/traces/hooks';\nimport { ScatterPlotChart } from '../../../ds/components/ScatterPlotChart';\nimport { Tab, TabContent, TabList, Tabs } from '../../../ds/components/Tabs';\nimport { stringToColor } from '../../../lib/colors';\nimport { cn } from '../../../lib/utils';\nimport { TopicTraceDetailsPanel, TopicTraceSummaryList, TopicsLayout } from '../../topics';\nimport { getSignalChartData } from '../signals-chart-data';\nimport { signals } from '../signals-data';\nimport type { Signal, SignalCluster } from '../types';\n\nconst SignalTraceSummaryList = TopicTraceSummaryList;\nexport const SignalTraceDetailsPanel = TopicTraceDetailsPanel;\nconst SignalsLayout = TopicsLayout;\n\ntype SignalTab = 'trace-list' | 'chart';\n\nfunction findClusterByTraceId(signal: Signal | undefined, traceId: string | undefined) {\n if (!signal || !traceId) return undefined;\n return signal.clusters.find(cluster => cluster.traceSummaries.some(trace => trace.id === traceId));\n}\n\ninterface SignalClusterSidebarProps {\n signal: Signal;\n selectedClusterIds: string[];\n onClusterSelect: (clusterId: string) => void;\n multiple?: boolean;\n ariaLabel?: string;\n}\n\nexport function SignalClusterSidebar({\n signal,\n selectedClusterIds,\n onClusterSelect,\n multiple = false,\n ariaLabel = 'Signal clusters',\n}: SignalClusterSidebarProps) {\n return (\n <aside\n className=\"min-h-0 w-72 shrink-0 overflow-y-auto border-r border-border1/60 pr-4 py-4\"\n aria-label={ariaLabel}\n >\n <ul className=\"space-y-1\" role={multiple ? 'group' : undefined}>\n {signal.clusters.map(cluster => {\n const selected = selectedClusterIds.includes(cluster.id);\n return (\n <li key={cluster.id}>\n <button\n type=\"button\"\n role={multiple ? 'checkbox' : undefined}\n aria-checked={multiple ? selected : undefined}\n aria-pressed={multiple ? undefined : selected}\n className=\"group cursor-pointer w-full rounded-xl px-3 py-2 text-left transition-colors hover:bg-surface3 aria-pressed:bg-surface3 aria-checked:bg-surface3 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent1\"\n onClick={() => onClusterSelect(cluster.id)}\n >\n <span className=\"flex items-start gap-2\">\n <span\n className={cn('mt-1.5 h-2 w-2 shrink-0 rounded-full', multiple && !selected && 'invisible')}\n style={{ backgroundColor: stringToColor(cluster.name) }}\n />\n <span className=\"min-w-0 space-y-1\">\n <span\n className={cn(\n 'block text-sm font-medium',\n multiple && !selected ? 'text-neutral3' : 'text-neutral5',\n )}\n >\n {cluster.name}\n </span>\n <span\n className={cn(\n 'line-clamp-2 block text-sm',\n multiple && !selected ? 'text-neutral1' : 'text-neutral2',\n )}\n >\n {cluster.description}\n </span>\n </span>\n </span>\n </button>\n </li>\n );\n })}\n </ul>\n </aside>\n );\n}\n\nexport function SignalTraceListTab({\n cluster,\n selectedTraceId,\n onTraceSelect,\n}: {\n cluster: SignalCluster;\n selectedTraceId: string | null;\n onTraceSelect: () => void;\n}) {\n return (\n <SignalTraceSummaryList\n traces={cluster.traceSummaries}\n selectedTraceId={selectedTraceId}\n onTraceSelect={onTraceSelect}\n />\n );\n}\n\ninterface SignalChartTabProps {\n signal: Signal;\n selectedClusterIds: string[];\n onClusterToggle: (clusterId: string) => void;\n}\n\nexport function SignalChartTab({ signal, selectedClusterIds, onClusterToggle }: SignalChartTabProps) {\n const selectedClusters = useMemo(\n () => signal.clusters.filter(cluster => selectedClusterIds.includes(cluster.id)),\n [signal.clusters, selectedClusterIds],\n );\n const chartData = useMemo(() => getSignalChartData(selectedClusters), [selectedClusters]);\n\n return (\n <div className=\"flex h-full min-w-0 gap-6\">\n <SignalClusterSidebar\n signal={signal}\n selectedClusterIds={selectedClusterIds}\n onClusterSelect={onClusterToggle}\n multiple\n ariaLabel=\"Chart cluster filters\"\n />\n <div className=\"min-h-0 min-w-0 flex-1 py-4\">\n <ScatterPlotChart\n data={chartData}\n xKey=\"duration\"\n yKey=\"spans\"\n nameKey=\"name\"\n colorKey=\"color\"\n height=\"100%\"\n className=\"h-full\"\n xLabel=\"Duration\"\n yLabel=\"Spans\"\n formatX={value => `${value}ms`}\n formatY={value => `${value} spans`}\n />\n </div>\n </div>\n );\n}\n\ninterface SignalClusterTabsProps {\n signal: Signal;\n selectedCluster: SignalCluster;\n selectedTraceId: string | null;\n selectedChartClusterIds: string[];\n activeTab: SignalTab;\n onActiveTabChange: (tab: SignalTab) => void;\n onClusterSelect: (clusterId: string) => void;\n onChartClusterToggle: (clusterId: string) => void;\n onTraceSelect: () => void;\n}\n\nexport function SignalClusterTabs({\n signal,\n selectedCluster,\n selectedTraceId,\n selectedChartClusterIds,\n activeTab,\n onActiveTabChange,\n onClusterSelect,\n onChartClusterToggle,\n onTraceSelect,\n}: SignalClusterTabsProps) {\n return (\n <Tabs<SignalTab>\n defaultTab=\"trace-list\"\n value={activeTab}\n onValueChange={onActiveTabChange}\n className=\"flex h-full min-h-0 flex-col overflow-hidden\"\n >\n <TabList variant=\"line\">\n <Tab value=\"trace-list\">Trace list</Tab>\n <Tab value=\"chart\">Chart</Tab>\n </TabList>\n <TabContent value=\"trace-list\" className=\"min-h-0 flex-1 overflow-hidden py-0\">\n <div className=\"flex h-full min-w-0 gap-6\">\n <SignalClusterSidebar\n signal={signal}\n selectedClusterIds={[selectedCluster.id]}\n onClusterSelect={onClusterSelect}\n />\n <div className=\"min-w-0 flex-1 overflow-hidden py-4\">\n <SignalTraceListTab\n cluster={selectedCluster}\n selectedTraceId={selectedTraceId}\n onTraceSelect={onTraceSelect}\n />\n </div>\n </div>\n </TabContent>\n <TabContent value=\"chart\" className=\"min-h-0 flex-1 overflow-hidden py-0\">\n <SignalChartTab\n signal={signal}\n selectedClusterIds={selectedChartClusterIds}\n onClusterToggle={onChartClusterToggle}\n />\n </TabContent>\n </Tabs>\n );\n}\n\nexport interface SignalDetailsPageProps {\n signalId?: string;\n selectedTraceId: string | null;\n tracePanel?: ReactNode;\n onTraceSelect: (signalId: string, traceId: string) => void;\n}\n\nexport function SignalDetailsPage({ signalId, selectedTraceId, tracePanel, onTraceSelect }: SignalDetailsPageProps) {\n const selectedSignal = useMemo(() => signals.find(signal => signal.id === signalId), [signalId]);\n const initialCluster =\n findClusterByTraceId(selectedSignal, selectedTraceId ?? undefined) ?? selectedSignal?.clusters[0];\n const [selectedClusterId, setSelectedClusterId] = useState<string | null>(() => initialCluster?.id ?? null);\n const [selectedChartClusterIds, setSelectedChartClusterIds] = useState<string[]>(\n () => selectedSignal?.clusters.map(cluster => cluster.id) ?? [],\n );\n const [activeTab, setActiveTab] = useState<SignalTab>('trace-list');\n const selectedCluster = selectedSignal?.clusters.find(cluster => cluster.id === selectedClusterId) ?? initialCluster;\n const { data: tracesData } = useTraces({});\n const resolvedTraceId = tracesData?.spans[0]?.traceId ?? null;\n\n const handleTraceSelect = () => {\n if (!selectedSignal || !resolvedTraceId) return;\n\n onTraceSelect(selectedSignal.id, resolvedTraceId);\n };\n\n const handleChartClusterToggle = (clusterId: string) => {\n setSelectedChartClusterIds(current =>\n current.includes(clusterId) ? current.filter(id => id !== clusterId) : [...current, clusterId],\n );\n };\n\n if (!selectedSignal || !selectedCluster) {\n return <SignalsLayout sidebar={null}>Signal not found</SignalsLayout>;\n }\n\n return (\n <SignalsLayout sidebar={null} tracePanel={activeTab === 'trace-list' ? tracePanel : undefined}>\n <section className=\"flex h-full min-w-0 flex-col gap-4\">\n <header className=\"space-y-1\">\n <h1 className=\"text-icon-xl font-semibold text-neutral6\">{selectedSignal.name}</h1>\n <p className=\"text-ui-sm text-neutral3\">Explore trace patterns by cluster.</p>\n </header>\n <div className=\"min-h-0 flex-1 overflow-hidden\">\n <SignalClusterTabs\n signal={selectedSignal}\n selectedCluster={selectedCluster}\n selectedTraceId={selectedTraceId}\n selectedChartClusterIds={selectedChartClusterIds}\n activeTab={activeTab}\n onActiveTabChange={setActiveTab}\n onClusterSelect={setSelectedClusterId}\n onChartClusterToggle={handleChartClusterToggle}\n onTraceSelect={handleTraceSelect}\n />\n </div>\n </section>\n </SignalsLayout>\n );\n}\n"],"names":["TopicTraceSummaryList","TopicTraceDetailsPanel","TopicsLayout","jsx","jsxs","cn","stringToColor","useMemo","getSignalChartData","ScatterPlotChart","Tabs","TabList","Tab","TabContent","signals","useState","useTraces"],"mappings":"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"}
1
+ {"version":3,"file":"signal-details-page.cjs.js","sources":["../../../../src/ee/signals/components/signal-details-page.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { useTraces } from '../../../domains/traces/hooks';\nimport { ScatterPlotChart } from '../../../ds/components/ScatterPlotChart';\nimport { Tab, TabContent, TabList, Tabs } from '../../../ds/components/Tabs';\nimport { stringToColor } from '../../../lib/colors';\nimport { cn } from '../../../lib/utils';\nimport { TopicTraceDetailsPanel, TopicTraceSummaryList, TopicsLayout } from '../../topics';\nimport { getSignalChartData } from '../signals-chart-data';\nimport { signals } from '../signals-data';\nimport type { Signal, SignalCluster } from '../types';\n\nconst SignalTraceSummaryList = TopicTraceSummaryList;\nexport const SignalTraceDetailsPanel = TopicTraceDetailsPanel;\nconst SignalsLayout = TopicsLayout;\n\ntype SignalTab = 'trace-list' | 'chart';\n\nfunction findClusterByTraceId(signal: Signal | undefined, traceId: string | undefined) {\n if (!signal || !traceId) return undefined;\n return signal.clusters.find(cluster => cluster.traceSummaries.some(trace => trace.id === traceId));\n}\n\ninterface SignalClusterSidebarProps {\n signal: Signal;\n selectedClusterIds: string[];\n onClusterSelect: (clusterId: string) => void;\n multiple?: boolean;\n ariaLabel?: string;\n}\n\nexport function SignalClusterSidebar({\n signal,\n selectedClusterIds,\n onClusterSelect,\n multiple = false,\n ariaLabel = 'Signal clusters',\n}: SignalClusterSidebarProps) {\n return (\n <aside\n className=\"min-h-0 w-72 shrink-0 overflow-y-auto border-r border-border1/60 pr-4 py-4\"\n aria-label={ariaLabel}\n >\n <ul className=\"space-y-1\" role={multiple ? 'group' : undefined}>\n {signal.clusters.map(cluster => {\n const selected = selectedClusterIds.includes(cluster.id);\n return (\n <li key={cluster.id}>\n <button\n type=\"button\"\n role={multiple ? 'checkbox' : undefined}\n aria-checked={multiple ? selected : undefined}\n aria-pressed={multiple ? undefined : selected}\n className=\"group cursor-pointer w-full rounded-xl px-3 py-2 text-left transition-colors hover:bg-surface3 aria-pressed:bg-surface3 aria-checked:bg-surface3 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent1\"\n onClick={() => onClusterSelect(cluster.id)}\n >\n <span className=\"flex items-start gap-2\">\n <span\n className={cn('mt-1.5 h-2 w-2 shrink-0 rounded-full', multiple && !selected && 'invisible')}\n style={{ backgroundColor: stringToColor(cluster.name) }}\n />\n <span className=\"min-w-0 space-y-1\">\n <span\n className={cn(\n 'block text-sm font-medium',\n multiple && !selected ? 'text-neutral3' : 'text-neutral5',\n )}\n >\n {cluster.name}\n </span>\n <span\n className={cn(\n 'line-clamp-2 block text-sm',\n multiple && !selected ? 'text-neutral1' : 'text-neutral2',\n )}\n >\n {cluster.description}\n </span>\n </span>\n </span>\n </button>\n </li>\n );\n })}\n </ul>\n </aside>\n );\n}\n\nexport function SignalTraceListTab({\n cluster,\n selectedTraceId,\n onTraceSelect,\n}: {\n cluster: SignalCluster;\n selectedTraceId: string | null;\n onTraceSelect: () => void;\n}) {\n return (\n <SignalTraceSummaryList\n traces={cluster.traceSummaries}\n selectedTraceId={selectedTraceId}\n onTraceSelect={onTraceSelect}\n />\n );\n}\n\ninterface SignalChartTabProps {\n signal: Signal;\n selectedClusterIds: string[];\n onClusterToggle: (clusterId: string) => void;\n}\n\nexport function SignalChartTab({ signal, selectedClusterIds, onClusterToggle }: SignalChartTabProps) {\n const selectedClusters = useMemo(\n () => signal.clusters.filter(cluster => selectedClusterIds.includes(cluster.id)),\n [signal.clusters, selectedClusterIds],\n );\n const chartData = useMemo(() => getSignalChartData(selectedClusters), [selectedClusters]);\n\n return (\n <div className=\"flex h-full min-w-0 gap-6\">\n <SignalClusterSidebar\n signal={signal}\n selectedClusterIds={selectedClusterIds}\n onClusterSelect={onClusterToggle}\n multiple\n ariaLabel=\"Chart cluster filters\"\n />\n <div className=\"min-h-0 min-w-0 flex-1 py-4\">\n <ScatterPlotChart\n data={chartData}\n xKey=\"duration\"\n yKey=\"spans\"\n nameKey=\"name\"\n colorKey=\"color\"\n height=\"100%\"\n className=\"h-full\"\n xLabel=\"Duration\"\n yLabel=\"Spans\"\n formatX={value => `${value}ms`}\n formatY={value => `${value} spans`}\n />\n </div>\n </div>\n );\n}\n\ninterface SignalClusterTabsProps {\n signal: Signal;\n selectedCluster: SignalCluster;\n selectedTraceId: string | null;\n selectedChartClusterIds: string[];\n activeTab: SignalTab;\n onActiveTabChange: (tab: SignalTab) => void;\n onClusterSelect: (clusterId: string) => void;\n onChartClusterToggle: (clusterId: string) => void;\n onTraceSelect: () => void;\n}\n\nexport function SignalClusterTabs({\n signal,\n selectedCluster,\n selectedTraceId,\n selectedChartClusterIds,\n activeTab,\n onActiveTabChange,\n onClusterSelect,\n onChartClusterToggle,\n onTraceSelect,\n}: SignalClusterTabsProps) {\n return (\n <Tabs<SignalTab>\n defaultTab=\"trace-list\"\n value={activeTab}\n onValueChange={onActiveTabChange}\n className=\"flex h-full min-h-0 flex-col overflow-hidden\"\n >\n <TabList variant=\"line\">\n <Tab value=\"trace-list\">Trace list</Tab>\n <Tab value=\"chart\">Chart</Tab>\n </TabList>\n <TabContent value=\"trace-list\" className=\"min-h-0 flex-1 overflow-hidden py-0\">\n <div className=\"flex h-full min-w-0 gap-6\">\n <SignalClusterSidebar\n signal={signal}\n selectedClusterIds={[selectedCluster.id]}\n onClusterSelect={onClusterSelect}\n />\n <div className=\"min-w-0 flex-1 overflow-hidden py-4\">\n <SignalTraceListTab\n cluster={selectedCluster}\n selectedTraceId={selectedTraceId}\n onTraceSelect={onTraceSelect}\n />\n </div>\n </div>\n </TabContent>\n <TabContent value=\"chart\" className=\"min-h-0 flex-1 overflow-hidden py-0\">\n <SignalChartTab\n signal={signal}\n selectedClusterIds={selectedChartClusterIds}\n onClusterToggle={onChartClusterToggle}\n />\n </TabContent>\n </Tabs>\n );\n}\n\nexport interface SignalDetailsPageProps {\n signalId?: string;\n selectedTraceId: string | null;\n tracePanel?: ReactNode;\n onTraceSelect: (signalId: string, traceId: string) => void;\n}\n\nexport function SignalDetailsPage({ signalId, selectedTraceId, tracePanel, onTraceSelect }: SignalDetailsPageProps) {\n const selectedSignal = useMemo(() => signals.find(signal => signal.id === signalId), [signalId]);\n const initialCluster =\n findClusterByTraceId(selectedSignal, selectedTraceId ?? undefined) ?? selectedSignal?.clusters[0];\n const [selectedClusterId, setSelectedClusterId] = useState<string | null>(() => initialCluster?.id ?? null);\n const [selectedChartClusterIds, setSelectedChartClusterIds] = useState<string[]>(\n () => selectedSignal?.clusters.map(cluster => cluster.id) ?? [],\n );\n const [activeTab, setActiveTab] = useState<SignalTab>('trace-list');\n const selectedCluster = selectedSignal?.clusters.find(cluster => cluster.id === selectedClusterId) ?? initialCluster;\n const { data: tracesData } = useTraces({});\n const resolvedTraceId = tracesData?.spans[0]?.traceId ?? null;\n\n const handleTraceSelect = () => {\n if (!selectedSignal || !resolvedTraceId) return;\n\n onTraceSelect(selectedSignal.id, resolvedTraceId);\n };\n\n const handleChartClusterToggle = (clusterId: string) => {\n setSelectedChartClusterIds(current =>\n current.includes(clusterId) ? current.filter(id => id !== clusterId) : [...current, clusterId],\n );\n };\n\n if (!selectedSignal || !selectedCluster) {\n return <SignalsLayout sidebar={null}>Signal not found</SignalsLayout>;\n }\n\n return (\n <SignalsLayout sidebar={null} tracePanel={activeTab === 'trace-list' ? tracePanel : undefined}>\n <section className=\"flex h-full min-w-0 flex-col gap-4\">\n <header className=\"space-y-1\">\n <h1 className=\"text-icon-xl font-semibold text-neutral6\">{selectedSignal.name}</h1>\n <p className=\"text-ui-sm text-neutral3\">Explore trace patterns by cluster.</p>\n </header>\n <div className=\"min-h-0 flex-1 overflow-hidden\">\n <SignalClusterTabs\n signal={selectedSignal}\n selectedCluster={selectedCluster}\n selectedTraceId={selectedTraceId}\n selectedChartClusterIds={selectedChartClusterIds}\n activeTab={activeTab}\n onActiveTabChange={setActiveTab}\n onClusterSelect={setSelectedClusterId}\n onChartClusterToggle={handleChartClusterToggle}\n onTraceSelect={handleTraceSelect}\n />\n </div>\n </section>\n </SignalsLayout>\n );\n}\n"],"names":["TopicTraceSummaryList","TopicTraceDetailsPanel","TopicsLayout","jsx","jsxs","cn","stringToColor","useMemo","getSignalChartData","ScatterPlotChart","Tabs","TabList","Tab","TabContent","signals","useState","useTraces"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAYA,MAAM,sBAAA,GAAyBA,gEAAA;AACxB,MAAM,uBAAA,GAA0BC;AACvC,MAAM,aAAA,GAAgBC,8CAAA;AAItB,SAAS,oBAAA,CAAqB,QAA4B,OAAA,EAA6B;AACrF,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,OAAA,EAAS,OAAO,MAAA;AAChC,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,CAAA,OAAA,KAAW,OAAA,CAAQ,cAAA,CAAe,IAAA,CAAK,CAAA,KAAA,KAAS,KAAA,CAAM,EAAA,KAAO,OAAO,CAAC,CAAA;AACnG;AAUO,SAAS,oBAAA,CAAqB;AAAA,EACnC,MAAA;AAAA,EACA,kBAAA;AAAA,EACA,eAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,SAAA,GAAY;AACd,CAAA,EAA8B;AAC5B,EAAA,uBACEC,cAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,4EAAA;AAAA,MACV,YAAA,EAAY,SAAA;AAAA,MAEZ,QAAA,kBAAAA,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,WAAA,EAAY,IAAA,EAAM,QAAA,GAAW,OAAA,GAAU,MAAA,EAClD,QAAA,EAAA,MAAA,CAAO,QAAA,CAAS,GAAA,CAAI,CAAA,OAAA,KAAW;AAC9B,QAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,QAAA,CAAS,OAAA,CAAQ,EAAE,CAAA;AACvD,QAAA,sCACG,IAAA,EAAA,EACC,QAAA,kBAAAA,cAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,IAAA,EAAM,WAAW,UAAA,GAAa,MAAA;AAAA,YAC9B,cAAA,EAAc,WAAW,QAAA,GAAW,MAAA;AAAA,YACpC,cAAA,EAAc,WAAW,MAAA,GAAY,QAAA;AAAA,YACrC,SAAA,EAAU,6NAAA;AAAA,YACV,OAAA,EAAS,MAAM,eAAA,CAAgB,OAAA,CAAQ,EAAE,CAAA;AAAA,YAEzC,QAAA,kBAAAC,eAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wBAAA,EACd,QAAA,EAAA;AAAA,8BAAAD,cAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,WAAWE,WAAA,CAAG,sCAAA,EAAwC,QAAA,IAAY,CAAC,YAAY,WAAW,CAAA;AAAA,kBAC1F,OAAO,EAAE,eAAA,EAAiBC,0BAAA,CAAc,OAAA,CAAQ,IAAI,CAAA;AAAE;AAAA,eACxD;AAAA,8BACAF,eAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mBAAA,EACd,QAAA,EAAA;AAAA,gCAAAD,cAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAWE,WAAA;AAAA,sBACT,2BAAA;AAAA,sBACA,QAAA,IAAY,CAAC,QAAA,GAAW,eAAA,GAAkB;AAAA,qBAC5C;AAAA,oBAEC,QAAA,EAAA,OAAA,CAAQ;AAAA;AAAA,iBACX;AAAA,gCACAF,cAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAWE,WAAA;AAAA,sBACT,4BAAA;AAAA,sBACA,QAAA,IAAY,CAAC,QAAA,GAAW,eAAA,GAAkB;AAAA,qBAC5C;AAAA,oBAEC,QAAA,EAAA,OAAA,CAAQ;AAAA;AAAA;AACX,eAAA,EACF;AAAA,aAAA,EACF;AAAA;AAAA,SACF,EAAA,EAjCO,QAAQ,EAkCjB,CAAA;AAAA,MAEJ,CAAC,CAAA,EACH;AAAA;AAAA,GACF;AAEJ;AAEO,SAAS,kBAAA,CAAmB;AAAA,EACjC,OAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,uBACEF,cAAA;AAAA,IAAC,sBAAA;AAAA,IAAA;AAAA,MACC,QAAQ,OAAA,CAAQ,cAAA;AAAA,MAChB,eAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;AAQO,SAAS,cAAA,CAAe,EAAE,MAAA,EAAQ,kBAAA,EAAoB,iBAAgB,EAAwB;AACnG,EAAA,MAAM,gBAAA,GAAmBI,aAAA;AAAA,IACvB,MAAM,OAAO,QAAA,CAAS,MAAA,CAAO,aAAW,kBAAA,CAAmB,QAAA,CAAS,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,IAC/E,CAAC,MAAA,CAAO,QAAA,EAAU,kBAAkB;AAAA,GACtC;AACA,EAAA,MAAM,SAAA,GAAYA,cAAQ,MAAMC,8CAAA,CAAmB,gBAAgB,CAAA,EAAG,CAAC,gBAAgB,CAAC,CAAA;AAExF,EAAA,uBACEJ,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EACb,QAAA,EAAA;AAAA,oBAAAD,cAAA;AAAA,MAAC,oBAAA;AAAA,MAAA;AAAA,QACC,MAAA;AAAA,QACA,kBAAA;AAAA,QACA,eAAA,EAAiB,eAAA;AAAA,QACjB,QAAA,EAAQ,IAAA;AAAA,QACR,SAAA,EAAU;AAAA;AAAA,KACZ;AAAA,oBACAA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EACb,QAAA,kBAAAA,cAAA;AAAA,MAACM,iCAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,SAAA;AAAA,QACN,IAAA,EAAK,UAAA;AAAA,QACL,IAAA,EAAK,OAAA;AAAA,QACL,OAAA,EAAQ,MAAA;AAAA,QACR,QAAA,EAAS,OAAA;AAAA,QACT,MAAA,EAAO,MAAA;AAAA,QACP,SAAA,EAAU,QAAA;AAAA,QACV,MAAA,EAAO,UAAA;AAAA,QACP,MAAA,EAAO,OAAA;AAAA,QACP,OAAA,EAAS,CAAA,KAAA,KAAS,CAAA,EAAG,KAAK,CAAA,EAAA,CAAA;AAAA,QAC1B,OAAA,EAAS,CAAA,KAAA,KAAS,CAAA,EAAG,KAAK,CAAA,MAAA;AAAA;AAAA,KAC5B,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAcO,SAAS,iBAAA,CAAkB;AAAA,EAChC,MAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,uBAAA;AAAA,EACA,SAAA;AAAA,EACA,iBAAA;AAAA,EACA,eAAA;AAAA,EACA,oBAAA;AAAA,EACA;AACF,CAAA,EAA2B;AACzB,EAAA,uBACEL,eAAA;AAAA,IAACM,YAAA;AAAA,IAAA;AAAA,MACC,UAAA,EAAW,YAAA;AAAA,MACX,KAAA,EAAO,SAAA;AAAA,MACP,aAAA,EAAe,iBAAA;AAAA,MACf,SAAA,EAAU,8CAAA;AAAA,MAEV,QAAA,EAAA;AAAA,wBAAAN,eAAA,CAACO,eAAA,EAAA,EAAQ,SAAQ,MAAA,EACf,QAAA,EAAA;AAAA,0BAAAR,cAAA,CAACS,WAAA,EAAA,EAAI,KAAA,EAAM,YAAA,EAAa,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,0BAClCT,cAAA,CAACS,WAAA,EAAA,EAAI,KAAA,EAAM,OAAA,EAAQ,QAAA,EAAA,OAAA,EAAK;AAAA,SAAA,EAC1B,CAAA;AAAA,wBACAT,cAAA,CAACU,0BAAW,KAAA,EAAM,YAAA,EAAa,WAAU,qCAAA,EACvC,QAAA,kBAAAT,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EACb,QAAA,EAAA;AAAA,0BAAAD,cAAA;AAAA,YAAC,oBAAA;AAAA,YAAA;AAAA,cACC,MAAA;AAAA,cACA,kBAAA,EAAoB,CAAC,eAAA,CAAgB,EAAE,CAAA;AAAA,cACvC;AAAA;AAAA,WACF;AAAA,0BACAA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EACb,QAAA,kBAAAA,cAAA;AAAA,YAAC,kBAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,eAAA;AAAA,cACT,eAAA;AAAA,cACA;AAAA;AAAA,WACF,EACF;AAAA,SAAA,EACF,CAAA,EACF,CAAA;AAAA,wBACAA,cAAA,CAACU,sBAAA,EAAA,EAAW,KAAA,EAAM,OAAA,EAAQ,WAAU,qCAAA,EAClC,QAAA,kBAAAV,cAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YACC,MAAA;AAAA,YACA,kBAAA,EAAoB,uBAAA;AAAA,YACpB,eAAA,EAAiB;AAAA;AAAA,SACnB,EACF;AAAA;AAAA;AAAA,GACF;AAEJ;AASO,SAAS,kBAAkB,EAAE,QAAA,EAAU,eAAA,EAAiB,UAAA,EAAY,eAAc,EAA2B;AAClH,EAAA,MAAM,cAAA,GAAiBI,aAAA,CAAQ,MAAMO,8BAAA,CAAQ,IAAA,CAAK,CAAA,MAAA,KAAU,MAAA,CAAO,EAAA,KAAO,QAAQ,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAC/F,EAAA,MAAM,cAAA,GACJ,qBAAqB,cAAA,EAAgB,eAAA,IAAmB,MAAS,CAAA,IAAK,cAAA,EAAgB,SAAS,CAAC,CAAA;AAClG,EAAA,MAAM,CAAC,mBAAmB,oBAAoB,CAAA,GAAIC,eAAwB,MAAM,cAAA,EAAgB,MAAM,IAAI,CAAA;AAC1G,EAAA,MAAM,CAAC,uBAAA,EAAyB,0BAA0B,CAAA,GAAIA,cAAA;AAAA,IAC5D,MAAM,gBAAgB,QAAA,CAAS,GAAA,CAAI,aAAW,OAAA,CAAQ,EAAE,KAAK;AAAC,GAChE;AACA,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAoB,YAAY,CAAA;AAClE,EAAA,MAAM,eAAA,GAAkB,gBAAgB,QAAA,CAAS,IAAA,CAAK,aAAW,OAAA,CAAQ,EAAA,KAAO,iBAAiB,CAAA,IAAK,cAAA;AACtG,EAAA,MAAM,EAAE,IAAA,EAAM,UAAA,EAAW,GAAIC,wCAAA,CAAU,EAAE,CAAA;AACzC,EAAA,MAAM,eAAA,GAAkB,UAAA,EAAY,KAAA,CAAM,CAAC,GAAG,OAAA,IAAW,IAAA;AAEzD,EAAA,MAAM,oBAAoB,MAAM;AAC9B,IAAA,IAAI,CAAC,cAAA,IAAkB,CAAC,eAAA,EAAiB;AAEzC,IAAA,aAAA,CAAc,cAAA,CAAe,IAAI,eAAe,CAAA;AAAA,EAClD,CAAA;AAEA,EAAA,MAAM,wBAAA,GAA2B,CAAC,SAAA,KAAsB;AACtD,IAAA,0BAAA;AAAA,MAA2B,CAAA,OAAA,KACzB,OAAA,CAAQ,QAAA,CAAS,SAAS,IAAI,OAAA,CAAQ,MAAA,CAAO,CAAA,EAAA,KAAM,EAAA,KAAO,SAAS,CAAA,GAAI,CAAC,GAAG,SAAS,SAAS;AAAA,KAC/F;AAAA,EACF,CAAA;AAEA,EAAA,IAAI,CAAC,cAAA,IAAkB,CAAC,eAAA,EAAiB;AACvC,IAAA,uBAAOb,cAAA,CAAC,aAAA,EAAA,EAAc,OAAA,EAAS,IAAA,EAAM,QAAA,EAAA,kBAAA,EAAgB,CAAA;AAAA,EACvD;AAEA,EAAA,uBACEA,cAAA,CAAC,aAAA,EAAA,EAAc,OAAA,EAAS,IAAA,EAAM,UAAA,EAAY,SAAA,KAAc,YAAA,GAAe,UAAA,GAAa,MAAA,EAClF,QAAA,kBAAAC,eAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,oCAAA,EACjB,QAAA,EAAA;AAAA,oBAAAA,eAAA,CAAC,QAAA,EAAA,EAAO,WAAU,WAAA,EAChB,QAAA,EAAA;AAAA,sBAAAD,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,0CAAA,EAA4C,QAAA,EAAA,cAAA,CAAe,IAAA,EAAK,CAAA;AAAA,sBAC9EA,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0BAAA,EAA2B,QAAA,EAAA,oCAAA,EAAkC;AAAA,KAAA,EAC5E,CAAA;AAAA,oBACAA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gCAAA,EACb,QAAA,kBAAAA,cAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,MAAA,EAAQ,cAAA;AAAA,QACR,eAAA;AAAA,QACA,eAAA;AAAA,QACA,uBAAA;AAAA,QACA,SAAA;AAAA,QACA,iBAAA,EAAmB,YAAA;AAAA,QACnB,eAAA,EAAiB,oBAAA;AAAA,QACjB,oBAAA,EAAsB,wBAAA;AAAA,QACtB,aAAA,EAAe;AAAA;AAAA,KACjB,EACF;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;;;;;;;;;"}
@@ -2,6 +2,7 @@ import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { useMemo, useState } from 'react';
3
3
  import '@mastra/react';
4
4
  import '@tanstack/react-query';
5
+ import '../../../toast-BKsfnapA.js';
5
6
  import { useTraces } from '../../../domains/traces/hooks/use-traces.es.js';
6
7
  import '../../../domains/traces/trace-filters.es.js';
7
8
  import { S as ScatterPlotChart } from '../../../scatter-plot-chart-B3hfFMKS.js';
@@ -1 +1 @@
1
- {"version":3,"file":"signal-details-page.es.js","sources":["../../../../src/ee/signals/components/signal-details-page.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { useTraces } from '../../../domains/traces/hooks';\nimport { ScatterPlotChart } from '../../../ds/components/ScatterPlotChart';\nimport { Tab, TabContent, TabList, Tabs } from '../../../ds/components/Tabs';\nimport { stringToColor } from '../../../lib/colors';\nimport { cn } from '../../../lib/utils';\nimport { TopicTraceDetailsPanel, TopicTraceSummaryList, TopicsLayout } from '../../topics';\nimport { getSignalChartData } from '../signals-chart-data';\nimport { signals } from '../signals-data';\nimport type { Signal, SignalCluster } from '../types';\n\nconst SignalTraceSummaryList = TopicTraceSummaryList;\nexport const SignalTraceDetailsPanel = TopicTraceDetailsPanel;\nconst SignalsLayout = TopicsLayout;\n\ntype SignalTab = 'trace-list' | 'chart';\n\nfunction findClusterByTraceId(signal: Signal | undefined, traceId: string | undefined) {\n if (!signal || !traceId) return undefined;\n return signal.clusters.find(cluster => cluster.traceSummaries.some(trace => trace.id === traceId));\n}\n\ninterface SignalClusterSidebarProps {\n signal: Signal;\n selectedClusterIds: string[];\n onClusterSelect: (clusterId: string) => void;\n multiple?: boolean;\n ariaLabel?: string;\n}\n\nexport function SignalClusterSidebar({\n signal,\n selectedClusterIds,\n onClusterSelect,\n multiple = false,\n ariaLabel = 'Signal clusters',\n}: SignalClusterSidebarProps) {\n return (\n <aside\n className=\"min-h-0 w-72 shrink-0 overflow-y-auto border-r border-border1/60 pr-4 py-4\"\n aria-label={ariaLabel}\n >\n <ul className=\"space-y-1\" role={multiple ? 'group' : undefined}>\n {signal.clusters.map(cluster => {\n const selected = selectedClusterIds.includes(cluster.id);\n return (\n <li key={cluster.id}>\n <button\n type=\"button\"\n role={multiple ? 'checkbox' : undefined}\n aria-checked={multiple ? selected : undefined}\n aria-pressed={multiple ? undefined : selected}\n className=\"group cursor-pointer w-full rounded-xl px-3 py-2 text-left transition-colors hover:bg-surface3 aria-pressed:bg-surface3 aria-checked:bg-surface3 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent1\"\n onClick={() => onClusterSelect(cluster.id)}\n >\n <span className=\"flex items-start gap-2\">\n <span\n className={cn('mt-1.5 h-2 w-2 shrink-0 rounded-full', multiple && !selected && 'invisible')}\n style={{ backgroundColor: stringToColor(cluster.name) }}\n />\n <span className=\"min-w-0 space-y-1\">\n <span\n className={cn(\n 'block text-sm font-medium',\n multiple && !selected ? 'text-neutral3' : 'text-neutral5',\n )}\n >\n {cluster.name}\n </span>\n <span\n className={cn(\n 'line-clamp-2 block text-sm',\n multiple && !selected ? 'text-neutral1' : 'text-neutral2',\n )}\n >\n {cluster.description}\n </span>\n </span>\n </span>\n </button>\n </li>\n );\n })}\n </ul>\n </aside>\n );\n}\n\nexport function SignalTraceListTab({\n cluster,\n selectedTraceId,\n onTraceSelect,\n}: {\n cluster: SignalCluster;\n selectedTraceId: string | null;\n onTraceSelect: () => void;\n}) {\n return (\n <SignalTraceSummaryList\n traces={cluster.traceSummaries}\n selectedTraceId={selectedTraceId}\n onTraceSelect={onTraceSelect}\n />\n );\n}\n\ninterface SignalChartTabProps {\n signal: Signal;\n selectedClusterIds: string[];\n onClusterToggle: (clusterId: string) => void;\n}\n\nexport function SignalChartTab({ signal, selectedClusterIds, onClusterToggle }: SignalChartTabProps) {\n const selectedClusters = useMemo(\n () => signal.clusters.filter(cluster => selectedClusterIds.includes(cluster.id)),\n [signal.clusters, selectedClusterIds],\n );\n const chartData = useMemo(() => getSignalChartData(selectedClusters), [selectedClusters]);\n\n return (\n <div className=\"flex h-full min-w-0 gap-6\">\n <SignalClusterSidebar\n signal={signal}\n selectedClusterIds={selectedClusterIds}\n onClusterSelect={onClusterToggle}\n multiple\n ariaLabel=\"Chart cluster filters\"\n />\n <div className=\"min-h-0 min-w-0 flex-1 py-4\">\n <ScatterPlotChart\n data={chartData}\n xKey=\"duration\"\n yKey=\"spans\"\n nameKey=\"name\"\n colorKey=\"color\"\n height=\"100%\"\n className=\"h-full\"\n xLabel=\"Duration\"\n yLabel=\"Spans\"\n formatX={value => `${value}ms`}\n formatY={value => `${value} spans`}\n />\n </div>\n </div>\n );\n}\n\ninterface SignalClusterTabsProps {\n signal: Signal;\n selectedCluster: SignalCluster;\n selectedTraceId: string | null;\n selectedChartClusterIds: string[];\n activeTab: SignalTab;\n onActiveTabChange: (tab: SignalTab) => void;\n onClusterSelect: (clusterId: string) => void;\n onChartClusterToggle: (clusterId: string) => void;\n onTraceSelect: () => void;\n}\n\nexport function SignalClusterTabs({\n signal,\n selectedCluster,\n selectedTraceId,\n selectedChartClusterIds,\n activeTab,\n onActiveTabChange,\n onClusterSelect,\n onChartClusterToggle,\n onTraceSelect,\n}: SignalClusterTabsProps) {\n return (\n <Tabs<SignalTab>\n defaultTab=\"trace-list\"\n value={activeTab}\n onValueChange={onActiveTabChange}\n className=\"flex h-full min-h-0 flex-col overflow-hidden\"\n >\n <TabList variant=\"line\">\n <Tab value=\"trace-list\">Trace list</Tab>\n <Tab value=\"chart\">Chart</Tab>\n </TabList>\n <TabContent value=\"trace-list\" className=\"min-h-0 flex-1 overflow-hidden py-0\">\n <div className=\"flex h-full min-w-0 gap-6\">\n <SignalClusterSidebar\n signal={signal}\n selectedClusterIds={[selectedCluster.id]}\n onClusterSelect={onClusterSelect}\n />\n <div className=\"min-w-0 flex-1 overflow-hidden py-4\">\n <SignalTraceListTab\n cluster={selectedCluster}\n selectedTraceId={selectedTraceId}\n onTraceSelect={onTraceSelect}\n />\n </div>\n </div>\n </TabContent>\n <TabContent value=\"chart\" className=\"min-h-0 flex-1 overflow-hidden py-0\">\n <SignalChartTab\n signal={signal}\n selectedClusterIds={selectedChartClusterIds}\n onClusterToggle={onChartClusterToggle}\n />\n </TabContent>\n </Tabs>\n );\n}\n\nexport interface SignalDetailsPageProps {\n signalId?: string;\n selectedTraceId: string | null;\n tracePanel?: ReactNode;\n onTraceSelect: (signalId: string, traceId: string) => void;\n}\n\nexport function SignalDetailsPage({ signalId, selectedTraceId, tracePanel, onTraceSelect }: SignalDetailsPageProps) {\n const selectedSignal = useMemo(() => signals.find(signal => signal.id === signalId), [signalId]);\n const initialCluster =\n findClusterByTraceId(selectedSignal, selectedTraceId ?? undefined) ?? selectedSignal?.clusters[0];\n const [selectedClusterId, setSelectedClusterId] = useState<string | null>(() => initialCluster?.id ?? null);\n const [selectedChartClusterIds, setSelectedChartClusterIds] = useState<string[]>(\n () => selectedSignal?.clusters.map(cluster => cluster.id) ?? [],\n );\n const [activeTab, setActiveTab] = useState<SignalTab>('trace-list');\n const selectedCluster = selectedSignal?.clusters.find(cluster => cluster.id === selectedClusterId) ?? initialCluster;\n const { data: tracesData } = useTraces({});\n const resolvedTraceId = tracesData?.spans[0]?.traceId ?? null;\n\n const handleTraceSelect = () => {\n if (!selectedSignal || !resolvedTraceId) return;\n\n onTraceSelect(selectedSignal.id, resolvedTraceId);\n };\n\n const handleChartClusterToggle = (clusterId: string) => {\n setSelectedChartClusterIds(current =>\n current.includes(clusterId) ? current.filter(id => id !== clusterId) : [...current, clusterId],\n );\n };\n\n if (!selectedSignal || !selectedCluster) {\n return <SignalsLayout sidebar={null}>Signal not found</SignalsLayout>;\n }\n\n return (\n <SignalsLayout sidebar={null} tracePanel={activeTab === 'trace-list' ? tracePanel : undefined}>\n <section className=\"flex h-full min-w-0 flex-col gap-4\">\n <header className=\"space-y-1\">\n <h1 className=\"text-icon-xl font-semibold text-neutral6\">{selectedSignal.name}</h1>\n <p className=\"text-ui-sm text-neutral3\">Explore trace patterns by cluster.</p>\n </header>\n <div className=\"min-h-0 flex-1 overflow-hidden\">\n <SignalClusterTabs\n signal={selectedSignal}\n selectedCluster={selectedCluster}\n selectedTraceId={selectedTraceId}\n selectedChartClusterIds={selectedChartClusterIds}\n activeTab={activeTab}\n onActiveTabChange={setActiveTab}\n onClusterSelect={setSelectedClusterId}\n onChartClusterToggle={handleChartClusterToggle}\n onTraceSelect={handleTraceSelect}\n />\n </div>\n </section>\n </SignalsLayout>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signal-details-page.es.js","sources":["../../../../src/ee/signals/components/signal-details-page.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { useTraces } from '../../../domains/traces/hooks';\nimport { ScatterPlotChart } from '../../../ds/components/ScatterPlotChart';\nimport { Tab, TabContent, TabList, Tabs } from '../../../ds/components/Tabs';\nimport { stringToColor } from '../../../lib/colors';\nimport { cn } from '../../../lib/utils';\nimport { TopicTraceDetailsPanel, TopicTraceSummaryList, TopicsLayout } from '../../topics';\nimport { getSignalChartData } from '../signals-chart-data';\nimport { signals } from '../signals-data';\nimport type { Signal, SignalCluster } from '../types';\n\nconst SignalTraceSummaryList = TopicTraceSummaryList;\nexport const SignalTraceDetailsPanel = TopicTraceDetailsPanel;\nconst SignalsLayout = TopicsLayout;\n\ntype SignalTab = 'trace-list' | 'chart';\n\nfunction findClusterByTraceId(signal: Signal | undefined, traceId: string | undefined) {\n if (!signal || !traceId) return undefined;\n return signal.clusters.find(cluster => cluster.traceSummaries.some(trace => trace.id === traceId));\n}\n\ninterface SignalClusterSidebarProps {\n signal: Signal;\n selectedClusterIds: string[];\n onClusterSelect: (clusterId: string) => void;\n multiple?: boolean;\n ariaLabel?: string;\n}\n\nexport function SignalClusterSidebar({\n signal,\n selectedClusterIds,\n onClusterSelect,\n multiple = false,\n ariaLabel = 'Signal clusters',\n}: SignalClusterSidebarProps) {\n return (\n <aside\n className=\"min-h-0 w-72 shrink-0 overflow-y-auto border-r border-border1/60 pr-4 py-4\"\n aria-label={ariaLabel}\n >\n <ul className=\"space-y-1\" role={multiple ? 'group' : undefined}>\n {signal.clusters.map(cluster => {\n const selected = selectedClusterIds.includes(cluster.id);\n return (\n <li key={cluster.id}>\n <button\n type=\"button\"\n role={multiple ? 'checkbox' : undefined}\n aria-checked={multiple ? selected : undefined}\n aria-pressed={multiple ? undefined : selected}\n className=\"group cursor-pointer w-full rounded-xl px-3 py-2 text-left transition-colors hover:bg-surface3 aria-pressed:bg-surface3 aria-checked:bg-surface3 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent1\"\n onClick={() => onClusterSelect(cluster.id)}\n >\n <span className=\"flex items-start gap-2\">\n <span\n className={cn('mt-1.5 h-2 w-2 shrink-0 rounded-full', multiple && !selected && 'invisible')}\n style={{ backgroundColor: stringToColor(cluster.name) }}\n />\n <span className=\"min-w-0 space-y-1\">\n <span\n className={cn(\n 'block text-sm font-medium',\n multiple && !selected ? 'text-neutral3' : 'text-neutral5',\n )}\n >\n {cluster.name}\n </span>\n <span\n className={cn(\n 'line-clamp-2 block text-sm',\n multiple && !selected ? 'text-neutral1' : 'text-neutral2',\n )}\n >\n {cluster.description}\n </span>\n </span>\n </span>\n </button>\n </li>\n );\n })}\n </ul>\n </aside>\n );\n}\n\nexport function SignalTraceListTab({\n cluster,\n selectedTraceId,\n onTraceSelect,\n}: {\n cluster: SignalCluster;\n selectedTraceId: string | null;\n onTraceSelect: () => void;\n}) {\n return (\n <SignalTraceSummaryList\n traces={cluster.traceSummaries}\n selectedTraceId={selectedTraceId}\n onTraceSelect={onTraceSelect}\n />\n );\n}\n\ninterface SignalChartTabProps {\n signal: Signal;\n selectedClusterIds: string[];\n onClusterToggle: (clusterId: string) => void;\n}\n\nexport function SignalChartTab({ signal, selectedClusterIds, onClusterToggle }: SignalChartTabProps) {\n const selectedClusters = useMemo(\n () => signal.clusters.filter(cluster => selectedClusterIds.includes(cluster.id)),\n [signal.clusters, selectedClusterIds],\n );\n const chartData = useMemo(() => getSignalChartData(selectedClusters), [selectedClusters]);\n\n return (\n <div className=\"flex h-full min-w-0 gap-6\">\n <SignalClusterSidebar\n signal={signal}\n selectedClusterIds={selectedClusterIds}\n onClusterSelect={onClusterToggle}\n multiple\n ariaLabel=\"Chart cluster filters\"\n />\n <div className=\"min-h-0 min-w-0 flex-1 py-4\">\n <ScatterPlotChart\n data={chartData}\n xKey=\"duration\"\n yKey=\"spans\"\n nameKey=\"name\"\n colorKey=\"color\"\n height=\"100%\"\n className=\"h-full\"\n xLabel=\"Duration\"\n yLabel=\"Spans\"\n formatX={value => `${value}ms`}\n formatY={value => `${value} spans`}\n />\n </div>\n </div>\n );\n}\n\ninterface SignalClusterTabsProps {\n signal: Signal;\n selectedCluster: SignalCluster;\n selectedTraceId: string | null;\n selectedChartClusterIds: string[];\n activeTab: SignalTab;\n onActiveTabChange: (tab: SignalTab) => void;\n onClusterSelect: (clusterId: string) => void;\n onChartClusterToggle: (clusterId: string) => void;\n onTraceSelect: () => void;\n}\n\nexport function SignalClusterTabs({\n signal,\n selectedCluster,\n selectedTraceId,\n selectedChartClusterIds,\n activeTab,\n onActiveTabChange,\n onClusterSelect,\n onChartClusterToggle,\n onTraceSelect,\n}: SignalClusterTabsProps) {\n return (\n <Tabs<SignalTab>\n defaultTab=\"trace-list\"\n value={activeTab}\n onValueChange={onActiveTabChange}\n className=\"flex h-full min-h-0 flex-col overflow-hidden\"\n >\n <TabList variant=\"line\">\n <Tab value=\"trace-list\">Trace list</Tab>\n <Tab value=\"chart\">Chart</Tab>\n </TabList>\n <TabContent value=\"trace-list\" className=\"min-h-0 flex-1 overflow-hidden py-0\">\n <div className=\"flex h-full min-w-0 gap-6\">\n <SignalClusterSidebar\n signal={signal}\n selectedClusterIds={[selectedCluster.id]}\n onClusterSelect={onClusterSelect}\n />\n <div className=\"min-w-0 flex-1 overflow-hidden py-4\">\n <SignalTraceListTab\n cluster={selectedCluster}\n selectedTraceId={selectedTraceId}\n onTraceSelect={onTraceSelect}\n />\n </div>\n </div>\n </TabContent>\n <TabContent value=\"chart\" className=\"min-h-0 flex-1 overflow-hidden py-0\">\n <SignalChartTab\n signal={signal}\n selectedClusterIds={selectedChartClusterIds}\n onClusterToggle={onChartClusterToggle}\n />\n </TabContent>\n </Tabs>\n );\n}\n\nexport interface SignalDetailsPageProps {\n signalId?: string;\n selectedTraceId: string | null;\n tracePanel?: ReactNode;\n onTraceSelect: (signalId: string, traceId: string) => void;\n}\n\nexport function SignalDetailsPage({ signalId, selectedTraceId, tracePanel, onTraceSelect }: SignalDetailsPageProps) {\n const selectedSignal = useMemo(() => signals.find(signal => signal.id === signalId), [signalId]);\n const initialCluster =\n findClusterByTraceId(selectedSignal, selectedTraceId ?? undefined) ?? selectedSignal?.clusters[0];\n const [selectedClusterId, setSelectedClusterId] = useState<string | null>(() => initialCluster?.id ?? null);\n const [selectedChartClusterIds, setSelectedChartClusterIds] = useState<string[]>(\n () => selectedSignal?.clusters.map(cluster => cluster.id) ?? [],\n );\n const [activeTab, setActiveTab] = useState<SignalTab>('trace-list');\n const selectedCluster = selectedSignal?.clusters.find(cluster => cluster.id === selectedClusterId) ?? initialCluster;\n const { data: tracesData } = useTraces({});\n const resolvedTraceId = tracesData?.spans[0]?.traceId ?? null;\n\n const handleTraceSelect = () => {\n if (!selectedSignal || !resolvedTraceId) return;\n\n onTraceSelect(selectedSignal.id, resolvedTraceId);\n };\n\n const handleChartClusterToggle = (clusterId: string) => {\n setSelectedChartClusterIds(current =>\n current.includes(clusterId) ? current.filter(id => id !== clusterId) : [...current, clusterId],\n );\n };\n\n if (!selectedSignal || !selectedCluster) {\n return <SignalsLayout sidebar={null}>Signal not found</SignalsLayout>;\n }\n\n return (\n <SignalsLayout sidebar={null} tracePanel={activeTab === 'trace-list' ? tracePanel : undefined}>\n <section className=\"flex h-full min-w-0 flex-col gap-4\">\n <header className=\"space-y-1\">\n <h1 className=\"text-icon-xl font-semibold text-neutral6\">{selectedSignal.name}</h1>\n <p className=\"text-ui-sm text-neutral3\">Explore trace patterns by cluster.</p>\n </header>\n <div className=\"min-h-0 flex-1 overflow-hidden\">\n <SignalClusterTabs\n signal={selectedSignal}\n selectedCluster={selectedCluster}\n selectedTraceId={selectedTraceId}\n selectedChartClusterIds={selectedChartClusterIds}\n activeTab={activeTab}\n onActiveTabChange={setActiveTab}\n onClusterSelect={setSelectedClusterId}\n onChartClusterToggle={handleChartClusterToggle}\n onTraceSelect={handleTraceSelect}\n />\n </div>\n </section>\n </SignalsLayout>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAYA,MAAM,sBAAA,GAAyB,qBAAA;AACxB,MAAM,uBAAA,GAA0B;AACvC,MAAM,aAAA,GAAgB,YAAA;AAItB,SAAS,oBAAA,CAAqB,QAA4B,OAAA,EAA6B;AACrF,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,OAAA,EAAS,OAAO,MAAA;AAChC,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,CAAA,OAAA,KAAW,OAAA,CAAQ,cAAA,CAAe,IAAA,CAAK,CAAA,KAAA,KAAS,KAAA,CAAM,EAAA,KAAO,OAAO,CAAC,CAAA;AACnG;AAUO,SAAS,oBAAA,CAAqB;AAAA,EACnC,MAAA;AAAA,EACA,kBAAA;AAAA,EACA,eAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,SAAA,GAAY;AACd,CAAA,EAA8B;AAC5B,EAAA,uBACE,GAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,4EAAA;AAAA,MACV,YAAA,EAAY,SAAA;AAAA,MAEZ,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,WAAA,EAAY,IAAA,EAAM,QAAA,GAAW,OAAA,GAAU,MAAA,EAClD,QAAA,EAAA,MAAA,CAAO,QAAA,CAAS,GAAA,CAAI,CAAA,OAAA,KAAW;AAC9B,QAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,QAAA,CAAS,OAAA,CAAQ,EAAE,CAAA;AACvD,QAAA,2BACG,IAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,IAAA,EAAM,WAAW,UAAA,GAAa,MAAA;AAAA,YAC9B,cAAA,EAAc,WAAW,QAAA,GAAW,MAAA;AAAA,YACpC,cAAA,EAAc,WAAW,MAAA,GAAY,QAAA;AAAA,YACrC,SAAA,EAAU,6NAAA;AAAA,YACV,OAAA,EAAS,MAAM,eAAA,CAAgB,OAAA,CAAQ,EAAE,CAAA;AAAA,YAEzC,QAAA,kBAAA,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wBAAA,EACd,QAAA,EAAA;AAAA,8BAAA,GAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,WAAW,EAAA,CAAG,sCAAA,EAAwC,QAAA,IAAY,CAAC,YAAY,WAAW,CAAA;AAAA,kBAC1F,OAAO,EAAE,eAAA,EAAiB,aAAA,CAAc,OAAA,CAAQ,IAAI,CAAA;AAAE;AAAA,eACxD;AAAA,8BACA,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mBAAA,EACd,QAAA,EAAA;AAAA,gCAAA,GAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAW,EAAA;AAAA,sBACT,2BAAA;AAAA,sBACA,QAAA,IAAY,CAAC,QAAA,GAAW,eAAA,GAAkB;AAAA,qBAC5C;AAAA,oBAEC,QAAA,EAAA,OAAA,CAAQ;AAAA;AAAA,iBACX;AAAA,gCACA,GAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAW,EAAA;AAAA,sBACT,4BAAA;AAAA,sBACA,QAAA,IAAY,CAAC,QAAA,GAAW,eAAA,GAAkB;AAAA,qBAC5C;AAAA,oBAEC,QAAA,EAAA,OAAA,CAAQ;AAAA;AAAA;AACX,eAAA,EACF;AAAA,aAAA,EACF;AAAA;AAAA,SACF,EAAA,EAjCO,QAAQ,EAkCjB,CAAA;AAAA,MAEJ,CAAC,CAAA,EACH;AAAA;AAAA,GACF;AAEJ;AAEO,SAAS,kBAAA,CAAmB;AAAA,EACjC,OAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,uBACE,GAAA;AAAA,IAAC,sBAAA;AAAA,IAAA;AAAA,MACC,QAAQ,OAAA,CAAQ,cAAA;AAAA,MAChB,eAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;AAQO,SAAS,cAAA,CAAe,EAAE,MAAA,EAAQ,kBAAA,EAAoB,iBAAgB,EAAwB;AACnG,EAAA,MAAM,gBAAA,GAAmB,OAAA;AAAA,IACvB,MAAM,OAAO,QAAA,CAAS,MAAA,CAAO,aAAW,kBAAA,CAAmB,QAAA,CAAS,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,IAC/E,CAAC,MAAA,CAAO,QAAA,EAAU,kBAAkB;AAAA,GACtC;AACA,EAAA,MAAM,SAAA,GAAY,QAAQ,MAAM,kBAAA,CAAmB,gBAAgB,CAAA,EAAG,CAAC,gBAAgB,CAAC,CAAA;AAExF,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EACb,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,oBAAA;AAAA,MAAA;AAAA,QACC,MAAA;AAAA,QACA,kBAAA;AAAA,QACA,eAAA,EAAiB,eAAA;AAAA,QACjB,QAAA,EAAQ,IAAA;AAAA,QACR,SAAA,EAAU;AAAA;AAAA,KACZ;AAAA,oBACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EACb,QAAA,kBAAA,GAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,SAAA;AAAA,QACN,IAAA,EAAK,UAAA;AAAA,QACL,IAAA,EAAK,OAAA;AAAA,QACL,OAAA,EAAQ,MAAA;AAAA,QACR,QAAA,EAAS,OAAA;AAAA,QACT,MAAA,EAAO,MAAA;AAAA,QACP,SAAA,EAAU,QAAA;AAAA,QACV,MAAA,EAAO,UAAA;AAAA,QACP,MAAA,EAAO,OAAA;AAAA,QACP,OAAA,EAAS,CAAA,KAAA,KAAS,CAAA,EAAG,KAAK,CAAA,EAAA,CAAA;AAAA,QAC1B,OAAA,EAAS,CAAA,KAAA,KAAS,CAAA,EAAG,KAAK,CAAA,MAAA;AAAA;AAAA,KAC5B,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAcO,SAAS,iBAAA,CAAkB;AAAA,EAChC,MAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,uBAAA;AAAA,EACA,SAAA;AAAA,EACA,iBAAA;AAAA,EACA,eAAA;AAAA,EACA,oBAAA;AAAA,EACA;AACF,CAAA,EAA2B;AACzB,EAAA,uBACE,IAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,UAAA,EAAW,YAAA;AAAA,MACX,KAAA,EAAO,SAAA;AAAA,MACP,aAAA,EAAe,iBAAA;AAAA,MACf,SAAA,EAAU,8CAAA;AAAA,MAEV,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,OAAA,EAAA,EAAQ,SAAQ,MAAA,EACf,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,GAAA,EAAA,EAAI,KAAA,EAAM,YAAA,EAAa,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,0BAClC,GAAA,CAAC,GAAA,EAAA,EAAI,KAAA,EAAM,OAAA,EAAQ,QAAA,EAAA,OAAA,EAAK;AAAA,SAAA,EAC1B,CAAA;AAAA,wBACA,GAAA,CAAC,cAAW,KAAA,EAAM,YAAA,EAAa,WAAU,qCAAA,EACvC,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,oBAAA;AAAA,YAAA;AAAA,cACC,MAAA;AAAA,cACA,kBAAA,EAAoB,CAAC,eAAA,CAAgB,EAAE,CAAA;AAAA,cACvC;AAAA;AAAA,WACF;AAAA,0BACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EACb,QAAA,kBAAA,GAAA;AAAA,YAAC,kBAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,eAAA;AAAA,cACT,eAAA;AAAA,cACA;AAAA;AAAA,WACF,EACF;AAAA,SAAA,EACF,CAAA,EACF,CAAA;AAAA,wBACA,GAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,OAAA,EAAQ,WAAU,qCAAA,EAClC,QAAA,kBAAA,GAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YACC,MAAA;AAAA,YACA,kBAAA,EAAoB,uBAAA;AAAA,YACpB,eAAA,EAAiB;AAAA;AAAA,SACnB,EACF;AAAA;AAAA;AAAA,GACF;AAEJ;AASO,SAAS,kBAAkB,EAAE,QAAA,EAAU,eAAA,EAAiB,UAAA,EAAY,eAAc,EAA2B;AAClH,EAAA,MAAM,cAAA,GAAiB,OAAA,CAAQ,MAAM,OAAA,CAAQ,IAAA,CAAK,CAAA,MAAA,KAAU,MAAA,CAAO,EAAA,KAAO,QAAQ,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAC/F,EAAA,MAAM,cAAA,GACJ,qBAAqB,cAAA,EAAgB,eAAA,IAAmB,MAAS,CAAA,IAAK,cAAA,EAAgB,SAAS,CAAC,CAAA;AAClG,EAAA,MAAM,CAAC,mBAAmB,oBAAoB,CAAA,GAAI,SAAwB,MAAM,cAAA,EAAgB,MAAM,IAAI,CAAA;AAC1G,EAAA,MAAM,CAAC,uBAAA,EAAyB,0BAA0B,CAAA,GAAI,QAAA;AAAA,IAC5D,MAAM,gBAAgB,QAAA,CAAS,GAAA,CAAI,aAAW,OAAA,CAAQ,EAAE,KAAK;AAAC,GAChE;AACA,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAoB,YAAY,CAAA;AAClE,EAAA,MAAM,eAAA,GAAkB,gBAAgB,QAAA,CAAS,IAAA,CAAK,aAAW,OAAA,CAAQ,EAAA,KAAO,iBAAiB,CAAA,IAAK,cAAA;AACtG,EAAA,MAAM,EAAE,IAAA,EAAM,UAAA,EAAW,GAAI,SAAA,CAAU,EAAE,CAAA;AACzC,EAAA,MAAM,eAAA,GAAkB,UAAA,EAAY,KAAA,CAAM,CAAC,GAAG,OAAA,IAAW,IAAA;AAEzD,EAAA,MAAM,oBAAoB,MAAM;AAC9B,IAAA,IAAI,CAAC,cAAA,IAAkB,CAAC,eAAA,EAAiB;AAEzC,IAAA,aAAA,CAAc,cAAA,CAAe,IAAI,eAAe,CAAA;AAAA,EAClD,CAAA;AAEA,EAAA,MAAM,wBAAA,GAA2B,CAAC,SAAA,KAAsB;AACtD,IAAA,0BAAA;AAAA,MAA2B,CAAA,OAAA,KACzB,OAAA,CAAQ,QAAA,CAAS,SAAS,IAAI,OAAA,CAAQ,MAAA,CAAO,CAAA,EAAA,KAAM,EAAA,KAAO,SAAS,CAAA,GAAI,CAAC,GAAG,SAAS,SAAS;AAAA,KAC/F;AAAA,EACF,CAAA;AAEA,EAAA,IAAI,CAAC,cAAA,IAAkB,CAAC,eAAA,EAAiB;AACvC,IAAA,uBAAO,GAAA,CAAC,aAAA,EAAA,EAAc,OAAA,EAAS,IAAA,EAAM,QAAA,EAAA,kBAAA,EAAgB,CAAA;AAAA,EACvD;AAEA,EAAA,uBACE,GAAA,CAAC,aAAA,EAAA,EAAc,OAAA,EAAS,IAAA,EAAM,UAAA,EAAY,SAAA,KAAc,YAAA,GAAe,UAAA,GAAa,MAAA,EAClF,QAAA,kBAAA,IAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,oCAAA,EACjB,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,QAAA,EAAA,EAAO,WAAU,WAAA,EAChB,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,0CAAA,EAA4C,QAAA,EAAA,cAAA,CAAe,IAAA,EAAK,CAAA;AAAA,sBAC9E,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0BAAA,EAA2B,QAAA,EAAA,oCAAA,EAAkC;AAAA,KAAA,EAC5E,CAAA;AAAA,oBACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gCAAA,EACb,QAAA,kBAAA,GAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,MAAA,EAAQ,cAAA;AAAA,QACR,eAAA;AAAA,QACA,eAAA;AAAA,QACA,uBAAA;AAAA,QACA,SAAA;AAAA,QACA,iBAAA,EAAmB,YAAA;AAAA,QACnB,eAAA,EAAiB,oBAAA;AAAA,QACjB,oBAAA,EAAsB,wBAAA;AAAA,QACtB,aAAA,EAAe;AAAA;AAAA,KACjB,EACF;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;;;;"}
@@ -2,6 +2,7 @@ import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { S as Skeleton } from './skeleton-CUjhGPAx.js';
3
3
  import { T as Txt } from './Txt-p33XTnu8.js';
4
4
  import { Icon } from './icons/Icon.es.js';
5
+ import 'lucide-react';
5
6
 
6
7
  const EntityHeader = ({ icon, title, isLoading, children }) => {
7
8
  return /* @__PURE__ */ jsx("div", { className: "p-3 pb-1 w-full overflow-x-hidden", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-between gap-x-4 gap-y-3", children: [
@@ -14,4 +15,4 @@ const EntityHeader = ({ icon, title, isLoading, children }) => {
14
15
  };
15
16
 
16
17
  export { EntityHeader as E };
17
- //# sourceMappingURL=entity-header-C8I47AfB.js.map
18
+ //# sourceMappingURL=entity-header-0O1DTUKq.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"entity-header-C8I47AfB.js","sources":["../src/ds/components/EntityHeader/entity-header.tsx"],"sourcesContent":["import { Skeleton } from '@/ds/components/Skeleton';\nimport { Txt } from '@/ds/components/Txt';\nimport { Icon } from '@/ds/icons';\n\nexport type EntityHeaderProps = {\n icon: React.ReactNode;\n title: string;\n isLoading?: boolean;\n children?: React.ReactNode;\n};\n\nexport const EntityHeader = ({ icon, title, isLoading, children }: EntityHeaderProps) => {\n return (\n <div className=\"p-3 pb-1 w-full overflow-x-hidden\">\n <div className=\"flex flex-wrap items-center justify-between gap-x-4 gap-y-3\">\n <div className=\"text-neutral6 flex min-w-0 items-center gap-2\">\n <span className=\"flex size-7 shrink-0 items-center justify-center\">\n <Icon size=\"lg\">{icon}</Icon>\n </span>\n\n {isLoading ? (\n <Skeleton className=\"h-3 w-32\" />\n ) : (\n <Txt variant=\"header-md\" as=\"h2\" className=\"truncate font-medium\">\n {title}\n </Txt>\n )}\n </div>\n {children}\n </div>\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;AAWO,MAAM,eAAe,CAAC,EAAE,MAAM,KAAA,EAAO,SAAA,EAAW,UAAS,KAAyB;AACvF,EAAA,2BACG,KAAA,EAAA,EAAI,SAAA,EAAU,qCACb,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6DAAA,EACb,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,+CAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,WAAU,kDAAA,EACd,QAAA,kBAAA,GAAA,CAAC,QAAK,IAAA,EAAK,IAAA,EAAM,gBAAK,CAAA,EACxB,CAAA;AAAA,MAEC,SAAA,mBACC,GAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,YAAW,CAAA,mBAE/B,GAAA,CAAC,GAAA,EAAA,EAAI,OAAA,EAAQ,WAAA,EAAY,EAAA,EAAG,IAAA,EAAK,SAAA,EAAU,wBACxC,QAAA,EAAA,KAAA,EACH;AAAA,KAAA,EAEJ,CAAA;AAAA,IACC;AAAA,GAAA,EACH,CAAA,EACF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"entity-header-0O1DTUKq.js","sources":["../src/ds/components/EntityHeader/entity-header.tsx"],"sourcesContent":["import { Skeleton } from '@/ds/components/Skeleton';\nimport { Txt } from '@/ds/components/Txt';\nimport { Icon } from '@/ds/icons';\n\nexport type EntityHeaderProps = {\n icon: React.ReactNode;\n title: string;\n isLoading?: boolean;\n children?: React.ReactNode;\n};\n\nexport const EntityHeader = ({ icon, title, isLoading, children }: EntityHeaderProps) => {\n return (\n <div className=\"p-3 pb-1 w-full overflow-x-hidden\">\n <div className=\"flex flex-wrap items-center justify-between gap-x-4 gap-y-3\">\n <div className=\"text-neutral6 flex min-w-0 items-center gap-2\">\n <span className=\"flex size-7 shrink-0 items-center justify-center\">\n <Icon size=\"lg\">{icon}</Icon>\n </span>\n\n {isLoading ? (\n <Skeleton className=\"h-3 w-32\" />\n ) : (\n <Txt variant=\"header-md\" as=\"h2\" className=\"truncate font-medium\">\n {title}\n </Txt>\n )}\n </div>\n {children}\n </div>\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;AAWO,MAAM,eAAe,CAAC,EAAE,MAAM,KAAA,EAAO,SAAA,EAAW,UAAS,KAAyB;AACvF,EAAA,2BACG,KAAA,EAAA,EAAI,SAAA,EAAU,qCACb,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6DAAA,EACb,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,+CAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,WAAU,kDAAA,EACd,QAAA,kBAAA,GAAA,CAAC,QAAK,IAAA,EAAK,IAAA,EAAM,gBAAK,CAAA,EACxB,CAAA;AAAA,MAEC,SAAA,mBACC,GAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,YAAW,CAAA,mBAE/B,GAAA,CAAC,GAAA,EAAA,EAAI,OAAA,EAAQ,WAAA,EAAY,EAAA,EAAG,IAAA,EAAK,SAAA,EAAU,wBACxC,QAAA,EAAA,KAAA,EACH;AAAA,KAAA,EAEJ,CAAA;AAAA,IACC;AAAA,GAAA,EACH,CAAA,EACF,CAAA;AAEJ;;;;"}
@@ -4,6 +4,7 @@ const jsxRuntime = require('react/jsx-runtime');
4
4
  const skeleton = require('./skeleton-D5zq7rhk.cjs');
5
5
  const Txt = require('./Txt-BT8_EkuZ.cjs');
6
6
  const icons_Icon = require('./icons/Icon.cjs.js');
7
+ require('lucide-react');
7
8
 
8
9
  const EntityHeader = ({ icon, title, isLoading, children }) => {
9
10
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-3 pb-1 w-full overflow-x-hidden", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center justify-between gap-x-4 gap-y-3", children: [
@@ -16,4 +17,4 @@ const EntityHeader = ({ icon, title, isLoading, children }) => {
16
17
  };
17
18
 
18
19
  exports.EntityHeader = EntityHeader;
19
- //# sourceMappingURL=entity-header-FXlDOgXp.cjs.map
20
+ //# sourceMappingURL=entity-header-DqFtpiMx.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"entity-header-FXlDOgXp.cjs","sources":["../src/ds/components/EntityHeader/entity-header.tsx"],"sourcesContent":["import { Skeleton } from '@/ds/components/Skeleton';\nimport { Txt } from '@/ds/components/Txt';\nimport { Icon } from '@/ds/icons';\n\nexport type EntityHeaderProps = {\n icon: React.ReactNode;\n title: string;\n isLoading?: boolean;\n children?: React.ReactNode;\n};\n\nexport const EntityHeader = ({ icon, title, isLoading, children }: EntityHeaderProps) => {\n return (\n <div className=\"p-3 pb-1 w-full overflow-x-hidden\">\n <div className=\"flex flex-wrap items-center justify-between gap-x-4 gap-y-3\">\n <div className=\"text-neutral6 flex min-w-0 items-center gap-2\">\n <span className=\"flex size-7 shrink-0 items-center justify-center\">\n <Icon size=\"lg\">{icon}</Icon>\n </span>\n\n {isLoading ? (\n <Skeleton className=\"h-3 w-32\" />\n ) : (\n <Txt variant=\"header-md\" as=\"h2\" className=\"truncate font-medium\">\n {title}\n </Txt>\n )}\n </div>\n {children}\n </div>\n </div>\n );\n};\n"],"names":["jsxs","jsx","Icon","Skeleton","Txt"],"mappings":";;;;;;;AAWO,MAAM,eAAe,CAAC,EAAE,MAAM,KAAA,EAAO,SAAA,EAAW,UAAS,KAAyB;AACvF,EAAA,sCACG,KAAA,EAAA,EAAI,SAAA,EAAU,qCACb,QAAA,kBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6DAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,+CAAA,EACb,QAAA,EAAA;AAAA,sBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,WAAU,kDAAA,EACd,QAAA,kBAAAA,cAAA,CAACC,mBAAK,IAAA,EAAK,IAAA,EAAM,gBAAK,CAAA,EACxB,CAAA;AAAA,MAEC,SAAA,mBACCD,cAAA,CAACE,iBAAA,EAAA,EAAS,SAAA,EAAU,YAAW,CAAA,mBAE/BF,cAAA,CAACG,OAAA,EAAA,EAAI,OAAA,EAAQ,WAAA,EAAY,EAAA,EAAG,IAAA,EAAK,SAAA,EAAU,wBACxC,QAAA,EAAA,KAAA,EACH;AAAA,KAAA,EAEJ,CAAA;AAAA,IACC;AAAA,GAAA,EACH,CAAA,EACF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"entity-header-DqFtpiMx.cjs","sources":["../src/ds/components/EntityHeader/entity-header.tsx"],"sourcesContent":["import { Skeleton } from '@/ds/components/Skeleton';\nimport { Txt } from '@/ds/components/Txt';\nimport { Icon } from '@/ds/icons';\n\nexport type EntityHeaderProps = {\n icon: React.ReactNode;\n title: string;\n isLoading?: boolean;\n children?: React.ReactNode;\n};\n\nexport const EntityHeader = ({ icon, title, isLoading, children }: EntityHeaderProps) => {\n return (\n <div className=\"p-3 pb-1 w-full overflow-x-hidden\">\n <div className=\"flex flex-wrap items-center justify-between gap-x-4 gap-y-3\">\n <div className=\"text-neutral6 flex min-w-0 items-center gap-2\">\n <span className=\"flex size-7 shrink-0 items-center justify-center\">\n <Icon size=\"lg\">{icon}</Icon>\n </span>\n\n {isLoading ? (\n <Skeleton className=\"h-3 w-32\" />\n ) : (\n <Txt variant=\"header-md\" as=\"h2\" className=\"truncate font-medium\">\n {title}\n </Txt>\n )}\n </div>\n {children}\n </div>\n </div>\n );\n};\n"],"names":["jsxs","jsx","Icon","Skeleton","Txt"],"mappings":";;;;;;;;AAWO,MAAM,eAAe,CAAC,EAAE,MAAM,KAAA,EAAO,SAAA,EAAW,UAAS,KAAyB;AACvF,EAAA,sCACG,KAAA,EAAA,EAAI,SAAA,EAAU,qCACb,QAAA,kBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6DAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,+CAAA,EACb,QAAA,EAAA;AAAA,sBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,WAAU,kDAAA,EACd,QAAA,kBAAAA,cAAA,CAACC,mBAAK,IAAA,EAAK,IAAA,EAAM,gBAAK,CAAA,EACxB,CAAA;AAAA,MAEC,SAAA,mBACCD,cAAA,CAACE,iBAAA,EAAA,EAAS,SAAA,EAAU,YAAW,CAAA,mBAE/BF,cAAA,CAACG,OAAA,EAAA,EAAI,OAAA,EAAQ,WAAA,EAAY,EAAA,EAAG,IAAA,EAAK,SAAA,EAAU,wBACxC,QAAA,EAAA,KAAA,EACH;AAAA,KAAA,EAEJ,CAAA;AAAA,IACC;AAAA,GAAA,EACH,CAAA,EACF,CAAA;AAEJ;;;;"}