@veevarts/design-system 2.0.0-alpha.61 → 2.0.0-alpha.63

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 (35) hide show
  1. package/README.md +10 -1
  2. package/dist/assistant.cjs +2 -1
  3. package/dist/assistant.d.ts +10 -0
  4. package/dist/assistant.js +1046 -389
  5. package/dist/index.cjs +6 -6
  6. package/dist/index.js +4047 -3950
  7. package/dist/patterns/ActionsMenu/ActionsMenu.d.ts +3 -0
  8. package/dist/patterns/ActionsMenu/icons.d.ts +2 -0
  9. package/dist/patterns/ActionsMenu/index.d.ts +2 -0
  10. package/dist/patterns/ActionsMenu/styles.d.ts +20 -0
  11. package/dist/patterns/ActionsMenu/types.d.ts +35 -0
  12. package/dist/patterns/ArtifactCard/ArtifactCard.d.ts +19 -0
  13. package/dist/patterns/ArtifactCard/index.d.ts +2 -0
  14. package/dist/patterns/ArtifactCard/styles.d.ts +31 -0
  15. package/dist/patterns/ArtifactCard/types.d.ts +36 -0
  16. package/dist/patterns/AssistantMarkdown/AssistantMarkdown.d.ts +17 -0
  17. package/dist/patterns/AssistantMarkdown/index.d.ts +3 -0
  18. package/dist/patterns/AssistantMarkdown/links.d.ts +43 -0
  19. package/dist/patterns/AssistantMarkdown/parser.d.ts +5 -0
  20. package/dist/patterns/AssistantMarkdown/styles.d.ts +39 -0
  21. package/dist/patterns/AssistantMarkdown/types.d.ts +48 -0
  22. package/dist/patterns/CitationMarker/CitationMarker.d.ts +16 -0
  23. package/dist/patterns/CitationMarker/index.d.ts +2 -0
  24. package/dist/patterns/CitationMarker/styles.d.ts +19 -0
  25. package/dist/patterns/CitationMarker/types.d.ts +13 -0
  26. package/dist/patterns/SourceList/SourceList.d.ts +14 -0
  27. package/dist/patterns/SourceList/index.d.ts +2 -0
  28. package/dist/patterns/SourceList/styles.d.ts +20 -0
  29. package/dist/patterns/SourceList/types.d.ts +32 -0
  30. package/dist/patterns/SourcePill/SourcePill.d.ts +13 -0
  31. package/dist/patterns/SourcePill/index.d.ts +2 -0
  32. package/dist/patterns/SourcePill/styles.d.ts +19 -0
  33. package/dist/patterns/SourcePill/types.d.ts +20 -0
  34. package/dist/patterns/index.d.ts +2 -0
  35. package/package.json +3 -1
package/README.md CHANGED
@@ -145,6 +145,11 @@ npm install @tiptap/core @tiptap/react @tiptap/starter-kit @tiptap/pm \
145
145
  @tiptap/extension-text-align @tiptap/extension-underline
146
146
  ```
147
147
 
148
+ **If using `AssistantMarkdown` (from `@veevarts/design-system/assistant`), an optional peer:**
149
+ ```bash
150
+ npm install markdown-it
151
+ ```
152
+
148
153
  ### Import components
149
154
 
150
155
  ```tsx
@@ -178,8 +183,12 @@ import { AssistantComposer, AssistantMessage, ScrollToLatest } from '@veevarts/d
178
183
  | `AssistantNotice` | The panel's run state: working, failed, a limit, offline, no access |
179
184
  | `AssistantComposer` | The field, Send/Stop and suggestion pills |
180
185
  | `ScrollToLatest` | The transcript's scroll box, which follows the newest content |
186
+ | `AssistantMarkdown`, `defaultAssistantLinkPolicy` | An answer rendered from a safe Markdown subset |
187
+ | `CitationMarker` | A `[n]` in the answer that points at a source |
188
+ | `SourcePill`, `SourceList` | The sources behind an answer |
189
+ | `ArtifactCard` | A saved table, chart or report |
181
190
 
182
- - `markdown-it` (`^14`) is an **optional peer** of this entry, declared for its Markdown rendering. npm doesn't install optional peers, and none of the pieces above imports it, so you don't need it for them. The package root never imports it, and no built file bundles a copy (`npm run build` checks both).
191
+ - `markdown-it` (`^14`) is an **optional peer**: an app that never imports `@veevarts/design-system/assistant` doesn't need it. The entry imports it when it loads, so **any** import from the entry needs it resolvable, not only `AssistantMarkdown`. npm doesn't install optional peers, but npm apps usually have it already (`@tiptap/pm` → `prosemirror-markdown` → `markdown-it@14`, hoisted); with pnpm, Yarn PnP or another layout that doesn't hoist, install it. The entry's types don't need `@types/markdown-it`. The package root never imports it, and no built file bundles a copy (`npm run build` checks both).
183
192
  - The `ai-*` colours they use come with `veevartPreset`; the hex values (`assistantSurfaceTokens`) stay on the package root. See below and Storybook → Foundations → Assistant color.
184
193
  - TypeScript finds the entry's types with `moduleResolution` `bundler` (through `exports`) and `node` (through `typesVersions`), the same settings the package root works with.
185
194
  - Each piece's page in Storybook (Patterns → Assistant) has its usage, accessibility notes and test ids.
@@ -1 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),r=require("react"),d=require("./hasContent-JfCtoDIu.cjs"),s=require("@heroui/react");require("lucide-react");const w={base:"flex w-full min-w-0 flex-col gap-1.5",baseUser:"items-end",baseAssistant:"items-start",header:"flex min-w-0 max-w-full flex-wrap items-center gap-x-2 gap-y-0.5",mark:"inline-flex size-6 flex-none items-center justify-center rounded-full bg-ai-fill text-ai-accent",author:"min-w-0 text-sm font-semibold text-ai-accent [overflow-wrap:anywhere]",meta:"min-w-0 text-xs tabular-nums text-default-500 [overflow-wrap:anywhere]",body:"min-w-0 text-sm leading-relaxed text-foreground [overflow-wrap:anywhere]",bodyUser:"max-w-[85%] rounded-2xl rounded-br-md bg-ai-user-bubble px-4 py-2.5",bodyAssistant:"w-full",plain:"whitespace-pre-wrap",status:"m-0 flex min-w-0 items-center gap-1.5 text-xs font-medium [overflow-wrap:anywhere]",statusIcon:"inline-flex size-3.5 flex-none",actions:"flex flex-wrap items-center gap-1",userLabel:"sr-only",statusFallback:"sr-only"},ae={stopped:"text-default-600",error:"text-danger-600 dark:text-danger-500"},re={stopped:"solar:stop-circle-linear",error:"solar:danger-circle-linear"},ie="solar:stars-minimalistic-linear",oe={stopped:"Stopped",error:"Failed"};function G(t){return typeof t=="string"?t.trim()!=="":Array.isArray(t)?t.some(G):d.hasContent(t)}function J({author:t,authorLabel:c,children:y,status:p="complete",statusLabel:m,meta:u,actions:v,icon:x=ie,className:N,classNames:i={},"data-testid":h="assistant-message"}){const g=r.useId(),o=t==="user",f=p==="complete"?null:p==="stopped"?"stopped":"error",S=d.hasContent(u)?e.jsx("span",{"data-testid":`${h}-meta`,className:s.cn(w.meta,i.meta),children:u}):null;return e.jsxs("article",{"aria-labelledby":g,"data-author":t,"data-status":p,"data-testid":h,className:s.cn(w.base,o?w.baseUser:w.baseAssistant,N,i.base),children:[o?e.jsx("span",{id:g,className:w.userLabel,children:c}):e.jsxs("header",{"data-testid":`${h}-header`,className:s.cn(w.header,i.header),children:[x?e.jsx("span",{"aria-hidden":"true","data-testid":`${h}-mark`,className:w.mark,children:e.jsx(d.Icon,{icon:x,width:14,height:14})}):null,e.jsx("span",{id:g,"data-testid":`${h}-author`,className:w.author,children:c}),S]}),d.hasContent(y)?e.jsx("div",{"data-testid":`${h}-body`,className:s.cn(w.body,o?w.bodyUser:w.bodyAssistant,typeof y=="string"&&w.plain,i.body),children:y}):null,f?e.jsxs("p",{"data-testid":`${h}-status`,className:s.cn(w.status,ae[f],i.status),children:[e.jsx("span",{"aria-hidden":"true","data-testid":`${h}-status-icon`,className:w.statusIcon,children:e.jsx(d.Icon,{icon:re[f],width:14,height:14})}),G(m)?e.jsx("span",{children:m}):e.jsx("span",{className:w.statusFallback,children:oe[f]})]}):null,o?S:null,d.hasContent(v)?e.jsx("div",{"data-testid":`${h}-actions`,className:s.cn(w.actions,i.actions),children:v}):null]})}J.displayName="AssistantMessage";const A={base:"w-full px-0",item:"shadow-none",trigger:"gap-2 py-1.5",title:"text-sm font-medium text-default-700",indicator:"text-default-500",content:"pb-2 pt-0",list:"m-0 flex list-none flex-col gap-1.5 p-0",row:"flex min-w-0 items-start gap-2 text-sm",icon:"mt-0.5 flex-none",label:"min-w-0 flex-1 text-foreground [overflow-wrap:anywhere]",failed:"flex-none text-danger-700 dark:text-danger-700",duration:"mt-px flex-none text-xs tabular-nums text-default-500",stateLabel:"sr-only"},le={done:{icon:"solar:check-circle-linear",className:"text-success-600"},failed:{icon:"solar:close-circle-linear",className:"text-danger-600"}};function V(t){if(!Number.isFinite(t)||t<0)return"";if(t<1e3)return`${Math.floor(t)} ms`;if(t<1e4)return`${(Math.floor(t/100)/10).toFixed(1)} s`;const c=Math.floor(t/1e3);return c<60?`${c} s`:`${Math.floor(c/60)} min ${String(c%60).padStart(2,"0")} s`}const B="activity",ce={done:"Done",failed:"Failed"};function Y({items:t,title:c,titleText:y,isExpanded:p,defaultExpanded:m=!0,onExpandedChange:u,stateLabels:v,formatDuration:x=V,className:N,"data-testid":i="assistant-activity"}){const[h,g]=r.useState(m),o=d.useReducedMotion(),f=p??h,S={...ce,...v};return t.length===0?null:e.jsx(s.Accordion,{"data-testid":i,disableAnimation:o,selectedKeys:f?new Set([B]):new Set,onSelectionChange:n=>{const $=n==="all"||n.has(B);p===void 0&&g($),u?.($)},className:s.cn(A.base,N),children:e.jsx(s.AccordionItem,{"data-testid":`${i}-group`,title:c,textValue:typeof c=="string"?c:y,classNames:{base:A.item,trigger:A.trigger,title:A.title,indicator:A.indicator,content:A.content},children:e.jsx("ol",{"data-testid":`${i}-list`,className:A.list,children:t.map(n=>{const $=le[n.state],_=`${i}-item-${n.id}`;return e.jsxs("li",{"data-testid":_,"data-state":n.state,className:A.row,children:[e.jsx(d.Icon,{icon:$.icon,width:16,height:16,"aria-hidden":"true",className:s.cn(A.icon,$.className)}),e.jsxs("span",{className:A.label,children:[n.state==="done"?e.jsxs("span",{className:A.stateLabel,children:[S.done,": "]}):null,n.label]}),n.state==="failed"?e.jsx(s.Chip,{size:"sm",variant:"flat",color:"danger","data-testid":`${_}-failed`,className:A.failed,children:S.failed}):null,n.durationMs!==void 0?e.jsx("span",{"data-testid":`${_}-duration`,className:A.duration,children:x(n.durationMs)}):null]},n.id)})})},B)})}Y.displayName="AssistantActivity";const T="dark:bg-default-100",de={thinking:{color:"default",base:"bg-ai-fill dark:bg-ai-fill",title:"text-ai-accent",description:"text-default-600",icon:""},info:{color:"default",base:"bg-ai-fill dark:bg-ai-fill",title:"text-ai-accent",description:"text-default-600",icon:"solar:info-circle-linear"},empty:{color:"default",base:T,title:"text-foreground",description:"text-default-600",icon:"solar:chat-round-line-linear"},error:{color:"danger",base:"",title:"text-danger-700",description:"text-danger-700",icon:"solar:danger-triangle-linear"},caution:{color:"warning",base:"",title:"text-warning-700",description:"text-warning-700",icon:"solar:hourglass-line-linear"},offline:{color:"default",base:T,title:"text-foreground",description:"text-default-600",icon:"solar:cloud-cross-linear"},blocked:{color:"default",base:T,title:"text-foreground",description:"text-default-600",icon:"solar:lock-keyhole-minimalistic-linear"}},j={base:"items-start gap-x-3 px-4 py-3",mainWrapper:"ms-0 min-h-0 min-w-0 items-start justify-start gap-0.5",icon:"mt-0.5 inline-flex size-5 flex-none items-center justify-center",live:"col-span-full row-start-1 grid min-w-0 grid-cols-subgrid gap-y-0.5",text:"grid w-full min-w-0 grid-cols-1 items-baseline gap-x-2",textWithClock:"grid-cols-[auto_1fr]",title:"col-start-1 m-0 min-w-0 justify-self-start text-sm font-medium [overflow-wrap:anywhere]",elapsed:"col-start-2 row-start-1 justify-self-start whitespace-nowrap text-sm tabular-nums",description:"col-span-full m-0 min-w-0 text-sm [overflow-wrap:anywhere]",action:"mt-2 flex flex-wrap items-center gap-2",detailsToggle:"-ms-1.5 h-7 min-w-0 gap-1 px-1.5 text-xs font-medium text-current",detailsWrapper:"w-full min-w-0",detailsChevron:`transition-transform ${d.stillTransitionClass}`,detailsChevronOpen:"rotate-180",details:"mt-1 max-h-48 overflow-auto whitespace-pre-wrap rounded-md bg-content1 p-2 font-mono text-xs text-foreground [overflow-wrap:anywhere]"},ue={thinking:"status",info:"status",empty:"status",error:"alert",caution:"status",offline:"status",blocked:"status"};function Q({kind:t,title:c,description:y,elapsed:p,action:m,details:u,detailsLabel:v="Details",icon:x,role:N=ue[t],ariaLive:i=N==="alert"?"assertive":"polite",className:h,classNames:g={},"data-testid":o="assistant-notice"}){const f=de[t],S=p!=null&&p!==!1,n=x===void 0?f.icon:x,$=t==="thinking"&&x===void 0?e.jsx(s.Spinner,{size:"sm",color:"current"}):n?e.jsx(d.Icon,{icon:n,width:20,height:20}):null;return e.jsxs(s.Alert,{role:"none","data-kind":t,"data-testid":o,color:f.color,variant:"flat",hideIcon:!0,startContent:$?e.jsx("span",{"aria-hidden":"true","data-testid":`${o}-icon`,className:s.cn(j.icon,f.title),children:$}):void 0,classNames:{base:s.cn(j.base,f.base,h,g.base),mainWrapper:j.mainWrapper},children:[e.jsxs("div",{className:s.cn(j.text,S&&j.textWithClock),children:[e.jsxs("div",{role:N,"aria-live":i,"aria-atomic":"true","data-testid":`${o}-live`,className:j.live,children:[e.jsx("p",{"data-testid":`${o}-title`,className:s.cn(j.title,f.title,g.title),children:c}),y!=null&&y!==!1?e.jsx("p",{"data-testid":`${o}-description`,className:s.cn(j.description,f.description,g.description),children:y}):null]}),S?e.jsx("span",{"aria-hidden":"true","data-testid":`${o}-elapsed`,className:s.cn(j.elapsed,f.title),children:p}):null]}),m!=null&&m!==!1?e.jsx("div",{"data-testid":`${o}-action`,className:s.cn(j.action,g.action),children:m}):null,u!=null&&u!==!1?e.jsx(fe,{label:v,toneClass:f.description,className:g.details,dataTestId:o,children:u}):null]})}function fe({label:t,toneClass:c,className:y,dataTestId:p,children:m}){const[u,v]=r.useState(!1),x=r.useId();return e.jsxs("div",{className:j.detailsWrapper,children:[e.jsx(d.Button,{size:"sm",variant:"light",color:"default",radius:"sm","aria-expanded":u,"aria-controls":x,onPress:()=>v(N=>!N),testId:`${p}-details-toggle`,className:s.cn(j.detailsToggle,c),endContent:e.jsx(d.Icon,{icon:"solar:alt-arrow-down-linear",width:14,height:14,"aria-hidden":"true",className:s.cn(j.detailsChevron,u&&j.detailsChevronOpen)}),children:t}),e.jsx("div",{id:x,hidden:!u,"data-testid":`${p}-details`,className:s.cn(j.details,y),children:m})]})}Q.displayName="AssistantNotice";const k={base:"flex w-full min-w-0 flex-col gap-2",suggestions:"flex flex-wrap gap-2",suggestion:"h-auto min-h-8 max-w-full whitespace-normal bg-default-100 py-1.5 text-left text-foreground data-[hover=true]:bg-default-200",row:"flex min-w-0 items-end gap-2",field:"min-w-0 flex-1",inputWrapper:"border-default-200 bg-content1 data-[hover=true]:border-default-300 group-data-[focus=true]:border-ai-focus group-data-[focus=true]:data-[hover=true]:border-ai-focus",input:"text-sm text-foreground placeholder:text-default-500",helper:"m-0 flex w-full justify-between gap-2 text-xs text-default-500",count:"ms-auto flex-none tabular-nums",button:"flex-none"};function X({value:t,onValueChange:c,onSubmit:y,onStop:p,isRunning:m=!1,isStopDisabled:u=!1,isDisabled:v=!1,label:x,placeholder:N,description:i,sendLabel:h="Send",stopLabel:g="Stop",suggestions:o,suggestionsLabel:f="Suggestions",onSuggestionSelect:S,maxLength:n,minRows:$=2,maxRows:_=8,className:U,"data-testid":E="assistant-composer"}){const C=r.useRef(null),R=r.useId(),M=t.trim(),z=n===void 0||t.length<=n,O=!v&&!m&&M.length>0&&z,a=m&&p!==void 0,b=()=>{O&&y(M)},F=()=>C.current?.focus(),ee=l=>{l.target===C.current&&(l.key!=="Enter"||l.shiftKey||l.nativeEvent.isComposing||l.keyCode===229||(l.preventDefault(),b()))},te=l=>{l.preventDefault(),b(),F()},L=r.useRef(!1),H=r.useRef(a);r.useLayoutEffect(()=>{H.current&&!a&&L.current&&(L.current=!1,C.current?.focus()),H.current=a},[a]),r.useLayoutEffect(()=>{u&&L.current&&(L.current=!1,C.current?.focus())},[u]);const se=()=>{F(),p?.()},ne=l=>{const K=l.prompt??l.label;c(n===void 0?K:K.slice(0,n)),C.current?.focus(),S?.(l)},W=n!==void 0?`${t.length}/${n}`:null,I=d.hasContent(i)||W?e.jsxs("p",{id:R,"data-testid":`${E}-helper`,className:k.helper,children:[d.hasContent(i)?e.jsx("span",{children:i}):null,W?e.jsx("span",{"data-testid":`${E}-count`,className:k.count,children:W}):null]}):null;return e.jsxs("form",{noValidate:!0,"data-testid":E,"data-running":m||void 0,onSubmit:te,onKeyDown:ee,className:s.cn(k.base,U),children:[o&&o.length>0?e.jsx("div",{role:"group","aria-label":f,"data-testid":`${E}-suggestions`,className:k.suggestions,children:o.map(l=>e.jsx(d.Button,{type:"button",size:"sm",variant:"flat",color:"default",isDisabled:v,onPress:()=>ne(l),testId:`${E}-suggestion-${l.key}`,className:k.suggestion,children:l.label},l.key))}):null,e.jsxs("div",{className:k.row,onMouseDown:l=>{l.target===l.currentTarget&&l.preventDefault()},children:[e.jsx(s.Textarea,{ref:C,"aria-label":x,placeholder:N,value:t,onValueChange:c,isDisabled:v,maxLength:n,minRows:$,maxRows:_,variant:"bordered","aria-describedby":I?R:void 0,"data-testid":`${E}-field`,className:k.field,classNames:{inputWrapper:k.inputWrapper,input:k.input}}),a?e.jsx(d.Button,{type:"button",isIconOnly:!0,color:"default",variant:"flat","aria-label":g,isDisabled:u,onPress:se,onFocus:()=>{L.current=!0},onBlur:l=>{l.target.disabled||(L.current=!1)},testId:`${E}-stop`,className:k.button,children:e.jsx(d.Icon,{icon:"solar:stop-bold",width:18,height:18,"aria-hidden":"true"})},"stop"):e.jsx(d.Button,{type:"submit",isIconOnly:!0,color:"primary","aria-label":h,isDisabled:!O,testId:`${E}-send`,className:k.button,children:e.jsx(d.Icon,{icon:"solar:arrow-up-linear",width:18,height:18,"aria-hidden":"true"})},"send")]}),I]})}X.displayName="AssistantComposer";const D={base:"relative flex min-h-0 w-full flex-col",scroller:"min-h-0 flex-1 overflow-y-auto overscroll-contain rounded-[inherit] outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ai-focus",content:"min-w-0",jumpBar:"pointer-events-none absolute inset-x-0 bottom-3 flex justify-center",jump:"pointer-events-auto border border-divider bg-content1 text-foreground shadow-medium"},q=(t,c)=>t.scrollHeight-t.scrollTop-t.clientHeight<=c,P=t=>t.clientHeight>0;function Z({children:t,label:c,followKey:y,jumpLabel:p="Jump to newest",onFollowChange:m,threshold:u=32,className:v,classNames:x={},"data-testid":N="scroll-to-latest"}){const i=r.useRef(null),h=r.useRef(null),g=r.useRef(!0),o=r.useRef(0),f=r.useRef(m),S=r.useRef(u),[n,$]=r.useState(!0),[_,U]=r.useState(!1),E=d.useReducedMotion();r.useEffect(()=>{f.current=m},[m]),r.useEffect(()=>{S.current=u},[u]);const C=r.useCallback(a=>{g.current!==a&&(g.current=a,$(a),f.current?.(a))},[]),R=r.useCallback(()=>{const a=i.current;a&&(U(a.scrollHeight>a.clientHeight),P(a)&&q(a,S.current)&&C(!0))},[C]),M=r.useCallback(a=>{const b=i.current;b&&(typeof b.scrollTo=="function"?b.scrollTo({top:b.scrollHeight,behavior:a}):b.scrollTop=b.scrollHeight,o.current=b.scrollTop)},[]);r.useLayoutEffect(()=>{g.current&&M("auto"),R()},[y,M,R]),r.useEffect(()=>{const a=h.current,b=i.current;if(!a||!b||typeof ResizeObserver>"u")return;const F=new ResizeObserver(()=>{g.current&&M("auto"),R()});return F.observe(a),F.observe(b),()=>F.disconnect()},[M,R]);const z=()=>{const a=i.current;if(!a||!P(a))return;const b=a.scrollTop;q(a,u)?C(!0):b<o.current-1&&C(!1),o.current=b,R()},O=()=>{C(!0),M(E?"auto":"smooth"),i.current?.focus({preventScroll:!0})};return e.jsxs("div",{"data-testid":N,"data-following":n,className:s.cn(D.base,v,x.base),children:[e.jsx(s.ScrollShadow,{ref:i,role:"region","aria-label":c,tabIndex:0,size:24,onScroll:z,"data-testid":`${N}-scroller`,className:s.cn(D.scroller,x.scroller),children:e.jsx("div",{ref:h,className:s.cn(D.content,x.content),children:t})}),!n&&_?e.jsx("div",{className:D.jumpBar,children:e.jsx(d.Button,{type:"button",size:"sm",radius:"full",color:"default",variant:"solid",onPress:O,testId:`${N}-jump`,startContent:e.jsx(d.Icon,{icon:"solar:arrow-down-linear",width:16,height:16,"aria-hidden":"true"}),className:s.cn(D.jump,x.jump),children:p})}):null]})}Z.displayName="ScrollToLatest";exports.AssistantActivity=Y;exports.AssistantComposer=X;exports.AssistantMessage=J;exports.AssistantNotice=Q;exports.ScrollToLatest=Z;exports.formatAssistantDuration=V;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),o=require("react"),p=require("./hasContent-JfCtoDIu.cjs"),i=require("@heroui/react");require("lucide-react");const je=require("markdown-it"),S={base:"flex w-full min-w-0 flex-col gap-1.5",baseUser:"items-end",baseAssistant:"items-start",header:"flex min-w-0 max-w-full flex-wrap items-center gap-x-2 gap-y-0.5",mark:"inline-flex size-6 flex-none items-center justify-center rounded-full bg-ai-fill text-ai-accent",author:"min-w-0 text-sm font-semibold text-ai-accent [overflow-wrap:anywhere]",meta:"min-w-0 text-xs tabular-nums text-default-500 [overflow-wrap:anywhere]",body:"min-w-0 text-sm leading-relaxed text-foreground [overflow-wrap:anywhere]",bodyUser:"max-w-[85%] rounded-2xl rounded-br-md bg-ai-user-bubble px-4 py-2.5",bodyAssistant:"w-full",plain:"whitespace-pre-wrap",status:"m-0 flex min-w-0 items-center gap-1.5 text-xs font-medium [overflow-wrap:anywhere]",statusIcon:"inline-flex size-3.5 flex-none",actions:"flex flex-wrap items-center gap-1",userLabel:"sr-only",statusFallback:"sr-only"},ve={stopped:"text-default-600",error:"text-danger-600 dark:text-danger-500"},Ne={stopped:"solar:stop-circle-linear",error:"solar:danger-circle-linear"},ye="solar:stars-minimalistic-linear",Ce={stopped:"Stopped",error:"Failed"};function ae(t){return typeof t=="string"?t.trim()!=="":Array.isArray(t)?t.some(ae):p.hasContent(t)}function le({author:t,authorLabel:s,children:r,status:n="complete",statusLabel:a,meta:l,actions:f,icon:w=ye,className:m,classNames:d={},"data-testid":j="assistant-message"}){const b=o.useId(),g=t==="user",c=n==="complete"?null:n==="stopped"?"stopped":"error",v=p.hasContent(l)?e.jsx("span",{"data-testid":`${j}-meta`,className:i.cn(S.meta,d.meta),children:l}):null;return e.jsxs("article",{"aria-labelledby":b,"data-author":t,"data-status":n,"data-testid":j,className:i.cn(S.base,g?S.baseUser:S.baseAssistant,m,d.base),children:[g?e.jsx("span",{id:b,className:S.userLabel,children:s}):e.jsxs("header",{"data-testid":`${j}-header`,className:i.cn(S.header,d.header),children:[w?e.jsx("span",{"aria-hidden":"true","data-testid":`${j}-mark`,className:S.mark,children:e.jsx(p.Icon,{icon:w,width:14,height:14})}):null,e.jsx("span",{id:b,"data-testid":`${j}-author`,className:S.author,children:s}),v]}),p.hasContent(r)?e.jsx("div",{"data-testid":`${j}-body`,className:i.cn(S.body,g?S.bodyUser:S.bodyAssistant,typeof r=="string"&&S.plain,d.body),children:r}):null,c?e.jsxs("p",{"data-testid":`${j}-status`,className:i.cn(S.status,ve[c],d.status),children:[e.jsx("span",{"aria-hidden":"true","data-testid":`${j}-status-icon`,className:S.statusIcon,children:e.jsx(p.Icon,{icon:Ne[c],width:14,height:14})}),ae(a)?e.jsx("span",{children:a}):e.jsx("span",{className:S.statusFallback,children:Ce[c]})]}):null,g?v:null,p.hasContent(f)?e.jsx("div",{"data-testid":`${j}-actions`,className:i.cn(S.actions,d.actions),children:f}):null]})}le.displayName="AssistantMessage";const R={base:"w-full px-0",item:"shadow-none",trigger:"gap-2 py-1.5",title:"text-sm font-medium text-default-700",indicator:"text-default-500",content:"pb-2 pt-0",list:"m-0 flex list-none flex-col gap-1.5 p-0",row:"flex min-w-0 items-start gap-2 text-sm",icon:"mt-0.5 flex-none",label:"min-w-0 flex-1 text-foreground [overflow-wrap:anywhere]",failed:"flex-none text-danger-700 dark:text-danger-700",duration:"mt-px flex-none text-xs tabular-nums text-default-500",stateLabel:"sr-only"},$e={done:{icon:"solar:check-circle-linear",className:"text-success-600"},failed:{icon:"solar:close-circle-linear",className:"text-danger-600"}};function ie(t){if(!Number.isFinite(t)||t<0)return"";if(t<1e3)return`${Math.floor(t)} ms`;if(t<1e4)return`${(Math.floor(t/100)/10).toFixed(1)} s`;const s=Math.floor(t/1e3);return s<60?`${s} s`:`${Math.floor(s/60)} min ${String(s%60).padStart(2,"0")} s`}const T="activity",Ae={done:"Done",failed:"Failed"};function oe({items:t,title:s,titleText:r,isExpanded:n,defaultExpanded:a=!0,onExpandedChange:l,stateLabels:f,formatDuration:w=ie,className:m,"data-testid":d="assistant-activity"}){const[j,b]=o.useState(a),g=p.useReducedMotion(),c=n??j,v={...Ae,...f};return t.length===0?null:e.jsx(i.Accordion,{"data-testid":d,disableAnimation:g,selectedKeys:c?new Set([T]):new Set,onSelectionChange:h=>{const $=h==="all"||h.has(T);n===void 0&&b($),l?.($)},className:i.cn(R.base,m),children:e.jsx(i.AccordionItem,{"data-testid":`${d}-group`,title:s,textValue:typeof s=="string"?s:r,classNames:{base:R.item,trigger:R.trigger,title:R.title,indicator:R.indicator,content:R.content},children:e.jsx("ol",{"data-testid":`${d}-list`,className:R.list,children:t.map(h=>{const $=$e[h.state],A=`${d}-item-${h.id}`;return e.jsxs("li",{"data-testid":A,"data-state":h.state,className:R.row,children:[e.jsx(p.Icon,{icon:$.icon,width:16,height:16,"aria-hidden":"true",className:i.cn(R.icon,$.className)}),e.jsxs("span",{className:R.label,children:[h.state==="done"?e.jsxs("span",{className:R.stateLabel,children:[v.done,": "]}):null,h.label]}),h.state==="failed"?e.jsx(i.Chip,{size:"sm",variant:"flat",color:"danger","data-testid":`${A}-failed`,className:R.failed,children:v.failed}):null,h.durationMs!==void 0?e.jsx("span",{"data-testid":`${A}-duration`,className:R.duration,children:w(h.durationMs)}):null]},h.id)})})},T)})}oe.displayName="AssistantActivity";const G="dark:bg-default-100",Se={thinking:{color:"default",base:"bg-ai-fill dark:bg-ai-fill",title:"text-ai-accent",description:"text-default-600",icon:""},info:{color:"default",base:"bg-ai-fill dark:bg-ai-fill",title:"text-ai-accent",description:"text-default-600",icon:"solar:info-circle-linear"},empty:{color:"default",base:G,title:"text-foreground",description:"text-default-600",icon:"solar:chat-round-line-linear"},error:{color:"danger",base:"",title:"text-danger-700",description:"text-danger-700",icon:"solar:danger-triangle-linear"},caution:{color:"warning",base:"",title:"text-warning-700",description:"text-warning-700",icon:"solar:hourglass-line-linear"},offline:{color:"default",base:G,title:"text-foreground",description:"text-default-600",icon:"solar:cloud-cross-linear"},blocked:{color:"default",base:G,title:"text-foreground",description:"text-default-600",icon:"solar:lock-keyhole-minimalistic-linear"}},_={base:"items-start gap-x-3 px-4 py-3",mainWrapper:"ms-0 min-h-0 min-w-0 items-start justify-start gap-0.5",icon:"mt-0.5 inline-flex size-5 flex-none items-center justify-center",live:"col-span-full row-start-1 grid min-w-0 grid-cols-subgrid gap-y-0.5",text:"grid w-full min-w-0 grid-cols-1 items-baseline gap-x-2",textWithClock:"grid-cols-[auto_1fr]",title:"col-start-1 m-0 min-w-0 justify-self-start text-sm font-medium [overflow-wrap:anywhere]",elapsed:"col-start-2 row-start-1 justify-self-start whitespace-nowrap text-sm tabular-nums",description:"col-span-full m-0 min-w-0 text-sm [overflow-wrap:anywhere]",action:"mt-2 flex flex-wrap items-center gap-2",detailsToggle:"-ms-1.5 h-7 min-w-0 gap-1 px-1.5 text-xs font-medium text-current",detailsWrapper:"w-full min-w-0",detailsChevron:`transition-transform ${p.stillTransitionClass}`,detailsChevronOpen:"rotate-180",details:"mt-1 max-h-48 overflow-auto whitespace-pre-wrap rounded-md bg-content1 p-2 font-mono text-xs text-foreground [overflow-wrap:anywhere]"},ke={thinking:"status",info:"status",empty:"status",error:"alert",caution:"status",offline:"status",blocked:"status"};function ce({kind:t,title:s,description:r,elapsed:n,action:a,details:l,detailsLabel:f="Details",icon:w,role:m=ke[t],ariaLive:d=m==="alert"?"assertive":"polite",className:j,classNames:b={},"data-testid":g="assistant-notice"}){const c=Se[t],v=n!=null&&n!==!1,h=w===void 0?c.icon:w,$=t==="thinking"&&w===void 0?e.jsx(i.Spinner,{size:"sm",color:"current"}):h?e.jsx(p.Icon,{icon:h,width:20,height:20}):null;return e.jsxs(i.Alert,{role:"none","data-kind":t,"data-testid":g,color:c.color,variant:"flat",hideIcon:!0,startContent:$?e.jsx("span",{"aria-hidden":"true","data-testid":`${g}-icon`,className:i.cn(_.icon,c.title),children:$}):void 0,classNames:{base:i.cn(_.base,c.base,j,b.base),mainWrapper:_.mainWrapper},children:[e.jsxs("div",{className:i.cn(_.text,v&&_.textWithClock),children:[e.jsxs("div",{role:m,"aria-live":d,"aria-atomic":"true","data-testid":`${g}-live`,className:_.live,children:[e.jsx("p",{"data-testid":`${g}-title`,className:i.cn(_.title,c.title,b.title),children:s}),r!=null&&r!==!1?e.jsx("p",{"data-testid":`${g}-description`,className:i.cn(_.description,c.description,b.description),children:r}):null]}),v?e.jsx("span",{"aria-hidden":"true","data-testid":`${g}-elapsed`,className:i.cn(_.elapsed,c.title),children:n}):null]}),a!=null&&a!==!1?e.jsx("div",{"data-testid":`${g}-action`,className:i.cn(_.action,b.action),children:a}):null,l!=null&&l!==!1?e.jsx(_e,{label:f,toneClass:c.description,className:b.details,dataTestId:g,children:l}):null]})}function _e({label:t,toneClass:s,className:r,dataTestId:n,children:a}){const[l,f]=o.useState(!1),w=o.useId();return e.jsxs("div",{className:_.detailsWrapper,children:[e.jsx(p.Button,{size:"sm",variant:"light",color:"default",radius:"sm","aria-expanded":l,"aria-controls":w,onPress:()=>f(m=>!m),testId:`${n}-details-toggle`,className:i.cn(_.detailsToggle,s),endContent:e.jsx(p.Icon,{icon:"solar:alt-arrow-down-linear",width:14,height:14,"aria-hidden":"true",className:i.cn(_.detailsChevron,l&&_.detailsChevronOpen)}),children:t}),e.jsx("div",{id:w,hidden:!l,"data-testid":`${n}-details`,className:i.cn(_.details,r),children:a})]})}ce.displayName="AssistantNotice";const E={base:"flex w-full min-w-0 flex-col gap-2",suggestions:"flex flex-wrap gap-2",suggestion:"h-auto min-h-8 max-w-full whitespace-normal bg-default-100 py-1.5 text-left text-foreground data-[hover=true]:bg-default-200",row:"flex min-w-0 items-end gap-2",field:"min-w-0 flex-1",inputWrapper:"border-default-200 bg-content1 data-[hover=true]:border-default-300 group-data-[focus=true]:border-ai-focus group-data-[focus=true]:data-[hover=true]:border-ai-focus",input:"text-sm text-foreground placeholder:text-default-500",helper:"m-0 flex w-full justify-between gap-2 text-xs text-default-500",count:"ms-auto flex-none tabular-nums",button:"flex-none"};function de({value:t,onValueChange:s,onSubmit:r,onStop:n,isRunning:a=!1,isStopDisabled:l=!1,isDisabled:f=!1,label:w,placeholder:m,description:d,sendLabel:j="Send",stopLabel:b="Stop",suggestions:g,suggestionsLabel:c="Suggestions",onSuggestionSelect:v,maxLength:h,minRows:$=2,maxRows:A=8,className:I,"data-testid":M="assistant-composer"}){const k=o.useRef(null),F=o.useId(),C=t.trim(),U=h===void 0||t.length<=h,x=!f&&!a&&C.length>0&&U,u=a&&n!==void 0,N=()=>{x&&r(C)},L=()=>k.current?.focus(),P=y=>{y.target===k.current&&(y.key!=="Enter"||y.shiftKey||y.nativeEvent.isComposing||y.keyCode===229||(y.preventDefault(),N()))},z=y=>{y.preventDefault(),N(),L()},O=o.useRef(!1),Q=o.useRef(u);o.useLayoutEffect(()=>{Q.current&&!u&&O.current&&(O.current=!1,k.current?.focus()),Q.current=u},[u]),o.useLayoutEffect(()=>{l&&O.current&&(O.current=!1,k.current?.focus())},[l]);const ge=()=>{L(),n?.()},we=y=>{const ee=y.prompt??y.label;s(h===void 0?ee:ee.slice(0,h)),k.current?.focus(),v?.(y)},q=h!==void 0?`${t.length}/${h}`:null,X=p.hasContent(d)||q?e.jsxs("p",{id:F,"data-testid":`${M}-helper`,className:E.helper,children:[p.hasContent(d)?e.jsx("span",{children:d}):null,q?e.jsx("span",{"data-testid":`${M}-count`,className:E.count,children:q}):null]}):null;return e.jsxs("form",{noValidate:!0,"data-testid":M,"data-running":a||void 0,onSubmit:z,onKeyDown:P,className:i.cn(E.base,I),children:[g&&g.length>0?e.jsx("div",{role:"group","aria-label":c,"data-testid":`${M}-suggestions`,className:E.suggestions,children:g.map(y=>e.jsx(p.Button,{type:"button",size:"sm",variant:"flat",color:"default",isDisabled:f,onPress:()=>we(y),testId:`${M}-suggestion-${y.key}`,className:E.suggestion,children:y.label},y.key))}):null,e.jsxs("div",{className:E.row,onMouseDown:y=>{y.target===y.currentTarget&&y.preventDefault()},children:[e.jsx(i.Textarea,{ref:k,"aria-label":w,placeholder:m,value:t,onValueChange:s,isDisabled:f,maxLength:h,minRows:$,maxRows:A,variant:"bordered","aria-describedby":X?F:void 0,"data-testid":`${M}-field`,className:E.field,classNames:{inputWrapper:E.inputWrapper,input:E.input}}),u?e.jsx(p.Button,{type:"button",isIconOnly:!0,color:"default",variant:"flat","aria-label":b,isDisabled:l,onPress:ge,onFocus:()=>{O.current=!0},onBlur:y=>{y.target.disabled||(O.current=!1)},testId:`${M}-stop`,className:E.button,children:e.jsx(p.Icon,{icon:"solar:stop-bold",width:18,height:18,"aria-hidden":"true"})},"stop"):e.jsx(p.Button,{type:"submit",isIconOnly:!0,color:"primary","aria-label":j,isDisabled:!x,testId:`${M}-send`,className:E.button,children:e.jsx(p.Icon,{icon:"solar:arrow-up-linear",width:18,height:18,"aria-hidden":"true"})},"send")]}),X]})}de.displayName="AssistantComposer";const W={base:"relative flex min-h-0 w-full flex-col",scroller:"min-h-0 flex-1 overflow-y-auto overscroll-contain rounded-[inherit] outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ai-focus",content:"min-w-0",jumpBar:"pointer-events-none absolute inset-x-0 bottom-3 flex justify-center",jump:"pointer-events-auto border border-divider bg-content1 text-foreground shadow-medium"},te=(t,s)=>t.scrollHeight-t.scrollTop-t.clientHeight<=s,se=t=>t.clientHeight>0;function ue({children:t,label:s,followKey:r,jumpLabel:n="Jump to newest",onFollowChange:a,threshold:l=32,className:f,classNames:w={},"data-testid":m="scroll-to-latest"}){const d=o.useRef(null),j=o.useRef(null),b=o.useRef(!0),g=o.useRef(0),c=o.useRef(a),v=o.useRef(l),[h,$]=o.useState(!0),[A,I]=o.useState(!1),M=p.useReducedMotion();o.useEffect(()=>{c.current=a},[a]),o.useEffect(()=>{v.current=l},[l]);const k=o.useCallback(u=>{b.current!==u&&(b.current=u,$(u),c.current?.(u))},[]),F=o.useCallback(()=>{const u=d.current;u&&(I(u.scrollHeight>u.clientHeight),se(u)&&te(u,v.current)&&k(!0))},[k]),C=o.useCallback(u=>{const N=d.current;N&&(typeof N.scrollTo=="function"?N.scrollTo({top:N.scrollHeight,behavior:u}):N.scrollTop=N.scrollHeight,g.current=N.scrollTop)},[]);o.useLayoutEffect(()=>{b.current&&C("auto"),F()},[r,C,F]),o.useEffect(()=>{const u=j.current,N=d.current;if(!u||!N||typeof ResizeObserver>"u")return;const L=new ResizeObserver(()=>{b.current&&C("auto"),F()});return L.observe(u),L.observe(N),()=>L.disconnect()},[C,F]);const U=()=>{const u=d.current;if(!u||!se(u))return;const N=u.scrollTop;te(u,l)?k(!0):N<g.current-1&&k(!1),g.current=N,F()},x=()=>{k(!0),C(M?"auto":"smooth"),d.current?.focus({preventScroll:!0})};return e.jsxs("div",{"data-testid":m,"data-following":h,className:i.cn(W.base,f,w.base),children:[e.jsx(i.ScrollShadow,{ref:d,role:"region","aria-label":s,tabIndex:0,size:24,onScroll:U,"data-testid":`${m}-scroller`,className:i.cn(W.scroller,w.scroller),children:e.jsx("div",{ref:j,className:i.cn(W.content,w.content),children:t})}),!h&&A?e.jsx("div",{className:W.jumpBar,children:e.jsx(p.Button,{type:"button",size:"sm",radius:"full",color:"default",variant:"solid",onPress:x,testId:`${m}-jump`,startContent:e.jsx(p.Icon,{icon:"solar:arrow-down-linear",width:16,height:16,"aria-hidden":"true"}),className:i.cn(W.jump,w.jump),children:n})}):null]})}ue.displayName="ScrollToLatest";const D={root:"min-w-0 space-y-3 text-sm leading-relaxed text-foreground [overflow-wrap:anywhere]",paragraph:"m-0",heading:{1:"m-0 text-xl font-bold",2:"m-0 text-lg font-semibold",3:"m-0 text-base font-semibold",4:"m-0 text-sm font-semibold",5:"m-0 text-sm font-semibold",6:"m-0 text-sm font-medium"},bulletList:"m-0 list-disc space-y-1 ps-5",orderedList:"m-0 list-decimal space-y-1 ps-5",listItem:"ps-1 [&>ol]:mt-1 [&>ul]:mt-1",blockquote:"m-0 space-y-2 border-s-2 border-default-300 ps-3 text-default-600",code:"rounded bg-default-100 px-1 py-0.5 font-mono text-[0.8125em]",codeWrap:"max-w-full overflow-x-auto rounded-md bg-default-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ai-focus",pre:"m-0 whitespace-pre p-3 font-mono text-xs [overflow-wrap:normal]",rule:"my-3 border-0 border-t border-divider",tableWrap:"max-w-full overflow-x-auto rounded-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ai-focus",table:"w-full border-collapse text-sm",headerCell:"whitespace-nowrap border-b border-divider px-2 py-1.5 font-semibold",cell:"border-b border-divider px-2 py-1.5 align-top [overflow-wrap:normal]",align:{left:"text-start",center:"text-center",right:"text-end"},link:"text-ai-accent underline underline-offset-2 hover:no-underline",linkDomain:"inline-block text-default-500 [unicode-bidi:isolate]",srOnly:"sr-only"},Le=["reference","autolink","html_block","html_inline","strikethrough","replacements","smartquotes","linkify","text_join"];let H=null;function Me(){return H||(H=new je("default",{html:!1,linkify:!1,typographer:!1,breaks:!1}),H.disable(Le,!0)),H}function Re(t){let s=0,r=t.length;for(;s<r&&t.charCodeAt(s)<=32;)s+=1;for(;r>s&&t.charCodeAt(r-1)<=32;)r-=1;return t.slice(s,r).replace(/[\t\n\r]/g,"")}const Ee=/^([a-z][a-z\d+.-]*):/i,Fe=/[\p{Cc}\p{Cf}\p{Z}]/u;function fe(t){let s;try{s=decodeURIComponent(t.pathname)}catch{return null}return s&&!Fe.test(s)?s:null}function Ie(t){const s=t.indexOf("=");if(s<0)return!1;let r,n;try{r=decodeURIComponent(t.slice(0,s)).toLowerCase(),n=decodeURIComponent(t.slice(s+1))}catch{return!1}return n.includes("&")?!1:r==="body"?!0:r==="subject"&&!new RegExp("\\p{Cc}","u").test(n)}function Oe(t){if(!fe(t))return null;const s=t.search.slice(1).split("&").filter(Ie);return`mailto:${t.pathname}${s.length>0?`?${s.join("&")}`:""}`}function Y(t){const s=Re(t),r=Ee.exec(s)?.[1].toLowerCase();if(r==="http"||r==="https"){if(!/^https?:\/\//i.test(s))return null;try{return new URL(s).href}catch{return null}}if(r==="mailto")try{return Oe(new URL(s))}catch{return null}return r||/^[/\\]{2}/.test(s)?null:t}const pe=t=>{if(/^https?:/i.test(t))return Y(t);if(/^mailto:/i.test(t)){const s=t.slice(7).split(/[?#]/)[0];return s?Y(`mailto:${s}`):null}return null};function De(t){try{const s=new URL(t);return s.protocol==="http:"||s.protocol==="https:"?s.hostname.replace(/^www\./,""):s.protocol==="mailto:"?fe(s)??"":""}catch{return""}}function J(t){const s=[],r=[s];for(const n of t){const a=r[r.length-1];if(n.nesting===1){const l={token:n,children:[]};a.push(l),r.push(l.children)}else n.nesting===-1?r.length>1&&r.pop():a.push({token:n,children:[]})}return s}const ne=/(\[[1-9]\d{0,2}\])/;function Ue(t,s,r){return!s.renderCitation||s.inLink||!ne.test(t)?t:e.jsx(o.Fragment,{children:t.split(ne).map((n,a)=>{const l=/^\[([1-9]\d{0,2})\]$/.exec(n);return l?e.jsx(o.Fragment,{children:s.renderCitation?.(Number(l[1]))},a):n})},r)}function Pe(t,s,r,n){const a=r.linkPolicy(t.attrGet("href")??""),l=a?Y(a):null;if(!l)return e.jsx(o.Fragment,{children:s},n);const f=De(l);return e.jsxs("a",{href:l,target:"_blank",rel:"noopener noreferrer nofollow","data-testid":`${r.dataTestId}-link`,className:D.link,children:[s,f?e.jsxs("span",{className:D.linkDomain,children:[" (",f,")"]}):null,e.jsxs("span",{className:D.srOnly,children:[" (",r.newTabLabel,")"]})]},n)}function re(t){const s=/text-align:\s*(left|center|right)/.exec(t.attrGet("style")??"");return s?D.align[s[1]]:void 0}function B(t,s,r){return t.map((n,a)=>We(n,s,`${r}.${a}`))}function We({token:t,children:s},r,n){const a=()=>B(s,r,n),l=D;switch(t.type){case"paragraph_open":return t.hidden?e.jsx(o.Fragment,{children:a()},n):e.jsx("p",{className:l.paragraph,children:a()},n);case"heading_open":{const f=Math.min(6,Math.max(1,Number(t.tag.slice(1))+r.headingOffset));return o.createElement(`h${f}`,{key:n,className:l.heading[f]},a())}case"bullet_list_open":return e.jsx("ul",{className:l.bulletList,children:a()},n);case"ordered_list_open":{const f=Number(t.attrGet("start")??1);return e.jsx("ol",{start:f===1?void 0:f,className:l.orderedList,children:a()},n)}case"list_item_open":return e.jsx("li",{className:l.listItem,children:a()},n);case"blockquote_open":return e.jsx("blockquote",{className:l.blockquote,children:a()},n);case"table_open":return e.jsx("div",{role:"group","aria-label":r.tableLabel,tabIndex:0,"data-testid":`${r.dataTestId}-table`,className:l.tableWrap,children:e.jsx("table",{className:l.table,children:a()})},n);case"thead_open":return e.jsx("thead",{children:a()},n);case"tbody_open":return e.jsx("tbody",{children:a()},n);case"tr_open":return e.jsx("tr",{children:a()},n);case"th_open":return e.jsx("th",{scope:"col",className:i.cn(l.headerCell,re(t)??l.align.left),children:a()},n);case"td_open":return e.jsx("td",{className:i.cn(l.cell,re(t)),children:a()},n);case"strong_open":return e.jsx("strong",{children:a()},n);case"em_open":return e.jsx("em",{children:a()},n);case"link_open":return Pe(t,B(s,{...r,inLink:!0},n),r,n);case"inline":return e.jsx(o.Fragment,{children:B(J(t.children??[]),r,n)},n);case"text":return Ue(t.content,r,n);case"text_special":return t.content;case"softbreak":return`
2
+ `;case"hardbreak":return e.jsx("br",{},n);case"code_inline":return e.jsx("code",{className:l.code,children:t.content},n);case"code_block":case"fence":return e.jsx("div",{role:"group","aria-label":r.codeLabel,tabIndex:0,"data-testid":`${r.dataTestId}-code`,className:l.codeWrap,children:e.jsx("pre",{className:l.pre,children:e.jsx("code",{children:t.content})})},n);case"hr":return e.jsx("hr",{className:l.rule},n);case"image":return e.jsx(o.Fragment,{children:B(J(t.children??[]),r,n)},n);default:return s.length>0?e.jsx(o.Fragment,{children:a()},n):t.content?e.jsx(o.Fragment,{children:t.content},n):null}}function me({source:t,linkPolicy:s=pe,headingOffset:r=2,renderCitation:n,newTabLabel:a="opens in a new tab",tableLabel:l="Table",codeLabel:f="Code",className:w,"data-testid":m="assistant-markdown"}){const d=o.useMemo(()=>J(Me().parse(t,{})),[t]),j={headingOffset:Number.isFinite(r)?Math.trunc(r):2,linkPolicy:s,renderCitation:n,newTabLabel:a,tableLabel:l,codeLabel:f,dataTestId:m,inLink:!1};return e.jsx("div",{"data-testid":m,className:i.cn(D.root,w),children:B(d,j,"md")})}me.displayName="AssistantMarkdown";const he="inline-flex items-center rounded border border-ai-border bg-ai-fill px-1 text-[0.6875rem] font-semibold leading-4 tabular-nums text-ai-accent",K={base:`ms-0.5 align-baseline ${he}`,interactive:"cursor-pointer transition-colors hover:border-ai-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ai-focus motion-reduce:transition-none",srOnly:"sr-only"};function xe({index:t,label:s,onSelect:r,"data-testid":n=`citation-marker-${t}`}){return r?e.jsxs("button",{type:"button","aria-label":s,onClick:r,"data-testid":n,className:i.cn(K.base,K.interactive),children:["[",t,"]"]}):e.jsxs("span",{"data-testid":n,className:K.base,children:[e.jsxs("span",{"aria-hidden":"true",children:["[",t,"]"]}),e.jsx("span",{className:K.srOnly,children:s})]})}xe.displayName="CitationMarker";const Be={base:"inline-flex h-auto min-h-8 min-w-0 max-w-full items-center justify-start gap-1.5 rounded-full border border-default-200 bg-content1 px-2.5 py-1 text-xs text-foreground",interactive:"data-[hover=true]:bg-default-100 data-[focus-visible=true]:outline-none data-[focus-visible=true]:ring-2 data-[focus-visible=true]:ring-ai-focus",disabled:"border-dashed",marker:`flex-none ${he}`,srOnly:"sr-only",icon:"flex-none text-default-600",kind:"flex-none font-semibold",title:"min-w-0 truncate",date:"flex-none tabular-nums text-default-600",reason:"flex flex-none items-center gap-1 text-default-600",separator:"flex-none text-default-600"};function Z({kindLabel:t,title:s,date:r,icon:n,marker:a,onOpen:l,isDisabled:f=!1,disabledReason:w,"data-testid":m="source-pill"}){const d=Be,j=e.jsxs(e.Fragment,{children:[a!==void 0&&(f||!l)?e.jsxs("span",{className:d.srOnly,children:["[",a,"], "]}):null,a!==void 0?e.jsx("span",{"aria-hidden":"true","data-testid":`${m}-marker`,className:d.marker,children:a}):null,n?e.jsx(p.Icon,{icon:n,width:14,height:14,"aria-hidden":"true",className:d.icon}):null,e.jsx("span",{className:d.kind,children:t}),e.jsx("span",{"aria-hidden":"true",className:d.separator,children:"·"}),e.jsx("span",{"data-testid":`${m}-title`,className:d.title,children:s}),r?e.jsx("span",{className:d.date,children:r}):null]});return f||!l?e.jsxs("span",{"data-testid":m,"data-disabled":f||void 0,title:s,className:i.cn(d.base,f&&d.disabled),children:[j,f&&w?e.jsxs("span",{"data-testid":`${m}-reason`,className:d.reason,children:[e.jsx(p.Icon,{icon:"solar:unlink-minimalistic-linear",width:14,height:14,"aria-hidden":"true"}),w]}):null]}):e.jsx(p.Button,{variant:"light",color:"default",radius:"full",onPress:l,title:s,"aria-label":[a!==void 0?`[${a}]`:null,t,s,r].filter(Boolean).join(", "),testId:m,className:i.cn(d.base,d.interactive),children:j})}Z.displayName="SourcePill";const ze={base:"w-full px-0",item:"shadow-none",trigger:`gap-2 py-1.5 ${p.stillTransitionClass}`,title:"text-sm font-medium text-default-700",count:"ms-1 tabular-nums text-default-600",indicator:"text-default-500",content:"pb-2 pt-0",groups:"flex flex-col gap-3",group:"flex flex-col gap-1.5",groupLabel:"m-0 text-xs font-semibold uppercase tracking-wide text-default-600",list:"m-0 flex list-none flex-wrap gap-1.5 p-0",listItem:"max-w-full rounded-full outline-none focus:ring-2 focus:ring-ai-focus"},V="sources",He=1e3,Ke=700;function qe(t){const s=new Map;for(const r of t){const n=s.get(r.groupKey)??{key:r.groupKey,label:r.groupLabel,items:[]};n.items.push(r),s.set(r.groupKey,n)}return[...s.values()]}const Te=Object.assign(o.forwardRef(function({items:s,title:r,titleText:n,isExpanded:a,defaultExpanded:l=!1,onExpandedChange:f,className:w,"data-testid":m="source-list"},d){const[j,b]=o.useState(l),g=o.useRef(new Map),c=o.useRef(null),v=o.useRef(null),h=o.useId(),$=p.useReducedMotion(),A=a??j,I=x=>{a===void 0&&b(x),f?.(x)},M=(x,u)=>x.scrollIntoView?.({block:"nearest",behavior:u?"smooth":"auto"}),k=(x,u)=>{if(x.focus({preventScroll:!0}),v.current){v.current=x;return}if(!u||$){M(x,!$);return}v.current=x,window.setTimeout(()=>{const N=v.current;N&&(v.current=null,M(N,!0))},Ke)},F=o.useMemo(()=>({onAnimationComplete:x=>{const u=v.current;x!=="enter"||!u||(v.current=null,u.scrollIntoView?.({block:"nearest",behavior:"smooth"}))}}),[]);if(o.useEffect(()=>{A||(c.current=null,v.current=null)},[A]),o.useImperativeHandle(d,()=>({reveal:x=>{if(!s.some(N=>N.id===x))return;const u=g.current.get(x);if(A&&u){k(u,!1);return}c.current={id:x,at:Date.now()},A||I(!0)}})),s.length===0)return null;const C=ze,U=qe(s);return e.jsx(i.Accordion,{"data-testid":m,disableAnimation:$,selectedKeys:A?new Set([V]):new Set,onSelectionChange:x=>I(x==="all"||x.has(V)),className:i.cn(C.base,w),children:e.jsx(i.AccordionItem,{"data-testid":`${m}-group`,motionProps:F,title:e.jsxs(e.Fragment,{children:[r,e.jsxs("span",{className:C.count,children:["(",s.length,")"]})]}),textValue:`${typeof r=="string"?r:n??""} (${s.length})`,classNames:{base:C.item,trigger:C.trigger,title:C.title,indicator:C.indicator,content:C.content},children:e.jsx("div",{className:C.groups,onFocus:x=>x.stopPropagation(),children:U.map((x,u)=>{const N=`${h}-group-${u}`;return e.jsxs("div",{role:"group","aria-labelledby":N,"data-testid":`${m}-kind-${x.key}`,className:C.group,children:[e.jsxs("p",{id:N,className:C.groupLabel,children:[x.label," (",x.items.length,")"]}),e.jsx("ul",{className:C.list,children:x.items.map(L=>e.jsx("li",{tabIndex:-1,ref:P=>{if(!P){g.current.delete(L.id);return}g.current.set(L.id,P);const z=c.current;z?.id===L.id&&(c.current=null,Date.now()-z.at<=He&&k(P,!0))},"data-testid":`${m}-item-${L.id}`,className:C.listItem,children:e.jsx(Z,{...L,"data-testid":`${m}-pill-${L.id}`})},L.id))})]},x.key)})})},V)})}),{displayName:"SourceList"}),Ge={base:"w-full border border-default-200 bg-content1 shadow-none",deleted:"border-dashed",header:"flex flex-col items-start gap-1 px-4 pb-0 pt-3",kindRow:"flex min-w-0 flex-wrap items-center gap-2 text-xs text-default-600",kind:"inline-flex items-center gap-1.5 font-medium",badge:"inline-flex items-center gap-1 rounded-md border border-default-300 bg-default-100 px-1.5 py-0.5 text-[0.6875rem] font-semibold uppercase tracking-wide text-default-700",title:"m-0 min-w-0 text-sm font-semibold text-foreground [overflow-wrap:anywhere]",titleDeleted:"text-default-600",meta:"text-xs tabular-nums text-default-600 [overflow-wrap:anywhere]",body:"min-w-0 px-4 py-3",skeleton:"flex flex-col gap-2",skeletonLine:"h-3 rounded-md",skeletonWidths:["w-3/4","w-full","w-2/3"],footer:"flex flex-wrap items-center justify-between gap-2 border-t border-divider px-4 py-2.5",status:"flex min-w-0 items-center gap-1.5 text-xs font-medium [overflow-wrap:anywhere]",spinner:"size-3.5",actions:"flex flex-wrap items-center gap-1.5"},Ve={saving:"text-default-600",saved:"text-success-700",failed:"text-danger-700",deleted:"text-default-600"},Ye={saved:"solar:check-circle-linear",failed:"solar:danger-triangle-linear",deleted:"solar:trash-bin-minimalistic-linear"};function Je(t){return o.Children.toArray(t).some(s=>s!=="")}function be({title:t,kindLabel:s,icon:r,status:n="saved",statusLabel:a,meta:l,badge:f,children:w,actions:m,titleAs:d="p",className:j,"data-testid":b="artifact-card"}){const g=o.useId(),c=Ge,v=n==="deleted",h=Je(w),$=!v&&(h||n==="saving");return e.jsxs(i.Card,{as:"article","aria-labelledby":g,shadow:"none",radius:"lg","data-status":n,"data-testid":b,className:i.cn(c.base,v&&c.deleted,j),children:[e.jsxs(i.CardHeader,{className:c.header,children:[e.jsxs("div",{className:c.kindRow,children:[e.jsxs("span",{"data-testid":`${b}-kind`,className:c.kind,children:[r?e.jsx(p.Icon,{icon:r,width:16,height:16,"aria-hidden":"true"}):null,s]}),p.hasContent(f)?e.jsx("span",{"data-testid":`${b}-badge`,className:c.badge,children:f}):null]}),e.jsx(d,{id:g,"data-testid":`${b}-title`,className:i.cn(c.title,v&&c.titleDeleted),children:t}),p.hasContent(l)?e.jsx("div",{"data-testid":`${b}-meta`,className:c.meta,children:l}):null]}),$?e.jsx(i.CardBody,{"data-testid":`${b}-body`,className:c.body,children:h?w:e.jsx("div",{"aria-hidden":"true","data-testid":`${b}-skeleton`,className:c.skeleton,children:c.skeletonWidths.map(A=>e.jsx(p.Skeleton,{className:i.cn(c.skeletonLine,A)},A))})}):null,e.jsxs(i.CardFooter,{className:c.footer,children:[e.jsxs("div",{role:"status","aria-live":"polite","data-testid":`${b}-status`,className:i.cn(c.status,Ve[n]),children:[n==="saving"?e.jsx(i.Spinner,{size:"sm",color:"current","aria-hidden":"true",classNames:{base:c.spinner,wrapper:c.spinner}}):e.jsx(p.Icon,{icon:Ye[n],width:14,height:14,"aria-hidden":"true"}),e.jsx("span",{children:a})]}),p.hasContent(m)?e.jsx("div",{"data-testid":`${b}-actions`,className:c.actions,children:m}):null]})]})}be.displayName="ArtifactCard";exports.ArtifactCard=be;exports.AssistantActivity=oe;exports.AssistantComposer=de;exports.AssistantMarkdown=me;exports.AssistantMessage=le;exports.AssistantNotice=ce;exports.CitationMarker=xe;exports.ScrollToLatest=ue;exports.SourceList=Te;exports.SourcePill=Z;exports.defaultAssistantLinkPolicy=pe;exports.formatAssistantDuration=ie;
@@ -8,3 +8,13 @@ export { AssistantComposer } from './patterns/AssistantComposer';
8
8
  export type { AssistantComposerProps, AssistantComposerSuggestion } from './patterns/AssistantComposer';
9
9
  export { ScrollToLatest } from './patterns/ScrollToLatest';
10
10
  export type { ScrollToLatestClassNames, ScrollToLatestProps } from './patterns/ScrollToLatest';
11
+ export { AssistantMarkdown, defaultAssistantLinkPolicy } from './patterns/AssistantMarkdown';
12
+ export type { AssistantMarkdownLinkPolicy, AssistantMarkdownProps } from './patterns/AssistantMarkdown';
13
+ export { CitationMarker } from './patterns/CitationMarker';
14
+ export type { CitationMarkerProps } from './patterns/CitationMarker';
15
+ export { SourcePill } from './patterns/SourcePill';
16
+ export type { SourcePillProps } from './patterns/SourcePill';
17
+ export { SourceList } from './patterns/SourceList';
18
+ export type { SourceListHandle, SourceListItem, SourceListProps } from './patterns/SourceList';
19
+ export { ArtifactCard } from './patterns/ArtifactCard';
20
+ export type { ArtifactCardProps, ArtifactCardStatus } from './patterns/ArtifactCard';