@runtypelabs/persona 4.32.2 → 4.34.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/dist/activity-ui.d.cts +3 -15
- package/dist/activity-ui.d.ts +3 -15
- package/dist/animations/glyph-cycle.d.cts +1 -3
- package/dist/animations/glyph-cycle.d.ts +1 -3
- package/dist/animations/wipe.d.cts +1 -3
- package/dist/animations/wipe.d.ts +1 -3
- package/dist/approval-ui.cjs +2 -2
- package/dist/approval-ui.d.cts +3 -15
- package/dist/approval-ui.d.ts +3 -15
- package/dist/approval-ui.js +1 -1
- package/dist/artifacts-ui.cjs +1 -1
- package/dist/artifacts-ui.d.cts +3 -21
- package/dist/artifacts-ui.d.ts +3 -21
- package/dist/background-runtime.d.cts +2 -3
- package/dist/background-runtime.d.ts +2 -3
- package/dist/{chunk-BbXc58OA.js → chunk-6CUrH_jm.js} +1 -1
- package/dist/{chunk-B_H0l3u2.js → chunk-BRM3bHcJ.js} +1 -1
- package/dist/{chunk-DNdeIFJ6.js → chunk-Brdx4NCz.js} +1 -1
- package/dist/chunk-C-rux8Q9.js +1 -0
- package/dist/{chunk-Ds_twaZn.js → chunk-C4v-HNhS.js} +1 -1
- package/dist/{chunk-Bkma5hIU.js → chunk-CE4seJxF.js} +1 -1
- package/dist/chunk-CEPM3FOp.js +1 -0
- package/dist/{chunk-BpjtKnGI.js → chunk-CV8EPIhT.js} +1 -1
- package/dist/{chunk-DVZ8ri1z.js → chunk-CWzHNuVK.js} +1 -1
- package/dist/{chunk-B3l7TOOv.js → chunk-CYpt7PsO.js} +1 -1
- package/dist/{chunk-2FnmZ9AA.js → chunk-Csr59G5V.js} +1 -1
- package/dist/{chunk-B9Zu-wrk.js → chunk-CxNPSY-b.js} +1 -1
- package/dist/{chunk-UWMfWW2a.js → chunk-D1G8tgYc.js} +1 -1
- package/dist/{chunk-DTGvDx8o.js → chunk-Dj2a9f9w.js} +1 -1
- package/dist/chunk-Dqa_GOcj.js +1 -0
- package/dist/chunk-DsWv3EGF.js +1 -0
- package/dist/{chunk-C7-m0EmI.js → chunk-NUNdcnAZ.js} +1 -1
- package/dist/{chunk-D0tcIZJM.js → chunk-YMkMvAsa.js} +2 -2
- package/dist/{chunk-C-EHtpbB.js → chunk-h5aOI_Pa.js} +1 -1
- package/dist/chunk-i4qGOJAL.js +1 -0
- package/dist/chunk-kizhspe5.js +1 -0
- package/dist/client-dispatch.js +1 -1
- package/dist/client-history.js +1 -1
- package/dist/client-stream.js +1 -1
- package/dist/{code-generators-DqauYyfX.d.cts → code-generators-DPAqTcAz.d.cts} +0 -2
- package/dist/{code-generators-DqauYyfX.d.ts → code-generators-DPAqTcAz.d.ts} +0 -2
- package/dist/codegen.cjs +1 -1
- package/dist/codegen.d.cts +1 -1
- package/dist/codegen.d.ts +1 -1
- package/dist/codegen.js +1 -1
- package/dist/composer-actions-runtime.cjs +1 -1
- package/dist/composer-actions-runtime.d.cts +4 -20
- package/dist/composer-actions-runtime.d.ts +4 -20
- package/dist/composer-actions-runtime.js +1 -1
- package/dist/{composer-input-dwg_o9Z-.d.ts → composer-input-i_FiUp6J.d.cts} +1 -7
- package/dist/{composer-input-dwg_o9Z-.d.cts → composer-input-i_FiUp6J.d.ts} +1 -7
- package/dist/{composer-store-Dw7Zbqxr.d.ts → composer-store-DhGNgG7Z.d.cts} +1 -3
- package/dist/{composer-store-Dw7Zbqxr.d.cts → composer-store-DhGNgG7Z.d.ts} +1 -3
- package/dist/config-diagnostics.d.cts +0 -2
- package/dist/config-diagnostics.d.ts +0 -2
- package/dist/{context-mention-manager-D2p0-JH-.d.ts → context-mention-manager-DL-xwGfL.d.cts} +2 -6
- package/dist/{context-mention-manager-D2p0-JH-.d.cts → context-mention-manager-DL-xwGfL.d.ts} +2 -6
- package/dist/context-mentions-inline.cjs +1 -1
- package/dist/context-mentions-inline.d.cts +2 -4
- package/dist/context-mentions-inline.d.ts +2 -4
- package/dist/context-mentions-inline.js +1 -1
- package/dist/context-mentions.cjs +1 -1
- package/dist/context-mentions.d.cts +3 -9
- package/dist/context-mentions.d.ts +3 -9
- package/dist/{defaults-CjX0kKzb.d.ts → defaults-Bga2Xrsp.d.cts} +2 -5
- package/dist/{defaults-CjX0kKzb.d.cts → defaults-Bga2Xrsp.d.ts} +2 -5
- package/dist/dictation-runtime.cjs +1 -1
- package/dist/dictation-runtime.d.cts +4 -13
- package/dist/dictation-runtime.d.ts +4 -13
- package/dist/dictation-runtime.js +1 -1
- package/dist/{dom-context-DHTabIn7.d.ts → dom-context-Bw-_9Evh.d.cts} +0 -2
- package/dist/{dom-context-DHTabIn7.d.cts → dom-context-Bw-_9Evh.d.ts} +0 -2
- package/dist/event-stream-view.cjs +1 -1
- package/dist/event-stream-view.d.cts +3 -16
- package/dist/event-stream-view.d.ts +3 -16
- package/dist/{fallback-speech-engine-DmF7MczI.d.ts → fallback-speech-engine-kLdyPcmk.d.cts} +1 -3
- package/dist/{fallback-speech-engine-DmF7MczI.d.cts → fallback-speech-engine-kLdyPcmk.d.ts} +1 -3
- package/dist/{feature-preferences-CVFDt9Xf.d.ts → feature-preferences-CmwZGKrf.d.cts} +1 -5
- package/dist/{feature-preferences-CVFDt9Xf.d.cts → feature-preferences-CmwZGKrf.d.ts} +1 -5
- package/dist/forms-ui.d.cts +2 -4
- package/dist/forms-ui.d.ts +2 -4
- package/dist/{history-confirm-dialog-DJEXsTyE.d.cts → history-confirm-dialog-i46-lPN_.d.cts} +2 -14
- package/dist/{history-confirm-dialog-DJEXsTyE.d.ts → history-confirm-dialog-i46-lPN_.d.ts} +2 -14
- package/dist/history-shell.cjs +1 -1
- package/dist/history-shell.d.cts +8 -27
- package/dist/history-shell.d.ts +8 -27
- package/dist/history-shell.js +1 -1
- package/dist/history-view.d.cts +1 -1
- package/dist/history-view.d.ts +1 -1
- package/dist/icons-extra.cjs +1 -1
- package/dist/icons-extra.d.cts +0 -2
- package/dist/icons-extra.d.ts +0 -2
- package/dist/index.cjs +44 -44
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +11 -11
- package/dist/index.d.ts +11 -11
- package/dist/index.global.js +1 -1
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +46 -46
- package/dist/index.js.map +1 -1
- package/dist/install.global.js +1 -1
- package/dist/install.global.js.map +1 -1
- package/dist/launcher.global.js +2 -2
- package/dist/launcher.global.js.map +1 -1
- package/dist/{loading-label-runtime-loader-CPxnoaoi.d.ts → loading-label-runtime-loader-Ccr3ETd3.d.cts} +1 -3
- package/dist/{loading-label-runtime-loader-CPxnoaoi.d.cts → loading-label-runtime-loader-Ccr3ETd3.d.ts} +1 -3
- package/dist/loading-label-runtime.cjs +1 -1
- package/dist/loading-label-runtime.d.cts +1 -1
- package/dist/loading-label-runtime.d.ts +1 -1
- package/dist/loading-label-runtime.js +1 -1
- package/dist/markdown-parsers.js +1 -1
- package/dist/{message-bubble-CkZGlCLC.d.ts → message-bubble-C6AVaH7f.d.cts} +21 -4
- package/dist/{message-bubble-CkZGlCLC.d.cts → message-bubble-C6AVaH7f.d.ts} +21 -4
- package/dist/{plugin-kit-C1mRjLgW.d.cts → plugin-kit-BVggqE3C.d.cts} +0 -2
- package/dist/{plugin-kit-C1mRjLgW.d.ts → plugin-kit-BVggqE3C.d.ts} +0 -2
- package/dist/plugin-kit.d.cts +1 -1
- package/dist/plugin-kit.d.ts +1 -1
- package/dist/preferences-runtime.cjs +1 -1
- package/dist/preferences-runtime.d.cts +1 -1
- package/dist/preferences-runtime.d.ts +1 -1
- package/dist/preferences-runtime.js +1 -1
- package/dist/{preview-DdUvoLb4.d.cts → preview-BMdRffo4.d.cts} +2 -6
- package/dist/{preview-DdUvoLb4.d.ts → preview-BMdRffo4.d.ts} +2 -6
- package/dist/{registry-Dz4iHNST.d.ts → registry-B16l8s1b.d.cts} +1 -8
- package/dist/{registry-Dz4iHNST.d.cts → registry-B16l8s1b.d.ts} +1 -8
- package/dist/{session-Baxp9iRK.d.cts → session-CtZHe7fc.d.cts} +10 -93
- package/dist/{session-Baxp9iRK.d.ts → session-CtZHe7fc.d.ts} +10 -93
- package/dist/session-reconnect.d.cts +2 -4
- package/dist/session-reconnect.d.ts +2 -4
- package/dist/smart-dom-reader.d.cts +2 -8
- package/dist/smart-dom-reader.d.ts +2 -8
- package/dist/testing.d.cts +0 -2
- package/dist/testing.d.ts +0 -2
- package/dist/theme-editor-preview.cjs +42 -42
- package/dist/theme-editor-preview.d.cts +1 -1
- package/dist/theme-editor-preview.d.ts +1 -1
- package/dist/theme-editor-preview.js +25 -25
- package/dist/theme-editor.cjs +25 -5
- package/dist/theme-editor.d.cts +2 -22
- package/dist/theme-editor.d.ts +2 -22
- package/dist/theme-editor.js +1 -1
- package/dist/theme-reference.cjs +1 -1
- package/dist/theme-reference.d.cts +4 -4
- package/dist/theme-reference.d.ts +4 -4
- package/dist/theme-reference.js +1 -1
- package/dist/{tool-loading-animation-un3kA5Ur.d.ts → tool-loading-animation-D2cyFvmM.d.cts} +1 -7
- package/dist/{tool-loading-animation-un3kA5Ur.d.cts → tool-loading-animation-D2cyFvmM.d.ts} +1 -7
- package/dist/{tooltip-BkW-8MnD.d.cts → tooltip-DbXkAuJL.d.cts} +0 -2
- package/dist/{tooltip-BkW-8MnD.d.ts → tooltip-DbXkAuJL.d.ts} +0 -2
- package/dist/{turn-activity-ui-BGNhtMcH.d.cts → turn-activity-ui-Do1Nd-Ow.d.cts} +2 -12
- package/dist/{turn-activity-ui-BGNhtMcH.d.ts → turn-activity-ui-Do1Nd-Ow.d.ts} +2 -12
- package/dist/turn-activity-ui.d.cts +1 -1
- package/dist/turn-activity-ui.d.ts +1 -1
- package/dist/{types-BOZHQIk0.d.cts → types-BC7MRxO5.d.cts} +167 -36
- package/dist/{types-BOZHQIk0.d.ts → types-BC7MRxO5.d.ts} +167 -36
- package/dist/ui-extras.js +3 -3
- package/dist/voice-client-tools.d.cts +1 -3
- package/dist/voice-client-tools.d.ts +1 -3
- package/dist/voice-runtime.cjs +1 -1
- package/dist/voice-runtime.d.cts +2 -12
- package/dist/voice-runtime.d.ts +2 -12
- package/dist/voice-runtime.js +2 -2
- package/dist/voice-worklet-player.d.cts +2 -6
- package/dist/voice-worklet-player.d.ts +2 -6
- package/dist/{webmcp-runtime-entry-DuAG1_yF.d.ts → webmcp-runtime-entry-B8g46vS0.d.cts} +1 -5
- package/dist/{webmcp-runtime-entry-DuAG1_yF.d.cts → webmcp-runtime-entry-B8g46vS0.d.ts} +1 -5
- package/dist/webmcp-runtime.d.cts +1 -1
- package/dist/webmcp-runtime.d.ts +1 -1
- package/dist/widget.css +1 -1
- package/package.json +4 -4
- package/src/client-dispatch.ts +69 -16
- package/src/client.operator-role.test.ts +217 -0
- package/src/components/event-stream-view.test.ts +5 -0
- package/src/components/message-bubble.test.ts +169 -0
- package/src/components/message-bubble.ts +123 -34
- package/src/components/scroll-to-bottom.test.ts +135 -0
- package/src/components/scroll-to-bottom.ts +50 -13
- package/src/components/user-message-collapse.ts +117 -0
- package/src/defaults-parity.test.ts +14 -0
- package/src/defaults.ts +6 -0
- package/src/index-core.ts +7 -0
- package/src/session.resubmit-from.test.ts +27 -0
- package/src/session.test.ts +10 -0
- package/src/session.ts +8 -5
- package/src/styles/widget.css +79 -1
- package/src/theme-reference.ts +5 -3
- package/src/types/theme.ts +50 -0
- package/src/types.ts +120 -11
- package/src/ui.ask-user-question-plugin.test.ts +154 -0
- package/src/ui.operator-role.test.ts +336 -0
- package/src/ui.scroll-additive.test.ts +219 -117
- package/src/ui.scroll.test.ts +176 -13
- package/src/ui.ts +267 -119
- package/src/ui.turn-activity.test.ts +7 -7
- package/src/ui.user-message-collapse.test.ts +540 -0
- package/src/utils/__snapshots__/tokens-parity.test.ts.snap +236 -0
- package/src/utils/auto-follow.test.ts +0 -38
- package/src/utils/auto-follow.ts +0 -35
- package/src/utils/brand.test.ts +14 -0
- package/src/utils/brand.ts +8 -4
- package/src/utils/history-messages.test.ts +30 -0
- package/src/utils/history-messages.ts +26 -8
- package/src/utils/message-fingerprint.ts +4 -0
- package/src/utils/resubmit-turn.test.ts +13 -0
- package/src/utils/resubmit-turn.ts +12 -1
- package/src/utils/theme.test.ts +23 -0
- package/src/utils/tokens.ts +47 -0
- package/src/welcome.test.ts +16 -0
- package/src/welcome.ts +10 -2
- package/dist/chunk-BNE40cEG.js +0 -1
- package/dist/chunk-Bz9jAgba.js +0 -1
- package/dist/chunk-CVMIncEY.js +0 -1
- package/dist/chunk-CdpVP6LZ.js +0 -1
- package/dist/chunk-CjkechxR.js +0 -1
- package/dist/chunk-DgZZqy14.js +0 -1
package/dist/theme-reference.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e={background:`semantic.colors.primary`,foreground:`semantic.colors.textInverse`,border:`transparent`,size:`48px`,iconSize:`24px`,borderRadius:`palette.radius.full`,shadow:`0 8px 24px rgba(0,0,0,.16)`,offset:`20px`},t={collapsedMode:`tool-call`,activePreview:!1,grouped:!1,groupedMode:`stack`,groupBoundary:`adjacent`,previewMaxLines:3,expandable:!0,loadingAnimation:`none`},n={activePreview:!1,previewMaxLines:3,expandable:!0,loadingAnimation:`none`},r={layout:`row`,variant:`row`,iconVisibility:`active`,autoExpand:!1,grouped:!0,groupedMode:`collapsible`,groupAppearance:`inset`,loadingAnimation:`shimmer`},i={appearance:`inset`,layout:`row`,variant:`row`,iconVisibility:`active`,autoExpand:!1,loadingAnimation:`shimmer`},a=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function o(e,t){if(!e)return t;if(!t)return e;let n={...e};for(let[e,r]of Object.entries(t)){let t=n[e];n[e]=a(t)&&a(r)?o(t,r):r}return n}const s={resolvedDisplay:`row`,primaryAction:`allow-once`,keyboardShortcuts:`focused`},c=`min(440px, calc(100vw - 24px))`,l={apiUrl:`https://api.runtype.com/api/chat/dispatch`,clientToken:void 0,agentId:void 0,target:void 0,theme:void 0,darkTheme:void 0,colorScheme:`light`,tooltip:{delayMs:400,skipDelayMs:300},launcher:{enabled:!0,mountMode:`floating`,dock:{side:`right`,width:`420px`},title:`Chat Assistant`,subtitle:`Here to help you get answers fast`,agentIconText:`💬`,agentIconName:`bot`,headerIconName:`bot`,position:`bottom-right`,width:c,heightOffset:0,autoExpand:!1,callToActionIconHidden:!1,agentIconSize:`40px`,headerIconSize:`40px`,closeButtonPaddingX:`0px`,closeButtonPaddingY:`0px`,callToActionIconName:`arrow-up-right`,callToActionIconText:``,callToActionIconSize:`32px`,callToActionIconPadding:`5px`,callToActionIconColor:void 0,callToActionIconBackgroundColor:void 0,closeButtonBackgroundColor:`transparent`,clearChat:{backgroundColor:`transparent`,borderColor:`transparent`,enabled:!0,placement:`inline`,iconName:`refresh-cw`,showTooltip:!0,tooltipText:`Clear chat`,paddingX:`0px`,paddingY:`0px`},headerIconHidden:!1,border:void 0,shadow:`0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)`},copy:{inputPlaceholder:`How can I help...`,sendButtonLabel:`Send`},sendButton:{borderWidth:`0px`,paddingX:`12px`,paddingY:`10px`,borderColor:void 0,useIcon:!0,iconText:`↑`,showTooltip:!0,tooltipText:`Send message`,iconName:`send`},statusIndicator:{visible:!0,idleText:`Online`,connectingText:`Connecting…`,connectedText:`Streaming…`,errorText:`Offline`},voiceRecognition:{enabled:!0,pauseDuration:2e3,iconName:`mic`,borderWidth:`0px`,iconColor:void 0,backgroundColor:`transparent`,borderColor:`transparent`,recordingIconColor:void 0,recordingBackgroundColor:void 0,recordingBorderColor:`transparent`,showTooltip:!0,tooltipText:`Start voice recognition`},features:{showReasoning:!0,showToolCalls:!0,scrollToBottom:{enabled:!0,iconName:`arrow-down`,label:``,streamingIndicator:`arrow`,scrollBehavior:`instant`,scrollDurationMs:220,transition:`none`},scrollBehavior:{mode:`anchor-top`,anchorTopOffset:16,showActivityWhilePinned:!0},toolCallDisplay:t,reasoningDisplay:n,streamAnimation:{type:`none`,placeholder:`none`,speed:120,duration:1800},askUserQuestion:{enabled:!0,slideInMs:180,freeTextLabel:`Other…`,freeTextPlaceholder:`Type your answer…`,submitLabel:`Send`},history:{enabled:!1,presentation:`panel`,showScopeStatus:!0,showDelete:!0,showDeleteAll:!0}},suggestionChips:[`Show me what you can help with`,`Walk me through getting started`,`Answer a question about this page`],suggestionChipsConfig:{fontFamily:`sans-serif`,fontWeight:`500`,paddingX:`12px`,paddingY:`6px`},layout:{header:{layout:`default`,showIcon:!0,showTitle:!0,showSubtitle:!0,showCloseButton:!0,showClearChat:!0},messages:{layout:`bubble`,avatar:{show:!1,position:`left`},timestamp:{show:!1,position:`below`},groupConsecutive:!1},slots:{}},markdown:{options:{gfm:!0,breaks:!0},disableDefaultStyles:!1},messageActions:{enabled:!0,showCopy:!0,showUpvote:!1,showDownvote:!1,visibility:`hover`,align:`right`,layout:`pill-inside`},debug:!1},u={},d={colorScheme:`light`,errorDisplay:`block`,messageActions:{visibility:void 0},suggestionChipsConfig:{fontWeight:void 0},approval:s,loadingIndicator:{variant:`label`},launcher:{variant:`circle`,width:`min(400px, calc(100vw - 24px))`,headerIconSize:`20px`},features:{artifacts:{enabled:!0},scrollToBottom:{streamingIndicator:`dots`,transition:`fade`,scrollBehavior:`smooth`},toolCallDisplay:r,reasoningDisplay:i},composer:{layout:`single-row`,placement:`overlay`},sendButton:{iconName:`arrow-up`},statusIndicator:{mode:`transient`},layout:{contentMaxWidth:`768px`,topFade:!0,header:{showSubtitle:!1},messages:{assistant:{width:`full`}}}};function f(e){return e?.future?.v5Defaults===!0?`v5`:`v4`}function p(e){let t=f(e)===`v5`?d:u;return o(l,t)}p();const m={colors:{primary:{50:`#ffffff`,100:`#f5f5f5`,200:`#d4d4d4`,300:`#a3a3a3`,400:`#737373`,500:`#171717`,600:`#0f0f0f`,700:`#0a0a0a`,800:`#050505`,900:`#030303`,950:`#000000`},secondary:{50:`#f5f3ff`,100:`#ede9fe`,200:`#ddd6fe`,300:`#c4b5fd`,400:`#a78bfa`,500:`#8b5cf6`,600:`#7c3aed`,700:`#6d28d9`,800:`#5b21b6`,900:`#4c1d95`,950:`#2e1065`},accent:{50:`#ecfeff`,100:`#cffafe`,200:`#a5f3fc`,300:`#67e8f9`,400:`#22d3ee`,500:`#06b6d4`,600:`#0891b2`,700:`#0e7490`,800:`#155e75`,900:`#164e63`,950:`#083344`},gray:{50:`#f9fafb`,100:`#f3f4f6`,200:`#e5e7eb`,300:`#d1d5db`,400:`#9ca3af`,500:`#6b7280`,600:`#4b5563`,700:`#374151`,800:`#1f2937`,900:`#111827`,950:`#030712`},success:{50:`#f0fdf4`,100:`#dcfce7`,200:`#bbf7d0`,300:`#86efac`,400:`#4ade80`,500:`#22c55e`,600:`#16a34a`,700:`#15803d`,800:`#166534`,900:`#14532d`},warning:{50:`#fefce8`,100:`#fef9c3`,200:`#fef08a`,300:`#fde047`,400:`#facc15`,500:`#eab308`,600:`#ca8a04`,700:`#a16207`,800:`#854d0e`,900:`#713f12`},error:{50:`#fef2f2`,100:`#fee2e2`,200:`#fecaca`,300:`#fca5a5`,400:`#f87171`,500:`#ef4444`,600:`#dc2626`,700:`#b91c1c`,800:`#991b1b`,900:`#7f1d1d`},info:{50:`#eff6ff`,100:`#dbeafe`,200:`#bfdbfe`,300:`#93c5fd`,400:`#60a5fa`,500:`#3b82f6`,600:`#2563eb`,700:`#1d4ed8`,800:`#1e40af`,900:`#1e3a8a`,950:`#172554`},purple:{50:`#faf5ff`,100:`#f3e8ff`,200:`#e9d5ff`,300:`#d8b4fe`,400:`#c084fc`,500:`#a855f7`,600:`#9333ea`,700:`#7e22ce`,800:`#6b21a8`,900:`#581c87`,950:`#3b0764`},teal:{50:`#f0fdfa`,100:`#ccfbf1`,200:`#99f6e4`,300:`#5eead4`,400:`#2dd4bf`,500:`#14b8a6`,600:`#0d9488`,700:`#0f766e`,800:`#115e59`,900:`#134e4a`,950:`#042f2e`}},spacing:(()=>{let e={};for(let t of[0,1,2,3,4,5,6,8,10,12,16,20,24,32,40,48,56,64])e[t]=t===0?`0px`:`${t/4}rem`;return e})(),typography:{fontFamily:{sans:`system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`,serif:`Georgia, Cambria, "Times New Roman", Times, serif`,mono:`ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace`},fontSize:{xs:`0.75rem`,sm:`0.875rem`,base:`1rem`,lg:`1.125rem`,xl:`1.25rem`,"2xl":`1.5rem`,"3xl":`1.875rem`,"4xl":`2.25rem`},fontWeight:{normal:`400`,medium:`500`,semibold:`600`,bold:`700`},lineHeight:{tight:`1.25`,normal:`1.5`,relaxed:`1.625`}},shadows:{none:`none`,sm:`0 1px 2px 0 rgb(0 0 0 / 0.05)`,md:`0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)`,lg:`0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)`,xl:`0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)`,"2xl":`0 25px 50px -12px rgb(0 0 0 / 0.25)`},borders:{none:`none`,sm:`1px solid`,md:`2px solid`,lg:`4px solid`},radius:{none:`0px`,sm:`0.125rem`,md:`0.375rem`,lg:`0.5rem`,xl:`0.75rem`,"2xl":`1rem`,full:`9999px`}},h={colors:{primary:`palette.colors.primary.500`,secondary:`palette.colors.secondary.500`,accent:`palette.colors.primary.600`,surface:`palette.colors.gray.50`,background:`palette.colors.gray.50`,container:`palette.colors.gray.50`,text:`palette.colors.gray.900`,textMuted:`palette.colors.gray.500`,textInverse:`palette.colors.gray.50`,border:`palette.colors.gray.200`,divider:`palette.colors.gray.200`,interactive:{default:`palette.colors.primary.600`,hover:`palette.colors.primary.700`,focus:`palette.colors.primary.600`,active:`palette.colors.primary.600`,disabled:`palette.colors.gray.300`},feedback:{success:`palette.colors.success.500`,warning:`palette.colors.warning.500`,error:`palette.colors.error.500`,info:`palette.colors.info.500`}},spacing:{xs:`palette.spacing.1`,sm:`palette.spacing.2`,md:`palette.spacing.4`,lg:`palette.spacing.6`,xl:`palette.spacing.8`,"2xl":`palette.spacing.10`},typography:{fontFamily:`palette.typography.fontFamily.sans`,fontSize:`palette.typography.fontSize.base`,fontWeight:`palette.typography.fontWeight.normal`,lineHeight:`palette.typography.lineHeight.normal`}},g={button:{primary:{background:`palette.colors.primary.500`,foreground:`palette.colors.primary.50`,borderRadius:`palette.radius.lg`,padding:`semantic.spacing.md`},secondary:{background:`semantic.colors.surface`,foreground:`semantic.colors.secondary`,borderRadius:`palette.radius.lg`,padding:`semantic.spacing.md`},ghost:{background:`transparent`,foreground:`semantic.colors.text`,borderRadius:`palette.radius.md`,padding:`semantic.spacing.sm`,hoverBackground:`rgba(0, 0, 0, 0.05)`}},input:{background:`semantic.colors.surface`,placeholder:`semantic.colors.textMuted`,borderRadius:`palette.radius.lg`,padding:`semantic.spacing.md`,focus:{border:`palette.colors.gray.400`,ring:`palette.colors.gray.400`}},launcher:{background:`semantic.colors.surface`,foreground:`semantic.colors.primary`,border:`semantic.colors.border`,size:`60px`,iconSize:`28px`,borderRadius:`palette.radius.full`,shadow:`palette.shadows.lg`},panel:{width:c,maxWidth:`none`,height:`min(640px, max(200px, calc(100vh - 64px)))`,maxHeight:`none`,borderRadius:`palette.radius.xl`,shadow:`palette.shadows.xl`,inset:`16px`,canvasBackground:`transparent`,modes:{floating:{border:`1px solid var(--persona-border)`,shadow:`palette.shadows.xl`,borderRadius:`palette.radius.xl`},inline:{border:`1px solid var(--persona-border)`,shadow:`none`,borderRadius:`palette.radius.xl`},docked:{border:`none`,shadow:`none`,borderRadius:`palette.radius.xl`},sidebar:{border:`none`,borderRadius:`0`},mobile:{border:`none`,shadow:`none`,borderRadius:`0`}}},header:{background:`palette.colors.primary.500`,foreground:`palette.colors.primary.50`,borderRadius:`palette.radius.xl palette.radius.xl 0 0`,padding:`20px 24px`,minimalPadding:`16px 24px`,iconBackground:`palette.colors.primary.600`,iconForeground:`palette.colors.primary.50`},message:{gap:`12px`,user:{background:`palette.colors.primary.500`,text:`palette.colors.primary.50`,borderRadius:`palette.radius.lg`,shadow:`palette.shadows.sm`},assistant:{background:`semantic.colors.container`,text:`semantic.colors.text`,borderRadius:`palette.radius.lg`,border:`semantic.colors.border`,shadow:`palette.shadows.sm`},border:`semantic.colors.border`},introCard:{background:`transparent`,borderRadius:`palette.radius.2xl`,padding:`semantic.spacing.lg`,shadow:`palette.shadows.none`},suggestion:{chip:{background:`semantic.colors.surface`,foreground:`semantic.colors.text`,border:`semantic.colors.border`,borderRadius:`palette.radius.full`,padding:`0.5rem 0.875rem`,gap:`0.5rem`,itemGap:`8px`,minHeight:`36px`,fontSize:`0.8125rem`,lineHeight:`1.25`,iconSize:`16px`,hoverBackground:`palette.colors.gray.100`,hoverBorder:`palette.colors.gray.300`,pressedBackground:`palette.colors.gray.200`,focusRing:`semantic.colors.interactive.focus`,disabledOpacity:`0.5`},card:{background:`semantic.colors.surface`,foreground:`semantic.colors.text`,border:`semantic.colors.border`,borderRadius:`palette.radius.xl`,padding:`1rem`,shadow:`palette.shadows.sm`,gap:`0.625rem`,itemGap:`8px`,minHeight:`72px`,fontSize:`0.875rem`,lineHeight:`1.35`,iconSize:`18px`,hoverBackground:`palette.colors.gray.100`,hoverBorder:`palette.colors.gray.300`,pressedBackground:`palette.colors.gray.200`,focusRing:`semantic.colors.interactive.focus`,disabledOpacity:`0.5`},list:{background:`transparent`,foreground:`semantic.colors.text`,border:`semantic.colors.border`,borderRadius:`palette.radius.md`,padding:`0.75rem`,gap:`0.625rem`,itemGap:`8px`,minHeight:`44px`,fontSize:`0.875rem`,lineHeight:`1.35`,iconSize:`17px`,hoverBackground:`palette.colors.gray.100`,hoverBorder:`palette.colors.gray.300`,pressedBackground:`palette.colors.gray.200`,focusRing:`semantic.colors.interactive.focus`,disabledOpacity:`0.5`}},toolBubble:{shadow:`palette.shadows.sm`},reasoningBubble:{shadow:`palette.shadows.sm`},composer:{shadow:`palette.shadows.none`},scrollbar:{thumb:`semantic.colors.border`,track:`transparent`},markdown:{inlineCode:{background:`palette.colors.gray.50`,foreground:`palette.colors.gray.900`},link:{foreground:`palette.colors.primary.600`},prose:{fontFamily:`inherit`},codeBlock:{background:`semantic.colors.container`,borderColor:`semantic.colors.border`,textColor:`inherit`,borderRadius:`palette.radius.md`},table:{headerBackground:`semantic.colors.container`,borderColor:`semantic.colors.border`},hr:{color:`semantic.colors.divider`},blockquote:{borderColor:`palette.colors.gray.900`,background:`transparent`,textColor:`palette.colors.gray.500`}},collapsibleWidget:{container:`palette.colors.gray.50`,surface:`semantic.colors.surface`,border:`semantic.colors.border`},voice:{recording:{indicator:`palette.colors.error.500`,background:`palette.colors.error.50`,border:`palette.colors.error.200`},processing:{icon:`palette.colors.primary.500`,background:`palette.colors.primary.50`},speaking:{icon:`palette.colors.success.500`}},approval:{requested:{background:`semantic.colors.surface`,border:`semantic.colors.border`,text:`palette.colors.gray.900`,shadow:`0 1px 2px 0 rgba(11, 11, 11, 0.06), 0 2px 8px 0 rgba(11, 11, 11, 0.04)`},approve:{background:`semantic.colors.primary`,foreground:`semantic.colors.textInverse`,borderRadius:`palette.radius.md`,padding:`semantic.spacing.sm`},deny:{background:`semantic.colors.container`,foreground:`semantic.colors.text`,borderRadius:`palette.radius.md`,padding:`semantic.spacing.sm`}},attachment:{image:{background:`palette.colors.gray.100`,border:`palette.colors.gray.200`}},eventStream:{badge:{flow:{background:`palette.colors.success.100`,foreground:`palette.colors.success.700`},step:{background:`palette.colors.primary.100`,foreground:`palette.colors.primary.700`},reasoning:{background:`palette.colors.warning.100`,foreground:`palette.colors.warning.700`},tool:{background:`palette.colors.purple.100`,foreground:`palette.colors.purple.800`},agent:{background:`palette.colors.teal.100`,foreground:`palette.colors.teal.800`},error:{background:`palette.colors.error.100`,foreground:`palette.colors.error.700`},default:{background:`palette.colors.gray.100`,foreground:`palette.colors.gray.600`}}},scrollToBottom:{background:`components.button.primary.background`,foreground:`components.button.primary.foreground`,border:`semantic.colors.primary`,size:`40px`,borderRadius:`palette.radius.full`,shadow:`palette.shadows.sm`,padding:`0.5rem 0.875rem`,gap:`0.5rem`,fontSize:`0.875rem`,iconSize:`14px`},artifact:{pane:{background:`semantic.colors.container`,toolbarBackground:`semantic.colors.container`}}},_=m.colors.gray,v={50:`#fafafa`,100:`#f5f5f5`,200:`#e5e5e5`,300:`#d4d4d4`,400:`#a3a3a3`,500:`#737373`,600:`#525252`,700:`#404040`,800:`#262626`,900:`#171717`,950:`#0a0a0a`},y={...m,colors:{...m.colors,gray:_}},b={...m,colors:{...m.colors,gray:v},radius:{none:`0px`,sm:`4px`,md:`8px`,lg:`12px`,xl:`16px`,"2xl":`24px`,full:`9999px`}},x=h,S={...h,colors:{...h.colors,surface:`#ffffff`,background:`#ffffff`,container:`semantic.colors.surface`,textInverse:`#ffffff`},typography:{...h.typography,fontSize:`14px`,lineHeight:`1.5`}},C=g,w={...g,scrollToBottom:{...g.scrollToBottom,background:`semantic.colors.surface`,foreground:`semantic.colors.text`,border:`semantic.colors.border`,size:`32px`},messageActions:{background:`transparent`,border:`none`,hoverBackground:`components.button.ghost.hoverBackground`,hoverForeground:`semantic.colors.text`,borderRadius:`palette.radius.md`},launcher:e,activity:{labelSize:`13px`,iconSize:`16px`,indent:`0px`,transcriptGap:`0px`,responseGap:`12px`,groupIndent:`16px`,groupGap:`2px`,groupPadding:`2px 0`,bodyPadding:`4px 0`,bodyFontWeight:`400`,sectionGap:`8px`,bodySurface:`transparent`},toolBubble:{shadow:`none`},reasoningBubble:{shadow:`none`},input:{...g.input,borderRadius:`palette.radius.full`},introCard:{...g.introCard,title:{fontSize:`22px`,fontWeight:`500`}},suggestion:{chip:{...g.suggestion.chip,fontWeight:`400`},card:{...g.suggestion.card,fontWeight:`400`},list:{...g.suggestion.list,fontWeight:`400`}},panel:{...g.panel,width:`min(400px, calc(100vw - 24px))`,height:`min(704px, calc(100dvh - 104px))`,borderRadius:`palette.radius.xl`},header:{...g.header,background:`semantic.colors.container`,foreground:`semantic.colors.text`,padding:`8px 8px 8px 16px`,minimalPadding:`8px 8px 8px 16px`,minHeight:`48px`,borderBottom:`none`,iconBackground:`transparent`,iconForeground:`semantic.colors.text`,iconScale:`1`,iconPadding:`auto`,controlSize:`28px`,controlIconSize:`16px`,controlStrokeWidth:`1.5`,actionIconForeground:`semantic.colors.textMuted`,controlBorderRadius:`8px`,controlHoverBackground:`color-mix(in srgb, var(--persona-text) 8%, transparent)`,controlHoverForeground:`semantic.colors.text`,controlFocusOutline:`2px solid color-mix(in srgb, var(--persona-text) 50%, transparent)`,title:{fontSize:`14px`,fontWeight:`500`,lineHeight:`1.5`}},message:{...g.message,gap:`20px`,fullscreenGap:`28px`,topFadeHeight:`18px`,user:{...g.message.user,background:`palette.colors.gray.100`,text:`semantic.colors.text`,borderRadius:`palette.radius.xl`,shadow:`none`,padding:`8px 14px`,fontSize:`14px`,lineHeight:`1.5`},assistant:{...g.message.assistant,background:`transparent`,border:`transparent`,borderWidth:`0px`,borderRadius:`0px`,shadow:`none`,padding:`0px`,fontSize:`14px`,lineHeight:`1.55`}},artifact:{...g.artifact,card:{background:`semantic.colors.surface`,border:`1px solid var(--persona-border)`,borderRadius:`palette.radius.lg`,hoverBackground:`components.button.ghost.hoverBackground`,hoverBorderColor:`semantic.colors.border`},inline:{background:`semantic.colors.surface`,border:`1px solid var(--persona-border)`,borderRadius:`palette.radius.lg`,chromeBackground:`semantic.colors.surface`,chromeBorder:`semantic.colors.border`,titleColor:`semantic.colors.text`,mutedColor:`semantic.colors.textMuted`}},composer:{...g.composer,padding:`8px`,fontSize:`15px`,lineHeight:`1.5`,controlSize:`32px`,controlIconSize:`20px`,expandedPadding:`12px 16px`,expandedBorderRadius:`24px`,sendIconSize:`18px`,sendButtonRadius:`9999px`,footerBorder:`none`,overflowMenu:{borderRadius:`12px`},overlayBand:`linear-gradient(to bottom, transparent, var(--persona-container) 24px)`,focusBorderColor:`color-mix(in srgb, var(--persona-text) 28%, var(--persona-border))`,focusRing:`1px solid color-mix(in srgb, var(--persona-text) 12%, transparent)`}},T=e=>f({future:e}),E=e=>T(e)===`v5`?{palette:b,semantic:S,components:w}:{palette:y,semantic:x,components:C},D={overview:`Start fresh with brand for a coordinated look, theme.semantic for shared design intent, and theme.components for exact exceptions. Tokens layer palette → semantic → components; darkTheme overrides inherited light theme inputs. Current V4 defaults apply unless future.v5Defaults is true. Content belongs in welcome/copy and suggestions; behavior and composition remain in features/providers/layout/launcher. Explicit legacy styles still win until reset; modern welcome content wins over old copy aliases. See docs/configuration.md for fresh recipes, mounted update policy and authored versus resolved exports.`,layers:{palette:{description:`Primitive design tokens. Override specific shades to change the entire widget feel.`,colors:{description:`7 color scales, each with shades 50 (lightest) to 950 (darkest). Override only the shades you need.`,scales:{gray:`Neutrals: backgrounds, text, borders. Key shades: 50 (lightest bg), 100 (secondary bg), 200 (borders), 500 (muted text), 900 (primary text).`,primary:`Brand color: buttons, links, interactive elements. Key shades: 500 (default), 600 (hover).`,accent:`Secondary highlight. Key shades: 500 (default), 600 (hover).`,secondary:`Tertiary color scale.`,success:`Positive feedback (default: green).`,warning:`Caution feedback (default: yellow).`,error:`Error/danger feedback (default: red).`}},radius:{description:`Border radius scale. Add custom keys like launcher, button.`,defaults:{none:`0px`,sm:`0.125rem`,md:`0.375rem`,lg:`0.5rem`,xl:`0.75rem`,"2xl":`1rem`,full:`9999px`}},typography:{fontFamily:`Three stacks: sans (system-ui), serif (Georgia), mono (ui-monospace). Override individual stack values.`,fontSize:`Scale: xs (0.75rem), sm (0.875rem), base (1rem), lg (1.125rem), xl (1.25rem), 2xl (1.5rem), 3xl (1.875rem), 4xl (2.25rem).`,fontWeight:`normal (400), medium (500), semibold (600), bold (700).`,lineHeight:`tight (1.25), normal (1.5), relaxed (1.625).`},shadows:`Scale: none, sm, md, lg, xl, 2xl. Values are CSS box-shadow strings.`,borders:`Scale: none, sm (1px solid), md (2px solid), lg (4px solid).`,spacing:`Scale: 0 (0px), 1 (0.25rem), 2 (0.5rem), 3 (0.75rem), 4 (1rem), 5 (1.25rem), 6 (1.5rem), 8 (2rem), 10 (2.5rem), 12 (3rem), 16-64.`},semantic:{description:`Design intent tokens. Auto-derived from palette by default. Override to redirect token resolution. Values are token reference strings like "palette.colors.primary.500".`,colors:{primary:`palette.colors.primary.500: Primary brand color.`,secondary:`palette.colors.gray.500: Secondary color.`,accent:`palette.colors.primary.600: Accent/interactive color.`,surface:`palette.colors.gray.50: Panel/card backgrounds.`,background:`palette.colors.gray.50: Page background.`,container:`palette.colors.gray.100: Container backgrounds.`,text:`palette.colors.gray.900: Primary text.`,textMuted:`palette.colors.gray.500: Muted/secondary text.`,textInverse:`palette.colors.gray.50: Text on dark backgrounds.`,border:`palette.colors.gray.200: Default border color.`,divider:`palette.colors.gray.200: Divider lines.`,interactive:{default:`palette.colors.primary.500`,hover:`palette.colors.primary.600`,focus:`palette.colors.primary.700`,active:`palette.colors.primary.800`,disabled:`palette.colors.gray.300`},feedback:{success:`palette.colors.success.500`,warning:`palette.colors.warning.500`,error:`palette.colors.error.500`,info:`palette.colors.primary.500`}},spacing:`xs (0.25rem), sm (0.5rem), md (1rem), lg (1.5rem), xl (2rem), 2xl (2.5rem).`,typography:`fontFamily, fontSize, fontWeight, lineHeight: reference palette typography tokens.`},components:{description:`UI element tokens. Rarely needed for basic theming. Override for fine-grained control. All values are token references or raw CSS strings.`,button:{description:`Variants primary, secondary, ghost; button.stop.background/foreground styles streaming stop while composer.send styles idle send.`,properties:`background, foreground, borderRadius, padding.`},input:{description:`Message input field.`,properties:`background, placeholder, borderRadius, padding, focus.border, focus.ring.`},launcher:{description:`Floating launcher button.`,properties:`size (60px), iconSize (28px), iconStrokeWidth (2, unitless glyph stroke weight; applies to registry-icon launchers, inert for emoji and image icons), borderRadius, shadow.`},panel:{description:`Chat panel container.`,properties:`width, maxWidth (440px), height (600px), maxHeight, borderRadius, shadow, inset (16px, gap around a detached panel), canvasBackground (transparent, fills the region behind a detached panel in docked and inline embed modes; a no-op in sidebar mode, where the gap stays click-through and the host page shows through like floating). inset and canvasBackground apply only when launcher.detachedPanel is true or artifacts.layout.paneAppearance is "detached".`},header:{description:`Chat panel header. background and foreground are the pair that colors the band: set those two and the rest of the header text follows.`,properties:`close and clear each expose independent size, iconSize, iconStrokeWidth, background, foreground, borderColor, borderWidth, borderRadius, padding; they fall through to shared header controls, leaving Messages and trailing actions untouched. background, foreground (anchors the header text; the title takes it directly, the subtitle and action icons take color-mix(in srgb, foreground 72%, background), and the border takes color-mix(in srgb, foreground 14%, background)), border, borderRadius, padding, iconBackground, iconForeground (the avatar tile, which keeps its own defaults and never derives), actionIconForeground, controlSize (32px, the box of every header icon button), controlIconSize (16px, the glyph inside it), controlStrokeWidth (1.5, unitless glyph stroke weight; sparse-viewBox glyphs such as the close X scale it by 0.7), shadow, borderBottom, minHeight (height floor for the header strip), title and subtitle (each fontFamily, fontSize, fontWeight, lineHeight, letterSpacing, color). Derivation only fills keys the theme leaves unset, so any explicit border, titleForeground, subtitleForeground, actionIconForeground, title.color, or subtitle.color wins. With no foreground either, each key falls back as before: the primary color for the title, the muted text color for the subtitle and action icons, the divider color for the border.`,legacy:`titleForeground and subtitleForeground are legacy aliases of header.title.color and header.subtitle.color. Both still work; the title/subtitle color wins when both are set, and either alias still outranks the foreground derivation.`},history:{description:`Messages (conversation history) chrome and motion. railHeader styles the rail sidebar top strip, which runs beside the widget header in rail presentation; overlay styles the floating rail a collapsed overlay rail opens on hover; motion times the surface entering and leaving.`,properties:`railHeader.background (defaults to the rail surface), railHeader.border (full border-bottom shorthand, default 0), railHeader.minHeight (defaults to components.header.minHeight, then 56px). Pin railHeader.minHeight and header.minHeight to the same value so both top strips read as one band. railHeader.title takes TextStyleTokens for the strip view title ("Messages"): color (defaults to the text color; the sidebar identity reads at full strength), fontFamily, fontSize (14px), fontWeight (600), lineHeight, letterSpacing. listHeading takes the same TextStyleTokens for the rail-only "Conversations" heading over the list block (14px/600 in the text color); groupHeading styles the muted sub-headers, both the date groups ("Today", "Yesterday") and rail nav section titles (rail 13px/500, muted text color). Every key of all three is pinned in the widget CSS, so host-page h2/h3 rules cannot restyle them. overlay.margin (8px, the gap from the trigger, the docked edge and the bottom), overlay.borderRadius (16px), overlay.shadow (0 12px 40px rgba(0, 0, 0, 0.25)), overlay.background (defaults to the rail surface). The floating rail keeps features.history.rail width and side, which are config, not tokens. motion.enterDurationMs (180) and motion.exitDurationMs (160) are bare millisecond numbers, 0 disables that leg; motion.enterEasing (cubic-bezier(0, 0, 0.2, 1)) and motion.exitEasing (cubic-bezier(0.4, 0, 1, 1)) take any CSS easing. Only the body animates, and prefers-reduced-motion always wins.`},tooltip:{description:`The portaled tooltip on icon controls, plus the muted shortcut hint chip after its label.`,properties:`background (#111827), foreground (#ffffff), hintForeground (rgba(255, 255, 255, 0.55)), borderRadius (palette.radius.sm), fontSize (12px), padding (6px 12px), shadow, maxWidth (min(320px, calc(100vw - 16px))), arrow (boolean, default true; false drops the caret). Unset keys keep the built-in dark look.`},message:{description:`Chat message bubbles.`,user:`background, text, borderRadius, shadow.`,assistant:`background, text, borderRadius, border (optional), shadow (optional).`},markdown:{description:`Markdown rendering in messages and artifact pane.`,properties:`inlineCode (background, foreground), link.foreground, prose.fontFamily, heading.h1/h2 (fontSize, fontWeight), codeBlock (background, borderColor, textColor, borderRadius: follows palette.radius.md), table (headerBackground, borderColor), hr.color, blockquote (borderColor, background, textColor).`},introCard:{description:`Welcome surface above the message list. Flat by default (transparent, no shadow).`,properties:`background, borderRadius, padding, shadow, border (full CSS shorthand, default none), title and subtitle (each fontFamily, fontSize, fontWeight, lineHeight, letterSpacing, color).`},suggestion:{description:`Starter prompt and follow-up suggestion chrome. Three variants: chip, card, list.`,properties:`background, foreground, border, borderRadius, padding, fontWeight, shadow, gap (icon to copy inside one item), itemGap (space between items, default 8px), minHeight, fontSize, lineHeight, iconSize, hoverBackground, hoverForeground, hoverBorder, pressedBackground, focusRing, disabledOpacity.`},voice:`control (size, iconSize, iconStrokeWidth, background, foreground, borderColor, borderWidth, borderRadius, padding) styles the idle mic independently. Legacy voiceRecognition.iconSize sets both box and glyph: migrate to both control.size and control.iconSize. recording (indicator, background, border), processing (icon, background, optional border), speaking (icon, optional background/border). Previously unused recording.border, processing.icon/background and speaking.icon only activate on explicit host theme input; materialized defaults do not recolor the mic.`,approval:`requested (background, border, text, shadow, titleColor, descriptionColor, reasonColor, parameters.background/foreground), approve (background, foreground), deny (background, foreground). Previously unused requested.text and approve/deny foreground only activate on explicit host input. Specific requested text colors fall through explicit requested.text to the renderer fallback. Built-in plugin and exported createApprovalBubble share these tokens, retaining their original absent-value deny colors.`,askUserQuestion:`sheet (background, border, shadow), pill (background, foreground, borderRadius, selectedBackground, selectedForeground), customInput.background. Local features.askUserQuestion.styles still wins; navigation, labels and slide timing remain feature config.`,attachment:`image (background, border).`,scrollToBottom:`Floating scroll-to-bottom affordance shared by transcript and event stream: background, foreground, border, size, borderRadius, shadow, padding, gap, fontSize, iconSize.`,toolBubble:`shadow, background, borderColor, borderWidth, borderRadius; header (background, foreground, padding), content (background, foreground, padding), codeBlock (background, foreground, borderColor), toggleForeground, labelForeground, loading (primary, secondary, duration). Applies to card and activity-row variants without changing their distinct defaults. CSS duration uses ms/s; legacy numeric milliseconds must convert explicitly. Theme content.padding precedes activity.bodyPadding/toolBubble.bodyPadding fallbacks; explicit legacy axes override only their axis.`,scrollbar:`Shared scrollbar appearance for every scroller: thumb (default semantic.colors.border), track (default transparent).`,turnActivity:`dividerColor (theme primary at 8% opacity by default) and dividerWidth (1px by default; 0px hides it) style only the divider beneath the Worked turn header.`,reasoningBubble:`shadow: reasoning/thinking row box-shadow.`,composer:`Independent send (size, iconSize, iconStrokeWidth, background, foreground, borderColor, borderWidth, borderRadius, padding) styles submit only; shared sendIconSize and sendButtonRadius are older fallbacks. Legacy icon-mode padding and text-mode background remain ignored; new theme padding/background can opt into either mode. button.stop colors still apply while stopped unless explicit legacy send colors win. Explicit legacy send colors retain the idle mic fallback; a parity migration sets matching voice.control colors too. Message input form: sendIconSize (send/stop glyph; explicit sendButton.iconSize wins), sendButtonRadius (icon-mode submit radius), footerBorder (footer top border shorthand; none hides it), shadow (box-shadow), borderColor, focusBorderColor (focused form border; V4 keeps the resting border, V5 uses a stronger neutral mix), focusRing (CSS outline shorthand, 1px offset; V4 none, V5 a thin neutral ring; preserves shadow and causes no layout shift), padding (form inset), expandedPadding and expandedBorderRadius (expanded card geometry; V5 12px 16px and 24px; explicit padding/input.borderRadius also override these), gap (textarea row to actions row; compact single-row spacing fallback), controlGap (horizontal action rail spacing, default 8px), editorMinHeight (minimum textarea height, default 24px), editorPadding (textarea inset, default 2px), suggestionsGap (space above below-composer starters), mode (independent mode-button fontSize, fontWeight, height, paddingInline, gap, borderRadius, borderColor, activeBorderColor, activeBackground), fontSize and lineHeight (textarea type), controlSize (edge of every icon control in the action row: attachment, mention, mic, action buttons, overflow trigger, icon-mode send; default 40px) and controlIconSize (glyph inside them, default 24px). Per-control config keys (sendButton.size, voiceRecognition.iconSize) override controlSize; coarse-pointer devices floor the hit area at 40px. overlayBand paints the band behind an overlaid footer (composer.placement: "overlay"). segmented styles a segmented mode-group track (trackBackground, trackBorderRadius, padding, activeBackground, activeForeground, activeShadow, inactiveForeground, itemPadding, gap, fontSize, lineHeight, fontWeight, minHeight); every key is optional and the stylesheet owns the defaults. modelPicker styles the model picker (background, hoverBackground, borderColor, borderRadius, labelColor, fontSize, fontWeight, height, minWidth and paddingInline on the closed control, which the native select and the popover trigger share; menuBackground, menuBorderRadius, rowHoverBackground, descriptionColor and suffixColor on the popover only), also all optional. overflowMenu styles the composer overflow "+" menu panel (background, borderColor, borderRadius, foreground, shadow), also all optional.`,artifact:`pane (background, toolbarBackground, padding, borderRadius, shadow, border, borderLeft), chat.shadow, split.outerRadius, toolbar (iconColor, toggleActiveBackground, toggleActiveBorderColor, toggleActiveColor, existing icon/copy chrome), tab (fadeSize, existing backgrounds/active states). border and borderLeft are full CSS shorthands; full border wins over left border. Geometry, resizing, appearance, chatSurface, presets and fade enablement remain layout config.`}},styleMigration:{precedence:`For supported style aliases: explicit legacy property > explicit component theme (active dark override) > existing shared/semantic/V4/V5 fallback. Materialized legacy defaults no longer defeat component styling. Behavior, hooks, custom icons, labels and presets remain config capabilities.`,updates:`Omitted patch keys retain value/origin. Own undefined clears a style override; clearing a parent clears its tracked descendants. Theme/scheme/default-version changes do not resurrect cleared inline styles. Persona merge helpers and supported copies retain origin; JSON-round-tripped/manual default-filled inputs have unknown origin and conservatively treat present values as explicit. Remove/reset legacy fields to expose theme styling.`,diagnostics:`Debug-only, once per widget/path; deferred installs diagnose when the full runtime opens, not from the tiny launcher. Warnings cover verified aliases only and do not imply runtime removal. No removal is scheduled in 4.x.`,retained:`Callbacks/renderers, custom icons, labels, accessibility, behavior, provider setup and layout geometry stay supported. suggestionChipsConfig.fontFamily is an accepted no-op, as are unifiedSplitChrome and unsupported messages/composer layout slots; no parity token is claimed. The three --cw-container/--cw-surface/--cw-border compatibility aliases remain; Markdown uses --persona-md-*.`},colorScheme:`"dark" merges darkTheme overrides on top of theme. "auto" detects system preference or <html class="dark">. "light" is default. colorScheme does NOT auto-invert colors: provide dark palette and semantic overrides yourself.`,plugins:{description:`Plugins transform theme tokens before resolution. Use with createTheme().`,available:{brandPlugin:`Auto-generates full color scales from a single brand hex: brandPlugin({ colors: { primary: "#7c3aed" } }).`,accessibilityPlugin:`Enhanced focus indicators and disabled states.`,highContrastPlugin:`Increased contrast for visual accessibility.`,reducedMotionPlugin:`Disables all animations (sets transitions to 0ms).`,animationsPlugin:`Adds transition and easing tokens.`},usage:`createTheme(themeOverrides, { plugins: [brandPlugin({ colors: { primary: "#7c3aed" } })] })`},widgetConfig:{description:`Non-theme config options on the widget config object that affect appearance. These are siblings of "theme" in the config, not nested inside it.`,launcher:{description:`Floating launcher button and panel positioning.`,properties:{enabled:`Show/hide the launcher button.`,title:`Header title text.`,subtitle:`Header subtitle text.`,position:`"bottom-right" | "bottom-left" | "top-right" | "top-left".`,width:`Chat panel width (CSS value).`,fullHeight:`Fill full height of container.`,mountMode:`"floating" | "docked".`,agentIconText:`Emoji/text for agent icon.`,border:`Border style for launcher button.`,shadow:`Box shadow for launcher button.`,collapsedMaxWidth:`Max-width for launcher pill when panel closed.`}},sendButton:{description:`Send button appearance.`,properties:`backgroundColor, textColor, borderWidth, borderColor, paddingX, paddingY, iconText, iconName, size.`},closeButton:{description:`Close button (on launcher config). Unset closeButtonSize means theme.components.header.controlSize owns the box.`,properties:`closeButtonSize, closeButtonColor, closeButtonBackgroundColor, closeButtonBorderWidth, closeButtonBorderColor, closeButtonBorderRadius.`},clearChat:{description:`Clear chat button (on launcher.clearChat config). Unset size means theme.components.header.controlSize owns the box.`,properties:`enabled, iconColor, backgroundColor, borderWidth, borderColor, borderRadius, size.`},scrollToBottom:{description:`Shared transcript + event-stream jump-to-latest affordance.`,properties:`features.scrollToBottom.enabled, features.scrollToBottom.iconName, features.scrollToBottom.label (empty string renders icon-only). Defaults: enabled=true, iconName="arrow-down", label="".`},toolCall:{description:`Tool call display styling, text templates, loading animations, and rendering hooks. Text templates support placeholders ({toolName}, {duration}) and inline formatting (~dim~, *italic*, **bold**). renderCollapsedSummary receives elapsed (static string) and createElapsedElement() (live-updating span) in its context.`,properties:`shadow, backgroundColor, borderColor, borderWidth, borderRadius, headerBackgroundColor, headerTextColor, headerPaddingX, headerPaddingY, contentBackgroundColor, contentTextColor, contentPaddingX, contentPaddingY, codeBlockBackgroundColor, codeBlockBorderColor, codeBlockTextColor, toggleTextColor, labelTextColor, activeTextTemplate, completeTextTemplate, loadingAnimationColor, loadingAnimationSecondaryColor, loadingAnimationDuration, renderCollapsedSummary, renderCollapsedPreview, renderGroupedSummary.`},reasoning:{description:`Reasoning/thinking row rendering hooks, text templates, and loading animations. Text templates support {duration} placeholder and inline formatting (~dim~, *italic*, **bold**). renderCollapsedSummary receives elapsed (static string) and createElapsedElement() (live-updating span) in its context.`,properties:`renderCollapsedSummary, renderCollapsedPreview, activeTextTemplate, completeTextTemplate, loadingAnimationColor, loadingAnimationSecondaryColor, loadingAnimationDuration.`},approval:{description:`Tool approval card styling and behavior. Neutral surface card; the primary action anchors to the brand --persona-primary token. Set to false to disable. Set enableAlwaysAllow: true to add the split "Always allow / Allow once" control (needs a backend to persist the policy via onDecision's remember).`,properties:`enableAlwaysAllow, detailsDisplay ("collapsed" | "expanded" | "hidden"), showDetailsLabel, hideDetailsLabel, backgroundColor, borderColor, titleColor, descriptionColor, reasonColor, reasonLabel, approveButtonColor, approveButtonTextColor, denyButtonColor, denyButtonTextColor, parameterBackgroundColor, parameterTextColor, approveLabel, denyLabel, formatDescription. (title no longer renders in the default card; use formatDescription to customize the summary.)`},copy:{description:`Widget text content.`,properties:`inputPlaceholder, sendButtonLabel, stopButtonLabel. (showWelcomeCard, welcomeTitle, welcomeSubtitle are deprecated aliases of the welcome namespace.)`},voiceRecognition:{description:`Voice input configuration.`,properties:`enabled, pauseDuration, iconColor, backgroundColor.`},textToSpeech:{description:`Text-to-speech for assistant messages.`,properties:`enabled, provider ("browser" | "runtype"), browserFallback, voice, rate, pitch.`},suggestions:{description:`Rich starter and follow-up suggestion surfaces. Strings remain valid item shorthand.`,properties:`starters.items, starters.variant ("card" | "chip" | "list"), starters.placement ("auto" | "welcome" | "composer" | "below-composer"), starters.behavior ("send" | "fill"), starters.overflow ("scroll" | "wrap"), starters.maxItems, followUps.enabled, followUps.expose, followUps.variant, followUps.placement ("auto" | "after-message" | "composer"), followUps.behavior, followUps.overflow ("scroll" | "wrap"), followUps.maxItems.`},welcome:{description:`First-open welcome surface. Supersedes copy.welcomeTitle / welcomeSubtitle / showWelcomeCard.`,properties:`title, subtitle, icon ({ type: "lucide", name } | { type: "image", url, alt } | { type: "text", text } | function), variant ("card" | "hero" | "none"), dismiss ("never" | "on-first-message"), message (display-only greeting bubble, ignored under "hero").`},suggestionChips:`Deprecated string[] shorthand for starter prompts. Prefer suggestions.starters.items.`,messageActions:{description:`Message action buttons (copy, upvote, downvote, read aloud, regenerate, edit, quote).`,properties:`enabled, showCopy, showUpvote, showDownvote, showReadAloud, showRegenerate (final retryable assistant turn only), showEdit (text-only user messages only), showQuote, visibility ("hover" | "always"), align ("left" | "center" | "right"), layout ("pill-inside" | "row-inside").`},attachments:{description:`File attachment configuration.`,properties:`enabled, allowedTypes (string[]), maxFileSize (bytes), maxFiles, buttonIconName, buttonTooltipText.`},markdown:{description:`Markdown rendering configuration.`,properties:`options (gfm, breaks, headerIds, headerPrefix, pedantic, mangle, silent), disableDefaultStyles.`},layout:{description:`Layout configuration.`,showHeader:`boolean: show/hide the header section entirely.`,showFooter:`boolean: show/hide the footer/composer section entirely.`,contentMaxWidth:`CSS width value for centering content (e.g. "720px", "90ch").`,header:`"default" | "minimal". Options: showIcon, showTitle, showSubtitle, showCloseButton, showClearChat.`,messages:`"bubble" | "flat" | "minimal". Options: groupConsecutive, avatar (show, position, userAvatar, assistantAvatar), timestamp (show, position).`},statusIndicator:{description:`Status text shown below the composer.`,properties:{visible:`Show/hide the status indicator.`,align:`"left" | "center" | "right": text alignment (default: "right").`,idleText:`Text shown when idle (default: "Online").`,idleLink:`URL to open when idle text is clicked (wraps text in a link).`,connectingText:`Text shown while connecting (default: "Connecting…").`,connectedText:`Text shown while streaming (default: "Streaming…").`,errorText:`Text shown on error (default: "Offline").`}},features:{description:`Feature flags.`,properties:`showReasoning, showToolCalls, toolCallDisplay (collapsedMode, activePreview, activeMinHeight, previewMaxLines, grouped, groupedMode, groupAppearance, groupSummary, groupSummaryMaxItems, groupBoundary, groupIconVisibility, expandable, loadingAnimation), reasoningDisplay (activePreview, activeMinHeight, previewMaxLines, expandable, loadingAnimation), artifacts (sidebar config).`}}},O={independentControls:{description:`Separate close, clear, submit and mic chrome; remove legacy style overrides first. Mic box and glyph sizes are intentionally independent.`,theme:{components:{header:{close:{size:`32px`,foreground:`#b91c1c`},clear:{size:`36px`,foreground:`#1d4ed8`}},composer:{send:{size:`44px`,iconSize:`20px`,background:`#111827`,foreground:`#ffffff`}},voice:{control:{size:`44px`,iconSize:`22px`,foreground:`#111827`,background:`transparent`},recording:{indicator:`#ffffff`,background:`#dc2626`,border:`#dc2626`},processing:{icon:`#1d4ed8`,background:`#eff6ff`},speaking:{icon:`#15803d`,background:`#f0fdf4`}}}}},scopedSurfaces:{description:`Tool, approval/question, and artifact styles stay inside their component boundaries. CSS timing/shorthand values preserve their units.`,theme:{components:{toolBubble:{background:`#f8fafc`,borderColor:`#cbd5e1`,borderWidth:`1px`,header:{foreground:`#0f172a`,padding:`6px 12px`},content:{padding:`12px`},loading:{duration:`1600ms`}},approval:{requested:{descriptionColor:`#0f172a`,parameters:{background:`#f1f5f9`,foreground:`#334155`}},approve:{foreground:`#ffffff`}},askUserQuestion:{sheet:{background:`#ffffff`,shadow:`none`},pill:{selectedBackground:`#111827`,selectedForeground:`#ffffff`}},artifact:{pane:{padding:`16px`,borderRadius:`12px`,border:`1px solid #cbd5e1`},chat:{shadow:`none`},split:{outerRadius:`12px`},toolbar:{iconColor:`#334155`,toggleActiveColor:`#0f172a`},tab:{fadeSize:`24px`}}}}},darkIndigo:{description:`Dark mode with indigo accent: override grays for dark backgrounds and semantic tokens for inverted text/surface`,theme:{palette:{colors:{primary:{500:`#6366f1`,600:`#4f46e5`},gray:{50:`#f1f5f9`,100:`#1e293b`,200:`#334155`,500:`#94a3b8`,900:`#0f172a`,950:`#020617`}}},semantic:{colors:{surface:`palette.colors.gray.900`,background:`palette.colors.gray.900`,container:`palette.colors.gray.100`,text:`palette.colors.gray.50`,textMuted:`palette.colors.gray.500`,textInverse:`palette.colors.gray.900`,border:`palette.colors.gray.200`}}}},warmVintage:{description:`Warm sepia tones with serif font and subtle radius`,theme:{palette:{colors:{primary:{500:`#b45309`,600:`#92400e`},gray:{50:`#fef3c7`,100:`#fef9c3`,200:`#d6d3d1`,500:`#78716c`,900:`#44403c`}},radius:{sm:`0.125rem`,md:`0.25rem`,lg:`0.375rem`},typography:{fontFamily:{sans:`Georgia, Cambria, "Times New Roman", Times, serif`}}}}},neonCyberpunk:{description:`Neon on dark with monospace font: full semantic override for dark background`,theme:{palette:{colors:{primary:{500:`#f0abfc`,600:`#e879f9`},accent:{500:`#22d3ee`,600:`#06b6d4`},gray:{50:`#f0abfc`,100:`#1e0a3c`,200:`#3b0764`,500:`#c084fc`,900:`#0c0a1a`,950:`#050412`}},radius:{sm:`0`,md:`0.25rem`,lg:`0.375rem`},typography:{fontFamily:{sans:`ui-monospace, SFMono-Regular, Menlo, monospace`}}},semantic:{colors:{surface:`palette.colors.gray.900`,background:`palette.colors.gray.950`,container:`palette.colors.gray.100`,text:`palette.colors.gray.50`,textMuted:`palette.colors.gray.500`,border:`palette.colors.gray.200`}}}},cleanRounded:{description:`Clean light theme with large radius and panel styling`,theme:{palette:{radius:{sm:`6px`,md:`8px`,lg:`12px`,launcher:`50px`,button:`8px`}},components:{panel:{borderRadius:`16px`,shadow:`palette.shadows.2xl`}}}}};function k(e){let t=E(e),n=p({future:e});return{tokenDocs:D,defaultsVersion:f({future:e}),themeDefaultsVersion:T(e),defaultColorPalette:t.palette.colors,defaultRadius:t.palette.radius,defaultLauncher:n.launcher,examples:O,sdkPresets:[`shop`,`minimal`,`fullscreen`]}}exports.THEME_EXAMPLES=O,exports.THEME_TOKEN_DOCS=D,exports.getThemeReference=k;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e={background:`semantic.colors.primary`,foreground:`semantic.colors.textInverse`,border:`transparent`,size:`48px`,iconSize:`24px`,borderRadius:`palette.radius.full`,shadow:`0 8px 24px rgba(0,0,0,.16)`,offset:`20px`},t={collapsedMode:`tool-call`,activePreview:!1,grouped:!1,groupedMode:`stack`,groupBoundary:`adjacent`,previewMaxLines:3,expandable:!0,loadingAnimation:`none`},n={activePreview:!1,previewMaxLines:3,expandable:!0,loadingAnimation:`none`},r={layout:`row`,variant:`row`,iconVisibility:`active`,autoExpand:!1,grouped:!0,groupedMode:`collapsible`,groupAppearance:`inset`,loadingAnimation:`shimmer`},i={appearance:`inset`,layout:`row`,variant:`row`,iconVisibility:`active`,autoExpand:!1,loadingAnimation:`shimmer`},a=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function o(e,t){if(!e)return t;if(!t)return e;let n={...e};for(let[e,r]of Object.entries(t)){let t=n[e];n[e]=a(t)&&a(r)?o(t,r):r}return n}const s={resolvedDisplay:`row`,primaryAction:`allow-once`,keyboardShortcuts:`focused`},c=`min(440px, calc(100vw - 24px))`,l={apiUrl:`https://api.runtype.com/api/chat/dispatch`,clientToken:void 0,agentId:void 0,target:void 0,theme:void 0,darkTheme:void 0,colorScheme:`light`,tooltip:{delayMs:400,skipDelayMs:300},launcher:{enabled:!0,mountMode:`floating`,dock:{side:`right`,width:`420px`},title:`Chat Assistant`,subtitle:`Here to help you get answers fast`,agentIconText:`💬`,agentIconName:`bot`,headerIconName:`bot`,position:`bottom-right`,width:c,heightOffset:0,autoExpand:!1,callToActionIconHidden:!1,agentIconSize:`40px`,headerIconSize:`40px`,closeButtonPaddingX:`0px`,closeButtonPaddingY:`0px`,callToActionIconName:`arrow-up-right`,callToActionIconText:``,callToActionIconSize:`32px`,callToActionIconPadding:`5px`,callToActionIconColor:void 0,callToActionIconBackgroundColor:void 0,closeButtonBackgroundColor:`transparent`,clearChat:{backgroundColor:`transparent`,borderColor:`transparent`,enabled:!0,placement:`inline`,iconName:`refresh-cw`,showTooltip:!0,tooltipText:`Clear chat`,paddingX:`0px`,paddingY:`0px`},headerIconHidden:!1,border:void 0,shadow:`0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)`},copy:{inputPlaceholder:`How can I help...`,sendButtonLabel:`Send`},sendButton:{borderWidth:`0px`,paddingX:`12px`,paddingY:`10px`,borderColor:void 0,useIcon:!0,iconText:`↑`,showTooltip:!0,tooltipText:`Send message`,iconName:`send`},statusIndicator:{visible:!0,idleText:`Online`,connectingText:`Connecting…`,connectedText:`Streaming…`,errorText:`Offline`},voiceRecognition:{enabled:!0,pauseDuration:2e3,iconName:`mic`,borderWidth:`0px`,iconColor:void 0,backgroundColor:`transparent`,borderColor:`transparent`,recordingIconColor:void 0,recordingBackgroundColor:void 0,recordingBorderColor:`transparent`,showTooltip:!0,tooltipText:`Start voice recognition`},features:{showReasoning:!0,showToolCalls:!0,scrollToBottom:{enabled:!0,iconName:`arrow-down`,label:``,streamingIndicator:`arrow`,scrollBehavior:`instant`,scrollDurationMs:220,transition:`none`},scrollBehavior:{mode:`anchor-top`,anchorTopOffset:16,showActivityWhilePinned:!0},toolCallDisplay:t,reasoningDisplay:n,streamAnimation:{type:`none`,placeholder:`none`,speed:120,duration:1800},askUserQuestion:{enabled:!0,slideInMs:180,freeTextLabel:`Other…`,freeTextPlaceholder:`Type your answer…`,submitLabel:`Send`},history:{enabled:!1,presentation:`panel`,showScopeStatus:!0,showDelete:!0,showDeleteAll:!0}},suggestionChips:[`Show me what you can help with`,`Walk me through getting started`,`Answer a question about this page`],suggestionChipsConfig:{fontFamily:`sans-serif`,fontWeight:`500`,paddingX:`12px`,paddingY:`6px`},layout:{header:{layout:`default`,showIcon:!0,showTitle:!0,showSubtitle:!0,showCloseButton:!0,showClearChat:!0},messages:{layout:`bubble`,avatar:{show:!1,position:`left`},timestamp:{show:!1,position:`below`},groupConsecutive:!1},slots:{}},markdown:{options:{gfm:!0,breaks:!0},disableDefaultStyles:!1},messageActions:{enabled:!0,showCopy:!0,showUpvote:!1,showDownvote:!1,visibility:`hover`,align:`right`,layout:`pill-inside`},debug:!1},u={},d={colorScheme:`light`,errorDisplay:`block`,messageActions:{visibility:void 0},suggestionChipsConfig:{fontWeight:void 0},approval:s,loadingIndicator:{variant:`label`},launcher:{variant:`circle`,width:`min(400px, calc(100vw - 24px))`,headerIconSize:`20px`},features:{artifacts:{enabled:!0},scrollToBottom:{streamingIndicator:`dots`,transition:`fade`,scrollBehavior:`smooth`},userMessageCollapse:{enabled:!0},toolCallDisplay:r,reasoningDisplay:i},composer:{layout:`single-row`,placement:`overlay`},sendButton:{iconName:`arrow-up`},statusIndicator:{mode:`transient`},layout:{contentMaxWidth:`768px`,topFade:!0,header:{showSubtitle:!1},messages:{assistant:{width:`full`}}}};function f(e){return e?.future?.v5Defaults===!0?`v5`:`v4`}function p(e){let t=f(e)===`v5`?d:u;return o(l,t)}p();const m={colors:{primary:{50:`#ffffff`,100:`#f5f5f5`,200:`#d4d4d4`,300:`#a3a3a3`,400:`#737373`,500:`#171717`,600:`#0f0f0f`,700:`#0a0a0a`,800:`#050505`,900:`#030303`,950:`#000000`},secondary:{50:`#f5f3ff`,100:`#ede9fe`,200:`#ddd6fe`,300:`#c4b5fd`,400:`#a78bfa`,500:`#8b5cf6`,600:`#7c3aed`,700:`#6d28d9`,800:`#5b21b6`,900:`#4c1d95`,950:`#2e1065`},accent:{50:`#ecfeff`,100:`#cffafe`,200:`#a5f3fc`,300:`#67e8f9`,400:`#22d3ee`,500:`#06b6d4`,600:`#0891b2`,700:`#0e7490`,800:`#155e75`,900:`#164e63`,950:`#083344`},gray:{50:`#f9fafb`,100:`#f3f4f6`,200:`#e5e7eb`,300:`#d1d5db`,400:`#9ca3af`,500:`#6b7280`,600:`#4b5563`,700:`#374151`,800:`#1f2937`,900:`#111827`,950:`#030712`},success:{50:`#f0fdf4`,100:`#dcfce7`,200:`#bbf7d0`,300:`#86efac`,400:`#4ade80`,500:`#22c55e`,600:`#16a34a`,700:`#15803d`,800:`#166534`,900:`#14532d`},warning:{50:`#fefce8`,100:`#fef9c3`,200:`#fef08a`,300:`#fde047`,400:`#facc15`,500:`#eab308`,600:`#ca8a04`,700:`#a16207`,800:`#854d0e`,900:`#713f12`},error:{50:`#fef2f2`,100:`#fee2e2`,200:`#fecaca`,300:`#fca5a5`,400:`#f87171`,500:`#ef4444`,600:`#dc2626`,700:`#b91c1c`,800:`#991b1b`,900:`#7f1d1d`},info:{50:`#eff6ff`,100:`#dbeafe`,200:`#bfdbfe`,300:`#93c5fd`,400:`#60a5fa`,500:`#3b82f6`,600:`#2563eb`,700:`#1d4ed8`,800:`#1e40af`,900:`#1e3a8a`,950:`#172554`},purple:{50:`#faf5ff`,100:`#f3e8ff`,200:`#e9d5ff`,300:`#d8b4fe`,400:`#c084fc`,500:`#a855f7`,600:`#9333ea`,700:`#7e22ce`,800:`#6b21a8`,900:`#581c87`,950:`#3b0764`},teal:{50:`#f0fdfa`,100:`#ccfbf1`,200:`#99f6e4`,300:`#5eead4`,400:`#2dd4bf`,500:`#14b8a6`,600:`#0d9488`,700:`#0f766e`,800:`#115e59`,900:`#134e4a`,950:`#042f2e`}},spacing:(()=>{let e={};for(let t of[0,1,2,3,4,5,6,8,10,12,16,20,24,32,40,48,56,64])e[t]=t===0?`0px`:`${t/4}rem`;return e})(),typography:{fontFamily:{sans:`system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`,serif:`Georgia, Cambria, "Times New Roman", Times, serif`,mono:`ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace`},fontSize:{xs:`0.75rem`,sm:`0.875rem`,base:`1rem`,lg:`1.125rem`,xl:`1.25rem`,"2xl":`1.5rem`,"3xl":`1.875rem`,"4xl":`2.25rem`},fontWeight:{normal:`400`,medium:`500`,semibold:`600`,bold:`700`},lineHeight:{tight:`1.25`,normal:`1.5`,relaxed:`1.625`}},shadows:{none:`none`,sm:`0 1px 2px 0 rgb(0 0 0 / 0.05)`,md:`0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)`,lg:`0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)`,xl:`0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)`,"2xl":`0 25px 50px -12px rgb(0 0 0 / 0.25)`},borders:{none:`none`,sm:`1px solid`,md:`2px solid`,lg:`4px solid`},radius:{none:`0px`,sm:`0.125rem`,md:`0.375rem`,lg:`0.5rem`,xl:`0.75rem`,"2xl":`1rem`,full:`9999px`}},h={colors:{primary:`palette.colors.primary.500`,secondary:`palette.colors.secondary.500`,accent:`palette.colors.primary.600`,surface:`palette.colors.gray.50`,background:`palette.colors.gray.50`,container:`palette.colors.gray.50`,text:`palette.colors.gray.900`,textMuted:`palette.colors.gray.500`,textInverse:`palette.colors.gray.50`,border:`palette.colors.gray.200`,divider:`palette.colors.gray.200`,interactive:{default:`palette.colors.primary.600`,hover:`palette.colors.primary.700`,focus:`palette.colors.primary.600`,active:`palette.colors.primary.600`,disabled:`palette.colors.gray.300`},feedback:{success:`palette.colors.success.500`,warning:`palette.colors.warning.500`,error:`palette.colors.error.500`,info:`palette.colors.info.500`}},spacing:{xs:`palette.spacing.1`,sm:`palette.spacing.2`,md:`palette.spacing.4`,lg:`palette.spacing.6`,xl:`palette.spacing.8`,"2xl":`palette.spacing.10`},typography:{fontFamily:`palette.typography.fontFamily.sans`,fontSize:`palette.typography.fontSize.base`,fontWeight:`palette.typography.fontWeight.normal`,lineHeight:`palette.typography.lineHeight.normal`}},g={button:{primary:{background:`palette.colors.primary.500`,foreground:`palette.colors.primary.50`,borderRadius:`palette.radius.lg`,padding:`semantic.spacing.md`},secondary:{background:`semantic.colors.surface`,foreground:`semantic.colors.secondary`,borderRadius:`palette.radius.lg`,padding:`semantic.spacing.md`},ghost:{background:`transparent`,foreground:`semantic.colors.text`,borderRadius:`palette.radius.md`,padding:`semantic.spacing.sm`,hoverBackground:`rgba(0, 0, 0, 0.05)`}},input:{background:`semantic.colors.surface`,placeholder:`semantic.colors.textMuted`,borderRadius:`palette.radius.lg`,padding:`semantic.spacing.md`,focus:{border:`palette.colors.gray.400`,ring:`palette.colors.gray.400`}},launcher:{background:`semantic.colors.surface`,foreground:`semantic.colors.primary`,border:`semantic.colors.border`,size:`60px`,iconSize:`28px`,borderRadius:`palette.radius.full`,shadow:`palette.shadows.lg`},panel:{width:c,maxWidth:`none`,height:`min(640px, max(200px, calc(100vh - 64px)))`,maxHeight:`none`,borderRadius:`palette.radius.xl`,shadow:`palette.shadows.xl`,inset:`16px`,canvasBackground:`transparent`,modes:{floating:{border:`1px solid var(--persona-border)`,shadow:`palette.shadows.xl`,borderRadius:`palette.radius.xl`},inline:{border:`1px solid var(--persona-border)`,shadow:`none`,borderRadius:`palette.radius.xl`},docked:{border:`none`,shadow:`none`,borderRadius:`palette.radius.xl`},sidebar:{border:`none`,borderRadius:`0`},mobile:{border:`none`,shadow:`none`,borderRadius:`0`}}},header:{background:`palette.colors.primary.500`,foreground:`palette.colors.primary.50`,borderRadius:`palette.radius.xl palette.radius.xl 0 0`,padding:`20px 24px`,minimalPadding:`16px 24px`,iconBackground:`palette.colors.primary.600`,iconForeground:`palette.colors.primary.50`},message:{gap:`12px`,user:{background:`palette.colors.primary.500`,text:`palette.colors.primary.50`,borderRadius:`palette.radius.lg`,shadow:`palette.shadows.sm`},assistant:{background:`semantic.colors.container`,text:`semantic.colors.text`,borderRadius:`palette.radius.lg`,border:`semantic.colors.border`,shadow:`palette.shadows.sm`},operator:{background:`color-mix(in srgb, var(--persona-primary) 6%, var(--persona-container))`,text:`semantic.colors.text`,borderRadius:`palette.radius.lg`,border:`color-mix(in srgb, var(--persona-primary) 20%, var(--persona-container))`,borderWidth:`1px`,shadow:`palette.shadows.sm`},border:`semantic.colors.border`},introCard:{background:`transparent`,borderRadius:`palette.radius.2xl`,padding:`semantic.spacing.lg`,shadow:`palette.shadows.none`},suggestion:{chip:{background:`semantic.colors.surface`,foreground:`semantic.colors.text`,border:`semantic.colors.border`,borderRadius:`palette.radius.full`,padding:`0.5rem 0.875rem`,gap:`0.5rem`,itemGap:`8px`,minHeight:`36px`,fontSize:`0.8125rem`,lineHeight:`1.25`,iconSize:`16px`,hoverBackground:`palette.colors.gray.100`,hoverBorder:`palette.colors.gray.300`,pressedBackground:`palette.colors.gray.200`,focusRing:`semantic.colors.interactive.focus`,disabledOpacity:`0.5`},card:{background:`semantic.colors.surface`,foreground:`semantic.colors.text`,border:`semantic.colors.border`,borderRadius:`palette.radius.xl`,padding:`1rem`,shadow:`palette.shadows.sm`,gap:`0.625rem`,itemGap:`8px`,minHeight:`72px`,fontSize:`0.875rem`,lineHeight:`1.35`,iconSize:`18px`,hoverBackground:`palette.colors.gray.100`,hoverBorder:`palette.colors.gray.300`,pressedBackground:`palette.colors.gray.200`,focusRing:`semantic.colors.interactive.focus`,disabledOpacity:`0.5`},list:{background:`transparent`,foreground:`semantic.colors.text`,border:`semantic.colors.border`,borderRadius:`palette.radius.md`,padding:`0.75rem`,gap:`0.625rem`,itemGap:`8px`,minHeight:`44px`,fontSize:`0.875rem`,lineHeight:`1.35`,iconSize:`17px`,hoverBackground:`palette.colors.gray.100`,hoverBorder:`palette.colors.gray.300`,pressedBackground:`palette.colors.gray.200`,focusRing:`semantic.colors.interactive.focus`,disabledOpacity:`0.5`}},toolBubble:{shadow:`palette.shadows.sm`},reasoningBubble:{shadow:`palette.shadows.sm`},composer:{shadow:`palette.shadows.none`},scrollbar:{thumb:`semantic.colors.border`,track:`transparent`},markdown:{inlineCode:{background:`palette.colors.gray.50`,foreground:`palette.colors.gray.900`},link:{foreground:`palette.colors.primary.600`},prose:{fontFamily:`inherit`},codeBlock:{background:`semantic.colors.container`,borderColor:`semantic.colors.border`,textColor:`inherit`,borderRadius:`palette.radius.md`},table:{headerBackground:`semantic.colors.container`,borderColor:`semantic.colors.border`},hr:{color:`semantic.colors.divider`},blockquote:{borderColor:`palette.colors.gray.900`,background:`transparent`,textColor:`palette.colors.gray.500`}},collapsibleWidget:{container:`palette.colors.gray.50`,surface:`semantic.colors.surface`,border:`semantic.colors.border`},voice:{recording:{indicator:`palette.colors.error.500`,background:`palette.colors.error.50`,border:`palette.colors.error.200`},processing:{icon:`palette.colors.primary.500`,background:`palette.colors.primary.50`},speaking:{icon:`palette.colors.success.500`}},approval:{requested:{background:`semantic.colors.surface`,border:`semantic.colors.border`,text:`palette.colors.gray.900`,shadow:`0 1px 2px 0 rgba(11, 11, 11, 0.06), 0 2px 8px 0 rgba(11, 11, 11, 0.04)`},approve:{background:`semantic.colors.primary`,foreground:`semantic.colors.textInverse`,borderRadius:`palette.radius.md`,padding:`semantic.spacing.sm`},deny:{background:`semantic.colors.container`,foreground:`semantic.colors.text`,borderRadius:`palette.radius.md`,padding:`semantic.spacing.sm`}},attachment:{image:{background:`palette.colors.gray.100`,border:`palette.colors.gray.200`}},eventStream:{badge:{flow:{background:`palette.colors.success.100`,foreground:`palette.colors.success.700`},step:{background:`palette.colors.primary.100`,foreground:`palette.colors.primary.700`},reasoning:{background:`palette.colors.warning.100`,foreground:`palette.colors.warning.700`},tool:{background:`palette.colors.purple.100`,foreground:`palette.colors.purple.800`},agent:{background:`palette.colors.teal.100`,foreground:`palette.colors.teal.800`},error:{background:`palette.colors.error.100`,foreground:`palette.colors.error.700`},default:{background:`palette.colors.gray.100`,foreground:`palette.colors.gray.600`}}},scrollToBottom:{background:`components.button.primary.background`,foreground:`components.button.primary.foreground`,border:`semantic.colors.primary`,size:`40px`,borderRadius:`palette.radius.full`,shadow:`palette.shadows.sm`,padding:`0.5rem 0.875rem`,gap:`0.5rem`,fontSize:`0.875rem`,iconSize:`14px`},artifact:{pane:{background:`semantic.colors.container`,toolbarBackground:`semantic.colors.container`}}},_=m.colors.gray,v={50:`#fafafa`,100:`#f5f5f5`,200:`#e5e5e5`,300:`#d4d4d4`,400:`#a3a3a3`,500:`#737373`,600:`#525252`,700:`#404040`,800:`#262626`,900:`#171717`,950:`#0a0a0a`},y={...m,colors:{...m.colors,gray:_}},b={...m,colors:{...m.colors,gray:v},radius:{none:`0px`,sm:`4px`,md:`8px`,lg:`12px`,xl:`16px`,"2xl":`24px`,full:`9999px`}},x=h,S={...h,colors:{...h.colors,surface:`#ffffff`,background:`#ffffff`,container:`semantic.colors.surface`,textInverse:`#ffffff`},typography:{...h.typography,fontSize:`14px`,lineHeight:`1.5`}},C=g,w={...g,scrollToBottom:{...g.scrollToBottom,background:`semantic.colors.surface`,foreground:`semantic.colors.text`,border:`semantic.colors.border`,size:`32px`},messageActions:{background:`transparent`,border:`none`,hoverBackground:`components.button.ghost.hoverBackground`,hoverForeground:`semantic.colors.text`,borderRadius:`palette.radius.md`},launcher:e,activity:{labelSize:`13px`,iconSize:`16px`,indent:`0px`,transcriptGap:`0px`,responseGap:`12px`,groupIndent:`16px`,groupGap:`2px`,groupPadding:`2px 0`,bodyPadding:`4px 0`,bodyFontWeight:`400`,sectionGap:`8px`,bodySurface:`transparent`},toolBubble:{shadow:`none`},reasoningBubble:{shadow:`none`},input:{...g.input,borderRadius:`palette.radius.full`},introCard:{...g.introCard,title:{fontSize:`22px`,fontWeight:`500`}},suggestion:{chip:{...g.suggestion.chip,fontWeight:`400`},card:{...g.suggestion.card,fontWeight:`400`},list:{...g.suggestion.list,fontWeight:`400`}},panel:{...g.panel,width:`min(400px, calc(100vw - 24px))`,height:`min(704px, calc(100dvh - 104px))`,borderRadius:`palette.radius.xl`},header:{...g.header,background:`semantic.colors.container`,foreground:`semantic.colors.text`,padding:`8px 8px 8px 16px`,minimalPadding:`8px 8px 8px 16px`,minHeight:`48px`,borderBottom:`none`,iconBackground:`transparent`,iconForeground:`semantic.colors.text`,iconScale:`1`,iconPadding:`auto`,controlSize:`28px`,controlIconSize:`16px`,controlStrokeWidth:`1.5`,actionIconForeground:`semantic.colors.textMuted`,controlBorderRadius:`8px`,controlHoverBackground:`color-mix(in srgb, var(--persona-text) 8%, transparent)`,controlHoverForeground:`semantic.colors.text`,controlFocusOutline:`2px solid color-mix(in srgb, var(--persona-text) 50%, transparent)`,title:{fontSize:`14px`,fontWeight:`500`,lineHeight:`1.5`}},message:{...g.message,gap:`20px`,fullscreenGap:`28px`,topFadeHeight:`18px`,user:{...g.message.user,background:`palette.colors.gray.100`,text:`semantic.colors.text`,borderRadius:`palette.radius.xl`,shadow:`none`,padding:`8px 14px`,fontSize:`14px`,lineHeight:`1.5`},assistant:{...g.message.assistant,background:`transparent`,border:`transparent`,borderWidth:`0px`,borderRadius:`0px`,shadow:`none`,padding:`0px`,fontSize:`14px`,lineHeight:`1.55`},operator:{...g.message.operator,background:`transparent`,border:`semantic.colors.border`,borderRadius:`palette.radius.xl`,shadow:`none`,padding:`8px 14px`,fontSize:`14px`,lineHeight:`1.5`}},artifact:{...g.artifact,card:{background:`semantic.colors.surface`,border:`1px solid var(--persona-border)`,borderRadius:`palette.radius.lg`,hoverBackground:`components.button.ghost.hoverBackground`,hoverBorderColor:`semantic.colors.border`},inline:{background:`semantic.colors.surface`,border:`1px solid var(--persona-border)`,borderRadius:`palette.radius.lg`,chromeBackground:`semantic.colors.surface`,chromeBorder:`semantic.colors.border`,titleColor:`semantic.colors.text`,mutedColor:`semantic.colors.textMuted`}},composer:{...g.composer,padding:`8px`,fontSize:`15px`,lineHeight:`1.5`,controlSize:`32px`,controlIconSize:`20px`,expandedPadding:`12px 16px`,expandedBorderRadius:`24px`,sendIconSize:`18px`,sendButtonRadius:`9999px`,footerBorder:`none`,overflowMenu:{borderRadius:`12px`},overlayBand:`linear-gradient(to bottom, transparent, var(--persona-container) 24px)`,focusBorderColor:`color-mix(in srgb, var(--persona-text) 28%, var(--persona-border))`,focusRing:`1px solid color-mix(in srgb, var(--persona-text) 12%, transparent)`}},T=e=>f({future:e}),E=e=>T(e)===`v5`?{palette:b,semantic:S,components:w}:{palette:y,semantic:x,components:C},D={overview:`Start fresh with brand for a coordinated look, theme.semantic for shared design intent, and theme.components for exact exceptions. Tokens layer palette → semantic → components; darkTheme overrides inherited light theme inputs. Current V4 defaults apply unless future.v5Defaults is true. Content belongs in welcome/copy and suggestions; behavior and composition remain in features/providers/layout/launcher. Explicit legacy styles still win until reset; modern welcome content wins over old copy aliases. See docs/configuration.md for fresh recipes, mounted update policy and authored versus resolved exports.`,layers:{palette:{description:`Primitive design tokens. Override specific shades to change the entire widget feel.`,colors:{description:`7 color scales, each with shades 50 (lightest) to 950 (darkest). Override only the shades you need.`,scales:{gray:`Neutrals: backgrounds, text, borders. Key shades: 50 (lightest bg), 100 (secondary bg), 200 (borders), 500 (muted text), 900 (primary text).`,primary:`Brand color: buttons, links, interactive elements. Key shades: 500 (default), 600 (hover).`,accent:`Secondary highlight. Key shades: 500 (default), 600 (hover).`,secondary:`Tertiary color scale.`,success:`Positive feedback (default: green).`,warning:`Caution feedback (default: yellow).`,error:`Error/danger feedback (default: red).`}},radius:{description:`Border radius scale. Add custom keys like launcher, button.`,defaults:{none:`0px`,sm:`0.125rem`,md:`0.375rem`,lg:`0.5rem`,xl:`0.75rem`,"2xl":`1rem`,full:`9999px`}},typography:{fontFamily:`Three stacks: sans (system-ui), serif (Georgia), mono (ui-monospace). Override individual stack values.`,fontSize:`Scale: xs (0.75rem), sm (0.875rem), base (1rem), lg (1.125rem), xl (1.25rem), 2xl (1.5rem), 3xl (1.875rem), 4xl (2.25rem).`,fontWeight:`normal (400), medium (500), semibold (600), bold (700).`,lineHeight:`tight (1.25), normal (1.5), relaxed (1.625).`},shadows:`Scale: none, sm, md, lg, xl, 2xl. Values are CSS box-shadow strings.`,borders:`Scale: none, sm (1px solid), md (2px solid), lg (4px solid).`,spacing:`Scale: 0 (0px), 1 (0.25rem), 2 (0.5rem), 3 (0.75rem), 4 (1rem), 5 (1.25rem), 6 (1.5rem), 8 (2rem), 10 (2.5rem), 12 (3rem), 16-64.`},semantic:{description:`Design intent tokens. Auto-derived from palette by default. Override to redirect token resolution. Values are token reference strings like "palette.colors.primary.500".`,colors:{primary:`palette.colors.primary.500: Primary brand color.`,secondary:`palette.colors.gray.500: Secondary color.`,accent:`palette.colors.primary.600: Accent/interactive color.`,surface:`palette.colors.gray.50: Panel/card backgrounds.`,background:`palette.colors.gray.50: Page background.`,container:`palette.colors.gray.100: Container backgrounds.`,text:`palette.colors.gray.900: Primary text.`,textMuted:`palette.colors.gray.500: Muted/secondary text.`,textInverse:`palette.colors.gray.50: Text on dark backgrounds.`,border:`palette.colors.gray.200: Default border color.`,divider:`palette.colors.gray.200: Divider lines.`,interactive:{default:`palette.colors.primary.500`,hover:`palette.colors.primary.600`,focus:`palette.colors.primary.700`,active:`palette.colors.primary.800`,disabled:`palette.colors.gray.300`},feedback:{success:`palette.colors.success.500`,warning:`palette.colors.warning.500`,error:`palette.colors.error.500`,info:`palette.colors.primary.500`}},spacing:`xs (0.25rem), sm (0.5rem), md (1rem), lg (1.5rem), xl (2rem), 2xl (2.5rem).`,typography:`fontFamily, fontSize, fontWeight, lineHeight: reference palette typography tokens.`},components:{description:`UI element tokens. Rarely needed for basic theming. Override for fine-grained control. All values are token references or raw CSS strings.`,button:{description:`Variants primary, secondary, ghost; button.stop.background/foreground styles streaming stop while composer.send styles idle send.`,properties:`background, foreground, borderRadius, padding.`},input:{description:`Message input field.`,properties:`background, placeholder, borderRadius, padding, focus.border, focus.ring.`},launcher:{description:`Floating launcher button.`,properties:`size (60px), iconSize (28px), iconStrokeWidth (2, unitless glyph stroke weight; applies to registry-icon launchers, inert for emoji and image icons), borderRadius, shadow.`},panel:{description:`Chat panel container.`,properties:`width, maxWidth (440px), height (600px), maxHeight, borderRadius, shadow, inset (16px, gap around a detached panel), canvasBackground (transparent, fills the region behind a detached panel in docked and inline embed modes; a no-op in sidebar mode, where the gap stays click-through and the host page shows through like floating). inset and canvasBackground apply only when launcher.detachedPanel is true or artifacts.layout.paneAppearance is "detached".`},header:{description:`Chat panel header. background and foreground are the pair that colors the band: set those two and the rest of the header text follows.`,properties:`close and clear each expose independent size, iconSize, iconStrokeWidth, background, foreground, borderColor, borderWidth, borderRadius, padding; they fall through to shared header controls, leaving Messages and trailing actions untouched. background, foreground (anchors the header text; the title takes it directly, the subtitle and action icons take color-mix(in srgb, foreground 72%, background), and the border takes color-mix(in srgb, foreground 14%, background)), border, borderRadius, padding, iconBackground, iconForeground (the avatar tile, which keeps its own defaults and never derives), actionIconForeground, controlSize (32px, the box of every header icon button), controlIconSize (16px, the glyph inside it), controlStrokeWidth (1.5, unitless glyph stroke weight; sparse-viewBox glyphs such as the close X scale it by 0.7), shadow, borderBottom, minHeight (height floor for the header strip), title and subtitle (each fontFamily, fontSize, fontWeight, lineHeight, letterSpacing, color). Derivation only fills keys the theme leaves unset, so any explicit border, titleForeground, subtitleForeground, actionIconForeground, title.color, or subtitle.color wins. With no foreground either, each key falls back as before: the primary color for the title, the muted text color for the subtitle and action icons, the divider color for the border.`,legacy:`titleForeground and subtitleForeground are legacy aliases of header.title.color and header.subtitle.color. Both still work; the title/subtitle color wins when both are set, and either alias still outranks the foreground derivation.`},history:{description:`Messages (conversation history) chrome and motion. railHeader styles the rail sidebar top strip, which runs beside the widget header in rail presentation; overlay styles the floating rail a collapsed overlay rail opens on hover; motion times the surface entering and leaving.`,properties:`railHeader.background (defaults to the rail surface), railHeader.border (full border-bottom shorthand, default 0), railHeader.minHeight (defaults to components.header.minHeight, then 56px). Pin railHeader.minHeight and header.minHeight to the same value so both top strips read as one band. railHeader.title takes TextStyleTokens for the strip view title ("Messages"): color (defaults to the text color; the sidebar identity reads at full strength), fontFamily, fontSize (14px), fontWeight (600), lineHeight, letterSpacing. listHeading takes the same TextStyleTokens for the rail-only "Conversations" heading over the list block (14px/600 in the text color); groupHeading styles the muted sub-headers, both the date groups ("Today", "Yesterday") and rail nav section titles (rail 13px/500, muted text color). Every key of all three is pinned in the widget CSS, so host-page h2/h3 rules cannot restyle them. overlay.margin (8px, the gap from the trigger, the docked edge and the bottom), overlay.borderRadius (16px), overlay.shadow (0 12px 40px rgba(0, 0, 0, 0.25)), overlay.background (defaults to the rail surface). The floating rail keeps features.history.rail width and side, which are config, not tokens. motion.enterDurationMs (180) and motion.exitDurationMs (160) are bare millisecond numbers, 0 disables that leg; motion.enterEasing (cubic-bezier(0, 0, 0.2, 1)) and motion.exitEasing (cubic-bezier(0.4, 0, 1, 1)) take any CSS easing. Only the body animates, and prefers-reduced-motion always wins.`},tooltip:{description:`The portaled tooltip on icon controls, plus the muted shortcut hint chip after its label.`,properties:`background (#111827), foreground (#ffffff), hintForeground (rgba(255, 255, 255, 0.55)), borderRadius (palette.radius.sm), fontSize (12px), padding (6px 12px), shadow, maxWidth (min(320px, calc(100vw - 16px))), arrow (boolean, default true; false drops the caret). Unset keys keep the built-in dark look.`},message:{description:`Chat message bubbles.`,user:`background, text, borderRadius, shadow.`,assistant:`background, text, borderRadius, border (optional), shadow (optional).`,operator:`Human operator bubble (role "operator", e.g. a support takeover), on the assistant side. background (default: container tinted 6% with the primary), text (semantic.colors.text), borderRadius, border (container tinted 20% with the primary), borderWidth (1px), shadow, plus padding, maxWidth, fontSize, fontFamily, lineHeight. V5 outlines it instead: transparent background, semantic.colors.border border.`},markdown:{description:`Markdown rendering in messages and artifact pane.`,properties:`inlineCode (background, foreground), link.foreground, prose.fontFamily, heading.h1/h2 (fontSize, fontWeight), codeBlock (background, borderColor, textColor, borderRadius: follows palette.radius.md), table (headerBackground, borderColor), hr.color, blockquote (borderColor, background, textColor).`},introCard:{description:`Welcome surface above the message list. Flat by default (transparent, no shadow).`,properties:`background, borderRadius, padding, shadow, border (full CSS shorthand, default none), title and subtitle (each fontFamily, fontSize, fontWeight, lineHeight, letterSpacing, color).`},suggestion:{description:`Starter prompt and follow-up suggestion chrome. Three variants: chip, card, list.`,properties:`background, foreground, border, borderRadius, padding, fontWeight, shadow, gap (icon to copy inside one item), itemGap (space between items, default 8px), minHeight, fontSize, lineHeight, iconSize, hoverBackground, hoverForeground, hoverBorder, pressedBackground, focusRing, disabledOpacity.`},voice:`control (size, iconSize, iconStrokeWidth, background, foreground, borderColor, borderWidth, borderRadius, padding) styles the idle mic independently. Legacy voiceRecognition.iconSize sets both box and glyph: migrate to both control.size and control.iconSize. recording (indicator, background, border), processing (icon, background, optional border), speaking (icon, optional background/border). Previously unused recording.border, processing.icon/background and speaking.icon only activate on explicit host theme input; materialized defaults do not recolor the mic.`,approval:`requested (background, border, text, shadow, titleColor, descriptionColor, reasonColor, parameters.background/foreground), approve (background, foreground), deny (background, foreground). Previously unused requested.text and approve/deny foreground only activate on explicit host input. Specific requested text colors fall through explicit requested.text to the renderer fallback. Built-in plugin and exported createApprovalBubble share these tokens, retaining their original absent-value deny colors.`,askUserQuestion:`sheet (background, border, shadow), pill (background, foreground, borderRadius, selectedBackground, selectedForeground), customInput.background. Local features.askUserQuestion.styles still wins; navigation, labels and slide timing remain feature config.`,attachment:`image (background, border).`,scrollToBottom:`Floating scroll-to-bottom affordance shared by transcript and event stream: background, foreground, border, size, borderRadius, shadow, padding, gap, fontSize, iconSize; approval (background, foreground, border, fontWeight) for the labelled "Approval needed" state, falling back to the control colors.`,toolBubble:`shadow, background, borderColor, borderWidth, borderRadius; header (background, foreground, padding), content (background, foreground, padding), codeBlock (background, foreground, borderColor), toggleForeground, labelForeground, loading (primary, secondary, duration). Applies to card and activity-row variants without changing their distinct defaults. CSS duration uses ms/s; legacy numeric milliseconds must convert explicitly. Theme content.padding precedes activity.bodyPadding/toolBubble.bodyPadding fallbacks; explicit legacy axes override only their axis.`,scrollbar:`Shared scrollbar appearance for every scroller: thumb (default semantic.colors.border), track (default transparent).`,turnActivity:`dividerColor (theme primary at 8% opacity by default) and dividerWidth (1px by default; 0px hides it) style only the divider beneath the Worked turn header.`,reasoningBubble:`shadow: reasoning/thinking row box-shadow.`,composer:`Independent send (size, iconSize, iconStrokeWidth, background, foreground, borderColor, borderWidth, borderRadius, padding) styles submit only; shared sendIconSize and sendButtonRadius are older fallbacks. Legacy icon-mode padding and text-mode background remain ignored; new theme padding/background can opt into either mode. button.stop colors still apply while stopped unless explicit legacy send colors win. Explicit legacy send colors retain the idle mic fallback; a parity migration sets matching voice.control colors too. Message input form: sendIconSize (send/stop glyph; explicit sendButton.iconSize wins), sendButtonRadius (icon-mode submit radius), footerBorder (footer top border shorthand; none hides it), shadow (box-shadow), borderColor, focusBorderColor (focused form border; V4 keeps the resting border, V5 uses a stronger neutral mix), focusRing (CSS outline shorthand, 1px offset; V4 none, V5 a thin neutral ring; preserves shadow and causes no layout shift), padding (form inset), expandedPadding and expandedBorderRadius (expanded card geometry; V5 12px 16px and 24px; explicit padding/input.borderRadius also override these), gap (textarea row to actions row; compact single-row spacing fallback), controlGap (horizontal action rail spacing, default 8px), editorMinHeight (minimum textarea height, default 24px), editorPadding (textarea inset, default 2px), suggestionsGap (space above below-composer starters), mode (independent mode-button fontSize, fontWeight, height, paddingInline, gap, borderRadius, borderColor, activeBorderColor, activeBackground), fontSize and lineHeight (textarea type), controlSize (edge of every icon control in the action row: attachment, mention, mic, action buttons, overflow trigger, icon-mode send; default 40px) and controlIconSize (glyph inside them, default 24px). Per-control config keys (sendButton.size, voiceRecognition.iconSize) override controlSize; coarse-pointer devices floor the hit area at 40px. overlayBand paints the band behind an overlaid footer (composer.placement: "overlay"). segmented styles a segmented mode-group track (trackBackground, trackBorderRadius, padding, activeBackground, activeForeground, activeShadow, inactiveForeground, itemPadding, gap, fontSize, lineHeight, fontWeight, minHeight); every key is optional and the stylesheet owns the defaults. modelPicker styles the model picker (background, hoverBackground, borderColor, borderRadius, labelColor, fontSize, fontWeight, height, minWidth and paddingInline on the closed control, which the native select and the popover trigger share; menuBackground, menuBorderRadius, rowHoverBackground, descriptionColor and suffixColor on the popover only), also all optional. overflowMenu styles the composer overflow "+" menu panel (background, borderColor, borderRadius, foreground, shadow), also all optional.`,artifact:`pane (background, toolbarBackground, padding, borderRadius, shadow, border, borderLeft), chat.shadow, split.outerRadius, toolbar (iconColor, toggleActiveBackground, toggleActiveBorderColor, toggleActiveColor, existing icon/copy chrome), tab (fadeSize, existing backgrounds/active states). border and borderLeft are full CSS shorthands; full border wins over left border. Geometry, resizing, appearance, chatSurface, presets and fade enablement remain layout config.`}},styleMigration:{precedence:`For supported style aliases: explicit legacy property > explicit component theme (active dark override) > existing shared/semantic/V4/V5 fallback. Materialized legacy defaults no longer defeat component styling. Behavior, hooks, custom icons, labels and presets remain config capabilities.`,updates:`Omitted patch keys retain value/origin. Own undefined clears a style override; clearing a parent clears its tracked descendants. Theme/scheme/default-version changes do not resurrect cleared inline styles. Persona merge helpers and supported copies retain origin; JSON-round-tripped/manual default-filled inputs have unknown origin and conservatively treat present values as explicit. Remove/reset legacy fields to expose theme styling.`,diagnostics:`Debug-only, once per widget/path; deferred installs diagnose when the full runtime opens, not from the tiny launcher. Warnings cover verified aliases only and do not imply runtime removal. No removal is scheduled in 4.x.`,retained:`Callbacks/renderers, custom icons, labels, accessibility, behavior, provider setup and layout geometry stay supported. suggestionChipsConfig.fontFamily is an accepted no-op, as are unifiedSplitChrome and unsupported messages/composer layout slots; no parity token is claimed. The three --cw-container/--cw-surface/--cw-border compatibility aliases remain; Markdown uses --persona-md-*.`},colorScheme:`"dark" merges darkTheme overrides on top of theme. "auto" detects system preference or <html class="dark">. "light" is default. colorScheme does NOT auto-invert colors: provide dark palette and semantic overrides yourself.`,plugins:{description:`Plugins transform theme tokens before resolution. Use with createTheme().`,available:{brandPlugin:`Auto-generates full color scales from a single brand hex: brandPlugin({ colors: { primary: "#7c3aed" } }).`,accessibilityPlugin:`Enhanced focus indicators and disabled states.`,highContrastPlugin:`Increased contrast for visual accessibility.`,reducedMotionPlugin:`Disables all animations (sets transitions to 0ms).`,animationsPlugin:`Adds transition and easing tokens.`},usage:`createTheme(themeOverrides, { plugins: [brandPlugin({ colors: { primary: "#7c3aed" } })] })`},widgetConfig:{description:`Non-theme config options on the widget config object that affect appearance. These are siblings of "theme" in the config, not nested inside it.`,launcher:{description:`Floating launcher button and panel positioning.`,properties:{enabled:`Show/hide the launcher button.`,title:`Header title text.`,subtitle:`Header subtitle text.`,position:`"bottom-right" | "bottom-left" | "top-right" | "top-left".`,width:`Chat panel width (CSS value).`,fullHeight:`Fill full height of container.`,mountMode:`"floating" | "docked".`,agentIconText:`Emoji/text for agent icon.`,border:`Border style for launcher button.`,shadow:`Box shadow for launcher button.`,collapsedMaxWidth:`Max-width for launcher pill when panel closed.`}},sendButton:{description:`Send button appearance.`,properties:`backgroundColor, textColor, borderWidth, borderColor, paddingX, paddingY, iconText, iconName, size.`},closeButton:{description:`Close button (on launcher config). Unset closeButtonSize means theme.components.header.controlSize owns the box.`,properties:`closeButtonSize, closeButtonColor, closeButtonBackgroundColor, closeButtonBorderWidth, closeButtonBorderColor, closeButtonBorderRadius.`},clearChat:{description:`Clear chat button (on launcher.clearChat config). Unset size means theme.components.header.controlSize owns the box.`,properties:`enabled, iconColor, backgroundColor, borderWidth, borderColor, borderRadius, size.`},scrollToBottom:{description:`Shared transcript + event-stream jump-to-latest affordance.`,properties:`features.scrollToBottom.enabled, features.scrollToBottom.iconName, features.scrollToBottom.label (empty string renders icon-only), features.scrollToBottom.approvalLabel (shown while a pending approval is below the fold; empty string keeps the regular control). Defaults: enabled=true, iconName="arrow-down", label="", approvalLabel="Approval needed".`},toolCall:{description:`Tool call display styling, text templates, loading animations, and rendering hooks. Text templates support placeholders ({toolName}, {duration}) and inline formatting (~dim~, *italic*, **bold**). renderCollapsedSummary receives elapsed (static string) and createElapsedElement() (live-updating span) in its context.`,properties:`shadow, backgroundColor, borderColor, borderWidth, borderRadius, headerBackgroundColor, headerTextColor, headerPaddingX, headerPaddingY, contentBackgroundColor, contentTextColor, contentPaddingX, contentPaddingY, codeBlockBackgroundColor, codeBlockBorderColor, codeBlockTextColor, toggleTextColor, labelTextColor, activeTextTemplate, completeTextTemplate, loadingAnimationColor, loadingAnimationSecondaryColor, loadingAnimationDuration, renderCollapsedSummary, renderCollapsedPreview, renderGroupedSummary.`},reasoning:{description:`Reasoning/thinking row rendering hooks, text templates, and loading animations. Text templates support {duration} placeholder and inline formatting (~dim~, *italic*, **bold**). renderCollapsedSummary receives elapsed (static string) and createElapsedElement() (live-updating span) in its context.`,properties:`renderCollapsedSummary, renderCollapsedPreview, activeTextTemplate, completeTextTemplate, loadingAnimationColor, loadingAnimationSecondaryColor, loadingAnimationDuration.`},approval:{description:`Tool approval card styling and behavior. Neutral surface card; the primary action anchors to the brand --persona-primary token. Set to false to disable. Set enableAlwaysAllow: true to add the split "Always allow / Allow once" control (needs a backend to persist the policy via onDecision's remember).`,properties:`enableAlwaysAllow, detailsDisplay ("collapsed" | "expanded" | "hidden"), showDetailsLabel, hideDetailsLabel, backgroundColor, borderColor, titleColor, descriptionColor, reasonColor, reasonLabel, approveButtonColor, approveButtonTextColor, denyButtonColor, denyButtonTextColor, parameterBackgroundColor, parameterTextColor, approveLabel, denyLabel, formatDescription. (title no longer renders in the default card; use formatDescription to customize the summary.)`},copy:{description:`Widget text content.`,properties:`inputPlaceholder, sendButtonLabel, stopButtonLabel. (showWelcomeCard, welcomeTitle, welcomeSubtitle are deprecated aliases of the welcome namespace.)`},voiceRecognition:{description:`Voice input configuration.`,properties:`enabled, pauseDuration, iconColor, backgroundColor.`},textToSpeech:{description:`Text-to-speech for assistant messages.`,properties:`enabled, provider ("browser" | "runtype"), browserFallback, voice, rate, pitch.`},suggestions:{description:`Rich starter and follow-up suggestion surfaces. Strings remain valid item shorthand.`,properties:`starters.items, starters.variant ("card" | "chip" | "list"), starters.placement ("auto" | "welcome" | "composer" | "below-composer"), starters.behavior ("send" | "fill"), starters.overflow ("scroll" | "wrap"), starters.maxItems, followUps.enabled, followUps.expose, followUps.variant, followUps.placement ("auto" | "after-message" | "composer"), followUps.behavior, followUps.overflow ("scroll" | "wrap"), followUps.maxItems.`},welcome:{description:`First-open welcome surface. Supersedes copy.welcomeTitle / welcomeSubtitle / showWelcomeCard.`,properties:`title, subtitle, icon ({ type: "lucide", name } | { type: "image", url, alt } | { type: "text", text } | function), variant ("card" | "hero" | "none"), dismiss ("never" | "on-first-message"), message (display-only greeting bubble, ignored under "hero").`},suggestionChips:`Deprecated string[] shorthand for starter prompts. Prefer suggestions.starters.items.`,messageActions:{description:`Message action buttons (copy, upvote, downvote, read aloud, regenerate, edit, quote).`,properties:`enabled, showCopy, showUpvote, showDownvote, showReadAloud, showRegenerate (final retryable assistant turn only), showEdit (text-only user messages only), showQuote, visibility ("hover" | "always"), align ("left" | "center" | "right"), layout ("pill-inside" | "row-inside").`},attachments:{description:`File attachment configuration.`,properties:`enabled, allowedTypes (string[]), maxFileSize (bytes), maxFiles, buttonIconName, buttonTooltipText.`},markdown:{description:`Markdown rendering configuration.`,properties:`options (gfm, breaks, headerIds, headerPrefix, pedantic, mangle, silent), disableDefaultStyles.`},layout:{description:`Layout configuration.`,showHeader:`boolean: show/hide the header section entirely.`,showFooter:`boolean: show/hide the footer/composer section entirely.`,contentMaxWidth:`CSS width value for centering content (e.g. "720px", "90ch").`,header:`"default" | "minimal". Options: showIcon, showTitle, showSubtitle, showCloseButton, showClearChat.`,messages:`"bubble" | "flat" | "minimal". Options: groupConsecutive, avatar (show, position, userAvatar, assistantAvatar, operatorAvatar), timestamp (show, position, format).`},statusIndicator:{description:`Status text shown below the composer.`,properties:{visible:`Show/hide the status indicator.`,align:`"left" | "center" | "right": text alignment (default: "right").`,idleText:`Text shown when idle (default: "Online").`,idleLink:`URL to open when idle text is clicked (wraps text in a link).`,connectingText:`Text shown while connecting (default: "Connecting…").`,connectedText:`Text shown while streaming (default: "Streaming…").`,errorText:`Text shown on error (default: "Offline").`}},features:{description:`Feature flags.`,properties:`showReasoning, showToolCalls, toolCallDisplay (collapsedMode, activePreview, activeMinHeight, previewMaxLines, grouped, groupedMode, groupAppearance, groupSummary, groupSummaryMaxItems, groupBoundary, groupIconVisibility, expandable, loadingAnimation), reasoningDisplay (activePreview, activeMinHeight, previewMaxLines, expandable, loadingAnimation), artifacts (sidebar config).`}}},O={independentControls:{description:`Separate close, clear, submit and mic chrome; remove legacy style overrides first. Mic box and glyph sizes are intentionally independent.`,theme:{components:{header:{close:{size:`32px`,foreground:`#b91c1c`},clear:{size:`36px`,foreground:`#1d4ed8`}},composer:{send:{size:`44px`,iconSize:`20px`,background:`#111827`,foreground:`#ffffff`}},voice:{control:{size:`44px`,iconSize:`22px`,foreground:`#111827`,background:`transparent`},recording:{indicator:`#ffffff`,background:`#dc2626`,border:`#dc2626`},processing:{icon:`#1d4ed8`,background:`#eff6ff`},speaking:{icon:`#15803d`,background:`#f0fdf4`}}}}},scopedSurfaces:{description:`Tool, approval/question, and artifact styles stay inside their component boundaries. CSS timing/shorthand values preserve their units.`,theme:{components:{toolBubble:{background:`#f8fafc`,borderColor:`#cbd5e1`,borderWidth:`1px`,header:{foreground:`#0f172a`,padding:`6px 12px`},content:{padding:`12px`},loading:{duration:`1600ms`}},approval:{requested:{descriptionColor:`#0f172a`,parameters:{background:`#f1f5f9`,foreground:`#334155`}},approve:{foreground:`#ffffff`}},askUserQuestion:{sheet:{background:`#ffffff`,shadow:`none`},pill:{selectedBackground:`#111827`,selectedForeground:`#ffffff`}},artifact:{pane:{padding:`16px`,borderRadius:`12px`,border:`1px solid #cbd5e1`},chat:{shadow:`none`},split:{outerRadius:`12px`},toolbar:{iconColor:`#334155`,toggleActiveColor:`#0f172a`},tab:{fadeSize:`24px`}}}}},darkIndigo:{description:`Dark mode with indigo accent: override grays for dark backgrounds and semantic tokens for inverted text/surface`,theme:{palette:{colors:{primary:{500:`#6366f1`,600:`#4f46e5`},gray:{50:`#f1f5f9`,100:`#1e293b`,200:`#334155`,500:`#94a3b8`,900:`#0f172a`,950:`#020617`}}},semantic:{colors:{surface:`palette.colors.gray.900`,background:`palette.colors.gray.900`,container:`palette.colors.gray.100`,text:`palette.colors.gray.50`,textMuted:`palette.colors.gray.500`,textInverse:`palette.colors.gray.900`,border:`palette.colors.gray.200`}}}},warmVintage:{description:`Warm sepia tones with serif font and subtle radius`,theme:{palette:{colors:{primary:{500:`#b45309`,600:`#92400e`},gray:{50:`#fef3c7`,100:`#fef9c3`,200:`#d6d3d1`,500:`#78716c`,900:`#44403c`}},radius:{sm:`0.125rem`,md:`0.25rem`,lg:`0.375rem`},typography:{fontFamily:{sans:`Georgia, Cambria, "Times New Roman", Times, serif`}}}}},neonCyberpunk:{description:`Neon on dark with monospace font: full semantic override for dark background`,theme:{palette:{colors:{primary:{500:`#f0abfc`,600:`#e879f9`},accent:{500:`#22d3ee`,600:`#06b6d4`},gray:{50:`#f0abfc`,100:`#1e0a3c`,200:`#3b0764`,500:`#c084fc`,900:`#0c0a1a`,950:`#050412`}},radius:{sm:`0`,md:`0.25rem`,lg:`0.375rem`},typography:{fontFamily:{sans:`ui-monospace, SFMono-Regular, Menlo, monospace`}}},semantic:{colors:{surface:`palette.colors.gray.900`,background:`palette.colors.gray.950`,container:`palette.colors.gray.100`,text:`palette.colors.gray.50`,textMuted:`palette.colors.gray.500`,border:`palette.colors.gray.200`}}}},cleanRounded:{description:`Clean light theme with large radius and panel styling`,theme:{palette:{radius:{sm:`6px`,md:`8px`,lg:`12px`,launcher:`50px`,button:`8px`}},components:{panel:{borderRadius:`16px`,shadow:`palette.shadows.2xl`}}}}};function k(e){let t=E(e),n=p({future:e});return{tokenDocs:D,defaultsVersion:f({future:e}),themeDefaultsVersion:T(e),defaultColorPalette:t.palette.colors,defaultRadius:t.palette.radius,defaultLauncher:n.launcher,examples:O,sdkPresets:[`shop`,`minimal`,`fullscreen`]}}exports.THEME_EXAMPLES=O,exports.THEME_TOKEN_DOCS=D,exports.getThemeReference=k;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { i as DefaultsVersion, u as ThemeDefaultsVersion } from "./defaults-
|
|
3
|
-
//#region src/theme-reference.d.ts
|
|
1
|
+
import { So as PersonaTheme, _o as DeepPartial, dt as AgentWidgetLauncherConfig } from "./types-BC7MRxO5.cjs";
|
|
2
|
+
import { i as DefaultsVersion, u as ThemeDefaultsVersion } from "./defaults-Bga2Xrsp.cjs";
|
|
4
3
|
export declare const THEME_TOKEN_DOCS: {
|
|
5
4
|
overview: string;
|
|
6
5
|
layers: {
|
|
@@ -106,6 +105,7 @@ export declare const THEME_TOKEN_DOCS: {
|
|
|
106
105
|
description: string;
|
|
107
106
|
user: string;
|
|
108
107
|
assistant: string;
|
|
108
|
+
operator: string;
|
|
109
109
|
};
|
|
110
110
|
markdown: {
|
|
111
111
|
description: string;
|
|
@@ -375,6 +375,7 @@ export declare function getThemeReference(future?: {
|
|
|
375
375
|
description: string;
|
|
376
376
|
user: string;
|
|
377
377
|
assistant: string;
|
|
378
|
+
operator: string;
|
|
378
379
|
};
|
|
379
380
|
markdown: {
|
|
380
381
|
description: string;
|
|
@@ -668,5 +669,4 @@ export declare function getThemeReference(future?: {
|
|
|
668
669
|
examples: Record<string, ThemeExample>;
|
|
669
670
|
sdkPresets: string[];
|
|
670
671
|
};
|
|
671
|
-
//#endregion
|
|
672
672
|
export {}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { i as DefaultsVersion, u as ThemeDefaultsVersion } from "./defaults-
|
|
3
|
-
//#region src/theme-reference.d.ts
|
|
1
|
+
import { So as PersonaTheme, _o as DeepPartial, dt as AgentWidgetLauncherConfig } from "./types-BC7MRxO5.js";
|
|
2
|
+
import { i as DefaultsVersion, u as ThemeDefaultsVersion } from "./defaults-Bga2Xrsp.js";
|
|
4
3
|
export declare const THEME_TOKEN_DOCS: {
|
|
5
4
|
overview: string;
|
|
6
5
|
layers: {
|
|
@@ -106,6 +105,7 @@ export declare const THEME_TOKEN_DOCS: {
|
|
|
106
105
|
description: string;
|
|
107
106
|
user: string;
|
|
108
107
|
assistant: string;
|
|
108
|
+
operator: string;
|
|
109
109
|
};
|
|
110
110
|
markdown: {
|
|
111
111
|
description: string;
|
|
@@ -375,6 +375,7 @@ export declare function getThemeReference(future?: {
|
|
|
375
375
|
description: string;
|
|
376
376
|
user: string;
|
|
377
377
|
assistant: string;
|
|
378
|
+
operator: string;
|
|
378
379
|
};
|
|
379
380
|
markdown: {
|
|
380
381
|
description: string;
|
|
@@ -668,5 +669,4 @@ export declare function getThemeReference(future?: {
|
|
|
668
669
|
examples: Record<string, ThemeExample>;
|
|
669
670
|
sdkPresets: string[];
|
|
670
671
|
};
|
|
671
|
-
//#endregion
|
|
672
672
|
export {}
|
package/dist/theme-reference.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e={background:`semantic.colors.primary`,foreground:`semantic.colors.textInverse`,border:`transparent`,size:`48px`,iconSize:`24px`,borderRadius:`palette.radius.full`,shadow:`0 8px 24px rgba(0,0,0,.16)`,offset:`20px`},t={collapsedMode:`tool-call`,activePreview:!1,grouped:!1,groupedMode:`stack`,groupBoundary:`adjacent`,previewMaxLines:3,expandable:!0,loadingAnimation:`none`},n={activePreview:!1,previewMaxLines:3,expandable:!0,loadingAnimation:`none`},r={layout:`row`,variant:`row`,iconVisibility:`active`,autoExpand:!1,grouped:!0,groupedMode:`collapsible`,groupAppearance:`inset`,loadingAnimation:`shimmer`},i={appearance:`inset`,layout:`row`,variant:`row`,iconVisibility:`active`,autoExpand:!1,loadingAnimation:`shimmer`},a=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function o(e,t){if(!e)return t;if(!t)return e;let n={...e};for(let[e,r]of Object.entries(t)){let t=n[e];n[e]=a(t)&&a(r)?o(t,r):r}return n}const s={resolvedDisplay:`row`,primaryAction:`allow-once`,keyboardShortcuts:`focused`},c=`min(440px, calc(100vw - 24px))`,l={apiUrl:`https://api.runtype.com/api/chat/dispatch`,clientToken:void 0,agentId:void 0,target:void 0,theme:void 0,darkTheme:void 0,colorScheme:`light`,tooltip:{delayMs:400,skipDelayMs:300},launcher:{enabled:!0,mountMode:`floating`,dock:{side:`right`,width:`420px`},title:`Chat Assistant`,subtitle:`Here to help you get answers fast`,agentIconText:`💬`,agentIconName:`bot`,headerIconName:`bot`,position:`bottom-right`,width:c,heightOffset:0,autoExpand:!1,callToActionIconHidden:!1,agentIconSize:`40px`,headerIconSize:`40px`,closeButtonPaddingX:`0px`,closeButtonPaddingY:`0px`,callToActionIconName:`arrow-up-right`,callToActionIconText:``,callToActionIconSize:`32px`,callToActionIconPadding:`5px`,callToActionIconColor:void 0,callToActionIconBackgroundColor:void 0,closeButtonBackgroundColor:`transparent`,clearChat:{backgroundColor:`transparent`,borderColor:`transparent`,enabled:!0,placement:`inline`,iconName:`refresh-cw`,showTooltip:!0,tooltipText:`Clear chat`,paddingX:`0px`,paddingY:`0px`},headerIconHidden:!1,border:void 0,shadow:`0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)`},copy:{inputPlaceholder:`How can I help...`,sendButtonLabel:`Send`},sendButton:{borderWidth:`0px`,paddingX:`12px`,paddingY:`10px`,borderColor:void 0,useIcon:!0,iconText:`↑`,showTooltip:!0,tooltipText:`Send message`,iconName:`send`},statusIndicator:{visible:!0,idleText:`Online`,connectingText:`Connecting…`,connectedText:`Streaming…`,errorText:`Offline`},voiceRecognition:{enabled:!0,pauseDuration:2e3,iconName:`mic`,borderWidth:`0px`,iconColor:void 0,backgroundColor:`transparent`,borderColor:`transparent`,recordingIconColor:void 0,recordingBackgroundColor:void 0,recordingBorderColor:`transparent`,showTooltip:!0,tooltipText:`Start voice recognition`},features:{showReasoning:!0,showToolCalls:!0,scrollToBottom:{enabled:!0,iconName:`arrow-down`,label:``,streamingIndicator:`arrow`,scrollBehavior:`instant`,scrollDurationMs:220,transition:`none`},scrollBehavior:{mode:`anchor-top`,anchorTopOffset:16,showActivityWhilePinned:!0},toolCallDisplay:t,reasoningDisplay:n,streamAnimation:{type:`none`,placeholder:`none`,speed:120,duration:1800},askUserQuestion:{enabled:!0,slideInMs:180,freeTextLabel:`Other…`,freeTextPlaceholder:`Type your answer…`,submitLabel:`Send`},history:{enabled:!1,presentation:`panel`,showScopeStatus:!0,showDelete:!0,showDeleteAll:!0}},suggestionChips:[`Show me what you can help with`,`Walk me through getting started`,`Answer a question about this page`],suggestionChipsConfig:{fontFamily:`sans-serif`,fontWeight:`500`,paddingX:`12px`,paddingY:`6px`},layout:{header:{layout:`default`,showIcon:!0,showTitle:!0,showSubtitle:!0,showCloseButton:!0,showClearChat:!0},messages:{layout:`bubble`,avatar:{show:!1,position:`left`},timestamp:{show:!1,position:`below`},groupConsecutive:!1},slots:{}},markdown:{options:{gfm:!0,breaks:!0},disableDefaultStyles:!1},messageActions:{enabled:!0,showCopy:!0,showUpvote:!1,showDownvote:!1,visibility:`hover`,align:`right`,layout:`pill-inside`},debug:!1},u={},d={colorScheme:`light`,errorDisplay:`block`,messageActions:{visibility:void 0},suggestionChipsConfig:{fontWeight:void 0},approval:s,loadingIndicator:{variant:`label`},launcher:{variant:`circle`,width:`min(400px, calc(100vw - 24px))`,headerIconSize:`20px`},features:{artifacts:{enabled:!0},scrollToBottom:{streamingIndicator:`dots`,transition:`fade`,scrollBehavior:`smooth`},toolCallDisplay:r,reasoningDisplay:i},composer:{layout:`single-row`,placement:`overlay`},sendButton:{iconName:`arrow-up`},statusIndicator:{mode:`transient`},layout:{contentMaxWidth:`768px`,topFade:!0,header:{showSubtitle:!1},messages:{assistant:{width:`full`}}}};function f(e){return e?.future?.v5Defaults===!0?`v5`:`v4`}function p(e){let t=f(e)===`v5`?d:u;return o(l,t)}p();const m={colors:{primary:{50:`#ffffff`,100:`#f5f5f5`,200:`#d4d4d4`,300:`#a3a3a3`,400:`#737373`,500:`#171717`,600:`#0f0f0f`,700:`#0a0a0a`,800:`#050505`,900:`#030303`,950:`#000000`},secondary:{50:`#f5f3ff`,100:`#ede9fe`,200:`#ddd6fe`,300:`#c4b5fd`,400:`#a78bfa`,500:`#8b5cf6`,600:`#7c3aed`,700:`#6d28d9`,800:`#5b21b6`,900:`#4c1d95`,950:`#2e1065`},accent:{50:`#ecfeff`,100:`#cffafe`,200:`#a5f3fc`,300:`#67e8f9`,400:`#22d3ee`,500:`#06b6d4`,600:`#0891b2`,700:`#0e7490`,800:`#155e75`,900:`#164e63`,950:`#083344`},gray:{50:`#f9fafb`,100:`#f3f4f6`,200:`#e5e7eb`,300:`#d1d5db`,400:`#9ca3af`,500:`#6b7280`,600:`#4b5563`,700:`#374151`,800:`#1f2937`,900:`#111827`,950:`#030712`},success:{50:`#f0fdf4`,100:`#dcfce7`,200:`#bbf7d0`,300:`#86efac`,400:`#4ade80`,500:`#22c55e`,600:`#16a34a`,700:`#15803d`,800:`#166534`,900:`#14532d`},warning:{50:`#fefce8`,100:`#fef9c3`,200:`#fef08a`,300:`#fde047`,400:`#facc15`,500:`#eab308`,600:`#ca8a04`,700:`#a16207`,800:`#854d0e`,900:`#713f12`},error:{50:`#fef2f2`,100:`#fee2e2`,200:`#fecaca`,300:`#fca5a5`,400:`#f87171`,500:`#ef4444`,600:`#dc2626`,700:`#b91c1c`,800:`#991b1b`,900:`#7f1d1d`},info:{50:`#eff6ff`,100:`#dbeafe`,200:`#bfdbfe`,300:`#93c5fd`,400:`#60a5fa`,500:`#3b82f6`,600:`#2563eb`,700:`#1d4ed8`,800:`#1e40af`,900:`#1e3a8a`,950:`#172554`},purple:{50:`#faf5ff`,100:`#f3e8ff`,200:`#e9d5ff`,300:`#d8b4fe`,400:`#c084fc`,500:`#a855f7`,600:`#9333ea`,700:`#7e22ce`,800:`#6b21a8`,900:`#581c87`,950:`#3b0764`},teal:{50:`#f0fdfa`,100:`#ccfbf1`,200:`#99f6e4`,300:`#5eead4`,400:`#2dd4bf`,500:`#14b8a6`,600:`#0d9488`,700:`#0f766e`,800:`#115e59`,900:`#134e4a`,950:`#042f2e`}},spacing:(()=>{let e={};for(let t of[0,1,2,3,4,5,6,8,10,12,16,20,24,32,40,48,56,64])e[t]=t===0?`0px`:`${t/4}rem`;return e})(),typography:{fontFamily:{sans:`system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`,serif:`Georgia, Cambria, "Times New Roman", Times, serif`,mono:`ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace`},fontSize:{xs:`0.75rem`,sm:`0.875rem`,base:`1rem`,lg:`1.125rem`,xl:`1.25rem`,"2xl":`1.5rem`,"3xl":`1.875rem`,"4xl":`2.25rem`},fontWeight:{normal:`400`,medium:`500`,semibold:`600`,bold:`700`},lineHeight:{tight:`1.25`,normal:`1.5`,relaxed:`1.625`}},shadows:{none:`none`,sm:`0 1px 2px 0 rgb(0 0 0 / 0.05)`,md:`0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)`,lg:`0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)`,xl:`0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)`,"2xl":`0 25px 50px -12px rgb(0 0 0 / 0.25)`},borders:{none:`none`,sm:`1px solid`,md:`2px solid`,lg:`4px solid`},radius:{none:`0px`,sm:`0.125rem`,md:`0.375rem`,lg:`0.5rem`,xl:`0.75rem`,"2xl":`1rem`,full:`9999px`}},h={colors:{primary:`palette.colors.primary.500`,secondary:`palette.colors.secondary.500`,accent:`palette.colors.primary.600`,surface:`palette.colors.gray.50`,background:`palette.colors.gray.50`,container:`palette.colors.gray.50`,text:`palette.colors.gray.900`,textMuted:`palette.colors.gray.500`,textInverse:`palette.colors.gray.50`,border:`palette.colors.gray.200`,divider:`palette.colors.gray.200`,interactive:{default:`palette.colors.primary.600`,hover:`palette.colors.primary.700`,focus:`palette.colors.primary.600`,active:`palette.colors.primary.600`,disabled:`palette.colors.gray.300`},feedback:{success:`palette.colors.success.500`,warning:`palette.colors.warning.500`,error:`palette.colors.error.500`,info:`palette.colors.info.500`}},spacing:{xs:`palette.spacing.1`,sm:`palette.spacing.2`,md:`palette.spacing.4`,lg:`palette.spacing.6`,xl:`palette.spacing.8`,"2xl":`palette.spacing.10`},typography:{fontFamily:`palette.typography.fontFamily.sans`,fontSize:`palette.typography.fontSize.base`,fontWeight:`palette.typography.fontWeight.normal`,lineHeight:`palette.typography.lineHeight.normal`}},g={button:{primary:{background:`palette.colors.primary.500`,foreground:`palette.colors.primary.50`,borderRadius:`palette.radius.lg`,padding:`semantic.spacing.md`},secondary:{background:`semantic.colors.surface`,foreground:`semantic.colors.secondary`,borderRadius:`palette.radius.lg`,padding:`semantic.spacing.md`},ghost:{background:`transparent`,foreground:`semantic.colors.text`,borderRadius:`palette.radius.md`,padding:`semantic.spacing.sm`,hoverBackground:`rgba(0, 0, 0, 0.05)`}},input:{background:`semantic.colors.surface`,placeholder:`semantic.colors.textMuted`,borderRadius:`palette.radius.lg`,padding:`semantic.spacing.md`,focus:{border:`palette.colors.gray.400`,ring:`palette.colors.gray.400`}},launcher:{background:`semantic.colors.surface`,foreground:`semantic.colors.primary`,border:`semantic.colors.border`,size:`60px`,iconSize:`28px`,borderRadius:`palette.radius.full`,shadow:`palette.shadows.lg`},panel:{width:c,maxWidth:`none`,height:`min(640px, max(200px, calc(100vh - 64px)))`,maxHeight:`none`,borderRadius:`palette.radius.xl`,shadow:`palette.shadows.xl`,inset:`16px`,canvasBackground:`transparent`,modes:{floating:{border:`1px solid var(--persona-border)`,shadow:`palette.shadows.xl`,borderRadius:`palette.radius.xl`},inline:{border:`1px solid var(--persona-border)`,shadow:`none`,borderRadius:`palette.radius.xl`},docked:{border:`none`,shadow:`none`,borderRadius:`palette.radius.xl`},sidebar:{border:`none`,borderRadius:`0`},mobile:{border:`none`,shadow:`none`,borderRadius:`0`}}},header:{background:`palette.colors.primary.500`,foreground:`palette.colors.primary.50`,borderRadius:`palette.radius.xl palette.radius.xl 0 0`,padding:`20px 24px`,minimalPadding:`16px 24px`,iconBackground:`palette.colors.primary.600`,iconForeground:`palette.colors.primary.50`},message:{gap:`12px`,user:{background:`palette.colors.primary.500`,text:`palette.colors.primary.50`,borderRadius:`palette.radius.lg`,shadow:`palette.shadows.sm`},assistant:{background:`semantic.colors.container`,text:`semantic.colors.text`,borderRadius:`palette.radius.lg`,border:`semantic.colors.border`,shadow:`palette.shadows.sm`},border:`semantic.colors.border`},introCard:{background:`transparent`,borderRadius:`palette.radius.2xl`,padding:`semantic.spacing.lg`,shadow:`palette.shadows.none`},suggestion:{chip:{background:`semantic.colors.surface`,foreground:`semantic.colors.text`,border:`semantic.colors.border`,borderRadius:`palette.radius.full`,padding:`0.5rem 0.875rem`,gap:`0.5rem`,itemGap:`8px`,minHeight:`36px`,fontSize:`0.8125rem`,lineHeight:`1.25`,iconSize:`16px`,hoverBackground:`palette.colors.gray.100`,hoverBorder:`palette.colors.gray.300`,pressedBackground:`palette.colors.gray.200`,focusRing:`semantic.colors.interactive.focus`,disabledOpacity:`0.5`},card:{background:`semantic.colors.surface`,foreground:`semantic.colors.text`,border:`semantic.colors.border`,borderRadius:`palette.radius.xl`,padding:`1rem`,shadow:`palette.shadows.sm`,gap:`0.625rem`,itemGap:`8px`,minHeight:`72px`,fontSize:`0.875rem`,lineHeight:`1.35`,iconSize:`18px`,hoverBackground:`palette.colors.gray.100`,hoverBorder:`palette.colors.gray.300`,pressedBackground:`palette.colors.gray.200`,focusRing:`semantic.colors.interactive.focus`,disabledOpacity:`0.5`},list:{background:`transparent`,foreground:`semantic.colors.text`,border:`semantic.colors.border`,borderRadius:`palette.radius.md`,padding:`0.75rem`,gap:`0.625rem`,itemGap:`8px`,minHeight:`44px`,fontSize:`0.875rem`,lineHeight:`1.35`,iconSize:`17px`,hoverBackground:`palette.colors.gray.100`,hoverBorder:`palette.colors.gray.300`,pressedBackground:`palette.colors.gray.200`,focusRing:`semantic.colors.interactive.focus`,disabledOpacity:`0.5`}},toolBubble:{shadow:`palette.shadows.sm`},reasoningBubble:{shadow:`palette.shadows.sm`},composer:{shadow:`palette.shadows.none`},scrollbar:{thumb:`semantic.colors.border`,track:`transparent`},markdown:{inlineCode:{background:`palette.colors.gray.50`,foreground:`palette.colors.gray.900`},link:{foreground:`palette.colors.primary.600`},prose:{fontFamily:`inherit`},codeBlock:{background:`semantic.colors.container`,borderColor:`semantic.colors.border`,textColor:`inherit`,borderRadius:`palette.radius.md`},table:{headerBackground:`semantic.colors.container`,borderColor:`semantic.colors.border`},hr:{color:`semantic.colors.divider`},blockquote:{borderColor:`palette.colors.gray.900`,background:`transparent`,textColor:`palette.colors.gray.500`}},collapsibleWidget:{container:`palette.colors.gray.50`,surface:`semantic.colors.surface`,border:`semantic.colors.border`},voice:{recording:{indicator:`palette.colors.error.500`,background:`palette.colors.error.50`,border:`palette.colors.error.200`},processing:{icon:`palette.colors.primary.500`,background:`palette.colors.primary.50`},speaking:{icon:`palette.colors.success.500`}},approval:{requested:{background:`semantic.colors.surface`,border:`semantic.colors.border`,text:`palette.colors.gray.900`,shadow:`0 1px 2px 0 rgba(11, 11, 11, 0.06), 0 2px 8px 0 rgba(11, 11, 11, 0.04)`},approve:{background:`semantic.colors.primary`,foreground:`semantic.colors.textInverse`,borderRadius:`palette.radius.md`,padding:`semantic.spacing.sm`},deny:{background:`semantic.colors.container`,foreground:`semantic.colors.text`,borderRadius:`palette.radius.md`,padding:`semantic.spacing.sm`}},attachment:{image:{background:`palette.colors.gray.100`,border:`palette.colors.gray.200`}},eventStream:{badge:{flow:{background:`palette.colors.success.100`,foreground:`palette.colors.success.700`},step:{background:`palette.colors.primary.100`,foreground:`palette.colors.primary.700`},reasoning:{background:`palette.colors.warning.100`,foreground:`palette.colors.warning.700`},tool:{background:`palette.colors.purple.100`,foreground:`palette.colors.purple.800`},agent:{background:`palette.colors.teal.100`,foreground:`palette.colors.teal.800`},error:{background:`palette.colors.error.100`,foreground:`palette.colors.error.700`},default:{background:`palette.colors.gray.100`,foreground:`palette.colors.gray.600`}}},scrollToBottom:{background:`components.button.primary.background`,foreground:`components.button.primary.foreground`,border:`semantic.colors.primary`,size:`40px`,borderRadius:`palette.radius.full`,shadow:`palette.shadows.sm`,padding:`0.5rem 0.875rem`,gap:`0.5rem`,fontSize:`0.875rem`,iconSize:`14px`},artifact:{pane:{background:`semantic.colors.container`,toolbarBackground:`semantic.colors.container`}}},_=m.colors.gray,v={50:`#fafafa`,100:`#f5f5f5`,200:`#e5e5e5`,300:`#d4d4d4`,400:`#a3a3a3`,500:`#737373`,600:`#525252`,700:`#404040`,800:`#262626`,900:`#171717`,950:`#0a0a0a`},y={...m,colors:{...m.colors,gray:_}},b={...m,colors:{...m.colors,gray:v},radius:{none:`0px`,sm:`4px`,md:`8px`,lg:`12px`,xl:`16px`,"2xl":`24px`,full:`9999px`}},x=h,S={...h,colors:{...h.colors,surface:`#ffffff`,background:`#ffffff`,container:`semantic.colors.surface`,textInverse:`#ffffff`},typography:{...h.typography,fontSize:`14px`,lineHeight:`1.5`}},C=g,w={...g,scrollToBottom:{...g.scrollToBottom,background:`semantic.colors.surface`,foreground:`semantic.colors.text`,border:`semantic.colors.border`,size:`32px`},messageActions:{background:`transparent`,border:`none`,hoverBackground:`components.button.ghost.hoverBackground`,hoverForeground:`semantic.colors.text`,borderRadius:`palette.radius.md`},launcher:e,activity:{labelSize:`13px`,iconSize:`16px`,indent:`0px`,transcriptGap:`0px`,responseGap:`12px`,groupIndent:`16px`,groupGap:`2px`,groupPadding:`2px 0`,bodyPadding:`4px 0`,bodyFontWeight:`400`,sectionGap:`8px`,bodySurface:`transparent`},toolBubble:{shadow:`none`},reasoningBubble:{shadow:`none`},input:{...g.input,borderRadius:`palette.radius.full`},introCard:{...g.introCard,title:{fontSize:`22px`,fontWeight:`500`}},suggestion:{chip:{...g.suggestion.chip,fontWeight:`400`},card:{...g.suggestion.card,fontWeight:`400`},list:{...g.suggestion.list,fontWeight:`400`}},panel:{...g.panel,width:`min(400px, calc(100vw - 24px))`,height:`min(704px, calc(100dvh - 104px))`,borderRadius:`palette.radius.xl`},header:{...g.header,background:`semantic.colors.container`,foreground:`semantic.colors.text`,padding:`8px 8px 8px 16px`,minimalPadding:`8px 8px 8px 16px`,minHeight:`48px`,borderBottom:`none`,iconBackground:`transparent`,iconForeground:`semantic.colors.text`,iconScale:`1`,iconPadding:`auto`,controlSize:`28px`,controlIconSize:`16px`,controlStrokeWidth:`1.5`,actionIconForeground:`semantic.colors.textMuted`,controlBorderRadius:`8px`,controlHoverBackground:`color-mix(in srgb, var(--persona-text) 8%, transparent)`,controlHoverForeground:`semantic.colors.text`,controlFocusOutline:`2px solid color-mix(in srgb, var(--persona-text) 50%, transparent)`,title:{fontSize:`14px`,fontWeight:`500`,lineHeight:`1.5`}},message:{...g.message,gap:`20px`,fullscreenGap:`28px`,topFadeHeight:`18px`,user:{...g.message.user,background:`palette.colors.gray.100`,text:`semantic.colors.text`,borderRadius:`palette.radius.xl`,shadow:`none`,padding:`8px 14px`,fontSize:`14px`,lineHeight:`1.5`},assistant:{...g.message.assistant,background:`transparent`,border:`transparent`,borderWidth:`0px`,borderRadius:`0px`,shadow:`none`,padding:`0px`,fontSize:`14px`,lineHeight:`1.55`}},artifact:{...g.artifact,card:{background:`semantic.colors.surface`,border:`1px solid var(--persona-border)`,borderRadius:`palette.radius.lg`,hoverBackground:`components.button.ghost.hoverBackground`,hoverBorderColor:`semantic.colors.border`},inline:{background:`semantic.colors.surface`,border:`1px solid var(--persona-border)`,borderRadius:`palette.radius.lg`,chromeBackground:`semantic.colors.surface`,chromeBorder:`semantic.colors.border`,titleColor:`semantic.colors.text`,mutedColor:`semantic.colors.textMuted`}},composer:{...g.composer,padding:`8px`,fontSize:`15px`,lineHeight:`1.5`,controlSize:`32px`,controlIconSize:`20px`,expandedPadding:`12px 16px`,expandedBorderRadius:`24px`,sendIconSize:`18px`,sendButtonRadius:`9999px`,footerBorder:`none`,overflowMenu:{borderRadius:`12px`},overlayBand:`linear-gradient(to bottom, transparent, var(--persona-container) 24px)`,focusBorderColor:`color-mix(in srgb, var(--persona-text) 28%, var(--persona-border))`,focusRing:`1px solid color-mix(in srgb, var(--persona-text) 12%, transparent)`}},T=e=>f({future:e}),E=e=>T(e)===`v5`?{palette:b,semantic:S,components:w}:{palette:y,semantic:x,components:C},D={overview:`Start fresh with brand for a coordinated look, theme.semantic for shared design intent, and theme.components for exact exceptions. Tokens layer palette → semantic → components; darkTheme overrides inherited light theme inputs. Current V4 defaults apply unless future.v5Defaults is true. Content belongs in welcome/copy and suggestions; behavior and composition remain in features/providers/layout/launcher. Explicit legacy styles still win until reset; modern welcome content wins over old copy aliases. See docs/configuration.md for fresh recipes, mounted update policy and authored versus resolved exports.`,layers:{palette:{description:`Primitive design tokens. Override specific shades to change the entire widget feel.`,colors:{description:`7 color scales, each with shades 50 (lightest) to 950 (darkest). Override only the shades you need.`,scales:{gray:`Neutrals: backgrounds, text, borders. Key shades: 50 (lightest bg), 100 (secondary bg), 200 (borders), 500 (muted text), 900 (primary text).`,primary:`Brand color: buttons, links, interactive elements. Key shades: 500 (default), 600 (hover).`,accent:`Secondary highlight. Key shades: 500 (default), 600 (hover).`,secondary:`Tertiary color scale.`,success:`Positive feedback (default: green).`,warning:`Caution feedback (default: yellow).`,error:`Error/danger feedback (default: red).`}},radius:{description:`Border radius scale. Add custom keys like launcher, button.`,defaults:{none:`0px`,sm:`0.125rem`,md:`0.375rem`,lg:`0.5rem`,xl:`0.75rem`,"2xl":`1rem`,full:`9999px`}},typography:{fontFamily:`Three stacks: sans (system-ui), serif (Georgia), mono (ui-monospace). Override individual stack values.`,fontSize:`Scale: xs (0.75rem), sm (0.875rem), base (1rem), lg (1.125rem), xl (1.25rem), 2xl (1.5rem), 3xl (1.875rem), 4xl (2.25rem).`,fontWeight:`normal (400), medium (500), semibold (600), bold (700).`,lineHeight:`tight (1.25), normal (1.5), relaxed (1.625).`},shadows:`Scale: none, sm, md, lg, xl, 2xl. Values are CSS box-shadow strings.`,borders:`Scale: none, sm (1px solid), md (2px solid), lg (4px solid).`,spacing:`Scale: 0 (0px), 1 (0.25rem), 2 (0.5rem), 3 (0.75rem), 4 (1rem), 5 (1.25rem), 6 (1.5rem), 8 (2rem), 10 (2.5rem), 12 (3rem), 16-64.`},semantic:{description:`Design intent tokens. Auto-derived from palette by default. Override to redirect token resolution. Values are token reference strings like "palette.colors.primary.500".`,colors:{primary:`palette.colors.primary.500: Primary brand color.`,secondary:`palette.colors.gray.500: Secondary color.`,accent:`palette.colors.primary.600: Accent/interactive color.`,surface:`palette.colors.gray.50: Panel/card backgrounds.`,background:`palette.colors.gray.50: Page background.`,container:`palette.colors.gray.100: Container backgrounds.`,text:`palette.colors.gray.900: Primary text.`,textMuted:`palette.colors.gray.500: Muted/secondary text.`,textInverse:`palette.colors.gray.50: Text on dark backgrounds.`,border:`palette.colors.gray.200: Default border color.`,divider:`palette.colors.gray.200: Divider lines.`,interactive:{default:`palette.colors.primary.500`,hover:`palette.colors.primary.600`,focus:`palette.colors.primary.700`,active:`palette.colors.primary.800`,disabled:`palette.colors.gray.300`},feedback:{success:`palette.colors.success.500`,warning:`palette.colors.warning.500`,error:`palette.colors.error.500`,info:`palette.colors.primary.500`}},spacing:`xs (0.25rem), sm (0.5rem), md (1rem), lg (1.5rem), xl (2rem), 2xl (2.5rem).`,typography:`fontFamily, fontSize, fontWeight, lineHeight: reference palette typography tokens.`},components:{description:`UI element tokens. Rarely needed for basic theming. Override for fine-grained control. All values are token references or raw CSS strings.`,button:{description:`Variants primary, secondary, ghost; button.stop.background/foreground styles streaming stop while composer.send styles idle send.`,properties:`background, foreground, borderRadius, padding.`},input:{description:`Message input field.`,properties:`background, placeholder, borderRadius, padding, focus.border, focus.ring.`},launcher:{description:`Floating launcher button.`,properties:`size (60px), iconSize (28px), iconStrokeWidth (2, unitless glyph stroke weight; applies to registry-icon launchers, inert for emoji and image icons), borderRadius, shadow.`},panel:{description:`Chat panel container.`,properties:`width, maxWidth (440px), height (600px), maxHeight, borderRadius, shadow, inset (16px, gap around a detached panel), canvasBackground (transparent, fills the region behind a detached panel in docked and inline embed modes; a no-op in sidebar mode, where the gap stays click-through and the host page shows through like floating). inset and canvasBackground apply only when launcher.detachedPanel is true or artifacts.layout.paneAppearance is "detached".`},header:{description:`Chat panel header. background and foreground are the pair that colors the band: set those two and the rest of the header text follows.`,properties:`close and clear each expose independent size, iconSize, iconStrokeWidth, background, foreground, borderColor, borderWidth, borderRadius, padding; they fall through to shared header controls, leaving Messages and trailing actions untouched. background, foreground (anchors the header text; the title takes it directly, the subtitle and action icons take color-mix(in srgb, foreground 72%, background), and the border takes color-mix(in srgb, foreground 14%, background)), border, borderRadius, padding, iconBackground, iconForeground (the avatar tile, which keeps its own defaults and never derives), actionIconForeground, controlSize (32px, the box of every header icon button), controlIconSize (16px, the glyph inside it), controlStrokeWidth (1.5, unitless glyph stroke weight; sparse-viewBox glyphs such as the close X scale it by 0.7), shadow, borderBottom, minHeight (height floor for the header strip), title and subtitle (each fontFamily, fontSize, fontWeight, lineHeight, letterSpacing, color). Derivation only fills keys the theme leaves unset, so any explicit border, titleForeground, subtitleForeground, actionIconForeground, title.color, or subtitle.color wins. With no foreground either, each key falls back as before: the primary color for the title, the muted text color for the subtitle and action icons, the divider color for the border.`,legacy:`titleForeground and subtitleForeground are legacy aliases of header.title.color and header.subtitle.color. Both still work; the title/subtitle color wins when both are set, and either alias still outranks the foreground derivation.`},history:{description:`Messages (conversation history) chrome and motion. railHeader styles the rail sidebar top strip, which runs beside the widget header in rail presentation; overlay styles the floating rail a collapsed overlay rail opens on hover; motion times the surface entering and leaving.`,properties:`railHeader.background (defaults to the rail surface), railHeader.border (full border-bottom shorthand, default 0), railHeader.minHeight (defaults to components.header.minHeight, then 56px). Pin railHeader.minHeight and header.minHeight to the same value so both top strips read as one band. railHeader.title takes TextStyleTokens for the strip view title ("Messages"): color (defaults to the text color; the sidebar identity reads at full strength), fontFamily, fontSize (14px), fontWeight (600), lineHeight, letterSpacing. listHeading takes the same TextStyleTokens for the rail-only "Conversations" heading over the list block (14px/600 in the text color); groupHeading styles the muted sub-headers, both the date groups ("Today", "Yesterday") and rail nav section titles (rail 13px/500, muted text color). Every key of all three is pinned in the widget CSS, so host-page h2/h3 rules cannot restyle them. overlay.margin (8px, the gap from the trigger, the docked edge and the bottom), overlay.borderRadius (16px), overlay.shadow (0 12px 40px rgba(0, 0, 0, 0.25)), overlay.background (defaults to the rail surface). The floating rail keeps features.history.rail width and side, which are config, not tokens. motion.enterDurationMs (180) and motion.exitDurationMs (160) are bare millisecond numbers, 0 disables that leg; motion.enterEasing (cubic-bezier(0, 0, 0.2, 1)) and motion.exitEasing (cubic-bezier(0.4, 0, 1, 1)) take any CSS easing. Only the body animates, and prefers-reduced-motion always wins.`},tooltip:{description:`The portaled tooltip on icon controls, plus the muted shortcut hint chip after its label.`,properties:`background (#111827), foreground (#ffffff), hintForeground (rgba(255, 255, 255, 0.55)), borderRadius (palette.radius.sm), fontSize (12px), padding (6px 12px), shadow, maxWidth (min(320px, calc(100vw - 16px))), arrow (boolean, default true; false drops the caret). Unset keys keep the built-in dark look.`},message:{description:`Chat message bubbles.`,user:`background, text, borderRadius, shadow.`,assistant:`background, text, borderRadius, border (optional), shadow (optional).`},markdown:{description:`Markdown rendering in messages and artifact pane.`,properties:`inlineCode (background, foreground), link.foreground, prose.fontFamily, heading.h1/h2 (fontSize, fontWeight), codeBlock (background, borderColor, textColor, borderRadius: follows palette.radius.md), table (headerBackground, borderColor), hr.color, blockquote (borderColor, background, textColor).`},introCard:{description:`Welcome surface above the message list. Flat by default (transparent, no shadow).`,properties:`background, borderRadius, padding, shadow, border (full CSS shorthand, default none), title and subtitle (each fontFamily, fontSize, fontWeight, lineHeight, letterSpacing, color).`},suggestion:{description:`Starter prompt and follow-up suggestion chrome. Three variants: chip, card, list.`,properties:`background, foreground, border, borderRadius, padding, fontWeight, shadow, gap (icon to copy inside one item), itemGap (space between items, default 8px), minHeight, fontSize, lineHeight, iconSize, hoverBackground, hoverForeground, hoverBorder, pressedBackground, focusRing, disabledOpacity.`},voice:`control (size, iconSize, iconStrokeWidth, background, foreground, borderColor, borderWidth, borderRadius, padding) styles the idle mic independently. Legacy voiceRecognition.iconSize sets both box and glyph: migrate to both control.size and control.iconSize. recording (indicator, background, border), processing (icon, background, optional border), speaking (icon, optional background/border). Previously unused recording.border, processing.icon/background and speaking.icon only activate on explicit host theme input; materialized defaults do not recolor the mic.`,approval:`requested (background, border, text, shadow, titleColor, descriptionColor, reasonColor, parameters.background/foreground), approve (background, foreground), deny (background, foreground). Previously unused requested.text and approve/deny foreground only activate on explicit host input. Specific requested text colors fall through explicit requested.text to the renderer fallback. Built-in plugin and exported createApprovalBubble share these tokens, retaining their original absent-value deny colors.`,askUserQuestion:`sheet (background, border, shadow), pill (background, foreground, borderRadius, selectedBackground, selectedForeground), customInput.background. Local features.askUserQuestion.styles still wins; navigation, labels and slide timing remain feature config.`,attachment:`image (background, border).`,scrollToBottom:`Floating scroll-to-bottom affordance shared by transcript and event stream: background, foreground, border, size, borderRadius, shadow, padding, gap, fontSize, iconSize.`,toolBubble:`shadow, background, borderColor, borderWidth, borderRadius; header (background, foreground, padding), content (background, foreground, padding), codeBlock (background, foreground, borderColor), toggleForeground, labelForeground, loading (primary, secondary, duration). Applies to card and activity-row variants without changing their distinct defaults. CSS duration uses ms/s; legacy numeric milliseconds must convert explicitly. Theme content.padding precedes activity.bodyPadding/toolBubble.bodyPadding fallbacks; explicit legacy axes override only their axis.`,scrollbar:`Shared scrollbar appearance for every scroller: thumb (default semantic.colors.border), track (default transparent).`,turnActivity:`dividerColor (theme primary at 8% opacity by default) and dividerWidth (1px by default; 0px hides it) style only the divider beneath the Worked turn header.`,reasoningBubble:`shadow: reasoning/thinking row box-shadow.`,composer:`Independent send (size, iconSize, iconStrokeWidth, background, foreground, borderColor, borderWidth, borderRadius, padding) styles submit only; shared sendIconSize and sendButtonRadius are older fallbacks. Legacy icon-mode padding and text-mode background remain ignored; new theme padding/background can opt into either mode. button.stop colors still apply while stopped unless explicit legacy send colors win. Explicit legacy send colors retain the idle mic fallback; a parity migration sets matching voice.control colors too. Message input form: sendIconSize (send/stop glyph; explicit sendButton.iconSize wins), sendButtonRadius (icon-mode submit radius), footerBorder (footer top border shorthand; none hides it), shadow (box-shadow), borderColor, focusBorderColor (focused form border; V4 keeps the resting border, V5 uses a stronger neutral mix), focusRing (CSS outline shorthand, 1px offset; V4 none, V5 a thin neutral ring; preserves shadow and causes no layout shift), padding (form inset), expandedPadding and expandedBorderRadius (expanded card geometry; V5 12px 16px and 24px; explicit padding/input.borderRadius also override these), gap (textarea row to actions row; compact single-row spacing fallback), controlGap (horizontal action rail spacing, default 8px), editorMinHeight (minimum textarea height, default 24px), editorPadding (textarea inset, default 2px), suggestionsGap (space above below-composer starters), mode (independent mode-button fontSize, fontWeight, height, paddingInline, gap, borderRadius, borderColor, activeBorderColor, activeBackground), fontSize and lineHeight (textarea type), controlSize (edge of every icon control in the action row: attachment, mention, mic, action buttons, overflow trigger, icon-mode send; default 40px) and controlIconSize (glyph inside them, default 24px). Per-control config keys (sendButton.size, voiceRecognition.iconSize) override controlSize; coarse-pointer devices floor the hit area at 40px. overlayBand paints the band behind an overlaid footer (composer.placement: "overlay"). segmented styles a segmented mode-group track (trackBackground, trackBorderRadius, padding, activeBackground, activeForeground, activeShadow, inactiveForeground, itemPadding, gap, fontSize, lineHeight, fontWeight, minHeight); every key is optional and the stylesheet owns the defaults. modelPicker styles the model picker (background, hoverBackground, borderColor, borderRadius, labelColor, fontSize, fontWeight, height, minWidth and paddingInline on the closed control, which the native select and the popover trigger share; menuBackground, menuBorderRadius, rowHoverBackground, descriptionColor and suffixColor on the popover only), also all optional. overflowMenu styles the composer overflow "+" menu panel (background, borderColor, borderRadius, foreground, shadow), also all optional.`,artifact:`pane (background, toolbarBackground, padding, borderRadius, shadow, border, borderLeft), chat.shadow, split.outerRadius, toolbar (iconColor, toggleActiveBackground, toggleActiveBorderColor, toggleActiveColor, existing icon/copy chrome), tab (fadeSize, existing backgrounds/active states). border and borderLeft are full CSS shorthands; full border wins over left border. Geometry, resizing, appearance, chatSurface, presets and fade enablement remain layout config.`}},styleMigration:{precedence:`For supported style aliases: explicit legacy property > explicit component theme (active dark override) > existing shared/semantic/V4/V5 fallback. Materialized legacy defaults no longer defeat component styling. Behavior, hooks, custom icons, labels and presets remain config capabilities.`,updates:`Omitted patch keys retain value/origin. Own undefined clears a style override; clearing a parent clears its tracked descendants. Theme/scheme/default-version changes do not resurrect cleared inline styles. Persona merge helpers and supported copies retain origin; JSON-round-tripped/manual default-filled inputs have unknown origin and conservatively treat present values as explicit. Remove/reset legacy fields to expose theme styling.`,diagnostics:`Debug-only, once per widget/path; deferred installs diagnose when the full runtime opens, not from the tiny launcher. Warnings cover verified aliases only and do not imply runtime removal. No removal is scheduled in 4.x.`,retained:`Callbacks/renderers, custom icons, labels, accessibility, behavior, provider setup and layout geometry stay supported. suggestionChipsConfig.fontFamily is an accepted no-op, as are unifiedSplitChrome and unsupported messages/composer layout slots; no parity token is claimed. The three --cw-container/--cw-surface/--cw-border compatibility aliases remain; Markdown uses --persona-md-*.`},colorScheme:`"dark" merges darkTheme overrides on top of theme. "auto" detects system preference or <html class="dark">. "light" is default. colorScheme does NOT auto-invert colors: provide dark palette and semantic overrides yourself.`,plugins:{description:`Plugins transform theme tokens before resolution. Use with createTheme().`,available:{brandPlugin:`Auto-generates full color scales from a single brand hex: brandPlugin({ colors: { primary: "#7c3aed" } }).`,accessibilityPlugin:`Enhanced focus indicators and disabled states.`,highContrastPlugin:`Increased contrast for visual accessibility.`,reducedMotionPlugin:`Disables all animations (sets transitions to 0ms).`,animationsPlugin:`Adds transition and easing tokens.`},usage:`createTheme(themeOverrides, { plugins: [brandPlugin({ colors: { primary: "#7c3aed" } })] })`},widgetConfig:{description:`Non-theme config options on the widget config object that affect appearance. These are siblings of "theme" in the config, not nested inside it.`,launcher:{description:`Floating launcher button and panel positioning.`,properties:{enabled:`Show/hide the launcher button.`,title:`Header title text.`,subtitle:`Header subtitle text.`,position:`"bottom-right" | "bottom-left" | "top-right" | "top-left".`,width:`Chat panel width (CSS value).`,fullHeight:`Fill full height of container.`,mountMode:`"floating" | "docked".`,agentIconText:`Emoji/text for agent icon.`,border:`Border style for launcher button.`,shadow:`Box shadow for launcher button.`,collapsedMaxWidth:`Max-width for launcher pill when panel closed.`}},sendButton:{description:`Send button appearance.`,properties:`backgroundColor, textColor, borderWidth, borderColor, paddingX, paddingY, iconText, iconName, size.`},closeButton:{description:`Close button (on launcher config). Unset closeButtonSize means theme.components.header.controlSize owns the box.`,properties:`closeButtonSize, closeButtonColor, closeButtonBackgroundColor, closeButtonBorderWidth, closeButtonBorderColor, closeButtonBorderRadius.`},clearChat:{description:`Clear chat button (on launcher.clearChat config). Unset size means theme.components.header.controlSize owns the box.`,properties:`enabled, iconColor, backgroundColor, borderWidth, borderColor, borderRadius, size.`},scrollToBottom:{description:`Shared transcript + event-stream jump-to-latest affordance.`,properties:`features.scrollToBottom.enabled, features.scrollToBottom.iconName, features.scrollToBottom.label (empty string renders icon-only). Defaults: enabled=true, iconName="arrow-down", label="".`},toolCall:{description:`Tool call display styling, text templates, loading animations, and rendering hooks. Text templates support placeholders ({toolName}, {duration}) and inline formatting (~dim~, *italic*, **bold**). renderCollapsedSummary receives elapsed (static string) and createElapsedElement() (live-updating span) in its context.`,properties:`shadow, backgroundColor, borderColor, borderWidth, borderRadius, headerBackgroundColor, headerTextColor, headerPaddingX, headerPaddingY, contentBackgroundColor, contentTextColor, contentPaddingX, contentPaddingY, codeBlockBackgroundColor, codeBlockBorderColor, codeBlockTextColor, toggleTextColor, labelTextColor, activeTextTemplate, completeTextTemplate, loadingAnimationColor, loadingAnimationSecondaryColor, loadingAnimationDuration, renderCollapsedSummary, renderCollapsedPreview, renderGroupedSummary.`},reasoning:{description:`Reasoning/thinking row rendering hooks, text templates, and loading animations. Text templates support {duration} placeholder and inline formatting (~dim~, *italic*, **bold**). renderCollapsedSummary receives elapsed (static string) and createElapsedElement() (live-updating span) in its context.`,properties:`renderCollapsedSummary, renderCollapsedPreview, activeTextTemplate, completeTextTemplate, loadingAnimationColor, loadingAnimationSecondaryColor, loadingAnimationDuration.`},approval:{description:`Tool approval card styling and behavior. Neutral surface card; the primary action anchors to the brand --persona-primary token. Set to false to disable. Set enableAlwaysAllow: true to add the split "Always allow / Allow once" control (needs a backend to persist the policy via onDecision's remember).`,properties:`enableAlwaysAllow, detailsDisplay ("collapsed" | "expanded" | "hidden"), showDetailsLabel, hideDetailsLabel, backgroundColor, borderColor, titleColor, descriptionColor, reasonColor, reasonLabel, approveButtonColor, approveButtonTextColor, denyButtonColor, denyButtonTextColor, parameterBackgroundColor, parameterTextColor, approveLabel, denyLabel, formatDescription. (title no longer renders in the default card; use formatDescription to customize the summary.)`},copy:{description:`Widget text content.`,properties:`inputPlaceholder, sendButtonLabel, stopButtonLabel. (showWelcomeCard, welcomeTitle, welcomeSubtitle are deprecated aliases of the welcome namespace.)`},voiceRecognition:{description:`Voice input configuration.`,properties:`enabled, pauseDuration, iconColor, backgroundColor.`},textToSpeech:{description:`Text-to-speech for assistant messages.`,properties:`enabled, provider ("browser" | "runtype"), browserFallback, voice, rate, pitch.`},suggestions:{description:`Rich starter and follow-up suggestion surfaces. Strings remain valid item shorthand.`,properties:`starters.items, starters.variant ("card" | "chip" | "list"), starters.placement ("auto" | "welcome" | "composer" | "below-composer"), starters.behavior ("send" | "fill"), starters.overflow ("scroll" | "wrap"), starters.maxItems, followUps.enabled, followUps.expose, followUps.variant, followUps.placement ("auto" | "after-message" | "composer"), followUps.behavior, followUps.overflow ("scroll" | "wrap"), followUps.maxItems.`},welcome:{description:`First-open welcome surface. Supersedes copy.welcomeTitle / welcomeSubtitle / showWelcomeCard.`,properties:`title, subtitle, icon ({ type: "lucide", name } | { type: "image", url, alt } | { type: "text", text } | function), variant ("card" | "hero" | "none"), dismiss ("never" | "on-first-message"), message (display-only greeting bubble, ignored under "hero").`},suggestionChips:`Deprecated string[] shorthand for starter prompts. Prefer suggestions.starters.items.`,messageActions:{description:`Message action buttons (copy, upvote, downvote, read aloud, regenerate, edit, quote).`,properties:`enabled, showCopy, showUpvote, showDownvote, showReadAloud, showRegenerate (final retryable assistant turn only), showEdit (text-only user messages only), showQuote, visibility ("hover" | "always"), align ("left" | "center" | "right"), layout ("pill-inside" | "row-inside").`},attachments:{description:`File attachment configuration.`,properties:`enabled, allowedTypes (string[]), maxFileSize (bytes), maxFiles, buttonIconName, buttonTooltipText.`},markdown:{description:`Markdown rendering configuration.`,properties:`options (gfm, breaks, headerIds, headerPrefix, pedantic, mangle, silent), disableDefaultStyles.`},layout:{description:`Layout configuration.`,showHeader:`boolean: show/hide the header section entirely.`,showFooter:`boolean: show/hide the footer/composer section entirely.`,contentMaxWidth:`CSS width value for centering content (e.g. "720px", "90ch").`,header:`"default" | "minimal". Options: showIcon, showTitle, showSubtitle, showCloseButton, showClearChat.`,messages:`"bubble" | "flat" | "minimal". Options: groupConsecutive, avatar (show, position, userAvatar, assistantAvatar), timestamp (show, position).`},statusIndicator:{description:`Status text shown below the composer.`,properties:{visible:`Show/hide the status indicator.`,align:`"left" | "center" | "right": text alignment (default: "right").`,idleText:`Text shown when idle (default: "Online").`,idleLink:`URL to open when idle text is clicked (wraps text in a link).`,connectingText:`Text shown while connecting (default: "Connecting…").`,connectedText:`Text shown while streaming (default: "Streaming…").`,errorText:`Text shown on error (default: "Offline").`}},features:{description:`Feature flags.`,properties:`showReasoning, showToolCalls, toolCallDisplay (collapsedMode, activePreview, activeMinHeight, previewMaxLines, grouped, groupedMode, groupAppearance, groupSummary, groupSummaryMaxItems, groupBoundary, groupIconVisibility, expandable, loadingAnimation), reasoningDisplay (activePreview, activeMinHeight, previewMaxLines, expandable, loadingAnimation), artifacts (sidebar config).`}}},O={independentControls:{description:`Separate close, clear, submit and mic chrome; remove legacy style overrides first. Mic box and glyph sizes are intentionally independent.`,theme:{components:{header:{close:{size:`32px`,foreground:`#b91c1c`},clear:{size:`36px`,foreground:`#1d4ed8`}},composer:{send:{size:`44px`,iconSize:`20px`,background:`#111827`,foreground:`#ffffff`}},voice:{control:{size:`44px`,iconSize:`22px`,foreground:`#111827`,background:`transparent`},recording:{indicator:`#ffffff`,background:`#dc2626`,border:`#dc2626`},processing:{icon:`#1d4ed8`,background:`#eff6ff`},speaking:{icon:`#15803d`,background:`#f0fdf4`}}}}},scopedSurfaces:{description:`Tool, approval/question, and artifact styles stay inside their component boundaries. CSS timing/shorthand values preserve their units.`,theme:{components:{toolBubble:{background:`#f8fafc`,borderColor:`#cbd5e1`,borderWidth:`1px`,header:{foreground:`#0f172a`,padding:`6px 12px`},content:{padding:`12px`},loading:{duration:`1600ms`}},approval:{requested:{descriptionColor:`#0f172a`,parameters:{background:`#f1f5f9`,foreground:`#334155`}},approve:{foreground:`#ffffff`}},askUserQuestion:{sheet:{background:`#ffffff`,shadow:`none`},pill:{selectedBackground:`#111827`,selectedForeground:`#ffffff`}},artifact:{pane:{padding:`16px`,borderRadius:`12px`,border:`1px solid #cbd5e1`},chat:{shadow:`none`},split:{outerRadius:`12px`},toolbar:{iconColor:`#334155`,toggleActiveColor:`#0f172a`},tab:{fadeSize:`24px`}}}}},darkIndigo:{description:`Dark mode with indigo accent: override grays for dark backgrounds and semantic tokens for inverted text/surface`,theme:{palette:{colors:{primary:{500:`#6366f1`,600:`#4f46e5`},gray:{50:`#f1f5f9`,100:`#1e293b`,200:`#334155`,500:`#94a3b8`,900:`#0f172a`,950:`#020617`}}},semantic:{colors:{surface:`palette.colors.gray.900`,background:`palette.colors.gray.900`,container:`palette.colors.gray.100`,text:`palette.colors.gray.50`,textMuted:`palette.colors.gray.500`,textInverse:`palette.colors.gray.900`,border:`palette.colors.gray.200`}}}},warmVintage:{description:`Warm sepia tones with serif font and subtle radius`,theme:{palette:{colors:{primary:{500:`#b45309`,600:`#92400e`},gray:{50:`#fef3c7`,100:`#fef9c3`,200:`#d6d3d1`,500:`#78716c`,900:`#44403c`}},radius:{sm:`0.125rem`,md:`0.25rem`,lg:`0.375rem`},typography:{fontFamily:{sans:`Georgia, Cambria, "Times New Roman", Times, serif`}}}}},neonCyberpunk:{description:`Neon on dark with monospace font: full semantic override for dark background`,theme:{palette:{colors:{primary:{500:`#f0abfc`,600:`#e879f9`},accent:{500:`#22d3ee`,600:`#06b6d4`},gray:{50:`#f0abfc`,100:`#1e0a3c`,200:`#3b0764`,500:`#c084fc`,900:`#0c0a1a`,950:`#050412`}},radius:{sm:`0`,md:`0.25rem`,lg:`0.375rem`},typography:{fontFamily:{sans:`ui-monospace, SFMono-Regular, Menlo, monospace`}}},semantic:{colors:{surface:`palette.colors.gray.900`,background:`palette.colors.gray.950`,container:`palette.colors.gray.100`,text:`palette.colors.gray.50`,textMuted:`palette.colors.gray.500`,border:`palette.colors.gray.200`}}}},cleanRounded:{description:`Clean light theme with large radius and panel styling`,theme:{palette:{radius:{sm:`6px`,md:`8px`,lg:`12px`,launcher:`50px`,button:`8px`}},components:{panel:{borderRadius:`16px`,shadow:`palette.shadows.2xl`}}}}};function k(e){let t=E(e),n=p({future:e});return{tokenDocs:D,defaultsVersion:f({future:e}),themeDefaultsVersion:T(e),defaultColorPalette:t.palette.colors,defaultRadius:t.palette.radius,defaultLauncher:n.launcher,examples:O,sdkPresets:[`shop`,`minimal`,`fullscreen`]}}export{O as THEME_EXAMPLES,D as THEME_TOKEN_DOCS,k as getThemeReference};
|
|
1
|
+
const e={background:`semantic.colors.primary`,foreground:`semantic.colors.textInverse`,border:`transparent`,size:`48px`,iconSize:`24px`,borderRadius:`palette.radius.full`,shadow:`0 8px 24px rgba(0,0,0,.16)`,offset:`20px`},t={collapsedMode:`tool-call`,activePreview:!1,grouped:!1,groupedMode:`stack`,groupBoundary:`adjacent`,previewMaxLines:3,expandable:!0,loadingAnimation:`none`},n={activePreview:!1,previewMaxLines:3,expandable:!0,loadingAnimation:`none`},r={layout:`row`,variant:`row`,iconVisibility:`active`,autoExpand:!1,grouped:!0,groupedMode:`collapsible`,groupAppearance:`inset`,loadingAnimation:`shimmer`},i={appearance:`inset`,layout:`row`,variant:`row`,iconVisibility:`active`,autoExpand:!1,loadingAnimation:`shimmer`},a=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function o(e,t){if(!e)return t;if(!t)return e;let n={...e};for(let[e,r]of Object.entries(t)){let t=n[e];n[e]=a(t)&&a(r)?o(t,r):r}return n}const s={resolvedDisplay:`row`,primaryAction:`allow-once`,keyboardShortcuts:`focused`},c=`min(440px, calc(100vw - 24px))`,l={apiUrl:`https://api.runtype.com/api/chat/dispatch`,clientToken:void 0,agentId:void 0,target:void 0,theme:void 0,darkTheme:void 0,colorScheme:`light`,tooltip:{delayMs:400,skipDelayMs:300},launcher:{enabled:!0,mountMode:`floating`,dock:{side:`right`,width:`420px`},title:`Chat Assistant`,subtitle:`Here to help you get answers fast`,agentIconText:`💬`,agentIconName:`bot`,headerIconName:`bot`,position:`bottom-right`,width:c,heightOffset:0,autoExpand:!1,callToActionIconHidden:!1,agentIconSize:`40px`,headerIconSize:`40px`,closeButtonPaddingX:`0px`,closeButtonPaddingY:`0px`,callToActionIconName:`arrow-up-right`,callToActionIconText:``,callToActionIconSize:`32px`,callToActionIconPadding:`5px`,callToActionIconColor:void 0,callToActionIconBackgroundColor:void 0,closeButtonBackgroundColor:`transparent`,clearChat:{backgroundColor:`transparent`,borderColor:`transparent`,enabled:!0,placement:`inline`,iconName:`refresh-cw`,showTooltip:!0,tooltipText:`Clear chat`,paddingX:`0px`,paddingY:`0px`},headerIconHidden:!1,border:void 0,shadow:`0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)`},copy:{inputPlaceholder:`How can I help...`,sendButtonLabel:`Send`},sendButton:{borderWidth:`0px`,paddingX:`12px`,paddingY:`10px`,borderColor:void 0,useIcon:!0,iconText:`↑`,showTooltip:!0,tooltipText:`Send message`,iconName:`send`},statusIndicator:{visible:!0,idleText:`Online`,connectingText:`Connecting…`,connectedText:`Streaming…`,errorText:`Offline`},voiceRecognition:{enabled:!0,pauseDuration:2e3,iconName:`mic`,borderWidth:`0px`,iconColor:void 0,backgroundColor:`transparent`,borderColor:`transparent`,recordingIconColor:void 0,recordingBackgroundColor:void 0,recordingBorderColor:`transparent`,showTooltip:!0,tooltipText:`Start voice recognition`},features:{showReasoning:!0,showToolCalls:!0,scrollToBottom:{enabled:!0,iconName:`arrow-down`,label:``,streamingIndicator:`arrow`,scrollBehavior:`instant`,scrollDurationMs:220,transition:`none`},scrollBehavior:{mode:`anchor-top`,anchorTopOffset:16,showActivityWhilePinned:!0},toolCallDisplay:t,reasoningDisplay:n,streamAnimation:{type:`none`,placeholder:`none`,speed:120,duration:1800},askUserQuestion:{enabled:!0,slideInMs:180,freeTextLabel:`Other…`,freeTextPlaceholder:`Type your answer…`,submitLabel:`Send`},history:{enabled:!1,presentation:`panel`,showScopeStatus:!0,showDelete:!0,showDeleteAll:!0}},suggestionChips:[`Show me what you can help with`,`Walk me through getting started`,`Answer a question about this page`],suggestionChipsConfig:{fontFamily:`sans-serif`,fontWeight:`500`,paddingX:`12px`,paddingY:`6px`},layout:{header:{layout:`default`,showIcon:!0,showTitle:!0,showSubtitle:!0,showCloseButton:!0,showClearChat:!0},messages:{layout:`bubble`,avatar:{show:!1,position:`left`},timestamp:{show:!1,position:`below`},groupConsecutive:!1},slots:{}},markdown:{options:{gfm:!0,breaks:!0},disableDefaultStyles:!1},messageActions:{enabled:!0,showCopy:!0,showUpvote:!1,showDownvote:!1,visibility:`hover`,align:`right`,layout:`pill-inside`},debug:!1},u={},d={colorScheme:`light`,errorDisplay:`block`,messageActions:{visibility:void 0},suggestionChipsConfig:{fontWeight:void 0},approval:s,loadingIndicator:{variant:`label`},launcher:{variant:`circle`,width:`min(400px, calc(100vw - 24px))`,headerIconSize:`20px`},features:{artifacts:{enabled:!0},scrollToBottom:{streamingIndicator:`dots`,transition:`fade`,scrollBehavior:`smooth`},userMessageCollapse:{enabled:!0},toolCallDisplay:r,reasoningDisplay:i},composer:{layout:`single-row`,placement:`overlay`},sendButton:{iconName:`arrow-up`},statusIndicator:{mode:`transient`},layout:{contentMaxWidth:`768px`,topFade:!0,header:{showSubtitle:!1},messages:{assistant:{width:`full`}}}};function f(e){return e?.future?.v5Defaults===!0?`v5`:`v4`}function p(e){let t=f(e)===`v5`?d:u;return o(l,t)}p();const m={colors:{primary:{50:`#ffffff`,100:`#f5f5f5`,200:`#d4d4d4`,300:`#a3a3a3`,400:`#737373`,500:`#171717`,600:`#0f0f0f`,700:`#0a0a0a`,800:`#050505`,900:`#030303`,950:`#000000`},secondary:{50:`#f5f3ff`,100:`#ede9fe`,200:`#ddd6fe`,300:`#c4b5fd`,400:`#a78bfa`,500:`#8b5cf6`,600:`#7c3aed`,700:`#6d28d9`,800:`#5b21b6`,900:`#4c1d95`,950:`#2e1065`},accent:{50:`#ecfeff`,100:`#cffafe`,200:`#a5f3fc`,300:`#67e8f9`,400:`#22d3ee`,500:`#06b6d4`,600:`#0891b2`,700:`#0e7490`,800:`#155e75`,900:`#164e63`,950:`#083344`},gray:{50:`#f9fafb`,100:`#f3f4f6`,200:`#e5e7eb`,300:`#d1d5db`,400:`#9ca3af`,500:`#6b7280`,600:`#4b5563`,700:`#374151`,800:`#1f2937`,900:`#111827`,950:`#030712`},success:{50:`#f0fdf4`,100:`#dcfce7`,200:`#bbf7d0`,300:`#86efac`,400:`#4ade80`,500:`#22c55e`,600:`#16a34a`,700:`#15803d`,800:`#166534`,900:`#14532d`},warning:{50:`#fefce8`,100:`#fef9c3`,200:`#fef08a`,300:`#fde047`,400:`#facc15`,500:`#eab308`,600:`#ca8a04`,700:`#a16207`,800:`#854d0e`,900:`#713f12`},error:{50:`#fef2f2`,100:`#fee2e2`,200:`#fecaca`,300:`#fca5a5`,400:`#f87171`,500:`#ef4444`,600:`#dc2626`,700:`#b91c1c`,800:`#991b1b`,900:`#7f1d1d`},info:{50:`#eff6ff`,100:`#dbeafe`,200:`#bfdbfe`,300:`#93c5fd`,400:`#60a5fa`,500:`#3b82f6`,600:`#2563eb`,700:`#1d4ed8`,800:`#1e40af`,900:`#1e3a8a`,950:`#172554`},purple:{50:`#faf5ff`,100:`#f3e8ff`,200:`#e9d5ff`,300:`#d8b4fe`,400:`#c084fc`,500:`#a855f7`,600:`#9333ea`,700:`#7e22ce`,800:`#6b21a8`,900:`#581c87`,950:`#3b0764`},teal:{50:`#f0fdfa`,100:`#ccfbf1`,200:`#99f6e4`,300:`#5eead4`,400:`#2dd4bf`,500:`#14b8a6`,600:`#0d9488`,700:`#0f766e`,800:`#115e59`,900:`#134e4a`,950:`#042f2e`}},spacing:(()=>{let e={};for(let t of[0,1,2,3,4,5,6,8,10,12,16,20,24,32,40,48,56,64])e[t]=t===0?`0px`:`${t/4}rem`;return e})(),typography:{fontFamily:{sans:`system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`,serif:`Georgia, Cambria, "Times New Roman", Times, serif`,mono:`ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace`},fontSize:{xs:`0.75rem`,sm:`0.875rem`,base:`1rem`,lg:`1.125rem`,xl:`1.25rem`,"2xl":`1.5rem`,"3xl":`1.875rem`,"4xl":`2.25rem`},fontWeight:{normal:`400`,medium:`500`,semibold:`600`,bold:`700`},lineHeight:{tight:`1.25`,normal:`1.5`,relaxed:`1.625`}},shadows:{none:`none`,sm:`0 1px 2px 0 rgb(0 0 0 / 0.05)`,md:`0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)`,lg:`0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)`,xl:`0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)`,"2xl":`0 25px 50px -12px rgb(0 0 0 / 0.25)`},borders:{none:`none`,sm:`1px solid`,md:`2px solid`,lg:`4px solid`},radius:{none:`0px`,sm:`0.125rem`,md:`0.375rem`,lg:`0.5rem`,xl:`0.75rem`,"2xl":`1rem`,full:`9999px`}},h={colors:{primary:`palette.colors.primary.500`,secondary:`palette.colors.secondary.500`,accent:`palette.colors.primary.600`,surface:`palette.colors.gray.50`,background:`palette.colors.gray.50`,container:`palette.colors.gray.50`,text:`palette.colors.gray.900`,textMuted:`palette.colors.gray.500`,textInverse:`palette.colors.gray.50`,border:`palette.colors.gray.200`,divider:`palette.colors.gray.200`,interactive:{default:`palette.colors.primary.600`,hover:`palette.colors.primary.700`,focus:`palette.colors.primary.600`,active:`palette.colors.primary.600`,disabled:`palette.colors.gray.300`},feedback:{success:`palette.colors.success.500`,warning:`palette.colors.warning.500`,error:`palette.colors.error.500`,info:`palette.colors.info.500`}},spacing:{xs:`palette.spacing.1`,sm:`palette.spacing.2`,md:`palette.spacing.4`,lg:`palette.spacing.6`,xl:`palette.spacing.8`,"2xl":`palette.spacing.10`},typography:{fontFamily:`palette.typography.fontFamily.sans`,fontSize:`palette.typography.fontSize.base`,fontWeight:`palette.typography.fontWeight.normal`,lineHeight:`palette.typography.lineHeight.normal`}},g={button:{primary:{background:`palette.colors.primary.500`,foreground:`palette.colors.primary.50`,borderRadius:`palette.radius.lg`,padding:`semantic.spacing.md`},secondary:{background:`semantic.colors.surface`,foreground:`semantic.colors.secondary`,borderRadius:`palette.radius.lg`,padding:`semantic.spacing.md`},ghost:{background:`transparent`,foreground:`semantic.colors.text`,borderRadius:`palette.radius.md`,padding:`semantic.spacing.sm`,hoverBackground:`rgba(0, 0, 0, 0.05)`}},input:{background:`semantic.colors.surface`,placeholder:`semantic.colors.textMuted`,borderRadius:`palette.radius.lg`,padding:`semantic.spacing.md`,focus:{border:`palette.colors.gray.400`,ring:`palette.colors.gray.400`}},launcher:{background:`semantic.colors.surface`,foreground:`semantic.colors.primary`,border:`semantic.colors.border`,size:`60px`,iconSize:`28px`,borderRadius:`palette.radius.full`,shadow:`palette.shadows.lg`},panel:{width:c,maxWidth:`none`,height:`min(640px, max(200px, calc(100vh - 64px)))`,maxHeight:`none`,borderRadius:`palette.radius.xl`,shadow:`palette.shadows.xl`,inset:`16px`,canvasBackground:`transparent`,modes:{floating:{border:`1px solid var(--persona-border)`,shadow:`palette.shadows.xl`,borderRadius:`palette.radius.xl`},inline:{border:`1px solid var(--persona-border)`,shadow:`none`,borderRadius:`palette.radius.xl`},docked:{border:`none`,shadow:`none`,borderRadius:`palette.radius.xl`},sidebar:{border:`none`,borderRadius:`0`},mobile:{border:`none`,shadow:`none`,borderRadius:`0`}}},header:{background:`palette.colors.primary.500`,foreground:`palette.colors.primary.50`,borderRadius:`palette.radius.xl palette.radius.xl 0 0`,padding:`20px 24px`,minimalPadding:`16px 24px`,iconBackground:`palette.colors.primary.600`,iconForeground:`palette.colors.primary.50`},message:{gap:`12px`,user:{background:`palette.colors.primary.500`,text:`palette.colors.primary.50`,borderRadius:`palette.radius.lg`,shadow:`palette.shadows.sm`},assistant:{background:`semantic.colors.container`,text:`semantic.colors.text`,borderRadius:`palette.radius.lg`,border:`semantic.colors.border`,shadow:`palette.shadows.sm`},operator:{background:`color-mix(in srgb, var(--persona-primary) 6%, var(--persona-container))`,text:`semantic.colors.text`,borderRadius:`palette.radius.lg`,border:`color-mix(in srgb, var(--persona-primary) 20%, var(--persona-container))`,borderWidth:`1px`,shadow:`palette.shadows.sm`},border:`semantic.colors.border`},introCard:{background:`transparent`,borderRadius:`palette.radius.2xl`,padding:`semantic.spacing.lg`,shadow:`palette.shadows.none`},suggestion:{chip:{background:`semantic.colors.surface`,foreground:`semantic.colors.text`,border:`semantic.colors.border`,borderRadius:`palette.radius.full`,padding:`0.5rem 0.875rem`,gap:`0.5rem`,itemGap:`8px`,minHeight:`36px`,fontSize:`0.8125rem`,lineHeight:`1.25`,iconSize:`16px`,hoverBackground:`palette.colors.gray.100`,hoverBorder:`palette.colors.gray.300`,pressedBackground:`palette.colors.gray.200`,focusRing:`semantic.colors.interactive.focus`,disabledOpacity:`0.5`},card:{background:`semantic.colors.surface`,foreground:`semantic.colors.text`,border:`semantic.colors.border`,borderRadius:`palette.radius.xl`,padding:`1rem`,shadow:`palette.shadows.sm`,gap:`0.625rem`,itemGap:`8px`,minHeight:`72px`,fontSize:`0.875rem`,lineHeight:`1.35`,iconSize:`18px`,hoverBackground:`palette.colors.gray.100`,hoverBorder:`palette.colors.gray.300`,pressedBackground:`palette.colors.gray.200`,focusRing:`semantic.colors.interactive.focus`,disabledOpacity:`0.5`},list:{background:`transparent`,foreground:`semantic.colors.text`,border:`semantic.colors.border`,borderRadius:`palette.radius.md`,padding:`0.75rem`,gap:`0.625rem`,itemGap:`8px`,minHeight:`44px`,fontSize:`0.875rem`,lineHeight:`1.35`,iconSize:`17px`,hoverBackground:`palette.colors.gray.100`,hoverBorder:`palette.colors.gray.300`,pressedBackground:`palette.colors.gray.200`,focusRing:`semantic.colors.interactive.focus`,disabledOpacity:`0.5`}},toolBubble:{shadow:`palette.shadows.sm`},reasoningBubble:{shadow:`palette.shadows.sm`},composer:{shadow:`palette.shadows.none`},scrollbar:{thumb:`semantic.colors.border`,track:`transparent`},markdown:{inlineCode:{background:`palette.colors.gray.50`,foreground:`palette.colors.gray.900`},link:{foreground:`palette.colors.primary.600`},prose:{fontFamily:`inherit`},codeBlock:{background:`semantic.colors.container`,borderColor:`semantic.colors.border`,textColor:`inherit`,borderRadius:`palette.radius.md`},table:{headerBackground:`semantic.colors.container`,borderColor:`semantic.colors.border`},hr:{color:`semantic.colors.divider`},blockquote:{borderColor:`palette.colors.gray.900`,background:`transparent`,textColor:`palette.colors.gray.500`}},collapsibleWidget:{container:`palette.colors.gray.50`,surface:`semantic.colors.surface`,border:`semantic.colors.border`},voice:{recording:{indicator:`palette.colors.error.500`,background:`palette.colors.error.50`,border:`palette.colors.error.200`},processing:{icon:`palette.colors.primary.500`,background:`palette.colors.primary.50`},speaking:{icon:`palette.colors.success.500`}},approval:{requested:{background:`semantic.colors.surface`,border:`semantic.colors.border`,text:`palette.colors.gray.900`,shadow:`0 1px 2px 0 rgba(11, 11, 11, 0.06), 0 2px 8px 0 rgba(11, 11, 11, 0.04)`},approve:{background:`semantic.colors.primary`,foreground:`semantic.colors.textInverse`,borderRadius:`palette.radius.md`,padding:`semantic.spacing.sm`},deny:{background:`semantic.colors.container`,foreground:`semantic.colors.text`,borderRadius:`palette.radius.md`,padding:`semantic.spacing.sm`}},attachment:{image:{background:`palette.colors.gray.100`,border:`palette.colors.gray.200`}},eventStream:{badge:{flow:{background:`palette.colors.success.100`,foreground:`palette.colors.success.700`},step:{background:`palette.colors.primary.100`,foreground:`palette.colors.primary.700`},reasoning:{background:`palette.colors.warning.100`,foreground:`palette.colors.warning.700`},tool:{background:`palette.colors.purple.100`,foreground:`palette.colors.purple.800`},agent:{background:`palette.colors.teal.100`,foreground:`palette.colors.teal.800`},error:{background:`palette.colors.error.100`,foreground:`palette.colors.error.700`},default:{background:`palette.colors.gray.100`,foreground:`palette.colors.gray.600`}}},scrollToBottom:{background:`components.button.primary.background`,foreground:`components.button.primary.foreground`,border:`semantic.colors.primary`,size:`40px`,borderRadius:`palette.radius.full`,shadow:`palette.shadows.sm`,padding:`0.5rem 0.875rem`,gap:`0.5rem`,fontSize:`0.875rem`,iconSize:`14px`},artifact:{pane:{background:`semantic.colors.container`,toolbarBackground:`semantic.colors.container`}}},_=m.colors.gray,v={50:`#fafafa`,100:`#f5f5f5`,200:`#e5e5e5`,300:`#d4d4d4`,400:`#a3a3a3`,500:`#737373`,600:`#525252`,700:`#404040`,800:`#262626`,900:`#171717`,950:`#0a0a0a`},y={...m,colors:{...m.colors,gray:_}},b={...m,colors:{...m.colors,gray:v},radius:{none:`0px`,sm:`4px`,md:`8px`,lg:`12px`,xl:`16px`,"2xl":`24px`,full:`9999px`}},x=h,S={...h,colors:{...h.colors,surface:`#ffffff`,background:`#ffffff`,container:`semantic.colors.surface`,textInverse:`#ffffff`},typography:{...h.typography,fontSize:`14px`,lineHeight:`1.5`}},C=g,w={...g,scrollToBottom:{...g.scrollToBottom,background:`semantic.colors.surface`,foreground:`semantic.colors.text`,border:`semantic.colors.border`,size:`32px`},messageActions:{background:`transparent`,border:`none`,hoverBackground:`components.button.ghost.hoverBackground`,hoverForeground:`semantic.colors.text`,borderRadius:`palette.radius.md`},launcher:e,activity:{labelSize:`13px`,iconSize:`16px`,indent:`0px`,transcriptGap:`0px`,responseGap:`12px`,groupIndent:`16px`,groupGap:`2px`,groupPadding:`2px 0`,bodyPadding:`4px 0`,bodyFontWeight:`400`,sectionGap:`8px`,bodySurface:`transparent`},toolBubble:{shadow:`none`},reasoningBubble:{shadow:`none`},input:{...g.input,borderRadius:`palette.radius.full`},introCard:{...g.introCard,title:{fontSize:`22px`,fontWeight:`500`}},suggestion:{chip:{...g.suggestion.chip,fontWeight:`400`},card:{...g.suggestion.card,fontWeight:`400`},list:{...g.suggestion.list,fontWeight:`400`}},panel:{...g.panel,width:`min(400px, calc(100vw - 24px))`,height:`min(704px, calc(100dvh - 104px))`,borderRadius:`palette.radius.xl`},header:{...g.header,background:`semantic.colors.container`,foreground:`semantic.colors.text`,padding:`8px 8px 8px 16px`,minimalPadding:`8px 8px 8px 16px`,minHeight:`48px`,borderBottom:`none`,iconBackground:`transparent`,iconForeground:`semantic.colors.text`,iconScale:`1`,iconPadding:`auto`,controlSize:`28px`,controlIconSize:`16px`,controlStrokeWidth:`1.5`,actionIconForeground:`semantic.colors.textMuted`,controlBorderRadius:`8px`,controlHoverBackground:`color-mix(in srgb, var(--persona-text) 8%, transparent)`,controlHoverForeground:`semantic.colors.text`,controlFocusOutline:`2px solid color-mix(in srgb, var(--persona-text) 50%, transparent)`,title:{fontSize:`14px`,fontWeight:`500`,lineHeight:`1.5`}},message:{...g.message,gap:`20px`,fullscreenGap:`28px`,topFadeHeight:`18px`,user:{...g.message.user,background:`palette.colors.gray.100`,text:`semantic.colors.text`,borderRadius:`palette.radius.xl`,shadow:`none`,padding:`8px 14px`,fontSize:`14px`,lineHeight:`1.5`},assistant:{...g.message.assistant,background:`transparent`,border:`transparent`,borderWidth:`0px`,borderRadius:`0px`,shadow:`none`,padding:`0px`,fontSize:`14px`,lineHeight:`1.55`},operator:{...g.message.operator,background:`transparent`,border:`semantic.colors.border`,borderRadius:`palette.radius.xl`,shadow:`none`,padding:`8px 14px`,fontSize:`14px`,lineHeight:`1.5`}},artifact:{...g.artifact,card:{background:`semantic.colors.surface`,border:`1px solid var(--persona-border)`,borderRadius:`palette.radius.lg`,hoverBackground:`components.button.ghost.hoverBackground`,hoverBorderColor:`semantic.colors.border`},inline:{background:`semantic.colors.surface`,border:`1px solid var(--persona-border)`,borderRadius:`palette.radius.lg`,chromeBackground:`semantic.colors.surface`,chromeBorder:`semantic.colors.border`,titleColor:`semantic.colors.text`,mutedColor:`semantic.colors.textMuted`}},composer:{...g.composer,padding:`8px`,fontSize:`15px`,lineHeight:`1.5`,controlSize:`32px`,controlIconSize:`20px`,expandedPadding:`12px 16px`,expandedBorderRadius:`24px`,sendIconSize:`18px`,sendButtonRadius:`9999px`,footerBorder:`none`,overflowMenu:{borderRadius:`12px`},overlayBand:`linear-gradient(to bottom, transparent, var(--persona-container) 24px)`,focusBorderColor:`color-mix(in srgb, var(--persona-text) 28%, var(--persona-border))`,focusRing:`1px solid color-mix(in srgb, var(--persona-text) 12%, transparent)`}},T=e=>f({future:e}),E=e=>T(e)===`v5`?{palette:b,semantic:S,components:w}:{palette:y,semantic:x,components:C},D={overview:`Start fresh with brand for a coordinated look, theme.semantic for shared design intent, and theme.components for exact exceptions. Tokens layer palette → semantic → components; darkTheme overrides inherited light theme inputs. Current V4 defaults apply unless future.v5Defaults is true. Content belongs in welcome/copy and suggestions; behavior and composition remain in features/providers/layout/launcher. Explicit legacy styles still win until reset; modern welcome content wins over old copy aliases. See docs/configuration.md for fresh recipes, mounted update policy and authored versus resolved exports.`,layers:{palette:{description:`Primitive design tokens. Override specific shades to change the entire widget feel.`,colors:{description:`7 color scales, each with shades 50 (lightest) to 950 (darkest). Override only the shades you need.`,scales:{gray:`Neutrals: backgrounds, text, borders. Key shades: 50 (lightest bg), 100 (secondary bg), 200 (borders), 500 (muted text), 900 (primary text).`,primary:`Brand color: buttons, links, interactive elements. Key shades: 500 (default), 600 (hover).`,accent:`Secondary highlight. Key shades: 500 (default), 600 (hover).`,secondary:`Tertiary color scale.`,success:`Positive feedback (default: green).`,warning:`Caution feedback (default: yellow).`,error:`Error/danger feedback (default: red).`}},radius:{description:`Border radius scale. Add custom keys like launcher, button.`,defaults:{none:`0px`,sm:`0.125rem`,md:`0.375rem`,lg:`0.5rem`,xl:`0.75rem`,"2xl":`1rem`,full:`9999px`}},typography:{fontFamily:`Three stacks: sans (system-ui), serif (Georgia), mono (ui-monospace). Override individual stack values.`,fontSize:`Scale: xs (0.75rem), sm (0.875rem), base (1rem), lg (1.125rem), xl (1.25rem), 2xl (1.5rem), 3xl (1.875rem), 4xl (2.25rem).`,fontWeight:`normal (400), medium (500), semibold (600), bold (700).`,lineHeight:`tight (1.25), normal (1.5), relaxed (1.625).`},shadows:`Scale: none, sm, md, lg, xl, 2xl. Values are CSS box-shadow strings.`,borders:`Scale: none, sm (1px solid), md (2px solid), lg (4px solid).`,spacing:`Scale: 0 (0px), 1 (0.25rem), 2 (0.5rem), 3 (0.75rem), 4 (1rem), 5 (1.25rem), 6 (1.5rem), 8 (2rem), 10 (2.5rem), 12 (3rem), 16-64.`},semantic:{description:`Design intent tokens. Auto-derived from palette by default. Override to redirect token resolution. Values are token reference strings like "palette.colors.primary.500".`,colors:{primary:`palette.colors.primary.500: Primary brand color.`,secondary:`palette.colors.gray.500: Secondary color.`,accent:`palette.colors.primary.600: Accent/interactive color.`,surface:`palette.colors.gray.50: Panel/card backgrounds.`,background:`palette.colors.gray.50: Page background.`,container:`palette.colors.gray.100: Container backgrounds.`,text:`palette.colors.gray.900: Primary text.`,textMuted:`palette.colors.gray.500: Muted/secondary text.`,textInverse:`palette.colors.gray.50: Text on dark backgrounds.`,border:`palette.colors.gray.200: Default border color.`,divider:`palette.colors.gray.200: Divider lines.`,interactive:{default:`palette.colors.primary.500`,hover:`palette.colors.primary.600`,focus:`palette.colors.primary.700`,active:`palette.colors.primary.800`,disabled:`palette.colors.gray.300`},feedback:{success:`palette.colors.success.500`,warning:`palette.colors.warning.500`,error:`palette.colors.error.500`,info:`palette.colors.primary.500`}},spacing:`xs (0.25rem), sm (0.5rem), md (1rem), lg (1.5rem), xl (2rem), 2xl (2.5rem).`,typography:`fontFamily, fontSize, fontWeight, lineHeight: reference palette typography tokens.`},components:{description:`UI element tokens. Rarely needed for basic theming. Override for fine-grained control. All values are token references or raw CSS strings.`,button:{description:`Variants primary, secondary, ghost; button.stop.background/foreground styles streaming stop while composer.send styles idle send.`,properties:`background, foreground, borderRadius, padding.`},input:{description:`Message input field.`,properties:`background, placeholder, borderRadius, padding, focus.border, focus.ring.`},launcher:{description:`Floating launcher button.`,properties:`size (60px), iconSize (28px), iconStrokeWidth (2, unitless glyph stroke weight; applies to registry-icon launchers, inert for emoji and image icons), borderRadius, shadow.`},panel:{description:`Chat panel container.`,properties:`width, maxWidth (440px), height (600px), maxHeight, borderRadius, shadow, inset (16px, gap around a detached panel), canvasBackground (transparent, fills the region behind a detached panel in docked and inline embed modes; a no-op in sidebar mode, where the gap stays click-through and the host page shows through like floating). inset and canvasBackground apply only when launcher.detachedPanel is true or artifacts.layout.paneAppearance is "detached".`},header:{description:`Chat panel header. background and foreground are the pair that colors the band: set those two and the rest of the header text follows.`,properties:`close and clear each expose independent size, iconSize, iconStrokeWidth, background, foreground, borderColor, borderWidth, borderRadius, padding; they fall through to shared header controls, leaving Messages and trailing actions untouched. background, foreground (anchors the header text; the title takes it directly, the subtitle and action icons take color-mix(in srgb, foreground 72%, background), and the border takes color-mix(in srgb, foreground 14%, background)), border, borderRadius, padding, iconBackground, iconForeground (the avatar tile, which keeps its own defaults and never derives), actionIconForeground, controlSize (32px, the box of every header icon button), controlIconSize (16px, the glyph inside it), controlStrokeWidth (1.5, unitless glyph stroke weight; sparse-viewBox glyphs such as the close X scale it by 0.7), shadow, borderBottom, minHeight (height floor for the header strip), title and subtitle (each fontFamily, fontSize, fontWeight, lineHeight, letterSpacing, color). Derivation only fills keys the theme leaves unset, so any explicit border, titleForeground, subtitleForeground, actionIconForeground, title.color, or subtitle.color wins. With no foreground either, each key falls back as before: the primary color for the title, the muted text color for the subtitle and action icons, the divider color for the border.`,legacy:`titleForeground and subtitleForeground are legacy aliases of header.title.color and header.subtitle.color. Both still work; the title/subtitle color wins when both are set, and either alias still outranks the foreground derivation.`},history:{description:`Messages (conversation history) chrome and motion. railHeader styles the rail sidebar top strip, which runs beside the widget header in rail presentation; overlay styles the floating rail a collapsed overlay rail opens on hover; motion times the surface entering and leaving.`,properties:`railHeader.background (defaults to the rail surface), railHeader.border (full border-bottom shorthand, default 0), railHeader.minHeight (defaults to components.header.minHeight, then 56px). Pin railHeader.minHeight and header.minHeight to the same value so both top strips read as one band. railHeader.title takes TextStyleTokens for the strip view title ("Messages"): color (defaults to the text color; the sidebar identity reads at full strength), fontFamily, fontSize (14px), fontWeight (600), lineHeight, letterSpacing. listHeading takes the same TextStyleTokens for the rail-only "Conversations" heading over the list block (14px/600 in the text color); groupHeading styles the muted sub-headers, both the date groups ("Today", "Yesterday") and rail nav section titles (rail 13px/500, muted text color). Every key of all three is pinned in the widget CSS, so host-page h2/h3 rules cannot restyle them. overlay.margin (8px, the gap from the trigger, the docked edge and the bottom), overlay.borderRadius (16px), overlay.shadow (0 12px 40px rgba(0, 0, 0, 0.25)), overlay.background (defaults to the rail surface). The floating rail keeps features.history.rail width and side, which are config, not tokens. motion.enterDurationMs (180) and motion.exitDurationMs (160) are bare millisecond numbers, 0 disables that leg; motion.enterEasing (cubic-bezier(0, 0, 0.2, 1)) and motion.exitEasing (cubic-bezier(0.4, 0, 1, 1)) take any CSS easing. Only the body animates, and prefers-reduced-motion always wins.`},tooltip:{description:`The portaled tooltip on icon controls, plus the muted shortcut hint chip after its label.`,properties:`background (#111827), foreground (#ffffff), hintForeground (rgba(255, 255, 255, 0.55)), borderRadius (palette.radius.sm), fontSize (12px), padding (6px 12px), shadow, maxWidth (min(320px, calc(100vw - 16px))), arrow (boolean, default true; false drops the caret). Unset keys keep the built-in dark look.`},message:{description:`Chat message bubbles.`,user:`background, text, borderRadius, shadow.`,assistant:`background, text, borderRadius, border (optional), shadow (optional).`,operator:`Human operator bubble (role "operator", e.g. a support takeover), on the assistant side. background (default: container tinted 6% with the primary), text (semantic.colors.text), borderRadius, border (container tinted 20% with the primary), borderWidth (1px), shadow, plus padding, maxWidth, fontSize, fontFamily, lineHeight. V5 outlines it instead: transparent background, semantic.colors.border border.`},markdown:{description:`Markdown rendering in messages and artifact pane.`,properties:`inlineCode (background, foreground), link.foreground, prose.fontFamily, heading.h1/h2 (fontSize, fontWeight), codeBlock (background, borderColor, textColor, borderRadius: follows palette.radius.md), table (headerBackground, borderColor), hr.color, blockquote (borderColor, background, textColor).`},introCard:{description:`Welcome surface above the message list. Flat by default (transparent, no shadow).`,properties:`background, borderRadius, padding, shadow, border (full CSS shorthand, default none), title and subtitle (each fontFamily, fontSize, fontWeight, lineHeight, letterSpacing, color).`},suggestion:{description:`Starter prompt and follow-up suggestion chrome. Three variants: chip, card, list.`,properties:`background, foreground, border, borderRadius, padding, fontWeight, shadow, gap (icon to copy inside one item), itemGap (space between items, default 8px), minHeight, fontSize, lineHeight, iconSize, hoverBackground, hoverForeground, hoverBorder, pressedBackground, focusRing, disabledOpacity.`},voice:`control (size, iconSize, iconStrokeWidth, background, foreground, borderColor, borderWidth, borderRadius, padding) styles the idle mic independently. Legacy voiceRecognition.iconSize sets both box and glyph: migrate to both control.size and control.iconSize. recording (indicator, background, border), processing (icon, background, optional border), speaking (icon, optional background/border). Previously unused recording.border, processing.icon/background and speaking.icon only activate on explicit host theme input; materialized defaults do not recolor the mic.`,approval:`requested (background, border, text, shadow, titleColor, descriptionColor, reasonColor, parameters.background/foreground), approve (background, foreground), deny (background, foreground). Previously unused requested.text and approve/deny foreground only activate on explicit host input. Specific requested text colors fall through explicit requested.text to the renderer fallback. Built-in plugin and exported createApprovalBubble share these tokens, retaining their original absent-value deny colors.`,askUserQuestion:`sheet (background, border, shadow), pill (background, foreground, borderRadius, selectedBackground, selectedForeground), customInput.background. Local features.askUserQuestion.styles still wins; navigation, labels and slide timing remain feature config.`,attachment:`image (background, border).`,scrollToBottom:`Floating scroll-to-bottom affordance shared by transcript and event stream: background, foreground, border, size, borderRadius, shadow, padding, gap, fontSize, iconSize; approval (background, foreground, border, fontWeight) for the labelled "Approval needed" state, falling back to the control colors.`,toolBubble:`shadow, background, borderColor, borderWidth, borderRadius; header (background, foreground, padding), content (background, foreground, padding), codeBlock (background, foreground, borderColor), toggleForeground, labelForeground, loading (primary, secondary, duration). Applies to card and activity-row variants without changing their distinct defaults. CSS duration uses ms/s; legacy numeric milliseconds must convert explicitly. Theme content.padding precedes activity.bodyPadding/toolBubble.bodyPadding fallbacks; explicit legacy axes override only their axis.`,scrollbar:`Shared scrollbar appearance for every scroller: thumb (default semantic.colors.border), track (default transparent).`,turnActivity:`dividerColor (theme primary at 8% opacity by default) and dividerWidth (1px by default; 0px hides it) style only the divider beneath the Worked turn header.`,reasoningBubble:`shadow: reasoning/thinking row box-shadow.`,composer:`Independent send (size, iconSize, iconStrokeWidth, background, foreground, borderColor, borderWidth, borderRadius, padding) styles submit only; shared sendIconSize and sendButtonRadius are older fallbacks. Legacy icon-mode padding and text-mode background remain ignored; new theme padding/background can opt into either mode. button.stop colors still apply while stopped unless explicit legacy send colors win. Explicit legacy send colors retain the idle mic fallback; a parity migration sets matching voice.control colors too. Message input form: sendIconSize (send/stop glyph; explicit sendButton.iconSize wins), sendButtonRadius (icon-mode submit radius), footerBorder (footer top border shorthand; none hides it), shadow (box-shadow), borderColor, focusBorderColor (focused form border; V4 keeps the resting border, V5 uses a stronger neutral mix), focusRing (CSS outline shorthand, 1px offset; V4 none, V5 a thin neutral ring; preserves shadow and causes no layout shift), padding (form inset), expandedPadding and expandedBorderRadius (expanded card geometry; V5 12px 16px and 24px; explicit padding/input.borderRadius also override these), gap (textarea row to actions row; compact single-row spacing fallback), controlGap (horizontal action rail spacing, default 8px), editorMinHeight (minimum textarea height, default 24px), editorPadding (textarea inset, default 2px), suggestionsGap (space above below-composer starters), mode (independent mode-button fontSize, fontWeight, height, paddingInline, gap, borderRadius, borderColor, activeBorderColor, activeBackground), fontSize and lineHeight (textarea type), controlSize (edge of every icon control in the action row: attachment, mention, mic, action buttons, overflow trigger, icon-mode send; default 40px) and controlIconSize (glyph inside them, default 24px). Per-control config keys (sendButton.size, voiceRecognition.iconSize) override controlSize; coarse-pointer devices floor the hit area at 40px. overlayBand paints the band behind an overlaid footer (composer.placement: "overlay"). segmented styles a segmented mode-group track (trackBackground, trackBorderRadius, padding, activeBackground, activeForeground, activeShadow, inactiveForeground, itemPadding, gap, fontSize, lineHeight, fontWeight, minHeight); every key is optional and the stylesheet owns the defaults. modelPicker styles the model picker (background, hoverBackground, borderColor, borderRadius, labelColor, fontSize, fontWeight, height, minWidth and paddingInline on the closed control, which the native select and the popover trigger share; menuBackground, menuBorderRadius, rowHoverBackground, descriptionColor and suffixColor on the popover only), also all optional. overflowMenu styles the composer overflow "+" menu panel (background, borderColor, borderRadius, foreground, shadow), also all optional.`,artifact:`pane (background, toolbarBackground, padding, borderRadius, shadow, border, borderLeft), chat.shadow, split.outerRadius, toolbar (iconColor, toggleActiveBackground, toggleActiveBorderColor, toggleActiveColor, existing icon/copy chrome), tab (fadeSize, existing backgrounds/active states). border and borderLeft are full CSS shorthands; full border wins over left border. Geometry, resizing, appearance, chatSurface, presets and fade enablement remain layout config.`}},styleMigration:{precedence:`For supported style aliases: explicit legacy property > explicit component theme (active dark override) > existing shared/semantic/V4/V5 fallback. Materialized legacy defaults no longer defeat component styling. Behavior, hooks, custom icons, labels and presets remain config capabilities.`,updates:`Omitted patch keys retain value/origin. Own undefined clears a style override; clearing a parent clears its tracked descendants. Theme/scheme/default-version changes do not resurrect cleared inline styles. Persona merge helpers and supported copies retain origin; JSON-round-tripped/manual default-filled inputs have unknown origin and conservatively treat present values as explicit. Remove/reset legacy fields to expose theme styling.`,diagnostics:`Debug-only, once per widget/path; deferred installs diagnose when the full runtime opens, not from the tiny launcher. Warnings cover verified aliases only and do not imply runtime removal. No removal is scheduled in 4.x.`,retained:`Callbacks/renderers, custom icons, labels, accessibility, behavior, provider setup and layout geometry stay supported. suggestionChipsConfig.fontFamily is an accepted no-op, as are unifiedSplitChrome and unsupported messages/composer layout slots; no parity token is claimed. The three --cw-container/--cw-surface/--cw-border compatibility aliases remain; Markdown uses --persona-md-*.`},colorScheme:`"dark" merges darkTheme overrides on top of theme. "auto" detects system preference or <html class="dark">. "light" is default. colorScheme does NOT auto-invert colors: provide dark palette and semantic overrides yourself.`,plugins:{description:`Plugins transform theme tokens before resolution. Use with createTheme().`,available:{brandPlugin:`Auto-generates full color scales from a single brand hex: brandPlugin({ colors: { primary: "#7c3aed" } }).`,accessibilityPlugin:`Enhanced focus indicators and disabled states.`,highContrastPlugin:`Increased contrast for visual accessibility.`,reducedMotionPlugin:`Disables all animations (sets transitions to 0ms).`,animationsPlugin:`Adds transition and easing tokens.`},usage:`createTheme(themeOverrides, { plugins: [brandPlugin({ colors: { primary: "#7c3aed" } })] })`},widgetConfig:{description:`Non-theme config options on the widget config object that affect appearance. These are siblings of "theme" in the config, not nested inside it.`,launcher:{description:`Floating launcher button and panel positioning.`,properties:{enabled:`Show/hide the launcher button.`,title:`Header title text.`,subtitle:`Header subtitle text.`,position:`"bottom-right" | "bottom-left" | "top-right" | "top-left".`,width:`Chat panel width (CSS value).`,fullHeight:`Fill full height of container.`,mountMode:`"floating" | "docked".`,agentIconText:`Emoji/text for agent icon.`,border:`Border style for launcher button.`,shadow:`Box shadow for launcher button.`,collapsedMaxWidth:`Max-width for launcher pill when panel closed.`}},sendButton:{description:`Send button appearance.`,properties:`backgroundColor, textColor, borderWidth, borderColor, paddingX, paddingY, iconText, iconName, size.`},closeButton:{description:`Close button (on launcher config). Unset closeButtonSize means theme.components.header.controlSize owns the box.`,properties:`closeButtonSize, closeButtonColor, closeButtonBackgroundColor, closeButtonBorderWidth, closeButtonBorderColor, closeButtonBorderRadius.`},clearChat:{description:`Clear chat button (on launcher.clearChat config). Unset size means theme.components.header.controlSize owns the box.`,properties:`enabled, iconColor, backgroundColor, borderWidth, borderColor, borderRadius, size.`},scrollToBottom:{description:`Shared transcript + event-stream jump-to-latest affordance.`,properties:`features.scrollToBottom.enabled, features.scrollToBottom.iconName, features.scrollToBottom.label (empty string renders icon-only), features.scrollToBottom.approvalLabel (shown while a pending approval is below the fold; empty string keeps the regular control). Defaults: enabled=true, iconName="arrow-down", label="", approvalLabel="Approval needed".`},toolCall:{description:`Tool call display styling, text templates, loading animations, and rendering hooks. Text templates support placeholders ({toolName}, {duration}) and inline formatting (~dim~, *italic*, **bold**). renderCollapsedSummary receives elapsed (static string) and createElapsedElement() (live-updating span) in its context.`,properties:`shadow, backgroundColor, borderColor, borderWidth, borderRadius, headerBackgroundColor, headerTextColor, headerPaddingX, headerPaddingY, contentBackgroundColor, contentTextColor, contentPaddingX, contentPaddingY, codeBlockBackgroundColor, codeBlockBorderColor, codeBlockTextColor, toggleTextColor, labelTextColor, activeTextTemplate, completeTextTemplate, loadingAnimationColor, loadingAnimationSecondaryColor, loadingAnimationDuration, renderCollapsedSummary, renderCollapsedPreview, renderGroupedSummary.`},reasoning:{description:`Reasoning/thinking row rendering hooks, text templates, and loading animations. Text templates support {duration} placeholder and inline formatting (~dim~, *italic*, **bold**). renderCollapsedSummary receives elapsed (static string) and createElapsedElement() (live-updating span) in its context.`,properties:`renderCollapsedSummary, renderCollapsedPreview, activeTextTemplate, completeTextTemplate, loadingAnimationColor, loadingAnimationSecondaryColor, loadingAnimationDuration.`},approval:{description:`Tool approval card styling and behavior. Neutral surface card; the primary action anchors to the brand --persona-primary token. Set to false to disable. Set enableAlwaysAllow: true to add the split "Always allow / Allow once" control (needs a backend to persist the policy via onDecision's remember).`,properties:`enableAlwaysAllow, detailsDisplay ("collapsed" | "expanded" | "hidden"), showDetailsLabel, hideDetailsLabel, backgroundColor, borderColor, titleColor, descriptionColor, reasonColor, reasonLabel, approveButtonColor, approveButtonTextColor, denyButtonColor, denyButtonTextColor, parameterBackgroundColor, parameterTextColor, approveLabel, denyLabel, formatDescription. (title no longer renders in the default card; use formatDescription to customize the summary.)`},copy:{description:`Widget text content.`,properties:`inputPlaceholder, sendButtonLabel, stopButtonLabel. (showWelcomeCard, welcomeTitle, welcomeSubtitle are deprecated aliases of the welcome namespace.)`},voiceRecognition:{description:`Voice input configuration.`,properties:`enabled, pauseDuration, iconColor, backgroundColor.`},textToSpeech:{description:`Text-to-speech for assistant messages.`,properties:`enabled, provider ("browser" | "runtype"), browserFallback, voice, rate, pitch.`},suggestions:{description:`Rich starter and follow-up suggestion surfaces. Strings remain valid item shorthand.`,properties:`starters.items, starters.variant ("card" | "chip" | "list"), starters.placement ("auto" | "welcome" | "composer" | "below-composer"), starters.behavior ("send" | "fill"), starters.overflow ("scroll" | "wrap"), starters.maxItems, followUps.enabled, followUps.expose, followUps.variant, followUps.placement ("auto" | "after-message" | "composer"), followUps.behavior, followUps.overflow ("scroll" | "wrap"), followUps.maxItems.`},welcome:{description:`First-open welcome surface. Supersedes copy.welcomeTitle / welcomeSubtitle / showWelcomeCard.`,properties:`title, subtitle, icon ({ type: "lucide", name } | { type: "image", url, alt } | { type: "text", text } | function), variant ("card" | "hero" | "none"), dismiss ("never" | "on-first-message"), message (display-only greeting bubble, ignored under "hero").`},suggestionChips:`Deprecated string[] shorthand for starter prompts. Prefer suggestions.starters.items.`,messageActions:{description:`Message action buttons (copy, upvote, downvote, read aloud, regenerate, edit, quote).`,properties:`enabled, showCopy, showUpvote, showDownvote, showReadAloud, showRegenerate (final retryable assistant turn only), showEdit (text-only user messages only), showQuote, visibility ("hover" | "always"), align ("left" | "center" | "right"), layout ("pill-inside" | "row-inside").`},attachments:{description:`File attachment configuration.`,properties:`enabled, allowedTypes (string[]), maxFileSize (bytes), maxFiles, buttonIconName, buttonTooltipText.`},markdown:{description:`Markdown rendering configuration.`,properties:`options (gfm, breaks, headerIds, headerPrefix, pedantic, mangle, silent), disableDefaultStyles.`},layout:{description:`Layout configuration.`,showHeader:`boolean: show/hide the header section entirely.`,showFooter:`boolean: show/hide the footer/composer section entirely.`,contentMaxWidth:`CSS width value for centering content (e.g. "720px", "90ch").`,header:`"default" | "minimal". Options: showIcon, showTitle, showSubtitle, showCloseButton, showClearChat.`,messages:`"bubble" | "flat" | "minimal". Options: groupConsecutive, avatar (show, position, userAvatar, assistantAvatar, operatorAvatar), timestamp (show, position, format).`},statusIndicator:{description:`Status text shown below the composer.`,properties:{visible:`Show/hide the status indicator.`,align:`"left" | "center" | "right": text alignment (default: "right").`,idleText:`Text shown when idle (default: "Online").`,idleLink:`URL to open when idle text is clicked (wraps text in a link).`,connectingText:`Text shown while connecting (default: "Connecting…").`,connectedText:`Text shown while streaming (default: "Streaming…").`,errorText:`Text shown on error (default: "Offline").`}},features:{description:`Feature flags.`,properties:`showReasoning, showToolCalls, toolCallDisplay (collapsedMode, activePreview, activeMinHeight, previewMaxLines, grouped, groupedMode, groupAppearance, groupSummary, groupSummaryMaxItems, groupBoundary, groupIconVisibility, expandable, loadingAnimation), reasoningDisplay (activePreview, activeMinHeight, previewMaxLines, expandable, loadingAnimation), artifacts (sidebar config).`}}},O={independentControls:{description:`Separate close, clear, submit and mic chrome; remove legacy style overrides first. Mic box and glyph sizes are intentionally independent.`,theme:{components:{header:{close:{size:`32px`,foreground:`#b91c1c`},clear:{size:`36px`,foreground:`#1d4ed8`}},composer:{send:{size:`44px`,iconSize:`20px`,background:`#111827`,foreground:`#ffffff`}},voice:{control:{size:`44px`,iconSize:`22px`,foreground:`#111827`,background:`transparent`},recording:{indicator:`#ffffff`,background:`#dc2626`,border:`#dc2626`},processing:{icon:`#1d4ed8`,background:`#eff6ff`},speaking:{icon:`#15803d`,background:`#f0fdf4`}}}}},scopedSurfaces:{description:`Tool, approval/question, and artifact styles stay inside their component boundaries. CSS timing/shorthand values preserve their units.`,theme:{components:{toolBubble:{background:`#f8fafc`,borderColor:`#cbd5e1`,borderWidth:`1px`,header:{foreground:`#0f172a`,padding:`6px 12px`},content:{padding:`12px`},loading:{duration:`1600ms`}},approval:{requested:{descriptionColor:`#0f172a`,parameters:{background:`#f1f5f9`,foreground:`#334155`}},approve:{foreground:`#ffffff`}},askUserQuestion:{sheet:{background:`#ffffff`,shadow:`none`},pill:{selectedBackground:`#111827`,selectedForeground:`#ffffff`}},artifact:{pane:{padding:`16px`,borderRadius:`12px`,border:`1px solid #cbd5e1`},chat:{shadow:`none`},split:{outerRadius:`12px`},toolbar:{iconColor:`#334155`,toggleActiveColor:`#0f172a`},tab:{fadeSize:`24px`}}}}},darkIndigo:{description:`Dark mode with indigo accent: override grays for dark backgrounds and semantic tokens for inverted text/surface`,theme:{palette:{colors:{primary:{500:`#6366f1`,600:`#4f46e5`},gray:{50:`#f1f5f9`,100:`#1e293b`,200:`#334155`,500:`#94a3b8`,900:`#0f172a`,950:`#020617`}}},semantic:{colors:{surface:`palette.colors.gray.900`,background:`palette.colors.gray.900`,container:`palette.colors.gray.100`,text:`palette.colors.gray.50`,textMuted:`palette.colors.gray.500`,textInverse:`palette.colors.gray.900`,border:`palette.colors.gray.200`}}}},warmVintage:{description:`Warm sepia tones with serif font and subtle radius`,theme:{palette:{colors:{primary:{500:`#b45309`,600:`#92400e`},gray:{50:`#fef3c7`,100:`#fef9c3`,200:`#d6d3d1`,500:`#78716c`,900:`#44403c`}},radius:{sm:`0.125rem`,md:`0.25rem`,lg:`0.375rem`},typography:{fontFamily:{sans:`Georgia, Cambria, "Times New Roman", Times, serif`}}}}},neonCyberpunk:{description:`Neon on dark with monospace font: full semantic override for dark background`,theme:{palette:{colors:{primary:{500:`#f0abfc`,600:`#e879f9`},accent:{500:`#22d3ee`,600:`#06b6d4`},gray:{50:`#f0abfc`,100:`#1e0a3c`,200:`#3b0764`,500:`#c084fc`,900:`#0c0a1a`,950:`#050412`}},radius:{sm:`0`,md:`0.25rem`,lg:`0.375rem`},typography:{fontFamily:{sans:`ui-monospace, SFMono-Regular, Menlo, monospace`}}},semantic:{colors:{surface:`palette.colors.gray.900`,background:`palette.colors.gray.950`,container:`palette.colors.gray.100`,text:`palette.colors.gray.50`,textMuted:`palette.colors.gray.500`,border:`palette.colors.gray.200`}}}},cleanRounded:{description:`Clean light theme with large radius and panel styling`,theme:{palette:{radius:{sm:`6px`,md:`8px`,lg:`12px`,launcher:`50px`,button:`8px`}},components:{panel:{borderRadius:`16px`,shadow:`palette.shadows.2xl`}}}}};function k(e){let t=E(e),n=p({future:e});return{tokenDocs:D,defaultsVersion:f({future:e}),themeDefaultsVersion:T(e),defaultColorPalette:t.palette.colors,defaultRadius:t.palette.radius,defaultLauncher:n.launcher,examples:O,sdkPresets:[`shop`,`minimal`,`fullscreen`]}}export{O as THEME_EXAMPLES,D as THEME_TOKEN_DOCS,k as getThemeReference};
|
|
@@ -1,18 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
//#region src/utils/loading-label.d.ts
|
|
1
|
+
import { En as AgentWidgetToolCallLoadingAnimation, Si as LoadingLabelAnimationContext, k as AgentWidgetConfig } from "./types-BC7MRxO5.cjs";
|
|
3
2
|
type Kind = LoadingLabelAnimationContext["kind"];
|
|
4
3
|
/** Fresh default-owned render trees only declare effects. Custom hooks start after commit. */
|
|
5
4
|
declare function applyLoadingLabel(element: HTMLElement, config: AgentWidgetConfig | undefined, kind: Kind): void;
|
|
6
|
-
//#endregion
|
|
7
|
-
//#region src/utils/loading-label-lifecycle.d.ts
|
|
8
5
|
/** Per-widget handles follow committed elements, never speculative render trees. */
|
|
9
6
|
declare function createLoadingLabelLifecycle(root: HTMLElement, getConfig: () => AgentWidgetConfig): {
|
|
10
7
|
prepare: (next: HTMLElement) => void;
|
|
11
8
|
sync: () => void;
|
|
12
9
|
destroy(): void;
|
|
13
10
|
};
|
|
14
|
-
//#endregion
|
|
15
|
-
//#region src/utils/tool-loading-animation.d.ts
|
|
16
11
|
type LoadingAnimationOptions = {
|
|
17
12
|
animation: AgentWidgetToolCallLoadingAnimation;
|
|
18
13
|
duration?: string;
|
|
@@ -21,6 +16,5 @@ type LoadingAnimationOptions = {
|
|
|
21
16
|
};
|
|
22
17
|
/** Shared builtin renderer; preserves formatting and independently updated timers. */
|
|
23
18
|
declare function applyLoadingAnimation(element: HTMLElement, options: LoadingAnimationOptions): void;
|
|
24
|
-
//#endregion
|
|
25
19
|
export { createLoadingLabelLifecycle as n, applyLoadingLabel as r, applyLoadingAnimation as t };
|
|
26
20
|
export {}
|
|
@@ -1,18 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
//#region src/utils/loading-label.d.ts
|
|
1
|
+
import { En as AgentWidgetToolCallLoadingAnimation, Si as LoadingLabelAnimationContext, k as AgentWidgetConfig } from "./types-BC7MRxO5.js";
|
|
3
2
|
type Kind = LoadingLabelAnimationContext["kind"];
|
|
4
3
|
/** Fresh default-owned render trees only declare effects. Custom hooks start after commit. */
|
|
5
4
|
declare function applyLoadingLabel(element: HTMLElement, config: AgentWidgetConfig | undefined, kind: Kind): void;
|
|
6
|
-
//#endregion
|
|
7
|
-
//#region src/utils/loading-label-lifecycle.d.ts
|
|
8
5
|
/** Per-widget handles follow committed elements, never speculative render trees. */
|
|
9
6
|
declare function createLoadingLabelLifecycle(root: HTMLElement, getConfig: () => AgentWidgetConfig): {
|
|
10
7
|
prepare: (next: HTMLElement) => void;
|
|
11
8
|
sync: () => void;
|
|
12
9
|
destroy(): void;
|
|
13
10
|
};
|
|
14
|
-
//#endregion
|
|
15
|
-
//#region src/utils/tool-loading-animation.d.ts
|
|
16
11
|
type LoadingAnimationOptions = {
|
|
17
12
|
animation: AgentWidgetToolCallLoadingAnimation;
|
|
18
13
|
duration?: string;
|
|
@@ -21,6 +16,5 @@ type LoadingAnimationOptions = {
|
|
|
21
16
|
};
|
|
22
17
|
/** Shared builtin renderer; preserves formatting and independently updated timers. */
|
|
23
18
|
declare function applyLoadingAnimation(element: HTMLElement, options: LoadingAnimationOptions): void;
|
|
24
|
-
//#endregion
|
|
25
19
|
export { createLoadingLabelLifecycle as n, applyLoadingLabel as r, applyLoadingAnimation as t };
|
|
26
20
|
export {}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
//#region src/utils/tooltip.d.ts
|
|
2
1
|
interface TooltipOptions {
|
|
3
2
|
/** The control the tooltip describes and positions against. */
|
|
4
3
|
anchor: HTMLElement;
|
|
@@ -45,6 +44,5 @@ declare function hideTooltipFor(anchor: HTMLElement): void;
|
|
|
45
44
|
* previous behavior, which makes controller.update() safe and idempotent.
|
|
46
45
|
*/
|
|
47
46
|
declare function attachTooltip(options: TooltipOptions): TooltipHandle;
|
|
48
|
-
//#endregion
|
|
49
47
|
export { hideTooltipFor as i, TooltipOptions as n, attachTooltip as r, TooltipHandle as t };
|
|
50
48
|
export {}
|