agentic-ui-kit 0.2.0 → 0.3.0
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 +109 -2
- package/dist/core.js +96 -1
- package/dist/index.js +1417 -287
- package/dist/styles.css +1 -1
- package/dist/tailwind.css +30 -2
- package/dist/types/core/src/index.d.ts +8 -1
- package/dist/types/core/src/partial-json.d.ts +8 -0
- package/dist/types/core/src/types.d.ts +5 -0
- package/dist/types/core/src/ui-markup.d.ts +92 -0
- package/dist/types/core/src/ui-tree.d.ts +110 -0
- package/dist/types/core/src/visualize.d.ts +60 -0
- package/dist/types/react/src/components/chat-notice.d.ts +11 -0
- package/dist/types/react/src/components/markdown.d.ts +19 -1
- package/dist/types/react/src/components/message-list.d.ts +5 -1
- package/dist/types/react/src/components/messages.d.ts +3 -2
- package/dist/types/react/src/components/tools.d.ts +20 -7
- package/dist/types/react/src/components/ui-tree.d.ts +87 -0
- package/dist/types/react/src/components/widget-frame.d.ts +97 -0
- package/dist/types/react/src/index.d.ts +15 -3
- package/dist/types/react/src/primitives/chat-theme.d.ts +13 -1
- package/dist/types/react/src/primitives/icons.d.ts +95 -0
- package/dist/types/react/src/primitives/labels.d.ts +193 -0
- package/dist/types/react/src/views/chat-transcript.d.ts +27 -0
- package/dist/types/react/src/views/chat-view.d.ts +15 -2
- package/dist/ui-markup-6xbP-myu.js +1082 -0
- package/package.json +1 -1
- package/dist/sse-BA_ebMcH.js +0 -408
package/dist/styles.css
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
@import "katex/dist/katex.min.css";
|
|
2
2
|
/*! tailwindcss v4.3.4 | MIT License | https://tailwindcss.com */
|
|
3
|
-
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:block))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--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-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:-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-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-2xl:42rem;--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);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-normal:400;--font-weight-medium:500;--tracking-wide:.025em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--ease-out:cubic-bezier(0, 0, .2, 1);--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) 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)}}@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}:root,[data-chat-theme=claude-dark]{color-scheme:dark;--chat-bg:#191919;--chat-sidebar:#1f1f1f;--chat-surface:#303030;--chat-raised:#3a3a3a;--chat-hover:#3d3d3d;--chat-selected:#4a4a4a;--chat-bubble:#2a2a2a;--chat-popover:#303030;--chat-popover-border:#383838;--chat-popover-hover:#4f4f4f;--chat-border:#303030;--chat-border-strong:#454545;--chat-divider:#222;--chat-code-bg:#1c1c1c;--chat-code-border:#252525;--chat-inline-code:#2e2e2e;--chat-fg:#ecebe6;--chat-muted:#a3a29e;--chat-subtle:#75746f;--chat-accent:#d97757;--chat-check:#6c9cf0;--chat-warning:#e8b04b;--chat-warning-bg:#4a3b1c;--chat-danger:#e5675c;--chat-focus:#6c9cf0;--chat-font-sans:"Inter", ui-sans-serif, system-ui, sans-serif;--chat-font-serif:"Source Serif 4", ui-serif, Georgia, serif;--chat-font-mono:"JetBrains Mono", ui-monospace, "SF Mono", Menlo, monospace;--chat-radius-sm:6px;--chat-radius-md:10px;--chat-radius-lg:16px;--chat-radius-popover:12px;--chat-shadow-popover:0 8px 24px #00000080;--chat-content-width:48rem;--chat-content-padding:1.5rem;--chat-message-font-size:1.0625rem;--chat-message-line-height:1.65}}@layer components{.chat-markdown{font-family:var(--chat-font-message,var(--chat-font-serif));font-size:var(--chat-message-font-size);line-height:var(--chat-message-line-height);color:var(--chat-fg);overflow-wrap:anywhere}.chat-markdown>div>*+*{margin-top:.75em}.chat-markdown :is(h1,h2,h3,h4){margin-top:1.25em;font-weight:600;line-height:1.3}.chat-markdown h1{font-size:1.5em}.chat-markdown h2{font-size:1.3em}.chat-markdown h3{font-size:1.12em}.chat-markdown strong{font-weight:650}.chat-markdown :is(ul,ol){padding-left:1.6em}.chat-markdown ul{list-style:outside}.chat-markdown ol{list-style:decimal}.chat-markdown li+li,.chat-markdown li>:is(ul,ol){margin-top:.3em}.chat-markdown a{color:var(--chat-fg);text-decoration:underline;-webkit-text-decoration-color:var(--chat-subtle);-webkit-text-decoration-color:var(--chat-subtle);text-decoration-color:var(--chat-subtle);text-underline-offset:3px}.chat-markdown a:hover{-webkit-text-decoration-color:var(--chat-fg);-webkit-text-decoration-color:var(--chat-fg);text-decoration-color:var(--chat-fg)}.chat-markdown blockquote{border-left:3px solid var(--chat-border-strong);color:var(--chat-muted);padding-left:1em}.chat-markdown hr{border-color:var(--chat-border);margin-block:1.5em}.chat-markdown [data-chat-inline-code]{font-family:var(--chat-font-mono);background:var(--chat-inline-code);border-radius:5px;padding:.12em .35em;font-size:.82em}.chat-markdown [data-streamdown=table-wrapper]{margin-block:1em;overflow-x:auto}.chat-markdown table{border-collapse:collapse;font-family:var(--chat-font-sans);font-size:.875rem}.chat-markdown :is(th,td){border-bottom:1px solid var(--chat-border);text-align:left;padding:.45em .9em .45em 0}.chat-markdown th{font-weight:600}.chat-markdown .katex-display{margin-block:1em;overflow:auto hidden}.chat-markdown .katex{font-size:1.08em}.chat-markdown.chat-fade .chat-word{animation:chat-word-in var(--chat-fade-duration,.7s) ease-out both}.chat-view{container:chat/inline-size}.chat-view-body{--chat-gutter:var(--chat-content-padding);container:chat-body/size}@container chat (max-width:34rem){.chat-view-body{--chat-gutter:min(var(--chat-content-padding), .75rem)}}@container chat (max-width:24rem){.chat-picker-detail{display:none}}@container chat-body (max-height:24rem){.chat-empty-greeting{display:none}}.chat-code-token{color:light-dark(var(--shiki-light),var(--shiki-dark))}.chat-shimmer{background-image:linear-gradient(90deg, var(--chat-muted) 0%, var(--chat-muted) 35%, var(--chat-fg) 50%, var(--chat-muted) 65%, var(--chat-muted) 100%);color:#0000;animation:chat-shimmer var(--chat-shimmer-duration,2s) linear infinite;background-repeat:repeat-x;background-size:20em 100%;-webkit-background-clip:text;background-clip:text}.chat-markdown.chat-thinking{font-family:var(--chat-font-sans);color:var(--chat-muted);font-size:.9375rem;line-height:1.6}.chat-shimmer-surface:after{content:"";background:linear-gradient(100deg, transparent 30%, var(--chat-fg) 50%, transparent 70%) 0 0 / 300% 100%;position:absolute;inset:0}@supports (color:color-mix(in lab, red, red)){.chat-shimmer-surface:after{background:linear-gradient(100deg, transparent 30%, color-mix(in srgb, var(--chat-fg) 12%, transparent) 50%, transparent 70%) 0 0 / 300% 100%}}.chat-shimmer-surface:after{pointer-events:none;animation:1.6s linear infinite chat-shimmer-surface}}@layer utilities{.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}.sticky{position:sticky}.inset-0{inset:0}.inset-x-2{inset-inline:calc(var(--spacing) * 2)}.inset-y-0{inset-block:0}.-top-2{top:calc(var(--spacing) * -2)}.top-1\/2{top:50%}.-right-2{right:calc(var(--spacing) * -2)}.right-0{right:0}.right-1{right:var(--spacing)}.bottom-0{bottom:0}.bottom-2{bottom:calc(var(--spacing) * 2)}.bottom-\[min\(10rem\,40\%\)\]{bottom:min(10rem,40%)}.left-0{left:0}.left-1\/2{left:50%}.z-40{z-index:40}.z-50{z-index:50}.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}}.m-0{margin:0}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.-mx-1\.5{margin-inline:calc(var(--spacing) * -1.5)}.mx-5{margin-inline:calc(var(--spacing) * 5)}.mx-auto{margin-inline:auto}.my-1\.5{margin-block:calc(var(--spacing) * 1.5)}.my-4{margin-block:calc(var(--spacing) * 4)}.mt-1{margin-top:var(--spacing)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.-ml-1\.5{margin-left:calc(var(--spacing) * -1.5)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-auto{margin-left:auto}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.size-0{width:0;height:0}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-2\.5{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.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-24{width:calc(var(--spacing) * 24);height:calc(var(--spacing) * 24)}.size-30{width:calc(var(--spacing) * 30);height:calc(var(--spacing) * 30)}.size-full{width:100%;height:100%}.h-1{height:var(--spacing)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-dvh{height:100dvh}.h-full{height:100%}.max-h-48{max-height:calc(var(--spacing) * 48)}.max-h-56{max-height:calc(var(--spacing) * 56)}.max-h-72{max-height:calc(var(--spacing) * 72)}.max-h-96{max-height:calc(var(--spacing) * 96)}.max-h-\[85dvh\]{max-height:85dvh}.max-h-\[inherit\]{max-height:inherit}.max-h-\[min\(10rem\,30cqh\)\]{max-height:min(10rem,30cqh)}.max-h-\[min\(18rem\,35cqh\)\]{max-height:min(18rem,35cqh)}.max-h-\[min\(24rem\,45cqh\)\]{max-height:min(24rem,45cqh)}.min-h-0{min-height:0}.min-h-2{min-height:calc(var(--spacing) * 2)}.min-h-6{min-height:calc(var(--spacing) * 6)}.min-h-7{min-height:calc(var(--spacing) * 7)}.min-h-12{min-height:calc(var(--spacing) * 12)}.min-h-64{min-height:calc(var(--spacing) * 64)}.min-h-full{min-height:100%}.w-\(--chat-sidebar-width\,18rem\){width:var(--chat-sidebar-width,18rem)}.w-9{width:calc(var(--spacing) * 9)}.w-12{width:calc(var(--spacing) * 12)}.w-13{width:calc(var(--spacing) * 13)}.w-14{width:calc(var(--spacing) * 14)}.w-60{width:calc(var(--spacing) * 60)}.w-72{width:calc(var(--spacing) * 72)}.w-80{width:calc(var(--spacing) * 80)}.w-\[min\(20rem\,85vw\)\]{width:min(20rem,85vw)}.w-full{width:100%}.max-w-\(--chat-content-width\){max-width:var(--chat-content-width)}.max-w-2xl{max-width:var(--container-2xl)}.max-w-\[85\%\]{max-width:85%}.max-w-\[calc\(var\(--chat-content-width\)\+2\*var\(--chat-gutter\,var\(--chat-content-padding\)\)\)\]{max-width:calc(var(--chat-content-width) + 2 * var(--chat-gutter,var(--chat-content-padding)))}.max-w-full{max-width:100%}.min-w-0{min-width:0}.min-w-44{min-width:calc(var(--spacing) * 44)}.min-w-52{min-width:calc(var(--spacing) * 52)}.min-w-\[2px\]{min-width:2px}.flex-1{flex:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.animate-pulse{animation:var(--animate-pulse)}.cursor-help{cursor:help}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.\[scrollbar-width\:thin\]{scrollbar-width:thin}.\[scrollbar-color\:var\(--chat-border-strong\)_transparent\]{scrollbar-color:var(--chat-border-strong) transparent}.\[scrollbar-gutter\:stable\]{scrollbar-gutter:stable}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.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)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-px{gap:1px}: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)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-chat-divider>:not(:last-child)){border-color:var(--chat-divider)}.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}.rounded-\[0\.3rem\]{border-radius:.3rem}.rounded-\[1\.25rem\]{border-radius:1.25rem}.rounded-\[2px\]{border-radius:2px}.rounded-\[inherit\]{border-radius:inherit}.rounded-chat-lg{border-radius:var(--chat-radius-lg)}.rounded-chat-md{border-radius:var(--chat-radius-md)}.rounded-chat-popover{border-radius:var(--chat-radius-popover)}.rounded-chat-sm{border-radius:var(--chat-radius-sm)}.rounded-full{border-radius:2147483647px}.rounded-sm{border-radius:var(--radius-sm)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-chat-accent\!{border-color:var(--chat-accent)!important}.border-chat-border{border-color:var(--chat-border)}.border-chat-border-strong{border-color:var(--chat-border-strong)}.border-chat-code-border{border-color:var(--chat-code-border)}.border-chat-danger{border-color:var(--chat-danger)}.border-chat-divider{border-color:var(--chat-divider)}.border-chat-popover-border{border-color:var(--chat-popover-border)}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\/50{background-color:color-mix(in oklab, var(--color-black) 50%, transparent)}}.bg-chat-accent{background-color:var(--chat-accent)}.bg-chat-bg{background-color:var(--chat-bg)}.bg-chat-bubble{background-color:var(--chat-bubble)}.bg-chat-check{background-color:var(--chat-check)}.bg-chat-code-bg{background-color:var(--chat-code-bg)}.bg-chat-fg{background-color:var(--chat-fg)}.bg-chat-popover{background-color:var(--chat-popover)}.bg-chat-raised{background-color:var(--chat-raised)}.bg-chat-selected{background-color:var(--chat-selected)}.bg-chat-sidebar{background-color:var(--chat-sidebar)}.bg-chat-surface{background-color:var(--chat-surface)}.bg-chat-warning-bg{background-color:var(--chat-warning-bg)}.bg-transparent{background-color:#0000}.bg-linear-to-t{--tw-gradient-position:to top}@supports (background-image:linear-gradient(in lab, red, red)){.bg-linear-to-t{--tw-gradient-position:to top in oklab}}.bg-linear-to-t{background-image:linear-gradient(var(--tw-gradient-stops))}.from-chat-bg{--tw-gradient-from:var(--chat-bg);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-70\%{--tw-gradient-from-position:70%}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.\[mask-image\:linear-gradient\(to_bottom\,black_45\%\,transparent_72\%\)\]{-webkit-mask-image:linear-gradient(#000 45%,#0000 72%);mask-image:linear-gradient(#000 45%,#0000 72%)}.fill-current{fill:currentColor}.object-cover{object-fit:cover}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.px-\(--chat-gutter\){padding-inline:var(--chat-gutter)}.px-0\.5{padding-inline:calc(var(--spacing) * .5)}.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)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-\[var\(--chat-gutter\,var\(--chat-content-padding\)\)\]{padding-inline:var(--chat-gutter,var(--chat-content-padding))}.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)}.py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-px{padding-block:1px}.pt-1{padding-top:var(--spacing)}.pt-1\.5{padding-top:calc(var(--spacing) * 1.5)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-2\.5{padding-top:calc(var(--spacing) * 2.5)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pr-1{padding-right:var(--spacing)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pb-1{padding-bottom:var(--spacing)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-9{padding-bottom:calc(var(--spacing) * 9)}.pb-\[10cqh\]{padding-bottom:10cqh}.pb-\[max\(0\.5rem\,env\(safe-area-inset-bottom\)\)\]{padding-bottom:max(.5rem, env(safe-area-inset-bottom))}.pb-\[max\(0\.25rem\,env\(safe-area-inset-bottom\)\)\]{padding-bottom:max(.25rem, env(safe-area-inset-bottom))}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-6{padding-left:calc(var(--spacing) * 6)}.pl-8{padding-left:calc(var(--spacing) * 8)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-chat-mono{font-family:var(--chat-font-mono)}.font-chat-sans{font-family:var(--chat-font-sans)}.font-chat-serif{font-family:var(--chat-font-serif)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.625rem\]{font-size:.625rem}.text-\[0\.5625rem\]{font-size:.5625rem}.text-\[0\.8125rem\]{font-size:.8125rem}.text-\[0\.9375rem\]{font-size:.9375rem}.text-\[clamp\(1\.5rem\,6cqw\,2\.5rem\)\]{font-size:clamp(1.5rem,6cqw,2.5rem)}.leading-\[1\.75\]{--tw-leading:1.75;line-height:1.75}.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)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-chat-accent{color:var(--chat-accent)}.text-chat-bg{color:var(--chat-bg)}.text-chat-check{color:var(--chat-check)}.text-chat-danger{color:var(--chat-danger)}.text-chat-fg{color:var(--chat-fg)}.text-chat-muted{color:var(--chat-muted)}.text-chat-subtle{color:var(--chat-subtle)}.text-chat-warning{color:var(--chat-warning)}.text-white{color:var(--color-white)}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.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, )}.underline{text-decoration-line:underline}.decoration-chat-subtle{-webkit-text-decoration-color:var(--chat-subtle);-webkit-text-decoration-color:var(--chat-subtle);text-decoration-color:var(--chat-subtle)}.decoration-dotted{text-decoration-style:dotted}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-60{opacity:.6}.opacity-100{opacity:1}.shadow-chat-popover{--tw-shadow:var(--chat-shadow-popover);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, )}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;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-opacity{transition-property:opacity;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-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}:is(:where(.group\/card):focus-within .group-focus-within\/card\:opacity-100){opacity:1}:is(:where(.group\/item):focus-within .group-focus-within\/item\:pr-8){padding-right:calc(var(--spacing) * 8)}:is(:where(.group\/item):focus-within .group-focus-within\/item\:opacity-100),:is(:where(.group\/message):focus-within .group-focus-within\/message\:opacity-100){opacity:1}@media (hover:hover){:is(:where(.group\/card):hover .group-hover\/card\:opacity-100){opacity:1}:is(:where(.group\/item):hover .group-hover\/item\:pr-8){padding-right:calc(var(--spacing) * 8)}:is(:where(.group\/item):hover .group-hover\/item\:opacity-100),:is(:where(.group\/message):hover .group-hover\/message\:opacity-100),:is(:where(.group\/section):hover .group-hover\/section\:opacity-100){opacity:1}}:is(:where(.group\/trigger)[aria-expanded=true] .group-aria-expanded\/trigger\:rotate-90){rotate:90deg}:is(:where(.group\/trigger)[data-focus-visible] .group-data-focus-visible\/trigger\:opacity-100),:is(:where(.group)[data-hovered] .group-data-hovered\:opacity-100){opacity:1}.placeholder\:text-chat-subtle::placeholder{color:var(--chat-subtle)}.focus-within\:border-chat-border-strong:focus-within{border-color:var(--chat-border-strong)}@media (hover:hover){.hover\:text-chat-fg:hover{color:var(--chat-fg)}}.focus\:border-chat-border-strong:focus{border-color:var(--chat-border-strong)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset, ) 0 0 0 calc(2px + 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-chat-focus:focus-visible{--tw-ring-color:var(--chat-focus)}.data-disabled\:cursor-default[data-disabled]{cursor:default}.data-disabled\:opacity-40[data-disabled]{opacity:.4}.data-entering\:animate-chat-drawer-in[data-entering]{animation:.22s cubic-bezier(.2,.8,.2,1) chat-drawer-in}.data-entering\:animate-chat-drawer-in-right[data-entering]{animation:.22s cubic-bezier(.2,.8,.2,1) chat-drawer-in-right}.data-entering\:animate-chat-fade-in[data-entering]{animation:.2s ease-out chat-fade-in}.data-entering\:animate-chat-in[data-entering]{animation:.12s ease-out chat-in}.data-exiting\:animate-chat-drawer-out[data-exiting]{animation:.16s ease-in reverse forwards chat-drawer-in}.data-exiting\:animate-chat-drawer-out-right[data-exiting]{animation:.16s ease-in reverse forwards chat-drawer-in-right}.data-exiting\:animate-chat-fade-out[data-exiting]{animation:.15s ease-in reverse forwards chat-fade-in}.data-exiting\:animate-chat-out[data-exiting]{animation:90ms ease-in forwards chat-out}.data-focus-visible\:opacity-100[data-focus-visible]{opacity:1}.data-focus-visible\:ring-2[data-focus-visible]{--tw-ring-shadow:var(--tw-ring-inset, ) 0 0 0 calc(2px + 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)}.data-focus-visible\:ring-chat-focus[data-focus-visible]{--tw-ring-color:var(--chat-focus)}.data-focus-visible\:ring-inset[data-focus-visible]{--tw-ring-inset:inset}.data-focused\:bg-chat-popover-hover[data-focused]{background-color:var(--chat-popover-hover)}.data-hovered\:bg-chat-hover[data-hovered]{background-color:var(--chat-hover)}.data-hovered\:text-chat-fg[data-hovered]{color:var(--chat-fg)}.data-hovered\:text-chat-muted[data-hovered]{color:var(--chat-muted)}.data-hovered\:brightness-110[data-hovered]{--tw-brightness:brightness(110%);filter:var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, )}.data-open\:bg-chat-popover-hover[data-open]{background-color:var(--chat-popover-hover)}.data-pressed\:bg-chat-selected[data-pressed]{background-color:var(--chat-selected)}.data-pressed\:brightness-95[data-pressed]{--tw-brightness:brightness(95%);filter:var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, )}@media (prefers-reduced-motion:no-preference){.motion-safe\:data-entering\:animate-chat-in[data-entering]{animation:.12s ease-out chat-in}.motion-safe\:data-exiting\:animate-chat-out[data-exiting]{animation:90ms ease-in forwards chat-out}}@media (prefers-reduced-motion:reduce){.motion-reduce\:animate-none{animation:none}.motion-reduce\:transition-none{transition-property:none}}.\[\&_svg\]\:size-3 svg{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\[\&_svg\]\:size-3\.5 svg{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_svg\]\:size-\[1em\] svg{width:1em;height:1em}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\]\:fill-current svg{fill:currentColor}.\[\&\:not\(\:first-child\)\]\:mt-1:not(:first-child){margin-top:var(--spacing)}@media (hover:none){.\[\@media\(hover\:none\)\]\:pr-10{padding-right:calc(var(--spacing) * 10)}.\[\@media\(hover\:none\)\]\:opacity-100{opacity:1}}@media (pointer:coarse){.\[\@media\(pointer\:coarse\)\]\:size-7\!{width:calc(var(--spacing) * 7)!important;height:calc(var(--spacing) * 7)!important}.\[\@media\(pointer\:coarse\)\]\:size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.\[\@media\(pointer\:coarse\)\]\:size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.\[\@media\(pointer\:coarse\)\]\:size-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.\[\@media\(pointer\:coarse\)\]\:h-9{height:calc(var(--spacing) * 9)}.\[\@media\(pointer\:coarse\)\]\:h-10{height:calc(var(--spacing) * 10)}.\[\@media\(pointer\:coarse\)\]\:w-10{width:calc(var(--spacing) * 10)}}}@keyframes chat-word-in{0%{opacity:0}}[data-chat-code-bg=theme]{background-color:light-dark(var(--shiki-light-bg),var(--shiki-dark-bg))}[data-chat-code-bg=theme] pre{color:light-dark(var(--shiki-light),var(--shiki-dark))}@keyframes chat-shimmer-surface{0%{background-position:150% 0}to{background-position:-50% 0}}@keyframes chat-shimmer{0%{background-position:-20em 0}to{background-position:0 0}}@media (prefers-reduced-motion:reduce){.chat-markdown.chat-fade .chat-word:not([data-chat-motion=full] *){animation:none}.chat-shimmer-surface:not([data-chat-motion=full] *):after{background:var(--chat-fg);animation:none}@supports (color:color-mix(in lab, red, red)){.chat-shimmer-surface:not([data-chat-motion=full] *):after{background:color-mix(in srgb, var(--chat-fg) 6%, transparent)}}.chat-shimmer:not([data-chat-motion=full] *){color:var(--chat-muted);background:0 0;animation:none}[data-entering]:not([data-chat-motion=full] *),[data-exiting]:not([data-chat-motion=full] *){animation-duration:1ms!important}}[data-chat-motion=reduce] .chat-markdown.chat-fade .chat-word{animation:none}[data-chat-motion=reduce] .chat-shimmer-surface:after{background:var(--chat-fg);animation:none}@supports (color:color-mix(in lab, red, red)){[data-chat-motion=reduce] .chat-shimmer-surface:after{background:color-mix(in srgb, var(--chat-fg) 6%, transparent)}}[data-chat-motion=reduce] .chat-shimmer{color:var(--chat-muted);background:0 0;animation:none}[data-chat-motion=reduce] [data-entering],[data-chat-motion=reduce] [data-exiting]{animation-duration:1ms!important}@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-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@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-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}}@keyframes chat-drawer-in-right{0%{transform:translate(100%)}}@keyframes chat-fade-in{0%{opacity:0}}@keyframes chat-drawer-in{0%{transform:translate(-100%)}}@keyframes chat-in{0%{opacity:0;transform:scale(.98)}}@keyframes chat-out{to{opacity:0;transform:scale(.98)}}
|
|
3
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:block))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-mask-linear:linear-gradient(#fff, #fff);--tw-mask-radial:linear-gradient(#fff, #fff);--tw-mask-conic:linear-gradient(#fff, #fff);--tw-mask-left:linear-gradient(#fff, #fff);--tw-mask-right:linear-gradient(#fff, #fff);--tw-mask-bottom:linear-gradient(#fff, #fff);--tw-mask-top:linear-gradient(#fff, #fff);--tw-mask-bottom-from-position:0%;--tw-mask-bottom-to-position:100%;--tw-mask-bottom-from-color:black;--tw-mask-bottom-to-color:transparent;--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-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:-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-serif:ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--spacing:.25rem;--container-2xl:42rem;--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-normal:400;--font-weight-medium:500;--tracking-wide:.025em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--ease-out:cubic-bezier(0, 0, .2, 1);--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) 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)}}@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}:root,[data-chat-theme=claude-dark]{color-scheme:dark;--chat-bg:#191919;--chat-sidebar:#1f1f1f;--chat-surface:#303030;--chat-raised:#3a3a3a;--chat-hover:#3d3d3d;--chat-selected:#4a4a4a;--chat-bubble:#2a2a2a;--chat-popover:#303030;--chat-popover-border:#383838;--chat-popover-hover:#4f4f4f;--chat-border:#303030;--chat-border-strong:#454545;--chat-divider:#222;--chat-code-bg:#1c1c1c;--chat-code-border:#252525;--chat-inline-code:#2e2e2e;--chat-fg:#ecebe6;--chat-muted:#a3a29e;--chat-subtle:#75746f;--chat-accent:#d97757;--chat-accent-fg:#fff;--chat-check:#6c9cf0;--chat-warning:#e8b04b;--chat-warning-bg:#4a3b1c;--chat-danger:#e5675c;--chat-focus:#6c9cf0;--chat-backdrop:#00000080;--chat-font-sans:"Inter", ui-sans-serif, system-ui, sans-serif;--chat-font-serif:"Source Serif 4", ui-serif, Georgia, serif;--chat-font-mono:"JetBrains Mono", ui-monospace, "SF Mono", Menlo, monospace;--chat-radius-sm:6px;--chat-radius-md:10px;--chat-radius-lg:16px;--chat-radius-popover:12px;--chat-shadow-popover:0 8px 24px #00000080;--chat-content-width:48rem;--chat-content-padding:1.5rem;--chat-message-font-size:1.0625rem;--chat-code-font-size:.8125rem;--chat-message-line-height:1.65;--chat-ui-font-size:.875rem;--chat-ui-font-size-sm:.75rem;--chat-bubble-font-size:.9375rem;--chat-activity-font-size:.9375rem}}@layer components{.chat-markdown{font-family:var(--chat-font-message,var(--chat-font-serif));font-size:var(--chat-message-font-size);line-height:var(--chat-message-line-height);color:var(--chat-fg);overflow-wrap:anywhere}.chat-markdown>div>*+*{margin-top:.75em}.chat-markdown :is(h1,h2,h3,h4){margin-top:1.25em;font-weight:600;line-height:1.3}.chat-markdown h1{font-size:1.5em}.chat-markdown h2{font-size:1.3em}.chat-markdown h3{font-size:1.12em}.chat-markdown strong{font-weight:650}.chat-markdown :is(ul,ol){padding-left:1.6em}.chat-markdown ul{list-style:outside}.chat-markdown ol{list-style:decimal}.chat-markdown li+li,.chat-markdown li>:is(ul,ol){margin-top:.3em}.chat-markdown .chat-ui-tree{font-family:var(--chat-font-sans);font-size:var(--chat-ui-font-size);line-height:1.5}.chat-markdown .chat-ui-tree :is(ul,ol){padding-left:0;list-style:none}.chat-markdown .chat-ui-tree li+li{margin-top:0}.chat-markdown .chat-ui-tree :is(h1,h2,h3,h4){font-size:inherit;margin-top:0}.chat-markdown a{color:var(--chat-fg);text-decoration:underline;-webkit-text-decoration-color:var(--chat-subtle);-webkit-text-decoration-color:var(--chat-subtle);text-decoration-color:var(--chat-subtle);text-underline-offset:3px}.chat-markdown a:hover{-webkit-text-decoration-color:var(--chat-fg);-webkit-text-decoration-color:var(--chat-fg);text-decoration-color:var(--chat-fg)}.chat-markdown blockquote{border-left:3px solid var(--chat-border-strong);color:var(--chat-muted);padding-left:1em}.chat-markdown hr{border-color:var(--chat-border);margin-block:1.5em}.chat-markdown [data-chat-inline-code]{font-family:var(--chat-font-mono);background:var(--chat-inline-code);border-radius:5px;padding:.12em .35em;font-size:.82em}.chat-markdown [data-streamdown=table-wrapper]{margin-block:1em;overflow-x:auto}.chat-markdown table{border-collapse:collapse;font-family:var(--chat-font-sans);font-size:var(--chat-ui-font-size)}.chat-markdown :is(th,td){border-bottom:1px solid var(--chat-border);text-align:left;padding:.45em .9em .45em 0}.chat-markdown th{font-weight:600}.chat-markdown .katex-display{margin-block:1em;overflow:auto hidden}.chat-markdown .katex{font-size:1.08em}.chat-markdown.chat-fade .chat-word{animation:chat-word-in var(--chat-fade-duration,.7s) ease-out both}.chat-view{container:chat/inline-size}.chat-view-body{--chat-gutter:var(--chat-content-padding);container:chat-body/size}@container chat (max-width:34rem){.chat-view-body{--chat-gutter:min(var(--chat-content-padding), .75rem)}}@container chat (max-width:24rem){.chat-picker-detail{display:none}}@container chat-body (max-height:24rem){.chat-empty-greeting{display:none}}.chat-code-token{color:light-dark(var(--shiki-light),var(--shiki-dark))}.chat-shimmer{background-image:linear-gradient(90deg, var(--chat-muted) 0%, var(--chat-muted) 35%, var(--chat-fg) 50%, var(--chat-muted) 65%, var(--chat-muted) 100%);color:#0000;animation:chat-shimmer var(--chat-shimmer-duration,2s) linear infinite;background-repeat:repeat-x;background-size:20em 100%;-webkit-background-clip:text;background-clip:text}.chat-markdown.chat-thinking{font-family:var(--chat-font-sans);font-size:var(--chat-activity-font-size);color:var(--chat-muted);line-height:1.6}.chat-shimmer-surface:after{content:"";background:linear-gradient(100deg, transparent 30%, var(--chat-fg) 50%, transparent 70%) 0 0 / 300% 100%;position:absolute;inset:0}@supports (color:color-mix(in lab, red, red)){.chat-shimmer-surface:after{background:linear-gradient(100deg, transparent 30%, color-mix(in srgb, var(--chat-fg) 12%, transparent) 50%, transparent 70%) 0 0 / 300% 100%}}.chat-shimmer-surface:after{pointer-events:none;animation:1.6s linear infinite chat-shimmer-surface}}@layer utilities{.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}.sticky{position:sticky}.inset-0{inset:0}.inset-x-2{inset-inline:calc(var(--spacing) * 2)}.inset-y-0{inset-block:0}.-top-2{top:calc(var(--spacing) * -2)}.top-1\/2{top:50%}.-right-2{right:calc(var(--spacing) * -2)}.right-0{right:0}.right-1{right:var(--spacing)}.bottom-0{bottom:0}.bottom-2{bottom:calc(var(--spacing) * 2)}.bottom-\[min\(10rem\,40\%\)\]{bottom:min(10rem,40%)}.left-0{left:0}.left-1\/2{left:50%}.z-40{z-index:40}.z-50{z-index:50}.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}}.m-0{margin:0}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.-mx-1\.5{margin-inline:calc(var(--spacing) * -1.5)}.mx-5{margin-inline:calc(var(--spacing) * 5)}.mx-auto{margin-inline:auto}.my-1\.5{margin-block:calc(var(--spacing) * 1.5)}.my-2{margin-block:calc(var(--spacing) * 2)}.my-4{margin-block:calc(var(--spacing) * 4)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2\.5{margin-top:calc(var(--spacing) * 2.5)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.-ml-1\.5{margin-left:calc(var(--spacing) * -1.5)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-auto{margin-left:auto}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.size-0{width:0;height:0}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-2\.5{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.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-24{width:calc(var(--spacing) * 24);height:calc(var(--spacing) * 24)}.size-30{width:calc(var(--spacing) * 30);height:calc(var(--spacing) * 30)}.size-full{width:100%;height:100%}.h-1{height:var(--spacing)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-dvh{height:100dvh}.h-full{height:100%}.max-h-48{max-height:calc(var(--spacing) * 48)}.max-h-56{max-height:calc(var(--spacing) * 56)}.max-h-72{max-height:calc(var(--spacing) * 72)}.max-h-96{max-height:calc(var(--spacing) * 96)}.max-h-\[85dvh\]{max-height:85dvh}.max-h-\[inherit\]{max-height:inherit}.max-h-\[min\(10rem\,30cqh\)\]{max-height:min(10rem,30cqh)}.max-h-\[min\(18rem\,35cqh\)\]{max-height:min(18rem,35cqh)}.max-h-\[min\(24rem\,45cqh\)\]{max-height:min(24rem,45cqh)}.min-h-0{min-height:0}.min-h-2{min-height:calc(var(--spacing) * 2)}.min-h-6{min-height:calc(var(--spacing) * 6)}.min-h-7{min-height:calc(var(--spacing) * 7)}.min-h-12{min-height:calc(var(--spacing) * 12)}.min-h-64{min-height:calc(var(--spacing) * 64)}.min-h-full{min-height:100%}.w-\(--chat-sidebar-width\,18rem\){width:var(--chat-sidebar-width,18rem)}.w-9{width:calc(var(--spacing) * 9)}.w-12{width:calc(var(--spacing) * 12)}.w-13{width:calc(var(--spacing) * 13)}.w-14{width:calc(var(--spacing) * 14)}.w-60{width:calc(var(--spacing) * 60)}.w-72{width:calc(var(--spacing) * 72)}.w-80{width:calc(var(--spacing) * 80)}.w-\[min\(20rem\,85vw\)\]{width:min(20rem,85vw)}.w-full{width:100%}.max-w-\(--chat-content-width\){max-width:var(--chat-content-width)}.max-w-2xl{max-width:var(--container-2xl)}.max-w-\[85\%\]{max-width:85%}.max-w-\[calc\(var\(--chat-content-width\)\+2\*var\(--chat-gutter\,var\(--chat-content-padding\)\)\)\]{max-width:calc(var(--chat-content-width) + 2 * var(--chat-gutter,var(--chat-content-padding)))}.max-w-full{max-width:100%}.min-w-0{min-width:0}.min-w-44{min-width:calc(var(--spacing) * 44)}.min-w-52{min-width:calc(var(--spacing) * 52)}.min-w-\[2px\]{min-width:2px}.flex-1{flex:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.animate-pulse{animation:var(--animate-pulse)}.cursor-help{cursor:help}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.\[scrollbar-width\:thin\]{scrollbar-width:thin}.\[scrollbar-color\:var\(--chat-border-strong\)_transparent\]{scrollbar-color:var(--chat-border-strong) transparent}.\[scrollbar-gutter\:stable\]{scrollbar-gutter:stable}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.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)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-px{gap:1px}: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)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-chat-divider>:not(:last-child)){border-color:var(--chat-divider)}.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}.rounded-\[0\.3rem\]{border-radius:.3rem}.rounded-\[1\.25rem\]{border-radius:1.25rem}.rounded-\[2px\]{border-radius:2px}.rounded-\[inherit\]{border-radius:inherit}.rounded-chat-lg{border-radius:var(--chat-radius-lg)}.rounded-chat-md{border-radius:var(--chat-radius-md)}.rounded-chat-popover{border-radius:var(--chat-radius-popover)}.rounded-chat-sm{border-radius:var(--chat-radius-sm)}.rounded-full{border-radius:2147483647px}.rounded-sm{border-radius:var(--radius-sm)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\(--chat-notice-border\,var\(--chat-border\)\){border-color:var(--chat-notice-border,var(--chat-border))}.border-chat-accent\!{border-color:var(--chat-accent)!important}.border-chat-border{border-color:var(--chat-border)}.border-chat-border-strong{border-color:var(--chat-border-strong)}.border-chat-code-border{border-color:var(--chat-code-border)}.border-chat-danger{border-color:var(--chat-danger)}.border-chat-divider{border-color:var(--chat-divider)}.border-chat-popover-border{border-color:var(--chat-popover-border)}.bg-\(--chat-backdrop\){background-color:var(--chat-backdrop)}.bg-\(--chat-notice-bg\,transparent\){background-color:var(--chat-notice-bg,transparent)}.bg-chat-accent{background-color:var(--chat-accent)}.bg-chat-bg{background-color:var(--chat-bg)}.bg-chat-bubble{background-color:var(--chat-bubble)}.bg-chat-check{background-color:var(--chat-check)}.bg-chat-code-bg{background-color:var(--chat-code-bg)}.bg-chat-fg{background-color:var(--chat-fg)}.bg-chat-popover{background-color:var(--chat-popover)}.bg-chat-raised{background-color:var(--chat-raised)}.bg-chat-selected{background-color:var(--chat-selected)}.bg-chat-sidebar{background-color:var(--chat-sidebar)}.bg-chat-surface{background-color:var(--chat-surface)}.bg-chat-warning-bg{background-color:var(--chat-warning-bg)}.bg-transparent{background-color:#0000}.bg-linear-to-t{--tw-gradient-position:to top}@supports (background-image:linear-gradient(in lab, red, red)){.bg-linear-to-t{--tw-gradient-position:to top in oklab}}.bg-linear-to-t{background-image:linear-gradient(var(--tw-gradient-stops))}.from-chat-bg{--tw-gradient-from:var(--chat-bg);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-70\%{--tw-gradient-from-position:70%}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.mask-b-from-60\%{-webkit-mask-image:var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic);-webkit-mask-image:var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic);mask-image:var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic);--tw-mask-linear:var(--tw-mask-left), var(--tw-mask-right), var(--tw-mask-bottom), var(--tw-mask-top);--tw-mask-bottom:linear-gradient(to bottom, var(--tw-mask-bottom-from-color) var(--tw-mask-bottom-from-position), var(--tw-mask-bottom-to-color) var(--tw-mask-bottom-to-position));--tw-mask-bottom-from-position:60%;-webkit-mask-composite:source-in;-webkit-mask-composite:source-in;mask-composite:intersect}.mask-b-to-100\%{-webkit-mask-image:var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic);-webkit-mask-image:var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic);mask-image:var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic);--tw-mask-linear:var(--tw-mask-left), var(--tw-mask-right), var(--tw-mask-bottom), var(--tw-mask-top);--tw-mask-bottom:linear-gradient(to bottom, var(--tw-mask-bottom-from-color) var(--tw-mask-bottom-from-position), var(--tw-mask-bottom-to-color) var(--tw-mask-bottom-to-position));--tw-mask-bottom-to-position:100%;-webkit-mask-composite:source-in;-webkit-mask-composite:source-in;mask-composite:intersect}.\[mask-image\:linear-gradient\(to_bottom\,black_45\%\,transparent_72\%\)\]{-webkit-mask-image:linear-gradient(#000 45%,#0000 72%);mask-image:linear-gradient(#000 45%,#0000 72%)}.fill-current{fill:currentColor}.object-cover{object-fit:cover}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.px-\(--chat-gutter\){padding-inline:var(--chat-gutter)}.px-0\.5{padding-inline:calc(var(--spacing) * .5)}.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)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-\[var\(--chat-gutter\,var\(--chat-content-padding\)\)\]{padding-inline:var(--chat-gutter,var(--chat-content-padding))}.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)}.py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-px{padding-block:1px}.pt-1{padding-top:var(--spacing)}.pt-1\.5{padding-top:calc(var(--spacing) * 1.5)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-2\.5{padding-top:calc(var(--spacing) * 2.5)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pr-1{padding-right:var(--spacing)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pb-1{padding-bottom:var(--spacing)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-9{padding-bottom:calc(var(--spacing) * 9)}.pb-\[10cqh\]{padding-bottom:10cqh}.pb-\[max\(0\.5rem\,env\(safe-area-inset-bottom\)\)\]{padding-bottom:max(.5rem, env(safe-area-inset-bottom))}.pb-\[max\(0\.25rem\,env\(safe-area-inset-bottom\)\)\]{padding-bottom:max(.25rem, env(safe-area-inset-bottom))}.pb-\[max\(1rem\,env\(safe-area-inset-bottom\)\)\]{padding-bottom:max(1rem, env(safe-area-inset-bottom))}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-6{padding-left:calc(var(--spacing) * 6)}.pl-8{padding-left:calc(var(--spacing) * 8)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-chat-mono{font-family:var(--chat-font-mono)}.font-chat-sans{font-family:var(--chat-font-sans)}.font-chat-serif{font-family:var(--chat-font-serif)}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.font-serif{font-family:var(--font-serif)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-\(length\:--chat-activity-font-size\){font-size:var(--chat-activity-font-size)}.text-\(length\:--chat-bubble-font-size\){font-size:var(--chat-bubble-font-size)}.text-\(length\:--chat-code-font-size\){font-size:var(--chat-code-font-size)}.text-\(length\:--chat-ui-font-size\){font-size:var(--chat-ui-font-size)}.text-\(length\:--chat-ui-font-size-sm\){font-size:var(--chat-ui-font-size-sm)}.text-\[0\.625rem\]{font-size:.625rem}.text-\[0\.5625rem\]{font-size:.5625rem}.text-\[clamp\(1\.5rem\,6cqw\,2\.5rem\)\]{font-size:clamp(1.5rem,6cqw,2.5rem)}.leading-4{--tw-leading:calc(var(--spacing) * 4);line-height:calc(var(--spacing) * 4)}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-\[1\.75\]{--tw-leading:1.75;line-height:1.75}.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)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-chat-accent{color:var(--chat-accent)}.text-chat-accent-fg{color:var(--chat-accent-fg)}.text-chat-bg{color:var(--chat-bg)}.text-chat-check{color:var(--chat-check)}.text-chat-danger{color:var(--chat-danger)}.text-chat-fg{color:var(--chat-fg)}.text-chat-muted{color:var(--chat-muted)}.text-chat-subtle{color:var(--chat-subtle)}.text-chat-warning{color:var(--chat-warning)}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.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, )}.underline{text-decoration-line:underline}.decoration-chat-subtle{-webkit-text-decoration-color:var(--chat-subtle);-webkit-text-decoration-color:var(--chat-subtle);text-decoration-color:var(--chat-subtle)}.decoration-dotted{text-decoration-style:dotted}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-60{opacity:.6}.opacity-100{opacity:1}.shadow-chat-popover{--tw-shadow:var(--chat-shadow-popover);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, )}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;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-opacity{transition-property:opacity;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-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}:is(:where(.group\/card):focus-within .group-focus-within\/card\:opacity-100){opacity:1}:is(:where(.group\/item):focus-within .group-focus-within\/item\:pr-8){padding-right:calc(var(--spacing) * 8)}:is(:where(.group\/item):focus-within .group-focus-within\/item\:opacity-100),:is(:where(.group\/message):focus-within .group-focus-within\/message\:opacity-100){opacity:1}@media (hover:hover){:is(:where(.group\/card):hover .group-hover\/card\:opacity-100){opacity:1}:is(:where(.group\/item):hover .group-hover\/item\:pr-8){padding-right:calc(var(--spacing) * 8)}:is(:where(.group\/item):hover .group-hover\/item\:opacity-100),:is(:where(.group\/message):hover .group-hover\/message\:opacity-100),:is(:where(.group\/section):hover .group-hover\/section\:opacity-100){opacity:1}}:is(:where(.group\/trigger)[aria-expanded=true] .group-aria-expanded\/trigger\:rotate-90){rotate:90deg}:is(:where(.group\/trigger)[data-focus-visible] .group-data-focus-visible\/trigger\:opacity-100),:is(:where(.group)[data-hovered] .group-data-hovered\:opacity-100){opacity:1}.placeholder\:text-chat-subtle::placeholder{color:var(--chat-subtle)}.focus-within\:border-chat-border-strong:focus-within{border-color:var(--chat-border-strong)}@media (hover:hover){.hover\:text-chat-fg:hover{color:var(--chat-fg)}.hover\:underline:hover{text-decoration-line:underline}}.focus\:border-chat-border-strong:focus{border-color:var(--chat-border-strong)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset, ) 0 0 0 calc(2px + 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-chat-focus:focus-visible{--tw-ring-color:var(--chat-focus)}.data-disabled\:cursor-default[data-disabled]{cursor:default}.data-disabled\:opacity-40[data-disabled]{opacity:.4}.data-entering\:animate-chat-drawer-in[data-entering]{animation:.22s cubic-bezier(.2,.8,.2,1) chat-drawer-in}.data-entering\:animate-chat-drawer-in-right[data-entering]{animation:.22s cubic-bezier(.2,.8,.2,1) chat-drawer-in-right}.data-entering\:animate-chat-fade-in[data-entering]{animation:.2s ease-out chat-fade-in}.data-entering\:animate-chat-in[data-entering]{animation:.12s ease-out chat-in}.data-exiting\:animate-chat-drawer-out[data-exiting]{animation:.16s ease-in reverse forwards chat-drawer-in}.data-exiting\:animate-chat-drawer-out-right[data-exiting]{animation:.16s ease-in reverse forwards chat-drawer-in-right}.data-exiting\:animate-chat-fade-out[data-exiting]{animation:.15s ease-in reverse forwards chat-fade-in}.data-exiting\:animate-chat-out[data-exiting]{animation:90ms ease-in forwards chat-out}.data-focus-visible\:opacity-100[data-focus-visible]{opacity:1}.data-focus-visible\:ring-2[data-focus-visible]{--tw-ring-shadow:var(--tw-ring-inset, ) 0 0 0 calc(2px + 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)}.data-focus-visible\:ring-chat-focus[data-focus-visible]{--tw-ring-color:var(--chat-focus)}.data-focus-visible\:ring-inset[data-focus-visible]{--tw-ring-inset:inset}.data-focused\:bg-chat-popover-hover[data-focused]{background-color:var(--chat-popover-hover)}.data-hovered\:bg-chat-hover[data-hovered]{background-color:var(--chat-hover)}.data-hovered\:text-chat-fg[data-hovered]{color:var(--chat-fg)}.data-hovered\:text-chat-muted[data-hovered]{color:var(--chat-muted)}.data-hovered\:brightness-110[data-hovered]{--tw-brightness:brightness(110%);filter:var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, )}.data-open\:bg-chat-popover-hover[data-open]{background-color:var(--chat-popover-hover)}.data-pressed\:bg-chat-selected[data-pressed]{background-color:var(--chat-selected)}.data-pressed\:brightness-95[data-pressed]{--tw-brightness:brightness(95%);filter:var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, )}@media (prefers-reduced-motion:no-preference){.motion-safe\:data-entering\:animate-chat-in[data-entering]{animation:.12s ease-out chat-in}.motion-safe\:data-exiting\:animate-chat-out[data-exiting]{animation:90ms ease-in forwards chat-out}}@media (prefers-reduced-motion:reduce){.motion-reduce\:animate-none{animation:none}.motion-reduce\:transition-none{transition-property:none}}.\[\&_svg\]\:size-3 svg{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\[\&_svg\]\:size-3\.5 svg{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_svg\]\:size-5 svg{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.\[\&_svg\]\:size-\[1em\] svg{width:1em;height:1em}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\]\:fill-current svg{fill:currentColor}.\[\&\:not\(\:first-child\)\]\:mt-1:not(:first-child){margin-top:var(--spacing)}@media (hover:none){.\[\@media\(hover\:none\)\]\:pr-10{padding-right:calc(var(--spacing) * 10)}.\[\@media\(hover\:none\)\]\:opacity-100{opacity:1}}@media (pointer:coarse){.\[\@media\(pointer\:coarse\)\]\:size-7\!{width:calc(var(--spacing) * 7)!important;height:calc(var(--spacing) * 7)!important}.\[\@media\(pointer\:coarse\)\]\:size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.\[\@media\(pointer\:coarse\)\]\:size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.\[\@media\(pointer\:coarse\)\]\:size-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.\[\@media\(pointer\:coarse\)\]\:h-9{height:calc(var(--spacing) * 9)}.\[\@media\(pointer\:coarse\)\]\:h-10{height:calc(var(--spacing) * 10)}.\[\@media\(pointer\:coarse\)\]\:w-10{width:calc(var(--spacing) * 10)}}}@keyframes chat-word-in{0%{opacity:0}}[data-chat-code-bg=theme]{background-color:light-dark(var(--shiki-light-bg),var(--shiki-dark-bg))}[data-chat-code-bg=theme] pre{color:light-dark(var(--shiki-light),var(--shiki-dark))}@keyframes chat-shimmer-surface{0%{background-position:150% 0}to{background-position:-50% 0}}@keyframes chat-shimmer{0%{background-position:-20em 0}to{background-position:0 0}}@media (prefers-reduced-motion:reduce){.chat-markdown.chat-fade .chat-word:not([data-chat-motion=full] *){animation:none}.chat-shimmer-surface:not([data-chat-motion=full] *):after{background:var(--chat-fg);animation:none}@supports (color:color-mix(in lab, red, red)){.chat-shimmer-surface:not([data-chat-motion=full] *):after{background:color-mix(in srgb, var(--chat-fg) 6%, transparent)}}.chat-shimmer:not([data-chat-motion=full] *){color:var(--chat-muted);background:0 0;animation:none}[data-entering]:not([data-chat-motion=full] *),[data-exiting]:not([data-chat-motion=full] *){animation-duration:1ms!important}}[data-chat-motion=reduce] .chat-markdown.chat-fade .chat-word{animation:none}[data-chat-motion=reduce] .chat-shimmer-surface:after{background:var(--chat-fg);animation:none}@supports (color:color-mix(in lab, red, red)){[data-chat-motion=reduce] .chat-shimmer-surface:after{background:color-mix(in srgb, var(--chat-fg) 6%, transparent)}}[data-chat-motion=reduce] .chat-shimmer{color:var(--chat-muted);background:0 0;animation:none}[data-chat-motion=reduce] [data-entering],[data-chat-motion=reduce] [data-exiting]{animation-duration:1ms!important}@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-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-mask-linear{syntax:"*";inherits:false;initial-value:linear-gradient(#fff, #fff)}@property --tw-mask-radial{syntax:"*";inherits:false;initial-value:linear-gradient(#fff, #fff)}@property --tw-mask-conic{syntax:"*";inherits:false;initial-value:linear-gradient(#fff, #fff)}@property --tw-mask-left{syntax:"*";inherits:false;initial-value:linear-gradient(#fff, #fff)}@property --tw-mask-right{syntax:"*";inherits:false;initial-value:linear-gradient(#fff, #fff)}@property --tw-mask-bottom{syntax:"*";inherits:false;initial-value:linear-gradient(#fff, #fff)}@property --tw-mask-top{syntax:"*";inherits:false;initial-value:linear-gradient(#fff, #fff)}@property --tw-mask-bottom-from-position{syntax:"*";inherits:false;initial-value:0%}@property --tw-mask-bottom-to-position{syntax:"*";inherits:false;initial-value:100%}@property --tw-mask-bottom-from-color{syntax:"*";inherits:false;initial-value:black}@property --tw-mask-bottom-to-color{syntax:"*";inherits:false;initial-value:transparent}@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-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}}@keyframes chat-drawer-in-right{0%{transform:translate(100%)}}@keyframes chat-fade-in{0%{opacity:0}}@keyframes chat-drawer-in{0%{transform:translate(-100%)}}@keyframes chat-in{0%{opacity:0;transform:scale(.98)}}@keyframes chat-out{to{opacity:0;transform:scale(.98)}}
|
package/dist/tailwind.css
CHANGED
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
--color-chat-muted: var(--chat-muted);
|
|
34
34
|
--color-chat-subtle: var(--chat-subtle);
|
|
35
35
|
--color-chat-accent: var(--chat-accent);
|
|
36
|
+
--color-chat-accent-fg: var(--chat-accent-fg);
|
|
36
37
|
--color-chat-check: var(--chat-check);
|
|
37
38
|
--color-chat-warning: var(--chat-warning);
|
|
38
39
|
--color-chat-warning-bg: var(--chat-warning-bg);
|
|
@@ -117,11 +118,19 @@
|
|
|
117
118
|
--chat-muted: #a3a29e;
|
|
118
119
|
--chat-subtle: #75746f;
|
|
119
120
|
--chat-accent: #d97757;
|
|
121
|
+
/* Text and icons on the accent, e.g. the send button. */
|
|
122
|
+
--chat-accent-fg: #ffffff;
|
|
120
123
|
--chat-check: #6c9cf0;
|
|
121
124
|
--chat-warning: #e8b04b;
|
|
122
125
|
--chat-warning-bg: #4a3b1c;
|
|
123
126
|
--chat-danger: #e5675c;
|
|
124
127
|
--chat-focus: #6c9cf0;
|
|
128
|
+
/* Behind modals and drawers. */
|
|
129
|
+
--chat-backdrop: rgb(0 0 0 / 0.5);
|
|
130
|
+
/*
|
|
131
|
+
* --chat-notice-bg / --chat-notice-border (unset): ChatNotice, e.g. a shared chat's "Shared by" note.
|
|
132
|
+
* Default: no fill, --chat-border.
|
|
133
|
+
*/
|
|
125
134
|
|
|
126
135
|
--chat-font-sans: "Inter", ui-sans-serif, system-ui, sans-serif;
|
|
127
136
|
--chat-font-serif: "Source Serif 4", ui-serif, Georgia, serif;
|
|
@@ -141,7 +150,17 @@
|
|
|
141
150
|
--chat-content-width: 48rem;
|
|
142
151
|
--chat-content-padding: 1.5rem;
|
|
143
152
|
--chat-message-font-size: 1.0625rem;
|
|
153
|
+
/* Code blocks and tool output. Inline code follows the text around it. */
|
|
154
|
+
--chat-code-font-size: 0.8125rem;
|
|
144
155
|
--chat-message-line-height: 1.65;
|
|
156
|
+
/* Interface text: labels, buttons, menus, rows (Tailwind text-sm). */
|
|
157
|
+
--chat-ui-font-size: 0.875rem;
|
|
158
|
+
/* Small interface text: timestamps, badges, the disclaimer, captions (text-xs). */
|
|
159
|
+
--chat-ui-font-size-sm: 0.75rem;
|
|
160
|
+
/* The user message bubble. */
|
|
161
|
+
--chat-bubble-font-size: 0.9375rem;
|
|
162
|
+
/* Activity rows: thinking, tool summaries, search results, the context panel headings. */
|
|
163
|
+
--chat-activity-font-size: 0.9375rem;
|
|
145
164
|
}
|
|
146
165
|
}
|
|
147
166
|
|
|
@@ -176,6 +195,15 @@
|
|
|
176
195
|
.chat-markdown ol { list-style: decimal; }
|
|
177
196
|
.chat-markdown li + li { margin-top: 0.3em; }
|
|
178
197
|
.chat-markdown li > :is(ul, ol) { margin-top: 0.3em; }
|
|
198
|
+
/* UI drawn from a ```ui block sits in the message but is not prose: none of the rules above apply. */
|
|
199
|
+
.chat-markdown .chat-ui-tree {
|
|
200
|
+
font-family: var(--chat-font-sans);
|
|
201
|
+
font-size: var(--chat-ui-font-size);
|
|
202
|
+
line-height: 1.5;
|
|
203
|
+
}
|
|
204
|
+
.chat-markdown .chat-ui-tree :is(ul, ol) { padding-left: 0; list-style: none; }
|
|
205
|
+
.chat-markdown .chat-ui-tree li + li { margin-top: 0; }
|
|
206
|
+
.chat-markdown .chat-ui-tree :is(h1, h2, h3, h4) { margin-top: 0; font-size: inherit; }
|
|
179
207
|
.chat-markdown a {
|
|
180
208
|
color: var(--chat-fg);
|
|
181
209
|
text-decoration: underline;
|
|
@@ -203,7 +231,7 @@
|
|
|
203
231
|
.chat-markdown table {
|
|
204
232
|
border-collapse: collapse;
|
|
205
233
|
font-family: var(--chat-font-sans);
|
|
206
|
-
font-size:
|
|
234
|
+
font-size: var(--chat-ui-font-size);
|
|
207
235
|
}
|
|
208
236
|
.chat-markdown :is(th, td) {
|
|
209
237
|
border-bottom: 1px solid var(--chat-border);
|
|
@@ -304,7 +332,7 @@
|
|
|
304
332
|
}
|
|
305
333
|
.chat-markdown.chat-thinking {
|
|
306
334
|
font-family: var(--chat-font-sans);
|
|
307
|
-
font-size:
|
|
335
|
+
font-size: var(--chat-activity-font-size);
|
|
308
336
|
line-height: 1.6;
|
|
309
337
|
color: var(--chat-muted);
|
|
310
338
|
}
|
|
@@ -4,4 +4,11 @@ export { applyEvent, reduceEvents, estimateTokens, outputTokens, activityTokens,
|
|
|
4
4
|
export { toBlocks, isActivityPart } from "./blocks";
|
|
5
5
|
export type { Block, ActivityPart } from "./blocks";
|
|
6
6
|
export { readEventStream, formatEvent } from "./sse";
|
|
7
|
-
export { parsePartialJson } from "./partial-json";
|
|
7
|
+
export { parsePartialJson, salvageJson } from "./partial-json";
|
|
8
|
+
export { visualizeTool, visualizeGuide, checkWidgetCode } from "./visualize";
|
|
9
|
+
export type { VisualizeInput, WidgetCodeCheck } from "./visualize";
|
|
10
|
+
export { matchesSchema, schemaErrors, checkUiTree, isStateRef, renderUiTool, renderUiToolName, uiActionSchema } from "./ui-tree";
|
|
11
|
+
export type { UiNode, UiAction, RenderUiInput, UiComponentSpec, UiTreeCheck } from "./ui-tree";
|
|
12
|
+
export { parseUiMarkup, readUiValue, findUiBlocks, checkUiMarkup, checkUiMarkupCode, showUiTool, showUiToolName, uiMarkupGuide, uiMarkupLanguage } from "./ui-markup";
|
|
13
|
+
export type { UiMarkup, UiMarkupBlock, UiMarkupCheck, ShowUiInput } from "./ui-markup";
|
|
14
|
+
export type { UiTreeCheckOptions } from "./ui-tree";
|
|
@@ -5,3 +5,11 @@
|
|
|
5
5
|
* out. Returns undefined when nothing usable has arrived. One pass over the text.
|
|
6
6
|
*/
|
|
7
7
|
export declare function parsePartialJson(text: string): unknown;
|
|
8
|
+
/**
|
|
9
|
+
* JSON as far as it is valid: a stray bracket midway keeps what came before it, instead of losing it all.
|
|
10
|
+
* `error` says where it broke, for feedback to the model.
|
|
11
|
+
*/
|
|
12
|
+
export declare function salvageJson(text: string): {
|
|
13
|
+
value: unknown;
|
|
14
|
+
error?: string;
|
|
15
|
+
};
|
|
@@ -43,6 +43,11 @@ export interface ToolCallPart {
|
|
|
43
43
|
*/
|
|
44
44
|
partialInput?: unknown;
|
|
45
45
|
result?: unknown;
|
|
46
|
+
/**
|
|
47
|
+
* Display data for the page, not for the model: what a tool view's Card or Block draws (job rows, a diff)
|
|
48
|
+
* when the model-visible `result` is short. Set by the backend with `data` on part.update / part.end.
|
|
49
|
+
*/
|
|
50
|
+
data?: unknown;
|
|
46
51
|
error?: string;
|
|
47
52
|
title?: string;
|
|
48
53
|
subtitle?: string;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI as JSX in the reply: the model writes a ```ui fenced block in its normal text, e.g.
|
|
3
|
+
*
|
|
4
|
+
* <State tab="stills" />
|
|
5
|
+
* <Card title="Pixel 9 Pro"><Metric label="Zoom" value="5x" /></Card>
|
|
6
|
+
*
|
|
7
|
+
* Every model has seen a lot of JSX; it streams element by element and needs no JSON escaping. The parser is
|
|
8
|
+
* lenient where the intent is clear (JS-style objects, `{$state.k}`, `{"$state":"k"}`, text children) and
|
|
9
|
+
* tolerates a block cut short while it streams.
|
|
10
|
+
*/
|
|
11
|
+
import { type UiComponentSpec, type UiNode } from "./ui-tree";
|
|
12
|
+
export interface UiMarkup {
|
|
13
|
+
/** Top-level elements, in order. */
|
|
14
|
+
nodes: UiNode[];
|
|
15
|
+
/** Starting state from `<State key={value} />`. */
|
|
16
|
+
state: Record<string, unknown>;
|
|
17
|
+
/** What could not be read, with line numbers. */
|
|
18
|
+
errors: string[];
|
|
19
|
+
/** The block ended with elements still open (it is streaming, or the model forgot to close them). */
|
|
20
|
+
complete: boolean;
|
|
21
|
+
/** The line a node starts on (1-based), for messages. */
|
|
22
|
+
lineOf: (node: UiNode) => number | undefined;
|
|
23
|
+
}
|
|
24
|
+
/** The fence language the kit draws as UI. */
|
|
25
|
+
export declare const uiMarkupLanguage = "ui";
|
|
26
|
+
/** Reads a value written inside `{…}`: JSON, or a JS literal (unquoted keys, single quotes, trailing commas). */
|
|
27
|
+
export declare function readUiValue(source: string): {
|
|
28
|
+
value?: unknown;
|
|
29
|
+
error?: string;
|
|
30
|
+
};
|
|
31
|
+
/** Parses UI markup (the inside of a ```ui block). Safe on any prefix of it. */
|
|
32
|
+
export declare function parseUiMarkup(source: string): UiMarkup;
|
|
33
|
+
/** A ```ui block found in reply text. */
|
|
34
|
+
export interface UiMarkupBlock {
|
|
35
|
+
/** The block's markup, without the fences. */
|
|
36
|
+
source: string;
|
|
37
|
+
/** Where the block's content starts in the text. */
|
|
38
|
+
offset: number;
|
|
39
|
+
/** The closing fence has arrived. */
|
|
40
|
+
closed: boolean;
|
|
41
|
+
}
|
|
42
|
+
/** Finds the ```ui blocks in reply text (the last may still be open while it streams). */
|
|
43
|
+
export declare function findUiBlocks(text: string, language?: string): UiMarkupBlock[];
|
|
44
|
+
/** What `checkUiMarkup` found in a reply. */
|
|
45
|
+
export interface UiMarkupCheck {
|
|
46
|
+
/** Every ```ui block will show as written. */
|
|
47
|
+
ok: boolean;
|
|
48
|
+
/** One line per problem: block, line and component. */
|
|
49
|
+
errors: string[];
|
|
50
|
+
/** A message for the model, e.g. appended after its reply, so it fixes the block next time; empty when ok. */
|
|
51
|
+
feedback: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Checks the ```ui blocks in a finished reply against the host's components, so the harness can tell the
|
|
55
|
+
* model what to fix (in its own words: line numbers, "did you mean", the props a component takes).
|
|
56
|
+
*/
|
|
57
|
+
export declare function checkUiMarkup(text: string, components: readonly UiComponentSpec[], language?: string): UiMarkupCheck;
|
|
58
|
+
/** The suggested UI tool's name. */
|
|
59
|
+
export declare const showUiToolName = "show_ui";
|
|
60
|
+
/** Input of the suggested UI tool, as the model writes it. */
|
|
61
|
+
export interface ShowUiInput {
|
|
62
|
+
markup: string;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* A suggested tool for drawing UI from your components: the model passes JSX as a string, which streams
|
|
66
|
+
* into the chat element by element (draw it with `uiMarkupToolView`), and the harness answers the call with
|
|
67
|
+
* `checkUiMarkupCode(...).feedback`. Built only from the components, so it is byte-stable across turns.
|
|
68
|
+
*/
|
|
69
|
+
export declare function showUiTool(components: readonly UiComponentSpec[], name?: string): {
|
|
70
|
+
readonly name: string;
|
|
71
|
+
readonly description: string;
|
|
72
|
+
readonly inputSchema: {
|
|
73
|
+
readonly type: "object";
|
|
74
|
+
readonly properties: {
|
|
75
|
+
readonly markup: {
|
|
76
|
+
readonly type: "string";
|
|
77
|
+
readonly description: 'JSX of the components above, e.g. <Card title="Plan"><Metric label="Total" value="€184" /></Card>';
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
readonly required: readonly ["markup"];
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Checks the markup of one UI tool call. Its `feedback` is the tool result to return: "Shown to the user." or
|
|
85
|
+
* what to fix, by line and component.
|
|
86
|
+
*/
|
|
87
|
+
export declare function checkUiMarkupCode(markup: unknown, components: readonly UiComponentSpec[], toolName?: string): UiMarkupCheck;
|
|
88
|
+
/**
|
|
89
|
+
* A suggested system-prompt section that teaches the model to write ```ui blocks in its reply text, if you'd
|
|
90
|
+
* rather not use a tool. It only depends on the components, so it stays byte-stable across turns.
|
|
91
|
+
*/
|
|
92
|
+
export declare function uiMarkupGuide(components: readonly UiComponentSpec[], language?: string): string;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Host-registered components: instead of HTML, the model writes a small tree of components the host
|
|
3
|
+
* registered (trusted React, themed, able to read the app's own data). The kit validates each node against
|
|
4
|
+
* its component's schema; bad nodes render nothing. Idea from OpenUI (github.com/thesysdev/openui).
|
|
5
|
+
*/
|
|
6
|
+
export type JsonSchema = Record<string, unknown>;
|
|
7
|
+
/** One node of the tree. */
|
|
8
|
+
export interface UiNode {
|
|
9
|
+
component: string;
|
|
10
|
+
props?: Record<string, unknown>;
|
|
11
|
+
children?: UiNode[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* What a component can do when the user acts on it. Fixed set; prefer `set` (local state) over round trips.
|
|
15
|
+
* - set: sets a key of the widget's state, which props read with `{ "$state": key }`.
|
|
16
|
+
* - send: sends `text` to the assistant as the user.
|
|
17
|
+
* - open: opens an http(s) URL.
|
|
18
|
+
* - copy: copies `text` to the clipboard.
|
|
19
|
+
*/
|
|
20
|
+
export type UiAction = {
|
|
21
|
+
action: "set";
|
|
22
|
+
key: string;
|
|
23
|
+
value: unknown;
|
|
24
|
+
} | {
|
|
25
|
+
action: "send";
|
|
26
|
+
text: string;
|
|
27
|
+
} | {
|
|
28
|
+
action: "open";
|
|
29
|
+
url: string;
|
|
30
|
+
} | {
|
|
31
|
+
action: "copy";
|
|
32
|
+
text: string;
|
|
33
|
+
};
|
|
34
|
+
/** Input of the render tool. */
|
|
35
|
+
export interface RenderUiInput {
|
|
36
|
+
root: UiNode;
|
|
37
|
+
/** Starting values of the widget's state. */
|
|
38
|
+
state?: Record<string, unknown>;
|
|
39
|
+
}
|
|
40
|
+
/** A component as the model sees it. */
|
|
41
|
+
export interface UiComponentSpec {
|
|
42
|
+
name: string;
|
|
43
|
+
/** When to use it, for the model. */
|
|
44
|
+
description: string;
|
|
45
|
+
/** JSON Schema of its props (an object schema). With zod: `z.toJSONSchema(schema)`. */
|
|
46
|
+
props?: JsonSchema;
|
|
47
|
+
/** Whether it takes child nodes. */
|
|
48
|
+
children?: boolean;
|
|
49
|
+
}
|
|
50
|
+
/** Schema for a prop that holds an action, e.g. `{ onPress: uiActionSchema }`. */
|
|
51
|
+
export declare const uiActionSchema: JsonSchema;
|
|
52
|
+
export declare const renderUiToolName = "render_ui";
|
|
53
|
+
/**
|
|
54
|
+
* Why `value` doesn't fit `schema`, one line per problem, each starting with its path ("props.items[2].label").
|
|
55
|
+
* Empty when it fits. Covers the common JSON Schema keywords (type, enum, const, properties, required,
|
|
56
|
+
* additionalProperties, items, anyOf/oneOf/allOf, lengths, ranges, pattern); others are ignored.
|
|
57
|
+
*/
|
|
58
|
+
export declare function schemaErrors(schema: JsonSchema | boolean | undefined, value: unknown, path?: string): string[];
|
|
59
|
+
/** Whether `value` fits `schema`; see `schemaErrors` for why not. */
|
|
60
|
+
export declare function matchesSchema(schema: JsonSchema | boolean | undefined, value: unknown): boolean;
|
|
61
|
+
/** A prop that reads the widget's state: `{ "$state": "tab" }`. */
|
|
62
|
+
export declare function isStateRef(value: unknown): value is {
|
|
63
|
+
$state: string;
|
|
64
|
+
};
|
|
65
|
+
/** The render tool for these components, with a description generated from them. */
|
|
66
|
+
export declare function renderUiTool(components: readonly UiComponentSpec[]): {
|
|
67
|
+
name: string;
|
|
68
|
+
description: string;
|
|
69
|
+
inputSchema: {
|
|
70
|
+
type: string;
|
|
71
|
+
properties: {
|
|
72
|
+
root: {
|
|
73
|
+
type: string;
|
|
74
|
+
description: string;
|
|
75
|
+
properties: {
|
|
76
|
+
component: {
|
|
77
|
+
enum: string[];
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
required: string[];
|
|
81
|
+
};
|
|
82
|
+
state: {
|
|
83
|
+
type: string;
|
|
84
|
+
description: string;
|
|
85
|
+
};
|
|
86
|
+
};
|
|
87
|
+
required: string[];
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
/** What `checkUiTree` found. */
|
|
91
|
+
export interface UiTreeCheck {
|
|
92
|
+
/** Every node will show as written. */
|
|
93
|
+
ok: boolean;
|
|
94
|
+
/** One line per problem, with the node's path ("root.children[2]"). */
|
|
95
|
+
errors: string[];
|
|
96
|
+
/** A message to return to the model as the tool result, so it can fix the tree in its next call. */
|
|
97
|
+
feedback: string;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Checks a render tool's input against the registered components before it reaches the user, so a harness
|
|
101
|
+
* can send the problems back to the model (as the tool result, or a tool error) instead of retrying blind.
|
|
102
|
+
* Accepts what models actually send: `root` as an object, or as a JSON string.
|
|
103
|
+
*/
|
|
104
|
+
export interface UiTreeCheckOptions {
|
|
105
|
+
/** The tool the feedback tells the model to call again. */
|
|
106
|
+
toolName?: string;
|
|
107
|
+
/** Names a node in messages; default its path ("root.children[2]"). */
|
|
108
|
+
where?: (node: unknown, path: string) => string;
|
|
109
|
+
}
|
|
110
|
+
export declare function checkUiTree(input: unknown, components: readonly UiComponentSpec[], options?: string | UiTreeCheckOptions): UiTreeCheck;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The visualize preset: a tool the model calls to draw an interactive visual inline (like claude.ai's
|
|
3
|
+
* visualize tool), and the design guide to put in the system prompt. The kit's `show_widget` tool view feeds
|
|
4
|
+
* the streaming `widget_code` into a sandboxed WidgetFrame. The backend runs the tool as a no-op ("shown").
|
|
5
|
+
*/
|
|
6
|
+
/** Input of the visualize tool, as the model writes it. */
|
|
7
|
+
export interface VisualizeInput {
|
|
8
|
+
widget_code: string;
|
|
9
|
+
title?: string;
|
|
10
|
+
loading_messages?: string[];
|
|
11
|
+
}
|
|
12
|
+
/** The tool definition to give the model. Same shape as a page tool's `ToolSpec`. */
|
|
13
|
+
export declare const visualizeTool: {
|
|
14
|
+
readonly name: "show_widget";
|
|
15
|
+
readonly description: string;
|
|
16
|
+
readonly inputSchema: {
|
|
17
|
+
readonly type: "object";
|
|
18
|
+
readonly properties: {
|
|
19
|
+
readonly widget_code: {
|
|
20
|
+
readonly type: "string";
|
|
21
|
+
readonly description: "An HTML fragment (no <html>, <head> or <body>) or an <svg>. Inline <style> and <script> are allowed.";
|
|
22
|
+
};
|
|
23
|
+
readonly title: {
|
|
24
|
+
readonly type: "string";
|
|
25
|
+
readonly description: "Short snake_case name for the visual, e.g. gym_week.";
|
|
26
|
+
};
|
|
27
|
+
readonly loading_messages: {
|
|
28
|
+
readonly type: "array";
|
|
29
|
+
readonly items: {
|
|
30
|
+
readonly type: "string";
|
|
31
|
+
};
|
|
32
|
+
readonly minItems: 1;
|
|
33
|
+
readonly maxItems: 4;
|
|
34
|
+
readonly description: "1-4 short lines shown while you write it, e.g. \"Finding free slots\".";
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
readonly required: readonly ["widget_code"];
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
/** Design guide for the system prompt when the visualize tool is on. */
|
|
41
|
+
export declare const visualizeGuide = "## Visuals (show_widget)\nUse show_widget when a visual says it better than text: data to compare, a plan to adjust, a place to see, a\nprocess to step through. Keep explaining in text around it; the widget is not the whole answer.\n\nHow the frame works\n- widget_code is a fragment: no <!doctype>, <html>, <head> or <body>. Put <style> first, then markup, then <script>.\n- It renders while you write it; scripts run once it is complete, in order. Put scripts last.\n- No network unless the host allows it: no fetch, no external images or fonts. Inline your data.\n- The background is transparent and the frame sizes itself to your content. Add no outer margin or padding,\n no outer border or card around the whole widget, and no fixed height on the root.\n- Two globals: sendPrompt(text) sends a message as the user (for \"Add these to my calendar\", \"Explain this\"),\n openLink(url) opens an http(s) link. Prefer local state (JavaScript in the widget) over round trips: filter,\n toggle, recalculate and animate in place; use sendPrompt only for what needs you.\n\nLook\n- Use the chat's theme variables, never hard-coded colors or fonts: var(--chat-fg) text, var(--chat-muted) and\n var(--chat-subtle) secondary text, var(--chat-surface) and var(--chat-raised) fills, var(--chat-border) and\n var(--chat-divider) lines, var(--chat-hover) hover, var(--chat-accent) with var(--chat-accent-fg) for the one\n thing that matters most, var(--chat-check) good, var(--chat-warning), var(--chat-danger) bad;\n var(--chat-font-sans), var(--chat-font-mono); var(--chat-ui-font-size), var(--chat-ui-font-size-sm);\n var(--chat-radius-sm), var(--chat-radius-md), var(--chat-radius-lg).\n- Quiet by default: thin borders, few fills, one accent. Readable labels, aligned numbers, no decoration.\n- Set apart what you added or changed from what was already there: your proposals in the accent with a small\n \"New\" (or \"Changed\") tag, existing data quiet. The user must see at a glance what is yours.\n- Make it work on a narrow screen (down to 320px wide) and with a keyboard: real <button>s, visible focus.";
|
|
42
|
+
/** What `checkWidgetCode` found. */
|
|
43
|
+
export interface WidgetCodeCheck {
|
|
44
|
+
/** Nothing will break: no errors (warnings may remain). */
|
|
45
|
+
ok: boolean;
|
|
46
|
+
/** Things that break the widget in the sandbox. */
|
|
47
|
+
errors: string[];
|
|
48
|
+
/** Things that work but look wrong in the chat, e.g. hard-coded colors. */
|
|
49
|
+
warnings: string[];
|
|
50
|
+
/** A message to return to the model as the tool result. */
|
|
51
|
+
feedback: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Checks widget code before it reaches the user, so a harness can send problems back to the model as the
|
|
55
|
+
* tool result. `allow` is what the host lets widgets load (the same `allow` as the chat's `widgets`).
|
|
56
|
+
*/
|
|
57
|
+
export declare function checkWidgetCode(html: unknown, allow?: {
|
|
58
|
+
resourceDomains?: string[];
|
|
59
|
+
connectDomains?: string[];
|
|
60
|
+
}, toolName?: string): WidgetCodeCheck;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
export interface ChatNoticeProps {
|
|
3
|
+
children: ReactNode;
|
|
4
|
+
/** Under the text, e.g. a Report button. */
|
|
5
|
+
actions?: ReactNode;
|
|
6
|
+
/** Default an info icon; `null` for none. */
|
|
7
|
+
icon?: ReactNode;
|
|
8
|
+
className?: string;
|
|
9
|
+
}
|
|
10
|
+
/** A bordered note in the conversation column: "Shared by Alex. This is a copy of a chat…" with actions under it. */
|
|
11
|
+
export declare function ChatNotice({ children, actions, icon, className }: ChatNoticeProps): import("react").JSX.Element;
|
|
@@ -1,8 +1,26 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Draws some links in message markdown your way, e.g. a job link as a job row. Return undefined to keep the
|
|
4
|
+
* kit's link. Set with `MarkdownLinksProvider`.
|
|
5
|
+
*/
|
|
6
|
+
export type RenderLink = (link: {
|
|
7
|
+
href: string;
|
|
8
|
+
children: ReactNode;
|
|
9
|
+
}) => ReactNode | undefined;
|
|
10
|
+
export declare function MarkdownLinksProvider({ renderLink, children }: {
|
|
11
|
+
renderLink: RenderLink;
|
|
12
|
+
children: ReactNode;
|
|
13
|
+
}): import("react").JSX.Element;
|
|
1
14
|
export interface MarkdownProps {
|
|
2
15
|
children: string;
|
|
3
16
|
/** While true, text is paced and new words fade in; unfinished markdown is completed for display. */
|
|
4
17
|
streaming?: boolean;
|
|
5
18
|
className?: string;
|
|
19
|
+
/**
|
|
20
|
+
* The text part's id. With it, ```ui blocks are drawn with the components of the surrounding
|
|
21
|
+
* `UiComponentsProvider` (their state is keyed by it); without it, they show as code.
|
|
22
|
+
*/
|
|
23
|
+
partId?: string;
|
|
6
24
|
}
|
|
7
25
|
/** Message markdown: GFM, KaTeX math ($…$ and $$…$$), Shiki code blocks, smooth fade-in while streaming. */
|
|
8
|
-
export declare function Markdown({ children, streaming, className }: MarkdownProps): import("react").JSX.Element;
|
|
26
|
+
export declare function Markdown({ children, streaming, className, partId }: MarkdownProps): import("react").JSX.Element;
|
|
@@ -9,10 +9,14 @@ export interface MessageListProps {
|
|
|
9
9
|
renderPart?: (part: Part) => ReactNode;
|
|
10
10
|
/** Under the last message, inside the scroll area, e.g. the docked composer. Stays in view at the bottom. */
|
|
11
11
|
footer?: ReactNode;
|
|
12
|
+
/** Above the first message, inside the column; scrolls with the conversation. E.g. a ChatNotice. */
|
|
13
|
+
header?: ReactNode;
|
|
14
|
+
/** Where reading starts: "bottom" (default, a live chat) or "top" (a transcript read from the start). */
|
|
15
|
+
start?: "bottom" | "top";
|
|
12
16
|
className?: string;
|
|
13
17
|
}
|
|
14
18
|
/**
|
|
15
19
|
* The scrolling conversation. It follows a streaming reply while the reader is at the bottom and leaves
|
|
16
20
|
* them alone once they scroll up, with a button to jump back. Sending a message always jumps down.
|
|
17
21
|
*/
|
|
18
|
-
export declare function MessageList({ messages, onRetry, onEdit, onFeedback, renderPart, footer, className }: MessageListProps): import("react").JSX.Element;
|
|
22
|
+
export declare function MessageList({ messages, onRetry, onEdit, onFeedback, renderPart, header, footer, start, className }: MessageListProps): import("react").JSX.Element;
|