sage-nexus-ui 1.8.1 → 1.8.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 (28) hide show
  1. package/dist/components/NexusChatWidget/AgentActivity/ActivityCard.mjs +1 -0
  2. package/dist/components/NexusChatWidget/AgentActivity/ActivityCards.mjs +1 -0
  3. package/dist/components/NexusChatWidget/AgentActivity/AgentActivity.mjs +1 -0
  4. package/dist/components/NexusChatWidget/AgentActivity/AgentActivityHeader.mjs +1 -0
  5. package/dist/components/NexusChatWidget/AgentActivity/SourceLink.mjs +1 -0
  6. package/dist/components/NexusChatWidget/AgentActivity/TokenSummary.mjs +1 -0
  7. package/dist/components/NexusChatWidget/AgentActivity/activityModel.mjs +1 -0
  8. package/dist/components/NexusChatWidget/ChatComponents/ChatAvatar.mjs +1 -0
  9. package/dist/components/NexusChatWidget/ChatComponents/EmptyState.mjs +1 -0
  10. package/dist/components/NexusChatWidget/ChatComponents/MarkdownContent.mjs +1 -0
  11. package/dist/components/NexusChatWidget/ChatComponents/MessageBubble.mjs +1 -0
  12. package/dist/components/NexusChatWidget/ChatComponents/MessageList.mjs +1 -0
  13. package/dist/components/NexusChatWidget/ChatComponents/SourceCitations.mjs +1 -0
  14. package/dist/components/NexusChatWidget/ChatComponents/StreamingBubble.mjs +1 -0
  15. package/dist/components/NexusChatWidget/ChatComponents/SuggestedPrompts.mjs +1 -0
  16. package/dist/components/NexusChatWidget/ChatComponents/TypingIndicator.mjs +1 -0
  17. package/dist/components/NexusChatWidget/ChatComponents/latestTraceLabel.mjs +1 -0
  18. package/dist/components/NexusChatWidget/FABButton.mjs +1 -0
  19. package/dist/components/NexusChatWidget/NexusChatWidget.mjs +1 -1
  20. package/dist/components/NexusChatWidget/WidgetParts/WidgetBody.mjs +1 -0
  21. package/dist/components/NexusChatWidget/WidgetParts/WidgetHeader.mjs +1 -0
  22. package/dist/components/NexusChatWidget/WidgetParts/WidgetInput.mjs +1 -0
  23. package/dist/generated/version.mjs +1 -1
  24. package/dist/index.d.ts +50 -49
  25. package/dist/index.mjs +1 -1
  26. package/package.json +1 -1
  27. package/dist/components/NexusChatWidget/AgentActivityWidget.mjs +0 -1
  28. package/dist/components/NexusChatWidget/ChatComponents.mjs +0 -1
@@ -0,0 +1 @@
1
+ import{jsx as t,jsxs as e}from"react/jsx-runtime";import{useState as r}from"react";import o from"./SourceLink.mjs";import{Body1 as i,Body2 as s,Caption as n}from"../../Typography.mjs";import{ButtonBase as l}from"../../ButtonBase.mjs";import{Chip as m}from"../../Chip.mjs";import{Code as a}from"../../Code.mjs";import{Stack as c}from"../../Stack.mjs";const p=({activity:p})=>{const[d,u]=r(!1),h=p.sources||[],f=d?h:h.slice(0,3),x=Math.max(0,h.length-3);return t(c,{direction:"row",spacing:1,children:e(c,{sx:{flex:1,minWidth:0},children:[e(c,{direction:"row",spacing:.75,sx:{alignItems:"center",flexWrap:"wrap"},children:[t(i,{children:p.title}),p.status&&t(m,{label:p.status,size:"small"})]}),p.text&&t(s,{children:p.text}),"kb"===p.type&&h.length>0&&e(c,{direction:"row",spacing:.5,sx:{flexWrap:"wrap",mt:.25},children:[f.map((e,r)=>t(o,{source:e.source},r)),x>0&&t(l,{onClick:()=>u(t=>!t),sx:{color:"primary.main"},children:d?"Show less":`+${x} more`})]}),"tool"===p.type&&p.toolName&&t(a,{sx:{display:"inline-flex",alignSelf:"flex-start"},children:p.toolName}),"model"===p.type&&(p.inputTokens||p.outputTokens)&&e(n,{children:[p.inputTokens," in / ",p.outputTokens," out"]})]})})};export{p as default};
@@ -0,0 +1 @@
1
+ import{jsx as t}from"react/jsx-runtime";import i from"./ActivityCard.mjs";import{Caption as r}from"../../Typography.mjs";import{Stack as o}from"../../Stack.mjs";const c=({activities:c,compact:e=!1})=>0===c.length?t(o,{direction:"row",spacing:1,sx:{alignItems:"center",justifyContent:"center",py:2,color:"text.secondary"},children:t(r,{children:"Waiting for agent activity…"})}):c.map((r,o)=>t(i,{activity:r,compact:e},o));export{c as default};
@@ -0,0 +1 @@
1
+ import{jsxs as t,jsx as e}from"react/jsx-runtime";import{useState as r,useMemo as o}from"react";import i from"./AgentActivityHeader.mjs";import a from"./ActivityCards.mjs";import m from"./TokenSummary.mjs";import{parseTraceEvents as n,calculateActivitySummary as s}from"./activityModel.mjs";import{Paper as p}from"../../Paper.mjs";import{Stack as c}from"../../Stack.mjs";const l=({isStreaming:l,traceEvents:d,defaultExpanded:u=!1,latency:f,activitySummary:k,compact:S=!1})=>{const[g,v]=r(u),y=o(()=>n(d),[d]),h=o(()=>s(y),[y]),x=k||h;return 0!==d.length||l?t(p,{variant:"outlined",children:[e(i,{isStreaming:l,thinkingSteps:h.thinkingSteps,kbSearches:h.kbSearches,toolCalls:h.toolCalls,isExpanded:g,setIsExpanded:v}),g&&t(c,{spacing:1.5,sx:{borderTop:1,borderColor:"divider",px:1.5,py:1.25,mt:1,maxHeight:256,overflowY:"auto"},children:[e(a,{activities:y,compact:S}),e(m,{isStreaming:l,inputTokens:x.inputTokens,outputTokens:x.outputTokens,latency:f})]})]}):null};export{l as default};
@@ -0,0 +1 @@
1
+ import{jsx as i,jsxs as e}from"react/jsx-runtime";import{Body1 as r}from"../../Typography.mjs";import{Box as o}from"../../Box.mjs";import{ButtonBase as n}from"../../ButtonBase.mjs";import{Chip as s}from"../../Chip.mjs";import{LoadingSpinnerNexus as t}from"../../LoadingSpinnerNexus.mjs";import{Stack as l}from"../../Stack.mjs";import m from"@mui/icons-material/CheckCircle";import a from"@mui/icons-material/ExpandMore";import c from"@mui/icons-material/ExpandLess";const p=({isStreaming:p,thinkingSteps:d,kbSearches:x,toolCalls:f,isExpanded:h,setIsExpanded:g})=>i(n,{onClick:()=>g(i=>!i),sx:{width:"100%"},children:e(l,{direction:"column",spacing:1,sx:{width:"100%"},children:[e(l,{direction:"row",sx:{justifyContent:"space-between"},children:[e(l,{direction:"row",spacing:1,sx:{alignItems:"center"},children:[p?i(t,{variant:"small"}):i(m,{sx:{color:"primary.main",fontSize:16}}),i(r,{children:p?"Agent is working…":"Response generated"})]}),i(o,h?{sx:{display:"inline-flex",color:"text.secondary"},children:i(c,{sx:{fontSize:14}})}:{sx:{display:"inline-flex",color:"text.secondary"},children:i(a,{sx:{fontSize:14}})})]}),e(l,{direction:"row",spacing:1,children:[d>0&&i(s,{size:"small",label:`${d} thinking`}),x>0&&i(s,{size:"small",label:`${x} KB`}),f>0&&i(s,{size:"small",label:`${f} tools`})]})]})});export{p as default};
@@ -0,0 +1 @@
1
+ import{jsxs as e,jsx as t}from"react/jsx-runtime";import n from"@mui/icons-material/OpenInNew";import{Code as i}from"../../Code.mjs";import{Link as o}from"../../Link.mjs";const r=({source:r})=>{const p=r.startsWith("http"),s=p?new URL(r).pathname.split("/").pop()||r:r.split("/").pop()||r;return p?e(o,{href:r,openInNewTab:!0,sx:{display:"inline-flex",alignItems:"center",gap:.5,px:.5,py:.125,borderRadius:.5,bgcolor:"action.hover",fontSize:"0.5rem",textDecoration:"none"},children:[t(n,{sx:{fontSize:7}}),s]}):t(i,{sx:{display:"inline-flex",alignItems:"center",gap:.5,fontSize:"0.5rem"},children:s})};export{r as default};
@@ -0,0 +1 @@
1
+ import{jsxs as t,jsx as o}from"react/jsx-runtime";import{Caption as r}from"../../Typography.mjs";import{Stack as e}from"../../Stack.mjs";const n=({isStreaming:n,inputTokens:i,outputTokens:s,latency:c})=>{if(n)return null;const l=i>0||s>0,d=Boolean(c);return l||d?t(e,{spacing:.5,children:[l&&o(e,{direction:"row",sx:{alignItems:"center",pt:1.5,borderTop:1,borderColor:"divider"},children:t(r,{children:[i," input / ",s," output tokens"]})}),d&&c&&t(r,{children:[c.totalSeconds,"s total",c.ttftSeconds&&` (${c.ttftSeconds}s to first token)`]})]}):null};export{n as default};
@@ -0,0 +1 @@
1
+ function t(t){switch(t.type){case"thinking":return{type:"thinking",title:`Step ${t.step||"?"}: Reasoning`,text:t.text,status:"complete"};case"kb":return{type:"kb",title:"searching"===t.status?"Searching Knowledge Base…":"Knowledge Base Results",text:t.query?`Query: "${t.query}"`:void 0,status:t.status,sources:t.sources};case"tool":return{type:"tool",title:t.toolName||"Tool Call",text:t.output,status:t.status,toolName:t.toolName};case"model":return{type:"model",title:"Model Invocation",inputTokens:t.inputTokens,outputTokens:t.outputTokens,status:"complete"};default:return null}}function e(e){return e.map(t).filter(Boolean)}function o(t){const e=t.filter(t=>"thinking"===t.type).length,o=t.filter(t=>"kb"===t.type).length,n=t.filter(t=>"tool"===t.type).length,s=t.filter(t=>"model"===t.type);return{thinkingSteps:e,kbSearches:o,toolCalls:n,inputTokens:s.reduce((t,e)=>t+(e.inputTokens||0),0),outputTokens:s.reduce((t,e)=>t+(e.outputTokens||0),0)}}export{o as calculateActivitySummary,e as parseTraceEvents};
@@ -0,0 +1 @@
1
+ import{jsx as r}from"react/jsx-runtime";import o from"@mui/icons-material/SmartToy";import{Avatar as m}from"../../Avatar.mjs";import{colours as i}from"../../../theme/tokens.mjs";const t={sm:14,md:20,lg:26},s=({size:s="sm",icon:e,sx:a})=>r(m,{size:s,sx:[{bgcolor:i.brilliantGreen},...Array.isArray(a)?a:a?[a]:[]],children:e??r(o,{sx:{fontSize:t[s],color:"#000"}})});export{s as default};
@@ -0,0 +1 @@
1
+ import{jsxs as e,jsx as t}from"react/jsx-runtime";import{Box as r}from"../../Box.mjs";import{Chip as i}from"../../Chip.mjs";import{H3 as l,Body1 as n}from"../../Typography.mjs";import o from"./ChatAvatar.mjs";import m from"./SuggestedPrompts.mjs";const s=({title:s,description:p,dataSources:a,prompts:c,avatarIcon:x,onSelect:f})=>e(r,{sx:{display:"flex",flex:1,flexDirection:"column",alignItems:"center",justifyContent:"center",gap:2,px:2,py:6},children:[t(o,{size:"lg",icon:x}),e(r,{sx:{textAlign:"center",display:"flex",flexDirection:"column",gap:.5},children:[t(l,{children:s}),t(n,{children:p})]}),a&&a.length>0&&t(r,{sx:{display:"flex",flexWrap:"wrap",alignItems:"center",justifyContent:"center",gap:.75,mt:1},children:a.map(e=>t(i,{label:e,size:"small"},e))}),e(r,{sx:{mt:2},children:[t(n,{sx:{mb:1},children:"Try asking:"}),t(m,{prompts:c,onSelect:f})]})]});export{s as default};
@@ -0,0 +1 @@
1
+ import{jsx as e}from"react/jsx-runtime";import{Box as o}from"../../Box.mjs";import{Paper as r}from"../../Paper.mjs";import{H4 as n,H3 as i,Body1 as l}from"../../Typography.mjs";import{Code as m}from"../../Code.mjs";import{Markdown as d}from"../../../node_modules/react-markdown/lib/index.mjs";import t from"../../../node_modules/remark-gfm/lib/index.mjs";const c=({content:c})=>e(d,{remarkPlugins:[t],components:{p:({children:o})=>e(l,{sx:{mb:1,"&:last-child":{mb:0}},children:o}),strong:({children:r})=>e(o,{component:"strong",sx:{fontWeight:700},children:r}),em:({children:r})=>e(o,{component:"em",sx:{fontStyle:"italic"},children:r}),ul:({children:r})=>e(o,{component:"ul",sx:{pl:2.5,my:2,display:"grid",gap:.5,listStyleType:"disc"},children:r}),ol:({children:r})=>e(o,{component:"ol",sx:{pl:2.5,my:2,display:"grid",gap:.5,listStyleType:"decimal"},children:r}),li:({children:r})=>e(o,{component:"li",children:r}),h1:({children:o})=>e(i,{sx:{mb:1,mt:.5},children:o}),h2:({children:o})=>e(n,{sx:{mb:.5,mt:.5},children:o}),h3:({children:o})=>e(n,{sx:{mb:.5,mt:.5},children:o}),code:({children:o})=>e(m,{children:o}),pre:({children:o})=>e(r,{component:"pre",variant:"outlined",sx:{my:2,p:1.5,overflowX:"auto",fontFamily:'"SFMono-Regular", "Consolas", "Liberation Mono", "Menlo", monospace',fontSize:"0.75rem",lineHeight:1.5,bgcolor:"action.hover"},children:o}),hr:()=>e(o,{component:"hr",sx:{my:3,border:0,borderTop:1,borderColor:"divider"}})},children:c});export{c as default};
@@ -0,0 +1 @@
1
+ import{jsxs as t,jsx as r}from"react/jsx-runtime";import e from"../AgentActivity/AgentActivity.mjs";import{Box as o}from"../../Box.mjs";import n from"./ChatAvatar.mjs";import a from"./MarkdownContent.mjs";const i=({message:i,avatarIcon:m,showActivity:c=!1})=>{const s="user"===i.role;return t(o,{sx:{display:"flex",gap:1,justifyContent:s?"flex-end":"flex-start"},children:[!s&&r(n,{icon:m,sx:{mt:.25}}),t(o,{sx:{display:"flex",flexDirection:"column",gap:1},children:[r(o,{sx:{borderRadius:s?"1rem 0.25rem 1rem 1rem":"0.25rem 1rem 1rem 1rem",px:1.75,py:1.25,bgcolor:s?"primary.main":"background.default",color:s?"primary.contrastText":"text.primary",border:s?"none":"1px solid",borderColor:"divider",whiteSpace:s?"pre-wrap":"normal",lineHeight:1.6},children:s?i.content:r(a,{content:i.content})}),c&&!s&&i.traceEvents&&i.traceEvents.length>0&&r(e,{isStreaming:!1,traceEvents:i.traceEvents,latency:i.latency,activitySummary:i.activitySummary,compact:!0})]})]})};export{i as default};
@@ -0,0 +1 @@
1
+ import{jsxs as t,jsx as e}from"react/jsx-runtime";import{useRef as o,useEffect as r}from"react";import{Box as a}from"../../Box.mjs";import i from"./MessageBubble.mjs";import s from"./StreamingBubble.mjs";import n from"./TypingIndicator.mjs";import{latestTraceLabel as m}from"./latestTraceLabel.mjs";const l=({messages:l,isTyping:c,streamingText:p,liveTraceEvents:f,onAbort:v,avatarIcon:g,showActivity:h=!1})=>{const u=o(null);r(()=>{u.current?.scrollIntoView({behavior:"smooth"})},[l,c,p]);const x=l.length>0&&"assistant"===l[l.length-1].role,b=c&&!x&&!!p,y=c&&!x&&!b;return t(a,{sx:{flex:1,minHeight:0,overflowY:"auto",display:"flex",flexDirection:"column",gap:1.5,px:2,py:1.5},children:[l.filter(t=>"user"===t.role||t.content).map(t=>e(i,{message:t,avatarIcon:g,showActivity:h},t.id)),b&&e(s,{text:p||"",traceEvents:f||[],avatarIcon:g,onAbort:v,showActivity:h}),y&&e(n,{avatarIcon:g,traceLabel:f&&f.length>0?m(f):void 0}),e(a,{ref:u})]})};export{l as default};
@@ -0,0 +1 @@
1
+ import{jsxs as r,jsx as e}from"react/jsx-runtime";import{Box as o}from"../../Box.mjs";import{Chip as m}from"../../Chip.mjs";import{Caption as p}from"../../Typography.mjs";const l=({sources:l})=>l.length?r(o,{sx:{display:"flex",flexWrap:"wrap",alignItems:"center",gap:.5,px:2,py:1,borderTop:1,borderColor:"divider"},children:[e(p,{sx:{mr:.5},children:"Sources:"}),l.map(r=>e(m,{label:r,size:"small"},r))]}):null;export{l as default};
@@ -0,0 +1 @@
1
+ import{jsxs as r,jsx as e}from"react/jsx-runtime";import t from"@mui/icons-material/StopCircle";import o from"../AgentActivity/AgentActivity.mjs";import{Box as i}from"../../Box.mjs";import{Stack as n}from"../../Stack.mjs";import{ButtonBase as a}from"../../ButtonBase.mjs";import{Caption as m}from"../../Typography.mjs";import s from"./ChatAvatar.mjs";import c from"./MarkdownContent.mjs";import{latestTraceLabel as l}from"./latestTraceLabel.mjs";const p=({text:p,traceEvents:d,avatarIcon:g,onAbort:f,showActivity:x=!1})=>r(n,{direction:"row",spacing:1,sx:{justifyContent:"flex-start"},children:[e(s,{icon:g,sx:{mt:.25}}),r(n,{spacing:1,children:[p?r(i,{sx:{borderRadius:" 0.25rem 1rem 1rem 1rem",border:"1px solid",borderColor:"primary.light",bgcolor:"background.default",color:"text.primary",px:1.75,py:1.25,lineHeight:1.6},children:[e(c,{content:p}),e(i,{sx:{display:"inline-block",height:16,bgcolor:"primary.main",verticalAlign:"text-bottom",animation:"pulse 1.2s ease-in-out infinite","@keyframes pulse":{"0%, 100%":{opacity:.35},"50%":{opacity:1}}}})]}):e(i,{sx:{borderRadius:"1rem 1rem 1rem 0.25rem",border:"1px solid",borderColor:"divider",bgcolor:"background.default",px:1.75,py:1.25},children:r(n,{direction:"row",spacing:1,sx:{alignItems:"center"},children:[e(n,{direction:"row",spacing:.5,children:[0,150,300].map(r=>e(i,{component:"span",sx:{bgcolor:"primary.main",animation:"bounce 1s ease-in-out infinite",animationDelay:`${r}ms`,"@keyframes bounce":{"0%, 80%, 100%":{opacity:.35,transform:"translateY(0)"},"40%":{opacity:1,transform:"translateY(-1px)"}}}},r))}),e(m,{children:d.length>0?l(d):"Analyzing data sources…"})]})}),x&&d.length>0&&e(o,{isStreaming:!0,traceEvents:d,defaultExpanded:!0}),f&&r(a,{onClick:f,sx:{display:"inline-flex",alignItems:"center",gap:.5,fontSize:"0.625rem",color:"text.secondary","&:hover":{color:"error.main"},borderRadius:.5,px:.5},children:[e(t,{sx:{fontSize:11}}),"Stop generating"]})]})]});export{p as default};
@@ -0,0 +1 @@
1
+ import{jsx as r}from"react/jsx-runtime";import{Stack as e}from"../../Stack.mjs";import{Chip as t}from"../../Chip.mjs";const o=({prompts:o,onSelect:i})=>r(e,{direction:"row",spacing:1,sx:{flexWrap:"wrap",gap:1,justifyContent:"center",alignItems:"center"},children:o.map(e=>r(t,{label:e,onClick:()=>i(e),size:"medium",sx:{cursor:"pointer"}},e))});export{o as default};
@@ -0,0 +1 @@
1
+ import{jsxs as r,jsx as o}from"react/jsx-runtime";import{Box as a}from"../../Box.mjs";import{Stack as i}from"../../Stack.mjs";import{Caption as e}from"../../Typography.mjs";import t from"./ChatAvatar.mjs";const n=({traceLabel:n,avatarIcon:m})=>r(i,{direction:"row",spacing:1,sx:{alignItems:"flex-start"},children:[o(t,{icon:m,sx:{mt:.25}}),o(a,{sx:{borderRadius:"1rem 1rem 1rem 0.25rem",border:"1px solid",borderColor:"divider",bgcolor:"background.default",px:1.75,py:1.25},children:r(i,{direction:"row",spacing:1,sx:{alignItems:"center"},children:[o(i,{direction:"row",spacing:.5,children:[0,150,300].map(r=>o(a,{component:"span",sx:{width:6,height:6,borderRadius:"50%",bgcolor:"primary.main",animation:"bounce 1s ease-in-out infinite",animationDelay:`${r}ms`,"@keyframes bounce":{"0%, 80%, 100%":{opacity:.35,transform:"translateY(0)"},"40%":{opacity:1,transform:"translateY(-1px)"}}}},r))}),o(e,{children:n||"Analyzing data sources…"})]})})]});export{n as default};
@@ -0,0 +1 @@
1
+ const e=e=>{const n=e[e.length-1];if(!n)return"Analyzing data sources…";switch(n.type){case"thinking":return`Step ${n.step||"?"}: Reasoning…`;case"kb":return"searching"===n.status?"Searching knowledge base…":"Processing KB results…";case"tool":return`Using ${n.toolName||"tool"}…`;case"model":return"Running model invocation…";default:return"Processing…"}};export{e as latestTraceLabel};
@@ -0,0 +1 @@
1
+ import{jsx as t}from"react/jsx-runtime";import{PrimaryButton as i}from"../PrimaryButton.mjs";import o from"@mui/icons-material/ChatBubbleOutlineOutlined";const r=({onOpen:r,fabLabel:e})=>t(i,{onClick:r,startIcon:t(o,{sx:{fontSize:18}}),"aria-label":e,sx:{position:"fixed",bottom:24,right:24,zIndex:50},children:e});export{r as FABButton};
@@ -1 +1 @@
1
- import{jsx as i,jsxs as o,Fragment as e}from"react/jsx-runtime";import r from"@mui/icons-material/Close";import t from"@mui/icons-material/OpenInFull";import n from"@mui/icons-material/Add";import l from"@mui/icons-material/ChatBubbleOutlineOutlined";import{MessageList as s,EmptyState as a,ChatInput as m}from"./ChatComponents.mjs";import{GlassPaper as d}from"../GlassPaper.mjs";import{Box as p}from"../Box.mjs";import{Stack as c}from"../Stack.mjs";import{IconButton as x}from"../IconButton.mjs";import{Body1 as f,Caption as h}from"../Typography.mjs";import{PrimaryButton as u}from"../PrimaryButton.mjs";import{Avatar as b}from"../Avatar.mjs";import{colours as g}from"../../theme/tokens.mjs";import v from"@mui/icons-material/SmartToy";function S({title:S,subtitle:y,fabLabel:C,avatarIcon:w,placeholder:k,emptyTitle:z,emptyDescription:T,dataSources:j,suggestedPrompts:I,isOpen:O,isTyping:A,messages:B,streamingText:D,liveTraceEvents:P,showActivity:E=!1,onOpen:F,onClose:H,onSend:G,onAbort:N,onNewChat:R,onExpandToFullPage:W,hideFab:L=!1}){if(L)return null;const Y=w??i(v,{sx:{fontSize:14,color:"#000"}});return o(e,{children:[O&&o(d,{elevation:8,sx:{borderRadius:3,position:"fixed",bottom:24,right:24,zIndex:50,display:"flex",flexDirection:"column",width:380,maxHeight:"min(520px, 80vh)",overflow:"hidden",p:0,"& > div":{display:"flex",flexDirection:"column",flex:1,minHeight:0}},children:[o(c,{direction:"row",spacing:1,sx:{backgroundColor:"background.paper",borderBottom:"1px solid",borderColor:"divider",px:2,py:1.5,flexShrink:0},children:[i(b,{size:"sm",sx:{bgcolor:g.brilliantGreen},children:Y}),o(c,{direction:"column",spacing:0,sx:{flex:1,minWidth:0},children:[i(f,{sx:{fontWeight:600,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:S}),y&&i(h,{children:y})]}),i(x,{title:"New chat",size:"small",onClick:R,children:i(n,{sx:{fontSize:16}})}),W&&i(x,{title:"Open full view",size:"small",onClick:W,children:i(t,{sx:{fontSize:14}})}),i(x,{title:"Close",size:"small",onClick:H,children:i(r,{sx:{fontSize:16}})})]}),i(p,{sx:{flex:1,minHeight:0,display:"flex",flexDirection:"column",overflowY:"auto"},children:B.length>0?i(s,{messages:B,isTyping:A,streamingText:D,liveTraceEvents:P,onAbort:N,avatarIcon:w,showActivity:E}):i(a,{title:z,description:T,dataSources:j,prompts:I.slice(0,4),avatarIcon:w,onSelect:G})}),i(p,{sx:{backgroundColor:"background.paper",borderTop:"1px solid",borderColor:"divider",p:1.5,flexShrink:0},children:i(m,{onSend:G,disabled:A,placeholder:k})})]}),!O&&i(u,{onClick:F,startIcon:i(l,{sx:{fontSize:18}}),"aria-label":C,sx:{position:"fixed",bottom:24,right:24,zIndex:50,borderRadius:"9999px",px:2,py:1.5,boxShadow:"0 4px 24px rgba(0,200,83,0.30)"},children:C})]})}export{S as NexusChatWidget};
1
+ import{jsx as e,jsxs as t,Fragment as o}from"react/jsx-runtime";import{FABButton as i}from"./FABButton.mjs";import{GlassPaper as n}from"../GlassPaper.mjs";import r from"./WidgetParts/WidgetBody.mjs";import s from"./WidgetParts/WidgetHeader.mjs";import a from"./WidgetParts/WidgetInput.mjs";import l from"@mui/icons-material/SmartToy";function m({title:m,subtitle:d,fabLabel:p,avatarIcon:c,placeholder:g,emptyTitle:f,emptyDescription:u,dataSources:x,suggestedPrompts:h,isOpen:v,isTyping:y,messages:b,streamingText:T,liveTraceEvents:w,showActivity:P=!1,onOpen:S,onClose:j,onSend:A,onAbort:W,onNewChat:I,onExpandToFullPage:C,hideFab:D=!1}){if(D)return null;const E=c??e(l,{sx:{fontSize:14,color:"#000"}});return t(o,{children:[v&&t(n,{elevation:8,sx:{boxShadow:e=>e.shadows[2],borderRadius:3,position:"fixed",bottom:24,right:24,zIndex:50,display:"flex",flexDirection:"column",width:380,maxHeight:"min(520px, 80vh)",overflow:"hidden",p:0,"& > div":{display:"flex",flexDirection:"column",flex:1,minHeight:0}},children:[e(s,{title:m,subtitle:d,onNewChat:I,onExpandToFullPage:C,onClose:j,resolvedAvatarIcon:E}),e(r,{avatarIcon:c,isTyping:y,liveTraceEvents:w,messages:b,onAbort:W,showActivity:P,streamingText:T,emptyTitle:f,emptyDescription:u,dataSources:x,suggestedPrompts:h,onSend:A}),e(a,{placeholder:g,isTyping:y,onSend:A})]}),!v&&e(i,{onOpen:S,fabLabel:p})]})}export{m as NexusChatWidget};
@@ -0,0 +1 @@
1
+ import{jsx as t}from"react/jsx-runtime";import{Box as i}from"../../Box.mjs";import"@mui/icons-material/SmartToy";import"@mui/material";import"../../../theme/tokens.mjs";import"../../Typography.mjs";import"../../Code.mjs";import"react";import"@mui/icons-material/CheckCircle";import"@mui/icons-material/ExpandMore";import"@mui/icons-material/ExpandLess";import"@mui/icons-material/OpenInNew";import"@mui/material/styles";import"@mui/icons-material/StopCircle";import e from"../ChatComponents/MessageList.mjs";import o from"../ChatComponents/EmptyState.mjs";const m=({avatarIcon:m,isTyping:r,liveTraceEvents:s,messages:a,onAbort:n,showActivity:p,streamingText:c,emptyTitle:l,emptyDescription:u,dataSources:g,suggestedPrompts:y,onSend:d})=>t(i,{sx:{flex:1,minHeight:0,display:"flex",flexDirection:"column",overflowY:"auto"},children:a.length>0?t(e,{messages:a,isTyping:r,streamingText:c,liveTraceEvents:s,onAbort:n,avatarIcon:m,showActivity:p}):t(o,{title:l,description:u,dataSources:g,prompts:y.slice(0,4),avatarIcon:m,onSelect:d})});export{m as default};
@@ -0,0 +1 @@
1
+ import{jsxs as o,jsx as i}from"react/jsx-runtime";import{Avatar as e}from"../../Avatar.mjs";import{Body1 as r,Caption as t}from"../../Typography.mjs";import{Stack as l}from"../../Stack.mjs";import{colours as n}from"../../../theme/tokens.mjs";import{IconButton as m}from"../../IconButton.mjs";import s from"@mui/icons-material/Add";import a from"@mui/icons-material/Close";import c from"@mui/icons-material/OpenInFull";const d=({onClose:d,onExpandToFullPage:p,onNewChat:f,resolvedAvatarIcon:h,subtitle:x,title:u})=>o(l,{direction:"row",spacing:1,sx:{backgroundColor:"background.paper",borderBottom:"1px solid",borderColor:"divider",px:2,py:1.5,flexShrink:0},children:[i(e,{size:"sm",sx:{bgcolor:n.brilliantGreen},children:h}),o(l,{direction:"column",spacing:0,sx:{flex:1,minWidth:0},children:[i(r,{sx:{fontWeight:600,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:u}),x&&i(t,{children:x})]}),i(m,{title:"New chat",size:"small",onClick:f,children:i(s,{sx:{fontSize:16}})}),p&&i(m,{title:"Open full view",size:"small",onClick:p,children:i(c,{sx:{fontSize:14}})}),i(m,{title:"Close",size:"small",onClick:d,children:i(a,{sx:{fontSize:16}})})]});export{d as default};
@@ -0,0 +1 @@
1
+ import{jsx as e,jsxs as r}from"react/jsx-runtime";import{useState as o}from"react";import{Box as i}from"../../Box.mjs";import{IconButton as t}from"../../IconButton.mjs";import{Paper as n}from"../../Paper.mjs";import{TextField as l}from"../../TextField.mjs";import a from"@mui/icons-material/Send";const d=({onSend:d,disabled:s=!1,placeholder:p="Ask about campaigns, competitors, performance…"})=>{const[m,c]=o("");return e(i,{component:"form",onSubmit:e=>{e.preventDefault();const r=m.trim();r&&!s&&(d(r),c(""))},sx:{display:"flex",alignItems:"flex-end",gap:1},children:r(n,{variant:"outlined",sx:{display:"flex",flex:1,alignItems:"flex-end",gap:1,px:1.5,py:.75,borderRadius:2},children:[e(l,{variant:"standard",fullWidth:!0,multiline:!0,maxRows:5,value:m,onChange:e=>c(e.target.value),onKeyDown:e=>{if("Enter"===e.key&&!e.shiftKey){e.preventDefault();const r=m.trim();if(!r||s)return;d(r),c("")}},placeholder:p,disabled:s,slotProps:{input:{disableUnderline:!0}},sx:{"& .MuiInputBase-input":{p:0,fontSize:"0.875rem",color:"text.primary",resize:"none","&::placeholder":{color:"text.disabled",opacity:1}}}}),e(t,{type:"submit",title:"Send message",disabled:!m.trim()||s,variant:"filled",size:"small",sx:{flexShrink:0},children:e(a,{sx:{fontSize:13}})})]})})},s=({placeholder:r,isTyping:o,onSend:t})=>e(i,{sx:{backgroundColor:"background.paper",borderTop:"1px solid",borderColor:"divider",p:1.5,flexShrink:0},children:e(d,{onSend:t,disabled:o,placeholder:r})});export{s as default};
@@ -1 +1 @@
1
- const o="1.8.1";export{o as SAGE_NEXUS_UI_VERSION};
1
+ const o="1.8.2";export{o as SAGE_NEXUS_UI_VERSION};
package/dist/index.d.ts CHANGED
@@ -554,6 +554,33 @@ declare function NexusLineChart({ sx, xAxis, grid, series, slots, children, ...p
554
554
  type NexusBarChartProps = Omit<BarChartProps, "colors">;
555
555
  declare function NexusBarChart(props: NexusBarChartProps): react_jsx_runtime.JSX.Element;
556
556
 
557
+ interface ActivitySummary {
558
+ thinkingSteps: number;
559
+ kbSearches: number;
560
+ toolCalls: number;
561
+ inputTokens: number;
562
+ outputTokens: number;
563
+ }
564
+ interface LatencyMetrics {
565
+ totalMs: number;
566
+ ttftMs: number | null;
567
+ totalSeconds: string;
568
+ ttftSeconds: string | null;
569
+ }
570
+ interface ChatMessage {
571
+ id: string;
572
+ role: "user" | "assistant";
573
+ content: string;
574
+ timestamp: Date;
575
+ sources?: string[];
576
+ isThinking?: boolean;
577
+ /** Trace events attached to a completed assistant message */
578
+ traceEvents?: TraceEvent[];
579
+ /** Activity summary produced after stream completion */
580
+ activitySummary?: ActivitySummary;
581
+ /** Latency metrics attached after stream completion */
582
+ latency?: LatencyMetrics;
583
+ }
557
584
  interface TraceEvent {
558
585
  type: "thinking" | "kb" | "tool" | "model";
559
586
  step?: number;
@@ -572,43 +599,15 @@ interface TraceEvent {
572
599
  outputTokens?: number;
573
600
  timestamp?: string;
574
601
  }
575
- interface ChatMessage {
576
- id: string;
577
- role: "user" | "assistant";
578
- content: string;
579
- timestamp: Date;
580
- sources?: string[];
581
- isThinking?: boolean;
582
- /** Trace events attached to a completed assistant message */
583
- traceEvents?: TraceEvent[];
584
- /** Activity summary produced after stream completion */
585
- activitySummary?: {
586
- thinkingSteps: number;
587
- kbSearches: number;
588
- toolCalls: number;
589
- inputTokens: number;
590
- outputTokens: number;
591
- };
592
- /** Latency metrics attached after stream completion */
593
- latency?: {
594
- totalMs: number;
595
- ttftMs: number | null;
596
- totalSeconds: string;
597
- ttftSeconds: string | null;
598
- };
599
- }
600
602
 
601
603
  interface NexusChatWidgetProps {
602
604
  title: string;
603
605
  subtitle?: string;
604
606
  fabLabel: string;
605
- /** Custom icon rendered inside the avatar. Defaults to SmartToyIcon. */
606
607
  avatarIcon?: React.ReactNode;
607
- /** Placeholder text for the chat input */
608
608
  placeholder?: string;
609
609
  emptyTitle: string;
610
610
  emptyDescription: string;
611
- /** Chip list of data sources shown in empty state */
612
611
  dataSources?: string[];
613
612
  suggestedPrompts: string[];
614
613
  isOpen: boolean;
@@ -616,34 +615,31 @@ interface NexusChatWidgetProps {
616
615
  messages: ChatMessage[];
617
616
  streamingText?: string;
618
617
  liveTraceEvents?: TraceEvent[];
619
- /** Show AgentActivityWidget inline with messages. Default false. */
620
618
  showActivity?: boolean;
621
619
  onOpen: () => void;
622
620
  onClose: () => void;
623
621
  onSend: (message: string) => void;
624
622
  onAbort?: () => void;
625
623
  onNewChat: () => void;
626
- /** If provided, the Expand to full view button is shown */
627
624
  onExpandToFullPage?: () => void;
628
- /** Pass true to hide the FAB (e.g. when on the full-page chat route).
625
+ /** hideFab - Pass true to hide the FAB (e.g. when on the full-page chat route).
629
626
  * Consumer computes this: hideFab={pathname === ROUTES.AGENT} */
630
627
  hideFab?: boolean;
631
628
  }
632
629
  declare function NexusChatWidget({ title, subtitle, fabLabel, avatarIcon, placeholder, emptyTitle, emptyDescription, dataSources, suggestedPrompts, isOpen, isTyping, messages, streamingText, liveTraceEvents, showActivity, onOpen, onClose, onSend, onAbort, onNewChat, onExpandToFullPage, hideFab, }: NexusChatWidgetProps): react_jsx_runtime.JSX.Element | null;
633
630
 
634
- declare function MarkdownContent({ content }: {
631
+ interface MarkdownContentProps {
635
632
  content: string;
636
- }): react_jsx_runtime.JSX.Element;
637
- declare function SuggestedPrompts({ prompts, onSelect, }: {
633
+ }
634
+ declare const MarkdownContent: ({ content }: MarkdownContentProps) => react_jsx_runtime.JSX.Element;
635
+
636
+ interface SuggestedPromptsProps {
638
637
  prompts: string[];
639
- onSelect: (p: string) => void;
640
- }): react_jsx_runtime.JSX.Element;
641
- declare function ChatInput({ onSend, disabled, placeholder, }: {
642
- onSend: (msg: string) => void;
643
- disabled?: boolean;
644
- placeholder?: string;
645
- }): react_jsx_runtime.JSX.Element;
646
- declare function MessageList({ messages, isTyping, streamingText, liveTraceEvents, onAbort, avatarIcon, showActivity, }: {
638
+ onSelect: (prompt: string) => void;
639
+ }
640
+ declare const SuggestedPrompts: ({ prompts, onSelect }: SuggestedPromptsProps) => react_jsx_runtime.JSX.Element;
641
+
642
+ interface MessageListProps {
647
643
  messages: ChatMessage[];
648
644
  isTyping: boolean;
649
645
  streamingText?: string;
@@ -651,18 +647,23 @@ declare function MessageList({ messages, isTyping, streamingText, liveTraceEvent
651
647
  onAbort?: () => void;
652
648
  avatarIcon?: React.ReactNode;
653
649
  showActivity?: boolean;
654
- }): react_jsx_runtime.JSX.Element;
655
- declare function EmptyState({ title, description, dataSources, prompts, avatarIcon, onSelect, }: {
650
+ }
651
+ declare const MessageList: ({ messages, isTyping, streamingText, liveTraceEvents, onAbort, avatarIcon, showActivity, }: MessageListProps) => react_jsx_runtime.JSX.Element;
652
+
653
+ interface EmptyStateProps {
656
654
  title: string;
657
655
  description: string;
658
656
  dataSources?: string[];
659
657
  prompts: string[];
660
658
  avatarIcon?: React.ReactNode;
661
- onSelect: (p: string) => void;
662
- }): react_jsx_runtime.JSX.Element;
663
- declare function SourceCitations({ sources }: {
659
+ onSelect: (prompt: string) => void;
660
+ }
661
+ declare const EmptyState: ({ title, description, dataSources, prompts, avatarIcon, onSelect, }: EmptyStateProps) => react_jsx_runtime.JSX.Element;
662
+
663
+ interface SourceCitationsProps {
664
664
  sources: string[];
665
- }): react_jsx_runtime.JSX.Element | null;
665
+ }
666
+ declare const SourceCitations: ({ sources }: SourceCitationsProps) => react_jsx_runtime.JSX.Element | null;
666
667
 
667
668
  declare const getFaviconUrls: (versioned?: boolean) => {
668
669
  svg: string;
@@ -786,5 +787,5 @@ declare const getGradientBorderStyles: (theme: Theme, options?: GradientBorderOp
786
787
  declare const leftPipe: SxProps$2<Theme>;
787
788
  declare const expandableText: (isExpanded: boolean) => SxProps$2<Theme>;
788
789
 
789
- export { AccordionGroup, AccordionGroupItem, AccordionSingle, ActionBar, ActionBarTitle, AiButton, AiCard, AiChip, AiGlassCard, AiGlassPaper, AiPaper, Alert, Avatar, Body1, Body2, Box, ButtonBase, Caption, Card, ChatInput, CheckboxGroup, Chip, Code, Collapse, Container, DateRangeFilter, DateRangePicker, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, Divider, EmptyState, FaviconLinks, GlassCard, GlassPaper, GlassPaperAsync, GreenWaveBackground, Grid, H1, H2, H3, H4, IconButton, Link, LoadingSpinnerNexus, LocationMultiSelect, LogoOptions, MarkdownContent, MessageList, MuiAppThemeProvider, NexusBarChart, NexusChatWidget, NexusDataGrid, NexusHome, NexusLineChart, NexusLogo, Paper, PrimaryButton, PrimaryButtonLink, RagChip, RagDot, SearchInput, SecondaryButton, SecondaryButtonLink, Select, SideBlade, Skeleton, SkillChip, SkipLink, SourceCitations, Stack, StatusBadge, StatusChip, SuggestedPrompts, Switch, Tab, Tabs, TextField, ThemeModeContext, ThemeModeProvider, ThemeToggle, Tooltip, colours, createSageTheme, expandableText, fontSageHeadline, fontSageText, fontSageUI, formatDate, getFaviconUrls, getFiscalPeriod, getGradientBorderStyles, getModeTokens, gradients, leftPipe, useThemeMode, useTokens };
790
+ export { AccordionGroup, AccordionGroupItem, AccordionSingle, ActionBar, ActionBarTitle, AiButton, AiCard, AiChip, AiGlassCard, AiGlassPaper, AiPaper, Alert, Avatar, Body1, Body2, Box, ButtonBase, Caption, Card, CheckboxGroup, Chip, Code, Collapse, Container, DateRangeFilter, DateRangePicker, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, Divider, EmptyState, FaviconLinks, GlassCard, GlassPaper, GlassPaperAsync, GreenWaveBackground, Grid, H1, H2, H3, H4, IconButton, Link, LoadingSpinnerNexus, LocationMultiSelect, LogoOptions, MarkdownContent, MessageList, MuiAppThemeProvider, NexusBarChart, NexusChatWidget, NexusDataGrid, NexusHome, NexusLineChart, NexusLogo, Paper, PrimaryButton, PrimaryButtonLink, RagChip, RagDot, SearchInput, SecondaryButton, SecondaryButtonLink, Select, SideBlade, Skeleton, SkillChip, SkipLink, SourceCitations, Stack, StatusBadge, StatusChip, SuggestedPrompts, Switch, Tab, Tabs, TextField, ThemeModeContext, ThemeModeProvider, ThemeToggle, Tooltip, colours, createSageTheme, expandableText, fontSageHeadline, fontSageText, fontSageUI, formatDate, getFaviconUrls, getFiscalPeriod, getGradientBorderStyles, getModeTokens, gradients, leftPipe, useThemeMode, useTokens };
790
791
  export type { AccordionGroupItemProps, AccordionGroupProps, AccordionSingleProps, AiButtonProps, AiCardProps, AiChipProps, AiGlassCardProps, AiGlassPaperProps, AiPaperProps, AvatarProps, AvatarSize, AvatarVariant, CardProps, CardTrend, ChatMessage, DateRangeFilterProps, DateRangePickerProps, DateRangePreset, DateRangeValue, GlassCardProps, GlassPaperAsyncProps, GlassPaperProps, GradientBorderOptions, GreenWaveBackgroundProps, IconButtonProps, IconButtonVariant, LinkProps, LoadingSpinnerNexusProps, ModeTokens, NexusBarChartProps, NexusChatWidgetProps, NexusLineChartProps, PrimaryButtonLinkProps, PrimaryButtonProps, SecondaryButtonLinkProps, SecondaryButtonProps, SelectOption, SelectProps, SideBladeProps, SkeletonProps, SkipLinkProps, StatusBadgeProps, StatusBadgeVariant, ThemeMode, TooltipProps, TraceEvent };
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- export{formatDate,getFiscalPeriod}from"./components/DateFormats.mjs";export{DateRangeFilter}from"./components/DateRangeFilter.mjs";export{DateRangePicker}from"./components/DateRangePicker.mjs";export{Alert}from"./components/Alert.mjs";export{Code}from"./components/Code.mjs";export{Container}from"./components/Container.mjs";export{Grid}from"./components/Grid.mjs";export{Link}from"./components/Link.mjs";export{Select}from"./components/Select.mjs";export{SkipLink}from"./components/SkipLink.mjs";export{StatusBadge}from"./components/StatusBadge.mjs";export{Switch}from"./components/Switch.mjs";export{ActionBarTitle,Body1,Body2,Caption,H1,H2,H3,H4}from"./components/Typography.mjs";export{ActionBar}from"./components/ActionBar.mjs";export{AccordionGroup,AccordionGroupItem}from"./components/AccordionGroup.mjs";export{AccordionSingle}from"./components/AccordionSingle.mjs";export{AiButton}from"./components/AiButton.mjs";export{AiChip}from"./components/AiChip.mjs";export{AiCard}from"./components/AiCard.mjs";export{AiGlassCard}from"./components/AiGlassCard.mjs";export{AiPaper}from"./components/AiPaper.mjs";export{AiGlassPaper}from"./components/AiGlassPaper.mjs";export{Box}from"./components/Box.mjs";export{Collapse}from"./components/Collapse.mjs";export{NexusDataGrid}from"./components/NexusDataGrid.mjs";export{ButtonBase}from"./components/ButtonBase.mjs";export{Card}from"./components/Card.mjs";export{CheckboxGroup}from"./components/CheckboxGroup.mjs";export{Chip}from"./components/Chip.mjs";export{Dialog,DialogActions,DialogContent,DialogContentText,DialogTitle}from"./components/Dialog.mjs";export{Divider}from"./components/Divider.mjs";export{GlassCard}from"./components/GlassCard.mjs";export{GlassPaper}from"./components/GlassPaper.mjs";export{GlassPaperAsync}from"./components/GlassPaperAsync.mjs";export{GreenWaveBackground}from"./components/GreenWaveBackground.mjs";export{IconButton}from"./components/IconButton.mjs";export{Avatar}from"./components/Avatar.mjs";export{LoadingSpinnerNexus}from"./components/LoadingSpinnerNexus.mjs";export{LocationMultiSelect}from"./components/LocationMultiSelect.mjs";export{LogoOptions}from"./components/LogoOptions/index.mjs";export{NexusHome}from"./components/NexusHome.mjs";export{default as NexusLogo}from"./components/NexusLogo.mjs";export{Paper}from"./components/Paper.mjs";export{PrimaryButton}from"./components/PrimaryButton.mjs";export{PrimaryButtonLink}from"./components/PrimaryButtonLink.mjs";export{SecondaryButton}from"./components/SecondaryButton.mjs";export{RagDot}from"./components/RagDot.mjs";export{RagChip}from"./components/RagChip.mjs";export{SecondaryButtonLink}from"./components/SecondaryButtonLink.mjs";export{SearchInput}from"./components/SearchInput.mjs";export{SideBlade}from"./components/SideBlade.mjs";export{Skeleton}from"./components/Skeleton.mjs";export{SkillChip}from"./components/SkillChip.mjs";export{Stack}from"./components/Stack.mjs";export{StatusChip}from"./components/StatusChip.mjs";export{Tab}from"./components/Tab.mjs";export{Tabs}from"./components/Tabs.mjs";export{TextField}from"./components/TextField.mjs";export{ThemeToggle}from"./components/ThemeToggle.mjs";export{Tooltip}from"./components/Tooltip.mjs";export{NexusLineChart}from"./components/NexusLineChart.mjs";export{NexusBarChart}from"./components/NexusBarChart.mjs";export{NexusChatWidget}from"./components/NexusChatWidget/NexusChatWidget.mjs";export{ChatInput,EmptyState,MarkdownContent,MessageList,SourceCitations,SuggestedPrompts}from"./components/NexusChatWidget/ChatComponents.mjs";export{default as nexusLogoNode}from"./assets/images/nexus-logo-node.svg.mjs";export{default as nexusLogoFavicon}from"./assets/images/nexus-logo-favicon.svg.mjs";export{default as nexusLogoIco}from"./assets/images/favicon.ico.mjs";export{getFaviconUrls}from"./assets/images/urls.mjs";export{FaviconLinks}from"./components/FaviconLinks.mjs";export{createSageTheme}from"./theme/sageTheme.mjs";export{colours,fontSageHeadline,fontSageText,fontSageUI,getModeTokens,gradients}from"./theme/tokens.mjs";export{useTokens}from"./theme/useTokens.mjs";export{default as MuiAppThemeProvider}from"./theme/MuiAppThemeProvider.mjs";export{ThemeModeContext,ThemeModeProvider,useThemeMode}from"./theme/ThemeContext.mjs";export{AlertTitle,MenuItem,alpha,useMediaQuery,useTheme}from"@mui/material";export{expandableText,getGradientBorderStyles,leftPipe}from"./theme/sxHelpers.mjs";
1
+ export{formatDate,getFiscalPeriod}from"./components/DateFormats.mjs";export{DateRangeFilter}from"./components/DateRangeFilter.mjs";export{DateRangePicker}from"./components/DateRangePicker.mjs";export{Alert}from"./components/Alert.mjs";export{Code}from"./components/Code.mjs";export{Container}from"./components/Container.mjs";export{Grid}from"./components/Grid.mjs";export{Link}from"./components/Link.mjs";export{Select}from"./components/Select.mjs";export{SkipLink}from"./components/SkipLink.mjs";export{StatusBadge}from"./components/StatusBadge.mjs";export{Switch}from"./components/Switch.mjs";export{ActionBarTitle,Body1,Body2,Caption,H1,H2,H3,H4}from"./components/Typography.mjs";export{ActionBar}from"./components/ActionBar.mjs";export{AccordionGroup,AccordionGroupItem}from"./components/AccordionGroup.mjs";export{AccordionSingle}from"./components/AccordionSingle.mjs";export{AiButton}from"./components/AiButton.mjs";export{AiChip}from"./components/AiChip.mjs";export{AiCard}from"./components/AiCard.mjs";export{AiGlassCard}from"./components/AiGlassCard.mjs";export{AiPaper}from"./components/AiPaper.mjs";export{AiGlassPaper}from"./components/AiGlassPaper.mjs";export{Box}from"./components/Box.mjs";export{Collapse}from"./components/Collapse.mjs";export{NexusDataGrid}from"./components/NexusDataGrid.mjs";export{ButtonBase}from"./components/ButtonBase.mjs";export{Card}from"./components/Card.mjs";export{CheckboxGroup}from"./components/CheckboxGroup.mjs";export{Chip}from"./components/Chip.mjs";export{Dialog,DialogActions,DialogContent,DialogContentText,DialogTitle}from"./components/Dialog.mjs";export{Divider}from"./components/Divider.mjs";export{GlassCard}from"./components/GlassCard.mjs";export{GlassPaper}from"./components/GlassPaper.mjs";export{GlassPaperAsync}from"./components/GlassPaperAsync.mjs";export{GreenWaveBackground}from"./components/GreenWaveBackground.mjs";export{IconButton}from"./components/IconButton.mjs";export{Avatar}from"./components/Avatar.mjs";export{LoadingSpinnerNexus}from"./components/LoadingSpinnerNexus.mjs";export{LocationMultiSelect}from"./components/LocationMultiSelect.mjs";export{LogoOptions}from"./components/LogoOptions/index.mjs";export{NexusHome}from"./components/NexusHome.mjs";export{default as NexusLogo}from"./components/NexusLogo.mjs";export{Paper}from"./components/Paper.mjs";export{PrimaryButton}from"./components/PrimaryButton.mjs";export{PrimaryButtonLink}from"./components/PrimaryButtonLink.mjs";export{SecondaryButton}from"./components/SecondaryButton.mjs";export{RagDot}from"./components/RagDot.mjs";export{RagChip}from"./components/RagChip.mjs";export{SecondaryButtonLink}from"./components/SecondaryButtonLink.mjs";export{SearchInput}from"./components/SearchInput.mjs";export{SideBlade}from"./components/SideBlade.mjs";export{Skeleton}from"./components/Skeleton.mjs";export{SkillChip}from"./components/SkillChip.mjs";export{Stack}from"./components/Stack.mjs";export{StatusChip}from"./components/StatusChip.mjs";export{Tab}from"./components/Tab.mjs";export{Tabs}from"./components/Tabs.mjs";export{TextField}from"./components/TextField.mjs";export{ThemeToggle}from"./components/ThemeToggle.mjs";export{Tooltip}from"./components/Tooltip.mjs";export{NexusLineChart}from"./components/NexusLineChart.mjs";export{NexusBarChart}from"./components/NexusBarChart.mjs";export{NexusChatWidget}from"./components/NexusChatWidget/NexusChatWidget.mjs";import"react/jsx-runtime";import"@mui/icons-material/ChatBubbleOutlineOutlined";import"@mui/icons-material/SmartToy";export{colours,fontSageHeadline,fontSageText,fontSageUI,getModeTokens,gradients}from"./theme/tokens.mjs";export{default as MarkdownContent}from"./components/NexusChatWidget/ChatComponents/MarkdownContent.mjs";import"react";import"@mui/icons-material/CheckCircle";import"@mui/icons-material/ExpandMore";import"@mui/icons-material/ExpandLess";import"@mui/icons-material/OpenInNew";import"@mui/icons-material/StopCircle";export{default as SuggestedPrompts}from"./components/NexusChatWidget/ChatComponents/SuggestedPrompts.mjs";export{default as MessageList}from"./components/NexusChatWidget/ChatComponents/MessageList.mjs";export{default as EmptyState}from"./components/NexusChatWidget/ChatComponents/EmptyState.mjs";export{default as SourceCitations}from"./components/NexusChatWidget/ChatComponents/SourceCitations.mjs";export{default as nexusLogoNode}from"./assets/images/nexus-logo-node.svg.mjs";export{default as nexusLogoFavicon}from"./assets/images/nexus-logo-favicon.svg.mjs";export{default as nexusLogoIco}from"./assets/images/favicon.ico.mjs";export{getFaviconUrls}from"./assets/images/urls.mjs";export{FaviconLinks}from"./components/FaviconLinks.mjs";export{createSageTheme}from"./theme/sageTheme.mjs";export{useTokens}from"./theme/useTokens.mjs";export{default as MuiAppThemeProvider}from"./theme/MuiAppThemeProvider.mjs";export{ThemeModeContext,ThemeModeProvider,useThemeMode}from"./theme/ThemeContext.mjs";export{AlertTitle,MenuItem,alpha,useMediaQuery,useTheme}from"@mui/material";export{expandableText,getGradientBorderStyles,leftPipe}from"./theme/sxHelpers.mjs";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sage-nexus-ui",
3
- "version": "1.8.1",
3
+ "version": "1.8.2",
4
4
  "description": "Nexus core components",
5
5
  "license": "ISC",
6
6
  "author": "emsmart-sage",
@@ -1 +0,0 @@
1
- import{jsxs as e,jsx as t}from"react/jsx-runtime";import{useState as o,useMemo as n}from"react";import i from"@mui/icons-material/MonitorHeart";import r from"@mui/icons-material/Search";import s from"@mui/icons-material/Build";import l from"@mui/icons-material/Memory";import a from"@mui/icons-material/CheckCircle";import c from"@mui/icons-material/ExpandMore";import m from"@mui/icons-material/ExpandLess";import p from"@mui/icons-material/Bolt";import u from"@mui/icons-material/AccessTime";import d from"@mui/icons-material/OpenInNew";import{Box as f}from"../Box.mjs";import{Stack as x}from"../Stack.mjs";import{Paper as g}from"../Paper.mjs";import{ButtonBase as h}from"../ButtonBase.mjs";import{Caption as y,Body2 as k}from"../Typography.mjs";import{Code as S}from"../Code.mjs";import{Link as b}from"../Link.mjs";import{LoadingSpinnerNexus as T}from"../LoadingSpinnerNexus.mjs";function w(e){switch(e.type){case"thinking":return{type:"thinking",title:`Step ${e.step||"?"}: Reasoning`,text:e.text,status:"complete"};case"kb":return{type:"kb",title:"searching"===e.status?"Searching Knowledge Base…":"Knowledge Base Results",text:e.query?`Query: "${e.query}"`:void 0,status:e.status,sources:e.sources};case"tool":return{type:"tool",title:e.toolName||"Tool Call",text:e.output,status:e.status,toolName:e.toolName};case"model":return{type:"model",title:"Model Invocation",inputTokens:e.inputTokens,outputTokens:e.outputTokens,status:"complete"};default:return null}}const z={thinking:i,kb:r,tool:s,model:l},v={thinking:{color:"#7C3AED"},kb:{color:"#0B63CE"},tool:{color:"#D97706"},model:{color:"#0F766E"}};function C({isStreaming:d,traceEvents:k,defaultExpanded:S=!1,latency:b,activitySummary:z,compact:v=!1}){const[C,B]=o(S),E=n(()=>k.map(w).filter(Boolean),[k]),N=E.filter(e=>"thinking"===e.type).length,R=E.filter(e=>"kb"===e.type).length,W=E.filter(e=>"tool"===e.type).length,M=E.filter(e=>"model"===e.type),L=M.reduce((e,t)=>e+(t.inputTokens||0),0),$=M.reduce((e,t)=>e+(t.outputTokens||0),0),A=z||{inputTokens:L,outputTokens:$};return 0!==k.length||d?e(g,{variant:"outlined",sx:{borderColor:d?"rgba(0, 169, 92, 0.30)":"divider",bgcolor:d?"rgba(0, 169, 92, 0.03)":"background.paper"},children:[e(h,{onClick:()=>B(e=>!e),sx:{width:"100%",display:"flex",alignItems:"center",gap:1,px:1.5,py:1,justifyContent:"flex-start"},children:[d?t(T,{variant:"small"}):t(f,{sx:{display:"inline-flex",color:"primary.main"},children:t(a,{sx:{fontSize:14}})}),t(y,{sx:{fontWeight:600,fontSize:v?"0.6875rem":"0.75rem"},children:d?"Agent is working…":"Response generated"}),e(x,{direction:"row",spacing:.75,sx:{alignItems:"center",ml:"auto",mr:.5},children:[N>0&&t(I,{icon:i,count:N,label:"thinking"}),R>0&&t(I,{icon:r,count:R,label:"KB"}),W>0&&t(I,{icon:s,count:W,label:"tools"})]}),t(f,C?{sx:{display:"inline-flex",color:"text.secondary"},children:t(m,{sx:{fontSize:14}})}:{sx:{display:"inline-flex",color:"text.secondary"},children:t(c,{sx:{fontSize:14}})})]}),C&&e(x,{spacing:1.5,sx:{borderTop:1,borderColor:"divider",px:1.5,py:1.25,maxHeight:256,overflowY:"auto"},children:[0===E.length?e(x,{direction:"row",spacing:1,sx:{alignItems:"center",justifyContent:"center",py:2,color:"text.secondary"},children:[t(p,{sx:{fontSize:16}}),t(y,{children:"Waiting for agent activity…"})]}):E.map((e,o)=>t(j,{activity:e,compact:v},o)),!d&&(A.inputTokens>0||A.outputTokens>0)&&e(x,{direction:"row",spacing:.75,sx:{alignItems:"center",pt:1.5,borderTop:1,borderColor:"divider",color:"text.secondary"},children:[t(l,{sx:{fontSize:11}}),e(y,{children:[A.inputTokens," input / ",A.outputTokens," output tokens"]})]}),!d&&b&&e(x,{direction:"row",spacing:.75,sx:{alignItems:"center",color:"text.secondary"},children:[t(u,{sx:{fontSize:11}}),e(y,{children:[b.totalSeconds,"s total",b.ttftSeconds&&` (${b.ttftSeconds}s to first token)`]})]})]})]}):null}function I({icon:o,count:n,label:i}){return e(f,{component:"span",sx:{display:"inline-flex",alignItems:"center",gap:.5,px:.75,py:.25,borderRadius:999,bgcolor:"action.hover",color:"text.secondary",fontSize:"0.5625rem"},children:[t(o,{sx:{fontSize:9}}),n," ",i]})}function j({activity:n,compact:i=!1}){const[r,s]=o(!1),l=z[n.type]||p,a=v[n.type]||{color:"text.secondary"},c=n.sources||[],m=r?c:c.slice(0,3),u=Math.max(0,c.length-3);return e(x,{direction:"row",spacing:1,sx:{py:.5},children:[t(f,{sx:{mt:.25,flexShrink:0,...a},children:t(l,{sx:{fontSize:i?12:14}})}),e(x,{spacing:.5,sx:{flex:1,minWidth:0},children:[e(x,{direction:"row",spacing:.75,sx:{alignItems:"center",flexWrap:"wrap"},children:[t(y,{sx:{fontWeight:600,fontSize:i?"0.625rem":"0.6875rem"},children:n.title}),n.status&&t(f,{component:"span",sx:{px:.75,py:.125,borderRadius:999,fontSize:"0.5rem",bgcolor:"complete"===n.status||"invoking"===n.status?"rgba(0, 169, 92, 0.10)":"searching"===n.status?"rgba(11, 99, 206, 0.10)":"action.hover",color:"complete"===n.status||"invoking"===n.status?"primary.main":"searching"===n.status?"#0B63CE":"text.secondary"},children:n.status})]}),n.text&&t(k,{sx:{fontSize:i?"0.5625rem":"0.625rem",lineHeight:1.5},children:n.text}),"kb"===n.type&&c.length>0&&e(x,{direction:"row",spacing:.5,sx:{flexWrap:"wrap",mt:.25},children:[m.map((e,o)=>t(B,{source:e.source},o)),u>0&&t(h,{onClick:()=>s(e=>!e),sx:{color:"primary.main",fontSize:"0.5rem"},children:r?"Show less":`+${u} more`})]}),"tool"===n.type&&n.toolName&&t(S,{sx:{display:"inline-flex",alignSelf:"flex-start",fontSize:"0.5rem"},children:n.toolName}),"model"===n.type&&(n.inputTokens||n.outputTokens)&&e(y,{sx:{fontSize:"0.5625rem"},children:[n.inputTokens," in / ",n.outputTokens," out"]})]})]})}function B({source:o}){const n=o.startsWith("http"),i=n?new URL(o).pathname.split("/").pop()||o:o.split("/").pop()||o;return n?e(b,{href:o,openInNewTab:!0,sx:{display:"inline-flex",alignItems:"center",gap:.5,px:.5,py:.125,borderRadius:.5,bgcolor:"action.hover",fontSize:"0.5rem",textDecoration:"none"},children:[t(d,{sx:{fontSize:7}}),i]}):t(S,{sx:{display:"inline-flex",alignItems:"center",gap:.5,fontSize:"0.5rem"},children:i})}export{C as default};
@@ -1 +0,0 @@
1
- import{jsx as e,jsxs as r}from"react/jsx-runtime";import{useState as n,useRef as t,useEffect as i}from"react";import o from"@mui/icons-material/SmartToy";import a from"@mui/icons-material/Send";import l from"@mui/icons-material/StopCircle";import s from"./AgentActivityWidget.mjs";import{Box as c}from"../Box.mjs";import{Stack as m}from"../Stack.mjs";import{Paper as d}from"../Paper.mjs";import{ButtonBase as p}from"../ButtonBase.mjs";import{IconButton as u}from"../IconButton.mjs";import{TextField as h}from"../TextField.mjs";import{Chip as x}from"../Chip.mjs";import{Avatar as f}from"../Avatar.mjs";import{H3 as g,Body1 as y,H4 as b,Caption as v}from"../Typography.mjs";import{Code as S}from"../Code.mjs";import{colours as w}from"../../theme/tokens.mjs";import{Markdown as k}from"../../node_modules/react-markdown/lib/index.mjs";import I from"../../node_modules/remark-gfm/lib/index.mjs";const j={sm:14,md:20,lg:26};function A({size:r="sm",icon:n,sx:t}){return e(f,{size:r,sx:[{bgcolor:w.brilliantGreen},...Array.isArray(t)?t:t?[t]:[]],children:n??e(o,{sx:{fontSize:j[r],color:"#000"}})})}function C({content:r}){return e(k,{remarkPlugins:[I],components:{p:({children:r})=>e(y,{sx:{mb:1,"&:last-child":{mb:0}},children:r}),strong:({children:r})=>e(c,{component:"strong",sx:{fontWeight:700},children:r}),em:({children:r})=>e(c,{component:"em",sx:{fontStyle:"italic"},children:r}),ul:({children:r})=>e(c,{component:"ul",sx:{pl:2.5,my:2,display:"grid",gap:.5,listStyleType:"disc"},children:r}),ol:({children:r})=>e(c,{component:"ol",sx:{pl:2.5,my:2,display:"grid",gap:.5,listStyleType:"decimal"},children:r}),li:({children:r})=>e(c,{component:"li",children:r}),h1:({children:r})=>e(g,{sx:{mb:1,mt:.5},children:r}),h2:({children:r})=>e(b,{sx:{mb:.5,mt:.5},children:r}),h3:({children:r})=>e(b,{sx:{mb:.5,mt:.5},children:r}),code:({children:r})=>e(S,{children:r}),pre:({children:r})=>e(d,{component:"pre",variant:"outlined",sx:{my:2,p:1.5,overflowX:"auto",fontFamily:'"SFMono-Regular", "Consolas", "Liberation Mono", "Menlo", monospace',fontSize:"0.75rem",lineHeight:1.5,bgcolor:"action.hover"},children:r}),hr:()=>e(c,{component:"hr",sx:{my:3,border:0,borderTop:1,borderColor:"divider"}})},children:r})}function z({message:n,avatarIcon:t,showActivity:i=!1}){const o="user"===n.role;return r(c,{sx:{display:"flex",gap:1,justifyContent:o?"flex-end":"flex-start"},children:[!o&&e(A,{icon:t,sx:{mt:.25}}),r(c,{sx:{maxWidth:"80%",display:"flex",flexDirection:"column",gap:1},children:[e(c,{sx:{borderRadius:o?"1rem 0.25rem 1rem 1rem":"0.25rem 1rem 1rem 1rem",px:1.75,py:1.25,bgcolor:o?"primary.main":"background.default",color:o?"primary.contrastText":"text.primary",border:o?"none":"1px solid",borderColor:"divider",whiteSpace:o?"pre-wrap":"normal",lineHeight:1.6},children:o?n.content:e(C,{content:n.content})}),i&&!o&&n.traceEvents&&n.traceEvents.length>0&&e(s,{isStreaming:!1,traceEvents:n.traceEvents,latency:n.latency,activitySummary:n.activitySummary,compact:!0})]})]})}function R({text:n,traceEvents:t,avatarIcon:i,onAbort:o,showActivity:a=!1}){return r(m,{direction:"row",spacing:1,sx:{justifyContent:"flex-start"},children:[e(A,{icon:i,sx:{mt:.25}}),r(m,{sx:{maxWidth:"80%"},spacing:1,children:[n?r(c,{sx:{borderRadius:" 0.25rem 1rem 1rem 1rem",border:"1px solid",borderColor:"primary.light",bgcolor:"background.default",color:"text.primary",px:1.75,py:1.25,lineHeight:1.6},children:[e(C,{content:n}),e(c,{component:"span",sx:{display:"inline-block",width:6,height:16,ml:.5,borderRadius:.5,bgcolor:"primary.main",verticalAlign:"text-bottom",animation:"pulse 1.2s ease-in-out infinite","@keyframes pulse":{"0%, 100%":{opacity:.35},"50%":{opacity:1}}}})]}):e(c,{sx:{borderRadius:"1rem 1rem 1rem 0.25rem",border:"1px solid",borderColor:"divider",bgcolor:"background.default",px:1.75,py:1.25},children:r(m,{direction:"row",spacing:1,sx:{alignItems:"center"},children:[e(m,{direction:"row",spacing:.5,children:[0,150,300].map(r=>e(c,{component:"span",sx:{width:6,height:6,borderRadius:"50%",bgcolor:"primary.main",animation:"bounce 1s ease-in-out infinite",animationDelay:`${r}ms`,"@keyframes bounce":{"0%, 80%, 100%":{opacity:.35,transform:"translateY(0)"},"40%":{opacity:1,transform:"translateY(-1px)"}}}},r))}),e(v,{children:t.length>0?T(t):"Analyzing data sources…"})]})}),a&&t.length>0&&e(s,{isStreaming:!0,traceEvents:t,defaultExpanded:!0}),o&&r(p,{onClick:o,sx:{display:"inline-flex",alignItems:"center",gap:.5,fontSize:"0.625rem",color:"text.secondary","&:hover":{color:"error.main"},borderRadius:.5,px:.5},children:[e(l,{sx:{fontSize:11}}),"Stop generating"]})]})]})}function T(e){const r=e[e.length-1];if(!r)return"Analyzing data sources…";switch(r.type){case"thinking":return`Step ${r.step||"?"}: Reasoning…`;case"kb":return"searching"===r.status?"Searching knowledge base…":"Processing KB results…";case"tool":return`Using ${r.toolName||"tool"}…`;case"model":return"Running model invocation…";default:return"Processing…"}}function E({traceLabel:n,avatarIcon:t}){return r(m,{direction:"row",spacing:1,sx:{alignItems:"flex-start"},children:[e(A,{icon:t,sx:{mt:.25}}),e(c,{sx:{borderRadius:"1rem 1rem 1rem 0.25rem",border:"1px solid",borderColor:"divider",bgcolor:"background.default",px:1.75,py:1.25},children:r(m,{direction:"row",spacing:1,sx:{alignItems:"center"},children:[e(m,{direction:"row",spacing:.5,children:[0,150,300].map(r=>e(c,{component:"span",sx:{width:6,height:6,borderRadius:"50%",bgcolor:"primary.main",animation:"bounce 1s ease-in-out infinite",animationDelay:`${r}ms`,"@keyframes bounce":{"0%, 80%, 100%":{opacity:.35,transform:"translateY(0)"},"40%":{opacity:1,transform:"translateY(-1px)"}}}},r))}),e(v,{children:n||"Analyzing data sources…"})]})})]})}function D({prompts:r,onSelect:n}){return e(m,{direction:"row",spacing:1,sx:{flexWrap:"wrap",gap:1,justifyContent:"center",alignItems:"center"},children:r.map(r=>e(x,{label:r,onClick:()=>n(r),size:"medium",sx:{cursor:"pointer"}},r))})}function W({onSend:t,disabled:i=!1,placeholder:o="Ask about campaigns, competitors, performance…"}){const[l,s]=n("");return e(c,{component:"form",onSubmit:e=>{e.preventDefault();const r=l.trim();r&&!i&&(t(r),s(""))},sx:{display:"flex",alignItems:"flex-end",gap:1},children:r(d,{variant:"outlined",sx:{display:"flex",flex:1,alignItems:"flex-end",gap:1,px:1.5,py:.75,borderRadius:2},children:[e(h,{variant:"standard",fullWidth:!0,multiline:!0,maxRows:5,value:l,onChange:e=>s(e.target.value),onKeyDown:e=>{if("Enter"===e.key&&!e.shiftKey){e.preventDefault();const r=l.trim();if(!r||i)return;t(r),s("")}},placeholder:o,disabled:i,slotProps:{input:{disableUnderline:!0}},sx:{"& .MuiInputBase-input":{p:0,fontSize:"0.875rem",color:"text.primary",resize:"none","&::placeholder":{color:"text.disabled",opacity:1}}}}),e(u,{type:"submit",title:"Send message",disabled:!l.trim()||i,variant:"filled",size:"small",sx:{flexShrink:0},children:e(a,{sx:{fontSize:13}})})]})})}function B({messages:n,isTyping:o,streamingText:a,liveTraceEvents:l,onAbort:s,avatarIcon:m,showActivity:d=!1}){const p=t(null);i(()=>{p.current?.scrollIntoView({behavior:"smooth"})},[n,o,a]);const u=n.length>0&&"assistant"===n[n.length-1].role,h=o&&!u&&!!a,x=o&&!u&&!h;return r(c,{sx:{flex:1,minHeight:0,overflowY:"auto",display:"flex",flexDirection:"column",gap:1.5,px:2,py:1.5},children:[n.filter(e=>"user"===e.role||e.content).map(r=>e(z,{message:r,avatarIcon:m,showActivity:d},r.id)),h&&e(R,{text:a||"",traceEvents:l||[],avatarIcon:m,onAbort:s,showActivity:d}),x&&e(E,{avatarIcon:m,traceLabel:l&&l.length>0?T(l):void 0}),e(c,{ref:p})]})}function P({title:n,description:t,dataSources:i,prompts:o,avatarIcon:a,onSelect:l}){return r(c,{sx:{display:"flex",flex:1,flexDirection:"column",alignItems:"center",justifyContent:"center",gap:2,px:2,py:6},children:[e(A,{size:"lg",icon:a}),r(c,{sx:{textAlign:"center",display:"flex",flexDirection:"column",gap:.5},children:[e(g,{children:n}),e(y,{children:t})]}),i&&i.length>0&&e(c,{sx:{display:"flex",flexWrap:"wrap",alignItems:"center",justifyContent:"center",gap:.75,mt:1},children:i.map(r=>e(x,{label:r,size:"small"},r))}),r(c,{sx:{mt:2},children:[e(y,{sx:{mb:1},children:"Try asking:"}),e(D,{prompts:o,onSelect:l})]})]})}function Y({sources:n}){return n.length?r(c,{sx:{display:"flex",flexWrap:"wrap",alignItems:"center",gap:.5,px:2,py:1,borderTop:1,borderColor:"divider"},children:[e(v,{sx:{mr:.5},children:"Sources:"}),n.map(r=>e(x,{label:r,size:"small"},r))]}):null}export{W as ChatInput,P as EmptyState,C as MarkdownContent,B as MessageList,Y as SourceCitations,D as SuggestedPrompts};