@astralbeam/sdk 0.0.5 → 0.0.6
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.
- package/README.md +4 -2
- package/dist/{chat-BlacYOz8.js → chat-CXhDO2tI.js} +3 -3
- package/dist/client-utils-CG2gIHHK.js +1 -0
- package/dist/client.d.ts +4 -0
- package/dist/client.js +1 -1
- package/dist/react.d.ts +6 -0
- package/dist/react.js +5 -1
- package/package.json +1 -1
- package/dist/client-utils-DyEcBInP.js +0 -1
package/README.md
CHANGED
|
@@ -23,6 +23,8 @@ const sidebar = document.getElementById("sidebar")
|
|
|
23
23
|
const handle = mountAstralBeamChat(sidebar, {
|
|
24
24
|
title: "Dashboard assistant", // name in the widget header (default "AstralBeam")
|
|
25
25
|
showHeader: true, // header with the title and the reset button (default true)
|
|
26
|
+
emptyTitle: "Ask the dashboard assistant", // headline on the empty transcript
|
|
27
|
+
emptyDescription: "It can restart services and open dashboards for you.", // subtitle under it
|
|
26
28
|
chatEndpoint: "https://myapp.example/api/chat", // AstralBeam chat endpoint (default "/api/chat")
|
|
27
29
|
authEndpoint: "/api/astralbeam/token", // host endpoint minting the chat token (required today)
|
|
28
30
|
systemPrompt: "You are the assistant of an infrastructure dashboard.",
|
|
@@ -62,7 +64,7 @@ const handle = mountAstralBeamChat(sidebar, {
|
|
|
62
64
|
// later: handle.update({ colorScheme: "dark", widgets: nextWidgets }), handle.unmount()
|
|
63
65
|
```
|
|
64
66
|
|
|
65
|
-
The chat widget renders inside a shadow root on the mount target, so its styles never leak into (or absorb from) the host page. It streams the conversation from the `chatEndpoint` (an AstralBeam webapp's `/api/chat`), forwarding the optional `systemPrompt` for the endpoint to append to the agent's instructions. When `authEndpoint` is present, the widget obtains a short-lived bearer token before enabling its composer and renews it in memory as needed. The AstralBeam endpoint currently answers unauthenticated runs with `401`, so `authEndpoint` is required in practice. The `title` option names the assistant in the widget's header, and `showHeader: false` hides that header — title and reset button both — giving the transcript the widget's full height. Assistant replies are rendered as Markdown (headings, lists, tables, links, and fenced code) with [TanStack Markdown](https://tanstack.com/markdown), using its streaming profile so a partial reply stays stable as it arrives; raw HTML in a reply is escaped and executable link protocols are dropped. The `colorScheme` option picks the widget's color scheme — `"system"` (the default) follows the OS `prefers-color-scheme` setting live. The `theme` option overrides the widget's theming CSS variables — the [shadcn/ui tokens](https://ui.shadcn.com/docs/theming) such as `--background`, `--primary`, `--radius`, and the `--font-sans`/`--font-heading`/`--font-mono` font stacks — per color scheme: mirroring shadcn's `:root`/`.dark` split, `theme.light` is the base applied in both schemes and `theme.dark` overrides it when the resolved scheme is dark.
|
|
67
|
+
The chat widget renders inside a shadow root on the mount target, so its styles never leak into (or absorb from) the host page. It streams the conversation from the `chatEndpoint` (an AstralBeam webapp's `/api/chat`), forwarding the optional `systemPrompt` for the endpoint to append to the agent's instructions. When `authEndpoint` is present, the widget obtains a short-lived bearer token before enabling its composer and renews it in memory as needed. The AstralBeam endpoint currently answers unauthenticated runs with `401`, so `authEndpoint` is required in practice. The `title` option names the assistant in the widget's header, and `showHeader: false` hides that header — title and reset button both — giving the transcript the widget's full height. The `emptyTitle` and `emptyDescription` options replace the headline and subtitle the empty transcript shows before the first message. Assistant replies are rendered as Markdown (headings, lists, tables, links, and fenced code) with [TanStack Markdown](https://tanstack.com/markdown), using its streaming profile so a partial reply stays stable as it arrives; raw HTML in a reply is escaped and executable link protocols are dropped. The `colorScheme` option picks the widget's color scheme — `"system"` (the default) follows the OS `prefers-color-scheme` setting live. The `theme` option overrides the widget's theming CSS variables — the [shadcn/ui tokens](https://ui.shadcn.com/docs/theming) such as `--background`, `--primary`, `--radius`, and the `--font-sans`/`--font-heading`/`--font-mono` font stacks — per color scheme: mirroring shadcn's `:root`/`.dark` split, `theme.light` is the base applied in both schemes and `theme.dark` overrides it when the resolved scheme is dark.
|
|
66
68
|
|
|
67
69
|
### Attachments
|
|
68
70
|
|
|
@@ -127,7 +129,7 @@ The default lifetime is five minutes and the helper rejects lifetimes above ten
|
|
|
127
129
|
npm install @astralbeam/sdk react react-dom
|
|
128
130
|
```
|
|
129
131
|
|
|
130
|
-
Render `<AstralBeamChat>` wherever the chat sidebar should appear; it fills its container's height, mounts the chat widget on mount, and unmounts it on cleanup. The `title`, `showHeader`, `chatEndpoint`, `authEndpoint`, `systemPrompt`, and `tools` props work like the vanilla options (tool `execute` calls always reach the latest prop value, so they can close over current component state). The `colorScheme` prop (`"light" | "dark" | "system"`, default `"system"`) picks the color scheme, the `theme` prop overrides the widget's theming CSS variables per scheme, and the `attachments` prop configures or disables composer attachments — all like the vanilla options. Every prop except the fixed `chatEndpoint` and `authEndpoint` applies immediately on change — the wrapper forwards them to `handle.update` from an effect. Register widgets through the `widgets` prop — the same tool-definition shape as the vanilla client, except `render` returns JSX instead of drawing into a container. The agent reads each `description` and `parameters` to decide when to render a widget and with which props. Rendered widgets live in your app's React tree and are projected into the chat through slots, so state, context, and event handlers keep working:
|
|
132
|
+
Render `<AstralBeamChat>` wherever the chat sidebar should appear; it fills its container's height, mounts the chat widget on mount, and unmounts it on cleanup. The `title`, `showHeader`, `emptyTitle`, `emptyDescription`, `chatEndpoint`, `authEndpoint`, `systemPrompt`, and `tools` props work like the vanilla options (tool `execute` calls always reach the latest prop value, so they can close over current component state). The `colorScheme` prop (`"light" | "dark" | "system"`, default `"system"`) picks the color scheme, the `theme` prop overrides the widget's theming CSS variables per scheme, and the `attachments` prop configures or disables composer attachments — all like the vanilla options. Every prop except the fixed `chatEndpoint` and `authEndpoint` applies immediately on change — the wrapper forwards them to `handle.update` from an effect. Register widgets through the `widgets` prop — the same tool-definition shape as the vanilla client, except `render` returns JSX instead of drawing into a container. The agent reads each `description` and `parameters` to decide when to render a widget and with which props. Rendered widgets live in your app's React tree and are projected into the chat through slots, so state, context, and event handlers keep working:
|
|
131
133
|
|
|
132
134
|
```tsx
|
|
133
135
|
import { AstralBeamChat } from "@astralbeam/sdk/react"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{t as e}from"./client-utils-
|
|
1
|
+
import{t as e}from"./client-utils-CG2gIHHK.js";var t=Object.create,n=Object.defineProperty,r=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,a=Object.getPrototypeOf,o=Object.prototype.hasOwnProperty,s=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),c=(e,t,a,s)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var c=i(t),l=0,u=c.length,d;l<u;l++)d=c[l],!o.call(e,d)&&d!==a&&n(e,d,{get:(e=>t[e]).bind(null,d),enumerable:!(s=r(t,d))||s.enumerable});return e},l=(e,r,i)=>(i=e==null?{}:t(a(e)),c(r||!e||!e.__esModule?n(i,`default`,{value:e,enumerable:!0}):i,e)),u=s((e=>{
|
|
2
2
|
/**
|
|
3
3
|
* @license React
|
|
4
4
|
* scheduler.production.js
|
|
@@ -71,7 +71,7 @@ var Os=s((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react
|
|
|
71
71
|
`)}}parseParagraph(){let e=[];for(;this.index<this.lines.length;){let t=this.current();if(Vd(t)||e.length>0&&Cf(t,this.next()))break;e.push(t.trim()),this.index++}return{type:`paragraph`,children:Jd(e.join(`
|
|
72
72
|
`),this.options)}}createHeadingId(e){if(this.options.headingIds===!1)return;let t=Ud(e);return typeof this.options.headingIds==`function`?this.options.headingIds(t,this.index):this.slugger(t)}current(){return this.lines[this.index]??``}next(){return this.lines[this.index+1]}};function gf(e){if(!e)return{};let t=e.match(/^([A-Za-z0-9_+.#-]+)/)?.[1],n=t?e.slice(t.length).trim():e,r=n.match(/(?:^|\s)(?:title|file)=(?:"([^"]+)"|'([^']+)'|([^\s}]+))/),i=n.match(/(?:^|\s)framework=(?:"([^"]+)"|'([^']+)'|([^\s}]+))/),a=n.match(/\{([^}]+)\}|(?:^|\s)lines=([^\s]+)/),o=yf(a?.[1]??a?.[2]??``),s=r?r[1]??r[2]??r[3]:void 0,c=i?i[1]??i[2]??i[3]:void 0;return{...t?{lang:t}:{},...n?{meta:n}:{},...s?{title:s,file:s}:{},...c?{framework:c.toLowerCase()}:{},...o.length?{highlightLines:o}:{}}}function _f(e){let t=Object.create(null),n=Object.create(null),r=new Map,i=[],a,o=0,s=0;for(;s<e.length;){let c=e[s],l=c.match(/^ {0,3}(`{3,}|~{3,})/);if(l){let e=l[1][0];a?e===a&&l[1].length>=o&&(a=void 0,o=0):(a=e,o=l[1].length),i.push(c),s++;continue}if(!a){let i=c.match(/^ {0,3}\[\^([^\]\n]+)\]:[ \t]*(.*)$/);if(i){let t=i[1],a=[i[2]??``];for(s++;s<e.length;){let t=e[s];if(!/^(?: {4,}|\t)/.test(t))break;a.push(t.replace(/^(?: {4}|\t)/,``)),s++}let o=Kd(t);if(!n[o]){let e=qd(t)||`footnote`,i=(r.get(e)??0)+1;r.set(e,i),n[o]={label:t,content:a.join(`
|
|
73
73
|
`),id:i===1?e:`${e}-${i}`}}continue}let a=c.match(/^ {0,3}\[([^\]\n]+)\]:[ \t]*(\S+)(?:[ \t]+(?:"([^"]*)"|'([^']*)'|\(([^)]*)\)))?[ \t]*$/);if(a){let e=a[3]??a[4]??a[5];t[Kd(a[1])]={href:a[2].replace(/^<|>$/g,``),...e===void 0?{}:{title:e}},s++;continue}}i.push(c),s++}return{lines:i,references:t,footnotes:n}}function vf(e,t,n){let r=[];for(let i=0;i<t.length;i++){let a=e[t[i]];a&&r.push({id:a.id??(qd(a.label)||`footnote`),number:i+1,children:new hf(Bd(a.content).split(`
|
|
74
|
-
`),n,Wd()).parse()})}for(let e of r){let r=n.footnoteCounts?.[t[e.number-1]]??1;r>1&&(e.referenceCount=r)}return{type:`footnotes`,items:r}}function yf(e){let t=new Set;for(let n of e.split(`,`)){let e=n.trim().match(/^(\d+)(?:-(\d+))?$/);if(!e)continue;let r=Number(e[1]),i=Number(e[2]??e[1]);for(let e=r;e<=i&&e<r+1e3;e++)t.add(e)}return[...t].sort((e,t)=>e-t)}function bf(e){let t=e.match(/^(\s{0,8})([-+*]|\d{1,9}[.)])(?:([ \t]+)(.*))?$/);if(!t)return;let n=t[2],r=/\d/.test(n[0]);return{ordered:r,...r?{number:Number.parseInt(n,10)}:{},indent:t[1].length,marker:r?n.at(-1):n,contentIndent:t[1].length+n.length+(t[3]?.length??1),content:t[4]??``}}function xf(e,t){return e.ordered===t.ordered&&e.marker===t.marker}function Sf(e){return e.match(/^ */)?.[0].length??0}function Cf(e,t){let n=bf(e);return/^ {0,3}(`{3,}|~{3,})/.test(e)||/^ {0,3}#{1,6}(?:\s+|$)/.test(e)||/^ {0,3}([-*_])(?:\s*\1){2,}\s*$/.test(e)||/^ {0,3}>\s?/.test(e)||n!==void 0&&(!n.ordered||n.number===1)||!!t&&wf(e,t)}function wf(e,t){if(!e.includes(`|`))return!1;let n=Tf(t);return n.length===Tf(e).length&&n.every(e=>/^:?-+:?$/.test(e.trim()))}function Tf(e){let t=e.trim();t.startsWith(`|`)&&(t=t.slice(1)),t.endsWith(`|`)&&(t=t.slice(0,-1));let n=[],r=``;for(let e=0;e<t.length;e++){let i=t[e];if(i===`\\`&&t[e+1]===`|`){r+=`|`,e++;continue}if(i===`|`){n.push(r.trim()),r=``;continue}r+=i}return n.push(r.trim()),n}function Ef(e){let t=e.trim();if(t.startsWith(`:`)&&t.endsWith(`:`))return`center`;if(t.endsWith(`:`))return`right`;if(t.startsWith(`:`))return`left`}function Df(e,t){return{type:`tableCell`,children:Jd(e,t)}}function Of({children:e,...t}){return(0,v.createElement)(v.Fragment,null,kf(e,t))}function kf(e,t={}){return(typeof e==`string`?mf(e,t):e).children.map((e,n)=>Af(e,t,`b:${n}`))}function Af(e,t={},n){switch(e.type){case`heading`:return $(t,`h${e.depth}`,{key:n,...e.id?{id:e.id}:{},...e.framework?{"data-framework":e.framework}:{}},Mf(e.children,t),Hf(e.id,t));case`paragraph`:return $(t,`p`,{key:n},Mf(e.children,t));case`code`:return Nf(e,t,n);case`list`:return $(t,e.ordered?`ol`:`ul`,{key:n,...e.ordered&&e.start&&e.start!==1?{start:e.start}:{}},e.items.map((n,r)=>$(t,`li`,{key:r},Pf(n.children,n.checked,e.loose,t,`${r}`))));case`blockquote`:return $(t,`blockquote`,{key:n},e.children.map((e,r)=>Af(e,t,`${n}:${r}`)));case`table`:return $(t,`table`,{key:n},$(t,`thead`,null,$(t,`tr`,null,e.header.map((n,r)=>If(`th`,n,e.align[r],t,r)))),e.rows.length?$(t,`tbody`,null,e.rows.map((n,r)=>$(t,`tr`,{key:r},n.map((n,r)=>If(`td`,n,e.align[r],t,r))))):null);case`footnotes`:return Lf(e.items,t,n);case`thematicBreak`:return $(t,`hr`,{key:n});case`html`:return t.allowHtml?$(t,`div`,{key:n,dangerouslySetInnerHTML:{__html:e.value}}):$(t,`p`,{key:n},e.value);case`callout`:return $(t,`div`,{key:n,className:`markdown-alert markdown-alert-${e.kind.toLowerCase()}`},$(t,`p`,{className:`markdown-alert-title`},e.title),$(t,`div`,{className:`markdown-alert-content`},e.children.map((e,r)=>Af(e,t,`${n}:${r}`))));case`component`:return Vf(e,t,n)}}function jf(e,t={},n){switch(e.type){case`text`:return e.value;case`inlineCode`:return $(t,`code`,{key:n},e.value);case`strong`:return $(t,`strong`,{key:n},Mf(e.children,t));case`emphasis`:return $(t,`em`,{key:n},Mf(e.children,t));case`strike`:return $(t,`del`,{key:n},Mf(e.children,t));case`footnoteReference`:return $(t,`sup`,{key:n},$(t,`a`,{id:`user-content-fnref-${Bf(e)}`,"data-footnote-ref":``,"aria-describedby":`footnote-label`,href:`#user-content-fn-${e.id}`},e.number));case`link`:return $(t,`a`,{key:n,href:e.href,...e.title?{title:e.title}:{}},Mf(e.children,t));case`image`:return $(t,`img`,{key:n,src:e.src,alt:e.alt,...e.title?{title:e.title}:{}});case`break`:return $(t,`br`,{key:n});case`inlineHtml`:return t.allowHtml?$(t,`span`,{key:n,dangerouslySetInnerHTML:{__html:e.value}}):e.value}}function Mf(e,t){return e.map((e,n)=>jf(e,t,`i:${n}`))}function Nf(e,t,n){let r=e.lang??`plaintext`,i=t.highlighter,a={className:`language-${r}`},o=i?void 0:e.value,s=i?{dangerouslySetInnerHTML:{__html:i(e.value,r,{...e.highlightLines&&{highlightLines:e.highlightLines},...t.codeLineNumbers!==void 0&&{lineNumbers:t.codeLineNumbers}})}}:void 0,c=$(t,`pre`,{className:`tm-code${t.codeLineNumbers?` tm-code--line-numbers`:``}`,"data-lang":r,...e.title?{"data-code-title":e.title}:{},...e.file?{"data-filename":e.file}:{},...e.framework?{"data-framework":e.framework}:{}},$(t,`code`,{...a,...s},o));return e.title?$(t,`figure`,{key:n,className:`tm-code-frame`,"data-lang":r},$(t,`figcaption`,null,e.title),c):$(t,v.Fragment,{key:n},c)}function Pf(e,t,n,r,i){let[a,...o]=e,s=t===void 0?[]:[$(r,`input`,{key:`${i}:checkbox`,type:`checkbox`,disabled:!0,checked:t,readOnly:!0}),` `];if(a?.type===`paragraph`){let e=[...s,...Mf(a.children,r)];return[...n?[$(r,`p`,{key:`${i}:paragraph`},e)]:e,...o.flatMap((e,t)=>Ff(e,n,r,`${i}:${t+1}`))]}return[...s,...e.flatMap((e,t)=>Ff(e,n,r,`${i}:${t}`))]}function Ff(e,t,n,r){return!t&&e.type===`paragraph`?Mf(e.children,n):[Af(e,n,r)]}function If(e,t,n,r,i){return $(r,e,{key:i,...n?{style:{textAlign:n}}:{}},Mf(t.children,r))}function Lf(e,t,n){return $(t,`section`,{key:n,"data-footnotes":``,className:`footnotes`},$(t,`h2`,{id:`footnote-label`,className:`sr-only`},`Footnotes`,Hf(`footnote-label`,t)),$(t,`ol`,null,e.map(e=>$(t,`li`,{key:e.id,id:`user-content-fn-${e.id}`},Rf(e,t)))))}function Rf(e,t){let n=e.children.length-1,r=zf(e,t);return n<0?[$(t,`p`,{key:`backref-wrapper`},r.slice(1))]:e.children.map((e,i)=>i===n&&e.type===`paragraph`?$(t,`p`,{key:i},Mf(e.children,t),r):Af(e,t,`${i}`))}function zf(e,t){let n=[];for(let r=1;r<=(e.referenceCount??1);r++){let i=r===1?e.id:`${e.id}-${r}`,a=r===1?`${e.number}`:`${e.number}-${r}`;n.push(` `,$(t,`a`,{key:r,"data-footnote-backref":``,"aria-label":`Back to reference ${a}`,className:`data-footnote-backref`,href:`#user-content-fnref-${i}`},`↩`))}return n}function Bf(e){return e.referenceIndex&&e.referenceIndex>1?`${e.id}-${e.referenceIndex}`:e.id}function $(e,t,n,...r){return(0,v.createElement)(typeof t==`string`?e.components?.[t]??t:t,n,...r)}function Vf(e,t,n){let r=e.tagName??`md-comment-component`,i={...e.properties??{}};return e.tagName||(i[`data-component`]=e.name,i[`data-attributes`]||=JSON.stringify(e.attributes)),$(t,r,{key:n,...i},e.children.map((e,r)=>Af(e,t,`${n}:${r}`)))}function Hf(e,t){if(!e||!t.headingAnchors)return null;let n=typeof t.headingAnchors==`object`?t.headingAnchors:{};return $(t,`a`,{href:`#${e}`,"aria-hidden":n.ariaHidden??!0,className:n.className??`anchor-heading anchor-heading-link`,tabIndex:n.tabIndex??-1},n.content??`#`)}const Uf=[Id()],Wf=Object.fromEntries(Object.entries({p:`my-2 first:mt-0 last:mb-0`,h1:`mt-4 mb-2 font-heading text-base font-semibold first:mt-0`,h2:`mt-4 mb-2 font-heading text-base font-medium first:mt-0`,h3:`mt-3 mb-1.5 font-heading text-sm font-semibold first:mt-0`,h4:`mt-3 mb-1.5 font-heading text-sm font-medium first:mt-0`,h5:`mt-3 mb-1.5 font-heading text-sm font-medium first:mt-0`,h6:`mt-3 mb-1.5 font-heading text-sm font-medium first:mt-0`,ul:`my-2 list-disc space-y-1 ps-5 first:mt-0 last:mb-0`,ol:`my-2 list-decimal space-y-1 ps-5 first:mt-0 last:mb-0`,li:`marker:text-muted-foreground [&>ol]:my-1 [&>ul]:my-1`,blockquote:`my-2 border-s-2 ps-3 text-muted-foreground italic`,code:`rounded-sm bg-muted px-1 py-0.5 font-mono text-xs`,pre:`my-2 overflow-x-auto rounded-md bg-muted p-3 font-mono text-xs [&_code]:bg-transparent [&_code]:p-0`,hr:`my-3`,thead:`border-b`,th:`px-2 py-1 text-start font-medium`,td:`border-t px-2 py-1`,strong:`font-medium`,del:`line-through`,sup:`text-[0.7em]`,section:`mt-3 border-t pt-2 text-xs text-muted-foreground`}).map(([e,t])=>[e,n=>(0,v.createElement)(e,{...n,className:t})]));function Gf({href:e,...t}){let n=/^https?:\/\//i.test(e??``);return(0,Y.jsx)(`a`,{...t,href:e,className:`font-medium underline underline-offset-2`,...n?{target:`_blank`,rel:`nofollow noopener noreferrer`,referrerPolicy:`no-referrer`}:{}})}function Kf({alt:e,...t}){return(0,Y.jsx)(`img`,{...t,alt:e??``,loading:`lazy`,referrerPolicy:`no-referrer`,className:`my-2 max-w-full rounded-md`})}function qf(e){return(0,Y.jsx)(`div`,{className:`my-2 overflow-x-auto`,children:(0,Y.jsx)(`table`,{...e,className:`w-full border-collapse text-xs`})})}const Jf={...Wf,a:Gf,img:Kf,table:qf};function Yf({children:e}){return(0,Y.jsx)(Of,{extensions:Uf,components:Jf,frontmatter:!1,headingIds:!1,children:e})}function Xf({children:e}){return(0,Y.jsxs)(Xc,{children:[(0,Y.jsx)(Zc,{children:(0,Y.jsx)(ae,{})}),(0,Y.jsx)(Qc,{children:e})]})}function Zf({running:e,children:t}){return(0,Y.jsxs)(Xc,{role:e?`status`:void 0,children:[(0,Y.jsx)(Zc,{children:e?(0,Y.jsx)(Rc,{}):(0,Y.jsx)(oe,{})}),(0,Y.jsx)(Qc,{className:e?`shimmer`:void 0,children:t})]})}function Qf({title:e,children:t}){return(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`div`,{className:`text-xs font-medium text-foreground`,children:e}),(0,Y.jsx)(`pre`,{className:`mt-0.5 max-h-40 overflow-auto font-mono text-xs whitespace-pre-wrap wrap-break-word`,children:t})]})}function $f({part:e,title:t,failed:n}){let r=Ss(e),i=!n&&!r,a=t?(0,Y.jsxs)(`span`,{children:[`“`,t,`”`]}):(0,Y.jsx)(`span`,{className:`font-mono`,children:e.name}),o=n?e.output?.error:void 0;return(0,Y.jsxs)(ju,{children:[(0,Y.jsxs)(Xc,{render:(0,Y.jsx)(Mu,{}),className:`cursor-pointer items-start hover:text-foreground`,children:[(0,Y.jsx)(Zc,{className:`mt-0.5`,children:n?(0,Y.jsx)(ae,{}):i?(0,Y.jsx)(Rc,{}):(0,Y.jsx)(oe,{})}),(0,Y.jsxs)(Qc,{"aria-live":i?`polite`:void 0,className:i?`shimmer`:void 0,children:[n?(0,Y.jsxs)(Y.Fragment,{children:[a,` failed`]}):(0,Y.jsxs)(Y.Fragment,{children:[i?`Running`:`Ran`,` `,a]}),(0,Y.jsx)(R,{className:`ms-1 inline shrink-0 align-middle transition-transform group-data-[panel-open]/marker:rotate-90`}),typeof o==`string`&&o.length>0&&(0,Y.jsx)(`span`,{className:`block text-muted-foreground`,children:o})]})]}),(0,Y.jsx)(Nu,{className:`ps-6`,children:(0,Y.jsxs)(`div`,{className:`mt-1 flex flex-col gap-2 rounded-md border border-border bg-muted p-2`,children:[(0,Y.jsx)(Qf,{title:`Input`,children:xs(e.input)||`—`}),(0,Y.jsx)(Qf,{title:`Output`,children:r?xs(e.output)||`—`:`Waiting for the result…`})]})})]})}function ep({part:e,widgets:t,activeSlots:n}){let r=e.input,i=r?hs(t,r.widget):void 0;if(!r||!i)return Ss(e)?null:(0,Y.jsx)(Zf,{running:!0,children:`Preparing a widget`});let a=gs(e.id);if(!n.has(a)){let t=e.output==null;return(0,Y.jsxs)(Zf,{running:t,children:[t?`Rendering`:`Rendered`,` `,(0,Y.jsx)(`span`,{className:`font-mono`,children:r.widget})]})}return(0,Y.jsx)(`slot`,{name:a})}function tp({part:e,onQuestionnaireAnswers:t}){if(e.output!=null){let t=e.output.skipped===!0;return(0,Y.jsxs)(Xc,{children:[(0,Y.jsx)(Zc,{children:(0,Y.jsx)(z,{})}),(0,Y.jsx)(Qc,{children:t?`Questionnaire skipped`:`Answers sent`})]})}if(e.state!==`input-complete`)return(0,Y.jsx)(Zf,{running:!0,children:`Preparing a questionnaire`});let n=bs(e.input);return n.length===0?(0,Y.jsx)(Xf,{children:`The questionnaire could not be displayed`}):(0,Y.jsx)(Fd,{items:n,onAnswers:n=>t(e.id,n)})}function np({part:e,widgets:t,toolTitles:n,activeSlots:r,onQuestionnaireAnswers:i}){switch(e.type){case`text`:return(0,Y.jsx)(au,{variant:`ghost`,children:(0,Y.jsx)(ou,{children:(0,Y.jsx)(Yf,{children:e.content})})});case`thinking`:return(0,Y.jsx)(`div`,{className:`px-1 text-xs text-muted-foreground italic`,children:e.content});case`tool-call`:{let a=Object.hasOwn(n,e.name)?n[e.name]:void 0;return e.state===`error`?(0,Y.jsx)($f,{part:e,title:a,failed:!0}):e.name===`render_widget`?(0,Y.jsx)(ep,{part:e,widgets:t,activeSlots:r}):e.name===`ask_questionnaire`?(0,Y.jsx)(tp,{part:e,onQuestionnaireAnswers:i}):(0,Y.jsx)($f,{part:e,title:a,failed:!1})}default:return null}}var rp=class extends v.Component{constructor(...e){super(...e),this.state={failed:!1}}static getDerivedStateFromError(){return{failed:!0}}render(){return this.state.failed?(0,Y.jsxs)(Xc,{children:[(0,Y.jsx)(Zc,{children:(0,Y.jsx)(ae,{})}),(0,Y.jsx)(Qc,{children:`Part of this response could not be displayed`})]}):this.props.children}};function ip({part:e}){let{kind:t,title:n,description:r,href:i}=wc(e),a=t===`image`?i:void 0;return(0,Y.jsxs)(Oc,{size:`sm`,children:[(0,Y.jsx)(Ac,{variant:a?`image`:`icon`,children:a?(0,Y.jsx)(`img`,{src:a,alt:``}):(0,Y.jsx)(zc,{kind:t})}),(0,Y.jsxs)(jc,{children:[(0,Y.jsx)(Mc,{children:n}),r&&(0,Y.jsx)(Nc,{children:r})]}),i&&(0,Y.jsx)(Ic,{render:(0,Y.jsx)(`a`,{href:i,download:n,target:`_blank`,rel:`noreferrer`,"aria-label":`Download ${n}`,title:`Download ${n}`})})]})}function ap({message:e}){let t=_s(e),n=e.parts.filter(e=>e.type===`image`||e.type===`document`);return(0,Y.jsxs)(Y.Fragment,{children:[n.length>0&&(0,Y.jsx)(`div`,{className:`flex w-full flex-wrap justify-end gap-2`,children:n.map((e,t)=>(0,Y.jsx)(ip,{part:e},t))}),t.length>0&&(0,Y.jsx)(au,{children:(0,Y.jsx)(ou,{children:(0,Y.jsx)(`span`,{className:`whitespace-pre-wrap`,children:t})})})]})}function op({messages:e,widgets:t,toolTitles:n,activeSlots:r,isBusy:i,awaitingReply:a,onQuestionnaireAnswers:o}){return e.length===0?(0,Y.jsx)(Uc,{className:`h-full`,children:(0,Y.jsxs)(Wc,{children:[(0,Y.jsx)(Kc,{variant:`icon`,children:(0,Y.jsx)(te,{})}),(0,Y.jsx)(qc,{children:`Ask the assistant`}),(0,Y.jsx)(Jc,{children:`It can answer questions and act through this app's own tools and widgets.`})]})}):(0,Y.jsx)(Ql,{autoScroll:!0,children:(0,Y.jsxs)($l,{className:`h-full`,children:[(0,Y.jsx)(eu,{children:(0,Y.jsxs)(tu,{"aria-busy":i,className:`p-(--card-spacing)`,children:[e.map(e=>(0,Y.jsx)(nu,{messageId:e.id,children:(0,Y.jsx)($c,{align:e.role===`user`?`end`:`start`,children:(0,Y.jsx)(el,{children:e.role===`user`?(0,Y.jsx)(ap,{message:e}):e.parts.map((e,i)=>(0,Y.jsx)(rp,{children:(0,Y.jsx)(np,{part:e,widgets:t,toolTitles:n,activeSlots:r,onQuestionnaireAnswers:o})},i))})})},e.id)),a&&(0,Y.jsx)(nu,{messageId:`astralbeam-thinking`,children:(0,Y.jsxs)(Xc,{role:`status`,children:[(0,Y.jsx)(Zc,{children:(0,Y.jsx)(Rc,{})}),(0,Y.jsx)(Qc,{className:`shimmer`,children:`Thinking…`})]})})]})}),(0,Y.jsx)(ru,{})]})})}function sp(e){if(e)return{onChunk:lp(e),onResponse:t=>e(`run`,t?`endpoint responded with HTTP ${t.status}`:`request sent`),onFinish:t=>e(`run`,`assistant turn finished`,t),onError:t=>e(`error`,t.message,t)}}function cp(e){try{return JSON.parse(e)}catch{return e}}function lp(e){let t=new Map,n=new Map,r=(e,n)=>{t.set(e,(t.get(e)??``)+n)},i=e=>{let n=t.get(e)??``;return t.delete(e),n};return t=>{let a=t;switch(a.type){case`TEXT_MESSAGE_CONTENT`:case`TEXT_MESSAGE_CHUNK`:r(a.messageId??`text`,a.delta??``);break;case`TEXT_MESSAGE_END`:e(`text`,i(a.messageId??`text`),{messageId:a.messageId});break;case`REASONING_MESSAGE_CONTENT`:case`REASONING_MESSAGE_CHUNK`:case`THINKING_TEXT_MESSAGE_CONTENT`:r(`reasoning:${a.messageId??`thinking`}`,a.delta??``);break;case`REASONING_MESSAGE_END`:case`THINKING_TEXT_MESSAGE_END`:e(`reasoning`,i(`reasoning:${a.messageId??`thinking`}`),{messageId:a.messageId});break;case`TOOL_CALL_START`:e(`tool`,`${a.toolCallName} call started`,t),n.set(a.toolCallId??``,{name:a.toolCallName??``,args:``});break;case`TOOL_CALL_ARGS`:{let e=n.get(a.toolCallId??``);e&&(e.args+=a.delta??``);break}case`TOOL_CALL_END`:{let t=n.get(a.toolCallId??``);n.delete(a.toolCallId??``),e(`tool`,`${t?.name??`tool`} input complete`,{toolCallId:a.toolCallId,input:cp(t?.args??``)});break}case`TOOL_CALL_RESULT`:e(`tool`,`result for tool call ${a.toolCallId}`,{toolCallId:a.toolCallId,messageId:a.messageId,content:cp(a.content??``)});break;case`TEXT_MESSAGE_START`:case`REASONING_MESSAGE_START`:case`THINKING_TEXT_MESSAGE_START`:break;case`RUN_STARTED`:e(`run`,`run ${a.runId} started`,t);break;case`RUN_FINISHED`:e(`run`,`run ${a.runId} finished`,t);break;case`RUN_ERROR`:e(`error`,`run failed: ${a.message}`,t);break;default:e(`stream`,a.type,t)}}}function up(e,t,n,r){return[...Object.keys(e).length>0?[dp(e,n)]:[],fp(),...pp(t,r)]}function dp(e,t){return Xt({name:`render_widget`,description:`Render one of the host application's own UI widgets inline in the conversation. The widget appears in the transcript at the point of the call, so prefer it over describing the same information in text. Available widgets:
|
|
74
|
+
`),n,Wd()).parse()})}for(let e of r){let r=n.footnoteCounts?.[t[e.number-1]]??1;r>1&&(e.referenceCount=r)}return{type:`footnotes`,items:r}}function yf(e){let t=new Set;for(let n of e.split(`,`)){let e=n.trim().match(/^(\d+)(?:-(\d+))?$/);if(!e)continue;let r=Number(e[1]),i=Number(e[2]??e[1]);for(let e=r;e<=i&&e<r+1e3;e++)t.add(e)}return[...t].sort((e,t)=>e-t)}function bf(e){let t=e.match(/^(\s{0,8})([-+*]|\d{1,9}[.)])(?:([ \t]+)(.*))?$/);if(!t)return;let n=t[2],r=/\d/.test(n[0]);return{ordered:r,...r?{number:Number.parseInt(n,10)}:{},indent:t[1].length,marker:r?n.at(-1):n,contentIndent:t[1].length+n.length+(t[3]?.length??1),content:t[4]??``}}function xf(e,t){return e.ordered===t.ordered&&e.marker===t.marker}function Sf(e){return e.match(/^ */)?.[0].length??0}function Cf(e,t){let n=bf(e);return/^ {0,3}(`{3,}|~{3,})/.test(e)||/^ {0,3}#{1,6}(?:\s+|$)/.test(e)||/^ {0,3}([-*_])(?:\s*\1){2,}\s*$/.test(e)||/^ {0,3}>\s?/.test(e)||n!==void 0&&(!n.ordered||n.number===1)||!!t&&wf(e,t)}function wf(e,t){if(!e.includes(`|`))return!1;let n=Tf(t);return n.length===Tf(e).length&&n.every(e=>/^:?-+:?$/.test(e.trim()))}function Tf(e){let t=e.trim();t.startsWith(`|`)&&(t=t.slice(1)),t.endsWith(`|`)&&(t=t.slice(0,-1));let n=[],r=``;for(let e=0;e<t.length;e++){let i=t[e];if(i===`\\`&&t[e+1]===`|`){r+=`|`,e++;continue}if(i===`|`){n.push(r.trim()),r=``;continue}r+=i}return n.push(r.trim()),n}function Ef(e){let t=e.trim();if(t.startsWith(`:`)&&t.endsWith(`:`))return`center`;if(t.endsWith(`:`))return`right`;if(t.startsWith(`:`))return`left`}function Df(e,t){return{type:`tableCell`,children:Jd(e,t)}}function Of({children:e,...t}){return(0,v.createElement)(v.Fragment,null,kf(e,t))}function kf(e,t={}){return(typeof e==`string`?mf(e,t):e).children.map((e,n)=>Af(e,t,`b:${n}`))}function Af(e,t={},n){switch(e.type){case`heading`:return $(t,`h${e.depth}`,{key:n,...e.id?{id:e.id}:{},...e.framework?{"data-framework":e.framework}:{}},Mf(e.children,t),Hf(e.id,t));case`paragraph`:return $(t,`p`,{key:n},Mf(e.children,t));case`code`:return Nf(e,t,n);case`list`:return $(t,e.ordered?`ol`:`ul`,{key:n,...e.ordered&&e.start&&e.start!==1?{start:e.start}:{}},e.items.map((n,r)=>$(t,`li`,{key:r},Pf(n.children,n.checked,e.loose,t,`${r}`))));case`blockquote`:return $(t,`blockquote`,{key:n},e.children.map((e,r)=>Af(e,t,`${n}:${r}`)));case`table`:return $(t,`table`,{key:n},$(t,`thead`,null,$(t,`tr`,null,e.header.map((n,r)=>If(`th`,n,e.align[r],t,r)))),e.rows.length?$(t,`tbody`,null,e.rows.map((n,r)=>$(t,`tr`,{key:r},n.map((n,r)=>If(`td`,n,e.align[r],t,r))))):null);case`footnotes`:return Lf(e.items,t,n);case`thematicBreak`:return $(t,`hr`,{key:n});case`html`:return t.allowHtml?$(t,`div`,{key:n,dangerouslySetInnerHTML:{__html:e.value}}):$(t,`p`,{key:n},e.value);case`callout`:return $(t,`div`,{key:n,className:`markdown-alert markdown-alert-${e.kind.toLowerCase()}`},$(t,`p`,{className:`markdown-alert-title`},e.title),$(t,`div`,{className:`markdown-alert-content`},e.children.map((e,r)=>Af(e,t,`${n}:${r}`))));case`component`:return Vf(e,t,n)}}function jf(e,t={},n){switch(e.type){case`text`:return e.value;case`inlineCode`:return $(t,`code`,{key:n},e.value);case`strong`:return $(t,`strong`,{key:n},Mf(e.children,t));case`emphasis`:return $(t,`em`,{key:n},Mf(e.children,t));case`strike`:return $(t,`del`,{key:n},Mf(e.children,t));case`footnoteReference`:return $(t,`sup`,{key:n},$(t,`a`,{id:`user-content-fnref-${Bf(e)}`,"data-footnote-ref":``,"aria-describedby":`footnote-label`,href:`#user-content-fn-${e.id}`},e.number));case`link`:return $(t,`a`,{key:n,href:e.href,...e.title?{title:e.title}:{}},Mf(e.children,t));case`image`:return $(t,`img`,{key:n,src:e.src,alt:e.alt,...e.title?{title:e.title}:{}});case`break`:return $(t,`br`,{key:n});case`inlineHtml`:return t.allowHtml?$(t,`span`,{key:n,dangerouslySetInnerHTML:{__html:e.value}}):e.value}}function Mf(e,t){return e.map((e,n)=>jf(e,t,`i:${n}`))}function Nf(e,t,n){let r=e.lang??`plaintext`,i=t.highlighter,a={className:`language-${r}`},o=i?void 0:e.value,s=i?{dangerouslySetInnerHTML:{__html:i(e.value,r,{...e.highlightLines&&{highlightLines:e.highlightLines},...t.codeLineNumbers!==void 0&&{lineNumbers:t.codeLineNumbers}})}}:void 0,c=$(t,`pre`,{className:`tm-code${t.codeLineNumbers?` tm-code--line-numbers`:``}`,"data-lang":r,...e.title?{"data-code-title":e.title}:{},...e.file?{"data-filename":e.file}:{},...e.framework?{"data-framework":e.framework}:{}},$(t,`code`,{...a,...s},o));return e.title?$(t,`figure`,{key:n,className:`tm-code-frame`,"data-lang":r},$(t,`figcaption`,null,e.title),c):$(t,v.Fragment,{key:n},c)}function Pf(e,t,n,r,i){let[a,...o]=e,s=t===void 0?[]:[$(r,`input`,{key:`${i}:checkbox`,type:`checkbox`,disabled:!0,checked:t,readOnly:!0}),` `];if(a?.type===`paragraph`){let e=[...s,...Mf(a.children,r)];return[...n?[$(r,`p`,{key:`${i}:paragraph`},e)]:e,...o.flatMap((e,t)=>Ff(e,n,r,`${i}:${t+1}`))]}return[...s,...e.flatMap((e,t)=>Ff(e,n,r,`${i}:${t}`))]}function Ff(e,t,n,r){return!t&&e.type===`paragraph`?Mf(e.children,n):[Af(e,n,r)]}function If(e,t,n,r,i){return $(r,e,{key:i,...n?{style:{textAlign:n}}:{}},Mf(t.children,r))}function Lf(e,t,n){return $(t,`section`,{key:n,"data-footnotes":``,className:`footnotes`},$(t,`h2`,{id:`footnote-label`,className:`sr-only`},`Footnotes`,Hf(`footnote-label`,t)),$(t,`ol`,null,e.map(e=>$(t,`li`,{key:e.id,id:`user-content-fn-${e.id}`},Rf(e,t)))))}function Rf(e,t){let n=e.children.length-1,r=zf(e,t);return n<0?[$(t,`p`,{key:`backref-wrapper`},r.slice(1))]:e.children.map((e,i)=>i===n&&e.type===`paragraph`?$(t,`p`,{key:i},Mf(e.children,t),r):Af(e,t,`${i}`))}function zf(e,t){let n=[];for(let r=1;r<=(e.referenceCount??1);r++){let i=r===1?e.id:`${e.id}-${r}`,a=r===1?`${e.number}`:`${e.number}-${r}`;n.push(` `,$(t,`a`,{key:r,"data-footnote-backref":``,"aria-label":`Back to reference ${a}`,className:`data-footnote-backref`,href:`#user-content-fnref-${i}`},`↩`))}return n}function Bf(e){return e.referenceIndex&&e.referenceIndex>1?`${e.id}-${e.referenceIndex}`:e.id}function $(e,t,n,...r){return(0,v.createElement)(typeof t==`string`?e.components?.[t]??t:t,n,...r)}function Vf(e,t,n){let r=e.tagName??`md-comment-component`,i={...e.properties??{}};return e.tagName||(i[`data-component`]=e.name,i[`data-attributes`]||=JSON.stringify(e.attributes)),$(t,r,{key:n,...i},e.children.map((e,r)=>Af(e,t,`${n}:${r}`)))}function Hf(e,t){if(!e||!t.headingAnchors)return null;let n=typeof t.headingAnchors==`object`?t.headingAnchors:{};return $(t,`a`,{href:`#${e}`,"aria-hidden":n.ariaHidden??!0,className:n.className??`anchor-heading anchor-heading-link`,tabIndex:n.tabIndex??-1},n.content??`#`)}const Uf=[Id()],Wf=Object.fromEntries(Object.entries({p:`my-2 first:mt-0 last:mb-0`,h1:`mt-4 mb-2 font-heading text-base font-semibold first:mt-0`,h2:`mt-4 mb-2 font-heading text-base font-medium first:mt-0`,h3:`mt-3 mb-1.5 font-heading text-sm font-semibold first:mt-0`,h4:`mt-3 mb-1.5 font-heading text-sm font-medium first:mt-0`,h5:`mt-3 mb-1.5 font-heading text-sm font-medium first:mt-0`,h6:`mt-3 mb-1.5 font-heading text-sm font-medium first:mt-0`,ul:`my-2 list-disc space-y-1 ps-5 first:mt-0 last:mb-0`,ol:`my-2 list-decimal space-y-1 ps-5 first:mt-0 last:mb-0`,li:`marker:text-muted-foreground [&>ol]:my-1 [&>ul]:my-1`,blockquote:`my-2 border-s-2 ps-3 text-muted-foreground italic`,code:`rounded-sm bg-muted px-1 py-0.5 font-mono text-xs`,pre:`my-2 overflow-x-auto rounded-md bg-muted p-3 font-mono text-xs [&_code]:bg-transparent [&_code]:p-0`,hr:`my-3`,thead:`border-b`,th:`px-2 py-1 text-start font-medium`,td:`border-t px-2 py-1`,strong:`font-medium`,del:`line-through`,sup:`text-[0.7em]`,section:`mt-3 border-t pt-2 text-xs text-muted-foreground`}).map(([e,t])=>[e,n=>(0,v.createElement)(e,{...n,className:t})]));function Gf({href:e,...t}){let n=/^https?:\/\//i.test(e??``);return(0,Y.jsx)(`a`,{...t,href:e,className:`font-medium underline underline-offset-2`,...n?{target:`_blank`,rel:`nofollow noopener noreferrer`,referrerPolicy:`no-referrer`}:{}})}function Kf({alt:e,...t}){return(0,Y.jsx)(`img`,{...t,alt:e??``,loading:`lazy`,referrerPolicy:`no-referrer`,className:`my-2 max-w-full rounded-md`})}function qf(e){return(0,Y.jsx)(`div`,{className:`my-2 overflow-x-auto`,children:(0,Y.jsx)(`table`,{...e,className:`w-full border-collapse text-xs`})})}const Jf={...Wf,a:Gf,img:Kf,table:qf};function Yf({children:e}){return(0,Y.jsx)(Of,{extensions:Uf,components:Jf,frontmatter:!1,headingIds:!1,children:e})}function Xf({children:e}){return(0,Y.jsxs)(Xc,{children:[(0,Y.jsx)(Zc,{children:(0,Y.jsx)(ae,{})}),(0,Y.jsx)(Qc,{children:e})]})}function Zf({running:e,children:t}){return(0,Y.jsxs)(Xc,{role:e?`status`:void 0,children:[(0,Y.jsx)(Zc,{children:e?(0,Y.jsx)(Rc,{}):(0,Y.jsx)(oe,{})}),(0,Y.jsx)(Qc,{className:e?`shimmer`:void 0,children:t})]})}function Qf({title:e,children:t}){return(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`div`,{className:`text-xs font-medium text-foreground`,children:e}),(0,Y.jsx)(`pre`,{className:`mt-0.5 max-h-40 overflow-auto font-mono text-xs whitespace-pre-wrap wrap-break-word`,children:t})]})}function $f({part:e,title:t,failed:n}){let r=Ss(e),i=!n&&!r,a=t?(0,Y.jsxs)(`span`,{children:[`“`,t,`”`]}):(0,Y.jsx)(`span`,{className:`font-mono`,children:e.name}),o=n?e.output?.error:void 0;return(0,Y.jsxs)(ju,{children:[(0,Y.jsxs)(Xc,{render:(0,Y.jsx)(Mu,{}),className:`cursor-pointer items-start hover:text-foreground`,children:[(0,Y.jsx)(Zc,{className:`mt-0.5`,children:n?(0,Y.jsx)(ae,{}):i?(0,Y.jsx)(Rc,{}):(0,Y.jsx)(oe,{})}),(0,Y.jsxs)(Qc,{"aria-live":i?`polite`:void 0,className:i?`shimmer`:void 0,children:[n?(0,Y.jsxs)(Y.Fragment,{children:[a,` failed`]}):(0,Y.jsxs)(Y.Fragment,{children:[i?`Running`:`Ran`,` `,a]}),(0,Y.jsx)(R,{className:`ms-1 inline shrink-0 align-middle transition-transform group-data-[panel-open]/marker:rotate-90`}),typeof o==`string`&&o.length>0&&(0,Y.jsx)(`span`,{className:`block text-muted-foreground`,children:o})]})]}),(0,Y.jsx)(Nu,{className:`ps-6`,children:(0,Y.jsxs)(`div`,{className:`mt-1 flex flex-col gap-2 rounded-md border border-border bg-muted p-2`,children:[(0,Y.jsx)(Qf,{title:`Input`,children:xs(e.input)||`—`}),(0,Y.jsx)(Qf,{title:`Output`,children:r?xs(e.output)||`—`:`Waiting for the result…`})]})})]})}function ep({part:e,widgets:t,activeSlots:n}){let r=e.input,i=r?hs(t,r.widget):void 0;if(!r||!i)return Ss(e)?null:(0,Y.jsx)(Zf,{running:!0,children:`Preparing a widget`});let a=gs(e.id);if(!n.has(a)){let t=e.output==null;return(0,Y.jsxs)(Zf,{running:t,children:[t?`Rendering`:`Rendered`,` `,(0,Y.jsx)(`span`,{className:`font-mono`,children:r.widget})]})}return(0,Y.jsx)(`slot`,{name:a})}function tp({part:e,onQuestionnaireAnswers:t}){if(e.output!=null){let t=e.output.skipped===!0;return(0,Y.jsxs)(Xc,{children:[(0,Y.jsx)(Zc,{children:(0,Y.jsx)(z,{})}),(0,Y.jsx)(Qc,{children:t?`Questionnaire skipped`:`Answers sent`})]})}if(e.state!==`input-complete`)return(0,Y.jsx)(Zf,{running:!0,children:`Preparing a questionnaire`});let n=bs(e.input);return n.length===0?(0,Y.jsx)(Xf,{children:`The questionnaire could not be displayed`}):(0,Y.jsx)(Fd,{items:n,onAnswers:n=>t(e.id,n)})}function np({part:e,widgets:t,toolTitles:n,activeSlots:r,onQuestionnaireAnswers:i}){switch(e.type){case`text`:return(0,Y.jsx)(au,{variant:`ghost`,children:(0,Y.jsx)(ou,{children:(0,Y.jsx)(Yf,{children:e.content})})});case`thinking`:return(0,Y.jsx)(`div`,{className:`px-1 text-xs text-muted-foreground italic`,children:e.content});case`tool-call`:{let a=Object.hasOwn(n,e.name)?n[e.name]:void 0;return e.state===`error`?(0,Y.jsx)($f,{part:e,title:a,failed:!0}):e.name===`render_widget`?(0,Y.jsx)(ep,{part:e,widgets:t,activeSlots:r}):e.name===`ask_questionnaire`?(0,Y.jsx)(tp,{part:e,onQuestionnaireAnswers:i}):(0,Y.jsx)($f,{part:e,title:a,failed:!1})}default:return null}}var rp=class extends v.Component{constructor(...e){super(...e),this.state={failed:!1}}static getDerivedStateFromError(){return{failed:!0}}render(){return this.state.failed?(0,Y.jsxs)(Xc,{children:[(0,Y.jsx)(Zc,{children:(0,Y.jsx)(ae,{})}),(0,Y.jsx)(Qc,{children:`Part of this response could not be displayed`})]}):this.props.children}};function ip({part:e}){let{kind:t,title:n,description:r,href:i}=wc(e),a=t===`image`?i:void 0;return(0,Y.jsxs)(Oc,{size:`sm`,children:[(0,Y.jsx)(Ac,{variant:a?`image`:`icon`,children:a?(0,Y.jsx)(`img`,{src:a,alt:``}):(0,Y.jsx)(zc,{kind:t})}),(0,Y.jsxs)(jc,{children:[(0,Y.jsx)(Mc,{children:n}),r&&(0,Y.jsx)(Nc,{children:r})]}),i&&(0,Y.jsx)(Ic,{render:(0,Y.jsx)(`a`,{href:i,download:n,target:`_blank`,rel:`noreferrer`,"aria-label":`Download ${n}`,title:`Download ${n}`})})]})}function ap({message:e}){let t=_s(e),n=e.parts.filter(e=>e.type===`image`||e.type===`document`);return(0,Y.jsxs)(Y.Fragment,{children:[n.length>0&&(0,Y.jsx)(`div`,{className:`flex w-full flex-wrap justify-end gap-2`,children:n.map((e,t)=>(0,Y.jsx)(ip,{part:e},t))}),t.length>0&&(0,Y.jsx)(au,{children:(0,Y.jsx)(ou,{children:(0,Y.jsx)(`span`,{className:`whitespace-pre-wrap`,children:t})})})]})}function op({messages:e,emptyTitle:t,emptyDescription:n,widgets:r,toolTitles:i,activeSlots:a,isBusy:o,awaitingReply:s,onQuestionnaireAnswers:c}){return e.length===0?(0,Y.jsx)(Uc,{className:`h-full`,children:(0,Y.jsxs)(Wc,{children:[(0,Y.jsx)(Kc,{variant:`icon`,children:(0,Y.jsx)(te,{})}),(0,Y.jsx)(qc,{children:t??`Ask the assistant`}),(0,Y.jsx)(Jc,{children:n??`It can answer questions and act through this app's own tools and widgets.`})]})}):(0,Y.jsx)(Ql,{autoScroll:!0,children:(0,Y.jsxs)($l,{className:`h-full`,children:[(0,Y.jsx)(eu,{children:(0,Y.jsxs)(tu,{"aria-busy":o,className:`p-(--card-spacing)`,children:[e.map(e=>(0,Y.jsx)(nu,{messageId:e.id,children:(0,Y.jsx)($c,{align:e.role===`user`?`end`:`start`,children:(0,Y.jsx)(el,{children:e.role===`user`?(0,Y.jsx)(ap,{message:e}):e.parts.map((e,t)=>(0,Y.jsx)(rp,{children:(0,Y.jsx)(np,{part:e,widgets:r,toolTitles:i,activeSlots:a,onQuestionnaireAnswers:c})},t))})})},e.id)),s&&(0,Y.jsx)(nu,{messageId:`astralbeam-thinking`,children:(0,Y.jsxs)(Xc,{role:`status`,children:[(0,Y.jsx)(Zc,{children:(0,Y.jsx)(Rc,{})}),(0,Y.jsx)(Qc,{className:`shimmer`,children:`Thinking…`})]})})]})}),(0,Y.jsx)(ru,{})]})})}function sp(e){if(e)return{onChunk:lp(e),onResponse:t=>e(`run`,t?`endpoint responded with HTTP ${t.status}`:`request sent`),onFinish:t=>e(`run`,`assistant turn finished`,t),onError:t=>e(`error`,t.message,t)}}function cp(e){try{return JSON.parse(e)}catch{return e}}function lp(e){let t=new Map,n=new Map,r=(e,n)=>{t.set(e,(t.get(e)??``)+n)},i=e=>{let n=t.get(e)??``;return t.delete(e),n};return t=>{let a=t;switch(a.type){case`TEXT_MESSAGE_CONTENT`:case`TEXT_MESSAGE_CHUNK`:r(a.messageId??`text`,a.delta??``);break;case`TEXT_MESSAGE_END`:e(`text`,i(a.messageId??`text`),{messageId:a.messageId});break;case`REASONING_MESSAGE_CONTENT`:case`REASONING_MESSAGE_CHUNK`:case`THINKING_TEXT_MESSAGE_CONTENT`:r(`reasoning:${a.messageId??`thinking`}`,a.delta??``);break;case`REASONING_MESSAGE_END`:case`THINKING_TEXT_MESSAGE_END`:e(`reasoning`,i(`reasoning:${a.messageId??`thinking`}`),{messageId:a.messageId});break;case`TOOL_CALL_START`:e(`tool`,`${a.toolCallName} call started`,t),n.set(a.toolCallId??``,{name:a.toolCallName??``,args:``});break;case`TOOL_CALL_ARGS`:{let e=n.get(a.toolCallId??``);e&&(e.args+=a.delta??``);break}case`TOOL_CALL_END`:{let t=n.get(a.toolCallId??``);n.delete(a.toolCallId??``),e(`tool`,`${t?.name??`tool`} input complete`,{toolCallId:a.toolCallId,input:cp(t?.args??``)});break}case`TOOL_CALL_RESULT`:e(`tool`,`result for tool call ${a.toolCallId}`,{toolCallId:a.toolCallId,messageId:a.messageId,content:cp(a.content??``)});break;case`TEXT_MESSAGE_START`:case`REASONING_MESSAGE_START`:case`THINKING_TEXT_MESSAGE_START`:break;case`RUN_STARTED`:e(`run`,`run ${a.runId} started`,t);break;case`RUN_FINISHED`:e(`run`,`run ${a.runId} finished`,t);break;case`RUN_ERROR`:e(`error`,`run failed: ${a.message}`,t);break;default:e(`stream`,a.type,t)}}}function up(e,t,n,r){return[...Object.keys(e).length>0?[dp(e,n)]:[],fp(),...pp(t,r)]}function dp(e,t){return Xt({name:`render_widget`,description:`Render one of the host application's own UI widgets inline in the conversation. The widget appears in the transcript at the point of the call, so prefer it over describing the same information in text. Available widgets:
|
|
75
75
|
`+Object.entries(e).map(([e,{description:t,parameters:n}])=>`- ${e}: ${t} Props schema: ${JSON.stringify(vs(n))}`).join(`
|
|
76
|
-
`),inputSchema:{type:`object`,properties:{widget:{type:`string`,enum:Object.keys(e),description:`Name of the widget to render.`},props:{type:`object`,description:`Props for the widget, matching its props schema.`}},required:[`widget`]}}).client((e,n)=>t(e,n?.toolCallId??``))}function fp(){return Xt({name:os,description:`Ask the user a short structured questionnaire rendered inline in the chat. Use it when the next step genuinely depends on their choices instead of asking in prose. The call stays pending until the user submits; their answers arrive as the tool output. Skipped optional questions come back with an empty answers array. An output with skipped: true means the user dismissed the questionnaire by continuing the conversation instead — do not re-ask; address their next message.`,inputSchema:{type:`object`,properties:{items:{type:`array`,minItems:1,description:`Questions shown one at a time, in order.`,items:{type:`object`,properties:{name:{type:`string`,description:`Unique key identifying the question.`},title:{type:`string`,description:`The question itself.`},description:{type:`string`,description:`Optional helper text.`},required:{type:`boolean`,description:`Whether an answer is mandatory.`},multiple:{type:`boolean`,description:`Whether several choices may be selected.`},choices:{type:`array`,minItems:1,items:{type:`object`,properties:{value:{type:`string`},label:{type:`string`},description:{type:`string`}},required:[`value`,`label`]}},input:{type:`object`,description:`Optional free-form alternative to the fixed choices.`,properties:{label:{type:`string`},placeholder:{type:`string`}},required:[`label`,`placeholder`]}},required:[`name`,`title`,`choices`]}}},required:[`items`]}}).client()}function pp(e,t){return Object.entries(e).map(([e,n])=>Xt({name:e,description:n.description,inputSchema:vs(n.parameters),...n.metadata?{metadata:n.metadata}:{}}).client(async r=>{t?.(`tool`,`executing host tool "${e}"`,{input:r});let i=await ys(n.parameters,r??{});if(i==null)throw t?.(`error`,`input for host tool "${e}" failed schema validation`,{input:r}),Error(`Input for tool "${e}" failed schema validation`);try{let r=await n.execute(i);return t?.(`tool`,`host tool "${e}" returned`,{output:r}),r}catch(n){throw t?.(`error`,`host tool "${e}" threw`,{error:n}),n}}))}function mp(e){if(e.length>16384)throw Error(`The authentication token is too large`);let t=e.split(`.`);if(t.length!==3||!t[1])throw Error(`The authentication token is not a JWT`);let n=t[1].replaceAll(`-`,`+`).replaceAll(`_`,`/`),r=n.padEnd(Math.ceil(n.length/4)*4,`=`),i;try{i=JSON.parse(atob(r))}catch{throw Error(`The authentication token has an invalid payload`)}let a=i?.exp;if(!Number.isInteger(a)||Number(a)<=0)throw Error(`The authentication token has no valid expiry`);return Number(a)*1e3}function hp(e){let t=e.get(`authorization`);return t?.startsWith(`Bearer `)?t.slice(7):void 0}async function gp(e){let{authEndpoint:t,session:n,onStateChange:r,fetchClient:i,debug:a}=e,{signal:o}=n.abortController;try{let e=await i(t,{method:`POST`,headers:{accept:`application/json`},credentials:`include`,cache:`no-store`,signal:o});if(!e.ok)throw Error(`Authentication endpoint returned HTTP ${e.status}`);let s=(await e.json())?.token;if(typeof s!=`string`||!s)throw Error(`Authentication endpoint did not return a token`);let c=mp(s);if(c<=Date.now())throw Error(`Authentication endpoint returned an expired token`);return n.cached={value:s,expiresAt:c},r({status:`ready`}),a?.(`auth`,`chat authentication ready`,{expiresAt:new Date(c)}),s}catch(e){let t=e instanceof Error?e:Error(`Chat authentication failed`);throw o.aborted||(r({status:`error`,error:t}),a?.(`error`,`chat authentication failed: ${t.message}`)),t}}async function _p(e){let{session:t,force:n=!1,onStateChange:r}=e,i=Date.now();if(!n&&t.cached&&t.cached.expiresAt-i>6e4)return t.cached.value;if(t.refreshPromise)return await t.refreshPromise;r({status:`loading`});let a=gp(e);t.refreshPromise=a;try{return await a}finally{t.refreshPromise===a&&(t.refreshPromise=void 0)}}async function vp(e){e.session.abortController.signal.aborted&&(e.session.abortController=new AbortController),await _p(e)}function yp({session:e}){e.abortController.abort(),e.refreshPromise=void 0}async function bp(e){let{input:t,init:n,session:r,fetchClient:i,debug:a}=e,o=await i(t,n);if(o.status!==401||r.abortController.signal.aborted)return o;let s=hp(new Headers(n?.headers)),c=!s||r.cached?.value===s;c&&(r.cached=void 0),a?.(`auth`,`chat token was rejected; refreshing once`);let l=await _p({...e,force:c}),u=new Headers(n?.headers);return u.set(`authorization`,`Bearer ${l}`),await o.body?.cancel(),await i(t,{...n,headers:u})}function xp({container:e,cleanup:t}){t?.(),e.remove()}function Sp(e,t,n){let[r,i]=(0,v.useState)(new Set),a=(0,v.useRef)(new Map),o=e=>{let t=[];for(let[n,r]of a.current)e(r)&&(xp(r),a.current.delete(n),t.push(gs(n)));return t.length>0&&i(e=>{let n=new Set(e);for(let e of t)n.delete(e);return n}),t.length},s=(0,v.useRef)(!0);(0,v.useEffect)(()=>(s.current=!0,()=>{s.current=!1,o(()=>!0)}),[]);let c=(0,v.useRef)(e);c.current=e;let l=(0,v.useRef)(n);l.current=n;let u=(0,v.useCallback)(async({widget:e,props:n},r)=>{let u=l.current;u?.(`widget`,`agent requested widget "${e}"`,{toolCallId:r,props:n});let d=hs(c.current,e);if(!d)throw Error(`Unknown widget "${e}"`);let f=await ys(d.parameters,n??{});if(f==null)throw u?.(`error`,`props for widget "${e}" failed validation`,{props:n}),Error(`Props for widget "${e}" failed validation`);if(!s.current)throw Error(`The chat is no longer mounted`);let p=gs(r),m=a.current.get(r);m&&(u?.(`widget`,`replacing previous render of "${e}"`,{toolCallId:r}),xp(m));let h=document.createElement(`div`);h.slot=p,t.append(h);let g=d.render(f,h);a.current.set(r,{widget:e,container:h,cleanup:g??void 0});let _=o(()=>a.current.size>20);return _>0&&u?.(`widget`,`evicted ${_} widget render(s) past the active cap`,{cap:20}),i(e=>new Set(e).add(p)),u?.(`widget`,`widget "${e}" rendered`,{slotName:p}),{widget:e,rendered:!0}},[t]);return(0,v.useEffect)(()=>{let t=o(t=>!hs(e,t.widget));t>0&&n?.(`widget`,`disposed ${t} render(s) of widgets no longer registered`)},[e,n]),{activeSlots:r,renderWidget:u,discardAllRenders:()=>o(()=>!0)}}const Cp={};function wp({options:t,host:n}){let r=t.widgets??Cp,i=(0,v.useMemo)(()=>e(t.debug),[t.debug]),{activeSlots:a,renderWidget:o,discardAllRenders:s}=Sp(r,n,i),[c,l]=(0,v.useState)(()=>t.authEndpoint?{status:`loading`}:{status:`ready`}),[u]=(0,v.useState)(()=>t.authEndpoint?{authEndpoint:t.authEndpoint,session:{cached:void 0,refreshPromise:void 0,abortController:new AbortController},onStateChange:l,fetchClient:globalThis.fetch.bind(globalThis),debug:i}:void 0);u&&(u.debug=i),(0,v.useEffect)(()=>{if(u)return vp(u).catch(()=>void 0),()=>yp(u)},[u]);let d=(0,v.useMemo)(()=>up(r,t.tools??{},o,i),[r,t.tools,i,o]),f=(0,v.useMemo)(()=>new Set(d.map(e=>e.name)),[d]),p=(0,v.useMemo)(()=>{let e={};for(let t of d){let n=t.metadata?.title;typeof n==`string`&&n.length>0&&(e[t.name]=n)}return e},[d]);(0,v.useEffect)(()=>{i?.(`mount`,`tool set declared to the agent`,{tools:[...f],widgets:Object.keys(r)})},[i,f,r]);let[m]=(0,v.useState)(()=>tr(t.chatEndpoint??`/api/chat`,u?async()=>({headers:{authorization:`Bearer ${await _p(u)}`},fetchClient:(e,t)=>bp({...u,input:e,init:t})}):void 0)),h=(0,v.useMemo)(()=>sp(i),[i]),{messages:g,sendMessage:_,setMessages:y,status:b,error:x,addToolResult:S,stop:C,reload:w}=U({initialMessages:[],connection:m,tools:d,forwardedProps:(0,v.useMemo)(()=>({...t.systemPrompt?{systemPrompt:t.systemPrompt}:{},...t.debug?{debug:!0}:{}}),[t.systemPrompt,t.debug]),...h||{}});(0,v.useEffect)(()=>{i?.(`status`,`chat status is "${b}"`)},[i,b]);let[T,E]=(0,v.useState)(``),[D,O]=(0,v.useState)([]),k=(0,v.useMemo)(()=>uc(t.attachments),[t.attachments]),A=(0,v.useRef)(0);(0,v.useEffect)(()=>{k.enabled||O([])},[k.enabled]);let j=b===`submitted`||b===`streaming`,M=j&&!Cs(g),N=c.status===`loading`,P=c.status===`error`?c.error:void 0,F=N||P!==void 0||j||ws(g,f),L=()=>{for(let e of g)for(let t of e.parts)t.type!==`tool-call`||Ss(t)||(t.name===`ask_questionnaire`?(i?.(`questionnaire`,`skipping pending questionnaire before send`,{id:t.id}),S({toolCallId:t.id,tool:t.name,output:{answers:[],skipped:!0}})):(i?.(`tool`,`settling unimplemented tool call "${t.name}" as error`,{id:t.id}),S({toolCallId:t.id,tool:t.name,output:null,state:`output-error`,errorText:`The page hosting this chat has no implementation for "${t.name}"`})))},ee=e=>{let t=bc({files:e,existing:D,limits:k,createId:()=>`attachment-${A.current++}`});O(e=>[...e,...t.map(({draft:e})=>e)]);let n=(e,t)=>O(n=>n.map(n=>n.id===e?{...n,...t}:n));for(let{draft:e,file:r}of t){if(e.status===`error`){i?.(`attachment`,`rejected "${e.name}"`,{reason:e.error,size:e.size,type:r.type});continue}i?.(`attachment`,`attached "${e.name}"`,{kind:e.kind,mimeType:e.mimeType,size:e.size}),xc(r).then(t=>n(e.id,{status:`ready`,data:t}),t=>{i?.(`error`,`attachment "${e.name}" could not be read`,t),n(e.id,{status:`error`,error:`The file could not be read`})})}},R=e=>{i?.(`attachment`,`attachment removed`,{id:e}),O(t=>t.filter(t=>t.id!==e))},te=()=>{let e=T.trim(),t=Tc(D),n=D.some(e=>e.status===`reading`);F||n||e.length===0&&t.length===0||(L(),i?.(`send`,e.length>0?e:`${t.length} attachment(s), no message text`,t.length===0?void 0:{attachments:D.filter(e=>e.status===`ready`).map(e=>({name:e.name,kind:e.kind,size:e.size}))}),_(t.length===0?e:{content:[...t,...e.length>0?[{type:`text`,content:e}]:[]]}),E(``),O([]))},z=(e,t)=>{i?.(`questionnaire`,`answers submitted`,{toolCallId:e,answers:t}),S({toolCallId:e,tool:os,output:{answers:t}})},B=()=>{i?.(`status`,`conversation reset`),y([]),E(``),O([]),s()},V=t.showHeader!==!1;return(0,Y.jsxs)(js,{className:J(`h-full w-full gap-0 rounded-none bg-background text-foreground ring-0`,!V&&`pt-0`),children:[V&&(0,Y.jsxs)(Ms,{className:`gap-1 border-b`,children:[(0,Y.jsx)(Ns,{children:t.title??`AstralBeam`}),(0,Y.jsx)(Ps,{children:(0,Y.jsx)(As,{variant:`outline`,size:`icon-sm`,"aria-label":`Reset conversation`,disabled:j||g.length===0,onClick:B,children:(0,Y.jsx)(I,{})})})]}),(0,Y.jsx)(Fs,{className:`min-h-0 flex-1 overflow-hidden p-0`,children:(0,Y.jsx)(op,{messages:g,widgets:r,toolTitles:p,activeSlots:a,isBusy:F,awaitingReply:M,onQuestionnaireAnswers:z})}),(0,Y.jsx)(Is,{className:`flex-col gap-2 rounded-none border-t-0 bg-transparent pt-1`,children:(0,Y.jsx)(Hc,{draft:T,onDraftChange:E,onSend:te,onStop:()=>{i?.(`status`,`generation stopped by user`),C()},onRetry:g.length>0?()=>void w():void 0,showError:b===`error`,error:x,streamBusy:j,isBusy:F,authPending:N,authError:P,onAuthRetry:u?()=>void _p({...u,force:!0}).catch(()=>void 0):void 0,attachments:D,attachmentLimits:k,onAddFiles:ee,onRemoveAttachment:R})})]})}function Tp(e,t){let n=e.host.parentElement??document.body,r=Es(),i=document.createElement(`style`);e.append(i);let a=()=>{i.textContent=Ds(n,r),t()?.(`theme`,`host style bridged onto widget slots`,{rule:i.textContent})};a();let o=0,s=()=>{cancelAnimationFrame(o),o=requestAnimationFrame(a)},c=[];for(let e=n;e;e=e.parentElement){let t=new MutationObserver(s);t.observe(e,{attributeFilter:[`class`,`style`]}),c.push(t)}return()=>{cancelAnimationFrame(o);for(let e of c)e.disconnect();i.remove()}}function Ep(t,n,r){let i=document.createElement(`style`);i.textContent=`/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
|
|
76
|
+
`),inputSchema:{type:`object`,properties:{widget:{type:`string`,enum:Object.keys(e),description:`Name of the widget to render.`},props:{type:`object`,description:`Props for the widget, matching its props schema.`}},required:[`widget`]}}).client((e,n)=>t(e,n?.toolCallId??``))}function fp(){return Xt({name:os,description:`Ask the user a short structured questionnaire rendered inline in the chat. Use it when the next step genuinely depends on their choices instead of asking in prose. The call stays pending until the user submits; their answers arrive as the tool output. Skipped optional questions come back with an empty answers array. An output with skipped: true means the user dismissed the questionnaire by continuing the conversation instead — do not re-ask; address their next message.`,inputSchema:{type:`object`,properties:{items:{type:`array`,minItems:1,description:`Questions shown one at a time, in order.`,items:{type:`object`,properties:{name:{type:`string`,description:`Unique key identifying the question.`},title:{type:`string`,description:`The question itself.`},description:{type:`string`,description:`Optional helper text.`},required:{type:`boolean`,description:`Whether an answer is mandatory.`},multiple:{type:`boolean`,description:`Whether several choices may be selected.`},choices:{type:`array`,minItems:1,items:{type:`object`,properties:{value:{type:`string`},label:{type:`string`},description:{type:`string`}},required:[`value`,`label`]}},input:{type:`object`,description:`Optional free-form alternative to the fixed choices.`,properties:{label:{type:`string`},placeholder:{type:`string`}},required:[`label`,`placeholder`]}},required:[`name`,`title`,`choices`]}}},required:[`items`]}}).client()}function pp(e,t){return Object.entries(e).map(([e,n])=>Xt({name:e,description:n.description,inputSchema:vs(n.parameters),...n.metadata?{metadata:n.metadata}:{}}).client(async r=>{t?.(`tool`,`executing host tool "${e}"`,{input:r});let i=await ys(n.parameters,r??{});if(i==null)throw t?.(`error`,`input for host tool "${e}" failed schema validation`,{input:r}),Error(`Input for tool "${e}" failed schema validation`);try{let r=await n.execute(i);return t?.(`tool`,`host tool "${e}" returned`,{output:r}),r}catch(n){throw t?.(`error`,`host tool "${e}" threw`,{error:n}),n}}))}function mp(e){if(e.length>16384)throw Error(`The authentication token is too large`);let t=e.split(`.`);if(t.length!==3||!t[1])throw Error(`The authentication token is not a JWT`);let n=t[1].replaceAll(`-`,`+`).replaceAll(`_`,`/`),r=n.padEnd(Math.ceil(n.length/4)*4,`=`),i;try{i=JSON.parse(atob(r))}catch{throw Error(`The authentication token has an invalid payload`)}let a=i?.exp;if(!Number.isInteger(a)||Number(a)<=0)throw Error(`The authentication token has no valid expiry`);return Number(a)*1e3}function hp(e){let t=e.get(`authorization`);return t?.startsWith(`Bearer `)?t.slice(7):void 0}async function gp(e){let{authEndpoint:t,session:n,onStateChange:r,fetchClient:i,debug:a}=e,{signal:o}=n.abortController;try{let e=await i(t,{method:`POST`,headers:{accept:`application/json`},credentials:`include`,cache:`no-store`,signal:o});if(!e.ok)throw Error(`Authentication endpoint returned HTTP ${e.status}`);let s=(await e.json())?.token;if(typeof s!=`string`||!s)throw Error(`Authentication endpoint did not return a token`);let c=mp(s);if(c<=Date.now())throw Error(`Authentication endpoint returned an expired token`);return n.cached={value:s,expiresAt:c},r({status:`ready`}),a?.(`auth`,`chat authentication ready`,{expiresAt:new Date(c)}),s}catch(e){let t=e instanceof Error?e:Error(`Chat authentication failed`);throw o.aborted||(r({status:`error`,error:t}),a?.(`error`,`chat authentication failed: ${t.message}`)),t}}async function _p(e){let{session:t,force:n=!1,onStateChange:r}=e,i=Date.now();if(!n&&t.cached&&t.cached.expiresAt-i>6e4)return t.cached.value;if(t.refreshPromise)return await t.refreshPromise;r({status:`loading`});let a=gp(e);t.refreshPromise=a;try{return await a}finally{t.refreshPromise===a&&(t.refreshPromise=void 0)}}async function vp(e){e.session.abortController.signal.aborted&&(e.session.abortController=new AbortController),await _p(e)}function yp({session:e}){e.abortController.abort(),e.refreshPromise=void 0}async function bp(e){let{input:t,init:n,session:r,fetchClient:i,debug:a}=e,o=await i(t,n);if(o.status!==401||r.abortController.signal.aborted)return o;let s=hp(new Headers(n?.headers)),c=!s||r.cached?.value===s;c&&(r.cached=void 0),a?.(`auth`,`chat token was rejected; refreshing once`);let l=await _p({...e,force:c}),u=new Headers(n?.headers);return u.set(`authorization`,`Bearer ${l}`),await o.body?.cancel(),await i(t,{...n,headers:u})}function xp({container:e,cleanup:t}){t?.(),e.remove()}function Sp(e,t,n){let[r,i]=(0,v.useState)(new Set),a=(0,v.useRef)(new Map),o=e=>{let t=[];for(let[n,r]of a.current)e(r)&&(xp(r),a.current.delete(n),t.push(gs(n)));return t.length>0&&i(e=>{let n=new Set(e);for(let e of t)n.delete(e);return n}),t.length},s=(0,v.useRef)(!0);(0,v.useEffect)(()=>(s.current=!0,()=>{s.current=!1,o(()=>!0)}),[]);let c=(0,v.useRef)(e);c.current=e;let l=(0,v.useRef)(n);l.current=n;let u=(0,v.useCallback)(async({widget:e,props:n},r)=>{let u=l.current;u?.(`widget`,`agent requested widget "${e}"`,{toolCallId:r,props:n});let d=hs(c.current,e);if(!d)throw Error(`Unknown widget "${e}"`);let f=await ys(d.parameters,n??{});if(f==null)throw u?.(`error`,`props for widget "${e}" failed validation`,{props:n}),Error(`Props for widget "${e}" failed validation`);if(!s.current)throw Error(`The chat is no longer mounted`);let p=gs(r),m=a.current.get(r);m&&(u?.(`widget`,`replacing previous render of "${e}"`,{toolCallId:r}),xp(m));let h=document.createElement(`div`);h.slot=p,t.append(h);let g=d.render(f,h);a.current.set(r,{widget:e,container:h,cleanup:g??void 0});let _=o(()=>a.current.size>20);return _>0&&u?.(`widget`,`evicted ${_} widget render(s) past the active cap`,{cap:20}),i(e=>new Set(e).add(p)),u?.(`widget`,`widget "${e}" rendered`,{slotName:p}),{widget:e,rendered:!0}},[t]);return(0,v.useEffect)(()=>{let t=o(t=>!hs(e,t.widget));t>0&&n?.(`widget`,`disposed ${t} render(s) of widgets no longer registered`)},[e,n]),{activeSlots:r,renderWidget:u,discardAllRenders:()=>o(()=>!0)}}const Cp={};function wp({options:t,host:n}){let r=t.widgets??Cp,i=(0,v.useMemo)(()=>e(t.debug),[t.debug]),{activeSlots:a,renderWidget:o,discardAllRenders:s}=Sp(r,n,i),[c,l]=(0,v.useState)(()=>t.authEndpoint?{status:`loading`}:{status:`ready`}),[u]=(0,v.useState)(()=>t.authEndpoint?{authEndpoint:t.authEndpoint,session:{cached:void 0,refreshPromise:void 0,abortController:new AbortController},onStateChange:l,fetchClient:globalThis.fetch.bind(globalThis),debug:i}:void 0);u&&(u.debug=i),(0,v.useEffect)(()=>{if(u)return vp(u).catch(()=>void 0),()=>yp(u)},[u]);let d=(0,v.useMemo)(()=>up(r,t.tools??{},o,i),[r,t.tools,i,o]),f=(0,v.useMemo)(()=>new Set(d.map(e=>e.name)),[d]),p=(0,v.useMemo)(()=>{let e={};for(let t of d){let n=t.metadata?.title;typeof n==`string`&&n.length>0&&(e[t.name]=n)}return e},[d]);(0,v.useEffect)(()=>{i?.(`mount`,`tool set declared to the agent`,{tools:[...f],widgets:Object.keys(r)})},[i,f,r]);let[m]=(0,v.useState)(()=>tr(t.chatEndpoint??`/api/chat`,u?async()=>({headers:{authorization:`Bearer ${await _p(u)}`},fetchClient:(e,t)=>bp({...u,input:e,init:t})}):void 0)),h=(0,v.useMemo)(()=>sp(i),[i]),{messages:g,sendMessage:_,setMessages:y,status:b,error:x,addToolResult:S,stop:C,reload:w}=U({initialMessages:[],connection:m,tools:d,forwardedProps:(0,v.useMemo)(()=>({...t.systemPrompt?{systemPrompt:t.systemPrompt}:{},...t.debug?{debug:!0}:{}}),[t.systemPrompt,t.debug]),...h||{}});(0,v.useEffect)(()=>{i?.(`status`,`chat status is "${b}"`)},[i,b]);let[T,E]=(0,v.useState)(``),[D,O]=(0,v.useState)([]),k=(0,v.useMemo)(()=>uc(t.attachments),[t.attachments]),A=(0,v.useRef)(0);(0,v.useEffect)(()=>{k.enabled||O([])},[k.enabled]);let j=b===`submitted`||b===`streaming`,M=j&&!Cs(g),N=c.status===`loading`,P=c.status===`error`?c.error:void 0,F=N||P!==void 0||j||ws(g,f),L=()=>{for(let e of g)for(let t of e.parts)t.type!==`tool-call`||Ss(t)||(t.name===`ask_questionnaire`?(i?.(`questionnaire`,`skipping pending questionnaire before send`,{id:t.id}),S({toolCallId:t.id,tool:t.name,output:{answers:[],skipped:!0}})):(i?.(`tool`,`settling unimplemented tool call "${t.name}" as error`,{id:t.id}),S({toolCallId:t.id,tool:t.name,output:null,state:`output-error`,errorText:`The page hosting this chat has no implementation for "${t.name}"`})))},ee=e=>{let t=bc({files:e,existing:D,limits:k,createId:()=>`attachment-${A.current++}`});O(e=>[...e,...t.map(({draft:e})=>e)]);let n=(e,t)=>O(n=>n.map(n=>n.id===e?{...n,...t}:n));for(let{draft:e,file:r}of t){if(e.status===`error`){i?.(`attachment`,`rejected "${e.name}"`,{reason:e.error,size:e.size,type:r.type});continue}i?.(`attachment`,`attached "${e.name}"`,{kind:e.kind,mimeType:e.mimeType,size:e.size}),xc(r).then(t=>n(e.id,{status:`ready`,data:t}),t=>{i?.(`error`,`attachment "${e.name}" could not be read`,t),n(e.id,{status:`error`,error:`The file could not be read`})})}},R=e=>{i?.(`attachment`,`attachment removed`,{id:e}),O(t=>t.filter(t=>t.id!==e))},te=()=>{let e=T.trim(),t=Tc(D),n=D.some(e=>e.status===`reading`);F||n||e.length===0&&t.length===0||(L(),i?.(`send`,e.length>0?e:`${t.length} attachment(s), no message text`,t.length===0?void 0:{attachments:D.filter(e=>e.status===`ready`).map(e=>({name:e.name,kind:e.kind,size:e.size}))}),_(t.length===0?e:{content:[...t,...e.length>0?[{type:`text`,content:e}]:[]]}),E(``),O([]))},z=(e,t)=>{i?.(`questionnaire`,`answers submitted`,{toolCallId:e,answers:t}),S({toolCallId:e,tool:os,output:{answers:t}})},B=()=>{i?.(`status`,`conversation reset`),y([]),E(``),O([]),s()},V=t.showHeader!==!1;return(0,Y.jsxs)(js,{className:J(`h-full w-full gap-0 rounded-none bg-background text-foreground ring-0`,!V&&`pt-0`),children:[V&&(0,Y.jsxs)(Ms,{className:`gap-1 border-b`,children:[(0,Y.jsx)(Ns,{children:t.title??`AstralBeam`}),(0,Y.jsx)(Ps,{children:(0,Y.jsx)(As,{variant:`outline`,size:`icon-sm`,"aria-label":`Reset conversation`,disabled:j||g.length===0,onClick:B,children:(0,Y.jsx)(I,{})})})]}),(0,Y.jsx)(Fs,{className:`min-h-0 flex-1 overflow-hidden p-0`,children:(0,Y.jsx)(op,{messages:g,emptyTitle:t.emptyTitle,emptyDescription:t.emptyDescription,widgets:r,toolTitles:p,activeSlots:a,isBusy:F,awaitingReply:M,onQuestionnaireAnswers:z})}),(0,Y.jsx)(Is,{className:`flex-col gap-2 rounded-none border-t-0 bg-transparent pt-1`,children:(0,Y.jsx)(Hc,{draft:T,onDraftChange:E,onSend:te,onStop:()=>{i?.(`status`,`generation stopped by user`),C()},onRetry:g.length>0?()=>void w():void 0,showError:b===`error`,error:x,streamBusy:j,isBusy:F,authPending:N,authError:P,onAuthRetry:u?()=>void _p({...u,force:!0}).catch(()=>void 0):void 0,attachments:D,attachmentLimits:k,onAddFiles:ee,onRemoveAttachment:R})})]})}function Tp(e,t){let n=e.host.parentElement??document.body,r=Es(),i=document.createElement(`style`);e.append(i);let a=()=>{i.textContent=Ds(n,r),t()?.(`theme`,`host style bridged onto widget slots`,{rule:i.textContent})};a();let o=0,s=()=>{cancelAnimationFrame(o),o=requestAnimationFrame(a)},c=[];for(let e=n;e;e=e.parentElement){let t=new MutationObserver(s);t.observe(e,{attributeFilter:[`class`,`style`]}),c.push(t)}return()=>{cancelAnimationFrame(o);for(let e of c)e.disconnect();i.remove()}}function Ep(t,n,r){let i=document.createElement(`style`);i.textContent=`/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
|
|
77
77
|
@layer properties{:root,:host{--shimmer-angle:20deg}*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scroll-snap-strictness:proximity;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-duration:initial;--tw-ease:initial;--tw-content:"";--tw-scrollbar-thumb:#0000;--tw-scrollbar-track:#0000;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0;--scroll-fade-t:0px;--scroll-fade-b:0px;--scroll-fade-s:0px;--scroll-fade-e:0px;--scroll-fade-mask:initial;--shimmer-image:initial;--shimmer-text-fill:initial}}@layer theme{:root,:host{--font-sans:var(--font-sans);--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--spacing:.25rem;--container-sm:24rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-md:calc(var(--radius) * .8);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--font-heading:var(--font-heading)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){*{outline-color:color-mix(in oklab, var(--ring) 50%, transparent)}}:host{font-family:var(--font-sans);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color-scheme:light;font-style:normal;line-height:1.5;display:block}.astralbeam-root{background-color:var(--background);font-family:var(--font-sans);color:var(--foreground)}.dark{color-scheme:dark}button:not(:disabled),[role=button]:not(:disabled){cursor:pointer}}@layer components;@layer utilities{.\\@container\\/card-header{container:card-header/inline-size}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:0}.inset-s-1{inset-inline-start:var(--spacing)}.inset-s-1\\/2{inset-inline-start:50%}.start-3{inset-inline-start:calc(var(--spacing) * 3)}.end-3{inset-inline-end:calc(var(--spacing) * 3)}.top-0{top:0}.bottom-0{bottom:0}.z-10{z-index:10}.z-20{z-index:20}.order-first{order:-9999}.order-last{order:9999}.col-start-1{grid-column-start:1}.col-start-2{grid-column-start:2}.col-start-3{grid-column-start:3}.row-span-2{grid-row:span 2/span 2}.row-start-1{grid-row-start:1}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.my-2{margin-block:calc(var(--spacing) * 2)}.my-3{margin-block:calc(var(--spacing) * 3)}.ms-1{margin-inline-start:var(--spacing)}.ms-auto{margin-inline-start:auto}.mt-0{margin-top:0}.mt-0\\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mb-1{margin-bottom:var(--spacing)}.mb-1\\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.field-sizing-content{field-sizing:content}.aspect-square{aspect-ratio:1}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-3\\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-full{width:100%;height:100%}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-auto{height:auto}.h-full{height:100%}.h-max{height:max-content}.max-h-24{max-height:calc(var(--spacing) * 24)}.max-h-40{max-height:calc(var(--spacing) * 40)}.min-h-0{min-height:0}.min-h-4{min-height:calc(var(--spacing) * 4)}.min-h-9{min-height:calc(var(--spacing) * 9)}.min-h-11{min-height:calc(var(--spacing) * 11)}.min-h-16{min-height:calc(var(--spacing) * 16)}.min-h-\\[1lh\\]{min-height:1lh}.min-h-full{min-height:100%}.w-10{width:calc(var(--spacing) * 10)}.w-24{width:calc(var(--spacing) * 24)}.w-fit{width:fit-content}.w-full{width:100%}.max-w-\\[80\\%\\]{max-width:80%}.max-w-full{max-width:100%}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:0}.min-w-8{min-width:calc(var(--spacing) * 8)}.min-w-40{min-width:calc(var(--spacing) * 40)}.min-w-\\[14ch\\]{min-width:14ch}.flex-1{flex:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-x-1{--tw-translate-x:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-x-1\\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-3{--tw-translate-y:calc(var(--spacing) * -3);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-3\\/4{--tw-translate-y:calc(calc(3 / 4 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-3{--tw-translate-y:calc(var(--spacing) * 3);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-3\\/4{--tw-translate-y:calc(3 / 4 * 100%);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-\\[--spacing\\(0\\.45\\)\\]{--tw-translate-y:calc(var(--spacing) * .45);translate:var(--tw-translate-x) var(--tw-translate-y)}.shimmer{--_spread:var(--shimmer-spread,calc(3ch + 40px));--_base:currentColor;--_highlight:var(--shimmer-color,oklch(from currentColor l c h / calc(alpha* .2)));background-image:var(--shimmer-image,linear-gradient(calc(90deg + var(--shimmer-angle)), var(--_base) calc(50% - var(--_spread)), var(--_highlight) calc(50% - var(--_spread) * .5), var(--_highlight) 50%, var(--_highlight) calc(50% + var(--_spread) * .5), var(--_base) calc(50% + var(--_spread))))}@supports (color:color-mix(in lab, red, red)){.shimmer{background-image:var(--shimmer-image,linear-gradient(calc(90deg + var(--shimmer-angle)), var(--_base) calc(50% - var(--_spread)), color-mix(in oklch, var(--_highlight), var(--_base) 50%) calc(50% - var(--_spread) * .5), var(--_highlight) 50%, color-mix(in oklch, var(--_highlight), var(--_base) 50%) calc(50% + var(--_spread) * .5), var(--_base) calc(50% + var(--_spread))))}}.shimmer{background-repeat:no-repeat;background-size:calc(200% + var(--_spread) * 2) 100%;-webkit-text-fill-color:var(--shimmer-text-fill,transparent);animation:tw-shimmer var(--shimmer-duration,2s) linear infinite;background-position:0 0;-webkit-background-clip:text;background-clip:text}.shimmer:is(.dark *){--_highlight:var(--shimmer-color,oklch(from currentColor max(.8, calc(l + .4)) c h / calc(alpha + .4)))}.shimmer:where([dir=rtl],[dir=rtl] *){animation-direction:reverse}.scroll-fade-x{--_scroll-fade-size-s:var(--scroll-fade-s-size,var(--scroll-fade-size,min(12%, calc(var(--spacing) * 10))));--_scroll-fade-size-e:var(--scroll-fade-e-size,var(--scroll-fade-size,min(12%, calc(var(--spacing) * 10))));--scroll-fade-inline:linear-gradient(to right, transparent 0, #000 var(--scroll-fade-s,0px), #000 calc(100% - var(--scroll-fade-e,0px)), transparent 100%)}.scroll-fade-x:where([dir=rtl],[dir=rtl] *){--scroll-fade-inline:linear-gradient(to left, transparent 0, #000 var(--scroll-fade-s,0px), #000 calc(100% - var(--scroll-fade-e,0px)), transparent 100%)}.scroll-fade-x{-webkit-mask-image:var(--scroll-fade-mask,var(--scroll-fade-inline));-webkit-mask-image:var(--scroll-fade-mask,var(--scroll-fade-inline));-webkit-mask-image:var(--scroll-fade-mask,var(--scroll-fade-inline));mask-image:var(--scroll-fade-mask,var(--scroll-fade-inline));-webkit-mask-composite:source-in;-webkit-mask-composite:source-in;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-composite:source-in;mask-composite:intersect}@supports (animation-timeline:scroll()){.scroll-fade-x{animation:1ms ease-in-out scroll-fade-reveal-s,1ms ease-in-out scroll-fade-reveal-e;animation-timeline:scroll(self inline),scroll(self inline);animation-range:0 var(--scroll-fade-reveal,calc(var(--spacing) * 24)), calc(100% - var(--scroll-fade-reveal,calc(var(--spacing) * 24))) 100%;animation-fill-mode:both}}@supports not (animation-timeline:scroll()){.scroll-fade-x{--scroll-fade-s:var(--_scroll-fade-size-s);--scroll-fade-e:var(--_scroll-fade-size-e)}}.scroll-fade-b{--_scroll-fade-size-b:var(--scroll-fade-b-size,var(--scroll-fade-size,min(12%, calc(var(--spacing) * 10))));--scroll-fade-mask:linear-gradient(to bottom, #000 0, #000 calc(100% - var(--scroll-fade-b,0px)), transparent 100%);-webkit-mask-image:var(--scroll-fade-mask);-webkit-mask-image:var(--scroll-fade-mask);-webkit-mask-image:var(--scroll-fade-mask);mask-image:var(--scroll-fade-mask);-webkit-mask-composite:source-in;-webkit-mask-composite:source-in;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-composite:source-in;mask-composite:intersect}@supports (animation-timeline:scroll()){.scroll-fade-b{animation:1ms ease-in-out scroll-fade-reveal-b;animation-timeline:scroll(self y);animation-range:calc(100% - var(--scroll-fade-reveal,calc(var(--spacing) * 24))) 100%;animation-fill-mode:both}}@supports not (animation-timeline:scroll()){.scroll-fade-b{--scroll-fade-b:var(--_scroll-fade-size-b)}}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.resize-none{resize:none}.snap-x{scroll-snap-type:x var(--tw-scroll-snap-strictness)}.snap-mandatory{--tw-scroll-snap-strictness:mandatory}.scroll-px-1{scroll-padding-inline:var(--spacing)}.scrollbar-none{scrollbar-width:none}.scrollbar-thin{scrollbar-width:thin}.scrollbar-gutter-stable{scrollbar-gutter:stable}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-\\[minmax\\(0\\,1fr\\)_auto_auto\\]{grid-template-columns:minmax(0,1fr) auto auto}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-\\(--card-spacing\\){gap:var(--card-spacing)}.gap-0{gap:0}.gap-0\\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}.self-end{align-self:flex-end}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.justify-self-start{justify-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overscroll-contain{overscroll-behavior:contain}.overscroll-x-contain{overscroll-behavior-x:contain}.rounded-\\[4px\\]{border-radius:4px}.rounded-\\[calc\\(var\\(--radius\\)-3px\\)\\]{border-radius:calc(var(--radius) - 3px)}.rounded-\\[min\\(var\\(--radius-md\\)\\,10px\\)\\]{border-radius:min(var(--radius-md), 10px)}.rounded-\\[min\\(var\\(--radius-md\\)\\,12px\\)\\]{border-radius:min(var(--radius-md), 12px)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) * .8)}.rounded-none{border-radius:0}.rounded-sm{border-radius:calc(var(--radius) * .6)}.rounded-xl{border-radius:calc(var(--radius) * 1.4)}.rounded-t-xl{border-top-left-radius:calc(var(--radius) * 1.4);border-top-right-radius:calc(var(--radius) * 1.4)}.rounded-b-xl{border-bottom-right-radius:calc(var(--radius) * 1.4);border-bottom-left-radius:calc(var(--radius) * 1.4)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-s-2{border-inline-start-style:var(--tw-border-style);border-inline-start-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-0{border-top-style:var(--tw-border-style);border-top-width:0}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-border{border-color:var(--border)}.border-destructive,.border-destructive\\/50{border-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.border-destructive\\/50{border-color:color-mix(in oklab, var(--destructive) 50%, transparent)}}.border-input{border-color:var(--input)}.border-ring{border-color:var(--ring)}.border-transparent{border-color:#0000}.bg-background{background-color:var(--background)}.bg-card{background-color:var(--card)}.bg-destructive,.bg-destructive\\/10{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.bg-destructive\\/10{background-color:color-mix(in oklab, var(--destructive) 10%, transparent)}}.bg-muted,.bg-muted\\/50{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\\/50{background-color:color-mix(in oklab, var(--muted) 50%, transparent)}}.bg-primary{background-color:var(--primary)}.bg-primary-foreground{background-color:var(--primary-foreground)}.bg-secondary{background-color:var(--secondary)}.bg-transparent{background-color:#0000}.bg-clip-padding{background-clip:padding-box}.p-\\(--card-spacing\\){padding:var(--card-spacing)}.p-0{padding:0}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.px-\\(--card-spacing\\){padding-inline:var(--card-spacing)}.px-1{padding-inline:var(--spacing)}.px-1\\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.py-\\(--card-spacing\\){padding-block:var(--card-spacing)}.py-0{padding-block:0}.py-0\\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\\.5{padding-block:calc(var(--spacing) * 2.5)}.ps-2{padding-inline-start:calc(var(--spacing) * 2)}.ps-3{padding-inline-start:calc(var(--spacing) * 3)}.ps-5{padding-inline-start:calc(var(--spacing) * 5)}.ps-6{padding-inline-start:calc(var(--spacing) * 6)}.pe-2{padding-inline-end:calc(var(--spacing) * 2)}.pt-0{padding-top:0}.pt-1{padding-top:var(--spacing)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.text-center{text-align:center}.text-justify{text-align:justify}.text-start{text-align:start}.align-middle{vertical-align:middle}.font-heading{font-family:var(--font-heading)}.font-mono{font-family:var(--font-mono)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-sm\\/relaxed{font-size:var(--text-sm);line-height:var(--leading-relaxed)}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[0\\.7em\\]{font-size:.7em}.text-\\[0\\.8rem\\]{font-size:.8rem}.text-\\[0\\.625rem\\]{font-size:.625rem}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.text-balance{text-wrap:balance}.text-pretty{text-wrap:pretty}.text-wrap{text-wrap:wrap}.wrap-break-word{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-card-foreground{color:var(--card-foreground)}.text-destructive{color:var(--destructive)}.text-foreground{color:var(--foreground)}.text-muted-foreground{color:var(--muted-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-secondary-foreground{color:var(--secondary-foreground)}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-60{opacity:.6}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-3{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-card{--tw-ring-color:var(--card)}.ring-foreground,.ring-foreground\\/10{--tw-ring-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.ring-foreground\\/10{--tw-ring-color:color-mix(in oklab, var(--foreground) 10%, transparent)}}.ring-ring,.ring-ring\\/50{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.ring-ring\\/50{--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition-\\[color\\,box-shadow\\,background-color\\]{transition-property:color,box-shadow,background-color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[translate\\,scale\\,opacity\\]{transition-property:translate,scale,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.contain-content{contain:content}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\\[--card-spacing\\:--spacing\\(4\\)\\]{--card-spacing:calc(var(--spacing) * 4)}.\\[contain-intrinsic-size\\:auto_10rem\\]{contain-intrinsic-size:auto 10rem}.\\[content-visibility\\:auto\\]{content-visibility:auto}.running{animation-play-state:running}.group-has-data-\\[slot\\=message-footer\\]\\/message\\:-translate-y-8:is(:where(.group\\/message):has([data-slot=message-footer]) *){--tw-translate-y:calc(var(--spacing) * -8);translate:var(--tw-translate-x) var(--tw-translate-y)}.group-has-data-\\[slot\\=questionnaire-choice-description\\]\\/questionnaire-choice\\:translate-y-0\\.5:is(:where(.group\\/questionnaire-choice):has([data-slot=questionnaire-choice-description]) *){--tw-translate-y:calc(var(--spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.group-has-data-\\[variant\\=ghost\\]\\/message\\:px-0:is(:where(.group\\/message):has([data-variant=ghost]) *){padding-inline:0}.group-has-\\[\\>input\\]\\/input-group\\:pt-2:is(:where(.group\\/input-group):has(>input) *){padding-top:calc(var(--spacing) * 2)}.group-has-\\[\\>input\\]\\/input-group\\:pb-2:is(:where(.group\\/input-group):has(>input) *){padding-bottom:calc(var(--spacing) * 2)}.group-data-\\[align\\=end\\]\\/bubble\\:self-end:is(:where(.group\\/bubble)[data-align=end] *){align-self:flex-end}.group-data-\\[align\\=end\\]\\/message\\:justify-end:is(:where(.group\\/message)[data-align=end] *){justify-content:flex-end}.group-data-\\[align\\=end\\]\\/message\\:self-end:is(:where(.group\\/message)[data-align=end] *){align-self:flex-end}.group-data-\\[disabled\\=true\\]\\/input-group\\:opacity-50:is(:where(.group\\/input-group)[data-disabled=true] *){opacity:.5}.group-data-\\[orientation\\=vertical\\]\\/attachment\\:absolute:is(:where(.group\\/attachment)[data-orientation=vertical] *){position:absolute}.group-data-\\[orientation\\=vertical\\]\\/attachment\\:end-3:is(:where(.group\\/attachment)[data-orientation=vertical] *){inset-inline-end:calc(var(--spacing) * 3)}.group-data-\\[orientation\\=vertical\\]\\/attachment\\:top-3:is(:where(.group\\/attachment)[data-orientation=vertical] *){top:calc(var(--spacing) * 3)}.group-data-\\[orientation\\=vertical\\]\\/attachment\\:w-full:is(:where(.group\\/attachment)[data-orientation=vertical] *){width:100%}.group-data-\\[orientation\\=vertical\\]\\/attachment\\:gap-1:is(:where(.group\\/attachment)[data-orientation=vertical] *){gap:var(--spacing)}.group-data-\\[orientation\\=vertical\\]\\/attachment\\:px-1:is(:where(.group\\/attachment)[data-orientation=vertical] *){padding-inline:var(--spacing)}.group-data-\\[panel-open\\]\\/marker\\:rotate-90:is(:where(.group\\/marker)[data-panel-open] *){rotate:90deg}.group-data-\\[shortcut\\]\\/questionnaire-choice\\:inline-flex:is(:where(.group\\/questionnaire-choice)[data-shortcut] *){display:inline-flex}.group-data-\\[size\\=sm\\]\\/attachment\\:w-8:is(:where(.group\\/attachment)[data-size=sm] *){width:calc(var(--spacing) * 8)}.group-data-\\[size\\=sm\\]\\/card\\:text-sm:is(:where(.group\\/card)[data-size=sm] *){font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.group-data-\\[size\\=xs\\]\\/attachment\\:w-7:is(:where(.group\\/attachment)[data-size=xs] *){width:calc(var(--spacing) * 7)}.group-data-\\[size\\=xs\\]\\/attachment\\:rounded-md:is(:where(.group\\/attachment)[data-size=xs] *){border-radius:calc(var(--radius) * .8)}.group-data-\\[state\\=done\\]\\/attachment\\:opacity-100:is(:where(.group\\/attachment)[data-state=done] *){opacity:1}.group-data-\\[state\\=error\\]\\/attachment\\:bg-destructive\\/10:is(:where(.group\\/attachment)[data-state=error] *){background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.group-data-\\[state\\=error\\]\\/attachment\\:bg-destructive\\/10:is(:where(.group\\/attachment)[data-state=error] *){background-color:color-mix(in oklab, var(--destructive) 10%, transparent)}}.group-data-\\[state\\=error\\]\\/attachment\\:text-destructive:is(:where(.group\\/attachment)[data-state=error] *),.group-data-\\[state\\=error\\]\\/attachment\\:text-destructive\\/80:is(:where(.group\\/attachment)[data-state=error] *){color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.group-data-\\[state\\=error\\]\\/attachment\\:text-destructive\\/80:is(:where(.group\\/attachment)[data-state=error] *){color:color-mix(in oklab, var(--destructive) 80%, transparent)}}.group-data-\\[state\\=idle\\]\\/attachment\\:opacity-100:is(:where(.group\\/attachment)[data-state=idle] *){opacity:1}.group-data-\\[state\\=processing\\]\\/attachment\\:shimmer:is(:where(.group\\/attachment)[data-state=processing] *){--_spread:var(--shimmer-spread,calc(3ch + 40px));--_base:currentColor;--_highlight:var(--shimmer-color,oklch(from currentColor l c h / calc(alpha* .2)));background-image:var(--shimmer-image,linear-gradient(calc(90deg + var(--shimmer-angle)), var(--_base) calc(50% - var(--_spread)), var(--_highlight) calc(50% - var(--_spread) * .5), var(--_highlight) 50%, var(--_highlight) calc(50% + var(--_spread) * .5), var(--_base) calc(50% + var(--_spread))))}@supports (color:color-mix(in lab, red, red)){.group-data-\\[state\\=processing\\]\\/attachment\\:shimmer:is(:where(.group\\/attachment)[data-state=processing] *){background-image:var(--shimmer-image,linear-gradient(calc(90deg + var(--shimmer-angle)), var(--_base) calc(50% - var(--_spread)), color-mix(in oklch, var(--_highlight), var(--_base) 50%) calc(50% - var(--_spread) * .5), var(--_highlight) 50%, color-mix(in oklch, var(--_highlight), var(--_base) 50%) calc(50% + var(--_spread) * .5), var(--_base) calc(50% + var(--_spread))))}}.group-data-\\[state\\=processing\\]\\/attachment\\:shimmer:is(:where(.group\\/attachment)[data-state=processing] *){background-repeat:no-repeat;background-size:calc(200% + var(--_spread) * 2) 100%;-webkit-text-fill-color:var(--shimmer-text-fill,transparent);animation:tw-shimmer var(--shimmer-duration,2s) linear infinite;background-position:0 0;-webkit-background-clip:text;background-clip:text}.group-data-\\[state\\=processing\\]\\/attachment\\:shimmer:is(:where(.group\\/attachment)[data-state=processing] *):is(.dark *){--_highlight:var(--shimmer-color,oklch(from currentColor max(.8, calc(l + .4)) c h / calc(alpha + .4)))}.group-data-\\[state\\=processing\\]\\/attachment\\:shimmer:is(:where(.group\\/attachment)[data-state=processing] *):where([dir=rtl],[dir=rtl] *){animation-direction:reverse}.group-data-\\[state\\=uploading\\]\\/attachment\\:shimmer:is(:where(.group\\/attachment)[data-state=uploading] *){--_spread:var(--shimmer-spread,calc(3ch + 40px));--_base:currentColor;--_highlight:var(--shimmer-color,oklch(from currentColor l c h / calc(alpha* .2)));background-image:var(--shimmer-image,linear-gradient(calc(90deg + var(--shimmer-angle)), var(--_base) calc(50% - var(--_spread)), var(--_highlight) calc(50% - var(--_spread) * .5), var(--_highlight) 50%, var(--_highlight) calc(50% + var(--_spread) * .5), var(--_base) calc(50% + var(--_spread))))}@supports (color:color-mix(in lab, red, red)){.group-data-\\[state\\=uploading\\]\\/attachment\\:shimmer:is(:where(.group\\/attachment)[data-state=uploading] *){background-image:var(--shimmer-image,linear-gradient(calc(90deg + var(--shimmer-angle)), var(--_base) calc(50% - var(--_spread)), color-mix(in oklch, var(--_highlight), var(--_base) 50%) calc(50% - var(--_spread) * .5), var(--_highlight) 50%, color-mix(in oklch, var(--_highlight), var(--_base) 50%) calc(50% + var(--_spread) * .5), var(--_base) calc(50% + var(--_spread))))}}.group-data-\\[state\\=uploading\\]\\/attachment\\:shimmer:is(:where(.group\\/attachment)[data-state=uploading] *){background-repeat:no-repeat;background-size:calc(200% + var(--_spread) * 2) 100%;-webkit-text-fill-color:var(--shimmer-text-fill,transparent);animation:tw-shimmer var(--shimmer-duration,2s) linear infinite;background-position:0 0;-webkit-background-clip:text;background-clip:text}.group-data-\\[state\\=uploading\\]\\/attachment\\:shimmer:is(:where(.group\\/attachment)[data-state=uploading] *):is(.dark *){--_highlight:var(--shimmer-color,oklch(from currentColor max(.8, calc(l + .4)) c h / calc(alpha + .4)))}.group-data-\\[state\\=uploading\\]\\/attachment\\:shimmer:is(:where(.group\\/attachment)[data-state=uploading] *):where([dir=rtl],[dir=rtl] *){animation-direction:reverse}.group-data-\\[type\\=checkbox\\]\\/questionnaire-choice\\:hidden:is(:where(.group\\/questionnaire-choice)[data-type=checkbox] *),.group-data-\\[type\\=radio\\]\\/questionnaire-choice\\:hidden:is(:where(.group\\/questionnaire-choice)[data-type=radio] *){display:none}.group-data-\\[type\\=radio\\]\\/questionnaire-choice\\:rounded-full:is(:where(.group\\/questionnaire-choice)[data-type=radio] *){border-radius:3.40282e38px}.group-data-\\[variant\\=separator\\]\\/marker\\:flex-none:is(:where(.group\\/marker)[data-variant=separator] *){flex:none}.group-data-\\[variant\\=separator\\]\\/marker\\:text-center:is(:where(.group\\/marker)[data-variant=separator] *){text-align:center}.group-data-checked\\/questionnaire-choice\\:block:is(:is(:where(.group\\/questionnaire-choice):where([data-state=checked]),:where(.group\\/questionnaire-choice):where([data-checked]:not([data-checked=false]))) *){display:block}.group-data-checked\\/questionnaire-choice\\:border-primary:is(:is(:where(.group\\/questionnaire-choice):where([data-state=checked]),:where(.group\\/questionnaire-choice):where([data-checked]:not([data-checked=false]))) *){border-color:var(--primary)}.group-data-checked\\/questionnaire-choice\\:bg-primary:is(:is(:where(.group\\/questionnaire-choice):where([data-state=checked]),:where(.group\\/questionnaire-choice):where([data-checked]:not([data-checked=false]))) *){background-color:var(--primary)}.group-data-checked\\/questionnaire-choice\\:text-primary-foreground:is(:is(:where(.group\\/questionnaire-choice):where([data-state=checked]),:where(.group\\/questionnaire-choice):where([data-checked]:not([data-checked=false]))) *){color:var(--primary-foreground)}.marker\\:text-muted-foreground ::marker{color:var(--muted-foreground)}.marker\\:text-muted-foreground::marker{color:var(--muted-foreground)}.marker\\:text-muted-foreground ::-webkit-details-marker{color:var(--muted-foreground)}.marker\\:text-muted-foreground::-webkit-details-marker{color:var(--muted-foreground)}.selection\\:bg-primary ::selection{background-color:var(--primary)}.selection\\:bg-primary::selection{background-color:var(--primary)}.selection\\:text-primary-foreground ::selection{color:var(--primary-foreground)}.selection\\:text-primary-foreground::selection{color:var(--primary-foreground)}.file\\:inline-flex::file-selector-button{display:inline-flex}.file\\:h-6::file-selector-button{height:calc(var(--spacing) * 6)}.file\\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\\:bg-transparent::file-selector-button{background-color:#0000}.file\\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\\:text-foreground::file-selector-button{color:var(--foreground)}.placeholder\\:text-muted-foreground::placeholder{color:var(--muted-foreground)}.before\\:me-1:before{content:var(--tw-content);margin-inline-end:var(--spacing)}.before\\:h-px:before{content:var(--tw-content);height:1px}.before\\:min-w-0:before{content:var(--tw-content);min-width:0}.before\\:flex-1:before{content:var(--tw-content);flex:1}.before\\:bg-border:before{content:var(--tw-content);background-color:var(--border)}.after\\:ms-1:after{content:var(--tw-content);margin-inline-start:var(--spacing)}.after\\:h-px:after{content:var(--tw-content);height:1px}.after\\:min-w-0:after{content:var(--tw-content);min-width:0}.after\\:flex-1:after{content:var(--tw-content);flex:1}.after\\:bg-border:after{content:var(--tw-content);background-color:var(--border)}.first\\:mt-0:first-child{margin-top:0}.last\\:mb-0:last-child{margin-bottom:0}.focus-within\\:ring-1:focus-within{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-within\\:ring-ring\\/50:focus-within{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.focus-within\\:ring-ring\\/50:focus-within{--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}@media (hover:hover){.hover\\:bg-\\[color-mix\\(in_oklch\\,var\\(--secondary\\)\\,var\\(--foreground\\)_5\\%\\)\\]:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-\\[color-mix\\(in_oklch\\,var\\(--secondary\\)\\,var\\(--foreground\\)_5\\%\\)\\]:hover{background-color:color-mix(in oklch,var(--secondary),var(--foreground) 5%)}}.hover\\:bg-destructive\\/20:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-destructive\\/20:hover{background-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.hover\\:bg-muted:hover,.hover\\:bg-muted\\/50:hover{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-muted\\/50:hover{background-color:color-mix(in oklab, var(--muted) 50%, transparent)}}.hover\\:bg-primary\\/80:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-primary\\/80:hover{background-color:color-mix(in oklab, var(--primary) 80%, transparent)}}.hover\\:text-foreground:hover{color:var(--foreground)}.hover\\:underline:hover{text-decoration-line:underline}}.focus-visible\\:border-destructive\\/40:focus-visible{border-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:border-destructive\\/40:focus-visible{border-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}.focus-visible\\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\\:ring-0:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\\:ring-3:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\\:ring-destructive\\/20:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-destructive\\/20:focus-visible{--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.focus-visible\\:ring-ring\\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-ring\\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}.active\\:not-aria-\\[haspopup\\]\\:translate-y-px:active:not([aria-haspopup]){--tw-translate-y:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.disabled\\:pointer-events-none:disabled{pointer-events:none}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:bg-input\\/50:disabled{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.disabled\\:bg-input\\/50:disabled{background-color:color-mix(in oklab, var(--input) 50%, transparent)}}.disabled\\:bg-transparent:disabled{background-color:#0000}.disabled\\:opacity-50:disabled{opacity:.5}:where([data-slot=button-group]) .in-data-\\[slot\\=button-group\\]\\:rounded-lg{border-radius:var(--radius)}:where([data-slot=combobox-content]) .in-data-\\[slot\\=combobox-content\\]\\:focus-within\\:border-inherit:focus-within{border-color:inherit}:where([data-slot=combobox-content]) .in-data-\\[slot\\=combobox-content\\]\\:focus-within\\:ring-0:focus-within{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.has-disabled\\:bg-input\\/50:has(:disabled){background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.has-disabled\\:bg-input\\/50:has(:disabled){background-color:color-mix(in oklab, var(--input) 50%, transparent)}}.has-disabled\\:opacity-50:has(:disabled){opacity:.5}.has-data-\\[icon\\=inline-end\\]\\:pe-1\\.5:has([data-icon=inline-end]){padding-inline-end:calc(var(--spacing) * 1.5)}.has-data-\\[icon\\=inline-end\\]\\:pe-2:has([data-icon=inline-end]){padding-inline-end:calc(var(--spacing) * 2)}.has-data-\\[icon\\=inline-start\\]\\:ps-1\\.5:has([data-icon=inline-start]){padding-inline-start:calc(var(--spacing) * 1.5)}.has-data-\\[icon\\=inline-start\\]\\:ps-2:has([data-icon=inline-start]){padding-inline-start:calc(var(--spacing) * 2)}.has-data-\\[slot\\=attachment-content\\]\\:w-30:has([data-slot=attachment-content]){width:calc(var(--spacing) * 30)}.has-data-\\[slot\\=attachment-content\\]\\:px-1\\.5:has([data-slot=attachment-content]){padding-inline:calc(var(--spacing) * 1.5)}.has-data-\\[slot\\=attachment-content\\]\\:px-2:has([data-slot=attachment-content]){padding-inline:calc(var(--spacing) * 2)}.has-data-\\[slot\\=attachment-content\\]\\:px-2\\.5:has([data-slot=attachment-content]){padding-inline:calc(var(--spacing) * 2.5)}.has-data-\\[slot\\=attachment-content\\]\\:py-1:has([data-slot=attachment-content]){padding-block:var(--spacing)}.has-data-\\[slot\\=attachment-content\\]\\:py-1\\.5:has([data-slot=attachment-content]){padding-block:calc(var(--spacing) * 1.5)}.has-data-\\[slot\\=attachment-content\\]\\:py-2:has([data-slot=attachment-content]){padding-block:calc(var(--spacing) * 2)}.has-data-\\[slot\\=attachment-media\\]\\:p-1:has([data-slot=attachment-media]){padding:var(--spacing)}.has-data-\\[slot\\=attachment-media\\]\\:p-1\\.5:has([data-slot=attachment-media]){padding:calc(var(--spacing) * 1.5)}.has-data-\\[slot\\=attachment-media\\]\\:p-2:has([data-slot=attachment-media]){padding:calc(var(--spacing) * 2)}.has-data-\\[slot\\=card-action\\]\\:grid-cols-\\[1fr_auto\\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.has-data-\\[slot\\=card-description\\]\\:grid-rows-\\[auto_auto\\]:has([data-slot=card-description]){grid-template-rows:auto auto}.has-data-\\[slot\\=card-footer\\]\\:pb-0:has([data-slot=card-footer]){padding-bottom:0}.has-\\[\\[data-slot\\=input-group-control\\]\\:focus-visible\\]\\:border-ring:has([data-slot=input-group-control]:focus-visible){border-color:var(--ring)}.has-\\[\\[data-slot\\=input-group-control\\]\\:focus-visible\\]\\:ring-3:has([data-slot=input-group-control]:focus-visible){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.has-\\[\\[data-slot\\=input-group-control\\]\\:focus-visible\\]\\:ring-ring\\/50:has([data-slot=input-group-control]:focus-visible){--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.has-\\[\\[data-slot\\=input-group-control\\]\\:focus-visible\\]\\:ring-ring\\/50:has([data-slot=input-group-control]:focus-visible){--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}.has-\\[\\[data-slot\\]\\[aria-invalid\\=true\\]\\]\\:border-destructive:has([data-slot][aria-invalid=true]){border-color:var(--destructive)}.has-\\[\\[data-slot\\]\\[aria-invalid\\=true\\]\\]\\:ring-3:has([data-slot][aria-invalid=true]){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.has-\\[\\[data-slot\\]\\[aria-invalid\\=true\\]\\]\\:ring-destructive\\/20:has([data-slot][aria-invalid=true]){--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.has-\\[\\[data-slot\\]\\[aria-invalid\\=true\\]\\]\\:ring-destructive\\/20:has([data-slot][aria-invalid=true]){--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.has-\\[button\\]\\:p-0:has(:is(button)){padding:0}.has-\\[\\>\\[data-align\\=block-end\\]\\]\\:h-auto:has(>[data-align=block-end]){height:auto}.has-\\[\\>\\[data-align\\=block-end\\]\\]\\:flex-col:has(>[data-align=block-end]){flex-direction:column}.has-\\[\\>\\[data-align\\=block-start\\]\\]\\:h-auto:has(>[data-align=block-start]){height:auto}.has-\\[\\>\\[data-align\\=block-start\\]\\]\\:flex-col:has(>[data-align=block-start]){flex-direction:column}@media (hover:hover){.has-\\[\\>a\\,\\>button\\]\\:hover\\:bg-muted\\/50:has(>a,>button):hover{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.has-\\[\\>a\\,\\>button\\]\\:hover\\:bg-muted\\/50:has(>a,>button):hover{background-color:color-mix(in oklab, var(--muted) 50%, transparent)}}}.has-\\[\\>button\\]\\:ms-\\[-0\\.3rem\\]:has(>button){margin-inline-start:-.3rem}.has-\\[\\>button\\]\\:me-\\[-0\\.3rem\\]:has(>button){margin-inline-end:-.3rem}.has-\\[\\>img\\:first-child\\]\\:pt-0:has(>img:first-child){padding-top:0}.has-\\[\\>input\\:focus-visible\\]\\:border-ring:has(>input:focus-visible){border-color:var(--ring)}.has-\\[\\>input\\:focus-visible\\]\\:ring-3:has(>input:focus-visible){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.has-\\[\\>input\\:focus-visible\\]\\:ring-ring\\/50:has(>input:focus-visible){--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.has-\\[\\>input\\:focus-visible\\]\\:ring-ring\\/50:has(>input:focus-visible){--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}.has-\\[\\>kbd\\]\\:ms-\\[-0\\.15rem\\]:has(>kbd){margin-inline-start:-.15rem}.has-\\[\\>kbd\\]\\:me-\\[-0\\.15rem\\]:has(>kbd){margin-inline-end:-.15rem}.has-\\[\\>svg\\]\\:p-0:has(>svg){padding:0}.has-\\[\\>textarea\\]\\:h-auto:has(>textarea){height:auto}.aria-expanded\\:bg-muted[aria-expanded=true]{background-color:var(--muted)}.aria-expanded\\:bg-secondary[aria-expanded=true]{background-color:var(--secondary)}.aria-expanded\\:text-foreground[aria-expanded=true]{color:var(--foreground)}.aria-expanded\\:text-secondary-foreground[aria-expanded=true]{color:var(--secondary-foreground)}.aria-invalid\\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.aria-invalid\\:ring-0[aria-invalid=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.aria-invalid\\:ring-3[aria-invalid=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.aria-invalid\\:ring-destructive\\/20[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.aria-invalid\\:ring-destructive\\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.data-autoscrolling\\:scrollbar-thumb-transparent[data-autoscrolling]{--tw-scrollbar-thumb:transparent;scrollbar-color:var(--tw-scrollbar-thumb) var(--tw-scrollbar-track)}.data-autoscrolling\\:scrollbar-track-transparent[data-autoscrolling]{--tw-scrollbar-track:transparent;scrollbar-color:var(--tw-scrollbar-thumb) var(--tw-scrollbar-track)}.data-invalid\\:border-destructive[data-invalid]{border-color:var(--destructive)}:is(.group-data-\\[align\\=end\\]\\/message\\:\\*\\:data-slot\\:self-end:is(:where(.group\\/message)[data-align=end] *)>*)[data-slot]{align-self:flex-end}.data-\\[active\\=false\\]\\:pointer-events-none[data-active=false]{pointer-events:none}.data-\\[active\\=false\\]\\:scale-95[data-active=false]{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.data-\\[active\\=false\\]\\:opacity-0[data-active=false]{opacity:0}.data-\\[active\\=false\\]\\:duration-400[data-active=false]{--tw-duration:.4s;transition-duration:.4s}.data-\\[active\\=false\\]\\:ease-\\[cubic-bezier\\(0\\.7\\,0\\,0\\.84\\,0\\)\\][data-active=false]{--tw-ease:cubic-bezier(.7,0,.84,0);transition-timing-function:cubic-bezier(.7,0,.84,0)}.data-\\[active\\=true\\]\\:translate-y-0[data-active=true]{--tw-translate-y:0px;translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\\[active\\=true\\]\\:scale-100[data-active=true]{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.data-\\[active\\=true\\]\\:opacity-100[data-active=true]{opacity:1}.data-\\[active\\=true\\]\\:ease-\\[cubic-bezier\\(0\\.23\\,1\\,0\\.32\\,1\\)\\][data-active=true]{--tw-ease:cubic-bezier(.23,1,.32,1);transition-timing-function:cubic-bezier(.23,1,.32,1)}.data-\\[align\\=end\\]\\:flex-row-reverse[data-align=end]{flex-direction:row-reverse}.data-\\[align\\=end\\]\\:self-end[data-align=end]{align-self:flex-end}.data-\\[direction\\=end\\]\\:bottom-4[data-direction=end]{bottom:calc(var(--spacing) * 4)}.data-\\[direction\\=end\\]\\:data-\\[active\\=false\\]\\:translate-y-full[data-direction=end][data-active=false]{--tw-translate-y:100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\\[direction\\=start\\]\\:top-4[data-direction=start]{top:calc(var(--spacing) * 4)}.data-\\[direction\\=start\\]\\:data-\\[active\\=false\\]\\:-translate-y-full[data-direction=start][data-active=false]{--tw-translate-y:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\\[size\\=sm\\]\\:\\[--card-spacing\\:--spacing\\(3\\)\\][data-size=sm]{--card-spacing:calc(var(--spacing) * 3)}.data-\\[size\\=sm\\]\\:has-data-\\[slot\\=card-footer\\]\\:pb-0[data-size=sm]:has([data-slot=card-footer]){padding-bottom:0}:is(.\\*\\:data-\\[slot\\=attachment\\]\\:flex-none>*)[data-slot=attachment]{flex:none}:is(.\\*\\:data-\\[slot\\=attachment\\]\\:snap-start>*)[data-slot=attachment]{scroll-snap-align:start}:is(.\\*\\:data-\\[slot\\=bubble-content\\]\\:rounded-none>*)[data-slot=bubble-content]{border-radius:0}:is(.\\*\\:data-\\[slot\\=bubble-content\\]\\:border-border>*)[data-slot=bubble-content]{border-color:var(--border)}:is(.\\*\\:data-\\[slot\\=bubble-content\\]\\:bg-\\[oklch\\(from_var\\(--primary\\)_0\\.93_calc\\(c\\*0\\.4\\)_h\\)\\]>*)[data-slot=bubble-content]{background-color:oklch(from var(--primary) .93 calc(c * .4) h)}:is(.\\*\\:data-\\[slot\\=bubble-content\\]\\:bg-background>*)[data-slot=bubble-content]{background-color:var(--background)}:is(.\\*\\:data-\\[slot\\=bubble-content\\]\\:bg-destructive\\/10>*)[data-slot=bubble-content]{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){:is(.\\*\\:data-\\[slot\\=bubble-content\\]\\:bg-destructive\\/10>*)[data-slot=bubble-content]{background-color:color-mix(in oklab, var(--destructive) 10%, transparent)}}:is(.\\*\\:data-\\[slot\\=bubble-content\\]\\:bg-muted>*)[data-slot=bubble-content]{background-color:var(--muted)}:is(.\\*\\:data-\\[slot\\=bubble-content\\]\\:bg-primary>*)[data-slot=bubble-content]{background-color:var(--primary)}:is(.\\*\\:data-\\[slot\\=bubble-content\\]\\:bg-secondary>*)[data-slot=bubble-content]{background-color:var(--secondary)}:is(.\\*\\:data-\\[slot\\=bubble-content\\]\\:bg-transparent>*)[data-slot=bubble-content]{background-color:#0000}:is(.\\*\\:data-\\[slot\\=bubble-content\\]\\:p-0>*)[data-slot=bubble-content]{padding:0}:is(.\\*\\:data-\\[slot\\=bubble-content\\]\\:text-destructive>*)[data-slot=bubble-content]{color:var(--destructive)}:is(.\\*\\:data-\\[slot\\=bubble-content\\]\\:text-foreground>*)[data-slot=bubble-content]{color:var(--foreground)}:is(.\\*\\:data-\\[slot\\=bubble-content\\]\\:text-primary-foreground>*)[data-slot=bubble-content]{color:var(--primary-foreground)}:is(.\\*\\:data-\\[slot\\=bubble-content\\]\\:text-secondary-foreground>*)[data-slot=bubble-content]{color:var(--secondary-foreground)}:is(.group-data-\\[orientation\\=vertical\\]\\/attachment\\:\\*\\:data-\\[slot\\=spinner\\]\\:size-6\\!:is(:where(.group\\/attachment)[data-orientation=vertical] *)>*)[data-slot=spinner]{width:calc(var(--spacing) * 6)!important;height:calc(var(--spacing) * 6)!important}.data-\\[state\\=error\\]\\:border-destructive\\/30[data-state=error]{border-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.data-\\[state\\=error\\]\\:border-destructive\\/30[data-state=error]{border-color:color-mix(in oklab, var(--destructive) 30%, transparent)}}.data-\\[state\\=idle\\]\\:border-dashed[data-state=idle]{--tw-border-style:dashed;border-style:dashed}.data-\\[variant\\=ghost\\]\\:max-w-full[data-variant=ghost]{max-width:100%}@media (min-width:40rem){.sm\\:min-h-0{min-height:0}.sm\\:min-h-8{min-height:calc(var(--spacing) * 8)}}@media (min-width:48rem){.md\\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.rtl\\:translate-x-1\\/2:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(1 / 2 * 100%);translate:var(--tw-translate-x) var(--tw-translate-y)}.dark\\:border-input:is(.dark *){border-color:var(--input)}.dark\\:bg-destructive\\/20:is(.dark *){background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-destructive\\/20:is(.dark *){background-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.dark\\:bg-input\\/20:is(.dark *){background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-input\\/20:is(.dark *){background-color:color-mix(in oklab, var(--input) 20%, transparent)}}.dark\\:bg-input\\/30:is(.dark *){background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-input\\/30:is(.dark *){background-color:color-mix(in oklab, var(--input) 30%, transparent)}}.dark\\:bg-transparent:is(.dark *){background-color:#0000}.dark\\:group-data-checked\\/questionnaire-choice\\:bg-primary:is(.dark *):is(:is(:where(.group\\/questionnaire-choice):where([data-state=checked]),:where(.group\\/questionnaire-choice):where([data-checked]:not([data-checked=false]))) *){background-color:var(--primary)}@media (hover:hover){.dark\\:hover\\:bg-destructive\\/30:is(.dark *):hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-destructive\\/30:is(.dark *):hover{background-color:color-mix(in oklab, var(--destructive) 30%, transparent)}}.dark\\:hover\\:bg-input\\/50:is(.dark *):hover{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-input\\/50:is(.dark *):hover{background-color:color-mix(in oklab, var(--input) 50%, transparent)}}.dark\\:hover\\:bg-muted\\/50:is(.dark *):hover{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-muted\\/50:is(.dark *):hover{background-color:color-mix(in oklab, var(--muted) 50%, transparent)}}}.dark\\:focus-visible\\:ring-destructive\\/40:is(.dark *):focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:focus-visible\\:ring-destructive\\/40:is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}.dark\\:disabled\\:bg-input\\/80:is(.dark *):disabled{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\\:disabled\\:bg-input\\/80:is(.dark *):disabled{background-color:color-mix(in oklab, var(--input) 80%, transparent)}}.dark\\:disabled\\:bg-transparent:is(.dark *):disabled{background-color:#0000}.dark\\:has-disabled\\:bg-input\\/80:is(.dark *):has(:disabled){background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\\:has-disabled\\:bg-input\\/80:is(.dark *):has(:disabled){background-color:color-mix(in oklab, var(--input) 80%, transparent)}}.dark\\:has-\\[\\[data-slot\\]\\[aria-invalid\\=true\\]\\]\\:ring-destructive\\/40:is(.dark *):has([data-slot][aria-invalid=true]){--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:has-\\[\\[data-slot\\]\\[aria-invalid\\=true\\]\\]\\:ring-destructive\\/40:is(.dark *):has([data-slot][aria-invalid=true]){--tw-ring-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}.dark\\:aria-invalid\\:border-destructive\\/50:is(.dark *)[aria-invalid=true]{border-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:aria-invalid\\:border-destructive\\/50:is(.dark *)[aria-invalid=true]{border-color:color-mix(in oklab, var(--destructive) 50%, transparent)}}.dark\\:aria-invalid\\:ring-destructive\\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:aria-invalid\\:ring-destructive\\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}:is(.dark\\:\\*\\:data-\\[slot\\=bubble-content\\]\\:bg-\\[oklch\\(from_var\\(--primary\\)_0\\.3_calc\\(c\\*0\\.4\\)_h\\)\\]:is(.dark *)>*)[data-slot=bubble-content]{background-color:oklch(from var(--primary) .3 calc(c * .4) h)}:is(.dark\\:\\*\\:data-\\[slot\\=bubble-content\\]\\:bg-destructive\\/20:is(.dark *)>*)[data-slot=bubble-content]{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){:is(.dark\\:\\*\\:data-\\[slot\\=bubble-content\\]\\:bg-destructive\\/20:is(.dark *)>*)[data-slot=bubble-content]{background-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.data-checked\\:border-primary\\/40:where([data-state=checked]),.data-checked\\:border-primary\\/40:where([data-checked]:not([data-checked=false])){border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.data-checked\\:border-primary\\/40:where([data-state=checked]),.data-checked\\:border-primary\\/40:where([data-checked]:not([data-checked=false])){border-color:color-mix(in oklab, var(--primary) 40%, transparent)}}.data-checked\\:bg-muted:where([data-state=checked]),.data-checked\\:bg-muted:where([data-checked]:not([data-checked=false])),.dark\\:data-checked\\:bg-muted:is(.dark *):where([data-state=checked]),.dark\\:data-checked\\:bg-muted:is(.dark *):where([data-checked]:not([data-checked=false])){background-color:var(--muted)}.data-disabled\\:pointer-events-none:where([data-disabled=true]),.data-disabled\\:pointer-events-none:where([data-disabled]:not([data-disabled=false])){pointer-events:none}.data-disabled\\:cursor-not-allowed:where([data-disabled=true]),.data-disabled\\:cursor-not-allowed:where([data-disabled]:not([data-disabled=false])){cursor:not-allowed}.data-disabled\\:opacity-50:where([data-disabled=true]),.data-disabled\\:opacity-50:where([data-disabled]:not([data-disabled=false])){opacity:.5}.\\[\\&_code\\]\\:bg-transparent code{background-color:#0000}.\\[\\&_code\\]\\:p-0 code{padding:0}.\\[\\&_svg\\]\\:pointer-events-none svg{pointer-events:none}.\\[\\&_svg\\]\\:shrink-0 svg{flex-shrink:0}.data-\\[direction\\=start\\]\\:\\[\\&_svg\\]\\:rotate-180[data-direction=start] svg{rotate:180deg}.\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-3 svg:not([class*=size-]){width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-3\\.5 svg:not([class*=size-]){width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 svg:not([class*=size-]){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.group-data-\\[orientation\\=vertical\\]\\/attachment\\:\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-6:is(:where(.group\\/attachment)[data-orientation=vertical] *) svg:not([class*=size-]){width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.group-data-\\[size\\=xs\\]\\/attachment\\:\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-3\\.5:is(:where(.group\\/attachment)[data-size=xs] *) svg:not([class*=size-]){width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.\\[\\.border-b\\]\\:pb-\\(--card-spacing\\).border-b{padding-bottom:var(--card-spacing)}.\\[\\.border-b\\]\\:pb-2.border-b{padding-bottom:calc(var(--spacing) * 2)}.\\[\\.border-t\\]\\:pt-2.border-t{padding-top:calc(var(--spacing) * 2)}.\\[a\\]\\:underline:is(a){text-decoration-line:underline}.\\[a\\]\\:underline-offset-3:is(a){text-underline-offset:3px}:is(.\\*\\:\\[a\\]\\:underline>*):is(a){text-decoration-line:underline}:is(.\\*\\:\\[a\\]\\:underline-offset-3>*):is(a){text-underline-offset:3px}@media (hover:hover){.\\[a\\]\\:hover\\:text-foreground:is(a):hover,:is(.\\*\\:\\[a\\]\\:hover\\:text-foreground>*):is(a):hover{color:var(--foreground)}}.\\[button\\]\\:text-start:is(button){text-align:start}.\\[button\\,a\\]\\:transition-colors:is(button,a){transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.\\[button\\,a\\]\\:outline-none:is(button,a){--tw-outline-style:none;outline-style:none}.\\[button\\,a\\]\\:focus-visible\\:border-ring:is(button,a):focus-visible{border-color:var(--ring)}.\\[button\\,a\\]\\:focus-visible\\:ring-3:is(button,a):focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.\\[button\\,a\\]\\:focus-visible\\:ring-ring\\/50:is(button,a):focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.\\[button\\,a\\]\\:focus-visible\\:ring-ring\\/50:is(button,a):focus-visible{--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}:is(.\\*\\:\\[img\\]\\:aspect-square>*):is(img){aspect-ratio:1}:is(.\\*\\:\\[img\\]\\:w-full>*):is(img){width:100%}:is(.\\*\\:\\[img\\]\\:object-cover>*):is(img){object-fit:cover}:is(.\\*\\:\\[img\\:first-child\\]\\:rounded-t-xl>*):is(img:first-child){border-top-left-radius:calc(var(--radius) * 1.4);border-top-right-radius:calc(var(--radius) * 1.4)}:is(.\\*\\:\\[img\\:last-child\\]\\:rounded-b-xl>*):is(img:last-child){border-bottom-right-radius:calc(var(--radius) * 1.4);border-bottom-left-radius:calc(var(--radius) * 1.4)}.\\[\\&\\:not\\(\\:has\\(\\~\\[data-slot\\=questionnaire-description\\]\\)\\)\\]\\:mb-4:not(:has(~[data-slot=questionnaire-description])){margin-bottom:calc(var(--spacing) * 4)}.\\[\\&\\>\\[data-slot\\=bubble-content\\]\\:is\\(button\\,a\\)\\:hover\\]\\:bg-\\[color-mix\\(in_oklch\\,var\\(--muted\\)\\,var\\(--foreground\\)_5\\%\\)\\]>[data-slot=bubble-content]:is(button,a):hover{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.\\[\\&\\>\\[data-slot\\=bubble-content\\]\\:is\\(button\\,a\\)\\:hover\\]\\:bg-\\[color-mix\\(in_oklch\\,var\\(--muted\\)\\,var\\(--foreground\\)_5\\%\\)\\]>[data-slot=bubble-content]:is(button,a):hover{background-color:color-mix(in oklch,var(--muted),var(--foreground) 5%)}}.\\[\\&\\>\\[data-slot\\=bubble-content\\]\\:is\\(button\\,a\\)\\:hover\\]\\:bg-\\[color-mix\\(in_oklch\\,var\\(--secondary\\)\\,var\\(--foreground\\)_5\\%\\)\\]>[data-slot=bubble-content]:is(button,a):hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){.\\[\\&\\>\\[data-slot\\=bubble-content\\]\\:is\\(button\\,a\\)\\:hover\\]\\:bg-\\[color-mix\\(in_oklch\\,var\\(--secondary\\)\\,var\\(--foreground\\)_5\\%\\)\\]>[data-slot=bubble-content]:is(button,a):hover{background-color:color-mix(in oklch,var(--secondary),var(--foreground) 5%)}}.\\[\\&\\>\\[data-slot\\=bubble-content\\]\\:is\\(button\\,a\\)\\:hover\\]\\:bg-\\[oklch\\(from_var\\(--primary\\)_0\\.88_calc\\(c\\*0\\.5\\)_h\\)\\]>[data-slot=bubble-content]:is(button,a):hover{background-color:oklch(from var(--primary) .88 calc(c * .5) h)}.\\[\\&\\>\\[data-slot\\=bubble-content\\]\\:is\\(button\\,a\\)\\:hover\\]\\:bg-destructive\\/20>[data-slot=bubble-content]:is(button,a):hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.\\[\\&\\>\\[data-slot\\=bubble-content\\]\\:is\\(button\\,a\\)\\:hover\\]\\:bg-destructive\\/20>[data-slot=bubble-content]:is(button,a):hover{background-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.\\[\\&\\>\\[data-slot\\=bubble-content\\]\\:is\\(button\\,a\\)\\:hover\\]\\:bg-muted>[data-slot=bubble-content]:is(button,a):hover{background-color:var(--muted)}.\\[\\&\\>\\[data-slot\\=bubble-content\\]\\:is\\(button\\,a\\)\\:hover\\]\\:bg-primary\\/80>[data-slot=bubble-content]:is(button,a):hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.\\[\\&\\>\\[data-slot\\=bubble-content\\]\\:is\\(button\\,a\\)\\:hover\\]\\:bg-primary\\/80>[data-slot=bubble-content]:is(button,a):hover{background-color:color-mix(in oklab, var(--primary) 80%, transparent)}}.\\[\\&\\>\\[data-slot\\=bubble-content\\]\\:is\\(button\\,a\\)\\:hover\\]\\:text-foreground>[data-slot=bubble-content]:is(button,a):hover{color:var(--foreground)}.dark\\:\\[\\&\\>\\[data-slot\\=bubble-content\\]\\:is\\(button\\,a\\)\\:hover\\]\\:bg-\\[oklch\\(from_var\\(--primary\\)_0\\.35_calc\\(c\\*0\\.5\\)_h\\)\\]:is(.dark *)>[data-slot=bubble-content]:is(button,a):hover{background-color:oklch(from var(--primary) .35 calc(c * .5) h)}.dark\\:\\[\\&\\>\\[data-slot\\=bubble-content\\]\\:is\\(button\\,a\\)\\:hover\\]\\:bg-destructive\\/30:is(.dark *)>[data-slot=bubble-content]:is(button,a):hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:\\[\\&\\>\\[data-slot\\=bubble-content\\]\\:is\\(button\\,a\\)\\:hover\\]\\:bg-destructive\\/30:is(.dark *)>[data-slot=bubble-content]:is(button,a):hover{background-color:color-mix(in oklab, var(--destructive) 30%, transparent)}}.dark\\:\\[\\&\\>\\[data-slot\\=bubble-content\\]\\:is\\(button\\,a\\)\\:hover\\]\\:bg-input\\/30:is(.dark *)>[data-slot=bubble-content]:is(button,a):hover{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\\:\\[\\&\\>\\[data-slot\\=bubble-content\\]\\:is\\(button\\,a\\)\\:hover\\]\\:bg-input\\/30:is(.dark *)>[data-slot=bubble-content]:is(button,a):hover{background-color:color-mix(in oklab, var(--input) 30%, transparent)}}.dark\\:\\[\\&\\>\\[data-slot\\=bubble-content\\]\\:is\\(button\\,a\\)\\:hover\\]\\:bg-muted\\/50:is(.dark *)>[data-slot=bubble-content]:is(button,a):hover{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.dark\\:\\[\\&\\>\\[data-slot\\=bubble-content\\]\\:is\\(button\\,a\\)\\:hover\\]\\:bg-muted\\/50:is(.dark *)>[data-slot=bubble-content]:is(button,a):hover{background-color:color-mix(in oklab, var(--muted) 50%, transparent)}}.\\[\\&\\>a\\]\\:underline>a{text-decoration-line:underline}.\\[\\&\\>a\\]\\:underline-offset-4>a{text-underline-offset:4px}.\\[\\&\\>a\\:hover\\]\\:text-primary>a:hover{color:var(--primary)}.has-\\[\\>\\[data-align\\=block-end\\]\\]\\:\\[\\&\\>input\\]\\:pt-3:has(>[data-align=block-end])>input{padding-top:calc(var(--spacing) * 3)}.has-\\[\\>\\[data-align\\=block-start\\]\\]\\:\\[\\&\\>input\\]\\:pb-3:has(>[data-align=block-start])>input{padding-bottom:calc(var(--spacing) * 3)}.has-\\[\\>\\[data-align\\=inline-end\\]\\]\\:\\[\\&\\>input\\]\\:pe-1\\.5:has(>[data-align=inline-end])>input{padding-inline-end:calc(var(--spacing) * 1.5)}.has-\\[\\>\\[data-align\\=inline-start\\]\\]\\:\\[\\&\\>input\\]\\:ps-1\\.5:has(>[data-align=inline-start])>input{padding-inline-start:calc(var(--spacing) * 1.5)}.\\[\\&\\>kbd\\]\\:rounded-\\[calc\\(var\\(--radius\\)-5px\\)\\]>kbd{border-radius:calc(var(--radius) - 5px)}.\\[\\&\\>ol\\]\\:my-1>ol{margin-block:var(--spacing)}.\\[\\&\\>svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-3\\.5>svg:not([class*=size-]){width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.\\[\\&\\>svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4>svg:not([class*=size-]){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\\[\\&\\>ul\\]\\:my-1>ul{margin-block:var(--spacing)}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}@property --scroll-fade-t{syntax:"<length-percentage>";inherits:false;initial-value:0}@property --scroll-fade-b{syntax:"<length-percentage>";inherits:false;initial-value:0}@property --scroll-fade-s{syntax:"<length-percentage>";inherits:false;initial-value:0}@property --scroll-fade-e{syntax:"<length-percentage>";inherits:false;initial-value:0}@property --scroll-fade-mask{syntax:"*";inherits:false}@property --shimmer-angle{syntax:"<angle>";inherits:true;initial-value:20deg}@property --shimmer-image{syntax:"*";inherits:false}@property --shimmer-text-fill{syntax:"*";inherits:false}@media (prefers-reduced-motion:reduce){.shimmer{-webkit-text-fill-color:currentColor;background-image:none;animation:none}}:host{--font-sans:system-ui, sans-serif;--font-heading:system-ui, sans-serif;--background:oklch(100% 0 0);--foreground:oklch(14.5% 0 0);--card:oklch(100% 0 0);--card-foreground:oklch(14.5% 0 0);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.5% 0 0);--primary:oklch(20.5% 0 0);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(97% 0 0);--secondary-foreground:oklch(20.5% 0 0);--muted:oklch(97% 0 0);--muted-foreground:oklch(55.6% 0 0);--accent:oklch(97% 0 0);--accent-foreground:oklch(20.5% 0 0);--destructive:oklch(57.7% .245 27.325);--border:oklch(92.2% 0 0);--input:oklch(92.2% 0 0);--ring:oklch(70.8% 0 0);--chart-1:oklch(87% 0 0);--chart-2:oklch(55.6% 0 0);--chart-3:oklch(43.9% 0 0);--chart-4:oklch(37.1% 0 0);--chart-5:oklch(26.9% 0 0);--radius:.625rem;--sidebar:oklch(98.5% 0 0);--sidebar-foreground:oklch(14.5% 0 0);--sidebar-primary:oklch(20.5% 0 0);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(97% 0 0);--sidebar-accent-foreground:oklch(20.5% 0 0);--sidebar-border:oklch(92.2% 0 0);--sidebar-ring:oklch(70.8% 0 0)}.dark{--background:oklch(14.5% 0 0);--foreground:oklch(98.5% 0 0);--card:oklch(20.5% 0 0);--card-foreground:oklch(98.5% 0 0);--popover:oklch(20.5% 0 0);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(92.2% 0 0);--primary-foreground:oklch(20.5% 0 0);--secondary:oklch(26.9% 0 0);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(26.9% 0 0);--muted-foreground:oklch(70.8% 0 0);--accent:oklch(26.9% 0 0);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(70.4% .191 22.216);--border:oklch(100% 0 0/.1);--input:oklch(100% 0 0/.15);--ring:oklch(55.6% 0 0);--chart-1:oklch(87% 0 0);--chart-2:oklch(55.6% 0 0);--chart-3:oklch(43.9% 0 0);--chart-4:oklch(37.1% 0 0);--chart-5:oklch(26.9% 0 0);--sidebar:oklch(20.5% 0 0);--sidebar-foreground:oklch(98.5% 0 0);--sidebar-primary:oklch(48.8% .243 264.376);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(26.9% 0 0);--sidebar-accent-foreground:oklch(98.5% 0 0);--sidebar-border:oklch(100% 0 0/.1);--sidebar-ring:oklch(55.6% 0 0)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scroll-snap-strictness{syntax:"*";inherits:false;initial-value:proximity}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-scrollbar-thumb{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-scrollbar-track{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes scroll-fade-reveal-b{0%{--scroll-fade-b:var(--_scroll-fade-size-b,var(--scroll-fade-size,min(12%, calc(var(--spacing) * 10))))}to{--scroll-fade-b:0px}}@keyframes scroll-fade-reveal-s{0%{--scroll-fade-s:0px}to{--scroll-fade-s:var(--_scroll-fade-size-s,var(--scroll-fade-size,min(12%, calc(var(--spacing) * 10))))}}@keyframes scroll-fade-reveal-e{0%{--scroll-fade-e:var(--_scroll-fade-size-e,var(--scroll-fade-size,min(12%, calc(var(--spacing) * 10))))}to{--scroll-fade-e:0px}}@keyframes tw-shimmer{0%{background-position:100% 0}to{background-position:0 0}}`,t.append(i);let a=r,o=Tp(t,()=>e(a.debug)),s=(0,pe.createRoot)(n),c=e=>{a=e,s.render((0,Y.jsx)(wp,{options:e,host:t.host}))};return c(r),{update:c,dispose:()=>{s.unmount(),o(),i.remove()}}}export{Ep as renderChat};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=`AstralBeam`,t=`Ask the assistant`,n=`It can answer questions and act through this app's own tools and widgets.`,r=`/api/chat`,i=`system`,a=`astralbeam-root`,o=e=>`background:${e};color:#fff;border-radius:3px;padding:1px 5px`,s=`${o(`#7c3aed`)};font-weight:600`,c={mount:`#7c3aed`,auth:`#be185d`,theme:`#8b5cf6`,send:`#2563eb`,run:`#0891b2`,stream:`#0e7490`,text:`#16a34a`,reasoning:`#64748b`,tool:`#d97706`,widget:`#db2777`,attachment:`#0d9488`,questionnaire:`#9333ea`,status:`#475569`,error:`#dc2626`};function l(e){if(e)return(e,t,n)=>{console.log(`%cAstralBeam%c ${new Date().toISOString().slice(11,19)} %c${e}%c ${t}`,s,`color:#94a3b8;font-weight:400`,o(c[e]),``,...n===void 0?[]:[n])}}export{r as a,t as i,i as n,e as o,n as r,a as s,l as t};
|
package/dist/client.d.ts
CHANGED
|
@@ -93,6 +93,10 @@ interface MountAstralBeamChatOptions {
|
|
|
93
93
|
* and gives the transcript the full height. Default `true`.
|
|
94
94
|
*/
|
|
95
95
|
showHeader?: boolean | undefined;
|
|
96
|
+
/** Headline shown on the empty transcript. Default `"Ask the assistant"`. */
|
|
97
|
+
emptyTitle?: string | undefined;
|
|
98
|
+
/** Subtitle shown under the empty transcript's headline. Default describes the app's tools and widgets. */
|
|
99
|
+
emptyDescription?: string | undefined;
|
|
96
100
|
/** URL of the AstralBeam chat endpoint the widget streams from. Fixed at mount. Default `"/api/chat"`. */
|
|
97
101
|
chatEndpoint?: string | undefined;
|
|
98
102
|
/** Application endpoint that mints a short-lived chat JWT. Fixed at mount; omit for guest chat. */
|
package/dist/client.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{s as e,t}from"./client-utils-CG2gIHHK.js";function n(n,r={}){let i={...r},a=t(i.debug);a?.(`mount`,`mounting chat widget`,{title:i.title??`AstralBeam`,showHeader:i.showHeader??!0,emptyTitle:i.emptyTitle??`Ask the assistant`,emptyDescription:i.emptyDescription??`It can answer questions and act through this app's own tools and widgets.`,chatEndpoint:i.chatEndpoint??`/api/chat`,authentication:i.authEndpoint?`configured`:`guest`,colorScheme:i.colorScheme??`system`,theme:i.theme,systemPrompt:i.systemPrompt,tools:Object.keys(i.tools??{}),widgets:Object.keys(i.widgets??{}),attachments:i.attachments??!0});let o=n.shadowRoot??n.attachShadow({mode:`open`}),s=document.createElement(`div`);s.className=e,s.style.height=`100%`,o.append(s);let c=matchMedia(`(prefers-color-scheme: dark)`),l=new Set,u=e=>{for(let e of l)s.style.removeProperty(e);l.clear();let t={...i.theme?.light,...e?i.theme?.dark:void 0};for(let[e,n]of Object.entries(t))e.startsWith(`--`)&&(s.style.setProperty(e,n),l.add(e))},d=()=>{let e=i.colorScheme??`system`,t=e===`dark`||e===`system`&&c.matches;s.classList.toggle(`dark`,t),u(t),a?.(`theme`,`color scheme "${e}" resolved to ${t?`dark`:`light`}`,{themeVariables:[...l]})};d(),c.addEventListener(`change`,d);let f=!1,p;return import(`./chat-CXhDO2tI.js`).then(({renderChat:e})=>{a?.(`mount`,`chat chunk loaded`),f||(p=e(o,s,i))}),{update:e=>{i={...i,...e},a=t(i.debug),a?.(`mount`,`options updated`,{changed:Object.keys(e)}),d(),p?.update(i)},unmount:()=>{a?.(`mount`,`unmounting chat widget`),f=!0,c.removeEventListener(`change`,d),p?.dispose(),p=void 0,s.remove()}}}export{n as mountAstralBeamChat};
|
package/dist/react.d.ts
CHANGED
|
@@ -14,6 +14,10 @@ interface AstralBeamChatProps {
|
|
|
14
14
|
* the transcript the full height. Prop changes apply immediately. Default `true`.
|
|
15
15
|
*/
|
|
16
16
|
showHeader?: boolean;
|
|
17
|
+
/** Headline shown on the empty transcript; prop changes apply immediately. Default `"Ask the assistant"`. */
|
|
18
|
+
emptyTitle?: string;
|
|
19
|
+
/** Subtitle under the empty transcript's headline; prop changes apply immediately. */
|
|
20
|
+
emptyDescription?: string;
|
|
17
21
|
/** URL of the AstralBeam chat endpoint the widget streams from. Default `"/api/chat"`. */
|
|
18
22
|
chatEndpoint?: string;
|
|
19
23
|
/** Application endpoint that mints a short-lived chat JWT; omit for guest chat. */
|
|
@@ -39,6 +43,8 @@ interface AstralBeamChatProps {
|
|
|
39
43
|
declare function AstralBeamChat({
|
|
40
44
|
title,
|
|
41
45
|
showHeader,
|
|
46
|
+
emptyTitle,
|
|
47
|
+
emptyDescription,
|
|
42
48
|
chatEndpoint,
|
|
43
49
|
authEndpoint,
|
|
44
50
|
systemPrompt,
|
package/dist/react.js
CHANGED
|
@@ -7,7 +7,7 @@ import { jsx } from "react/jsx-runtime";
|
|
|
7
7
|
const DEFAULT_COLOR_SCHEME = "system";
|
|
8
8
|
//#endregion
|
|
9
9
|
//#region src/react.tsx
|
|
10
|
-
function AstralBeamChat({ title, showHeader, chatEndpoint, authEndpoint, systemPrompt, tools, widgets = {}, colorScheme = DEFAULT_COLOR_SCHEME, theme, attachments, debug }) {
|
|
10
|
+
function AstralBeamChat({ title, showHeader, emptyTitle, emptyDescription, chatEndpoint, authEndpoint, systemPrompt, tools, widgets = {}, colorScheme = DEFAULT_COLOR_SCHEME, theme, attachments, debug }) {
|
|
11
11
|
const targetRef = useRef(null);
|
|
12
12
|
const handleRef = useRef(null);
|
|
13
13
|
const [activeRenders, setActiveRenders] = useState(/* @__PURE__ */ new Map());
|
|
@@ -45,6 +45,8 @@ function AstralBeamChat({ title, showHeader, chatEndpoint, authEndpoint, systemP
|
|
|
45
45
|
const live = useMemo(() => ({
|
|
46
46
|
title,
|
|
47
47
|
showHeader,
|
|
48
|
+
emptyTitle,
|
|
49
|
+
emptyDescription,
|
|
48
50
|
systemPrompt,
|
|
49
51
|
colorScheme,
|
|
50
52
|
theme,
|
|
@@ -55,6 +57,8 @@ function AstralBeamChat({ title, showHeader, chatEndpoint, authEndpoint, systemP
|
|
|
55
57
|
}), [
|
|
56
58
|
title,
|
|
57
59
|
showHeader,
|
|
60
|
+
emptyTitle,
|
|
61
|
+
emptyDescription,
|
|
58
62
|
systemPrompt,
|
|
59
63
|
colorScheme,
|
|
60
64
|
theme,
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const e=`AstralBeam`,t=`/api/chat`,n=`system`,r=`astralbeam-root`,i=e=>`background:${e};color:#fff;border-radius:3px;padding:1px 5px`,a=`${i(`#7c3aed`)};font-weight:600`,o={mount:`#7c3aed`,auth:`#be185d`,theme:`#8b5cf6`,send:`#2563eb`,run:`#0891b2`,stream:`#0e7490`,text:`#16a34a`,reasoning:`#64748b`,tool:`#d97706`,widget:`#db2777`,attachment:`#0d9488`,questionnaire:`#9333ea`,status:`#475569`,error:`#dc2626`};function s(e){if(e)return(e,t,n)=>{console.log(`%cAstralBeam%c ${new Date().toISOString().slice(11,19)} %c${e}%c ${t}`,a,`color:#94a3b8;font-weight:400`,i(o[e]),``,...n===void 0?[]:[n])}}export{r as a,e as i,n,t as r,s as t};
|