@helpai/elements 0.44.3 → 0.45.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/configurator.mjs +4 -1
- package/elements-web-component.esm.js +27 -27
- package/elements-web-component.esm.js.map +4 -4
- package/elements.cjs.js +27 -27
- package/elements.cjs.js.map +4 -4
- package/elements.esm.js +27 -27
- package/elements.esm.js.map +4 -4
- package/elements.js +27 -27
- package/elements.js.map +4 -4
- package/index.d.ts +8 -4
- package/index.mjs +611 -513
- package/package.json +1 -1
- package/schema.d.ts +27 -26
- package/schema.json +16 -4
- package/schema.mjs +4 -1
- package/style.css +1 -1
- package/web-component.mjs +611 -513
package/web-component.mjs
CHANGED
|
@@ -87,6 +87,9 @@ var STRINGS_EN = {
|
|
|
87
87
|
thinking: "Thinking\u2026",
|
|
88
88
|
thoughts: "Thoughts",
|
|
89
89
|
usedTool: "Used tool",
|
|
90
|
+
toolDetails: "Details",
|
|
91
|
+
toolResult: "Result",
|
|
92
|
+
sources: "Sources",
|
|
90
93
|
// ── Messenger modules ──────────────────────────────────────────
|
|
91
94
|
tabHome: "Home",
|
|
92
95
|
tabConversations: "Conversations",
|
|
@@ -200,6 +203,9 @@ var STRINGS_FR = {
|
|
|
200
203
|
thinking: "R\xE9flexion\u2026",
|
|
201
204
|
thoughts: "R\xE9flexions",
|
|
202
205
|
usedTool: "Outil utilis\xE9",
|
|
206
|
+
toolDetails: "D\xE9tails",
|
|
207
|
+
toolResult: "R\xE9sultat",
|
|
208
|
+
sources: "Sources",
|
|
203
209
|
// ── Messenger modules ──────────────────────────────────────────
|
|
204
210
|
tabHome: "Accueil",
|
|
205
211
|
tabConversations: "Conversations",
|
|
@@ -596,6 +602,7 @@ function resolveOptions(rawOpts) {
|
|
|
596
602
|
responseMode: behavior.responseMode ?? "streaming",
|
|
597
603
|
showReasoning: behavior.showReasoning ?? false,
|
|
598
604
|
showToolCalls: behavior.showToolCalls ?? false,
|
|
605
|
+
showSources: behavior.showSources ?? false,
|
|
599
606
|
features: {
|
|
600
607
|
files: opts.features?.files ?? DEFAULT_FEATURES.files,
|
|
601
608
|
voice: opts.features?.voice ?? DEFAULT_FEATURES.voice,
|
|
@@ -922,7 +929,8 @@ var BEHAVIOR_ATTRS = [
|
|
|
922
929
|
["response-mode", "responseMode", (v) => v],
|
|
923
930
|
["start-minimized", "startMinimized", boolAttr],
|
|
924
931
|
["show-reasoning", "showReasoning", boolAttr],
|
|
925
|
-
["show-tool-calls", "showToolCalls", boolAttr]
|
|
932
|
+
["show-tool-calls", "showToolCalls", boolAttr],
|
|
933
|
+
["show-sources", "showSources", boolAttr]
|
|
926
934
|
];
|
|
927
935
|
var I18N_ATTRS = [["locale", "locale"]];
|
|
928
936
|
var ACTION_NAMES = new Set(ACTION_NAME_LITERALS);
|
|
@@ -1230,7 +1238,7 @@ var tokens_default = ':host{--__P__-accent-user: __BRAND_ACCENT__;--__P__-accent
|
|
|
1230
1238
|
var reset_default = '*,*:before,*:after{box-sizing:border-box;margin:0;padding:0;border:0}button{font:inherit;color:inherit;background:none;cursor:pointer;-webkit-appearance:none;appearance:none;line-height:1}button:focus-visible,[tabindex]:focus-visible,textarea:focus-visible,input:focus-visible{outline:2px solid var(--__P__-accent);outline-offset:2px}textarea,input{font:inherit;color:inherit;background:none;border:0;outline:0;resize:none}a{color:var(--__P__-accent);text-decoration:underline;text-underline-offset:2px}img,svg{display:block;max-width:100%}ul,ol{list-style:none}.__P__-app{display:block;width:100%;height:100%;font-family:var(--__P__-font);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-feature-settings:"cv11","ss01","ss03"}.__P__-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n';
|
|
1231
1239
|
|
|
1232
1240
|
// src/styles/panel.css
|
|
1233
|
-
var panel_default = '.__P__-anchor{color-scheme:var(--__P__-color-scheme, light);right:16px;bottom:16px}.__P__-surface{display:contents}.__P__-surface[hidden]{display:none}:host([data-position="bottom-left"]) .__P__-anchor,:host([data-position="top-left"]) .__P__-anchor{right:auto;left:16px}:host([data-position="top-right"]) .__P__-anchor,:host([data-position="top-left"]) .__P__-anchor{bottom:auto;top:16px}.__P__-anchor{position:fixed;display:flex;flex-direction:column;align-items:flex-end;gap:var(--__P__-space-3);pointer-events:none}.__P__-anchor{--__P__-fab-size: 56px}.__P__-anchor[data-launcher-size=sm]{--__P__-fab-size: 44px}.__P__-anchor[data-launcher-size=md]{--__P__-fab-size: 56px}.__P__-anchor[data-launcher-size=lg]{--__P__-fab-size: 68px}.__P__-anchor>*{pointer-events:auto}.__P__-fab[data-size=sm]{--__P__-fab-size: 44px;font-size:var(--__P__-text-sm)}.__P__-fab[data-size=md]{--__P__-fab-size: 56px;font-size:calc(14px * var(--__P__-text-scale))}.__P__-fab[data-size=lg]{--__P__-fab-size: 68px;font-size:var(--__P__-text-base)}.__P__-fab{display:inline-flex;align-items:center;justify-content:center;gap:var(--__P__-space-2);color:var(--__P__-accent-text);background:var(--__P__-accent);box-shadow:var(--__P__-shadow-fab);font-weight:600;line-height:1;transform-origin:bottom right;animation:__P__-fab-in var(--__P__-dur-base) var(--__P__-ease) both;transition:transform var(--__P__-dur-base) var(--__P__-ease),opacity var(--__P__-dur-base) var(--__P__-ease),box-shadow var(--__P__-dur-base) var(--__P__-ease)}.__P__-fab:hover{transform:translateY(-2px)}.__P__-fab:active{transform:translateY(0)}.__P__-fab:focus-visible{outline:2px solid var(--__P__-on-accent);outline-offset:3px}.__P__-fab svg{width:24px;height:24px;flex-shrink:0}@keyframes __P__-fab-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:none}}.__P__-fab[data-leaving]{position:absolute;right:0;bottom:0;animation:__P__-fab-out var(--__P__-dur-quick) var(--__P__-ease) forwards;pointer-events:none}:host([data-position^="top-"]) .__P__-fab[data-leaving]{bottom:auto;top:0}:host([data-position$="-left"]) .__P__-fab[data-leaving]{right:auto;left:0}@keyframes __P__-fab-out{0%{opacity:1;transform:none}to{opacity:0;transform:scale(.85)}}.__P__-fab[data-variant=circle]{width:var(--__P__-fab-size);height:var(--__P__-fab-size);border-radius:999px}.__P__-fab[data-variant=circle] .__P__-fab-label{display:none}.__P__-fab[data-variant=pill]{height:var(--__P__-fab-size);padding:0 18px 0 16px;border-radius:999px}.__P__-fab[data-variant=bar]{height:var(--__P__-fab-size);padding:0 22px;border-radius:var(--__P__-radius)}.__P__-fab[data-variant=minimal]{height:var(--__P__-fab-size);padding:0 var(--__P__-space-4);border-radius:999px;background:transparent;color:var(--__P__-accent);box-shadow:none;border:1px solid currentColor}.__P__-fab[data-variant=minimal]:hover{background:color-mix(in srgb,var(--__P__-accent) 12%,transparent)}.__P__-callout{--__P__-callout-fab-h: var(--__P__-fab-size, 56px);--__P__-callout-gap: clamp(12px, calc(var(--__P__-callout-fab-h) * .25), 22px);--__P__-callout-nudge-direction: -1;position:absolute;display:inline-flex;align-items:center;gap:var(--__P__-space-2);padding:10px 14px;background:var(--__P__-fg);color:var(--__P__-bg);border-radius:999px;font-size:var(--__P__-text-sm);font-weight:600;line-height:1.2;box-shadow:0 10px 30px -8px #00000059;pointer-events:auto;animation:__P__-callout-in var(--__P__-dur-slow) var(--__P__-ease);z-index:1;max-width:240px;white-space:nowrap}.__P__-callout[data-position=left]{right:calc(100% + var(--__P__-callout-gap));bottom:calc(var(--__P__-callout-fab-h) / 2);transform:translateY(50%)}.__P__-callout[data-position=right]{left:calc(100% + var(--__P__-callout-gap));bottom:calc(var(--__P__-callout-fab-h) / 2);transform:translateY(50%);--__P__-callout-nudge-direction: 1}.__P__-callout[data-position=top]{bottom:calc(100% + var(--__P__-callout-gap));right:0;max-width:min(280px,calc(100vw - 32px))}.__P__-callout[data-position=bottom]{top:calc(100% + var(--__P__-callout-gap));right:0;max-width:min(280px,calc(100vw - 32px))}:host([data-position$="-left"]) .__P__-callout[data-position=top],:host([data-position$="-left"]) .__P__-callout[data-position=bottom]{right:auto;left:0}.__P__-callout[data-shape=bubble]{border-radius:var(--__P__-radius-md);white-space:normal;width:max-content;max-width:min(280px,calc(100vw - 32px))}.__P__-callout[data-shape=callout]{padding:12px 18px;font-size:calc(14px * var(--__P__-text-scale));background:var(--__P__-accent);color:var(--__P__-accent-text)}.__P__-callout:after{content:"";position:absolute;width:12px;height:12px;background:inherit;border-radius:2px;transform:rotate(45deg)}.__P__-callout[data-position=left]:after{right:-5px;top:50%;margin-top:-6px}.__P__-callout[data-position=right]:after{left:-5px;top:50%;margin-top:-6px}.__P__-callout[data-position=top]:after{bottom:-5px;right:calc(var(--__P__-fab-size, 56px) / 2 - 6px)}.__P__-callout[data-position=bottom]:after{top:-5px;right:calc(var(--__P__-fab-size, 56px) / 2 - 6px)}:host([data-position$="-left"]) .__P__-callout[data-position=top]:after,:host([data-position$="-left"]) .__P__-callout[data-position=bottom]:after{right:auto;left:calc(var(--__P__-fab-size, 56px) / 2 - 6px)}.__P__-callout[data-animated]{animation:__P__-callout-in var(--__P__-dur-slow) var(--__P__-ease),__P__-callout-nudge 1.6s var(--__P__-ease-in-out) var(--__P__-dur-slow) infinite}@keyframes __P__-callout-in{0%{opacity:0}to{opacity:1}}@keyframes __P__-callout-nudge{0%,to{margin-left:0;margin-right:0}50%{margin-left:calc(6px * var(--__P__-callout-nudge-direction));margin-right:calc(-6px * var(--__P__-callout-nudge-direction))}}@media(prefers-reduced-motion:reduce){.__P__-callout[data-animated]{animation:__P__-callout-in 1ms var(--__P__-ease)}.__P__-icon-btn[data-recording=true],.__P__-typing span{animation:none}}.__P__-callout-close{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:999px;color:inherit;opacity:.7;cursor:pointer}.__P__-callout-close:hover{opacity:1;background:color-mix(in srgb,currentColor 15%,transparent)}.__P__-callout-close:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px}.__P__-callout-close svg{width:12px;height:12px}.__P__-panel{width:var(--__P__-panel-w);height:var(--__P__-panel-h);max-width:calc(100vw - 32px);max-height:calc(100dvh - 32px);background:var(--__P__-bg);color:var(--__P__-fg);border-radius:var(--__P__-radius-lg);box-shadow:var(--__P__-shadow-panel);display:flex;flex-direction:column;overflow:hidden;transform-origin:bottom right;animation:__P__-panel-in var(--__P__-dur-slow) var(--__P__-ease);border:1px solid var(--__P__-border)}@media(prefers-reduced-motion:no-preference){.__P__-panel{transition:width var(--__P__-dur-base) var(--__P__-ease),height var(--__P__-dur-base) var(--__P__-ease),max-width var(--__P__-dur-base) var(--__P__-ease),max-height var(--__P__-dur-base) var(--__P__-ease)}.__P__-panel[data-resizing]{transition:none}}:host([data-mode="open"]) .__P__-panel{width:var(--__P__-widget-w, var(--__P__-panel-w));height:var(--__P__-widget-h, var(--__P__-panel-h));min-width:var(--__P__-resize-min-w, auto);min-height:var(--__P__-resize-min-h, auto);max-width:var(--__P__-resize-max-w, calc(100vw - 32px) );max-height:var(--__P__-resize-max-h, calc(100dvh - 32px) )}@keyframes __P__-panel-in{0%{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:none}}:host([data-mode="expanded"]) .__P__-panel{width:var(--__P__-expanded-w, 640px);height:var(--__P__-expanded-h, 820px);max-width:calc(100vw - 32px);max-height:calc(100dvh - 32px)}:host([data-mode="fullscreen"]){z-index:var(--__P__-z-panel)!important}:host([data-mode="fullscreen"]) .__P__-anchor{inset:0;padding:0;justify-content:flex-end;align-items:flex-end}:host([data-mode="fullscreen"][data-position*="top"]) .__P__-anchor{justify-content:flex-start}:host([data-mode="fullscreen"][data-position*="left"]) .__P__-anchor{align-items:flex-start}:host([data-mode="fullscreen"]) .__P__-panel{width:100vw;height:100dvh;max-width:none;max-height:none;border-radius:0;border:0}:host([data-mode="fullscreen"]) .__P__-fab{display:none}@media(max-width:640px){:host([data-mode="open"]) .__P__-anchor,:host([data-mode="expanded"]) .__P__-anchor{inset:0;align-items:stretch;padding:0}:host([data-mode="open"]) .__P__-panel,:host([data-mode="expanded"]) .__P__-panel{width:100vw;height:100dvh;max-width:none;max-height:none;border-radius:0;border:0}}:host([data-mode="inline"]) .__P__-anchor,:host([data-mode="standalone"]) .__P__-anchor{position:static;inset:auto;padding:0;align-items:stretch;width:100%;height:100%;min-height:0}:host([data-mode="inline"]) .__P__-panel,:host([data-mode="standalone"]) .__P__-panel{width:100%;height:100%;min-width:0;min-height:0;max-width:none;max-height:none;animation:none}:host([data-mode="inline"]) .__P__-fab,:host([data-mode="standalone"]) .__P__-fab{display:none}:host([data-mode="inline"]){min-height:320px}:host([data-mode="inline"]) .__P__-panel{border-radius:var(--__P__-radius)}:host([data-mode="standalone"]) .__P__-panel{border-radius:0;border:0;box-shadow:none}:host([data-mode="modal"]){position:fixed!important;inset:0!important;z-index:var(--__P__-z-panel)!important;display:block!important;width:100vw;height:100dvh;background:var(--__P__-modal-backdrop, var(--__P__-backdrop));animation:__P__-backdrop-in var(--__P__-dur-base) var(--__P__-ease) both;--__P__-panel-w: min(960px, 92vw);--__P__-panel-h: min(720px, 88dvh)}:host([data-mode="modal"]) .__P__-anchor{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;padding:var(--__P__-space-6);pointer-events:none}:host([data-mode="modal"]) .__P__-panel{pointer-events:auto;width:var(--__P__-widget-w, var(--__P__-panel-w));height:var(--__P__-widget-h, var(--__P__-panel-h));max-width:calc(100vw - 48px);max-height:calc(100dvh - 48px);min-width:0;min-height:0;border-radius:var(--__P__-radius);box-shadow:var(--__P__-shadow-panel);animation:__P__-modal-in var(--__P__-dur-base) var(--__P__-ease);translate:var(--__P__-modal-dx, 0px) var(--__P__-modal-dy, 0px)}:host([data-mode="modal"]) .__P__-header,:host([data-mode="modal"]) .__P__-back-header,:host([data-mode="modal"]) .__P__-home-hero{cursor:grab;touch-action:none}:host([data-mode="modal"]) .__P__-panel[data-dragging]{cursor:grabbing;user-select:none}:host([data-mode="modal"]) .__P__-panel[data-dragging] *{cursor:grabbing}:host([data-mode="modal"]) .__P__-fab{display:none}@keyframes __P__-backdrop-in{0%{background:#0000}to{background:var(--__P__-modal-backdrop, var(--__P__-backdrop))}}@keyframes __P__-modal-in{0%{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}:host([data-mode="drawer"]){--__P__-panel-w: min(440px, calc(100vw - 32px) );--__P__-panel-h: 100dvh}:host([data-mode="drawer"]) .__P__-anchor{position:fixed;--__P__-inset-x: var(--__P__-panel-inset, 12px);--__P__-inset-y: var(--__P__-panel-inset, 3dvh);top:var(--__P__-inset-y);bottom:auto;right:var(--__P__-inset-x);left:auto;width:min(var(--__P__-widget-w, var(--__P__-panel-w)),calc(100vw - var(--__P__-inset-x) * 2));height:min(var(--__P__-widget-h, var(--__P__-panel-h)),calc(100dvh - var(--__P__-inset-y) * 2));padding:0;display:block;pointer-events:auto}:host([data-mode="drawer"][data-position$="-left"]) .__P__-anchor{right:auto;left:var(--__P__-inset-x)}:host([data-mode="drawer"][data-position^="bottom-"]) .__P__-anchor{top:auto;bottom:var(--__P__-inset-y)}:host([data-mode="drawer"]) .__P__-panel{width:100%;height:100%;max-width:none;max-height:none;min-width:0;min-height:0;border-radius:var(--__P__-radius, 12px);border:1px solid var(--__P__-border);box-shadow:-8px 16px 32px -12px #00000038;animation:__P__-drawer-in var(--__P__-dur-base) var(--__P__-ease)}:host([data-mode="drawer"][data-position$="-left"]) .__P__-panel{box-shadow:8px 16px 32px -12px #00000038;animation:__P__-drawer-in-left var(--__P__-dur-base) var(--__P__-ease)}.__P__-fab[data-edge-tab]{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--__P__-space-2);position:fixed;top:50%;height:140px;width:auto;min-width:0;padding:10px 8px;writing-mode:vertical-rl;text-orientation:mixed;transform:translateY(-50%);transform-origin:center;animation:__P__-edge-tab-in var(--__P__-dur-base) var(--__P__-ease) both}.__P__-fab[data-edge-tab] svg{writing-mode:horizontal-tb}.__P__-fab[data-edge-tab]:hover{transform:translateY(-50%) scale(1.03)}.__P__-fab[data-edge-tab]:active{transform:translateY(-50%) scale(.97)}:host([data-position$="-right"]) .__P__-fab[data-edge-tab]{right:0;left:auto;border-radius:12px 0 0 12px;box-shadow:-6px 0 18px -8px #0000004d}:host([data-position$="-left"]) .__P__-fab[data-edge-tab]{left:0;right:auto;border-radius:0 12px 12px 0;box-shadow:6px 0 18px -8px #0000004d}.__P__-fab[data-edge-tab][data-leaving]{position:fixed;top:50%;bottom:auto;animation:__P__-edge-tab-out var(--__P__-dur-quick) var(--__P__-ease) forwards}@keyframes __P__-edge-tab-in{0%{opacity:0;transform:translateY(-50%) scale(.9)}to{opacity:1;transform:translateY(-50%) scale(1)}}@keyframes __P__-edge-tab-out{0%{opacity:1;transform:translateY(-50%) scale(1)}to{opacity:0;transform:translateY(-50%) scale(.85)}}@keyframes __P__-drawer-in{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes __P__-drawer-in-left{0%{transform:translate(-100%)}to{transform:translate(0)}}@media(prefers-reduced-motion:reduce){:host([data-mode="drawer"]) .__P__-panel,.__P__-fab[data-edge-tab]{animation:none}}.__P__-header{display:flex;align-items:center;gap:var(--__P__-space-2);padding:10px 12px;border-bottom:1px solid var(--__P__-border);background:var(--__P__-bg)}.__P__-header h1{font-size:calc(14px * var(--__P__-text-scale));font-weight:600;flex:1;letter-spacing:-.01em}.__P__-header-actions{margin-inline-start:auto;display:flex;align-items:center;gap:var(--__P__-space-1);flex-shrink:0}.__P__-agent{flex:1;display:inline-flex;align-items:center;gap:10px;min-width:0}.__P__-agent-avatar{position:relative;width:32px;height:32px;border-radius:999px;background:var(--__P__-bg-elevated);color:var(--__P__-fg-muted);display:inline-flex;align-items:center;justify-content:center;font-weight:700;font-size:var(--__P__-text-xs);overflow:hidden;flex-shrink:0}.__P__-agent-avatar img{width:100%;height:100%;object-fit:cover}.__P__-agent-avatar:after{content:"";position:absolute;right:-1px;bottom:-1px;width:10px;height:10px;border-radius:999px;border:2px solid var(--__P__-bg);background:var(--__P__-neutral)}.__P__-agent-avatar[data-status=online]:after{background:var(--__P__-success)}.__P__-agent-avatar[data-status=away]:after{background:var(--__P__-warning)}.__P__-agent-avatar[data-status=offline]:after{background:var(--__P__-neutral)}.__P__-agent-meta{display:flex;flex-direction:column;line-height:1.15;min-width:0}.__P__-agent-meta strong{font-size:calc(14px * var(--__P__-text-scale));font-weight:600;letter-spacing:-.01em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.__P__-agent-meta span{font-size:var(--__P__-text-xs);color:var(--__P__-fg-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.__P__-suggestions{display:flex;flex-wrap:nowrap;gap:var(--__P__-space-2);padding:6px 14px 10px;overflow-x:auto;overflow-y:hidden;scroll-behavior:smooth;scroll-snap-type:x proximity;scrollbar-width:none;-ms-overflow-style:none;min-width:0}.__P__-suggestions::-webkit-scrollbar{display:none}.__P__-suggestions:before,.__P__-suggestions:after{content:"";flex:1 1 0;min-width:0}.__P__-suggestion{flex:0 0 auto;scroll-snap-align:center;padding:7px 14px;border-radius:999px;background:var(--__P__-bg-elevated);border:1px solid var(--__P__-border);color:var(--__P__-fg);font-size:var(--__P__-text-sm);font-weight:500;white-space:nowrap;transition:background var(--__P__-dur-quick) var(--__P__-ease),border-color var(--__P__-dur-quick) var(--__P__-ease),transform var(--__P__-dur-quick) var(--__P__-ease)}.__P__-suggestion:hover{border-color:var(--__P__-accent);color:var(--__P__-accent);transform:translateY(-1px)}.__P__-suggestion:focus-visible{outline:2px solid var(--__P__-accent);outline-offset:2px;border-color:var(--__P__-accent)}.__P__-suggestion:active{transform:translateY(0)}.__P__-icon-btn{width:32px;height:32px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;color:var(--__P__-fg-muted);transition:background var(--__P__-dur-quick) var(--__P__-ease),color var(--__P__-dur-quick) var(--__P__-ease)}.__P__-icon-btn:hover{background:var(--__P__-bg-elevated);color:var(--__P__-fg)}.__P__-icon-btn:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px}.__P__-icon-btn:active{background:var(--__P__-border)}.__P__-icon-btn:disabled{opacity:.45;cursor:not-allowed}.__P__-icon-btn:before{content:"";position:absolute;inset:-6px}.__P__-icon-btn{position:relative}.__P__-icon-btn svg{width:18px;height:18px}.__P__-icon-btn[data-recording=true]{color:var(--__P__-accent);background:color-mix(in srgb,var(--__P__-accent) 12%,transparent);animation:__P__-pulse 1.2s var(--__P__-ease) infinite}@keyframes __P__-pulse{0%,to{box-shadow:0 0 color-mix(in srgb,var(--__P__-accent) 40%,transparent)}50%{box-shadow:0 0 0 6px color-mix(in srgb,var(--__P__-accent) 0%,transparent)}}.__P__-list,.__P__-history,.__P__-module-scroll,.__P__-home-scroll,.__P__-help-list,.__P__-tool-args,.__P__-sidebar-conversations{scrollbar-width:thin;scrollbar-color:var(--__P__-border-strong) transparent;overscroll-behavior:contain;scrollbar-gutter:stable}.__P__-list::-webkit-scrollbar,.__P__-history::-webkit-scrollbar,.__P__-module-scroll::-webkit-scrollbar,.__P__-home-scroll::-webkit-scrollbar,.__P__-help-list::-webkit-scrollbar,.__P__-tool-args::-webkit-scrollbar,.__P__-sidebar-conversations::-webkit-scrollbar{width:8px}.__P__-list::-webkit-scrollbar-thumb,.__P__-history::-webkit-scrollbar-thumb,.__P__-module-scroll::-webkit-scrollbar-thumb,.__P__-home-scroll::-webkit-scrollbar-thumb,.__P__-help-list::-webkit-scrollbar-thumb,.__P__-tool-args::-webkit-scrollbar-thumb,.__P__-sidebar-conversations::-webkit-scrollbar-thumb{background:var(--__P__-border-strong);border-radius:8px}.__P__-list-wrap{position:relative;flex:1;min-height:0;display:flex;flex-direction:column}.__P__-jump{position:absolute;inset-inline-end:14px;bottom:14px;z-index:2;display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:999px;border:1px solid var(--__P__-border);background:var(--__P__-bg-elevated);color:var(--__P__-fg);box-shadow:var(--__P__-shadow-panel);cursor:pointer;opacity:.85;transition:opacity var(--__P__-dur-quick) var(--__P__-ease),transform var(--__P__-dur-quick) var(--__P__-ease);animation:__P__-bubble-in var(--__P__-dur-base) var(--__P__-ease)}.__P__-jump:hover{opacity:1}.__P__-jump:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px;opacity:1}.__P__-jump:active{transform:translateY(1px)}.__P__-jump svg{width:18px;height:18px}.__P__-list{flex:1;min-height:0;overflow-y:auto;padding:var(--__P__-space-4);padding-bottom:var(--__P__-space-8);display:flex;flex-direction:column;gap:14px}.__P__-date-divider{position:sticky;top:var(--__P__-space-2);z-index:2;display:flex;justify-content:center;align-items:flex-start;height:0;margin:0;pointer-events:none}.__P__-date-pill{padding:3px 10px;border-radius:999px;font-size:calc(11px * var(--__P__-text-scale));font-weight:600;color:var(--__P__-fg-muted);background:var(--__P__-bg-elevated);border:1px solid var(--__P__-border);box-shadow:var(--__P__-shadow-card);opacity:0;pointer-events:none;transition:opacity var(--__P__-dur-base) var(--__P__-ease)}.__P__-list[data-scrolling=true] .__P__-date-pill{opacity:1;pointer-events:auto}@media(prefers-reduced-motion:reduce){.__P__-date-pill{transition:none}}.__P__-bubble-row{display:flex}.__P__-bubble-row[data-role=user]{justify-content:flex-end}.__P__-bubble-row[data-role=assistant]{justify-content:flex-start}.__P__-bubble{max-width:100%;padding:var(--__P__-space-3) var(--__P__-space-4);border-radius:var(--__P__-radius);line-height:1.6;font-size:calc(14px * var(--__P__-text-scale));word-wrap:break-word;overflow-wrap:anywhere;box-shadow:0 1px 2px #0000000a,0 1px 8px -4px #0000000f;animation:__P__-bubble-in var(--__P__-dur-base) var(--__P__-ease)}.__P__-bubble ::selection{background:color-mix(in srgb,var(--__P__-accent) 30%,transparent)}.__P__-bubble-row[data-role=user] .__P__-bubble ::selection{background:#fff6;color:var(--__P__-bubble-user-text)}@keyframes __P__-bubble-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}.__P__-bubble-row[data-role=user] .__P__-bubble{background:var(--__P__-bubble-user);color:var(--__P__-bubble-user-text);border-end-end-radius:5px}.__P__-bubble-row[data-role=assistant] .__P__-bubble{background:var(--__P__-bubble-assistant);color:var(--__P__-bubble-assistant-text);border-end-start-radius:5px}.__P__-bubble-col{display:flex;flex-direction:column;max-width:85%;min-width:0}.__P__-bubble-row[data-role=user] .__P__-bubble-col{align-items:flex-end}.__P__-bubble-row[data-role=assistant] .__P__-bubble-col{align-items:flex-start}.__P__-bubble-time{margin-top:3px;padding:0 4px;font-size:calc(11px * var(--__P__-text-scale));line-height:1;color:var(--__P__-fg-muted);user-select:none}.__P__-md>*:first-child{margin-top:0}.__P__-md>*:last-child{margin-bottom:0}.__P__-md p{margin:10px 0}.__P__-md h1,.__P__-md h2,.__P__-md h3,.__P__-md h4,.__P__-md h5,.__P__-md h6{margin:18px 0 8px;line-height:1.3;letter-spacing:-.01em;font-weight:700}.__P__-md h1{font-size:1.4em}.__P__-md h2{font-size:1.22em}.__P__-md h3{font-size:1.08em}.__P__-md h4,.__P__-md h5,.__P__-md h6{font-size:1em}.__P__-md>h1:first-child,.__P__-md>h2:first-child,.__P__-md>h3:first-child,.__P__-md>h4:first-child,.__P__-md>h5:first-child,.__P__-md>h6:first-child{margin-top:0}.__P__-md ul,.__P__-md ol{padding-inline-start:1.5em;margin:10px 0}.__P__-md ul{list-style:disc}.__P__-md ol{list-style:decimal}.__P__-md li{margin:6px 0;padding-inline-start:2px}.__P__-md li::marker{color:var(--__P__-fg-muted)}.__P__-md li>p{margin:6px 0}.__P__-md li>ul,.__P__-md li>ol{margin:6px 0}.__P__-md strong,.__P__-md b{font-weight:650;letter-spacing:-.005em}.__P__-md em,.__P__-md i{font-style:italic}.__P__-md code{font-family:var(--__P__-font-mono);font-size:.86em;padding:1px 6px;border-radius:5px;background:color-mix(in srgb,var(--__P__-accent) 10%,transparent);color:var(--__P__-fg);border:1px solid color-mix(in srgb,var(--__P__-accent) 16%,transparent)}.__P__-md pre{font-family:var(--__P__-font-mono);font-size:calc(12.5px * var(--__P__-text-scale));padding:12px 14px;border-radius:var(--__P__-radius-sm);background:#7f7f7f1f;overflow-x:auto;margin:var(--__P__-space-3) 0;line-height:1.5}.__P__-md pre code{padding:0;background:none}.__P__-md a{color:inherit;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px}.__P__-md a:hover{text-decoration-thickness:2px}.__P__-md blockquote{margin:14px 0;padding:6px 14px;border-inline-start:3px solid color-mix(in srgb,var(--__P__-accent) 50%,transparent);background:color-mix(in srgb,var(--__P__-accent) 5%,transparent);border-start-end-radius:var(--__P__-radius-sm);border-end-end-radius:var(--__P__-radius-sm);color:var(--__P__-fg-muted)}.__P__-md blockquote>:first-child{margin-top:0}.__P__-md blockquote>:last-child{margin-bottom:0}.__P__-md hr{border:0;height:1px;background:color-mix(in srgb,currentColor 18%,transparent);margin:var(--__P__-space-4) 0}.__P__-md table{border-collapse:collapse;margin:var(--__P__-space-3) 0;font-size:.95em;display:block;overflow-x:auto;max-width:100%;font-variant-numeric:tabular-nums}.__P__-md th,.__P__-md td{padding:6px 10px;border-bottom:1px solid color-mix(in srgb,currentColor 12%,transparent);text-align:start}.__P__-md th{font-weight:700;background:color-mix(in srgb,currentColor 6%,transparent)}.__P__-md h1+ul,.__P__-md h1+ol,.__P__-md h2+ul,.__P__-md h2+ol,.__P__-md h3+ul,.__P__-md h3+ol,.__P__-md h4+ul,.__P__-md h4+ol{margin-top:var(--__P__-space-1)}.__P__-loading{display:inline-flex;align-items:center;gap:var(--__P__-space-2);color:var(--__P__-fg-muted);font-size:var(--__P__-text-sm)}.__P__-loading-spinner{width:14px;height:14px;border-radius:999px;border:2px solid currentColor;border-top-color:transparent;animation:__P__-spin .8s linear infinite}@keyframes __P__-spin{to{transform:rotate(1turn)}}.__P__-typing{display:inline-flex;gap:var(--__P__-space-1);padding:var(--__P__-space-1) 0}.__P__-typing span{width:5px;height:5px;border-radius:999px;background:currentColor;opacity:.4;animation:__P__-blink 1.2s var(--__P__-ease) infinite}.__P__-typing span:nth-child(2){animation-delay:.2s}.__P__-typing span:nth-child(3){animation-delay:.4s}@keyframes __P__-blink{0%,80%,to{opacity:.3;transform:translateY(0)}40%{opacity:1;transform:translateY(-2px)}}.__P__-reasoning{margin:var(--__P__-space-1) 0 var(--__P__-space-2);padding-inline-start:var(--__P__-space-3);border-inline-start:2px solid var(--__P__-border-strong)}.__P__-reasoning-summary{display:inline-flex;align-items:center;gap:var(--__P__-space-1);cursor:pointer;list-style:none;user-select:none;color:var(--__P__-fg-muted);font-size:var(--__P__-text-xs);font-weight:600}.__P__-reasoning-summary:hover{color:var(--__P__-fg)}.__P__-reasoning-summary:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px;border-radius:var(--__P__-radius-sm)}.__P__-reasoning-summary::-webkit-details-marker{display:none}.__P__-reasoning-summary:before{content:"";width:5px;height:5px;border-inline-end:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(-45deg);opacity:.7;transition:transform var(--__P__-dur-quick) var(--__P__-ease)}.__P__-reasoning[open] .__P__-reasoning-summary:before{transform:rotate(45deg)}.__P__-reasoning[data-active=true] .__P__-reasoning-label{animation:__P__-reasoning-pulse 1.4s var(--__P__-ease) infinite}@keyframes __P__-reasoning-pulse{0%,to{opacity:.5}50%{opacity:1}}@media(prefers-reduced-motion:reduce){.__P__-reasoning[data-active=true] .__P__-reasoning-label{animation:none}}.__P__-reasoning-body{margin-top:var(--__P__-space-1);color:var(--__P__-fg-muted);font-size:var(--__P__-text-sm)}.__P__-reasoning-body>:first-child{margin-top:0}.__P__-reasoning-body>:last-child{margin-bottom:0}.__P__-tool-chip{display:inline-flex;align-items:center;gap:6px;padding:var(--__P__-space-1) var(--__P__-space-2);margin-top:6px;border-radius:999px;background:var(--__P__-bg-elevated);border:1px solid var(--__P__-border);color:var(--__P__-fg-muted);font-size:var(--__P__-text-xs)}.__P__-composer{border-top:1px solid var(--__P__-border);padding:10px 12px;background:var(--__P__-bg);display:flex;flex-direction:column;gap:var(--__P__-space-2)}.__P__-composer-row{display:flex;align-items:flex-end;gap:6px}.__P__-textarea{flex:1;height:40px;max-height:160px;padding:10px 12px;border-radius:var(--__P__-radius);background:var(--__P__-bg-elevated);border:1px solid transparent;font-size:calc(14px * var(--__P__-text-scale));line-height:1.4;transition:height var(--__P__-dur-quick) var(--__P__-ease),border-color var(--__P__-dur-quick) var(--__P__-ease),box-shadow var(--__P__-dur-quick) var(--__P__-ease)}.__P__-textarea:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:1px;border-color:var(--__P__-focus)}@media(pointer:coarse){.__P__-textarea,.__P__-home-search-input{font-size:max(16px,calc(16px * var(--__P__-text-scale)))}.__P__-textarea{height:44px}}.__P__-send{width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;border:1px solid transparent;transition:opacity var(--__P__-dur-quick) var(--__P__-ease),transform var(--__P__-dur-quick) var(--__P__-ease),background var(--__P__-dur-quick) var(--__P__-ease)}.__P__-send[data-shape=circle]{border-radius:999px}.__P__-send[data-shape=square]{border-radius:var(--__P__-radius-sm)}.__P__-send[data-shape=pill]{width:auto;padding:0 18px;border-radius:999px}.__P__-send[data-variant=filled]{background:var(--__P__-accent);color:var(--__P__-accent-text)}.__P__-send[data-variant=outline]{background:transparent;color:var(--__P__-accent);border-color:var(--__P__-accent)}.__P__-send[data-variant=outline]:not(:disabled):hover{background:color-mix(in srgb,var(--__P__-accent) 10%,transparent)}.__P__-send[data-variant=ghost]{background:transparent;color:var(--__P__-accent)}.__P__-send[data-variant=ghost]:not(:disabled):hover{background:color-mix(in srgb,var(--__P__-accent) 8%,transparent)}.__P__-send:disabled{opacity:.4;cursor:not-allowed}.__P__-send:not(:disabled):hover{transform:translateY(-1px)}.__P__-send:not(:disabled):active{transform:translateY(0)}.__P__-send:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px}.__P__-send svg{width:18px;height:18px}.__P__-composer-actions{display:flex;gap:var(--__P__-space-1);flex-wrap:wrap}.__P__-attachments{display:flex;flex-wrap:wrap;gap:6px}.__P__-attachment-chip{display:inline-flex;align-items:center;gap:6px;padding:var(--__P__-space-1) var(--__P__-space-2) var(--__P__-space-1) var(--__P__-space-1);border-radius:999px;background:var(--__P__-bg-elevated);border:1px solid var(--__P__-border);font-size:var(--__P__-text-xs);max-width:200px}.__P__-attachment-thumb{width:24px;height:24px;border-radius:999px;object-fit:cover;background:var(--__P__-border)}.__P__-attachment-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.__P__-attachment-remove{width:18px;height:18px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;color:var(--__P__-fg-muted)}.__P__-attachment-remove:hover{background:var(--__P__-border);color:var(--__P__-fg)}.__P__-dropzone{position:absolute;inset:8px;border:2px dashed var(--__P__-accent);border-radius:var(--__P__-radius);background:color-mix(in srgb,var(--__P__-accent) 8%,transparent);display:flex;align-items:center;justify-content:center;font-weight:600;color:var(--__P__-accent);pointer-events:none;z-index:10;animation:__P__-fade-in var(--__P__-dur-quick) var(--__P__-ease)}@keyframes __P__-fade-in{0%{opacity:0}to{opacity:1}}.__P__-error{margin-top:var(--__P__-space-1);padding:8px 10px;border-radius:var(--__P__-radius-sm);background:var(--__P__-danger-bg);color:var(--__P__-danger-text);font-size:var(--__P__-text-sm);display:flex;align-items:center;gap:var(--__P__-space-2)}.__P__-error button{color:inherit;text-decoration:underline;font-size:var(--__P__-text-sm)}.__P__-history{flex:1;overflow-y:auto;padding:var(--__P__-space-2) var(--__P__-space-1) var(--__P__-space-3)}.__P__-history-footer{flex:none;padding:var(--__P__-space-2) var(--__P__-space-3) var(--__P__-space-3);border-top:1px solid var(--__P__-border);background:var(--__P__-surface)}.__P__-history-new{width:100%;display:flex;align-items:center;justify-content:center;gap:var(--__P__-space-2);padding:var(--__P__-space-2) var(--__P__-space-3);border:none;border-radius:var(--__P__-radius-md);background:var(--__P__-accent);color:var(--__P__-on-accent);cursor:pointer;font-size:var(--__P__-text-sm);font-weight:600;transition:filter var(--__P__-dur-quick) var(--__P__-ease-out),transform var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-history-new svg{width:16px;height:16px}.__P__-history-new:hover{filter:brightness(1.08)}.__P__-history-new:active{transform:translateY(1px)}.__P__-history-new:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px}.__P__-history-empty{flex:1;display:flex;align-items:center;justify-content:center;padding:40px 16px;color:var(--__P__-fg-muted);font-size:calc(14px * var(--__P__-text-scale));text-align:center}.__P__-history-group{display:flex;flex-direction:column;padding:0 var(--__P__-space-3)}.__P__-history-heading{font-size:var(--__P__-text-xs);font-weight:600;color:var(--__P__-fg-muted);padding:14px 4px 8px;text-transform:uppercase;letter-spacing:.04em}.__P__-history-card{display:flex;flex-direction:column;background:var(--__P__-surface);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius-lg, 14px);overflow:hidden}.__P__-history-item{all:unset;display:flex;align-items:center;gap:var(--__P__-space-3);padding:12px var(--__P__-space-3);cursor:pointer;transition:background var(--__P__-dur-base) var(--__P__-ease)}.__P__-history-item+.__P__-history-item{border-top:1px solid var(--__P__-border)}.__P__-history-item:hover{background:var(--__P__-bg-elevated)}.__P__-history-item:focus-visible{background:var(--__P__-bg-elevated);outline:2px solid var(--__P__-focus);outline-offset:-2px}.__P__-history-avatar{flex:none;display:grid;place-items:center;width:36px;height:36px;border-radius:50%;background:color-mix(in oklab,var(--__P__-accent) 12%,transparent);color:var(--__P__-accent)}.__P__-history-avatar svg{width:18px;height:18px}.__P__-history-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.__P__-history-row{display:flex;align-items:center;justify-content:space-between;gap:var(--__P__-space-2)}.__P__-history-title{flex:1;min-width:0;font-size:calc(14px * var(--__P__-text-scale));font-weight:500;color:var(--__P__-fg);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.__P__-history-time{flex:none;font-size:var(--__P__-text-xs);color:var(--__P__-fg-muted)}.__P__-history-preview{flex:1;min-width:0;font-size:var(--__P__-text-xs);color:var(--__P__-fg-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.__P__-history-dot{flex:none;width:8px;height:8px;border-radius:50%;background:var(--__P__-accent)}.__P__-history-item[data-unread=true] .__P__-history-title{font-weight:600}.__P__-history-item[data-closed=true] .__P__-history-title{color:var(--__P__-fg-muted)}.__P__-history-item-skeleton{cursor:default;pointer-events:none}.__P__-skeleton{display:block;border-radius:4px;background:linear-gradient(90deg,color-mix(in oklab,var(--__P__-fg) 9%,transparent) 30%,color-mix(in oklab,var(--__P__-fg) 17%,transparent),color-mix(in oklab,var(--__P__-fg) 9%,transparent) 70%);background-size:200% 100%;animation:__P__-skeleton-shimmer 1.8s ease-in-out infinite}.__P__-history-avatar.__P__-skeleton{border-radius:50%}.__P__-skeleton-heading{width:52px;height:8px}.__P__-skeleton-title{width:55%;height:12px}.__P__-skeleton-time{width:34px;height:10px}.__P__-skeleton-preview{width:80%;height:10px}@keyframes __P__-skeleton-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}@media(prefers-reduced-motion:reduce){.__P__-skeleton{animation:none}}.__P__-list-loading{margin:auto;padding:var(--__P__-space-6) var(--__P__-space-4);color:var(--__P__-fg-muted);font-size:var(--__P__-text-sm);text-align:center}.__P__-readonly-banner{display:flex;flex-direction:column;align-items:center;gap:10px;padding:14px 12px;margin:0 var(--__P__-space-3) var(--__P__-space-3);border-radius:var(--__P__-radius-md);background:var(--__P__-bg-elevated);color:var(--__P__-fg-muted);text-align:center;font-size:var(--__P__-text-sm)}.__P__-readonly-label{line-height:1.4}.__P__-readonly-cta{appearance:none;border:0;cursor:pointer;padding:var(--__P__-space-2) var(--__P__-space-4);border-radius:999px;background:var(--__P__-accent);color:var(--__P__-accent-text, #fff);font:inherit;font-weight:600;font-size:var(--__P__-text-sm);transition:filter var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-readonly-cta:hover,.__P__-readonly-cta:focus-visible{filter:brightness(1.1)}.__P__-readonly-cta:focus-visible{outline:2px solid var(--__P__-accent);outline-offset:2px}.__P__-composer-footer{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;padding:10px 16px;margin:0 var(--__P__-space-3);border-top:1px solid var(--__P__-border);text-align:center;font-size:calc(11px * var(--__P__-text-scale));line-height:1.4;color:var(--__P__-fg-muted)}.__P__-disclaimer{max-width:320px;margin:0 auto;opacity:.9;letter-spacing:.01em}.__P__-poweredby{display:inline-flex;align-items:center;justify-content:center;gap:6px;color:inherit;text-decoration:none;opacity:.7;transition:opacity var(--__P__-dur-base) var(--__P__-ease);font-size:calc(11px * var(--__P__-text-scale));letter-spacing:.02em}.__P__-poweredby:hover{opacity:1}.__P__-poweredby-logo{height:12px;width:auto;display:inline-block;vertical-align:middle}.__P__-poweredby-bar{flex:none;display:flex;align-items:center;justify-content:center;padding:6px 16px;border-top:1px solid var(--__P__-border);background:var(--__P__-bg-elevated)}.__P__-menu-wrap{position:relative;display:inline-flex}.__P__-menu{position:absolute;top:100%;inset-inline-end:0;margin-top:6px;min-width:200px;padding:6px;background:var(--__P__-bg);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius-md);box-shadow:var(--__P__-shadow-panel);z-index:10;display:flex;flex-direction:column;gap:2px;animation:__P__-menu-in var(--__P__-dur-base) var(--__P__-ease)}@media(prefers-reduced-motion:reduce){.__P__-menu{animation:none}}@keyframes __P__-menu-in{0%{opacity:0;transform:translateY(-4px) scale(.98);transform-origin:top right}to{opacity:1;transform:none}}.__P__-menu-item{all:unset;display:flex;align-items:center;gap:10px;padding:8px 10px;font-size:var(--__P__-text-sm);color:var(--__P__-fg);border-radius:var(--__P__-radius-sm);cursor:pointer;user-select:none}.__P__-menu-item:hover{background:var(--__P__-bg-elevated)}.__P__-menu-item:focus-visible{background:var(--__P__-bg-elevated);outline:2px solid var(--__P__-focus);outline-offset:-2px}.__P__-menu-item[disabled]{opacity:.45;cursor:not-allowed}.__P__-menu-icon{display:inline-flex;width:16px;height:16px;color:var(--__P__-fg-muted)}.__P__-menu-icon svg{width:16px;height:16px}.__P__-menu-label{flex:1}.__P__-menu-check{display:inline-flex;color:var(--__P__-accent)}.__P__-menu-check svg{width:14px;height:14px}.__P__-menu-item-segmented{cursor:default}.__P__-menu-item-segmented:hover{background:transparent}.__P__-segmented{display:inline-flex;gap:2px;padding:2px;background:var(--__P__-bg-elevated);border-radius:var(--__P__-radius-sm)}.__P__-segment{all:unset;min-width:26px;padding:3px 8px;font-size:var(--__P__-text-xs);font-weight:600;letter-spacing:.02em;text-align:center;color:var(--__P__-fg-muted);border-radius:calc(var(--__P__-radius-sm) - 2px);cursor:pointer;transition:color .12s ease,background .12s ease}.__P__-segment:hover{color:var(--__P__-fg)}.__P__-segment[data-on=true]{background:var(--__P__-bg);color:var(--__P__-accent);box-shadow:var(--__P__-shadow-card)}.__P__-segment:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:-2px}.__P__-resize-grip{position:absolute;width:18px;height:18px;display:flex;align-items:center;justify-content:center;color:var(--__P__-fg-muted);opacity:.45;transition:opacity var(--__P__-dur-base) var(--__P__-ease);z-index:2;touch-action:none;user-select:none}.__P__-resize-grip:hover,.__P__-resize-grip:focus-visible{opacity:1}.__P__-resize-grip svg{width:10px;height:10px}.__P__-resize-grip--bottom-left{bottom:2px;left:2px;cursor:nesw-resize;transform:scaleX(-1)}.__P__-resize-grip--bottom-right{bottom:2px;right:2px;cursor:nwse-resize}.__P__-resize-grip--top-left{top:2px;left:2px;cursor:nwse-resize;transform:rotate(180deg)}.__P__-resize-grip--top-right{top:2px;right:2px;cursor:nesw-resize;transform:scaleY(-1)}:host(:not([data-mode="open"])) .__P__-resize-grip{display:none}.__P__-messenger{display:flex;flex-direction:column;overflow:hidden}.__P__-messenger-body,.__P__-messenger-pane{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.__P__-messenger-pane[hidden]{display:none}@keyframes __P__-view-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}.__P__-module{display:flex;flex-direction:column;height:100%;min-height:0}@media(prefers-reduced-motion:no-preference){.__P__-module,.__P__-history{animation:__P__-view-in .18s var(--__P__-ease-out)}}.__P__-module-scroll{flex:1;min-height:0;overflow-y:auto;padding:var(--__P__-space-3);display:flex;flex-direction:column;gap:var(--__P__-space-3)}.__P__-home{container-type:inline-size;background:radial-gradient(125% 65% at 88% 0%,color-mix(in srgb,#fff 16%,transparent),transparent 55%),linear-gradient(180deg,var(--__P__-accent) 0%,var(--__P__-accent) 22%,color-mix(in srgb,var(--__P__-accent) 28%,var(--__P__-surface)) 44%,var(--__P__-surface) 70%);border-radius:var(--__P__-radius-lg) var(--__P__-radius-lg) 0 0}.__P__-home-scroll{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;background:transparent}.__P__-home-cards{display:flex;flex-direction:column;gap:var(--__P__-space-3);padding:4px 14px 16px}.__P__-module-pad{padding:var(--__P__-space-3) var(--__P__-space-3) 0}.__P__-module-empty{display:flex;flex-direction:column;align-items:center;gap:var(--__P__-space-3);padding:var(--__P__-space-8) var(--__P__-space-4);text-align:center;color:var(--__P__-fg-muted);font-size:var(--__P__-text-base)}.__P__-module-retry{padding:var(--__P__-space-2) var(--__P__-space-4);border:1px solid var(--__P__-border-strong);border-radius:var(--__P__-radius-sm);color:var(--__P__-fg);font-weight:600;cursor:pointer;transition:background var(--__P__-dur-quick) var(--__P__-ease-out),border-color var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-module-retry:hover{background:var(--__P__-hover);border-color:var(--__P__-accent)}.__P__-module-retry:active{background:var(--__P__-border)}.__P__-module-retry:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px}.__P__-help-list{flex:1;min-height:0;overflow-y:auto;padding-bottom:var(--__P__-space-3)}.__P__-help-group{display:flex;flex-direction:column}.__P__-help-section-title{position:sticky;top:0;z-index:1;margin:0;padding:var(--__P__-space-3) var(--__P__-space-5) var(--__P__-space-2);font-size:var(--__P__-text-xs);font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--__P__-fg-muted);background:var(--__P__-bg)}.__P__-help-card{margin:0 var(--__P__-space-3) var(--__P__-space-3);background:var(--__P__-surface);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius);overflow:hidden}.__P__-help-card .__P__-list-row{border-bottom:0;border-radius:0}.__P__-help-card .__P__-list-row+.__P__-list-row{border-top:1px solid var(--__P__-border)}.__P__-module-cta{padding:var(--__P__-space-3);border-top:1px solid var(--__P__-border)}.__P__-tabbar{display:flex;border-top:1px solid var(--__P__-border);background:var(--__P__-bg-elevated);flex-shrink:0}.__P__-tab{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--__P__-space-1);min-height:48px;padding:var(--__P__-space-2) var(--__P__-space-1);color:var(--__P__-fg-muted);font-size:var(--__P__-text-xs);font-weight:600;transition:color var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-tab:hover{color:var(--__P__-fg)}.__P__-tab[aria-selected=true]{color:var(--__P__-accent)}.__P__-tab:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:-2px}.__P__-tab:active{background:var(--__P__-hover)}.__P__-tab-icon{position:relative;display:inline-flex}.__P__-tab-icon svg{width:22px;height:22px}.__P__-tab-badge{position:absolute;top:-4px;left:calc(50% + 6px);min-width:16px;height:16px;padding:0 4px;display:inline-flex;align-items:center;justify-content:center;border-radius:999px;background:var(--__P__-accent);color:var(--__P__-on-accent);font-size:calc(10px * var(--__P__-text-scale));font-weight:600;line-height:1}.__P__-home-hero{flex-shrink:0;padding:var(--__P__-space-5) var(--__P__-space-5) var(--__P__-space-3);color:var(--__P__-on-accent);--__P__-focus: var(--__P__-on-accent)}.__P__-home-hero-top{display:flex;align-items:center;justify-content:space-between;gap:var(--__P__-space-3);min-height:32px}.__P__-home-brand{font-size:clamp(calc(12px * var(--__P__-text-scale)),calc(3.2cqi * var(--__P__-text-scale)),calc(14px * var(--__P__-text-scale)));font-weight:600;letter-spacing:.01em;color:color-mix(in srgb,#fff 82%,transparent);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.__P__-home-brand-spacer{flex:1}.__P__-home-hero-actions{display:flex;align-items:center;gap:var(--__P__-space-2);flex-shrink:0}.__P__-home-hero-actions .__P__-icon-btn{color:#fff}.__P__-home-hero-actions .__P__-icon-btn:hover{background:color-mix(in srgb,#fff 18%,transparent);color:#fff}.__P__-home-hero-actions .__P__-icon-btn:active{background:color-mix(in srgb,#fff 26%,transparent)}.__P__-home-greeting{margin:28px 0 0;font-family:var(--__P__-font-display);font-size:clamp(calc(19px * var(--__P__-text-scale)),calc(5.5cqi * var(--__P__-text-scale)),var(--__P__-text-2xl));font-weight:800;line-height:1.18;letter-spacing:-.01em;overflow-wrap:anywhere}.__P__-home-lead{margin:10px 0 0;font-family:var(--__P__-font-display);font-size:clamp(calc(15px * var(--__P__-text-scale)),calc(4.2cqi * var(--__P__-text-scale)),var(--__P__-text-xl));font-weight:600;line-height:1.25;letter-spacing:-.005em;color:color-mix(in srgb,var(--__P__-on-accent) 78%,transparent);overflow-wrap:anywhere}.__P__-home-avatars{display:flex}.__P__-home-avatar{width:30px;height:30px;border-radius:999px;overflow:hidden;margin-inline-start:-10px;border:2px solid color-mix(in srgb,#fff 92%,transparent);box-shadow:0 1px 3px #0000002e;background:var(--__P__-surface);display:inline-flex;align-items:center;justify-content:center;font-size:var(--__P__-text-xs);font-weight:700;color:var(--__P__-fg)}.__P__-home-avatar:first-child{margin-inline-start:0}.__P__-home-avatar img{width:100%;height:100%;object-fit:cover}.__P__-home-content{background:var(--__P__-surface);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius);box-shadow:var(--__P__-shadow-card);overflow:hidden}.__P__-home-content-title{padding:var(--__P__-space-4) var(--__P__-space-4) var(--__P__-space-3);font-size:var(--__P__-text-sm);font-weight:700}.__P__-home-content-list{display:flex;flex-direction:column;padding:0 var(--__P__-space-2) var(--__P__-space-2)}.__P__-home-content-list .__P__-list-row+.__P__-list-row{border-top:1px solid var(--__P__-border)}.__P__-home-card{display:block;width:100%;text-align:start;background:var(--__P__-surface);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius);padding:var(--__P__-space-4);box-shadow:var(--__P__-shadow-card)}.__P__-home-card[data-interactive=true]{cursor:pointer;transition:background var(--__P__-dur-quick) var(--__P__-ease-out),transform var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-home-card[data-interactive=true]:hover{background:var(--__P__-bg-elevated)}.__P__-home-card[data-interactive=true]:active{transform:translateY(1px)}.__P__-home-card[data-interactive=true]:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px}.__P__-home-recent-row{display:flex;align-items:center;gap:var(--__P__-space-3)}.__P__-home-recent-avatar{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;flex-shrink:0;border-radius:999px;background:color-mix(in oklch,var(--__P__-accent) 14%,transparent);color:var(--__P__-accent)}.__P__-home-recent-avatar svg{width:20px;height:20px}.__P__-home-recent-body{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1}.__P__-home-recent-title{font-weight:600;font-size:calc(14px * var(--__P__-text-scale))}.__P__-home-recent-preview{color:var(--__P__-fg-muted);font-size:var(--__P__-text-sm);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.__P__-home-recent-at{color:var(--__P__-fg-muted);font-size:var(--__P__-text-xs);flex-shrink:0}.__P__-home-recent-dot{width:8px;height:8px;border-radius:999px;background:var(--__P__-accent);flex-shrink:0}.__P__-home-recent-row[data-unread=true] .__P__-home-recent-title{font-weight:700}.__P__-home-status{display:flex;align-items:center;gap:var(--__P__-space-3)}.__P__-home-status-icon svg{width:22px;height:22px;color:var(--__P__-success)}.__P__-home-status[data-level=degraded] .__P__-home-status-icon svg{color:var(--__P__-warning)}.__P__-home-status[data-level=down] .__P__-home-status-icon svg{color:var(--__P__-danger)}.__P__-home-status-text{font-weight:600;font-size:calc(14px * var(--__P__-text-scale))}.__P__-home-search{display:flex;align-items:center;gap:var(--__P__-space-2);width:100%;padding:var(--__P__-space-3) var(--__P__-space-4);border-radius:var(--__P__-radius);border:1px solid var(--__P__-border);background:var(--__P__-surface);text-align:start}.__P__-home-search[data-input=true]{background:var(--__P__-bg-elevated)}.__P__-home-search:hover{border-color:var(--__P__-border-strong)}.__P__-home-search:focus-visible,.__P__-home-search:focus-within{outline:2px solid var(--__P__-focus);outline-offset:2px}.__P__-home-search-text{flex:1;color:var(--__P__-fg-muted);font-size:calc(14px * var(--__P__-text-scale))}.__P__-home-search-input{flex:1;border:0;background:transparent;font-size:calc(14px * var(--__P__-text-scale));color:var(--__P__-fg);outline:none}.__P__-home-search-icon svg{width:18px;height:18px;color:var(--__P__-accent)}.__P__-list-row{display:flex;align-items:center;gap:var(--__P__-space-3);width:100%;min-height:44px;text-align:start;padding:var(--__P__-space-3) var(--__P__-space-2);border-radius:var(--__P__-radius-sm)}.__P__-list-row:hover{background:var(--__P__-hover)}.__P__-list-row:active{background:var(--__P__-border)}.__P__-list-row:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:-2px}.__P__-list-row-body{display:flex;flex-direction:column;min-width:0;flex:1}.__P__-list-row-title{font-weight:600;font-size:var(--__P__-text-md);line-height:1.35}.__P__-list-row-sub{color:var(--__P__-fg-muted);font-size:var(--__P__-text-sm);margin-top:var(--__P__-space-1);line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.__P__-list-row-chevron svg{width:18px;height:18px;color:var(--__P__-accent);flex-shrink:0}.__P__-back-header{display:flex;align-items:center;gap:var(--__P__-space-2);padding:10px 12px;border-bottom:1px solid var(--__P__-border);flex-shrink:0}.__P__-back-title{flex:1;text-align:center;font-size:var(--__P__-text-md);font-weight:700;margin:0;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.__P__-back-spacer{width:32px;height:1px}.__P__-content{display:flex;flex-direction:column;gap:14px;width:100%;max-width:68ch;margin:0 auto}.__P__-content-hero{width:100%;border-radius:var(--__P__-radius)}.__P__-content-subtitle{color:var(--__P__-fg-muted);margin:0}.__P__-content-frame{flex:1;min-height:0;width:100%;border:0;background:#fff}.__P__-news-list{display:flex;flex-direction:column;gap:var(--__P__-space-3)}.__P__-news-card{display:block;width:100%;text-align:start;border:1px solid var(--__P__-border);border-radius:var(--__P__-radius);overflow:hidden;background:var(--__P__-surface)}.__P__-news-card{transition:background var(--__P__-dur-quick) var(--__P__-ease-out),transform var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-news-card:hover{background:var(--__P__-bg-elevated)}.__P__-news-card:active{transform:translateY(1px)}.__P__-news-card:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px}.__P__-news-hero{width:100%;display:block}.__P__-news-body{display:flex;flex-direction:column;gap:6px;padding:14px 16px}.__P__-news-title{font-weight:700;font-size:var(--__P__-text-md)}.__P__-news-summary{color:var(--__P__-fg-muted);font-size:calc(14px * var(--__P__-text-scale));display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.__P__-modules-empty{display:flex;align-items:center;justify-content:center;position:relative}.__P__-modules-empty-close{position:absolute;top:12px;inset-inline-end:12px}.__P__-modules-empty-text{color:var(--__P__-fg-muted);font-size:var(--__P__-text-base)}.__P__-form{display:flex;flex-direction:column;gap:var(--__P__-space-4)}.__P__-field{display:flex;flex-direction:column;gap:6px}.__P__-field-label{font-size:var(--__P__-text-sm);font-weight:600;color:var(--__P__-fg)}.__P__-field-req{color:var(--__P__-danger)}.__P__-field-input{width:100%;min-width:0;max-width:100%;box-sizing:border-box;padding:10px var(--__P__-space-3);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius-md);background:var(--__P__-bg);color:var(--__P__-fg);font:inherit;font-size:var(--__P__-text-sm);resize:vertical;transition:border-color var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-field-input:focus-visible{outline:none;border-color:var(--__P__-accent)}.__P__-field[data-invalid=true] .__P__-field-input{border-color:var(--__P__-danger)}.__P__-field-input[type=date],.__P__-field-input[type=time]{appearance:none;-webkit-appearance:none}@media(pointer:coarse){.__P__-field-input{font-size:max(16px,calc(16px * var(--__P__-text-scale)))}}.__P__-field-hint{font-size:var(--__P__-text-xs);color:var(--__P__-fg-muted)}.__P__-field-error{font-size:var(--__P__-text-xs);color:var(--__P__-danger)}.__P__-field-choices{display:flex;flex-direction:column;gap:10px;padding-top:2px}.__P__-choice{display:flex;align-items:flex-start;gap:10px;font-size:var(--__P__-text-sm);color:var(--__P__-fg);cursor:pointer}.__P__-choice input{margin-top:2px;accent-color:var(--__P__-accent)}.__P__-form-actions{display:flex;justify-content:flex-end;gap:var(--__P__-space-2);margin-top:var(--__P__-space-2)}.__P__-form-submit,.__P__-tool-approve{padding:var(--__P__-space-2) var(--__P__-space-4);border:none;border-radius:var(--__P__-radius-md);background:var(--__P__-accent);color:var(--__P__-accent-text, #fff);font:inherit;font-weight:600;font-size:var(--__P__-text-sm);cursor:pointer;transition:filter var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-form-submit:hover:not(:disabled),.__P__-tool-approve:hover:not(:disabled){filter:brightness(1.06)}.__P__-form-submit:disabled{opacity:.6;cursor:default}.__P__-form-skip,.__P__-tool-reject{padding:var(--__P__-space-2) var(--__P__-space-4);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius-md);background:transparent;color:var(--__P__-fg-muted);font:inherit;font-size:var(--__P__-text-sm);cursor:pointer;transition:background var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-form-skip:hover:not(:disabled),.__P__-tool-reject:hover:not(:disabled){background:var(--__P__-bg-elevated)}.__P__-form-gate{display:flex;flex-direction:column;gap:var(--__P__-space-3);padding:var(--__P__-space-4);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius-md);background:var(--__P__-bg-elevated)}.__P__-form-gate-title{margin:0;font-size:var(--__P__-text-base);font-weight:700;color:var(--__P__-fg)}.__P__-form-gate-desc{margin:0 0 var(--__P__-space-1);font-size:var(--__P__-text-sm);color:var(--__P__-fg-muted)}.__P__-form-done{display:flex;align-items:center;justify-content:center;gap:6px;padding:6px 12px;border:1px dashed var(--__P__-border);border-radius:999px;align-self:center;font-size:var(--__P__-text-xs);font-weight:600;color:var(--__P__-fg-muted)}.__P__-form-done svg{width:14px;height:14px;color:var(--__P__-success, #22c55e)}.__P__-form-done[data-outcome=skipped] svg{color:var(--__P__-fg-muted)}.__P__-form-done-fill{border:0;background:none;padding:0 2px;cursor:pointer;font:inherit;font-weight:600;color:var(--__P__-accent)}.__P__-form-done-fill:hover{text-decoration:underline}details.__P__-form-done{display:block;padding:0;border-radius:var(--__P__-radius-md)}details[open].__P__-form-done{width:min(100%,420px);background:var(--__P__-surface)}.__P__-form-done-summary{display:flex;align-items:center;justify-content:center;gap:6px;padding:8px 12px;cursor:pointer;list-style:none}.__P__-form-done-summary::-webkit-details-marker{display:none}.__P__-form-done-summary>svg:last-child{color:var(--__P__-fg-muted);transition:transform .15s var(--__P__-ease)}details[open]>.__P__-form-done-summary>svg:last-child{transform:rotate(90deg)}.__P__-form-answers{margin:0;padding:var(--__P__-space-2) var(--__P__-space-3) var(--__P__-space-3);display:grid;gap:var(--__P__-space-3);text-align:start}.__P__-form-answer{display:grid;gap:6px}.__P__-form-answer dt{font-size:var(--__P__-text-sm);font-weight:600;color:var(--__P__-fg)}.__P__-form-answer dd{margin:0;padding:10px var(--__P__-space-3);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius-md);background:var(--__P__-bg);font-size:var(--__P__-text-sm);font-weight:400;color:var(--__P__-fg);overflow-wrap:anywhere}.__P__-tool-ask-input,.__P__-tool-approval{display:flex;flex-direction:column;gap:var(--__P__-space-2);margin-top:6px;padding:var(--__P__-space-3);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius-md);background:var(--__P__-bg-elevated)}.__P__-tool-head{display:flex;align-items:center;flex-wrap:wrap;gap:8px}.__P__-tool-badge{padding:2px 8px;border-radius:999px;background:var(--__P__-warning, #f59e0b);color:#1a1206;font-size:var(--__P__-text-xs);font-weight:600}.__P__-tool-title{font-size:var(--__P__-text-sm);color:var(--__P__-fg)}.__P__-tool-question{margin:0;font-size:var(--__P__-text-sm);font-weight:600;color:var(--__P__-fg)}.__P__-tool-desc{margin:0;font-size:var(--__P__-text-sm);color:var(--__P__-fg-muted)}.__P__-tool-args{margin:0;padding:var(--__P__-space-2);max-height:160px;overflow:auto;border-radius:var(--__P__-radius-sm);background:var(--__P__-bg);border:1px solid var(--__P__-border);color:var(--__P__-fg-muted);font-size:var(--__P__-text-xs);white-space:pre-wrap;word-break:break-word}.__P__-tool-stale-note{margin:0;font-size:var(--__P__-text-xs);color:var(--__P__-fg-muted)}.__P__-tool-decided{flex-direction:row;align-items:center;flex-wrap:wrap;gap:8px}.__P__-tool-decided-label{padding:2px 8px;border-radius:999px;background:var(--__P__-bg);border:1px solid var(--__P__-border);color:var(--__P__-fg-muted);font-size:var(--__P__-text-xs);font-weight:600}.__P__-tool-decided-label[data-approved=true]{color:var(--__P__-success, #16a34a);border-color:var(--__P__-success, #16a34a)}.__P__-tool-decided-label[data-approved=false]{color:var(--__P__-danger);border-color:var(--__P__-danger)}.__P__-tool-decided-value{font-size:var(--__P__-text-sm);color:var(--__P__-fg)}:host([dir="rtl"]) .__P__-icon-dir{transform:scaleX(-1)}:host([dir="rtl"]) .__P__-field-input[type=date],:host([dir="rtl"]) .__P__-field-input[type=time]{position:relative;text-align:right;padding-left:34px}:host([dir="rtl"]) .__P__-field-input[type=date]::-webkit-datetime-edit,:host([dir="rtl"]) .__P__-field-input[type=time]::-webkit-datetime-edit{text-align:right}:host([dir="rtl"]) .__P__-field-input[type=date]::-webkit-calendar-picker-indicator,:host([dir="rtl"]) .__P__-field-input[type=time]::-webkit-calendar-picker-indicator{position:absolute;left:var(--__P__-space-3);margin:0}\n';
|
|
1241
|
+
var panel_default = '.__P__-anchor{color-scheme:var(--__P__-color-scheme, light);right:16px;bottom:16px}.__P__-surface{display:contents}.__P__-surface[hidden]{display:none}:host([data-position="bottom-left"]) .__P__-anchor,:host([data-position="top-left"]) .__P__-anchor{right:auto;left:16px}:host([data-position="top-right"]) .__P__-anchor,:host([data-position="top-left"]) .__P__-anchor{bottom:auto;top:16px}.__P__-anchor{position:fixed;display:flex;flex-direction:column;align-items:flex-end;gap:var(--__P__-space-3);pointer-events:none}.__P__-anchor{--__P__-fab-size: 56px}.__P__-anchor[data-launcher-size=sm]{--__P__-fab-size: 44px}.__P__-anchor[data-launcher-size=md]{--__P__-fab-size: 56px}.__P__-anchor[data-launcher-size=lg]{--__P__-fab-size: 68px}.__P__-anchor>*{pointer-events:auto}.__P__-fab[data-size=sm]{--__P__-fab-size: 44px;font-size:var(--__P__-text-sm)}.__P__-fab[data-size=md]{--__P__-fab-size: 56px;font-size:calc(14px * var(--__P__-text-scale))}.__P__-fab[data-size=lg]{--__P__-fab-size: 68px;font-size:var(--__P__-text-base)}.__P__-fab{display:inline-flex;align-items:center;justify-content:center;gap:var(--__P__-space-2);color:var(--__P__-accent-text);background:var(--__P__-accent);box-shadow:var(--__P__-shadow-fab);font-weight:600;line-height:1;transform-origin:bottom right;animation:__P__-fab-in var(--__P__-dur-base) var(--__P__-ease) both;transition:transform var(--__P__-dur-base) var(--__P__-ease),opacity var(--__P__-dur-base) var(--__P__-ease),box-shadow var(--__P__-dur-base) var(--__P__-ease)}.__P__-fab:hover{transform:translateY(-2px)}.__P__-fab:active{transform:translateY(0)}.__P__-fab:focus-visible{outline:2px solid var(--__P__-on-accent);outline-offset:3px}.__P__-fab svg{width:24px;height:24px;flex-shrink:0}@keyframes __P__-fab-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:none}}.__P__-fab[data-leaving]{position:absolute;right:0;bottom:0;animation:__P__-fab-out var(--__P__-dur-quick) var(--__P__-ease) forwards;pointer-events:none}:host([data-position^="top-"]) .__P__-fab[data-leaving]{bottom:auto;top:0}:host([data-position$="-left"]) .__P__-fab[data-leaving]{right:auto;left:0}@keyframes __P__-fab-out{0%{opacity:1;transform:none}to{opacity:0;transform:scale(.85)}}.__P__-fab[data-variant=circle]{width:var(--__P__-fab-size);height:var(--__P__-fab-size);border-radius:999px}.__P__-fab[data-variant=circle] .__P__-fab-label{display:none}.__P__-fab[data-variant=pill]{height:var(--__P__-fab-size);padding:0 18px 0 16px;border-radius:999px}.__P__-fab[data-variant=bar]{height:var(--__P__-fab-size);padding:0 22px;border-radius:var(--__P__-radius)}.__P__-fab[data-variant=minimal]{height:var(--__P__-fab-size);padding:0 var(--__P__-space-4);border-radius:999px;background:transparent;color:var(--__P__-accent);box-shadow:none;border:1px solid currentColor}.__P__-fab[data-variant=minimal]:hover{background:color-mix(in srgb,var(--__P__-accent) 12%,transparent)}.__P__-callout{--__P__-callout-fab-h: var(--__P__-fab-size, 56px);--__P__-callout-gap: clamp(12px, calc(var(--__P__-callout-fab-h) * .25), 22px);--__P__-callout-nudge-direction: -1;position:absolute;display:inline-flex;align-items:center;gap:var(--__P__-space-2);padding:10px 14px;background:var(--__P__-fg);color:var(--__P__-bg);border-radius:999px;font-size:var(--__P__-text-sm);font-weight:600;line-height:1.2;box-shadow:0 10px 30px -8px #00000059;pointer-events:auto;animation:__P__-callout-in var(--__P__-dur-slow) var(--__P__-ease);z-index:1;max-width:240px;white-space:nowrap}.__P__-callout[data-position=left]{right:calc(100% + var(--__P__-callout-gap));bottom:calc(var(--__P__-callout-fab-h) / 2);transform:translateY(50%)}.__P__-callout[data-position=right]{left:calc(100% + var(--__P__-callout-gap));bottom:calc(var(--__P__-callout-fab-h) / 2);transform:translateY(50%);--__P__-callout-nudge-direction: 1}.__P__-callout[data-position=top]{bottom:calc(100% + var(--__P__-callout-gap));right:0;max-width:min(280px,calc(100vw - 32px))}.__P__-callout[data-position=bottom]{top:calc(100% + var(--__P__-callout-gap));right:0;max-width:min(280px,calc(100vw - 32px))}:host([data-position$="-left"]) .__P__-callout[data-position=top],:host([data-position$="-left"]) .__P__-callout[data-position=bottom]{right:auto;left:0}.__P__-callout[data-shape=bubble]{border-radius:var(--__P__-radius-md);white-space:normal;width:max-content;max-width:min(280px,calc(100vw - 32px))}.__P__-callout[data-shape=callout]{padding:12px 18px;font-size:calc(14px * var(--__P__-text-scale));background:var(--__P__-accent);color:var(--__P__-accent-text)}.__P__-callout:after{content:"";position:absolute;width:12px;height:12px;background:inherit;border-radius:2px;transform:rotate(45deg)}.__P__-callout[data-position=left]:after{right:-5px;top:50%;margin-top:-6px}.__P__-callout[data-position=right]:after{left:-5px;top:50%;margin-top:-6px}.__P__-callout[data-position=top]:after{bottom:-5px;right:calc(var(--__P__-fab-size, 56px) / 2 - 6px)}.__P__-callout[data-position=bottom]:after{top:-5px;right:calc(var(--__P__-fab-size, 56px) / 2 - 6px)}:host([data-position$="-left"]) .__P__-callout[data-position=top]:after,:host([data-position$="-left"]) .__P__-callout[data-position=bottom]:after{right:auto;left:calc(var(--__P__-fab-size, 56px) / 2 - 6px)}.__P__-callout[data-animated]{animation:__P__-callout-in var(--__P__-dur-slow) var(--__P__-ease),__P__-callout-nudge 1.6s var(--__P__-ease-in-out) var(--__P__-dur-slow) infinite}@keyframes __P__-callout-in{0%{opacity:0}to{opacity:1}}@keyframes __P__-callout-nudge{0%,to{margin-left:0;margin-right:0}50%{margin-left:calc(6px * var(--__P__-callout-nudge-direction));margin-right:calc(-6px * var(--__P__-callout-nudge-direction))}}@media(prefers-reduced-motion:reduce){.__P__-callout[data-animated]{animation:__P__-callout-in 1ms var(--__P__-ease)}.__P__-icon-btn[data-recording=true],.__P__-typing span{animation:none}}.__P__-callout-close{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:999px;color:inherit;opacity:.7;cursor:pointer}.__P__-callout-close:hover{opacity:1;background:color-mix(in srgb,currentColor 15%,transparent)}.__P__-callout-close:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px}.__P__-callout-close svg{width:12px;height:12px}.__P__-panel{width:var(--__P__-panel-w);height:var(--__P__-panel-h);max-width:calc(100vw - 32px);max-height:calc(100dvh - 32px);background:var(--__P__-bg);color:var(--__P__-fg);border-radius:var(--__P__-radius-lg);box-shadow:var(--__P__-shadow-panel);display:flex;flex-direction:column;overflow:hidden;transform-origin:bottom right;animation:__P__-panel-in var(--__P__-dur-slow) var(--__P__-ease);border:1px solid var(--__P__-border)}@media(prefers-reduced-motion:no-preference){.__P__-panel{transition:width var(--__P__-dur-base) var(--__P__-ease),height var(--__P__-dur-base) var(--__P__-ease),max-width var(--__P__-dur-base) var(--__P__-ease),max-height var(--__P__-dur-base) var(--__P__-ease)}.__P__-panel[data-resizing]{transition:none}}:host([data-mode="open"]) .__P__-panel{width:var(--__P__-widget-w, var(--__P__-panel-w));height:var(--__P__-widget-h, var(--__P__-panel-h));min-width:var(--__P__-resize-min-w, auto);min-height:var(--__P__-resize-min-h, auto);max-width:var(--__P__-resize-max-w, calc(100vw - 32px) );max-height:var(--__P__-resize-max-h, calc(100dvh - 32px) )}@keyframes __P__-panel-in{0%{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:none}}:host([data-mode="expanded"]) .__P__-panel{width:var(--__P__-expanded-w, 640px);height:var(--__P__-expanded-h, 820px);max-width:calc(100vw - 32px);max-height:calc(100dvh - 32px)}:host([data-mode="fullscreen"]){z-index:var(--__P__-z-panel)!important}:host([data-mode="fullscreen"]) .__P__-anchor{inset:0;padding:0;justify-content:flex-end;align-items:flex-end}:host([data-mode="fullscreen"][data-position*="top"]) .__P__-anchor{justify-content:flex-start}:host([data-mode="fullscreen"][data-position*="left"]) .__P__-anchor{align-items:flex-start}:host([data-mode="fullscreen"]) .__P__-panel{width:100vw;height:100dvh;max-width:none;max-height:none;border-radius:0;border:0}:host([data-mode="fullscreen"]) .__P__-fab{display:none}@media(max-width:640px){:host([data-mode="open"]) .__P__-anchor,:host([data-mode="expanded"]) .__P__-anchor{inset:0;align-items:stretch;padding:0}:host([data-mode="open"]) .__P__-panel,:host([data-mode="expanded"]) .__P__-panel{width:100vw;height:100dvh;max-width:none;max-height:none;border-radius:0;border:0}}:host([data-mode="inline"]) .__P__-anchor,:host([data-mode="standalone"]) .__P__-anchor{position:static;inset:auto;padding:0;align-items:stretch;width:100%;height:100%;min-height:0}:host([data-mode="inline"]) .__P__-panel,:host([data-mode="standalone"]) .__P__-panel{width:100%;height:100%;min-width:0;min-height:0;max-width:none;max-height:none;animation:none}:host([data-mode="inline"]) .__P__-fab,:host([data-mode="standalone"]) .__P__-fab{display:none}:host([data-mode="inline"]){min-height:320px}:host([data-mode="inline"]) .__P__-panel{border-radius:var(--__P__-radius)}:host([data-mode="standalone"]) .__P__-panel{border-radius:0;border:0;box-shadow:none}:host([data-mode="modal"]){position:fixed!important;inset:0!important;z-index:var(--__P__-z-panel)!important;display:block!important;width:100vw;height:100dvh;background:var(--__P__-modal-backdrop, var(--__P__-backdrop));animation:__P__-backdrop-in var(--__P__-dur-base) var(--__P__-ease) both;--__P__-panel-w: min(960px, 92vw);--__P__-panel-h: min(720px, 88dvh)}:host([data-mode="modal"]) .__P__-anchor{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;padding:var(--__P__-space-6);pointer-events:none}:host([data-mode="modal"]) .__P__-panel{pointer-events:auto;width:var(--__P__-widget-w, var(--__P__-panel-w));height:var(--__P__-widget-h, var(--__P__-panel-h));max-width:calc(100vw - 48px);max-height:calc(100dvh - 48px);min-width:0;min-height:0;border-radius:var(--__P__-radius);box-shadow:var(--__P__-shadow-panel);animation:__P__-modal-in var(--__P__-dur-base) var(--__P__-ease);translate:var(--__P__-modal-dx, 0px) var(--__P__-modal-dy, 0px)}:host([data-mode="modal"]) .__P__-header,:host([data-mode="modal"]) .__P__-back-header,:host([data-mode="modal"]) .__P__-home-hero{cursor:grab;touch-action:none}:host([data-mode="modal"]) .__P__-panel[data-dragging]{cursor:grabbing;user-select:none}:host([data-mode="modal"]) .__P__-panel[data-dragging] *{cursor:grabbing}:host([data-mode="modal"]) .__P__-fab{display:none}@keyframes __P__-backdrop-in{0%{background:#0000}to{background:var(--__P__-modal-backdrop, var(--__P__-backdrop))}}@keyframes __P__-modal-in{0%{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}:host([data-mode="drawer"]){--__P__-panel-w: min(440px, calc(100vw - 32px) );--__P__-panel-h: 100dvh}:host([data-mode="drawer"]) .__P__-anchor{position:fixed;--__P__-inset-x: var(--__P__-panel-inset, 12px);--__P__-inset-y: var(--__P__-panel-inset, 3dvh);top:var(--__P__-inset-y);bottom:auto;right:var(--__P__-inset-x);left:auto;width:min(var(--__P__-widget-w, var(--__P__-panel-w)),calc(100vw - var(--__P__-inset-x) * 2));height:min(var(--__P__-widget-h, var(--__P__-panel-h)),calc(100dvh - var(--__P__-inset-y) * 2));padding:0;display:block;pointer-events:auto}:host([data-mode="drawer"][data-position$="-left"]) .__P__-anchor{right:auto;left:var(--__P__-inset-x)}:host([data-mode="drawer"][data-position^="bottom-"]) .__P__-anchor{top:auto;bottom:var(--__P__-inset-y)}:host([data-mode="drawer"]) .__P__-panel{width:100%;height:100%;max-width:none;max-height:none;min-width:0;min-height:0;border-radius:var(--__P__-radius, 12px);border:1px solid var(--__P__-border);box-shadow:-8px 16px 32px -12px #00000038;animation:__P__-drawer-in var(--__P__-dur-base) var(--__P__-ease)}:host([data-mode="drawer"][data-position$="-left"]) .__P__-panel{box-shadow:8px 16px 32px -12px #00000038;animation:__P__-drawer-in-left var(--__P__-dur-base) var(--__P__-ease)}.__P__-fab[data-edge-tab]{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--__P__-space-2);position:fixed;top:50%;height:140px;width:auto;min-width:0;padding:10px 8px;writing-mode:vertical-rl;text-orientation:mixed;transform:translateY(-50%);transform-origin:center;animation:__P__-edge-tab-in var(--__P__-dur-base) var(--__P__-ease) both}.__P__-fab[data-edge-tab] svg{writing-mode:horizontal-tb}.__P__-fab[data-edge-tab]:hover{transform:translateY(-50%) scale(1.03)}.__P__-fab[data-edge-tab]:active{transform:translateY(-50%) scale(.97)}:host([data-position$="-right"]) .__P__-fab[data-edge-tab]{right:0;left:auto;border-radius:12px 0 0 12px;box-shadow:-6px 0 18px -8px #0000004d}:host([data-position$="-left"]) .__P__-fab[data-edge-tab]{left:0;right:auto;border-radius:0 12px 12px 0;box-shadow:6px 0 18px -8px #0000004d}.__P__-fab[data-edge-tab][data-leaving]{position:fixed;top:50%;bottom:auto;animation:__P__-edge-tab-out var(--__P__-dur-quick) var(--__P__-ease) forwards}@keyframes __P__-edge-tab-in{0%{opacity:0;transform:translateY(-50%) scale(.9)}to{opacity:1;transform:translateY(-50%) scale(1)}}@keyframes __P__-edge-tab-out{0%{opacity:1;transform:translateY(-50%) scale(1)}to{opacity:0;transform:translateY(-50%) scale(.85)}}@keyframes __P__-drawer-in{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes __P__-drawer-in-left{0%{transform:translate(-100%)}to{transform:translate(0)}}@media(prefers-reduced-motion:reduce){:host([data-mode="drawer"]) .__P__-panel,.__P__-fab[data-edge-tab]{animation:none}}.__P__-header{display:flex;align-items:center;gap:var(--__P__-space-2);padding:10px 12px;border-bottom:1px solid var(--__P__-border);background:var(--__P__-bg)}.__P__-header h1{font-size:calc(14px * var(--__P__-text-scale));font-weight:600;flex:1;letter-spacing:-.01em}.__P__-header-actions{margin-inline-start:auto;display:flex;align-items:center;gap:var(--__P__-space-1);flex-shrink:0}.__P__-agent{flex:1;display:inline-flex;align-items:center;gap:10px;min-width:0}.__P__-agent-avatar{position:relative;width:32px;height:32px;border-radius:999px;background:var(--__P__-bg-elevated);color:var(--__P__-fg-muted);display:inline-flex;align-items:center;justify-content:center;font-weight:700;font-size:var(--__P__-text-xs);overflow:hidden;flex-shrink:0}.__P__-agent-avatar img{width:100%;height:100%;object-fit:cover}.__P__-agent-avatar:after{content:"";position:absolute;right:-1px;bottom:-1px;width:10px;height:10px;border-radius:999px;border:2px solid var(--__P__-bg);background:var(--__P__-neutral)}.__P__-agent-avatar[data-status=online]:after{background:var(--__P__-success)}.__P__-agent-avatar[data-status=away]:after{background:var(--__P__-warning)}.__P__-agent-avatar[data-status=offline]:after{background:var(--__P__-neutral)}.__P__-agent-meta{display:flex;flex-direction:column;line-height:1.15;min-width:0}.__P__-agent-meta strong{font-size:calc(14px * var(--__P__-text-scale));font-weight:600;letter-spacing:-.01em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.__P__-agent-meta span{font-size:var(--__P__-text-xs);color:var(--__P__-fg-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.__P__-suggestions{display:flex;flex-wrap:nowrap;gap:var(--__P__-space-2);padding:6px 14px 10px;overflow-x:auto;overflow-y:hidden;scroll-behavior:smooth;scroll-snap-type:x proximity;scrollbar-width:none;-ms-overflow-style:none;min-width:0}.__P__-suggestions::-webkit-scrollbar{display:none}.__P__-suggestions:before,.__P__-suggestions:after{content:"";flex:1 1 0;min-width:0}.__P__-suggestion{flex:0 0 auto;scroll-snap-align:center;padding:7px 14px;border-radius:999px;background:var(--__P__-bg-elevated);border:1px solid var(--__P__-border);color:var(--__P__-fg);font-size:var(--__P__-text-sm);font-weight:500;white-space:nowrap;transition:background var(--__P__-dur-quick) var(--__P__-ease),border-color var(--__P__-dur-quick) var(--__P__-ease),transform var(--__P__-dur-quick) var(--__P__-ease)}.__P__-suggestion:hover{border-color:var(--__P__-accent);color:var(--__P__-accent);transform:translateY(-1px)}.__P__-suggestion:focus-visible{outline:2px solid var(--__P__-accent);outline-offset:2px;border-color:var(--__P__-accent)}.__P__-suggestion:active{transform:translateY(0)}.__P__-icon-btn{width:32px;height:32px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;color:var(--__P__-fg-muted);transition:background var(--__P__-dur-quick) var(--__P__-ease),color var(--__P__-dur-quick) var(--__P__-ease)}.__P__-icon-btn:hover{background:var(--__P__-bg-elevated);color:var(--__P__-fg)}.__P__-icon-btn:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px}.__P__-icon-btn:active{background:var(--__P__-border)}.__P__-icon-btn:disabled{opacity:.45;cursor:not-allowed}.__P__-icon-btn:before{content:"";position:absolute;inset:-6px}.__P__-icon-btn{position:relative}.__P__-icon-btn svg{width:18px;height:18px}.__P__-icon-btn[data-recording=true]{color:var(--__P__-accent);background:color-mix(in srgb,var(--__P__-accent) 12%,transparent);animation:__P__-pulse 1.2s var(--__P__-ease) infinite}@keyframes __P__-pulse{0%,to{box-shadow:0 0 color-mix(in srgb,var(--__P__-accent) 40%,transparent)}50%{box-shadow:0 0 0 6px color-mix(in srgb,var(--__P__-accent) 0%,transparent)}}.__P__-list,.__P__-history,.__P__-module-scroll,.__P__-home-scroll,.__P__-help-list,.__P__-tool-args,.__P__-sidebar-conversations{scrollbar-width:thin;scrollbar-color:var(--__P__-border-strong) transparent;overscroll-behavior:contain;scrollbar-gutter:stable}.__P__-list::-webkit-scrollbar,.__P__-history::-webkit-scrollbar,.__P__-module-scroll::-webkit-scrollbar,.__P__-home-scroll::-webkit-scrollbar,.__P__-help-list::-webkit-scrollbar,.__P__-tool-args::-webkit-scrollbar,.__P__-sidebar-conversations::-webkit-scrollbar{width:8px}.__P__-list::-webkit-scrollbar-thumb,.__P__-history::-webkit-scrollbar-thumb,.__P__-module-scroll::-webkit-scrollbar-thumb,.__P__-home-scroll::-webkit-scrollbar-thumb,.__P__-help-list::-webkit-scrollbar-thumb,.__P__-tool-args::-webkit-scrollbar-thumb,.__P__-sidebar-conversations::-webkit-scrollbar-thumb{background:var(--__P__-border-strong);border-radius:8px}.__P__-list-wrap{position:relative;flex:1;min-height:0;display:flex;flex-direction:column}.__P__-jump{position:absolute;inset-inline-end:14px;bottom:14px;z-index:2;display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:999px;border:1px solid var(--__P__-border);background:var(--__P__-bg-elevated);color:var(--__P__-fg);box-shadow:var(--__P__-shadow-panel);cursor:pointer;opacity:.85;transition:opacity var(--__P__-dur-quick) var(--__P__-ease),transform var(--__P__-dur-quick) var(--__P__-ease);animation:__P__-bubble-in var(--__P__-dur-base) var(--__P__-ease)}.__P__-jump:hover{opacity:1}.__P__-jump:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px;opacity:1}.__P__-jump:active{transform:translateY(1px)}.__P__-jump svg{width:18px;height:18px}.__P__-list{flex:1;min-height:0;overflow-y:auto;padding:var(--__P__-space-4);padding-bottom:var(--__P__-space-8);display:flex;flex-direction:column;gap:14px}.__P__-date-divider{position:sticky;top:var(--__P__-space-2);z-index:2;display:flex;justify-content:center;align-items:flex-start;height:0;margin:0;pointer-events:none}.__P__-date-pill{padding:3px 10px;border-radius:999px;font-size:calc(11px * var(--__P__-text-scale));font-weight:600;color:var(--__P__-fg-muted);background:var(--__P__-bg-elevated);border:1px solid var(--__P__-border);box-shadow:var(--__P__-shadow-card);opacity:0;pointer-events:none;transition:opacity var(--__P__-dur-base) var(--__P__-ease)}.__P__-list[data-scrolling=true] .__P__-date-pill{opacity:1;pointer-events:auto}@media(prefers-reduced-motion:reduce){.__P__-date-pill{transition:none}}.__P__-bubble-row{display:flex}.__P__-bubble-row[data-role=user]{justify-content:flex-end}.__P__-bubble-row[data-role=assistant]{justify-content:flex-start}.__P__-bubble{max-width:100%;padding:var(--__P__-space-3) var(--__P__-space-4);border-radius:var(--__P__-radius);line-height:1.6;font-size:calc(14px * var(--__P__-text-scale));word-wrap:break-word;overflow-wrap:anywhere;box-shadow:0 1px 2px #0000000a,0 1px 8px -4px #0000000f;animation:__P__-bubble-in var(--__P__-dur-base) var(--__P__-ease)}.__P__-bubble ::selection{background:color-mix(in srgb,var(--__P__-accent) 30%,transparent)}.__P__-bubble-row[data-role=user] .__P__-bubble ::selection{background:#fff6;color:var(--__P__-bubble-user-text)}@keyframes __P__-bubble-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}.__P__-bubble-row[data-role=user] .__P__-bubble{background:var(--__P__-bubble-user);color:var(--__P__-bubble-user-text);border-end-end-radius:5px}.__P__-bubble-row[data-role=assistant] .__P__-bubble{background:var(--__P__-bubble-assistant);color:var(--__P__-bubble-assistant-text);border-end-start-radius:5px}.__P__-bubble-col{display:flex;flex-direction:column;max-width:85%;min-width:0}.__P__-bubble-row[data-role=user] .__P__-bubble-col{align-items:flex-end}.__P__-bubble-row[data-role=assistant] .__P__-bubble-col{align-items:flex-start}.__P__-bubble-time{margin-top:3px;padding:0 4px;font-size:calc(11px * var(--__P__-text-scale));line-height:1;color:var(--__P__-fg-muted);user-select:none}.__P__-md>*:first-child{margin-top:0}.__P__-md>*:last-child{margin-bottom:0}.__P__-md p{margin:10px 0}.__P__-md h1,.__P__-md h2,.__P__-md h3,.__P__-md h4,.__P__-md h5,.__P__-md h6{margin:18px 0 8px;line-height:1.3;letter-spacing:-.01em;font-weight:700}.__P__-md h1{font-size:1.4em}.__P__-md h2{font-size:1.22em}.__P__-md h3{font-size:1.08em}.__P__-md h4,.__P__-md h5,.__P__-md h6{font-size:1em}.__P__-md>h1:first-child,.__P__-md>h2:first-child,.__P__-md>h3:first-child,.__P__-md>h4:first-child,.__P__-md>h5:first-child,.__P__-md>h6:first-child{margin-top:0}.__P__-md ul,.__P__-md ol{padding-inline-start:1.5em;margin:10px 0}.__P__-md ul{list-style:disc}.__P__-md ol{list-style:decimal}.__P__-md li{margin:6px 0;padding-inline-start:2px}.__P__-md li::marker{color:var(--__P__-fg-muted)}.__P__-md li>p{margin:6px 0}.__P__-md li>ul,.__P__-md li>ol{margin:6px 0}.__P__-md strong,.__P__-md b{font-weight:650;letter-spacing:-.005em}.__P__-md em,.__P__-md i{font-style:italic}.__P__-md code{font-family:var(--__P__-font-mono);font-size:.86em;padding:1px 6px;border-radius:5px;background:color-mix(in srgb,var(--__P__-accent) 10%,transparent);color:var(--__P__-fg);border:1px solid color-mix(in srgb,var(--__P__-accent) 16%,transparent)}.__P__-md pre{font-family:var(--__P__-font-mono);font-size:calc(12.5px * var(--__P__-text-scale));padding:12px 14px;border-radius:var(--__P__-radius-sm);background:#7f7f7f1f;overflow-x:auto;margin:var(--__P__-space-3) 0;line-height:1.5}.__P__-md pre code{padding:0;background:none}.__P__-md a{color:inherit;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px}.__P__-md a:hover{text-decoration-thickness:2px}.__P__-md blockquote{margin:14px 0;padding:6px 14px;border-inline-start:3px solid color-mix(in srgb,var(--__P__-accent) 50%,transparent);background:color-mix(in srgb,var(--__P__-accent) 5%,transparent);border-start-end-radius:var(--__P__-radius-sm);border-end-end-radius:var(--__P__-radius-sm);color:var(--__P__-fg-muted)}.__P__-md blockquote>:first-child{margin-top:0}.__P__-md blockquote>:last-child{margin-bottom:0}.__P__-md hr{border:0;height:1px;background:color-mix(in srgb,currentColor 18%,transparent);margin:var(--__P__-space-4) 0}.__P__-md table{border-collapse:collapse;margin:var(--__P__-space-3) 0;font-size:.95em;display:block;overflow-x:auto;max-width:100%;font-variant-numeric:tabular-nums}.__P__-md th,.__P__-md td{padding:6px 10px;border-bottom:1px solid color-mix(in srgb,currentColor 12%,transparent);text-align:start}.__P__-md th{font-weight:700;background:color-mix(in srgb,currentColor 6%,transparent)}.__P__-md h1+ul,.__P__-md h1+ol,.__P__-md h2+ul,.__P__-md h2+ol,.__P__-md h3+ul,.__P__-md h3+ol,.__P__-md h4+ul,.__P__-md h4+ol{margin-top:var(--__P__-space-1)}.__P__-loading{display:inline-flex;align-items:center;gap:var(--__P__-space-2);color:var(--__P__-fg-muted);font-size:var(--__P__-text-sm)}.__P__-loading-spinner{width:14px;height:14px;border-radius:999px;border:2px solid currentColor;border-top-color:transparent;animation:__P__-spin .8s linear infinite}@keyframes __P__-spin{to{transform:rotate(1turn)}}.__P__-typing{display:inline-flex;gap:var(--__P__-space-1);padding:var(--__P__-space-1) 0}.__P__-typing span{width:5px;height:5px;border-radius:999px;background:currentColor;opacity:.4;animation:__P__-blink 1.2s var(--__P__-ease) infinite}.__P__-typing span:nth-child(2){animation-delay:.2s}.__P__-typing span:nth-child(3){animation-delay:.4s}@keyframes __P__-blink{0%,80%,to{opacity:.3;transform:translateY(0)}40%{opacity:1;transform:translateY(-2px)}}.__P__-reasoning{margin:var(--__P__-space-1) 0 var(--__P__-space-2);padding-inline-start:var(--__P__-space-3);border-inline-start:2px solid var(--__P__-border-strong)}.__P__-reasoning-summary{display:inline-flex;align-items:center;gap:var(--__P__-space-1);cursor:pointer;list-style:none;user-select:none;color:var(--__P__-fg-muted);font-size:var(--__P__-text-xs);font-weight:600}.__P__-reasoning-summary:hover{color:var(--__P__-fg)}.__P__-reasoning-summary:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px;border-radius:var(--__P__-radius-sm)}.__P__-reasoning-summary::-webkit-details-marker{display:none}.__P__-reasoning-summary:before{content:"";width:5px;height:5px;border-inline-end:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(-45deg);opacity:.7;transition:transform var(--__P__-dur-quick) var(--__P__-ease)}.__P__-reasoning[open] .__P__-reasoning-summary:before{transform:rotate(45deg)}.__P__-reasoning[data-active=true] .__P__-reasoning-label{animation:__P__-reasoning-pulse 1.4s var(--__P__-ease) infinite}@keyframes __P__-reasoning-pulse{0%,to{opacity:.5}50%{opacity:1}}@media(prefers-reduced-motion:reduce){.__P__-reasoning[data-active=true] .__P__-reasoning-label{animation:none}}.__P__-reasoning-body{margin-top:var(--__P__-space-1);color:var(--__P__-fg-muted);font-size:var(--__P__-text-sm)}.__P__-reasoning-body>:first-child{margin-top:0}.__P__-reasoning-body>:last-child{margin-bottom:0}.__P__-tool-call{margin-top:6px;border:1px solid var(--__P__-border);border-radius:var(--__P__-radius-sm);background:var(--__P__-bg-elevated);font-size:var(--__P__-text-xs)}.__P__-tool-call-summary{display:flex;align-items:center;gap:6px;padding:var(--__P__-space-1) var(--__P__-space-2);cursor:pointer;list-style:none;color:var(--__P__-fg-muted)}.__P__-tool-call-summary::-webkit-details-marker{display:none}.__P__-tool-call-section{padding:0 var(--__P__-space-2) var(--__P__-space-2)}.__P__-tool-call-label{display:block;margin-bottom:4px;color:var(--__P__-fg-muted);font-size:var(--__P__-text-xs);text-transform:uppercase;letter-spacing:.04em}.__P__-tool-call-section[data-error=true] .__P__-tool-args{color:var(--__P__-danger, #c0392b)}.__P__-source{display:inline-flex;align-items:center;gap:6px;max-width:100%;margin-top:6px;margin-inline-end:6px;padding:var(--__P__-space-1) var(--__P__-space-2);border-radius:999px;background:var(--__P__-bg-elevated);border:1px solid var(--__P__-border);color:var(--__P__-fg-muted);font-size:var(--__P__-text-xs);text-decoration:none}a.__P__-source:hover{color:var(--__P__-fg);border-color:var(--__P__-accent)}.__P__-source-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.__P__-composer{border-top:1px solid var(--__P__-border);padding:10px 12px;background:var(--__P__-bg);display:flex;flex-direction:column;gap:var(--__P__-space-2)}.__P__-composer-row{display:flex;align-items:flex-end;gap:6px}.__P__-textarea{flex:1;height:40px;max-height:160px;padding:10px 12px;border-radius:var(--__P__-radius);background:var(--__P__-bg-elevated);border:1px solid transparent;font-size:calc(14px * var(--__P__-text-scale));line-height:1.4;transition:height var(--__P__-dur-quick) var(--__P__-ease),border-color var(--__P__-dur-quick) var(--__P__-ease),box-shadow var(--__P__-dur-quick) var(--__P__-ease)}.__P__-textarea:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:1px;border-color:var(--__P__-focus)}@media(pointer:coarse){.__P__-textarea,.__P__-home-search-input{font-size:max(16px,calc(16px * var(--__P__-text-scale)))}.__P__-textarea{height:44px}}.__P__-send{width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;border:1px solid transparent;transition:opacity var(--__P__-dur-quick) var(--__P__-ease),transform var(--__P__-dur-quick) var(--__P__-ease),background var(--__P__-dur-quick) var(--__P__-ease)}.__P__-send[data-shape=circle]{border-radius:999px}.__P__-send[data-shape=square]{border-radius:var(--__P__-radius-sm)}.__P__-send[data-shape=pill]{width:auto;padding:0 18px;border-radius:999px}.__P__-send[data-variant=filled]{background:var(--__P__-accent);color:var(--__P__-accent-text)}.__P__-send[data-variant=outline]{background:transparent;color:var(--__P__-accent);border-color:var(--__P__-accent)}.__P__-send[data-variant=outline]:not(:disabled):hover{background:color-mix(in srgb,var(--__P__-accent) 10%,transparent)}.__P__-send[data-variant=ghost]{background:transparent;color:var(--__P__-accent)}.__P__-send[data-variant=ghost]:not(:disabled):hover{background:color-mix(in srgb,var(--__P__-accent) 8%,transparent)}.__P__-send:disabled{opacity:.4;cursor:not-allowed}.__P__-send:not(:disabled):hover{transform:translateY(-1px)}.__P__-send:not(:disabled):active{transform:translateY(0)}.__P__-send:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px}.__P__-send svg{width:18px;height:18px}.__P__-composer-actions{display:flex;gap:var(--__P__-space-1);flex-wrap:wrap}.__P__-attachments{display:flex;flex-wrap:wrap;gap:6px}.__P__-attachment-chip{display:inline-flex;align-items:center;gap:6px;padding:var(--__P__-space-1) var(--__P__-space-2) var(--__P__-space-1) var(--__P__-space-1);border-radius:999px;background:var(--__P__-bg-elevated);border:1px solid var(--__P__-border);font-size:var(--__P__-text-xs);max-width:200px}.__P__-attachment-thumb{width:24px;height:24px;border-radius:999px;object-fit:cover;background:var(--__P__-border)}.__P__-attachment-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.__P__-attachment-remove{width:18px;height:18px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;color:var(--__P__-fg-muted)}.__P__-attachment-remove:hover{background:var(--__P__-border);color:var(--__P__-fg)}.__P__-dropzone{position:absolute;inset:8px;border:2px dashed var(--__P__-accent);border-radius:var(--__P__-radius);background:color-mix(in srgb,var(--__P__-accent) 8%,transparent);display:flex;align-items:center;justify-content:center;font-weight:600;color:var(--__P__-accent);pointer-events:none;z-index:10;animation:__P__-fade-in var(--__P__-dur-quick) var(--__P__-ease)}@keyframes __P__-fade-in{0%{opacity:0}to{opacity:1}}.__P__-error{margin-top:var(--__P__-space-1);padding:8px 10px;border-radius:var(--__P__-radius-sm);background:var(--__P__-danger-bg);color:var(--__P__-danger-text);font-size:var(--__P__-text-sm);display:flex;align-items:center;gap:var(--__P__-space-2)}.__P__-error button{color:inherit;text-decoration:underline;font-size:var(--__P__-text-sm)}.__P__-history{flex:1;overflow-y:auto;padding:var(--__P__-space-2) var(--__P__-space-1) var(--__P__-space-3)}.__P__-history-footer{flex:none;padding:var(--__P__-space-2) var(--__P__-space-3) var(--__P__-space-3);border-top:1px solid var(--__P__-border);background:var(--__P__-surface)}.__P__-history-new{width:100%;display:flex;align-items:center;justify-content:center;gap:var(--__P__-space-2);padding:var(--__P__-space-2) var(--__P__-space-3);border:none;border-radius:var(--__P__-radius-md);background:var(--__P__-accent);color:var(--__P__-on-accent);cursor:pointer;font-size:var(--__P__-text-sm);font-weight:600;transition:filter var(--__P__-dur-quick) var(--__P__-ease-out),transform var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-history-new svg{width:16px;height:16px}.__P__-history-new:hover{filter:brightness(1.08)}.__P__-history-new:active{transform:translateY(1px)}.__P__-history-new:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px}.__P__-history-empty{flex:1;display:flex;align-items:center;justify-content:center;padding:40px 16px;color:var(--__P__-fg-muted);font-size:calc(14px * var(--__P__-text-scale));text-align:center}.__P__-history-group{display:flex;flex-direction:column;padding:0 var(--__P__-space-3)}.__P__-history-heading{font-size:var(--__P__-text-xs);font-weight:600;color:var(--__P__-fg-muted);padding:14px 4px 8px;text-transform:uppercase;letter-spacing:.04em}.__P__-history-card{display:flex;flex-direction:column;background:var(--__P__-surface);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius-lg, 14px);overflow:hidden}.__P__-history-item{all:unset;display:flex;align-items:center;gap:var(--__P__-space-3);padding:12px var(--__P__-space-3);cursor:pointer;transition:background var(--__P__-dur-base) var(--__P__-ease)}.__P__-history-item+.__P__-history-item{border-top:1px solid var(--__P__-border)}.__P__-history-item:hover{background:var(--__P__-bg-elevated)}.__P__-history-item:focus-visible{background:var(--__P__-bg-elevated);outline:2px solid var(--__P__-focus);outline-offset:-2px}.__P__-history-avatar{flex:none;display:grid;place-items:center;width:36px;height:36px;border-radius:50%;background:color-mix(in oklab,var(--__P__-accent) 12%,transparent);color:var(--__P__-accent)}.__P__-history-avatar svg{width:18px;height:18px}.__P__-history-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.__P__-history-row{display:flex;align-items:center;justify-content:space-between;gap:var(--__P__-space-2)}.__P__-history-title{flex:1;min-width:0;font-size:calc(14px * var(--__P__-text-scale));font-weight:500;color:var(--__P__-fg);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.__P__-history-time{flex:none;font-size:var(--__P__-text-xs);color:var(--__P__-fg-muted)}.__P__-history-preview{flex:1;min-width:0;font-size:var(--__P__-text-xs);color:var(--__P__-fg-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.__P__-history-dot{flex:none;width:8px;height:8px;border-radius:50%;background:var(--__P__-accent)}.__P__-history-item[data-unread=true] .__P__-history-title{font-weight:600}.__P__-history-item[data-closed=true] .__P__-history-title{color:var(--__P__-fg-muted)}.__P__-history-item-skeleton{cursor:default;pointer-events:none}.__P__-skeleton{display:block;border-radius:4px;background:linear-gradient(90deg,color-mix(in oklab,var(--__P__-fg) 9%,transparent) 30%,color-mix(in oklab,var(--__P__-fg) 17%,transparent),color-mix(in oklab,var(--__P__-fg) 9%,transparent) 70%);background-size:200% 100%;animation:__P__-skeleton-shimmer 1.8s ease-in-out infinite}.__P__-history-avatar.__P__-skeleton{border-radius:50%}.__P__-skeleton-heading{width:52px;height:8px}.__P__-skeleton-title{width:55%;height:12px}.__P__-skeleton-time{width:34px;height:10px}.__P__-skeleton-preview{width:80%;height:10px}@keyframes __P__-skeleton-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}@media(prefers-reduced-motion:reduce){.__P__-skeleton{animation:none}}.__P__-list-loading{margin:auto;padding:var(--__P__-space-6) var(--__P__-space-4);color:var(--__P__-fg-muted);font-size:var(--__P__-text-sm);text-align:center}.__P__-readonly-banner{display:flex;flex-direction:column;align-items:center;gap:10px;padding:14px 12px;margin:0 var(--__P__-space-3) var(--__P__-space-3);border-radius:var(--__P__-radius-md);background:var(--__P__-bg-elevated);color:var(--__P__-fg-muted);text-align:center;font-size:var(--__P__-text-sm)}.__P__-readonly-label{line-height:1.4}.__P__-readonly-cta{appearance:none;border:0;cursor:pointer;padding:var(--__P__-space-2) var(--__P__-space-4);border-radius:999px;background:var(--__P__-accent);color:var(--__P__-accent-text, #fff);font:inherit;font-weight:600;font-size:var(--__P__-text-sm);transition:filter var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-readonly-cta:hover,.__P__-readonly-cta:focus-visible{filter:brightness(1.1)}.__P__-readonly-cta:focus-visible{outline:2px solid var(--__P__-accent);outline-offset:2px}.__P__-composer-footer{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;padding:10px 16px;margin:0 var(--__P__-space-3);border-top:1px solid var(--__P__-border);text-align:center;font-size:calc(11px * var(--__P__-text-scale));line-height:1.4;color:var(--__P__-fg-muted)}.__P__-disclaimer{max-width:320px;margin:0 auto;opacity:.9;letter-spacing:.01em}.__P__-poweredby{display:inline-flex;align-items:center;justify-content:center;gap:6px;color:inherit;text-decoration:none;opacity:.7;transition:opacity var(--__P__-dur-base) var(--__P__-ease);font-size:calc(11px * var(--__P__-text-scale));letter-spacing:.02em}.__P__-poweredby:hover{opacity:1}.__P__-poweredby-logo{height:12px;width:auto;display:inline-block;vertical-align:middle}.__P__-poweredby-bar{flex:none;display:flex;align-items:center;justify-content:center;padding:6px 16px;border-top:1px solid var(--__P__-border);background:var(--__P__-bg-elevated)}.__P__-menu-wrap{position:relative;display:inline-flex}.__P__-menu{position:absolute;top:100%;inset-inline-end:0;margin-top:6px;min-width:200px;padding:6px;background:var(--__P__-bg);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius-md);box-shadow:var(--__P__-shadow-panel);z-index:10;display:flex;flex-direction:column;gap:2px;animation:__P__-menu-in var(--__P__-dur-base) var(--__P__-ease)}@media(prefers-reduced-motion:reduce){.__P__-menu{animation:none}}@keyframes __P__-menu-in{0%{opacity:0;transform:translateY(-4px) scale(.98);transform-origin:top right}to{opacity:1;transform:none}}.__P__-menu-item{all:unset;display:flex;align-items:center;gap:10px;padding:8px 10px;font-size:var(--__P__-text-sm);color:var(--__P__-fg);border-radius:var(--__P__-radius-sm);cursor:pointer;user-select:none}.__P__-menu-item:hover{background:var(--__P__-bg-elevated)}.__P__-menu-item:focus-visible{background:var(--__P__-bg-elevated);outline:2px solid var(--__P__-focus);outline-offset:-2px}.__P__-menu-item[disabled]{opacity:.45;cursor:not-allowed}.__P__-menu-icon{display:inline-flex;width:16px;height:16px;color:var(--__P__-fg-muted)}.__P__-menu-icon svg{width:16px;height:16px}.__P__-menu-label{flex:1}.__P__-menu-check{display:inline-flex;color:var(--__P__-accent)}.__P__-menu-check svg{width:14px;height:14px}.__P__-menu-item-segmented{cursor:default}.__P__-menu-item-segmented:hover{background:transparent}.__P__-segmented{display:inline-flex;gap:2px;padding:2px;background:var(--__P__-bg-elevated);border-radius:var(--__P__-radius-sm)}.__P__-segment{all:unset;min-width:26px;padding:3px 8px;font-size:var(--__P__-text-xs);font-weight:600;letter-spacing:.02em;text-align:center;color:var(--__P__-fg-muted);border-radius:calc(var(--__P__-radius-sm) - 2px);cursor:pointer;transition:color .12s ease,background .12s ease}.__P__-segment:hover{color:var(--__P__-fg)}.__P__-segment[data-on=true]{background:var(--__P__-bg);color:var(--__P__-accent);box-shadow:var(--__P__-shadow-card)}.__P__-segment:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:-2px}.__P__-resize-grip{position:absolute;width:18px;height:18px;display:flex;align-items:center;justify-content:center;color:var(--__P__-fg-muted);opacity:.45;transition:opacity var(--__P__-dur-base) var(--__P__-ease);z-index:2;touch-action:none;user-select:none}.__P__-resize-grip:hover,.__P__-resize-grip:focus-visible{opacity:1}.__P__-resize-grip svg{width:10px;height:10px}.__P__-resize-grip--bottom-left{bottom:2px;left:2px;cursor:nesw-resize;transform:scaleX(-1)}.__P__-resize-grip--bottom-right{bottom:2px;right:2px;cursor:nwse-resize}.__P__-resize-grip--top-left{top:2px;left:2px;cursor:nwse-resize;transform:rotate(180deg)}.__P__-resize-grip--top-right{top:2px;right:2px;cursor:nesw-resize;transform:scaleY(-1)}:host(:not([data-mode="open"])) .__P__-resize-grip{display:none}.__P__-messenger{display:flex;flex-direction:column;overflow:hidden}.__P__-messenger-body,.__P__-messenger-pane{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.__P__-messenger-pane[hidden]{display:none}@keyframes __P__-view-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}.__P__-module{display:flex;flex-direction:column;height:100%;min-height:0}@media(prefers-reduced-motion:no-preference){.__P__-module,.__P__-history{animation:__P__-view-in .18s var(--__P__-ease-out)}}.__P__-module-scroll{flex:1;min-height:0;overflow-y:auto;padding:var(--__P__-space-3);display:flex;flex-direction:column;gap:var(--__P__-space-3)}.__P__-home{container-type:inline-size;background:radial-gradient(125% 65% at 88% 0%,color-mix(in srgb,#fff 16%,transparent),transparent 55%),linear-gradient(180deg,var(--__P__-accent) 0%,var(--__P__-accent) 22%,color-mix(in srgb,var(--__P__-accent) 28%,var(--__P__-surface)) 44%,var(--__P__-surface) 70%);border-radius:var(--__P__-radius-lg) var(--__P__-radius-lg) 0 0}.__P__-home-scroll{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;background:transparent}.__P__-home-cards{display:flex;flex-direction:column;gap:var(--__P__-space-3);padding:4px 14px 16px}.__P__-module-pad{padding:var(--__P__-space-3) var(--__P__-space-3) 0}.__P__-module-empty{display:flex;flex-direction:column;align-items:center;gap:var(--__P__-space-3);padding:var(--__P__-space-8) var(--__P__-space-4);text-align:center;color:var(--__P__-fg-muted);font-size:var(--__P__-text-base)}.__P__-module-retry{padding:var(--__P__-space-2) var(--__P__-space-4);border:1px solid var(--__P__-border-strong);border-radius:var(--__P__-radius-sm);color:var(--__P__-fg);font-weight:600;cursor:pointer;transition:background var(--__P__-dur-quick) var(--__P__-ease-out),border-color var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-module-retry:hover{background:var(--__P__-hover);border-color:var(--__P__-accent)}.__P__-module-retry:active{background:var(--__P__-border)}.__P__-module-retry:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px}.__P__-help-list{flex:1;min-height:0;overflow-y:auto;padding-bottom:var(--__P__-space-3)}.__P__-help-group{display:flex;flex-direction:column}.__P__-help-section-title{position:sticky;top:0;z-index:1;margin:0;padding:var(--__P__-space-3) var(--__P__-space-5) var(--__P__-space-2);font-size:var(--__P__-text-xs);font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--__P__-fg-muted);background:var(--__P__-bg)}.__P__-help-card{margin:0 var(--__P__-space-3) var(--__P__-space-3);background:var(--__P__-surface);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius);overflow:hidden}.__P__-help-card .__P__-list-row{border-bottom:0;border-radius:0}.__P__-help-card .__P__-list-row+.__P__-list-row{border-top:1px solid var(--__P__-border)}.__P__-module-cta{padding:var(--__P__-space-3);border-top:1px solid var(--__P__-border)}.__P__-tabbar{display:flex;border-top:1px solid var(--__P__-border);background:var(--__P__-bg-elevated);flex-shrink:0}.__P__-tab{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--__P__-space-1);min-height:48px;padding:var(--__P__-space-2) var(--__P__-space-1);color:var(--__P__-fg-muted);font-size:var(--__P__-text-xs);font-weight:600;transition:color var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-tab:hover{color:var(--__P__-fg)}.__P__-tab[aria-selected=true]{color:var(--__P__-accent)}.__P__-tab:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:-2px}.__P__-tab:active{background:var(--__P__-hover)}.__P__-tab-icon{position:relative;display:inline-flex}.__P__-tab-icon svg{width:22px;height:22px}.__P__-tab-badge{position:absolute;top:-4px;left:calc(50% + 6px);min-width:16px;height:16px;padding:0 4px;display:inline-flex;align-items:center;justify-content:center;border-radius:999px;background:var(--__P__-accent);color:var(--__P__-on-accent);font-size:calc(10px * var(--__P__-text-scale));font-weight:600;line-height:1}.__P__-home-hero{flex-shrink:0;padding:var(--__P__-space-5) var(--__P__-space-5) var(--__P__-space-3);color:var(--__P__-on-accent);--__P__-focus: var(--__P__-on-accent)}.__P__-home-hero-top{display:flex;align-items:center;justify-content:space-between;gap:var(--__P__-space-3);min-height:32px}.__P__-home-brand{font-size:clamp(calc(12px * var(--__P__-text-scale)),calc(3.2cqi * var(--__P__-text-scale)),calc(14px * var(--__P__-text-scale)));font-weight:600;letter-spacing:.01em;color:color-mix(in srgb,#fff 82%,transparent);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.__P__-home-brand-spacer{flex:1}.__P__-home-hero-actions{display:flex;align-items:center;gap:var(--__P__-space-2);flex-shrink:0}.__P__-home-hero-actions .__P__-icon-btn{color:#fff}.__P__-home-hero-actions .__P__-icon-btn:hover{background:color-mix(in srgb,#fff 18%,transparent);color:#fff}.__P__-home-hero-actions .__P__-icon-btn:active{background:color-mix(in srgb,#fff 26%,transparent)}.__P__-home-greeting{margin:28px 0 0;font-family:var(--__P__-font-display);font-size:clamp(calc(19px * var(--__P__-text-scale)),calc(5.5cqi * var(--__P__-text-scale)),var(--__P__-text-2xl));font-weight:800;line-height:1.18;letter-spacing:-.01em;overflow-wrap:anywhere}.__P__-home-lead{margin:10px 0 0;font-family:var(--__P__-font-display);font-size:clamp(calc(15px * var(--__P__-text-scale)),calc(4.2cqi * var(--__P__-text-scale)),var(--__P__-text-xl));font-weight:600;line-height:1.25;letter-spacing:-.005em;color:color-mix(in srgb,var(--__P__-on-accent) 78%,transparent);overflow-wrap:anywhere}.__P__-home-avatars{display:flex}.__P__-home-avatar{width:30px;height:30px;border-radius:999px;overflow:hidden;margin-inline-start:-10px;border:2px solid color-mix(in srgb,#fff 92%,transparent);box-shadow:0 1px 3px #0000002e;background:var(--__P__-surface);display:inline-flex;align-items:center;justify-content:center;font-size:var(--__P__-text-xs);font-weight:700;color:var(--__P__-fg)}.__P__-home-avatar:first-child{margin-inline-start:0}.__P__-home-avatar img{width:100%;height:100%;object-fit:cover}.__P__-home-content{background:var(--__P__-surface);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius);box-shadow:var(--__P__-shadow-card);overflow:hidden}.__P__-home-content-title{padding:var(--__P__-space-4) var(--__P__-space-4) var(--__P__-space-3);font-size:var(--__P__-text-sm);font-weight:700}.__P__-home-content-list{display:flex;flex-direction:column;padding:0 var(--__P__-space-2) var(--__P__-space-2)}.__P__-home-content-list .__P__-list-row+.__P__-list-row{border-top:1px solid var(--__P__-border)}.__P__-home-card{display:block;width:100%;text-align:start;background:var(--__P__-surface);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius);padding:var(--__P__-space-4);box-shadow:var(--__P__-shadow-card)}.__P__-home-card[data-interactive=true]{cursor:pointer;transition:background var(--__P__-dur-quick) var(--__P__-ease-out),transform var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-home-card[data-interactive=true]:hover{background:var(--__P__-bg-elevated)}.__P__-home-card[data-interactive=true]:active{transform:translateY(1px)}.__P__-home-card[data-interactive=true]:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px}.__P__-home-recent-row{display:flex;align-items:center;gap:var(--__P__-space-3)}.__P__-home-recent-avatar{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;flex-shrink:0;border-radius:999px;background:color-mix(in oklch,var(--__P__-accent) 14%,transparent);color:var(--__P__-accent)}.__P__-home-recent-avatar svg{width:20px;height:20px}.__P__-home-recent-body{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1}.__P__-home-recent-title{font-weight:600;font-size:calc(14px * var(--__P__-text-scale))}.__P__-home-recent-preview{color:var(--__P__-fg-muted);font-size:var(--__P__-text-sm);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.__P__-home-recent-at{color:var(--__P__-fg-muted);font-size:var(--__P__-text-xs);flex-shrink:0}.__P__-home-recent-dot{width:8px;height:8px;border-radius:999px;background:var(--__P__-accent);flex-shrink:0}.__P__-home-recent-row[data-unread=true] .__P__-home-recent-title{font-weight:700}.__P__-home-status{display:flex;align-items:center;gap:var(--__P__-space-3)}.__P__-home-status-icon svg{width:22px;height:22px;color:var(--__P__-success)}.__P__-home-status[data-level=degraded] .__P__-home-status-icon svg{color:var(--__P__-warning)}.__P__-home-status[data-level=down] .__P__-home-status-icon svg{color:var(--__P__-danger)}.__P__-home-status-text{font-weight:600;font-size:calc(14px * var(--__P__-text-scale))}.__P__-home-search{display:flex;align-items:center;gap:var(--__P__-space-2);width:100%;padding:var(--__P__-space-3) var(--__P__-space-4);border-radius:var(--__P__-radius);border:1px solid var(--__P__-border);background:var(--__P__-surface);text-align:start}.__P__-home-search[data-input=true]{background:var(--__P__-bg-elevated)}.__P__-home-search:hover{border-color:var(--__P__-border-strong)}.__P__-home-search:focus-visible,.__P__-home-search:focus-within{outline:2px solid var(--__P__-focus);outline-offset:2px}.__P__-home-search-text{flex:1;color:var(--__P__-fg-muted);font-size:calc(14px * var(--__P__-text-scale))}.__P__-home-search-input{flex:1;border:0;background:transparent;font-size:calc(14px * var(--__P__-text-scale));color:var(--__P__-fg);outline:none}.__P__-home-search-icon svg{width:18px;height:18px;color:var(--__P__-accent)}.__P__-list-row{display:flex;align-items:center;gap:var(--__P__-space-3);width:100%;min-height:44px;text-align:start;padding:var(--__P__-space-3) var(--__P__-space-2);border-radius:var(--__P__-radius-sm)}.__P__-list-row:hover{background:var(--__P__-hover)}.__P__-list-row:active{background:var(--__P__-border)}.__P__-list-row:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:-2px}.__P__-list-row-body{display:flex;flex-direction:column;min-width:0;flex:1}.__P__-list-row-title{font-weight:600;font-size:var(--__P__-text-md);line-height:1.35}.__P__-list-row-sub{color:var(--__P__-fg-muted);font-size:var(--__P__-text-sm);margin-top:var(--__P__-space-1);line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.__P__-list-row-chevron svg{width:18px;height:18px;color:var(--__P__-accent);flex-shrink:0}.__P__-back-header{display:flex;align-items:center;gap:var(--__P__-space-2);padding:10px 12px;border-bottom:1px solid var(--__P__-border);flex-shrink:0}.__P__-back-title{flex:1;text-align:center;font-size:var(--__P__-text-md);font-weight:700;margin:0;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.__P__-back-spacer{width:32px;height:1px}.__P__-content{display:flex;flex-direction:column;gap:14px;width:100%;max-width:68ch;margin:0 auto}.__P__-content-hero{width:100%;border-radius:var(--__P__-radius)}.__P__-content-subtitle{color:var(--__P__-fg-muted);margin:0}.__P__-content-frame{flex:1;min-height:0;width:100%;border:0;background:#fff}.__P__-news-list{display:flex;flex-direction:column;gap:var(--__P__-space-3)}.__P__-news-card{display:block;width:100%;text-align:start;border:1px solid var(--__P__-border);border-radius:var(--__P__-radius);overflow:hidden;background:var(--__P__-surface)}.__P__-news-card{transition:background var(--__P__-dur-quick) var(--__P__-ease-out),transform var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-news-card:hover{background:var(--__P__-bg-elevated)}.__P__-news-card:active{transform:translateY(1px)}.__P__-news-card:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px}.__P__-news-hero{width:100%;display:block}.__P__-news-body{display:flex;flex-direction:column;gap:6px;padding:14px 16px}.__P__-news-title{font-weight:700;font-size:var(--__P__-text-md)}.__P__-news-summary{color:var(--__P__-fg-muted);font-size:calc(14px * var(--__P__-text-scale));display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.__P__-modules-empty{display:flex;align-items:center;justify-content:center;position:relative}.__P__-modules-empty-close{position:absolute;top:12px;inset-inline-end:12px}.__P__-modules-empty-text{color:var(--__P__-fg-muted);font-size:var(--__P__-text-base)}.__P__-form{display:flex;flex-direction:column;gap:var(--__P__-space-4)}.__P__-field{display:flex;flex-direction:column;gap:6px}.__P__-field-label{font-size:var(--__P__-text-sm);font-weight:600;color:var(--__P__-fg)}.__P__-field-req{color:var(--__P__-danger)}.__P__-field-input{width:100%;min-width:0;max-width:100%;box-sizing:border-box;padding:10px var(--__P__-space-3);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius-md);background:var(--__P__-bg);color:var(--__P__-fg);font:inherit;font-size:var(--__P__-text-sm);resize:vertical;transition:border-color var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-field-input:focus-visible{outline:none;border-color:var(--__P__-accent)}.__P__-field[data-invalid=true] .__P__-field-input{border-color:var(--__P__-danger)}.__P__-field-input[type=date],.__P__-field-input[type=time]{appearance:none;-webkit-appearance:none}@media(pointer:coarse){.__P__-field-input{font-size:max(16px,calc(16px * var(--__P__-text-scale)))}}.__P__-field-hint{font-size:var(--__P__-text-xs);color:var(--__P__-fg-muted)}.__P__-field-error{font-size:var(--__P__-text-xs);color:var(--__P__-danger)}.__P__-field-choices{display:flex;flex-direction:column;gap:10px;padding-top:2px}.__P__-choice{display:flex;align-items:flex-start;gap:10px;font-size:var(--__P__-text-sm);color:var(--__P__-fg);cursor:pointer}.__P__-choice input{margin-top:2px;accent-color:var(--__P__-accent)}.__P__-form-actions{display:flex;justify-content:flex-end;gap:var(--__P__-space-2);margin-top:var(--__P__-space-2)}.__P__-form-submit,.__P__-tool-approve{padding:var(--__P__-space-2) var(--__P__-space-4);border:none;border-radius:var(--__P__-radius-md);background:var(--__P__-accent);color:var(--__P__-accent-text, #fff);font:inherit;font-weight:600;font-size:var(--__P__-text-sm);cursor:pointer;transition:filter var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-form-submit:hover:not(:disabled),.__P__-tool-approve:hover:not(:disabled){filter:brightness(1.06)}.__P__-form-submit:disabled{opacity:.6;cursor:default}.__P__-form-skip,.__P__-tool-reject{padding:var(--__P__-space-2) var(--__P__-space-4);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius-md);background:transparent;color:var(--__P__-fg-muted);font:inherit;font-size:var(--__P__-text-sm);cursor:pointer;transition:background var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-form-skip:hover:not(:disabled),.__P__-tool-reject:hover:not(:disabled){background:var(--__P__-bg-elevated)}.__P__-form-gate{display:flex;flex-direction:column;gap:var(--__P__-space-3);padding:var(--__P__-space-4);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius-md);background:var(--__P__-bg-elevated)}.__P__-form-gate-title{margin:0;font-size:var(--__P__-text-base);font-weight:700;color:var(--__P__-fg)}.__P__-form-gate-desc{margin:0 0 var(--__P__-space-1);font-size:var(--__P__-text-sm);color:var(--__P__-fg-muted)}.__P__-form-done{display:flex;align-items:center;justify-content:center;gap:6px;padding:6px 12px;border:1px dashed var(--__P__-border);border-radius:999px;align-self:center;font-size:var(--__P__-text-xs);font-weight:600;color:var(--__P__-fg-muted)}.__P__-form-done svg{width:14px;height:14px;color:var(--__P__-success, #22c55e)}.__P__-form-done[data-outcome=skipped] svg{color:var(--__P__-fg-muted)}.__P__-form-done-fill{border:0;background:none;padding:0 2px;cursor:pointer;font:inherit;font-weight:600;color:var(--__P__-accent)}.__P__-form-done-fill:hover{text-decoration:underline}details.__P__-form-done{display:block;padding:0;border-radius:var(--__P__-radius-md)}details[open].__P__-form-done{width:min(100%,420px);background:var(--__P__-surface)}.__P__-form-done-summary{display:flex;align-items:center;justify-content:center;gap:6px;padding:8px 12px;cursor:pointer;list-style:none}.__P__-form-done-summary::-webkit-details-marker{display:none}.__P__-form-done-summary>svg:last-child{color:var(--__P__-fg-muted);transition:transform .15s var(--__P__-ease)}details[open]>.__P__-form-done-summary>svg:last-child{transform:rotate(90deg)}.__P__-form-answers{margin:0;padding:var(--__P__-space-2) var(--__P__-space-3) var(--__P__-space-3);display:grid;gap:var(--__P__-space-3);text-align:start}.__P__-form-answer{display:grid;gap:6px}.__P__-form-answer dt{font-size:var(--__P__-text-sm);font-weight:600;color:var(--__P__-fg)}.__P__-form-answer dd{margin:0;padding:10px var(--__P__-space-3);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius-md);background:var(--__P__-bg);font-size:var(--__P__-text-sm);font-weight:400;color:var(--__P__-fg);overflow-wrap:anywhere}.__P__-tool-ask-input,.__P__-tool-approval{display:flex;flex-direction:column;gap:var(--__P__-space-2);margin-top:6px;padding:var(--__P__-space-3);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius-md);background:var(--__P__-bg-elevated)}.__P__-tool-head{display:flex;align-items:center;flex-wrap:wrap;gap:8px}.__P__-tool-badge{padding:2px 8px;border-radius:999px;background:var(--__P__-warning, #f59e0b);color:#1a1206;font-size:var(--__P__-text-xs);font-weight:600}.__P__-tool-title{font-size:var(--__P__-text-sm);color:var(--__P__-fg)}.__P__-tool-question{margin:0;font-size:var(--__P__-text-sm);font-weight:600;color:var(--__P__-fg)}.__P__-tool-desc{margin:0;font-size:var(--__P__-text-sm);color:var(--__P__-fg-muted)}.__P__-tool-args{margin:0;padding:var(--__P__-space-2);max-height:160px;overflow:auto;border-radius:var(--__P__-radius-sm);background:var(--__P__-bg);border:1px solid var(--__P__-border);color:var(--__P__-fg-muted);font-size:var(--__P__-text-xs);white-space:pre-wrap;word-break:break-word}.__P__-tool-stale-note{margin:0;font-size:var(--__P__-text-xs);color:var(--__P__-fg-muted)}.__P__-tool-decided{flex-direction:row;align-items:center;flex-wrap:wrap;gap:8px}.__P__-tool-decided-label{padding:2px 8px;border-radius:999px;background:var(--__P__-bg);border:1px solid var(--__P__-border);color:var(--__P__-fg-muted);font-size:var(--__P__-text-xs);font-weight:600}.__P__-tool-decided-label[data-approved=true]{color:var(--__P__-success, #16a34a);border-color:var(--__P__-success, #16a34a)}.__P__-tool-decided-label[data-approved=false]{color:var(--__P__-danger);border-color:var(--__P__-danger)}.__P__-tool-decided-value{font-size:var(--__P__-text-sm);color:var(--__P__-fg)}:host([dir="rtl"]) .__P__-icon-dir{transform:scaleX(-1)}:host([dir="rtl"]) .__P__-field-input[type=date],:host([dir="rtl"]) .__P__-field-input[type=time]{position:relative;text-align:right;padding-left:34px}:host([dir="rtl"]) .__P__-field-input[type=date]::-webkit-datetime-edit,:host([dir="rtl"]) .__P__-field-input[type=time]::-webkit-datetime-edit{text-align:right}:host([dir="rtl"]) .__P__-field-input[type=date]::-webkit-calendar-picker-indicator,:host([dir="rtl"]) .__P__-field-input[type=time]::-webkit-calendar-picker-indicator{position:absolute;left:var(--__P__-space-3);margin:0}\n';
|
|
1234
1242
|
|
|
1235
1243
|
// src/styles/standalone.css
|
|
1236
1244
|
var standalone_default = ".__P__-standalone-page{margin:0;height:100vh;background:var(--__P__-bg, #fff);display:grid;place-items:stretch}\n";
|
|
@@ -1318,22 +1326,22 @@ function attachAdoptedSheet(shadow, doc) {
|
|
|
1318
1326
|
}
|
|
1319
1327
|
}
|
|
1320
1328
|
function applyThemeOverrides(host, overrides) {
|
|
1321
|
-
const
|
|
1322
|
-
if (overrides.accent) host.style.setProperty(`--${
|
|
1323
|
-
if (overrides.accentText) host.style.setProperty(`--${
|
|
1324
|
-
if (overrides.radius) host.style.setProperty(`--${
|
|
1325
|
-
if (overrides.fontFamily) host.style.setProperty(`--${
|
|
1329
|
+
const p35 = BRAND.cssPrefix;
|
|
1330
|
+
if (overrides.accent) host.style.setProperty(`--${p35}-accent-user`, overrides.accent);
|
|
1331
|
+
if (overrides.accentText) host.style.setProperty(`--${p35}-accent-text-user`, overrides.accentText);
|
|
1332
|
+
if (overrides.radius) host.style.setProperty(`--${p35}-radius`, overrides.radius);
|
|
1333
|
+
if (overrides.fontFamily) host.style.setProperty(`--${p35}-font`, overrides.fontFamily);
|
|
1326
1334
|
}
|
|
1327
1335
|
function applyThemeMode(host, mode) {
|
|
1328
1336
|
host.dataset.theme = mode;
|
|
1329
1337
|
}
|
|
1330
1338
|
function applySize(host, size) {
|
|
1331
|
-
const
|
|
1332
|
-
if (size.width !== void 0) host.style.setProperty(`--${
|
|
1333
|
-
if (size.height !== void 0) host.style.setProperty(`--${
|
|
1334
|
-
if (size.expanded?.width !== void 0) host.style.setProperty(`--${
|
|
1335
|
-
if (size.expanded?.height !== void 0) host.style.setProperty(`--${
|
|
1336
|
-
if (size.inset !== void 0) host.style.setProperty(`--${
|
|
1339
|
+
const p35 = BRAND.cssPrefix;
|
|
1340
|
+
if (size.width !== void 0) host.style.setProperty(`--${p35}-panel-w`, size.width);
|
|
1341
|
+
if (size.height !== void 0) host.style.setProperty(`--${p35}-panel-h`, size.height);
|
|
1342
|
+
if (size.expanded?.width !== void 0) host.style.setProperty(`--${p35}-expanded-w`, size.expanded.width);
|
|
1343
|
+
if (size.expanded?.height !== void 0) host.style.setProperty(`--${p35}-expanded-h`, size.expanded.height);
|
|
1344
|
+
if (size.inset !== void 0) host.style.setProperty(`--${p35}-panel-inset`, size.inset);
|
|
1337
1345
|
}
|
|
1338
1346
|
function applyPosition(host, pos) {
|
|
1339
1347
|
host.dataset.position = pos;
|
|
@@ -1353,7 +1361,7 @@ import { h, render as renderPreact } from "preact";
|
|
|
1353
1361
|
|
|
1354
1362
|
// src/ui/app.tsx
|
|
1355
1363
|
import { useCallback as useCallback6, useEffect as useEffect16, useMemo as useMemo3, useRef as useRef9, useState as useState13 } from "preact/hooks";
|
|
1356
|
-
import { batch, useComputed as
|
|
1364
|
+
import { batch, useComputed as useComputed8, useSignal as useSignal2 } from "@preact/signals";
|
|
1357
1365
|
|
|
1358
1366
|
// src/core/handshake-shape.ts
|
|
1359
1367
|
function isPlainObject2(raw) {
|
|
@@ -1437,7 +1445,7 @@ function createAuth(opts) {
|
|
|
1437
1445
|
}
|
|
1438
1446
|
|
|
1439
1447
|
// src/core/version.ts
|
|
1440
|
-
var ELEMENTS_VERSION = true ? "0.
|
|
1448
|
+
var ELEMENTS_VERSION = true ? "0.45.0" : "0.0.0-dev";
|
|
1441
1449
|
var ELEMENTS_VERSION_PARAM = "_ev";
|
|
1442
1450
|
|
|
1443
1451
|
// src/stream/types.ts
|
|
@@ -1522,11 +1530,11 @@ function toBase64Url(json) {
|
|
|
1522
1530
|
var nonEmpty = (ctx) => ctx && Object.keys(ctx).length > 0 ? ctx : void 0;
|
|
1523
1531
|
function encodeContext(user, page) {
|
|
1524
1532
|
const u = nonEmpty(user);
|
|
1525
|
-
const
|
|
1526
|
-
if (!u && !
|
|
1533
|
+
const p35 = nonEmpty(page);
|
|
1534
|
+
if (!u && !p35) return void 0;
|
|
1527
1535
|
const envelope = {};
|
|
1528
1536
|
if (u) envelope.user = u;
|
|
1529
|
-
if (
|
|
1537
|
+
if (p35) envelope.page = p35;
|
|
1530
1538
|
return toBase64Url(JSON.stringify(envelope));
|
|
1531
1539
|
}
|
|
1532
1540
|
|
|
@@ -1536,6 +1544,13 @@ function parseWireDate(value) {
|
|
|
1536
1544
|
const ms = Date.parse(value);
|
|
1537
1545
|
return Number.isFinite(ms) ? ms : void 0;
|
|
1538
1546
|
}
|
|
1547
|
+
function toolPartType(toolName) {
|
|
1548
|
+
const bare = toolName.startsWith("tool:") ? toolName.slice(5) : toolName;
|
|
1549
|
+
return `tool-${bare}`;
|
|
1550
|
+
}
|
|
1551
|
+
function toolNameFromType(type) {
|
|
1552
|
+
return type.startsWith("tool-") ? type.slice(5) : type;
|
|
1553
|
+
}
|
|
1539
1554
|
var DEFAULT_PATHS = {
|
|
1540
1555
|
/** Conversation bootstrap. `POST` → deployment config + per-visitor state. */
|
|
1541
1556
|
handshake: "/pai/handshake",
|
|
@@ -1617,8 +1632,8 @@ function buildSendMessageRequest(params) {
|
|
|
1617
1632
|
if (Object.keys(data).length > 0) body.data = data;
|
|
1618
1633
|
return body;
|
|
1619
1634
|
}
|
|
1620
|
-
function isResolvedToolPart(
|
|
1621
|
-
return
|
|
1635
|
+
function isResolvedToolPart(p35) {
|
|
1636
|
+
return p35.state === "output-available" || p35.state === "output-error" || p35.state === "output-denied" || p35.approval?.approved !== void 0;
|
|
1622
1637
|
}
|
|
1623
1638
|
function normalizeToolRef(ref) {
|
|
1624
1639
|
if (typeof ref === "string") return ref ? { code: ref } : null;
|
|
@@ -1626,24 +1641,23 @@ function normalizeToolRef(ref) {
|
|
|
1626
1641
|
}
|
|
1627
1642
|
function messageToWireParts(m) {
|
|
1628
1643
|
const out = [];
|
|
1629
|
-
for (const
|
|
1630
|
-
if (
|
|
1631
|
-
out.push({ text:
|
|
1644
|
+
for (const p35 of m.parts) {
|
|
1645
|
+
if (p35.kind === "text" && p35.text) {
|
|
1646
|
+
out.push({ text: p35.text, type: "text" });
|
|
1632
1647
|
}
|
|
1633
|
-
if (
|
|
1634
|
-
out.push({ mediaType:
|
|
1648
|
+
if (p35.kind === "file" && p35.url) {
|
|
1649
|
+
out.push({ mediaType: p35.mediaType, type: "file", url: p35.url });
|
|
1635
1650
|
}
|
|
1636
|
-
if (
|
|
1651
|
+
if (p35.kind === "tool" && isResolvedToolPart(p35)) {
|
|
1637
1652
|
const part = {
|
|
1638
|
-
type:
|
|
1639
|
-
toolCallId:
|
|
1640
|
-
|
|
1641
|
-
state: p33.state
|
|
1653
|
+
type: toolPartType(p35.toolName),
|
|
1654
|
+
toolCallId: p35.toolCallId,
|
|
1655
|
+
state: p35.state
|
|
1642
1656
|
};
|
|
1643
|
-
if (
|
|
1644
|
-
if (
|
|
1645
|
-
if (
|
|
1646
|
-
if (
|
|
1657
|
+
if (p35.input !== void 0) part.input = p35.input;
|
|
1658
|
+
if (p35.output !== void 0) part.output = p35.output;
|
|
1659
|
+
if (p35.error !== void 0) part.errorText = p35.error;
|
|
1660
|
+
if (p35.approval && p35.approval.approved !== void 0) part.approval = p35.approval;
|
|
1647
1661
|
out.push(part);
|
|
1648
1662
|
}
|
|
1649
1663
|
}
|
|
@@ -2340,11 +2354,23 @@ function fromWireMessage(w) {
|
|
|
2340
2354
|
if (part.type === "file") {
|
|
2341
2355
|
return { kind: "file", url: part.url, mediaType: part.mediaType };
|
|
2342
2356
|
}
|
|
2343
|
-
if (part.type === "
|
|
2357
|
+
if (part.type === "source-url") {
|
|
2358
|
+
return { kind: "source", sourceId: part.sourceId, url: part.url, title: part.title };
|
|
2359
|
+
}
|
|
2360
|
+
if (part.type === "source-document") {
|
|
2361
|
+
return {
|
|
2362
|
+
kind: "source",
|
|
2363
|
+
sourceId: part.sourceId,
|
|
2364
|
+
title: part.title,
|
|
2365
|
+
filename: part.filename,
|
|
2366
|
+
mediaType: part.mediaType
|
|
2367
|
+
};
|
|
2368
|
+
}
|
|
2369
|
+
if (part.type.startsWith("tool-")) {
|
|
2344
2370
|
return {
|
|
2345
2371
|
kind: "tool",
|
|
2346
2372
|
toolCallId: part.toolCallId,
|
|
2347
|
-
toolName: part.
|
|
2373
|
+
toolName: toolNameFromType(part.type),
|
|
2348
2374
|
inputPartialSig: signal(""),
|
|
2349
2375
|
inputSig: signal(part.input),
|
|
2350
2376
|
outputSig: signal(part.output),
|
|
@@ -2354,7 +2380,7 @@ function fromWireMessage(w) {
|
|
|
2354
2380
|
};
|
|
2355
2381
|
}
|
|
2356
2382
|
return null;
|
|
2357
|
-
}).filter((
|
|
2383
|
+
}).filter((p35) => p35 !== null);
|
|
2358
2384
|
return {
|
|
2359
2385
|
id: w.id,
|
|
2360
2386
|
role: w.role,
|
|
@@ -2384,61 +2410,47 @@ function assistantText(m) {
|
|
|
2384
2410
|
}
|
|
2385
2411
|
return out;
|
|
2386
2412
|
}
|
|
2387
|
-
function partToReactive(
|
|
2388
|
-
if (
|
|
2389
|
-
return { kind:
|
|
2413
|
+
function partToReactive(p35) {
|
|
2414
|
+
if (p35.kind === "text" || p35.kind === "reasoning") {
|
|
2415
|
+
return { kind: p35.kind, id: p35.id, textSig: signal(p35.text), doneSig: signal(p35.done) };
|
|
2390
2416
|
}
|
|
2391
|
-
if (
|
|
2417
|
+
if (p35.kind === "tool") {
|
|
2392
2418
|
return {
|
|
2393
2419
|
kind: "tool",
|
|
2394
|
-
toolCallId:
|
|
2395
|
-
toolName:
|
|
2396
|
-
inputPartialSig: signal(
|
|
2397
|
-
inputSig: signal(
|
|
2398
|
-
outputSig: signal(
|
|
2399
|
-
errorSig: signal(
|
|
2400
|
-
stateSig: signal(
|
|
2401
|
-
approvalSig: signal(
|
|
2420
|
+
toolCallId: p35.toolCallId,
|
|
2421
|
+
toolName: p35.toolName,
|
|
2422
|
+
inputPartialSig: signal(p35.inputPartial),
|
|
2423
|
+
inputSig: signal(p35.input),
|
|
2424
|
+
outputSig: signal(p35.output),
|
|
2425
|
+
errorSig: signal(p35.error),
|
|
2426
|
+
stateSig: signal(p35.state),
|
|
2427
|
+
approvalSig: signal(p35.approval)
|
|
2402
2428
|
};
|
|
2403
2429
|
}
|
|
2404
|
-
return
|
|
2430
|
+
return p35;
|
|
2405
2431
|
}
|
|
2406
|
-
function partFromReactive(
|
|
2407
|
-
if (
|
|
2408
|
-
return { kind:
|
|
2432
|
+
function partFromReactive(p35) {
|
|
2433
|
+
if (p35.kind === "text" || p35.kind === "reasoning") {
|
|
2434
|
+
return { kind: p35.kind, id: p35.id, text: p35.textSig.value, done: p35.doneSig.value };
|
|
2409
2435
|
}
|
|
2410
|
-
if (
|
|
2436
|
+
if (p35.kind === "tool") {
|
|
2411
2437
|
return {
|
|
2412
2438
|
kind: "tool",
|
|
2413
|
-
toolCallId:
|
|
2414
|
-
toolName:
|
|
2415
|
-
inputPartial:
|
|
2416
|
-
input:
|
|
2417
|
-
output:
|
|
2418
|
-
error:
|
|
2419
|
-
state:
|
|
2420
|
-
approval:
|
|
2439
|
+
toolCallId: p35.toolCallId,
|
|
2440
|
+
toolName: p35.toolName,
|
|
2441
|
+
inputPartial: p35.inputPartialSig.value,
|
|
2442
|
+
input: p35.inputSig.value,
|
|
2443
|
+
output: p35.outputSig.value,
|
|
2444
|
+
error: p35.errorSig.value,
|
|
2445
|
+
state: p35.stateSig.value,
|
|
2446
|
+
approval: p35.approvalSig.value
|
|
2421
2447
|
};
|
|
2422
2448
|
}
|
|
2423
|
-
return
|
|
2449
|
+
return p35;
|
|
2424
2450
|
}
|
|
2425
2451
|
|
|
2426
2452
|
// src/stream/reducer.ts
|
|
2427
2453
|
import { signal as signal2 } from "@preact/signals";
|
|
2428
|
-
|
|
2429
|
-
// src/stream/constants.ts
|
|
2430
|
-
function isAskUserInputTool(toolName) {
|
|
2431
|
-
if (!toolName) return false;
|
|
2432
|
-
const name = toolName.startsWith("tool:") ? toolName.slice(5) : toolName;
|
|
2433
|
-
return name === "ask-user-input" || name === "ask_user_input" || name === "request-user-input" || name === "request_user_input";
|
|
2434
|
-
}
|
|
2435
|
-
var TRIGGER = {
|
|
2436
|
-
submitMessage: "submit-message",
|
|
2437
|
-
toolResult: "tool-result",
|
|
2438
|
-
toolApproval: "tool-approval"
|
|
2439
|
-
};
|
|
2440
|
-
|
|
2441
|
-
// src/stream/reducer.ts
|
|
2442
2454
|
var log6 = logger.scope("reducer");
|
|
2443
2455
|
var StreamReducer = class {
|
|
2444
2456
|
constructor(messagesSig) {
|
|
@@ -2476,8 +2488,8 @@ var StreamReducer = class {
|
|
|
2476
2488
|
ensureTextPart(m, "text", chunk.id);
|
|
2477
2489
|
return;
|
|
2478
2490
|
case "text-delta": {
|
|
2479
|
-
const
|
|
2480
|
-
|
|
2491
|
+
const p35 = ensureTextPart(m, "text", chunk.id);
|
|
2492
|
+
p35.textSig.value += chunk.delta;
|
|
2481
2493
|
return;
|
|
2482
2494
|
}
|
|
2483
2495
|
case "text-end":
|
|
@@ -2487,8 +2499,8 @@ var StreamReducer = class {
|
|
|
2487
2499
|
ensureTextPart(m, "reasoning", chunk.id).doneSig.value = false;
|
|
2488
2500
|
return;
|
|
2489
2501
|
case "reasoning-delta": {
|
|
2490
|
-
const
|
|
2491
|
-
|
|
2502
|
+
const p35 = ensureTextPart(m, "reasoning", chunk.id);
|
|
2503
|
+
p35.textSig.value += chunk.delta;
|
|
2492
2504
|
return;
|
|
2493
2505
|
}
|
|
2494
2506
|
case "reasoning-end":
|
|
@@ -2499,18 +2511,25 @@ var StreamReducer = class {
|
|
|
2499
2511
|
case "tool-input-available":
|
|
2500
2512
|
case "tool-output-available":
|
|
2501
2513
|
case "tool-output-error":
|
|
2514
|
+
case "tool-output-denied":
|
|
2502
2515
|
case "tool-approval-request":
|
|
2503
2516
|
applyTool(m, chunk);
|
|
2504
2517
|
return;
|
|
2505
2518
|
case "file":
|
|
2506
2519
|
appendPart(m, { kind: "file", url: chunk.url, mediaType: chunk.mediaType });
|
|
2507
2520
|
return;
|
|
2508
|
-
case "source-url":
|
|
2509
|
-
|
|
2510
|
-
|
|
2511
|
-
|
|
2521
|
+
case "source-url":
|
|
2522
|
+
appendSource(m, { kind: "source", sourceId: chunk.sourceId, url: chunk.url, title: chunk.title });
|
|
2523
|
+
return;
|
|
2524
|
+
case "source-document":
|
|
2525
|
+
appendSource(m, {
|
|
2526
|
+
kind: "source",
|
|
2527
|
+
sourceId: chunk.sourceId,
|
|
2528
|
+
title: chunk.title,
|
|
2529
|
+
filename: chunk.filename,
|
|
2530
|
+
mediaType: chunk.mediaType
|
|
2531
|
+
});
|
|
2512
2532
|
return;
|
|
2513
|
-
}
|
|
2514
2533
|
case "data-notification":
|
|
2515
2534
|
return;
|
|
2516
2535
|
default: {
|
|
@@ -2531,14 +2550,14 @@ var StreamReducer = class {
|
|
|
2531
2550
|
}
|
|
2532
2551
|
};
|
|
2533
2552
|
function ensureTextPart(m, kind, id) {
|
|
2534
|
-
const existing = m.partsSig.value.find((
|
|
2553
|
+
const existing = m.partsSig.value.find((p35) => p35.kind === kind && p35.id === id);
|
|
2535
2554
|
if (existing) return existing;
|
|
2536
2555
|
const part = { kind, id, textSig: signal2(""), doneSig: signal2(false) };
|
|
2537
2556
|
appendPart(m, part);
|
|
2538
2557
|
return part;
|
|
2539
2558
|
}
|
|
2540
2559
|
function ensureToolPart(m, toolCallId, toolName) {
|
|
2541
|
-
const existing = m.partsSig.value.find((
|
|
2560
|
+
const existing = m.partsSig.value.find((p35) => p35.kind === "tool" && p35.toolCallId === toolCallId);
|
|
2542
2561
|
if (existing) return existing;
|
|
2543
2562
|
const part = {
|
|
2544
2563
|
kind: "tool",
|
|
@@ -2548,7 +2567,7 @@ function ensureToolPart(m, toolCallId, toolName) {
|
|
|
2548
2567
|
inputSig: signal2(void 0),
|
|
2549
2568
|
outputSig: signal2(void 0),
|
|
2550
2569
|
errorSig: signal2(void 0),
|
|
2551
|
-
stateSig: signal2("input"),
|
|
2570
|
+
stateSig: signal2("input-streaming"),
|
|
2552
2571
|
approvalSig: signal2(void 0)
|
|
2553
2572
|
};
|
|
2554
2573
|
appendPart(m, part);
|
|
@@ -2557,38 +2576,47 @@ function ensureToolPart(m, toolCallId, toolName) {
|
|
|
2557
2576
|
function appendPart(m, part) {
|
|
2558
2577
|
m.partsSig.value = [...m.partsSig.value, part];
|
|
2559
2578
|
}
|
|
2579
|
+
function appendSource(m, source) {
|
|
2580
|
+
if (m.partsSig.value.some((p35) => p35.kind === "source" && p35.sourceId === source.sourceId)) return;
|
|
2581
|
+
appendPart(m, source);
|
|
2582
|
+
}
|
|
2560
2583
|
function applyTool(m, chunk) {
|
|
2561
2584
|
switch (chunk.type) {
|
|
2562
2585
|
case "tool-input-start":
|
|
2563
2586
|
ensureToolPart(m, chunk.toolCallId, chunk.toolName);
|
|
2564
2587
|
return;
|
|
2565
2588
|
case "tool-input-delta": {
|
|
2566
|
-
const
|
|
2567
|
-
|
|
2589
|
+
const p35 = ensureToolPart(m, chunk.toolCallId);
|
|
2590
|
+
p35.inputPartialSig.value += chunk.inputTextDelta;
|
|
2568
2591
|
return;
|
|
2569
2592
|
}
|
|
2570
2593
|
case "tool-input-available": {
|
|
2571
|
-
const
|
|
2572
|
-
|
|
2573
|
-
|
|
2594
|
+
const p35 = ensureToolPart(m, chunk.toolCallId, chunk.toolName);
|
|
2595
|
+
p35.inputSig.value = chunk.input;
|
|
2596
|
+
p35.stateSig.value = "input-available";
|
|
2574
2597
|
return;
|
|
2575
2598
|
}
|
|
2576
2599
|
case "tool-approval-request": {
|
|
2577
|
-
const
|
|
2578
|
-
|
|
2579
|
-
|
|
2600
|
+
const p35 = ensureToolPart(m, chunk.toolCallId, chunk.toolName);
|
|
2601
|
+
p35.approvalSig.value = { id: chunk.approvalId };
|
|
2602
|
+
p35.stateSig.value = "approval-requested";
|
|
2580
2603
|
return;
|
|
2581
2604
|
}
|
|
2582
2605
|
case "tool-output-available": {
|
|
2583
|
-
const
|
|
2584
|
-
|
|
2585
|
-
|
|
2606
|
+
const p35 = ensureToolPart(m, chunk.toolCallId);
|
|
2607
|
+
p35.outputSig.value = chunk.output;
|
|
2608
|
+
p35.stateSig.value = "output-available";
|
|
2586
2609
|
return;
|
|
2587
2610
|
}
|
|
2588
2611
|
case "tool-output-error": {
|
|
2589
|
-
const
|
|
2590
|
-
|
|
2591
|
-
|
|
2612
|
+
const p35 = ensureToolPart(m, chunk.toolCallId);
|
|
2613
|
+
p35.errorSig.value = chunk.errorText;
|
|
2614
|
+
p35.stateSig.value = "output-error";
|
|
2615
|
+
return;
|
|
2616
|
+
}
|
|
2617
|
+
case "tool-output-denied": {
|
|
2618
|
+
const p35 = ensureToolPart(m, chunk.toolCallId);
|
|
2619
|
+
p35.stateSig.value = "output-denied";
|
|
2592
2620
|
return;
|
|
2593
2621
|
}
|
|
2594
2622
|
default:
|
|
@@ -2596,6 +2624,18 @@ function applyTool(m, chunk) {
|
|
|
2596
2624
|
}
|
|
2597
2625
|
}
|
|
2598
2626
|
|
|
2627
|
+
// src/stream/constants.ts
|
|
2628
|
+
function isAskUserInputTool(toolName) {
|
|
2629
|
+
if (!toolName) return false;
|
|
2630
|
+
const name = toolName.startsWith("tool:") ? toolName.slice(5) : toolName;
|
|
2631
|
+
return name === "ask-user-input" || name === "ask_user_input" || name === "request-user-input" || name === "request_user_input";
|
|
2632
|
+
}
|
|
2633
|
+
var TRIGGER = {
|
|
2634
|
+
submitMessage: "submit-message",
|
|
2635
|
+
toolResult: "tool-result",
|
|
2636
|
+
toolApproval: "tool-approval"
|
|
2637
|
+
};
|
|
2638
|
+
|
|
2599
2639
|
// src/core/feedback/index.ts
|
|
2600
2640
|
import { signal as signal3 } from "@preact/signals";
|
|
2601
2641
|
|
|
@@ -3170,7 +3210,11 @@ var TID = {
|
|
|
3170
3210
|
/** Tool-approval reject button. */
|
|
3171
3211
|
toolReject: `${p2}-tool-reject`,
|
|
3172
3212
|
/** Recorded tool decision summary (after approve/reject/submit). */
|
|
3173
|
-
toolDecision: `${p2}-tool-decision
|
|
3213
|
+
toolDecision: `${p2}-tool-decision`,
|
|
3214
|
+
/** Automatic (non-interactive) tool-call disclosure — shown only when `showToolCalls`. */
|
|
3215
|
+
toolCall: `${p2}-tool-call`,
|
|
3216
|
+
/** A citation source (web link or document reference) — shown only when `showSources`. */
|
|
3217
|
+
source: `${p2}-source`
|
|
3174
3218
|
};
|
|
3175
3219
|
function tid(base, suffix) {
|
|
3176
3220
|
return `${base}-${suffix}`;
|
|
@@ -3281,24 +3325,24 @@ import { useCallback as useCallback2, useEffect as useEffect9, useRef as useRef6
|
|
|
3281
3325
|
import { useEffect as useEffect2, useRef } from "preact/hooks";
|
|
3282
3326
|
import { jsx as jsx3 } from "preact/jsx-runtime";
|
|
3283
3327
|
function ResizeGrip({ panelEl, resize, position, initialSize, onSizeChange, strings }) {
|
|
3284
|
-
const
|
|
3328
|
+
const p35 = BRAND.cssPrefix;
|
|
3285
3329
|
const dragRef = useRef(null);
|
|
3286
3330
|
useEffect2(() => {
|
|
3287
3331
|
if (!panelEl) return;
|
|
3288
3332
|
const style = panelEl.style;
|
|
3289
|
-
if (resize.minWidth) style.setProperty(`--${
|
|
3290
|
-
if (resize.maxWidth) style.setProperty(`--${
|
|
3291
|
-
if (resize.minHeight) style.setProperty(`--${
|
|
3292
|
-
if (resize.maxHeight) style.setProperty(`--${
|
|
3333
|
+
if (resize.minWidth) style.setProperty(`--${p35}-resize-min-w`, resize.minWidth);
|
|
3334
|
+
if (resize.maxWidth) style.setProperty(`--${p35}-resize-max-w`, resize.maxWidth);
|
|
3335
|
+
if (resize.minHeight) style.setProperty(`--${p35}-resize-min-h`, resize.minHeight);
|
|
3336
|
+
if (resize.maxHeight) style.setProperty(`--${p35}-resize-max-h`, resize.maxHeight);
|
|
3293
3337
|
if (initialSize) {
|
|
3294
|
-
style.setProperty(`--${
|
|
3295
|
-
style.setProperty(`--${
|
|
3338
|
+
style.setProperty(`--${p35}-widget-w`, `${initialSize.width}px`);
|
|
3339
|
+
style.setProperty(`--${p35}-widget-h`, `${initialSize.height}px`);
|
|
3296
3340
|
}
|
|
3297
|
-
}, [panelEl, resize.minWidth, resize.maxWidth, resize.minHeight, resize.maxHeight,
|
|
3341
|
+
}, [panelEl, resize.minWidth, resize.maxWidth, resize.minHeight, resize.maxHeight, p35, initialSize]);
|
|
3298
3342
|
if (!panelEl) return null;
|
|
3299
3343
|
const isTop = position.startsWith("top-");
|
|
3300
3344
|
const isRight = position.endsWith("-right");
|
|
3301
|
-
const cornerClass = `${
|
|
3345
|
+
const cornerClass = `${p35}-resize-grip ${p35}-resize-grip--${isTop ? "bottom" : "top"}-${isRight ? "left" : "right"}`;
|
|
3302
3346
|
const onPointerDown = (e) => {
|
|
3303
3347
|
if (!panelEl) return;
|
|
3304
3348
|
const target = e.currentTarget;
|
|
@@ -3323,8 +3367,8 @@ function ResizeGrip({ panelEl, resize, position, initialSize, onSizeChange, stri
|
|
|
3323
3367
|
if (!d || e.pointerId !== d.pointerId || !panelEl) return;
|
|
3324
3368
|
const dx = (e.clientX - d.startX) * d.dirX;
|
|
3325
3369
|
const dy = (e.clientY - d.startY) * d.dirY;
|
|
3326
|
-
panelEl.style.setProperty(`--${
|
|
3327
|
-
panelEl.style.setProperty(`--${
|
|
3370
|
+
panelEl.style.setProperty(`--${p35}-widget-w`, `${d.startW + dx}px`);
|
|
3371
|
+
panelEl.style.setProperty(`--${p35}-widget-h`, `${d.startH + dy}px`);
|
|
3328
3372
|
};
|
|
3329
3373
|
const onPointerUp = (e) => {
|
|
3330
3374
|
const d = dragRef.current;
|
|
@@ -4061,7 +4105,7 @@ function usePopoverMenu({ itemCount, initialFocusIndex }) {
|
|
|
4061
4105
|
// src/ui/overflow-menu.tsx
|
|
4062
4106
|
import { jsx as jsx8, jsxs as jsxs6 } from "preact/jsx-runtime";
|
|
4063
4107
|
function OverflowMenu({ items, triggerLabel }) {
|
|
4064
|
-
const
|
|
4108
|
+
const p35 = BRAND.cssPrefix;
|
|
4065
4109
|
const menu = usePopoverMenu({ itemCount: items.length });
|
|
4066
4110
|
const handleSelect = (item) => {
|
|
4067
4111
|
if (item.disabled) return;
|
|
@@ -4084,13 +4128,13 @@ function OverflowMenu({ items, triggerLabel }) {
|
|
|
4084
4128
|
e.stopPropagation();
|
|
4085
4129
|
pickSegment(item, segs[next].value);
|
|
4086
4130
|
};
|
|
4087
|
-
return /* @__PURE__ */ jsxs6("div", { class: `${
|
|
4131
|
+
return /* @__PURE__ */ jsxs6("div", { class: `${p35}-menu-wrap`, children: [
|
|
4088
4132
|
/* @__PURE__ */ jsx8(
|
|
4089
4133
|
"button",
|
|
4090
4134
|
{
|
|
4091
4135
|
ref: menu.triggerRef,
|
|
4092
4136
|
type: "button",
|
|
4093
|
-
class: `${
|
|
4137
|
+
class: `${p35}-icon-btn`,
|
|
4094
4138
|
"aria-label": triggerLabel,
|
|
4095
4139
|
"aria-haspopup": "menu",
|
|
4096
4140
|
"aria-expanded": menu.open,
|
|
@@ -4104,7 +4148,7 @@ function OverflowMenu({ items, triggerLabel }) {
|
|
|
4104
4148
|
"div",
|
|
4105
4149
|
{
|
|
4106
4150
|
ref: menu.menuRef,
|
|
4107
|
-
class: `${
|
|
4151
|
+
class: `${p35}-menu`,
|
|
4108
4152
|
role: "menu",
|
|
4109
4153
|
"aria-label": triggerLabel,
|
|
4110
4154
|
onKeyDown: menu.onMenuKey,
|
|
@@ -4114,14 +4158,14 @@ function OverflowMenu({ items, triggerLabel }) {
|
|
|
4114
4158
|
"div",
|
|
4115
4159
|
{
|
|
4116
4160
|
role: "menuitem",
|
|
4117
|
-
class: `${
|
|
4161
|
+
class: `${p35}-menu-item ${p35}-menu-item-segmented`,
|
|
4118
4162
|
"aria-label": item.label,
|
|
4119
4163
|
tabIndex: -1,
|
|
4120
4164
|
onKeyDown: (e) => onSegmentRowKey(e, item),
|
|
4121
4165
|
children: [
|
|
4122
|
-
item.icon ? /* @__PURE__ */ jsx8("span", { class: `${
|
|
4123
|
-
/* @__PURE__ */ jsx8("span", { class: `${
|
|
4124
|
-
/* @__PURE__ */ jsx8("span", { class: `${
|
|
4166
|
+
item.icon ? /* @__PURE__ */ jsx8("span", { class: `${p35}-menu-icon`, children: item.icon }) : null,
|
|
4167
|
+
/* @__PURE__ */ jsx8("span", { class: `${p35}-menu-label`, children: item.label }),
|
|
4168
|
+
/* @__PURE__ */ jsx8("span", { class: `${p35}-segmented`, role: "group", "aria-label": item.label, children: item.segments.map((seg) => {
|
|
4125
4169
|
const active = seg.value === item.value;
|
|
4126
4170
|
return /* @__PURE__ */ jsx8(
|
|
4127
4171
|
"button",
|
|
@@ -4129,7 +4173,7 @@ function OverflowMenu({ items, triggerLabel }) {
|
|
|
4129
4173
|
type: "button",
|
|
4130
4174
|
role: "menuitemradio",
|
|
4131
4175
|
"aria-checked": active,
|
|
4132
|
-
class: `${
|
|
4176
|
+
class: `${p35}-segment`,
|
|
4133
4177
|
"data-on": active ? "true" : void 0,
|
|
4134
4178
|
lang: seg.lang,
|
|
4135
4179
|
title: seg.value,
|
|
@@ -4149,14 +4193,14 @@ function OverflowMenu({ items, triggerLabel }) {
|
|
|
4149
4193
|
{
|
|
4150
4194
|
type: "button",
|
|
4151
4195
|
role: "menuitem",
|
|
4152
|
-
class: `${
|
|
4196
|
+
class: `${p35}-menu-item`,
|
|
4153
4197
|
"aria-pressed": item.type === "switch" ? item.on : void 0,
|
|
4154
4198
|
disabled: item.disabled,
|
|
4155
4199
|
onClick: () => handleSelect(item),
|
|
4156
4200
|
children: [
|
|
4157
|
-
item.icon ? /* @__PURE__ */ jsx8("span", { class: `${
|
|
4158
|
-
/* @__PURE__ */ jsx8("span", { class: `${
|
|
4159
|
-
item.type === "switch" && item.on ? /* @__PURE__ */ jsx8("span", { class: `${
|
|
4201
|
+
item.icon ? /* @__PURE__ */ jsx8("span", { class: `${p35}-menu-icon`, children: item.icon }) : null,
|
|
4202
|
+
/* @__PURE__ */ jsx8("span", { class: `${p35}-menu-label`, children: item.label }),
|
|
4203
|
+
item.type === "switch" && item.on ? /* @__PURE__ */ jsx8("span", { class: `${p35}-menu-check`, "aria-hidden": "true", children: /* @__PURE__ */ jsx8(CheckIcon, {}) }) : null
|
|
4160
4204
|
]
|
|
4161
4205
|
},
|
|
4162
4206
|
item.id
|
|
@@ -4308,7 +4352,7 @@ function HeaderActions({ panelProps, variant }) {
|
|
|
4308
4352
|
|
|
4309
4353
|
// src/ui/message-list.tsx
|
|
4310
4354
|
import { useEffect as useEffect7, useLayoutEffect as useLayoutEffect2, useRef as useRef5, useState as useState6 } from "preact/hooks";
|
|
4311
|
-
import { useComputed as
|
|
4355
|
+
import { useComputed as useComputed6 } from "@preact/signals";
|
|
4312
4356
|
|
|
4313
4357
|
// src/ui/form/dynamic-form.tsx
|
|
4314
4358
|
import { useState as useState5 } from "preact/hooks";
|
|
@@ -4696,7 +4740,7 @@ function FormDoneMarker({
|
|
|
4696
4740
|
}
|
|
4697
4741
|
|
|
4698
4742
|
// src/ui/message-bubble.tsx
|
|
4699
|
-
import { useComputed as
|
|
4743
|
+
import { useComputed as useComputed5 } from "@preact/signals";
|
|
4700
4744
|
|
|
4701
4745
|
// src/ui/markdown.tsx
|
|
4702
4746
|
import { useLayoutEffect, useMemo, useRef as useRef4 } from "preact/hooks";
|
|
@@ -4769,10 +4813,27 @@ function hardenLink(a) {
|
|
|
4769
4813
|
a.rel = [...tokens].join(" ");
|
|
4770
4814
|
}
|
|
4771
4815
|
|
|
4816
|
+
// src/ui/source-view.tsx
|
|
4817
|
+
import { jsx as jsx13, jsxs as jsxs10 } from "preact/jsx-runtime";
|
|
4818
|
+
var p12 = BRAND.cssPrefix;
|
|
4819
|
+
function SourceView({ part, strings }) {
|
|
4820
|
+
const label = part.title || part.filename || part.url || strings.sources;
|
|
4821
|
+
if (part.url) {
|
|
4822
|
+
return /* @__PURE__ */ jsxs10("a", { class: `${p12}-source`, href: part.url, target: "_blank", rel: "noreferrer noopener", "data-testid": TID.source, children: [
|
|
4823
|
+
/* @__PURE__ */ jsx13("span", { class: `${p12}-source-icon`, "aria-hidden": "true", children: "\u{1F517}" }),
|
|
4824
|
+
/* @__PURE__ */ jsx13("span", { class: `${p12}-source-label`, children: label })
|
|
4825
|
+
] });
|
|
4826
|
+
}
|
|
4827
|
+
return /* @__PURE__ */ jsxs10("span", { class: `${p12}-source`, "data-testid": TID.source, children: [
|
|
4828
|
+
/* @__PURE__ */ jsx13("span", { class: `${p12}-source-icon`, "aria-hidden": "true", children: "\u{1F4C4}" }),
|
|
4829
|
+
/* @__PURE__ */ jsx13("span", { class: `${p12}-source-label`, children: label })
|
|
4830
|
+
] });
|
|
4831
|
+
}
|
|
4832
|
+
|
|
4772
4833
|
// src/ui/tool-approval.tsx
|
|
4773
4834
|
import { useComputed as useComputed2, useSignal } from "@preact/signals";
|
|
4774
|
-
import { Fragment as Fragment2, jsx as
|
|
4775
|
-
var
|
|
4835
|
+
import { Fragment as Fragment2, jsx as jsx14, jsxs as jsxs11 } from "preact/jsx-runtime";
|
|
4836
|
+
var p13 = BRAND.cssPrefix;
|
|
4776
4837
|
function displayToolName(toolName) {
|
|
4777
4838
|
return (toolName.startsWith("tool:") ? toolName.slice(5) : toolName).replace(/[-_]+/g, " ");
|
|
4778
4839
|
}
|
|
@@ -4783,24 +4844,24 @@ function ToolApproval({ part, strings, active, onDecision }) {
|
|
|
4783
4844
|
const decided = approval.value?.approved !== void 0;
|
|
4784
4845
|
if (decided) {
|
|
4785
4846
|
const ap = approval.value;
|
|
4786
|
-
return /* @__PURE__ */
|
|
4787
|
-
/* @__PURE__ */
|
|
4788
|
-
/* @__PURE__ */
|
|
4789
|
-
ap?.reason ? /* @__PURE__ */
|
|
4847
|
+
return /* @__PURE__ */ jsxs11("div", { class: `${p13}-tool-approval ${p13}-tool-decided`, "data-testid": TID.toolDecision, children: [
|
|
4848
|
+
/* @__PURE__ */ jsx14("span", { class: `${p13}-tool-decided-label`, "data-approved": ap?.approved ? "true" : "false", children: ap?.approved ? strings.approved : strings.rejected }),
|
|
4849
|
+
/* @__PURE__ */ jsx14("strong", { class: `${p13}-tool-title`, children: displayToolName(part.toolName) }),
|
|
4850
|
+
ap?.reason ? /* @__PURE__ */ jsx14("span", { class: `${p13}-tool-decided-value`, children: ap.reason }) : null
|
|
4790
4851
|
] });
|
|
4791
4852
|
}
|
|
4792
4853
|
const args = summarizeInput(input.value);
|
|
4793
|
-
return /* @__PURE__ */
|
|
4794
|
-
/* @__PURE__ */
|
|
4795
|
-
/* @__PURE__ */
|
|
4796
|
-
/* @__PURE__ */
|
|
4854
|
+
return /* @__PURE__ */ jsxs11("div", { class: `${p13}-tool-approval`, "data-testid": TID.toolApproval, children: [
|
|
4855
|
+
/* @__PURE__ */ jsxs11("div", { class: `${p13}-tool-head`, children: [
|
|
4856
|
+
/* @__PURE__ */ jsx14("span", { class: `${p13}-tool-badge`, children: strings.approvalRequired }),
|
|
4857
|
+
/* @__PURE__ */ jsx14("strong", { class: `${p13}-tool-title`, children: displayToolName(part.toolName) })
|
|
4797
4858
|
] }),
|
|
4798
|
-
args ? /* @__PURE__ */
|
|
4799
|
-
active ? /* @__PURE__ */
|
|
4800
|
-
/* @__PURE__ */
|
|
4859
|
+
args ? /* @__PURE__ */ jsx14("pre", { class: `${p13}-tool-args`, children: args }) : null,
|
|
4860
|
+
active ? /* @__PURE__ */ jsxs11(Fragment2, { children: [
|
|
4861
|
+
/* @__PURE__ */ jsx14(
|
|
4801
4862
|
"input",
|
|
4802
4863
|
{
|
|
4803
|
-
class: `${
|
|
4864
|
+
class: `${p13}-field-input`,
|
|
4804
4865
|
value: reason.value,
|
|
4805
4866
|
placeholder: strings.approvalReason,
|
|
4806
4867
|
onInput: (e) => {
|
|
@@ -4808,29 +4869,29 @@ function ToolApproval({ part, strings, active, onDecision }) {
|
|
|
4808
4869
|
}
|
|
4809
4870
|
}
|
|
4810
4871
|
),
|
|
4811
|
-
/* @__PURE__ */
|
|
4812
|
-
/* @__PURE__ */
|
|
4872
|
+
/* @__PURE__ */ jsxs11("div", { class: `${p13}-form-actions`, children: [
|
|
4873
|
+
/* @__PURE__ */ jsx14(
|
|
4813
4874
|
"button",
|
|
4814
4875
|
{
|
|
4815
4876
|
type: "button",
|
|
4816
|
-
class: `${
|
|
4877
|
+
class: `${p13}-tool-reject`,
|
|
4817
4878
|
onClick: () => onDecision(part.toolCallId, false, reason.value.trim() || void 0),
|
|
4818
4879
|
"data-testid": TID.toolReject,
|
|
4819
4880
|
children: strings.reject
|
|
4820
4881
|
}
|
|
4821
4882
|
),
|
|
4822
|
-
/* @__PURE__ */
|
|
4883
|
+
/* @__PURE__ */ jsx14(
|
|
4823
4884
|
"button",
|
|
4824
4885
|
{
|
|
4825
4886
|
type: "button",
|
|
4826
|
-
class: `${
|
|
4887
|
+
class: `${p13}-tool-approve`,
|
|
4827
4888
|
onClick: () => onDecision(part.toolCallId, true, reason.value.trim() || void 0),
|
|
4828
4889
|
"data-testid": TID.toolApprove,
|
|
4829
4890
|
children: strings.approve
|
|
4830
4891
|
}
|
|
4831
4892
|
)
|
|
4832
4893
|
] })
|
|
4833
|
-
] }) : /* @__PURE__ */
|
|
4894
|
+
] }) : /* @__PURE__ */ jsx14("p", { class: `${p13}-tool-stale-note`, children: strings.stepNoLongerActive })
|
|
4834
4895
|
] });
|
|
4835
4896
|
}
|
|
4836
4897
|
function summarizeInput(input) {
|
|
@@ -4901,13 +4962,13 @@ function num(v) {
|
|
|
4901
4962
|
}
|
|
4902
4963
|
|
|
4903
4964
|
// src/ui/tool-ask-input.tsx
|
|
4904
|
-
import { jsx as
|
|
4905
|
-
var
|
|
4965
|
+
import { jsx as jsx15, jsxs as jsxs12 } from "preact/jsx-runtime";
|
|
4966
|
+
var p14 = BRAND.cssPrefix;
|
|
4906
4967
|
function ToolAskInput({ part, strings, active, onSubmit, onDecision }) {
|
|
4907
4968
|
const state = useComputed3(() => part.stateSig.value);
|
|
4908
4969
|
const approval = useComputed3(() => part.approvalSig.value);
|
|
4909
4970
|
const request = useComputed3(() => parseAskUserInput(part.inputSig.value));
|
|
4910
|
-
const decided = state.value === "output" || state.value === "error" || approval.value?.approved !== void 0;
|
|
4971
|
+
const decided = state.value === "output-available" || state.value === "output-error" || state.value === "output-denied" || state.value === "approval-responded" || approval.value?.approved !== void 0;
|
|
4911
4972
|
const viaApproval = approval.value !== void 0;
|
|
4912
4973
|
const resolve = (answer, accepted) => {
|
|
4913
4974
|
if (viaApproval) onDecision(part.toolCallId, accepted, answer);
|
|
@@ -4915,42 +4976,42 @@ function ToolAskInput({ part, strings, active, onSubmit, onDecision }) {
|
|
|
4915
4976
|
else onSubmit(part.toolCallId, accepted ? { answer } : {});
|
|
4916
4977
|
};
|
|
4917
4978
|
if (decided) {
|
|
4918
|
-
return /* @__PURE__ */
|
|
4979
|
+
return /* @__PURE__ */ jsx15(DecidedSummary, { part, strings });
|
|
4919
4980
|
}
|
|
4920
4981
|
if (!active) {
|
|
4921
|
-
return /* @__PURE__ */
|
|
4922
|
-
/* @__PURE__ */
|
|
4923
|
-
/* @__PURE__ */
|
|
4982
|
+
return /* @__PURE__ */ jsxs12("div", { class: `${p14}-tool-ask-input ${p14}-tool-stale`, "data-testid": TID.toolAskInput, children: [
|
|
4983
|
+
/* @__PURE__ */ jsx15(Header, { strings, title: request.value.title ?? request.value.question }),
|
|
4984
|
+
/* @__PURE__ */ jsx15("p", { class: `${p14}-tool-stale-note`, children: strings.stepNoLongerActive })
|
|
4924
4985
|
] });
|
|
4925
4986
|
}
|
|
4926
4987
|
const req = request.value;
|
|
4927
4988
|
const isConfirmation = req.responseType === "confirmation";
|
|
4928
|
-
return /* @__PURE__ */
|
|
4929
|
-
/* @__PURE__ */
|
|
4930
|
-
req.description ? /* @__PURE__ */
|
|
4931
|
-
isConfirmation ? /* @__PURE__ */
|
|
4932
|
-
isConfirmation ? /* @__PURE__ */
|
|
4933
|
-
/* @__PURE__ */
|
|
4989
|
+
return /* @__PURE__ */ jsxs12("div", { class: `${p14}-tool-ask-input`, "data-testid": TID.toolAskInput, children: [
|
|
4990
|
+
/* @__PURE__ */ jsx15(Header, { strings, title: req.title }),
|
|
4991
|
+
req.description ? /* @__PURE__ */ jsx15("p", { class: `${p14}-tool-desc`, children: req.description }) : null,
|
|
4992
|
+
isConfirmation ? /* @__PURE__ */ jsx15("p", { class: `${p14}-tool-question`, children: req.question }) : null,
|
|
4993
|
+
isConfirmation ? /* @__PURE__ */ jsxs12("div", { class: `${p14}-form-actions`, children: [
|
|
4994
|
+
/* @__PURE__ */ jsx15(
|
|
4934
4995
|
"button",
|
|
4935
4996
|
{
|
|
4936
4997
|
type: "button",
|
|
4937
|
-
class: `${
|
|
4998
|
+
class: `${p14}-form-skip`,
|
|
4938
4999
|
onClick: () => resolve(void 0, false),
|
|
4939
5000
|
"data-testid": TID.toolInputSkip,
|
|
4940
5001
|
children: strings.reject
|
|
4941
5002
|
}
|
|
4942
5003
|
),
|
|
4943
|
-
/* @__PURE__ */
|
|
5004
|
+
/* @__PURE__ */ jsx15(
|
|
4944
5005
|
"button",
|
|
4945
5006
|
{
|
|
4946
5007
|
type: "button",
|
|
4947
|
-
class: `${
|
|
5008
|
+
class: `${p14}-form-submit`,
|
|
4948
5009
|
onClick: () => resolve(void 0, true),
|
|
4949
5010
|
"data-testid": TID.toolInputSubmit,
|
|
4950
5011
|
children: strings.approve
|
|
4951
5012
|
}
|
|
4952
5013
|
)
|
|
4953
|
-
] }) : /* @__PURE__ */
|
|
5014
|
+
] }) : /* @__PURE__ */ jsx15(
|
|
4954
5015
|
DynamicForm,
|
|
4955
5016
|
{
|
|
4956
5017
|
fields: askInputToFields(req),
|
|
@@ -4966,9 +5027,9 @@ function ToolAskInput({ part, strings, active, onSubmit, onDecision }) {
|
|
|
4966
5027
|
] });
|
|
4967
5028
|
}
|
|
4968
5029
|
function Header({ strings, title }) {
|
|
4969
|
-
return /* @__PURE__ */
|
|
4970
|
-
/* @__PURE__ */
|
|
4971
|
-
title ? /* @__PURE__ */
|
|
5030
|
+
return /* @__PURE__ */ jsxs12("div", { class: `${p14}-tool-head`, children: [
|
|
5031
|
+
/* @__PURE__ */ jsx15("span", { class: `${p14}-tool-badge`, children: strings.inputRequired }),
|
|
5032
|
+
title ? /* @__PURE__ */ jsx15("strong", { class: `${p14}-tool-title`, children: title }) : null
|
|
4972
5033
|
] });
|
|
4973
5034
|
}
|
|
4974
5035
|
function DecidedSummary({ part, strings }) {
|
|
@@ -4976,9 +5037,9 @@ function DecidedSummary({ part, strings }) {
|
|
|
4976
5037
|
const approval = useComputed3(() => part.approvalSig.value);
|
|
4977
5038
|
const answer = approval.value?.approved !== void 0 ? approval.value.reason ?? "" : summarizeOutput(output.value);
|
|
4978
5039
|
const skipped = approval.value?.approved === false;
|
|
4979
|
-
return /* @__PURE__ */
|
|
4980
|
-
/* @__PURE__ */
|
|
4981
|
-
/* @__PURE__ */
|
|
5040
|
+
return /* @__PURE__ */ jsxs12("div", { class: `${p14}-tool-ask-input ${p14}-tool-decided`, "data-testid": TID.toolDecision, children: [
|
|
5041
|
+
/* @__PURE__ */ jsx15("span", { class: `${p14}-tool-decided-label`, children: skipped ? strings.inputSkip : strings.inputSubmitted }),
|
|
5042
|
+
/* @__PURE__ */ jsx15("span", { class: `${p14}-tool-decided-value`, children: skipped ? "" : answer || strings.inputSubmitted })
|
|
4982
5043
|
] });
|
|
4983
5044
|
}
|
|
4984
5045
|
function summarizeOutput(output) {
|
|
@@ -4992,37 +5053,70 @@ function summarizeOutput(output) {
|
|
|
4992
5053
|
return String(output);
|
|
4993
5054
|
}
|
|
4994
5055
|
|
|
4995
|
-
// src/ui/tool-
|
|
4996
|
-
import {
|
|
4997
|
-
|
|
4998
|
-
|
|
4999
|
-
|
|
5000
|
-
|
|
5001
|
-
|
|
5002
|
-
|
|
5056
|
+
// src/ui/tool-call.tsx
|
|
5057
|
+
import { useComputed as useComputed4 } from "@preact/signals";
|
|
5058
|
+
import { jsx as jsx16, jsxs as jsxs13 } from "preact/jsx-runtime";
|
|
5059
|
+
var p15 = BRAND.cssPrefix;
|
|
5060
|
+
function displayToolName2(toolName) {
|
|
5061
|
+
return (toolName.startsWith("tool:") ? toolName.slice(5) : toolName).replace(/[-_]+/g, " ").trim();
|
|
5062
|
+
}
|
|
5063
|
+
function ToolCall({ part, strings }) {
|
|
5064
|
+
const details = useComputed4(() => pretty(part.inputSig.value));
|
|
5065
|
+
const result = useComputed4(() => part.errorSig.value ?? pretty(unwrapResult(part.outputSig.value)));
|
|
5066
|
+
const isError = useComputed4(() => !!part.errorSig.value);
|
|
5067
|
+
if (!details.value && !result.value) return null;
|
|
5068
|
+
return /* @__PURE__ */ jsxs13("details", { class: `${p15}-tool-call`, "data-testid": TID.toolCall, children: [
|
|
5069
|
+
/* @__PURE__ */ jsxs13("summary", { class: `${p15}-tool-call-summary`, children: [
|
|
5070
|
+
/* @__PURE__ */ jsx16("span", { class: `${p15}-tool-badge`, children: strings.usedTool }),
|
|
5071
|
+
/* @__PURE__ */ jsx16("strong", { class: `${p15}-tool-title`, children: displayToolName2(part.toolName) })
|
|
5003
5072
|
] }),
|
|
5004
|
-
/* @__PURE__ */
|
|
5073
|
+
details.value ? /* @__PURE__ */ jsxs13("div", { class: `${p15}-tool-call-section`, children: [
|
|
5074
|
+
/* @__PURE__ */ jsx16("span", { class: `${p15}-tool-call-label`, children: strings.toolDetails }),
|
|
5075
|
+
/* @__PURE__ */ jsx16("pre", { class: `${p15}-tool-args`, children: details.value })
|
|
5076
|
+
] }) : null,
|
|
5077
|
+
result.value ? /* @__PURE__ */ jsxs13("div", { class: `${p15}-tool-call-section`, "data-error": isError.value ? "true" : void 0, children: [
|
|
5078
|
+
/* @__PURE__ */ jsx16("span", { class: `${p15}-tool-call-label`, children: strings.toolResult }),
|
|
5079
|
+
/* @__PURE__ */ jsx16("pre", { class: `${p15}-tool-args`, children: result.value })
|
|
5080
|
+
] }) : null
|
|
5005
5081
|
] });
|
|
5006
5082
|
}
|
|
5083
|
+
function unwrapResult(output) {
|
|
5084
|
+
if (output && typeof output === "object") {
|
|
5085
|
+
const rec = output;
|
|
5086
|
+
if (rec.storage === "tool-result-ref" && "summary" in rec) return rec.summary;
|
|
5087
|
+
}
|
|
5088
|
+
return output;
|
|
5089
|
+
}
|
|
5090
|
+
function pretty(value) {
|
|
5091
|
+
if (value == null) return "";
|
|
5092
|
+
try {
|
|
5093
|
+
const json = typeof value === "string" ? value : JSON.stringify(value, null, 2);
|
|
5094
|
+
if (!json || json === "{}" || json === "[]" || json === '""') return "";
|
|
5095
|
+
return json.length > 600 ? `${json.slice(0, 600)}\u2026` : json;
|
|
5096
|
+
} catch {
|
|
5097
|
+
return "";
|
|
5098
|
+
}
|
|
5099
|
+
}
|
|
5007
5100
|
|
|
5008
5101
|
// src/ui/message-bubble.tsx
|
|
5009
|
-
import { jsx as
|
|
5010
|
-
var
|
|
5102
|
+
import { jsx as jsx17, jsxs as jsxs14 } from "preact/jsx-runtime";
|
|
5103
|
+
var p16 = BRAND.cssPrefix;
|
|
5011
5104
|
function MessageBubble({
|
|
5012
5105
|
message,
|
|
5013
5106
|
strings,
|
|
5014
5107
|
responseMode,
|
|
5015
5108
|
showReasoning,
|
|
5016
5109
|
showToolCalls,
|
|
5110
|
+
showSources,
|
|
5017
5111
|
interactive = false,
|
|
5018
5112
|
tool
|
|
5019
5113
|
}) {
|
|
5020
|
-
const parts =
|
|
5114
|
+
const parts = useComputed5(() => message.partsSig.value);
|
|
5021
5115
|
const partList = parts.value;
|
|
5022
|
-
const hasAnswerText =
|
|
5116
|
+
const hasAnswerText = useComputed5(
|
|
5023
5117
|
() => message.partsSig.value.some((part) => part.kind === "text" && part.textSig.value.length > 0)
|
|
5024
5118
|
);
|
|
5025
|
-
const reasoningVisible =
|
|
5119
|
+
const reasoningVisible = useComputed5(
|
|
5026
5120
|
() => showReasoning && message.partsSig.value.some((part) => part.kind === "reasoning")
|
|
5027
5121
|
);
|
|
5028
5122
|
const streaming = message.role === "assistant" && message.status === "streaming";
|
|
@@ -5030,9 +5124,9 @@ function MessageBubble({
|
|
|
5030
5124
|
const working = streaming && !hasAnswerText.value;
|
|
5031
5125
|
const showStreamDots = streaming && !bufferedHold && !(reasoningVisible.value && working);
|
|
5032
5126
|
const stamp = formatStamp(message.createdAt);
|
|
5033
|
-
return /* @__PURE__ */
|
|
5034
|
-
/* @__PURE__ */
|
|
5035
|
-
bufferedHold ? /* @__PURE__ */
|
|
5127
|
+
return /* @__PURE__ */ jsx17("div", { class: `${p16}-bubble-row`, "data-role": message.role, "data-testid": tid(TID.messageBubble, message.id), children: /* @__PURE__ */ jsxs14("div", { class: `${p16}-bubble-col`, children: [
|
|
5128
|
+
/* @__PURE__ */ jsxs14("div", { class: `${p16}-bubble`, children: [
|
|
5129
|
+
bufferedHold ? /* @__PURE__ */ jsx17(LoadingSpinner, { label: strings.loading }) : partList.map((part) => /* @__PURE__ */ jsx17(
|
|
5036
5130
|
PartView,
|
|
5037
5131
|
{
|
|
5038
5132
|
part,
|
|
@@ -5040,15 +5134,16 @@ function MessageBubble({
|
|
|
5040
5134
|
strings,
|
|
5041
5135
|
showReasoning,
|
|
5042
5136
|
showToolCalls,
|
|
5137
|
+
showSources,
|
|
5043
5138
|
interactive,
|
|
5044
5139
|
tool
|
|
5045
5140
|
},
|
|
5046
5141
|
partKey(part)
|
|
5047
5142
|
)),
|
|
5048
|
-
showStreamDots && /* @__PURE__ */
|
|
5049
|
-
message.status === "error" && message.errorText ? /* @__PURE__ */
|
|
5143
|
+
showStreamDots && /* @__PURE__ */ jsx17(TypingDots, {}),
|
|
5144
|
+
message.status === "error" && message.errorText ? /* @__PURE__ */ jsx17("div", { class: `${p16}-error`, role: "alert", children: /* @__PURE__ */ jsx17("span", { children: message.errorText }) }) : null
|
|
5050
5145
|
] }),
|
|
5051
|
-
stamp ? /* @__PURE__ */
|
|
5146
|
+
stamp ? /* @__PURE__ */ jsx17("time", { class: `${p16}-bubble-time`, dateTime: stamp.iso, title: stamp.full, children: stamp.short }) : null
|
|
5052
5147
|
] }) });
|
|
5053
5148
|
}
|
|
5054
5149
|
function formatStamp(createdAt) {
|
|
@@ -5070,16 +5165,17 @@ function PartView({
|
|
|
5070
5165
|
strings,
|
|
5071
5166
|
showReasoning,
|
|
5072
5167
|
showToolCalls,
|
|
5168
|
+
showSources,
|
|
5073
5169
|
interactive,
|
|
5074
5170
|
tool
|
|
5075
5171
|
}) {
|
|
5076
5172
|
switch (part.kind) {
|
|
5077
5173
|
case "text":
|
|
5078
|
-
return /* @__PURE__ */
|
|
5174
|
+
return /* @__PURE__ */ jsx17(MarkdownView, { textSig: part.textSig, doneSig: part.doneSig });
|
|
5079
5175
|
case "reasoning":
|
|
5080
|
-
return showReasoning ? /* @__PURE__ */
|
|
5176
|
+
return showReasoning ? /* @__PURE__ */ jsx17(ReasoningView, { part, active, strings }) : null;
|
|
5081
5177
|
case "tool":
|
|
5082
|
-
return /* @__PURE__ */
|
|
5178
|
+
return /* @__PURE__ */ jsx17(
|
|
5083
5179
|
ToolPartView,
|
|
5084
5180
|
{
|
|
5085
5181
|
part,
|
|
@@ -5091,11 +5187,11 @@ function PartView({
|
|
|
5091
5187
|
);
|
|
5092
5188
|
case "file":
|
|
5093
5189
|
if (part.mediaType.startsWith("image/")) {
|
|
5094
|
-
return /* @__PURE__ */
|
|
5190
|
+
return /* @__PURE__ */ jsx17("img", { src: part.url, alt: "", loading: "lazy" });
|
|
5095
5191
|
}
|
|
5096
|
-
return /* @__PURE__ */
|
|
5192
|
+
return /* @__PURE__ */ jsx17("a", { href: part.url, target: "_blank", rel: "noreferrer noopener", children: part.url });
|
|
5097
5193
|
case "source":
|
|
5098
|
-
return null;
|
|
5194
|
+
return showSources ? /* @__PURE__ */ jsx17(SourceView, { part, strings }) : null;
|
|
5099
5195
|
}
|
|
5100
5196
|
}
|
|
5101
5197
|
function ToolPartView({
|
|
@@ -5105,11 +5201,10 @@ function ToolPartView({
|
|
|
5105
5201
|
interactive,
|
|
5106
5202
|
tool
|
|
5107
5203
|
}) {
|
|
5108
|
-
const
|
|
5109
|
-
const hasApproval = useComputed4(() => part.approvalSig.value !== void 0);
|
|
5204
|
+
const hasApproval = useComputed5(() => part.approvalSig.value !== void 0);
|
|
5110
5205
|
if (tool?.humanInLoop) {
|
|
5111
|
-
if (isAskUserInputTool(part.toolName)
|
|
5112
|
-
return /* @__PURE__ */
|
|
5206
|
+
if (isAskUserInputTool(part.toolName)) {
|
|
5207
|
+
return /* @__PURE__ */ jsx17(
|
|
5113
5208
|
ToolAskInput,
|
|
5114
5209
|
{
|
|
5115
5210
|
part,
|
|
@@ -5120,20 +5215,20 @@ function ToolPartView({
|
|
|
5120
5215
|
}
|
|
5121
5216
|
);
|
|
5122
5217
|
}
|
|
5123
|
-
if (hasApproval.value
|
|
5124
|
-
return /* @__PURE__ */
|
|
5218
|
+
if (hasApproval.value) {
|
|
5219
|
+
return /* @__PURE__ */ jsx17(ToolApproval, { part, strings, active: interactive, onDecision: tool.onDecision });
|
|
5125
5220
|
}
|
|
5126
5221
|
}
|
|
5127
|
-
return showToolCalls ? /* @__PURE__ */
|
|
5222
|
+
return showToolCalls ? /* @__PURE__ */ jsx17(ToolCall, { part, strings }) : null;
|
|
5128
5223
|
}
|
|
5129
5224
|
function ReasoningView({
|
|
5130
5225
|
part,
|
|
5131
5226
|
active,
|
|
5132
5227
|
strings
|
|
5133
5228
|
}) {
|
|
5134
|
-
return /* @__PURE__ */
|
|
5135
|
-
/* @__PURE__ */
|
|
5136
|
-
/* @__PURE__ */
|
|
5229
|
+
return /* @__PURE__ */ jsxs14("details", { class: `${p16}-reasoning`, open: active, "data-active": active ? "true" : void 0, children: [
|
|
5230
|
+
/* @__PURE__ */ jsx17("summary", { class: `${p16}-reasoning-summary`, children: /* @__PURE__ */ jsx17("span", { class: `${p16}-reasoning-label`, children: active ? strings.thinking : strings.thoughts }) }),
|
|
5231
|
+
/* @__PURE__ */ jsx17("div", { class: `${p16}-reasoning-body`, children: /* @__PURE__ */ jsx17(MarkdownView, { textSig: part.textSig, doneSig: part.doneSig }) })
|
|
5137
5232
|
] });
|
|
5138
5233
|
}
|
|
5139
5234
|
function partKey(part) {
|
|
@@ -5150,22 +5245,22 @@ function partKey(part) {
|
|
|
5150
5245
|
}
|
|
5151
5246
|
}
|
|
5152
5247
|
function TypingDots() {
|
|
5153
|
-
return /* @__PURE__ */
|
|
5154
|
-
/* @__PURE__ */
|
|
5155
|
-
/* @__PURE__ */
|
|
5156
|
-
/* @__PURE__ */
|
|
5248
|
+
return /* @__PURE__ */ jsxs14("span", { class: `${p16}-typing`, "aria-hidden": "true", children: [
|
|
5249
|
+
/* @__PURE__ */ jsx17("span", {}),
|
|
5250
|
+
/* @__PURE__ */ jsx17("span", {}),
|
|
5251
|
+
/* @__PURE__ */ jsx17("span", {})
|
|
5157
5252
|
] });
|
|
5158
5253
|
}
|
|
5159
5254
|
function LoadingSpinner({ label }) {
|
|
5160
|
-
return /* @__PURE__ */
|
|
5161
|
-
/* @__PURE__ */
|
|
5162
|
-
/* @__PURE__ */
|
|
5255
|
+
return /* @__PURE__ */ jsxs14("span", { class: `${p16}-loading`, role: "status", children: [
|
|
5256
|
+
/* @__PURE__ */ jsx17("span", { class: `${p16}-loading-spinner`, "aria-hidden": "true" }),
|
|
5257
|
+
/* @__PURE__ */ jsx17("span", { class: `${p16}-loading-label`, children: label })
|
|
5163
5258
|
] });
|
|
5164
5259
|
}
|
|
5165
5260
|
|
|
5166
5261
|
// src/ui/message-list.tsx
|
|
5167
|
-
import { jsx as
|
|
5168
|
-
var
|
|
5262
|
+
import { jsx as jsx18, jsxs as jsxs15 } from "preact/jsx-runtime";
|
|
5263
|
+
var p17 = BRAND.cssPrefix;
|
|
5169
5264
|
var STICK_THRESHOLD = 120;
|
|
5170
5265
|
var INTERACTION_GRACE_MS = 350;
|
|
5171
5266
|
var DIVIDER_IDLE_MS = 1200;
|
|
@@ -5175,6 +5270,7 @@ function MessageList({
|
|
|
5175
5270
|
responseMode,
|
|
5176
5271
|
showReasoning,
|
|
5177
5272
|
showToolCalls,
|
|
5273
|
+
showSources,
|
|
5178
5274
|
loading,
|
|
5179
5275
|
idle,
|
|
5180
5276
|
tool,
|
|
@@ -5183,7 +5279,7 @@ function MessageList({
|
|
|
5183
5279
|
onFillForm
|
|
5184
5280
|
}) {
|
|
5185
5281
|
const ref = useRef5(null);
|
|
5186
|
-
const messages =
|
|
5282
|
+
const messages = useComputed6(() => messagesSig.value);
|
|
5187
5283
|
const [showJump, setShowJump] = useState6(false);
|
|
5188
5284
|
const [scrolling, setScrolling] = useState6(false);
|
|
5189
5285
|
const hasHydratedRef = useRef5(false);
|
|
@@ -5335,7 +5431,7 @@ function MessageList({
|
|
|
5335
5431
|
const pendingMarkers = [...formMarkers ?? []].toSorted(
|
|
5336
5432
|
(a, b) => (a.createdAt ?? Infinity) - (b.createdAt ?? Infinity)
|
|
5337
5433
|
);
|
|
5338
|
-
const markerRow = (marker) => /* @__PURE__ */
|
|
5434
|
+
const markerRow = (marker) => /* @__PURE__ */ jsx18(
|
|
5339
5435
|
FormDoneMarker,
|
|
5340
5436
|
{
|
|
5341
5437
|
marker,
|
|
@@ -5356,12 +5452,12 @@ function MessageList({
|
|
|
5356
5452
|
const day = dayKey(m.createdAt);
|
|
5357
5453
|
if (day && day !== prevDay) {
|
|
5358
5454
|
rows.push(
|
|
5359
|
-
/* @__PURE__ */
|
|
5455
|
+
/* @__PURE__ */ jsx18("div", { class: `${p17}-date-divider`, children: /* @__PURE__ */ jsx18("span", { class: `${p17}-date-pill`, title: fullDate(m.createdAt), children: dayLabel(m.createdAt, strings) }) }, `day:${day}`)
|
|
5360
5456
|
);
|
|
5361
5457
|
prevDay = day;
|
|
5362
5458
|
}
|
|
5363
5459
|
rows.push(
|
|
5364
|
-
/* @__PURE__ */
|
|
5460
|
+
/* @__PURE__ */ jsx18(
|
|
5365
5461
|
MessageBubble,
|
|
5366
5462
|
{
|
|
5367
5463
|
message: m,
|
|
@@ -5369,6 +5465,7 @@ function MessageList({
|
|
|
5369
5465
|
responseMode,
|
|
5370
5466
|
showReasoning,
|
|
5371
5467
|
showToolCalls,
|
|
5468
|
+
showSources,
|
|
5372
5469
|
interactive: Boolean(idle) && m.id === lastId,
|
|
5373
5470
|
tool
|
|
5374
5471
|
},
|
|
@@ -5379,33 +5476,33 @@ function MessageList({
|
|
|
5379
5476
|
for (const marker of pendingMarkers) {
|
|
5380
5477
|
rows.push(markerRow(marker));
|
|
5381
5478
|
}
|
|
5382
|
-
return /* @__PURE__ */
|
|
5383
|
-
/* @__PURE__ */
|
|
5479
|
+
return /* @__PURE__ */ jsxs15("div", { class: `${p17}-list-wrap`, children: [
|
|
5480
|
+
/* @__PURE__ */ jsxs15(
|
|
5384
5481
|
"div",
|
|
5385
5482
|
{
|
|
5386
5483
|
ref,
|
|
5387
|
-
class: `${
|
|
5484
|
+
class: `${p17}-list`,
|
|
5388
5485
|
role: "log",
|
|
5389
5486
|
"aria-live": "polite",
|
|
5390
5487
|
"aria-relevant": "additions text",
|
|
5391
5488
|
"data-scrolling": scrolling ? "true" : void 0,
|
|
5392
5489
|
children: [
|
|
5393
|
-
loading && messages.value.length === 0 ? /* @__PURE__ */
|
|
5490
|
+
loading && messages.value.length === 0 ? /* @__PURE__ */ jsx18("div", { class: `${p17}-list-loading`, role: "status", children: strings.conversationLoading }) : null,
|
|
5394
5491
|
rows,
|
|
5395
|
-
form ? /* @__PURE__ */
|
|
5492
|
+
form ? /* @__PURE__ */ jsx18(FormGate, { form: form.form, strings, onSubmit: form.onSubmit, onSkip: form.onSkip }) : null
|
|
5396
5493
|
]
|
|
5397
5494
|
}
|
|
5398
5495
|
),
|
|
5399
|
-
showJump ? /* @__PURE__ */
|
|
5496
|
+
showJump ? /* @__PURE__ */ jsx18(
|
|
5400
5497
|
"button",
|
|
5401
5498
|
{
|
|
5402
5499
|
type: "button",
|
|
5403
|
-
class: `${
|
|
5500
|
+
class: `${p17}-jump`,
|
|
5404
5501
|
onClick: jumpToBottom,
|
|
5405
5502
|
"aria-label": strings.scrollToBottom,
|
|
5406
5503
|
title: strings.scrollToBottom,
|
|
5407
5504
|
"data-testid": TID.scrollToBottom,
|
|
5408
|
-
children: /* @__PURE__ */
|
|
5505
|
+
children: /* @__PURE__ */ jsx18(ChevronDownIcon, {})
|
|
5409
5506
|
}
|
|
5410
5507
|
) : null
|
|
5411
5508
|
] });
|
|
@@ -5464,7 +5561,7 @@ function startOfDay(ms) {
|
|
|
5464
5561
|
}
|
|
5465
5562
|
|
|
5466
5563
|
// src/ui/conversation-list.tsx
|
|
5467
|
-
import { Fragment as Fragment3, jsx as
|
|
5564
|
+
import { Fragment as Fragment3, jsx as jsx19, jsxs as jsxs16 } from "preact/jsx-runtime";
|
|
5468
5565
|
var log11 = logger.scope("history");
|
|
5469
5566
|
var DEFAULT_SKELETON_ROWS = 3;
|
|
5470
5567
|
var MAX_SKELETON_ROWS = 6;
|
|
@@ -5491,7 +5588,7 @@ function ConversationList({
|
|
|
5491
5588
|
onSelect,
|
|
5492
5589
|
onNewConversation
|
|
5493
5590
|
}) {
|
|
5494
|
-
const
|
|
5591
|
+
const p35 = BRAND.cssPrefix;
|
|
5495
5592
|
const seed = transport.peekConversations({ visitorId });
|
|
5496
5593
|
const [state, setState] = useState7(seed ? "loaded" : "loading");
|
|
5497
5594
|
const [conversations, setChats] = useState7(seed?.conversations ?? []);
|
|
@@ -5512,32 +5609,32 @@ function ConversationList({
|
|
|
5512
5609
|
cancelled = true;
|
|
5513
5610
|
};
|
|
5514
5611
|
}, [transport, visitorId, persistence]);
|
|
5515
|
-
const newChatButton = onNewConversation ? /* @__PURE__ */
|
|
5612
|
+
const newChatButton = onNewConversation ? /* @__PURE__ */ jsx19("div", { class: `${p35}-history-footer`, children: /* @__PURE__ */ jsxs16(
|
|
5516
5613
|
"button",
|
|
5517
5614
|
{
|
|
5518
5615
|
type: "button",
|
|
5519
|
-
class: `${
|
|
5616
|
+
class: `${p35}-history-new`,
|
|
5520
5617
|
onClick: onNewConversation,
|
|
5521
5618
|
"data-testid": TID.sidebarNewConversation,
|
|
5522
5619
|
children: [
|
|
5523
|
-
/* @__PURE__ */
|
|
5620
|
+
/* @__PURE__ */ jsx19(PlusIcon, {}),
|
|
5524
5621
|
strings.newConversation
|
|
5525
5622
|
]
|
|
5526
5623
|
}
|
|
5527
5624
|
) }) : null;
|
|
5528
5625
|
if (state === "loading") {
|
|
5529
5626
|
const rows = Math.min(persistence.loadHistoryCount() ?? DEFAULT_SKELETON_ROWS, MAX_SKELETON_ROWS);
|
|
5530
|
-
return /* @__PURE__ */
|
|
5531
|
-
/* @__PURE__ */
|
|
5532
|
-
/* @__PURE__ */
|
|
5533
|
-
/* @__PURE__ */
|
|
5534
|
-
/* @__PURE__ */
|
|
5535
|
-
/* @__PURE__ */
|
|
5536
|
-
/* @__PURE__ */
|
|
5537
|
-
/* @__PURE__ */
|
|
5538
|
-
/* @__PURE__ */
|
|
5627
|
+
return /* @__PURE__ */ jsxs16(Fragment3, { children: [
|
|
5628
|
+
/* @__PURE__ */ jsx19("div", { class: `${p35}-history`, "aria-busy": "true", "aria-label": strings.historyLoading, children: /* @__PURE__ */ jsxs16("div", { class: `${p35}-history-group`, "aria-hidden": "true", children: [
|
|
5629
|
+
/* @__PURE__ */ jsx19("div", { class: `${p35}-history-heading`, children: /* @__PURE__ */ jsx19("span", { class: `${p35}-skeleton ${p35}-skeleton-heading` }) }),
|
|
5630
|
+
/* @__PURE__ */ jsx19("div", { class: `${p35}-history-card`, children: Array.from({ length: Math.max(1, rows) }, (_, i) => /* @__PURE__ */ jsxs16("div", { class: `${p35}-history-item ${p35}-history-item-skeleton`, children: [
|
|
5631
|
+
/* @__PURE__ */ jsx19("span", { class: `${p35}-history-avatar ${p35}-skeleton` }),
|
|
5632
|
+
/* @__PURE__ */ jsxs16("span", { class: `${p35}-history-body`, children: [
|
|
5633
|
+
/* @__PURE__ */ jsxs16("span", { class: `${p35}-history-row`, children: [
|
|
5634
|
+
/* @__PURE__ */ jsx19("span", { class: `${p35}-history-title`, children: /* @__PURE__ */ jsx19("span", { class: `${p35}-skeleton ${p35}-skeleton-title` }) }),
|
|
5635
|
+
/* @__PURE__ */ jsx19("span", { class: `${p35}-history-time`, children: /* @__PURE__ */ jsx19("span", { class: `${p35}-skeleton ${p35}-skeleton-time` }) })
|
|
5539
5636
|
] }),
|
|
5540
|
-
/* @__PURE__ */
|
|
5637
|
+
/* @__PURE__ */ jsx19("span", { class: `${p35}-history-row`, children: /* @__PURE__ */ jsx19("span", { class: `${p35}-history-preview`, children: /* @__PURE__ */ jsx19("span", { class: `${p35}-skeleton ${p35}-skeleton-preview` }) }) })
|
|
5541
5638
|
] })
|
|
5542
5639
|
] }, i)) })
|
|
5543
5640
|
] }) }),
|
|
@@ -5545,36 +5642,36 @@ function ConversationList({
|
|
|
5545
5642
|
] });
|
|
5546
5643
|
}
|
|
5547
5644
|
if (state === "error" || conversations.length === 0) {
|
|
5548
|
-
return /* @__PURE__ */
|
|
5549
|
-
/* @__PURE__ */
|
|
5645
|
+
return /* @__PURE__ */ jsxs16(Fragment3, { children: [
|
|
5646
|
+
/* @__PURE__ */ jsx19("div", { class: `${p35}-history-empty`, children: strings.historyEmpty }),
|
|
5550
5647
|
newChatButton
|
|
5551
5648
|
] });
|
|
5552
5649
|
}
|
|
5553
5650
|
const now = Date.now();
|
|
5554
5651
|
const groups = groupByBucket(now, conversations);
|
|
5555
|
-
return /* @__PURE__ */
|
|
5556
|
-
/* @__PURE__ */
|
|
5557
|
-
/* @__PURE__ */
|
|
5558
|
-
/* @__PURE__ */
|
|
5652
|
+
return /* @__PURE__ */ jsxs16(Fragment3, { children: [
|
|
5653
|
+
/* @__PURE__ */ jsx19("div", { class: `${p35}-history`, role: "list", children: groups.map((group) => /* @__PURE__ */ jsxs16("div", { class: `${p35}-history-group`, children: [
|
|
5654
|
+
/* @__PURE__ */ jsx19("div", { class: `${p35}-history-heading`, children: strings[BUCKET_TO_STRING[group.bucket]] }),
|
|
5655
|
+
/* @__PURE__ */ jsx19("div", { class: `${p35}-history-card`, children: group.conversations.map((chat) => /* @__PURE__ */ jsxs16(
|
|
5559
5656
|
"button",
|
|
5560
5657
|
{
|
|
5561
5658
|
type: "button",
|
|
5562
5659
|
role: "listitem",
|
|
5563
|
-
class: `${
|
|
5660
|
+
class: `${p35}-history-item`,
|
|
5564
5661
|
onClick: () => onSelect(chat),
|
|
5565
5662
|
"data-closed": chat.canContinue ? void 0 : "true",
|
|
5566
5663
|
"data-unread": (chat.unreadCount ?? 0) > 0 ? "true" : void 0,
|
|
5567
5664
|
"data-testid": tid(TID.historyItem, chat.conversationId),
|
|
5568
5665
|
children: [
|
|
5569
|
-
/* @__PURE__ */
|
|
5570
|
-
/* @__PURE__ */
|
|
5571
|
-
/* @__PURE__ */
|
|
5572
|
-
/* @__PURE__ */
|
|
5573
|
-
/* @__PURE__ */
|
|
5666
|
+
/* @__PURE__ */ jsx19("span", { class: `${p35}-history-avatar`, "aria-hidden": "true", children: /* @__PURE__ */ jsx19(MessageIcon, {}) }),
|
|
5667
|
+
/* @__PURE__ */ jsxs16("span", { class: `${p35}-history-body`, children: [
|
|
5668
|
+
/* @__PURE__ */ jsxs16("span", { class: `${p35}-history-row`, children: [
|
|
5669
|
+
/* @__PURE__ */ jsx19("span", { class: `${p35}-history-title`, children: chat.title }),
|
|
5670
|
+
/* @__PURE__ */ jsx19("span", { class: `${p35}-history-time`, children: rowTime(chat.lastMessageAt, now, locale) })
|
|
5574
5671
|
] }),
|
|
5575
|
-
/* @__PURE__ */
|
|
5576
|
-
/* @__PURE__ */
|
|
5577
|
-
(chat.unreadCount ?? 0) > 0 ? /* @__PURE__ */
|
|
5672
|
+
/* @__PURE__ */ jsxs16("span", { class: `${p35}-history-row`, children: [
|
|
5673
|
+
/* @__PURE__ */ jsx19("span", { class: `${p35}-history-preview`, children: chat.preview ?? (chat.canContinue ? strings.historyContinue : strings.conversationClosed) }),
|
|
5674
|
+
(chat.unreadCount ?? 0) > 0 ? /* @__PURE__ */ jsx19("span", { class: `${p35}-history-dot` }) : null
|
|
5578
5675
|
] })
|
|
5579
5676
|
] })
|
|
5580
5677
|
]
|
|
@@ -5587,15 +5684,15 @@ function ConversationList({
|
|
|
5587
5684
|
}
|
|
5588
5685
|
|
|
5589
5686
|
// src/ui/suggestions.tsx
|
|
5590
|
-
import { jsx as
|
|
5591
|
-
var
|
|
5687
|
+
import { jsx as jsx20 } from "preact/jsx-runtime";
|
|
5688
|
+
var p18 = BRAND.cssPrefix;
|
|
5592
5689
|
function Suggestions({ suggestions, onPick }) {
|
|
5593
5690
|
if (suggestions.length === 0) return null;
|
|
5594
|
-
return /* @__PURE__ */
|
|
5691
|
+
return /* @__PURE__ */ jsx20("div", { class: `${p18}-suggestions`, role: "group", "aria-label": "Suggested replies", children: suggestions.map((s, i) => /* @__PURE__ */ jsx20(
|
|
5595
5692
|
"button",
|
|
5596
5693
|
{
|
|
5597
5694
|
type: "button",
|
|
5598
|
-
class: `${
|
|
5695
|
+
class: `${p18}-suggestion`,
|
|
5599
5696
|
onClick: () => onPick(s),
|
|
5600
5697
|
"data-testid": tid(TID.suggestion, i),
|
|
5601
5698
|
children: s.label
|
|
@@ -5605,8 +5702,8 @@ function Suggestions({ suggestions, onPick }) {
|
|
|
5605
5702
|
}
|
|
5606
5703
|
|
|
5607
5704
|
// src/ui/panel.tsx
|
|
5608
|
-
import { Fragment as Fragment4, jsx as
|
|
5609
|
-
var
|
|
5705
|
+
import { Fragment as Fragment4, jsx as jsx21, jsxs as jsxs17 } from "preact/jsx-runtime";
|
|
5706
|
+
var p19 = BRAND.cssPrefix;
|
|
5610
5707
|
function Panel(props2) {
|
|
5611
5708
|
const { options, onClose } = props2;
|
|
5612
5709
|
const s = options.strings;
|
|
@@ -5630,18 +5727,18 @@ function Panel(props2) {
|
|
|
5630
5727
|
}, []);
|
|
5631
5728
|
const { visible: dragOver } = useFileDrop({ containerRef, onDrop: onDropItems });
|
|
5632
5729
|
useDragMove(containerRef.current, options.mode === "modal");
|
|
5633
|
-
return /* @__PURE__ */
|
|
5730
|
+
return /* @__PURE__ */ jsxs17(
|
|
5634
5731
|
"div",
|
|
5635
5732
|
{
|
|
5636
5733
|
ref: containerRef,
|
|
5637
|
-
class: `${
|
|
5734
|
+
class: `${p19}-panel`,
|
|
5638
5735
|
role: "dialog",
|
|
5639
5736
|
"aria-modal": "false",
|
|
5640
5737
|
"aria-label": s.panelTitle,
|
|
5641
5738
|
style: { position: "relative" },
|
|
5642
5739
|
"data-testid": TID.panel,
|
|
5643
5740
|
children: [
|
|
5644
|
-
/* @__PURE__ */
|
|
5741
|
+
/* @__PURE__ */ jsx21(
|
|
5645
5742
|
PanelContent,
|
|
5646
5743
|
{
|
|
5647
5744
|
...props2,
|
|
@@ -5650,7 +5747,7 @@ function Panel(props2) {
|
|
|
5650
5747
|
composerAttachApiRef
|
|
5651
5748
|
}
|
|
5652
5749
|
),
|
|
5653
|
-
/* @__PURE__ */
|
|
5750
|
+
/* @__PURE__ */ jsx21(PoweredByBar, { poweredBy: props2.options.poweredBy })
|
|
5654
5751
|
]
|
|
5655
5752
|
}
|
|
5656
5753
|
);
|
|
@@ -5697,9 +5794,9 @@ function PanelContent(props2) {
|
|
|
5697
5794
|
if (activeForm) {
|
|
5698
5795
|
composerArea = null;
|
|
5699
5796
|
} else if (canSend) {
|
|
5700
|
-
composerArea = /* @__PURE__ */
|
|
5701
|
-
/* @__PURE__ */
|
|
5702
|
-
/* @__PURE__ */
|
|
5797
|
+
composerArea = /* @__PURE__ */ jsxs17(Fragment4, { children: [
|
|
5798
|
+
/* @__PURE__ */ jsx21(Suggestions, { suggestions, onPick: onSuggestion }),
|
|
5799
|
+
/* @__PURE__ */ jsx21(
|
|
5703
5800
|
Composer,
|
|
5704
5801
|
{
|
|
5705
5802
|
options,
|
|
@@ -5714,10 +5811,10 @@ function PanelContent(props2) {
|
|
|
5714
5811
|
)
|
|
5715
5812
|
] });
|
|
5716
5813
|
} else {
|
|
5717
|
-
composerArea = /* @__PURE__ */
|
|
5814
|
+
composerArea = /* @__PURE__ */ jsx21(ReadOnlyBanner, { label: s.conversationClosed, ctaLabel: s.startNewConversation, onNewConversation: onClear });
|
|
5718
5815
|
}
|
|
5719
|
-
return /* @__PURE__ */
|
|
5720
|
-
view === "history" ? /* @__PURE__ */
|
|
5816
|
+
return /* @__PURE__ */ jsxs17(Fragment4, { children: [
|
|
5817
|
+
view === "history" ? /* @__PURE__ */ jsx21(
|
|
5721
5818
|
HistoryHeader,
|
|
5722
5819
|
{
|
|
5723
5820
|
strings: s,
|
|
@@ -5725,22 +5822,22 @@ function PanelContent(props2) {
|
|
|
5725
5822
|
onClose,
|
|
5726
5823
|
showClose: canShowClose(options.mode, panelSize, options.actions)
|
|
5727
5824
|
}
|
|
5728
|
-
) : /* @__PURE__ */
|
|
5729
|
-
onBack ? /* @__PURE__ */
|
|
5825
|
+
) : /* @__PURE__ */ jsxs17("header", { class: `${p19}-header`, "data-testid": TID.panelHeader, children: [
|
|
5826
|
+
onBack ? /* @__PURE__ */ jsx21(
|
|
5730
5827
|
"button",
|
|
5731
5828
|
{
|
|
5732
5829
|
type: "button",
|
|
5733
|
-
class: `${
|
|
5830
|
+
class: `${p19}-icon-btn`,
|
|
5734
5831
|
onClick: onBack,
|
|
5735
5832
|
"aria-label": s.moduleBack,
|
|
5736
5833
|
title: s.moduleBack,
|
|
5737
|
-
children: /* @__PURE__ */
|
|
5834
|
+
children: /* @__PURE__ */ jsx21(BackIcon, {})
|
|
5738
5835
|
}
|
|
5739
5836
|
) : null,
|
|
5740
|
-
agent ? /* @__PURE__ */
|
|
5741
|
-
/* @__PURE__ */
|
|
5837
|
+
agent ? /* @__PURE__ */ jsx21(AgentBadge, { agent, strings: s }) : /* @__PURE__ */ jsx21("h1", { children: s.panelTitle }),
|
|
5838
|
+
/* @__PURE__ */ jsx21(HeaderActions, { panelProps: props2, variant: "chat" })
|
|
5742
5839
|
] }),
|
|
5743
|
-
view === "history" ? /* @__PURE__ */
|
|
5840
|
+
view === "history" ? /* @__PURE__ */ jsx21(
|
|
5744
5841
|
ConversationList,
|
|
5745
5842
|
{
|
|
5746
5843
|
transport,
|
|
@@ -5751,9 +5848,9 @@ function PanelContent(props2) {
|
|
|
5751
5848
|
onSelect: (conversation) => onSelectHistoryConversation(conversation.conversationId),
|
|
5752
5849
|
onNewConversation
|
|
5753
5850
|
}
|
|
5754
|
-
) : /* @__PURE__ */
|
|
5755
|
-
/* @__PURE__ */
|
|
5756
|
-
/* @__PURE__ */
|
|
5851
|
+
) : /* @__PURE__ */ jsxs17(Fragment4, { children: [
|
|
5852
|
+
/* @__PURE__ */ jsx21(DropZone, { visible: dragOver, strings: s }),
|
|
5853
|
+
/* @__PURE__ */ jsx21(
|
|
5757
5854
|
MessageList,
|
|
5758
5855
|
{
|
|
5759
5856
|
messagesSig,
|
|
@@ -5761,6 +5858,7 @@ function PanelContent(props2) {
|
|
|
5761
5858
|
responseMode: options.responseMode,
|
|
5762
5859
|
showReasoning: options.showReasoning,
|
|
5763
5860
|
showToolCalls: options.showToolCalls,
|
|
5861
|
+
showSources: options.showSources,
|
|
5764
5862
|
loading: loadingMessages,
|
|
5765
5863
|
idle: !isStreaming,
|
|
5766
5864
|
tool,
|
|
@@ -5770,9 +5868,9 @@ function PanelContent(props2) {
|
|
|
5770
5868
|
}
|
|
5771
5869
|
),
|
|
5772
5870
|
composerArea,
|
|
5773
|
-
/* @__PURE__ */
|
|
5871
|
+
/* @__PURE__ */ jsx21(ComposerFooter, { disclaimer: options.composerDisclaimer })
|
|
5774
5872
|
] }),
|
|
5775
|
-
options.size.resize?.enabled ? /* @__PURE__ */
|
|
5873
|
+
options.size.resize?.enabled ? /* @__PURE__ */ jsx21(
|
|
5776
5874
|
ResizeGrip,
|
|
5777
5875
|
{
|
|
5778
5876
|
panelEl: containerEl,
|
|
@@ -5791,28 +5889,28 @@ function HistoryHeader({
|
|
|
5791
5889
|
onClose,
|
|
5792
5890
|
showClose
|
|
5793
5891
|
}) {
|
|
5794
|
-
return /* @__PURE__ */
|
|
5795
|
-
/* @__PURE__ */
|
|
5892
|
+
return /* @__PURE__ */ jsxs17("header", { class: `${p19}-header`, children: [
|
|
5893
|
+
/* @__PURE__ */ jsx21(
|
|
5796
5894
|
"button",
|
|
5797
5895
|
{
|
|
5798
5896
|
type: "button",
|
|
5799
|
-
class: `${
|
|
5897
|
+
class: `${p19}-icon-btn`,
|
|
5800
5898
|
onClick: onBack,
|
|
5801
5899
|
"aria-label": strings.historyBack,
|
|
5802
5900
|
title: strings.historyBack,
|
|
5803
|
-
children: /* @__PURE__ */
|
|
5901
|
+
children: /* @__PURE__ */ jsx21(BackIcon, {})
|
|
5804
5902
|
}
|
|
5805
5903
|
),
|
|
5806
|
-
/* @__PURE__ */
|
|
5807
|
-
showClose ? /* @__PURE__ */
|
|
5904
|
+
/* @__PURE__ */ jsx21("h1", { children: strings.historyTitle }),
|
|
5905
|
+
showClose ? /* @__PURE__ */ jsx21(
|
|
5808
5906
|
"button",
|
|
5809
5907
|
{
|
|
5810
5908
|
type: "button",
|
|
5811
|
-
class: `${
|
|
5909
|
+
class: `${p19}-icon-btn`,
|
|
5812
5910
|
onClick: onClose,
|
|
5813
5911
|
"aria-label": strings.close,
|
|
5814
5912
|
title: strings.close,
|
|
5815
|
-
children: /* @__PURE__ */
|
|
5913
|
+
children: /* @__PURE__ */ jsx21(CloseIcon, {})
|
|
5816
5914
|
}
|
|
5817
5915
|
) : null
|
|
5818
5916
|
] });
|
|
@@ -5822,28 +5920,28 @@ function ReadOnlyBanner({
|
|
|
5822
5920
|
ctaLabel,
|
|
5823
5921
|
onNewConversation
|
|
5824
5922
|
}) {
|
|
5825
|
-
return /* @__PURE__ */
|
|
5826
|
-
/* @__PURE__ */
|
|
5827
|
-
/* @__PURE__ */
|
|
5923
|
+
return /* @__PURE__ */ jsxs17("div", { class: `${p19}-readonly-banner`, role: "note", children: [
|
|
5924
|
+
/* @__PURE__ */ jsx21("span", { class: `${p19}-readonly-label`, children: label }),
|
|
5925
|
+
/* @__PURE__ */ jsx21("button", { type: "button", class: `${p19}-readonly-cta`, onClick: onNewConversation, children: ctaLabel })
|
|
5828
5926
|
] });
|
|
5829
5927
|
}
|
|
5830
5928
|
function ComposerFooter({ disclaimer }) {
|
|
5831
5929
|
if (!disclaimer) return null;
|
|
5832
|
-
return /* @__PURE__ */
|
|
5930
|
+
return /* @__PURE__ */ jsx21("div", { class: `${p19}-composer-footer`, children: /* @__PURE__ */ jsx21("div", { class: `${p19}-disclaimer`, children: disclaimer }) });
|
|
5833
5931
|
}
|
|
5834
5932
|
function PoweredByBar({ poweredBy }) {
|
|
5835
5933
|
if (!poweredBy) return null;
|
|
5836
|
-
return /* @__PURE__ */
|
|
5934
|
+
return /* @__PURE__ */ jsx21("div", { class: `${p19}-poweredby-bar`, children: /* @__PURE__ */ jsx21(PoweredBy, { logoUrl: poweredBy.logoUrl, text: poweredBy.text, href: poweredBy.href }) });
|
|
5837
5935
|
}
|
|
5838
5936
|
function PoweredBy({ logoUrl, text, href }) {
|
|
5839
|
-
const inner = /* @__PURE__ */
|
|
5840
|
-
logoUrl ? /* @__PURE__ */
|
|
5841
|
-
text ? /* @__PURE__ */
|
|
5937
|
+
const inner = /* @__PURE__ */ jsxs17(Fragment4, { children: [
|
|
5938
|
+
logoUrl ? /* @__PURE__ */ jsx21("img", { class: `${p19}-poweredby-logo`, src: logoUrl, alt: "", loading: "lazy" }) : null,
|
|
5939
|
+
text ? /* @__PURE__ */ jsx21("span", { children: text }) : null
|
|
5842
5940
|
] });
|
|
5843
5941
|
if (href) {
|
|
5844
|
-
return /* @__PURE__ */
|
|
5942
|
+
return /* @__PURE__ */ jsx21("a", { class: `${p19}-poweredby`, href, target: "_blank", rel: "noopener noreferrer", children: inner });
|
|
5845
5943
|
}
|
|
5846
|
-
return /* @__PURE__ */
|
|
5944
|
+
return /* @__PURE__ */ jsx21("span", { class: `${p19}-poweredby`, children: inner });
|
|
5847
5945
|
}
|
|
5848
5946
|
|
|
5849
5947
|
// src/ui/form/form-controller.ts
|
|
@@ -5926,34 +6024,34 @@ function whenPasses(form, d) {
|
|
|
5926
6024
|
}
|
|
5927
6025
|
|
|
5928
6026
|
// src/ui/sidebar.tsx
|
|
5929
|
-
import { Fragment as Fragment5, jsx as
|
|
6027
|
+
import { Fragment as Fragment5, jsx as jsx22, jsxs as jsxs18 } from "preact/jsx-runtime";
|
|
5930
6028
|
function Sidebar(props2) {
|
|
5931
|
-
const
|
|
6029
|
+
const p35 = BRAND.cssPrefix;
|
|
5932
6030
|
const { site, blocks, strings, collapsed } = props2;
|
|
5933
6031
|
const navigation = blocks?.navigation ?? [];
|
|
5934
6032
|
const linkCards = blocks?.linkCards ?? [];
|
|
5935
6033
|
const toggleLabel = collapsed ? strings.expandSidebar : strings.collapseSidebar;
|
|
5936
|
-
return /* @__PURE__ */
|
|
5937
|
-
/* @__PURE__ */
|
|
5938
|
-
/* @__PURE__ */
|
|
5939
|
-
/* @__PURE__ */
|
|
6034
|
+
return /* @__PURE__ */ jsxs18("aside", { class: `${p35}-sidebar`, "data-collapsed": collapsed ? "true" : "false", "data-testid": TID.sidebar, children: [
|
|
6035
|
+
/* @__PURE__ */ jsxs18("div", { class: `${p35}-sidebar-header`, children: [
|
|
6036
|
+
/* @__PURE__ */ jsx22(SidebarBrand, { site }),
|
|
6037
|
+
/* @__PURE__ */ jsx22(
|
|
5940
6038
|
"button",
|
|
5941
6039
|
{
|
|
5942
6040
|
type: "button",
|
|
5943
|
-
class: `${
|
|
6041
|
+
class: `${p35}-sidebar-toggle`,
|
|
5944
6042
|
"aria-label": toggleLabel,
|
|
5945
6043
|
"aria-expanded": collapsed ? "false" : "true",
|
|
5946
6044
|
title: toggleLabel,
|
|
5947
6045
|
onClick: props2.onToggleCollapsed,
|
|
5948
6046
|
"data-testid": TID.sidebarToggle,
|
|
5949
|
-
children: /* @__PURE__ */
|
|
6047
|
+
children: /* @__PURE__ */ jsx22(SidebarToggleIcon, { collapsed })
|
|
5950
6048
|
}
|
|
5951
6049
|
)
|
|
5952
6050
|
] }),
|
|
5953
|
-
collapsed ? null : /* @__PURE__ */
|
|
5954
|
-
navigation.length > 0 ? /* @__PURE__ */
|
|
5955
|
-
linkCards.length > 0 ? /* @__PURE__ */
|
|
5956
|
-
props2.showConversations ? /* @__PURE__ */
|
|
6051
|
+
collapsed ? null : /* @__PURE__ */ jsxs18(Fragment5, { children: [
|
|
6052
|
+
navigation.length > 0 ? /* @__PURE__ */ jsx22("nav", { class: `${p35}-sidebar-section`, "data-section": "navigation", children: /* @__PURE__ */ jsx22(SidebarNav, { items: navigation }) }) : null,
|
|
6053
|
+
linkCards.length > 0 ? /* @__PURE__ */ jsx22("div", { class: `${p35}-sidebar-section`, "data-section": "link-cards", children: /* @__PURE__ */ jsx22(SidebarCards, { items: linkCards }) }) : null,
|
|
6054
|
+
props2.showConversations ? /* @__PURE__ */ jsx22("div", { class: `${p35}-sidebar-conversations`, children: /* @__PURE__ */ jsx22(
|
|
5957
6055
|
ConversationList,
|
|
5958
6056
|
{
|
|
5959
6057
|
transport: props2.transport,
|
|
@@ -5969,18 +6067,18 @@ function Sidebar(props2) {
|
|
|
5969
6067
|
] });
|
|
5970
6068
|
}
|
|
5971
6069
|
function SidebarBrand({ site }) {
|
|
5972
|
-
const
|
|
6070
|
+
const p35 = BRAND.cssPrefix;
|
|
5973
6071
|
if (site?.logo?.url) {
|
|
5974
6072
|
const alt = site.logo.alt ?? site.title ?? "Logo";
|
|
5975
|
-
return /* @__PURE__ */
|
|
5976
|
-
site.logoDark?.url ? /* @__PURE__ */
|
|
5977
|
-
/* @__PURE__ */
|
|
6073
|
+
return /* @__PURE__ */ jsxs18("picture", { children: [
|
|
6074
|
+
site.logoDark?.url ? /* @__PURE__ */ jsx22("source", { srcset: site.logoDark.url, media: "(prefers-color-scheme: dark)" }) : null,
|
|
6075
|
+
/* @__PURE__ */ jsx22("img", { class: `${p35}-sidebar-logo`, src: site.logo.url, alt })
|
|
5978
6076
|
] });
|
|
5979
6077
|
}
|
|
5980
|
-
return /* @__PURE__ */
|
|
6078
|
+
return /* @__PURE__ */ jsx22("div", { class: `${p35}-sidebar-title`, children: site?.title ?? BRAND.name });
|
|
5981
6079
|
}
|
|
5982
6080
|
function SidebarToggleIcon({ collapsed }) {
|
|
5983
|
-
return /* @__PURE__ */
|
|
6081
|
+
return /* @__PURE__ */ jsx22(
|
|
5984
6082
|
"svg",
|
|
5985
6083
|
{
|
|
5986
6084
|
width: "16",
|
|
@@ -5990,38 +6088,38 @@ function SidebarToggleIcon({ collapsed }) {
|
|
|
5990
6088
|
stroke: "currentColor",
|
|
5991
6089
|
"stroke-width": "2",
|
|
5992
6090
|
"aria-hidden": "true",
|
|
5993
|
-
children: collapsed ? /* @__PURE__ */
|
|
6091
|
+
children: collapsed ? /* @__PURE__ */ jsx22("polyline", { points: "9 6 15 12 9 18" }) : /* @__PURE__ */ jsx22("polyline", { points: "15 6 9 12 15 18" })
|
|
5994
6092
|
}
|
|
5995
6093
|
);
|
|
5996
6094
|
}
|
|
5997
6095
|
function SidebarNav({ items }) {
|
|
5998
|
-
const
|
|
5999
|
-
return /* @__PURE__ */
|
|
6096
|
+
const p35 = BRAND.cssPrefix;
|
|
6097
|
+
return /* @__PURE__ */ jsx22("ul", { class: `${p35}-sidebar-nav`, children: items.map((item) => /* @__PURE__ */ jsx22("li", { children: /* @__PURE__ */ jsxs18(
|
|
6000
6098
|
"a",
|
|
6001
6099
|
{
|
|
6002
|
-
class: `${
|
|
6100
|
+
class: `${p35}-sidebar-nav-item`,
|
|
6003
6101
|
href: item.href,
|
|
6004
6102
|
target: item.href ? "_blank" : void 0,
|
|
6005
6103
|
rel: item.href ? "noreferrer" : void 0,
|
|
6006
6104
|
children: [
|
|
6007
|
-
item.icon ? /* @__PURE__ */
|
|
6008
|
-
/* @__PURE__ */
|
|
6105
|
+
item.icon ? /* @__PURE__ */ jsx22("span", { class: `${p35}-sidebar-nav-icon`, "data-icon": item.icon }) : null,
|
|
6106
|
+
/* @__PURE__ */ jsx22("span", { class: `${p35}-sidebar-nav-label`, children: item.label })
|
|
6009
6107
|
]
|
|
6010
6108
|
}
|
|
6011
6109
|
) }, item.id ?? item.label)) });
|
|
6012
6110
|
}
|
|
6013
6111
|
function SidebarCards({ items }) {
|
|
6014
|
-
const
|
|
6015
|
-
return /* @__PURE__ */
|
|
6112
|
+
const p35 = BRAND.cssPrefix;
|
|
6113
|
+
return /* @__PURE__ */ jsx22("div", { class: `${p35}-sidebar-cards`, children: items.map((item) => /* @__PURE__ */ jsxs18(
|
|
6016
6114
|
"a",
|
|
6017
6115
|
{
|
|
6018
|
-
class: `${
|
|
6116
|
+
class: `${p35}-sidebar-card`,
|
|
6019
6117
|
href: item.href,
|
|
6020
6118
|
target: item.href ? "_blank" : void 0,
|
|
6021
6119
|
rel: item.href ? "noreferrer" : void 0,
|
|
6022
6120
|
children: [
|
|
6023
|
-
/* @__PURE__ */
|
|
6024
|
-
item.description ? /* @__PURE__ */
|
|
6121
|
+
/* @__PURE__ */ jsx22("div", { class: `${p35}-sidebar-card-label`, children: item.label }),
|
|
6122
|
+
item.description ? /* @__PURE__ */ jsx22("div", { class: `${p35}-sidebar-card-desc`, children: item.description }) : null
|
|
6025
6123
|
]
|
|
6026
6124
|
},
|
|
6027
6125
|
item.id ?? item.label
|
|
@@ -6029,11 +6127,11 @@ function SidebarCards({ items }) {
|
|
|
6029
6127
|
}
|
|
6030
6128
|
|
|
6031
6129
|
// src/ui/page-shell.tsx
|
|
6032
|
-
import { jsx as
|
|
6033
|
-
var
|
|
6130
|
+
import { jsx as jsx23, jsxs as jsxs19 } from "preact/jsx-runtime";
|
|
6131
|
+
var p20 = BRAND.cssPrefix;
|
|
6034
6132
|
function PageShell(props2) {
|
|
6035
|
-
return /* @__PURE__ */
|
|
6036
|
-
/* @__PURE__ */
|
|
6133
|
+
return /* @__PURE__ */ jsxs19("main", { class: `${p20}-page-shell`, "data-sidebar-collapsed": props2.sidebarCollapsed ? "true" : "false", children: [
|
|
6134
|
+
/* @__PURE__ */ jsx23(
|
|
6037
6135
|
Sidebar,
|
|
6038
6136
|
{
|
|
6039
6137
|
site: props2.site,
|
|
@@ -6050,7 +6148,7 @@ function PageShell(props2) {
|
|
|
6050
6148
|
onToggleCollapsed: props2.onToggleSidebarCollapsed
|
|
6051
6149
|
}
|
|
6052
6150
|
),
|
|
6053
|
-
/* @__PURE__ */
|
|
6151
|
+
/* @__PURE__ */ jsx23("section", { class: `${p20}-page-chat`, "aria-label": "Chat", children: props2.children })
|
|
6054
6152
|
] });
|
|
6055
6153
|
}
|
|
6056
6154
|
|
|
@@ -6088,7 +6186,7 @@ var atTabRoot = (s) => activeStack(s).length === 0;
|
|
|
6088
6186
|
|
|
6089
6187
|
// src/ui/messenger-home.tsx
|
|
6090
6188
|
import { useCallback as useCallback4, useEffect as useEffect14, useRef as useRef8 } from "preact/hooks";
|
|
6091
|
-
import { useComputed as
|
|
6189
|
+
import { useComputed as useComputed7 } from "@preact/signals";
|
|
6092
6190
|
|
|
6093
6191
|
// src/ui/modules/chat.tsx
|
|
6094
6192
|
var chatLayout = {
|
|
@@ -6100,80 +6198,80 @@ var chatLayout = {
|
|
|
6100
6198
|
import { useEffect as useEffect10, useMemo as useMemo2, useState as useState8 } from "preact/hooks";
|
|
6101
6199
|
|
|
6102
6200
|
// src/ui/back-header.tsx
|
|
6103
|
-
import { jsx as
|
|
6104
|
-
var
|
|
6201
|
+
import { jsx as jsx24, jsxs as jsxs20 } from "preact/jsx-runtime";
|
|
6202
|
+
var p21 = BRAND.cssPrefix;
|
|
6105
6203
|
function TitleBar({ title, actions }) {
|
|
6106
|
-
return /* @__PURE__ */
|
|
6107
|
-
/* @__PURE__ */
|
|
6108
|
-
/* @__PURE__ */
|
|
6109
|
-
actions ?? /* @__PURE__ */
|
|
6204
|
+
return /* @__PURE__ */ jsxs20("header", { class: `${p21}-back-header`, "data-variant": "title", children: [
|
|
6205
|
+
/* @__PURE__ */ jsx24("span", { class: `${p21}-back-spacer`, "aria-hidden": "true" }),
|
|
6206
|
+
/* @__PURE__ */ jsx24("h1", { class: `${p21}-back-title`, children: title }),
|
|
6207
|
+
actions ?? /* @__PURE__ */ jsx24("span", { class: `${p21}-back-spacer`, "aria-hidden": "true" })
|
|
6110
6208
|
] });
|
|
6111
6209
|
}
|
|
6112
6210
|
function BackHeader({ title, backLabel, onBack, actions, testid }) {
|
|
6113
|
-
return /* @__PURE__ */
|
|
6114
|
-
/* @__PURE__ */
|
|
6115
|
-
/* @__PURE__ */
|
|
6116
|
-
actions ?? /* @__PURE__ */
|
|
6211
|
+
return /* @__PURE__ */ jsxs20("header", { class: `${p21}-back-header`, "data-testid": testid, children: [
|
|
6212
|
+
/* @__PURE__ */ jsx24("button", { type: "button", class: `${p21}-icon-btn`, onClick: onBack, "aria-label": backLabel, title: backLabel, children: /* @__PURE__ */ jsx24(BackIcon, {}) }),
|
|
6213
|
+
/* @__PURE__ */ jsx24("h1", { class: `${p21}-back-title`, children: title }),
|
|
6214
|
+
actions ?? /* @__PURE__ */ jsx24("span", { class: `${p21}-back-spacer`, "aria-hidden": "true" })
|
|
6117
6215
|
] });
|
|
6118
6216
|
}
|
|
6119
6217
|
|
|
6120
6218
|
// src/ui/home-search.tsx
|
|
6121
|
-
import { jsx as
|
|
6122
|
-
var
|
|
6219
|
+
import { jsx as jsx25, jsxs as jsxs21 } from "preact/jsx-runtime";
|
|
6220
|
+
var p22 = BRAND.cssPrefix;
|
|
6123
6221
|
function HomeSearchButton({ placeholder, onActivate }) {
|
|
6124
|
-
return /* @__PURE__ */
|
|
6125
|
-
/* @__PURE__ */
|
|
6126
|
-
/* @__PURE__ */
|
|
6222
|
+
return /* @__PURE__ */ jsxs21("button", { type: "button", class: `${p22}-home-search`, onClick: onActivate, "data-testid": TID.homeSearch, children: [
|
|
6223
|
+
/* @__PURE__ */ jsx25("span", { class: `${p22}-home-search-text`, children: placeholder }),
|
|
6224
|
+
/* @__PURE__ */ jsx25("span", { class: `${p22}-home-search-icon`, "aria-hidden": "true", children: /* @__PURE__ */ jsx25(SearchIcon, {}) })
|
|
6127
6225
|
] });
|
|
6128
6226
|
}
|
|
6129
6227
|
function HelpSearchInput({ placeholder, value, onInput }) {
|
|
6130
|
-
return /* @__PURE__ */
|
|
6131
|
-
/* @__PURE__ */
|
|
6228
|
+
return /* @__PURE__ */ jsxs21("div", { class: `${p22}-home-search`, "data-input": "true", children: [
|
|
6229
|
+
/* @__PURE__ */ jsx25(
|
|
6132
6230
|
"input",
|
|
6133
6231
|
{
|
|
6134
6232
|
type: "search",
|
|
6135
|
-
class: `${
|
|
6233
|
+
class: `${p22}-home-search-input`,
|
|
6136
6234
|
placeholder,
|
|
6137
6235
|
value,
|
|
6138
6236
|
onInput: (e) => onInput(e.currentTarget.value),
|
|
6139
6237
|
"data-testid": TID.helpSearch
|
|
6140
6238
|
}
|
|
6141
6239
|
),
|
|
6142
|
-
/* @__PURE__ */
|
|
6240
|
+
/* @__PURE__ */ jsx25("span", { class: `${p22}-home-search-icon`, "aria-hidden": "true", children: /* @__PURE__ */ jsx25(SearchIcon, {}) })
|
|
6143
6241
|
] });
|
|
6144
6242
|
}
|
|
6145
6243
|
|
|
6146
6244
|
// src/ui/list-row.tsx
|
|
6147
|
-
import { jsx as
|
|
6148
|
-
var
|
|
6245
|
+
import { jsx as jsx26, jsxs as jsxs22 } from "preact/jsx-runtime";
|
|
6246
|
+
var p23 = BRAND.cssPrefix;
|
|
6149
6247
|
function ListRow({ title, subtitle, onClick, testid }) {
|
|
6150
|
-
return /* @__PURE__ */
|
|
6151
|
-
/* @__PURE__ */
|
|
6152
|
-
/* @__PURE__ */
|
|
6153
|
-
subtitle ? /* @__PURE__ */
|
|
6248
|
+
return /* @__PURE__ */ jsxs22("button", { type: "button", class: `${p23}-list-row`, onClick, "data-testid": testid, children: [
|
|
6249
|
+
/* @__PURE__ */ jsxs22("span", { class: `${p23}-list-row-body`, children: [
|
|
6250
|
+
/* @__PURE__ */ jsx26("span", { class: `${p23}-list-row-title`, children: title }),
|
|
6251
|
+
subtitle ? /* @__PURE__ */ jsx26("span", { class: `${p23}-list-row-sub`, children: subtitle }) : null
|
|
6154
6252
|
] }),
|
|
6155
|
-
/* @__PURE__ */
|
|
6253
|
+
/* @__PURE__ */ jsx26("span", { class: `${p23}-list-row-chevron`, "aria-hidden": "true", children: /* @__PURE__ */ jsx26(ChevronRightIcon, {}) })
|
|
6156
6254
|
] });
|
|
6157
6255
|
}
|
|
6158
6256
|
|
|
6159
6257
|
// src/ui/module-state.tsx
|
|
6160
|
-
import { jsx as
|
|
6161
|
-
var
|
|
6258
|
+
import { jsx as jsx27, jsxs as jsxs23 } from "preact/jsx-runtime";
|
|
6259
|
+
var p24 = BRAND.cssPrefix;
|
|
6162
6260
|
function ModuleState({
|
|
6163
6261
|
tone = "info",
|
|
6164
6262
|
message,
|
|
6165
6263
|
onRetry,
|
|
6166
6264
|
strings
|
|
6167
6265
|
}) {
|
|
6168
|
-
return /* @__PURE__ */
|
|
6169
|
-
/* @__PURE__ */
|
|
6170
|
-
onRetry ? /* @__PURE__ */
|
|
6266
|
+
return /* @__PURE__ */ jsxs23("div", { class: `${p24}-module-empty`, role: tone === "error" ? "alert" : "status", "aria-live": "polite", children: [
|
|
6267
|
+
/* @__PURE__ */ jsx27("span", { children: message }),
|
|
6268
|
+
onRetry ? /* @__PURE__ */ jsx27("button", { type: "button", class: `${p24}-module-retry`, onClick: onRetry, children: strings.errorRetry }) : null
|
|
6171
6269
|
] });
|
|
6172
6270
|
}
|
|
6173
6271
|
|
|
6174
6272
|
// src/ui/modules/help.tsx
|
|
6175
|
-
import { jsx as
|
|
6176
|
-
var
|
|
6273
|
+
import { jsx as jsx28, jsxs as jsxs24 } from "preact/jsx-runtime";
|
|
6274
|
+
var p25 = BRAND.cssPrefix;
|
|
6177
6275
|
var log12 = logger.scope("help");
|
|
6178
6276
|
var openArticle = (nav, a) => a.url ? nav.push({ kind: "iframe", url: a.url, title: a.title }) : nav.push({ kind: "content", id: a.id, title: a.title });
|
|
6179
6277
|
function groupByCategory(items) {
|
|
@@ -6202,7 +6300,7 @@ function fuzzySearch(items, query) {
|
|
|
6202
6300
|
return items.map((item) => ({ item, score: Math.max(fuzzyScore(q, item.title) * 2, fuzzyScore(q, item.description ?? "")) })).filter((r) => r.score > 0).toSorted((a, b) => b.score - a.score).map((r) => r.item);
|
|
6203
6301
|
}
|
|
6204
6302
|
function ArticleRow({ article, nav }) {
|
|
6205
|
-
return /* @__PURE__ */
|
|
6303
|
+
return /* @__PURE__ */ jsx28(
|
|
6206
6304
|
ListRow,
|
|
6207
6305
|
{
|
|
6208
6306
|
title: article.title,
|
|
@@ -6247,46 +6345,46 @@ function HelpRoot({ transport, strings, config, nav, bus, panelProps }) {
|
|
|
6247
6345
|
}, [query, results, bus]);
|
|
6248
6346
|
function renderBody() {
|
|
6249
6347
|
if (query.trim().length > 0) {
|
|
6250
|
-
if (results.length === 0) return /* @__PURE__ */
|
|
6251
|
-
return /* @__PURE__ */
|
|
6348
|
+
if (results.length === 0) return /* @__PURE__ */ jsx28(ModuleState, { message: strings.helpSearchEmpty, strings });
|
|
6349
|
+
return /* @__PURE__ */ jsx28("div", { class: `${p25}-help-card`, children: results.map((a) => /* @__PURE__ */ jsx28(ArticleRow, { article: a, nav }, a.id)) });
|
|
6252
6350
|
}
|
|
6253
|
-
if (state === "loading") return /* @__PURE__ */
|
|
6351
|
+
if (state === "loading") return /* @__PURE__ */ jsx28(ModuleState, { message: strings.helpLoading, strings });
|
|
6254
6352
|
if (state === "error") {
|
|
6255
|
-
return /* @__PURE__ */
|
|
6353
|
+
return /* @__PURE__ */ jsx28(ModuleState, { tone: "error", message: errorMsg, onRetry: () => setReloadKey((k) => k + 1), strings });
|
|
6256
6354
|
}
|
|
6257
|
-
if (items.length === 0) return /* @__PURE__ */
|
|
6258
|
-
return groupByCategory(items).map(([category, rows]) => /* @__PURE__ */
|
|
6259
|
-
category ? /* @__PURE__ */
|
|
6260
|
-
/* @__PURE__ */
|
|
6355
|
+
if (items.length === 0) return /* @__PURE__ */ jsx28(ModuleState, { message: strings.helpEmpty, strings });
|
|
6356
|
+
return groupByCategory(items).map(([category, rows]) => /* @__PURE__ */ jsxs24("section", { class: `${p25}-help-group`, children: [
|
|
6357
|
+
category ? /* @__PURE__ */ jsx28("h2", { class: `${p25}-help-section-title`, children: category }) : null,
|
|
6358
|
+
/* @__PURE__ */ jsx28("div", { class: `${p25}-help-card`, children: rows.map((a) => /* @__PURE__ */ jsx28(ArticleRow, { article: a, nav }, a.id)) })
|
|
6261
6359
|
] }, category));
|
|
6262
6360
|
}
|
|
6263
|
-
return /* @__PURE__ */
|
|
6264
|
-
/* @__PURE__ */
|
|
6265
|
-
/* @__PURE__ */
|
|
6266
|
-
/* @__PURE__ */
|
|
6361
|
+
return /* @__PURE__ */ jsxs24("div", { class: `${p25}-module`, children: [
|
|
6362
|
+
/* @__PURE__ */ jsx28(TitleBar, { title: strings.helpTitle, actions: /* @__PURE__ */ jsx28(HeaderActions, { panelProps, variant: "plain" }) }),
|
|
6363
|
+
/* @__PURE__ */ jsx28("div", { class: `${p25}-module-pad`, children: /* @__PURE__ */ jsx28(HelpSearchInput, { placeholder: strings.helpSearchPlaceholder, value: query, onInput: setQuery }) }),
|
|
6364
|
+
/* @__PURE__ */ jsx28("div", { class: `${p25}-help-list`, children: renderBody() })
|
|
6267
6365
|
] });
|
|
6268
6366
|
}
|
|
6269
6367
|
var helpLayout = {
|
|
6270
6368
|
Icon: HelpIcon,
|
|
6271
|
-
Root: (props2) => /* @__PURE__ */
|
|
6369
|
+
Root: (props2) => /* @__PURE__ */ jsx28(HelpRoot, { ...props2 })
|
|
6272
6370
|
};
|
|
6273
6371
|
|
|
6274
6372
|
// src/ui/modules/home.tsx
|
|
6275
6373
|
import { useEffect as useEffect11, useState as useState9 } from "preact/hooks";
|
|
6276
6374
|
|
|
6277
6375
|
// src/ui/home-card.tsx
|
|
6278
|
-
import { jsx as
|
|
6279
|
-
var
|
|
6376
|
+
import { jsx as jsx29 } from "preact/jsx-runtime";
|
|
6377
|
+
var p26 = BRAND.cssPrefix;
|
|
6280
6378
|
function HomeCard({ onClick, children, testid }) {
|
|
6281
6379
|
if (onClick) {
|
|
6282
|
-
return /* @__PURE__ */
|
|
6380
|
+
return /* @__PURE__ */ jsx29("button", { type: "button", class: `${p26}-home-card`, "data-interactive": "true", onClick, "data-testid": testid, children });
|
|
6283
6381
|
}
|
|
6284
|
-
return /* @__PURE__ */
|
|
6382
|
+
return /* @__PURE__ */ jsx29("div", { class: `${p26}-home-card`, "data-testid": testid, children });
|
|
6285
6383
|
}
|
|
6286
6384
|
|
|
6287
6385
|
// src/ui/modules/home.tsx
|
|
6288
|
-
import { Fragment as Fragment6, jsx as
|
|
6289
|
-
var
|
|
6386
|
+
import { Fragment as Fragment6, jsx as jsx30, jsxs as jsxs25 } from "preact/jsx-runtime";
|
|
6387
|
+
var p27 = BRAND.cssPrefix;
|
|
6290
6388
|
var log13 = logger.scope("home");
|
|
6291
6389
|
function resolveGreeting(props2) {
|
|
6292
6390
|
const name = props2.options.userContext?.name;
|
|
@@ -6329,49 +6427,49 @@ function HomeRoot(props2) {
|
|
|
6329
6427
|
const status = config.status;
|
|
6330
6428
|
const statusText = status?.text ? localizeText(strings, status.text) : strings.homeStatus;
|
|
6331
6429
|
const contentTitle = config.contentBlockTitle ? localizeText(strings, config.contentBlockTitle) : strings.homeContentTitle;
|
|
6332
|
-
return /* @__PURE__ */
|
|
6333
|
-
/* @__PURE__ */
|
|
6334
|
-
/* @__PURE__ */
|
|
6335
|
-
config.brandName ? /* @__PURE__ */
|
|
6336
|
-
/* @__PURE__ */
|
|
6337
|
-
avatars.length > 0 ? /* @__PURE__ */
|
|
6338
|
-
/* @__PURE__ */
|
|
6430
|
+
return /* @__PURE__ */ jsx30("div", { class: `${p27}-module ${p27}-home`, "data-testid": TID.homeView, children: /* @__PURE__ */ jsxs25("div", { class: `${p27}-home-scroll`, children: [
|
|
6431
|
+
/* @__PURE__ */ jsxs25("div", { class: `${p27}-home-hero`, children: [
|
|
6432
|
+
/* @__PURE__ */ jsxs25("div", { class: `${p27}-home-hero-top`, children: [
|
|
6433
|
+
config.brandName ? /* @__PURE__ */ jsx30("span", { class: `${p27}-home-brand`, "data-testid": TID.homeBrand, children: config.brandName }) : /* @__PURE__ */ jsx30("span", { class: `${p27}-home-brand-spacer`, "aria-hidden": "true" }),
|
|
6434
|
+
/* @__PURE__ */ jsxs25("div", { class: `${p27}-home-hero-actions`, children: [
|
|
6435
|
+
avatars.length > 0 ? /* @__PURE__ */ jsx30("div", { class: `${p27}-home-avatars`, children: avatars.map((a) => /* @__PURE__ */ jsx30("span", { class: `${p27}-home-avatar`, title: a.role ? `${a.name} \xB7 ${a.role}` : a.name, children: a.avatar ? /* @__PURE__ */ jsx30("img", { src: a.avatar, alt: "", loading: "lazy" }) : /* @__PURE__ */ jsx30("span", { children: initials(a.name) }) }, a.name)) }) : null,
|
|
6436
|
+
/* @__PURE__ */ jsx30(HeaderActions, { panelProps, variant: "plain" })
|
|
6339
6437
|
] })
|
|
6340
6438
|
] }),
|
|
6341
|
-
config.showGreeting !== false ? /* @__PURE__ */
|
|
6342
|
-
/* @__PURE__ */
|
|
6343
|
-
greeting.subtitle ? /* @__PURE__ */
|
|
6439
|
+
config.showGreeting !== false ? /* @__PURE__ */ jsxs25(Fragment6, { children: [
|
|
6440
|
+
/* @__PURE__ */ jsx30("h1", { class: `${p27}-home-greeting`, "data-testid": TID.homeGreeting, children: greeting.title }),
|
|
6441
|
+
greeting.subtitle ? /* @__PURE__ */ jsx30("p", { class: `${p27}-home-lead`, children: greeting.subtitle }) : null
|
|
6344
6442
|
] }) : null
|
|
6345
6443
|
] }),
|
|
6346
|
-
/* @__PURE__ */
|
|
6347
|
-
config.showSearchBar !== false ? /* @__PURE__ */
|
|
6444
|
+
/* @__PURE__ */ jsxs25("div", { class: `${p27}-home-cards`, children: [
|
|
6445
|
+
config.showSearchBar !== false ? /* @__PURE__ */ jsx30(
|
|
6348
6446
|
HomeSearchButton,
|
|
6349
6447
|
{
|
|
6350
6448
|
placeholder: strings.homeSearchPlaceholder,
|
|
6351
6449
|
onActivate: () => nav.switchToLayout("help")
|
|
6352
6450
|
}
|
|
6353
6451
|
) : null,
|
|
6354
|
-
recent ? /* @__PURE__ */
|
|
6355
|
-
/* @__PURE__ */
|
|
6356
|
-
/* @__PURE__ */
|
|
6357
|
-
/* @__PURE__ */
|
|
6358
|
-
recent.preview ? /* @__PURE__ */
|
|
6452
|
+
recent ? /* @__PURE__ */ jsx30(HomeCard, { onClick: () => nav.selectConversation(recent.conversationId), testid: TID.homeRecent, children: /* @__PURE__ */ jsxs25("div", { class: `${p27}-home-recent-row`, "data-unread": (recent.unreadCount ?? 0) > 0 ? "true" : void 0, children: [
|
|
6453
|
+
/* @__PURE__ */ jsx30("span", { class: `${p27}-home-recent-avatar`, "aria-hidden": "true", children: /* @__PURE__ */ jsx30(BubblesIcon, {}) }),
|
|
6454
|
+
/* @__PURE__ */ jsxs25("span", { class: `${p27}-home-recent-body`, children: [
|
|
6455
|
+
/* @__PURE__ */ jsx30("span", { class: `${p27}-home-recent-title`, children: recent.title }),
|
|
6456
|
+
recent.preview ? /* @__PURE__ */ jsx30("span", { class: `${p27}-home-recent-preview`, children: recent.preview }) : null
|
|
6359
6457
|
] }),
|
|
6360
|
-
(recent.unreadCount ?? 0) > 0 ? /* @__PURE__ */
|
|
6458
|
+
(recent.unreadCount ?? 0) > 0 ? /* @__PURE__ */ jsx30("span", { class: `${p27}-home-recent-dot`, "aria-label": "Unread" }) : null
|
|
6361
6459
|
] }) }) : null,
|
|
6362
|
-
status ? /* @__PURE__ */
|
|
6460
|
+
status ? /* @__PURE__ */ jsx30(
|
|
6363
6461
|
HomeCard,
|
|
6364
6462
|
{
|
|
6365
6463
|
onClick: status.url ? () => nav.push({ kind: "iframe", url: status.url, title: statusText }) : void 0,
|
|
6366
|
-
children: /* @__PURE__ */
|
|
6367
|
-
/* @__PURE__ */
|
|
6368
|
-
/* @__PURE__ */
|
|
6464
|
+
children: /* @__PURE__ */ jsxs25("div", { class: `${p27}-home-status`, "data-level": status.level ?? "operational", children: [
|
|
6465
|
+
/* @__PURE__ */ jsx30("span", { class: `${p27}-home-status-icon`, "aria-hidden": "true", children: /* @__PURE__ */ jsx30(StatusOkIcon, {}) }),
|
|
6466
|
+
/* @__PURE__ */ jsx30("span", { class: `${p27}-home-status-text`, children: statusText })
|
|
6369
6467
|
] })
|
|
6370
6468
|
}
|
|
6371
6469
|
) : null,
|
|
6372
|
-
content.length > 0 ? /* @__PURE__ */
|
|
6373
|
-
/* @__PURE__ */
|
|
6374
|
-
/* @__PURE__ */
|
|
6470
|
+
content.length > 0 ? /* @__PURE__ */ jsxs25("section", { class: `${p27}-home-content`, children: [
|
|
6471
|
+
/* @__PURE__ */ jsx30("div", { class: `${p27}-home-content-title`, children: contentTitle }),
|
|
6472
|
+
/* @__PURE__ */ jsx30("div", { class: `${p27}-home-content-list`, children: content.map((item) => /* @__PURE__ */ jsx30(
|
|
6375
6473
|
ListRow,
|
|
6376
6474
|
{
|
|
6377
6475
|
title: item.title,
|
|
@@ -6387,13 +6485,13 @@ function HomeRoot(props2) {
|
|
|
6387
6485
|
}
|
|
6388
6486
|
var homeLayout = {
|
|
6389
6487
|
Icon: HomeIcon,
|
|
6390
|
-
Root: (props2) => /* @__PURE__ */
|
|
6488
|
+
Root: (props2) => /* @__PURE__ */ jsx30(HomeRoot, { ...props2 })
|
|
6391
6489
|
};
|
|
6392
6490
|
|
|
6393
6491
|
// src/ui/modules/news.tsx
|
|
6394
6492
|
import { useEffect as useEffect12, useState as useState10 } from "preact/hooks";
|
|
6395
|
-
import { jsx as
|
|
6396
|
-
var
|
|
6493
|
+
import { jsx as jsx31, jsxs as jsxs26 } from "preact/jsx-runtime";
|
|
6494
|
+
var p28 = BRAND.cssPrefix;
|
|
6397
6495
|
var log14 = logger.scope("news");
|
|
6398
6496
|
function NewsRoot({ transport, strings, config, nav, bus, panelProps }) {
|
|
6399
6497
|
const tags = config.contentTags;
|
|
@@ -6421,37 +6519,37 @@ function NewsRoot({ transport, strings, config, nav, bus, panelProps }) {
|
|
|
6421
6519
|
};
|
|
6422
6520
|
}, [transport, tags, reloadKey, bus]);
|
|
6423
6521
|
function renderBody() {
|
|
6424
|
-
if (state === "loading") return /* @__PURE__ */
|
|
6522
|
+
if (state === "loading") return /* @__PURE__ */ jsx31(ModuleState, { message: strings.newsLoading, strings });
|
|
6425
6523
|
if (state === "error") {
|
|
6426
|
-
return /* @__PURE__ */
|
|
6524
|
+
return /* @__PURE__ */ jsx31(ModuleState, { tone: "error", message: errorMsg, onRetry: () => setReloadKey((k) => k + 1), strings });
|
|
6427
6525
|
}
|
|
6428
|
-
if (items.length === 0) return /* @__PURE__ */
|
|
6429
|
-
return /* @__PURE__ */
|
|
6526
|
+
if (items.length === 0) return /* @__PURE__ */ jsx31(ModuleState, { message: strings.newsEmpty, strings });
|
|
6527
|
+
return /* @__PURE__ */ jsx31("div", { class: `${p28}-news-list`, children: items.map((item) => /* @__PURE__ */ jsxs26(
|
|
6430
6528
|
"button",
|
|
6431
6529
|
{
|
|
6432
6530
|
type: "button",
|
|
6433
|
-
class: `${
|
|
6531
|
+
class: `${p28}-news-card`,
|
|
6434
6532
|
onClick: () => nav.push({ kind: "content", id: item.id, title: item.title }),
|
|
6435
6533
|
"data-testid": tid(TID.newsItem, item.id),
|
|
6436
6534
|
children: [
|
|
6437
|
-
item.image ? /* @__PURE__ */
|
|
6438
|
-
/* @__PURE__ */
|
|
6439
|
-
/* @__PURE__ */
|
|
6440
|
-
item.description ? /* @__PURE__ */
|
|
6535
|
+
item.image ? /* @__PURE__ */ jsx31("img", { class: `${p28}-news-hero`, src: item.image, alt: "", loading: "lazy" }) : null,
|
|
6536
|
+
/* @__PURE__ */ jsxs26("span", { class: `${p28}-news-body`, children: [
|
|
6537
|
+
/* @__PURE__ */ jsx31("span", { class: `${p28}-news-title`, children: item.title }),
|
|
6538
|
+
item.description ? /* @__PURE__ */ jsx31("span", { class: `${p28}-news-summary`, children: item.description }) : null
|
|
6441
6539
|
] })
|
|
6442
6540
|
]
|
|
6443
6541
|
},
|
|
6444
6542
|
item.id
|
|
6445
6543
|
)) });
|
|
6446
6544
|
}
|
|
6447
|
-
return /* @__PURE__ */
|
|
6448
|
-
/* @__PURE__ */
|
|
6449
|
-
/* @__PURE__ */
|
|
6545
|
+
return /* @__PURE__ */ jsxs26("div", { class: `${p28}-module`, children: [
|
|
6546
|
+
/* @__PURE__ */ jsx31(TitleBar, { title: strings.newsTitle, actions: /* @__PURE__ */ jsx31(HeaderActions, { panelProps, variant: "plain" }) }),
|
|
6547
|
+
/* @__PURE__ */ jsx31("div", { class: `${p28}-module-scroll`, children: renderBody() })
|
|
6450
6548
|
] });
|
|
6451
6549
|
}
|
|
6452
6550
|
var newsLayout = {
|
|
6453
6551
|
Icon: NewsIcon,
|
|
6454
|
-
Root: (props2) => /* @__PURE__ */
|
|
6552
|
+
Root: (props2) => /* @__PURE__ */ jsx31(NewsRoot, { ...props2 })
|
|
6455
6553
|
};
|
|
6456
6554
|
|
|
6457
6555
|
// src/ui/modules/registry.ts
|
|
@@ -6463,28 +6561,28 @@ var LAYOUTS = {
|
|
|
6463
6561
|
};
|
|
6464
6562
|
|
|
6465
6563
|
// src/ui/home-tab-bar.tsx
|
|
6466
|
-
import { jsx as
|
|
6467
|
-
var
|
|
6564
|
+
import { jsx as jsx32, jsxs as jsxs27 } from "preact/jsx-runtime";
|
|
6565
|
+
var p29 = BRAND.cssPrefix;
|
|
6468
6566
|
function HomeTabBar({ modules, activeTab, strings, unreadCount, onSelect }) {
|
|
6469
|
-
return /* @__PURE__ */
|
|
6567
|
+
return /* @__PURE__ */ jsx32("nav", { class: `${p29}-tabbar`, role: "tablist", "aria-label": strings.panelTitle, children: modules.map((m) => {
|
|
6470
6568
|
const Icon = LAYOUTS[m.layout].Icon;
|
|
6471
6569
|
const selected = m.id === activeTab;
|
|
6472
6570
|
const badge = m.layout === "chat" && unreadCount > 0 ? unreadCount > 9 ? "9+" : String(unreadCount) : null;
|
|
6473
|
-
return /* @__PURE__ */
|
|
6571
|
+
return /* @__PURE__ */ jsxs27(
|
|
6474
6572
|
"button",
|
|
6475
6573
|
{
|
|
6476
6574
|
type: "button",
|
|
6477
6575
|
role: "tab",
|
|
6478
6576
|
"aria-selected": selected,
|
|
6479
|
-
class: `${
|
|
6577
|
+
class: `${p29}-tab`,
|
|
6480
6578
|
onClick: () => onSelect(m.id),
|
|
6481
6579
|
"data-testid": tid(TID.tab, m.id),
|
|
6482
6580
|
children: [
|
|
6483
|
-
/* @__PURE__ */
|
|
6484
|
-
/* @__PURE__ */
|
|
6485
|
-
badge ? /* @__PURE__ */
|
|
6581
|
+
/* @__PURE__ */ jsxs27("span", { class: `${p29}-tab-icon`, "aria-hidden": "true", children: [
|
|
6582
|
+
/* @__PURE__ */ jsx32(Icon, {}),
|
|
6583
|
+
badge ? /* @__PURE__ */ jsx32("span", { class: `${p29}-tab-badge`, "data-testid": TID.tabBadge, children: badge }) : null
|
|
6486
6584
|
] }),
|
|
6487
|
-
/* @__PURE__ */
|
|
6585
|
+
/* @__PURE__ */ jsx32("span", { class: `${p29}-tab-label`, children: localizeText(strings, m.label) })
|
|
6488
6586
|
]
|
|
6489
6587
|
},
|
|
6490
6588
|
m.id
|
|
@@ -6493,12 +6591,12 @@ function HomeTabBar({ modules, activeTab, strings, unreadCount, onSelect }) {
|
|
|
6493
6591
|
}
|
|
6494
6592
|
|
|
6495
6593
|
// src/ui/iframe-view.tsx
|
|
6496
|
-
import { jsx as
|
|
6497
|
-
var
|
|
6594
|
+
import { jsx as jsx33, jsxs as jsxs28 } from "preact/jsx-runtime";
|
|
6595
|
+
var p30 = BRAND.cssPrefix;
|
|
6498
6596
|
var SANDBOX = "allow-scripts allow-forms allow-popups allow-popups-to-escape-sandbox allow-downloads";
|
|
6499
6597
|
function IframeView({ url, title, strings, onBack, actions }) {
|
|
6500
|
-
return /* @__PURE__ */
|
|
6501
|
-
/* @__PURE__ */
|
|
6598
|
+
return /* @__PURE__ */ jsxs28("div", { class: `${p30}-module`, children: [
|
|
6599
|
+
/* @__PURE__ */ jsx33(
|
|
6502
6600
|
BackHeader,
|
|
6503
6601
|
{
|
|
6504
6602
|
title: title || strings.moduleBack,
|
|
@@ -6507,10 +6605,10 @@ function IframeView({ url, title, strings, onBack, actions }) {
|
|
|
6507
6605
|
actions
|
|
6508
6606
|
}
|
|
6509
6607
|
),
|
|
6510
|
-
/* @__PURE__ */
|
|
6608
|
+
/* @__PURE__ */ jsx33(
|
|
6511
6609
|
"iframe",
|
|
6512
6610
|
{
|
|
6513
|
-
class: `${
|
|
6611
|
+
class: `${p30}-content-frame`,
|
|
6514
6612
|
src: url,
|
|
6515
6613
|
title: title || "content",
|
|
6516
6614
|
sandbox: SANDBOX,
|
|
@@ -6524,8 +6622,8 @@ function IframeView({ url, title, strings, onBack, actions }) {
|
|
|
6524
6622
|
|
|
6525
6623
|
// src/ui/content-view.tsx
|
|
6526
6624
|
import { useCallback as useCallback3, useEffect as useEffect13, useState as useState11 } from "preact/hooks";
|
|
6527
|
-
import { jsx as
|
|
6528
|
-
var
|
|
6625
|
+
import { jsx as jsx34, jsxs as jsxs29 } from "preact/jsx-runtime";
|
|
6626
|
+
var p31 = BRAND.cssPrefix;
|
|
6529
6627
|
var log15 = logger.scope("content");
|
|
6530
6628
|
var READ_DWELL_MS = 5e3;
|
|
6531
6629
|
function ContentView({ id, title, transport, strings, bus, onBack, actions }) {
|
|
@@ -6569,16 +6667,16 @@ function ContentView({ id, title, transport, strings, bus, onBack, actions }) {
|
|
|
6569
6667
|
[bus, id]
|
|
6570
6668
|
);
|
|
6571
6669
|
function renderBody() {
|
|
6572
|
-
if (failed) return /* @__PURE__ */
|
|
6573
|
-
if (item === null) return /* @__PURE__ */
|
|
6574
|
-
return /* @__PURE__ */
|
|
6575
|
-
item.image ? /* @__PURE__ */
|
|
6576
|
-
item.description ? /* @__PURE__ */
|
|
6577
|
-
/* @__PURE__ */
|
|
6670
|
+
if (failed) return /* @__PURE__ */ jsx34(ModuleState, { tone: "error", message: strings.errorGeneric, onRetry: retry, strings });
|
|
6671
|
+
if (item === null) return /* @__PURE__ */ jsx34(ModuleState, { message: strings.contentLoading, strings });
|
|
6672
|
+
return /* @__PURE__ */ jsxs29("article", { class: `${p31}-content`, "data-testid": TID.contentView, onClick: onArticleClick, children: [
|
|
6673
|
+
item.image ? /* @__PURE__ */ jsx34("img", { class: `${p31}-content-hero`, src: item.image, alt: "", loading: "lazy" }) : null,
|
|
6674
|
+
item.description ? /* @__PURE__ */ jsx34("p", { class: `${p31}-content-subtitle`, children: item.description }) : null,
|
|
6675
|
+
/* @__PURE__ */ jsx34(StaticMarkdown, { text: item.content ?? "" })
|
|
6578
6676
|
] });
|
|
6579
6677
|
}
|
|
6580
|
-
return /* @__PURE__ */
|
|
6581
|
-
/* @__PURE__ */
|
|
6678
|
+
return /* @__PURE__ */ jsxs29("div", { class: `${p31}-module`, children: [
|
|
6679
|
+
/* @__PURE__ */ jsx34(
|
|
6582
6680
|
BackHeader,
|
|
6583
6681
|
{
|
|
6584
6682
|
title: item?.title || title || strings.moduleBack,
|
|
@@ -6588,13 +6686,13 @@ function ContentView({ id, title, transport, strings, bus, onBack, actions }) {
|
|
|
6588
6686
|
testid: TID.backHeader
|
|
6589
6687
|
}
|
|
6590
6688
|
),
|
|
6591
|
-
/* @__PURE__ */
|
|
6689
|
+
/* @__PURE__ */ jsx34("div", { class: `${p31}-module-scroll`, "data-testid": TID.contentScroll, children: renderBody() })
|
|
6592
6690
|
] });
|
|
6593
6691
|
}
|
|
6594
6692
|
|
|
6595
6693
|
// src/ui/messenger-home.tsx
|
|
6596
|
-
import { jsx as
|
|
6597
|
-
var
|
|
6694
|
+
import { jsx as jsx35, jsxs as jsxs30 } from "preact/jsx-runtime";
|
|
6695
|
+
var p32 = BRAND.cssPrefix;
|
|
6598
6696
|
function MessengerHome({
|
|
6599
6697
|
panelProps,
|
|
6600
6698
|
enabledModules,
|
|
@@ -6628,7 +6726,7 @@ function MessengerHome({
|
|
|
6628
6726
|
}, []);
|
|
6629
6727
|
const { visible: dragOver } = useFileDrop({ containerRef, onDrop: onDropItems });
|
|
6630
6728
|
useDragMove(containerRef.current, options.mode === "modal");
|
|
6631
|
-
const navState =
|
|
6729
|
+
const navState = useComputed7(() => nav.sig.value).value;
|
|
6632
6730
|
const top = topScreen(navState);
|
|
6633
6731
|
const activeModule = options.modules.byId[navState.activeTab];
|
|
6634
6732
|
const isReader = top?.kind === "iframe" || top?.kind === "content";
|
|
@@ -6665,12 +6763,12 @@ function MessengerHome({
|
|
|
6665
6763
|
bus,
|
|
6666
6764
|
panelProps
|
|
6667
6765
|
});
|
|
6668
|
-
const plainActions = /* @__PURE__ */
|
|
6766
|
+
const plainActions = /* @__PURE__ */ jsx35(HeaderActions, { panelProps, variant: "plain" });
|
|
6669
6767
|
if (activeModule) visitedRef.current.add(activeModule.id);
|
|
6670
6768
|
const visitedTabs = enabledModules.filter((m) => visitedRef.current.has(m.id));
|
|
6671
6769
|
const tabRoot = (module) => {
|
|
6672
6770
|
if (module.layout === "chat") {
|
|
6673
|
-
return /* @__PURE__ */
|
|
6771
|
+
return /* @__PURE__ */ jsx35(
|
|
6674
6772
|
PanelContent,
|
|
6675
6773
|
{
|
|
6676
6774
|
...panelProps,
|
|
@@ -6681,14 +6779,14 @@ function MessengerHome({
|
|
|
6681
6779
|
);
|
|
6682
6780
|
}
|
|
6683
6781
|
const Root = LAYOUTS[module.layout].Root;
|
|
6684
|
-
return Root ? /* @__PURE__ */
|
|
6782
|
+
return Root ? /* @__PURE__ */ jsx35(Root, { ...screenProps(module) }) : null;
|
|
6685
6783
|
};
|
|
6686
6784
|
const renderReader = () => {
|
|
6687
6785
|
if (top?.kind === "iframe") {
|
|
6688
|
-
return /* @__PURE__ */
|
|
6786
|
+
return /* @__PURE__ */ jsx35(IframeView, { url: top.url, title: top.title, strings, onBack: nav.pop, actions: plainActions });
|
|
6689
6787
|
}
|
|
6690
6788
|
if (top?.kind === "content") {
|
|
6691
|
-
return /* @__PURE__ */
|
|
6789
|
+
return /* @__PURE__ */ jsx35(
|
|
6692
6790
|
ContentView,
|
|
6693
6791
|
{
|
|
6694
6792
|
id: top.id,
|
|
@@ -6703,22 +6801,22 @@ function MessengerHome({
|
|
|
6703
6801
|
}
|
|
6704
6802
|
return null;
|
|
6705
6803
|
};
|
|
6706
|
-
return /* @__PURE__ */
|
|
6804
|
+
return /* @__PURE__ */ jsxs30(
|
|
6707
6805
|
"div",
|
|
6708
6806
|
{
|
|
6709
6807
|
ref: containerRef,
|
|
6710
|
-
class: `${
|
|
6808
|
+
class: `${p32}-panel ${p32}-messenger`,
|
|
6711
6809
|
role: "dialog",
|
|
6712
6810
|
"aria-modal": "false",
|
|
6713
6811
|
"aria-label": strings.panelTitle,
|
|
6714
6812
|
style: { position: "relative" },
|
|
6715
6813
|
"data-testid": TID.messengerHome,
|
|
6716
6814
|
children: [
|
|
6717
|
-
/* @__PURE__ */
|
|
6718
|
-
visitedTabs.map((m) => /* @__PURE__ */
|
|
6815
|
+
/* @__PURE__ */ jsxs30("div", { class: `${p32}-messenger-body`, children: [
|
|
6816
|
+
visitedTabs.map((m) => /* @__PURE__ */ jsx35("div", { class: `${p32}-messenger-pane`, hidden: isReader || m.id !== activeModule?.id, children: tabRoot(m) }, m.id)),
|
|
6719
6817
|
renderReader()
|
|
6720
6818
|
] }),
|
|
6721
|
-
showTabBar ? /* @__PURE__ */
|
|
6819
|
+
showTabBar ? /* @__PURE__ */ jsx35(
|
|
6722
6820
|
HomeTabBar,
|
|
6723
6821
|
{
|
|
6724
6822
|
modules: enabledModules,
|
|
@@ -6728,8 +6826,8 @@ function MessengerHome({
|
|
|
6728
6826
|
onSelect: nav.switchTab
|
|
6729
6827
|
}
|
|
6730
6828
|
) : null,
|
|
6731
|
-
/* @__PURE__ */
|
|
6732
|
-
options.size.resize?.enabled && !(activeModule?.layout === "chat" && !top) ? /* @__PURE__ */
|
|
6829
|
+
/* @__PURE__ */ jsx35(PoweredByBar, { poweredBy: options.poweredBy }),
|
|
6830
|
+
options.size.resize?.enabled && !(activeModule?.layout === "chat" && !top) ? /* @__PURE__ */ jsx35(
|
|
6733
6831
|
ResizeGrip,
|
|
6734
6832
|
{
|
|
6735
6833
|
panelEl: containerRef.current,
|
|
@@ -6746,29 +6844,29 @@ function MessengerHome({
|
|
|
6746
6844
|
}
|
|
6747
6845
|
|
|
6748
6846
|
// src/ui/modules-empty.tsx
|
|
6749
|
-
import { jsx as
|
|
6750
|
-
var
|
|
6847
|
+
import { jsx as jsx36, jsxs as jsxs31 } from "preact/jsx-runtime";
|
|
6848
|
+
var p33 = BRAND.cssPrefix;
|
|
6751
6849
|
function ModulesEmpty({ strings, onClose }) {
|
|
6752
|
-
return /* @__PURE__ */
|
|
6850
|
+
return /* @__PURE__ */ jsxs31(
|
|
6753
6851
|
"div",
|
|
6754
6852
|
{
|
|
6755
|
-
class: `${
|
|
6853
|
+
class: `${p33}-panel ${p33}-modules-empty`,
|
|
6756
6854
|
role: "dialog",
|
|
6757
6855
|
"aria-label": strings.panelTitle,
|
|
6758
6856
|
"data-testid": TID.modulesEmpty,
|
|
6759
6857
|
children: [
|
|
6760
|
-
onClose ? /* @__PURE__ */
|
|
6858
|
+
onClose ? /* @__PURE__ */ jsx36(
|
|
6761
6859
|
"button",
|
|
6762
6860
|
{
|
|
6763
6861
|
type: "button",
|
|
6764
|
-
class: `${
|
|
6862
|
+
class: `${p33}-icon-btn ${p33}-modules-empty-close`,
|
|
6765
6863
|
onClick: onClose,
|
|
6766
6864
|
"aria-label": strings.close,
|
|
6767
6865
|
title: strings.close,
|
|
6768
|
-
children: /* @__PURE__ */
|
|
6866
|
+
children: /* @__PURE__ */ jsx36(CloseIcon, {})
|
|
6769
6867
|
}
|
|
6770
6868
|
) : null,
|
|
6771
|
-
/* @__PURE__ */
|
|
6869
|
+
/* @__PURE__ */ jsx36("p", { class: `${p33}-modules-empty-text`, children: strings.modulesEmpty })
|
|
6772
6870
|
]
|
|
6773
6871
|
}
|
|
6774
6872
|
);
|
|
@@ -6791,9 +6889,9 @@ function useLauncherCallout({ callout, persistence }) {
|
|
|
6791
6889
|
}
|
|
6792
6890
|
|
|
6793
6891
|
// src/ui/app.tsx
|
|
6794
|
-
import { jsx as
|
|
6892
|
+
import { jsx as jsx37, jsxs as jsxs32 } from "preact/jsx-runtime";
|
|
6795
6893
|
var log16 = logger.scope("app");
|
|
6796
|
-
var
|
|
6894
|
+
var p34 = BRAND.cssPrefix;
|
|
6797
6895
|
function makeLocalizedWelcome(w, strings) {
|
|
6798
6896
|
return makeInstantWelcomeMessage({ ...w, text: localizeText(strings, w.text) });
|
|
6799
6897
|
}
|
|
@@ -7335,7 +7433,7 @@ function App({ options, hostElement, bus }) {
|
|
|
7335
7433
|
bus.emit("toolResult", { toolCallId });
|
|
7336
7434
|
resolveTool(toolCallId, TRIGGER.toolResult, (part) => {
|
|
7337
7435
|
part.outputSig.value = output;
|
|
7338
|
-
part.stateSig.value = "output";
|
|
7436
|
+
part.stateSig.value = "output-available";
|
|
7339
7437
|
});
|
|
7340
7438
|
},
|
|
7341
7439
|
[bus, resolveTool]
|
|
@@ -7347,7 +7445,7 @@ function App({ options, hostElement, bus }) {
|
|
|
7347
7445
|
resolveTool(toolCallId, TRIGGER.toolApproval, (part) => {
|
|
7348
7446
|
const id = part.approvalSig.value?.id ?? toolCallId;
|
|
7349
7447
|
part.approvalSig.value = { id, approved, reason };
|
|
7350
|
-
part.stateSig.value = "
|
|
7448
|
+
part.stateSig.value = "approval-responded";
|
|
7351
7449
|
});
|
|
7352
7450
|
},
|
|
7353
7451
|
[bus, resolveTool]
|
|
@@ -7388,12 +7486,12 @@ function App({ options, hostElement, bus }) {
|
|
|
7388
7486
|
void transport.submitForm({ formId: form.id, conversationId: activeConversationId, trigger, values, skipped });
|
|
7389
7487
|
}
|
|
7390
7488
|
});
|
|
7391
|
-
const activeForm =
|
|
7489
|
+
const activeForm = useComputed8(() => forms.activeForm.value);
|
|
7392
7490
|
useEffect16(() => {
|
|
7393
7491
|
forms.refresh();
|
|
7394
7492
|
}, [effectiveForms, forms]);
|
|
7395
7493
|
const pageArea = options.pageContext?.area ? String(options.pageContext.area) : void 0;
|
|
7396
|
-
const msgCount =
|
|
7494
|
+
const msgCount = useComputed8(() => messagesSig.value.length);
|
|
7397
7495
|
useEffect16(() => {
|
|
7398
7496
|
if (conversationReady && formsReady) forms.fire("pre-chat");
|
|
7399
7497
|
}, [conversationReady, formsReady, forms]);
|
|
@@ -7708,12 +7806,12 @@ function App({ options, hostElement, bus }) {
|
|
|
7708
7806
|
const renderSurface = (size) => {
|
|
7709
7807
|
const closeable = isActionVisible("close", effectiveOptions.mode, size);
|
|
7710
7808
|
if (enabledModules.length === 0) {
|
|
7711
|
-
return /* @__PURE__ */
|
|
7809
|
+
return /* @__PURE__ */ jsx37(ModulesEmpty, { strings: effectiveOptions.strings, onClose: closeable ? handleClose : void 0 });
|
|
7712
7810
|
}
|
|
7713
7811
|
if (enabledModules.length === 1 && enabledModules[0]?.layout === "chat") {
|
|
7714
|
-
return /* @__PURE__ */
|
|
7812
|
+
return /* @__PURE__ */ jsx37(Panel, { ...panelProps, panelSize: size });
|
|
7715
7813
|
}
|
|
7716
|
-
return /* @__PURE__ */
|
|
7814
|
+
return /* @__PURE__ */ jsx37(
|
|
7717
7815
|
MessengerHome,
|
|
7718
7816
|
{
|
|
7719
7817
|
panelProps: { ...panelProps, panelSize: size, onClose: closeable ? handleClose : void 0 },
|
|
@@ -7732,7 +7830,7 @@ function App({ options, hostElement, bus }) {
|
|
|
7732
7830
|
void handleSelectHistoryConversation(chat.conversationId);
|
|
7733
7831
|
};
|
|
7734
7832
|
const conversationsEnabled = enabledModules.some((m) => m.layout === "chat");
|
|
7735
|
-
return /* @__PURE__ */
|
|
7833
|
+
return /* @__PURE__ */ jsx37("div", { class: `${p34}-anchor`, children: /* @__PURE__ */ jsx37(
|
|
7736
7834
|
PageShell,
|
|
7737
7835
|
{
|
|
7738
7836
|
site: parsedSite,
|
|
@@ -7753,15 +7851,15 @@ function App({ options, hostElement, bus }) {
|
|
|
7753
7851
|
}
|
|
7754
7852
|
if (isInlineLike) {
|
|
7755
7853
|
const inlineSize = options.mode === "standalone" ? "fullscreen" : panelSize;
|
|
7756
|
-
return /* @__PURE__ */
|
|
7854
|
+
return /* @__PURE__ */ jsx37("div", { class: `${p34}-anchor`, children: renderSurface(inlineSize) });
|
|
7757
7855
|
}
|
|
7758
7856
|
const drawerEdgeTab = options.mode === "drawer";
|
|
7759
7857
|
const triggerOwnedByPage = options.mode === "modal";
|
|
7760
7858
|
const launcherVisible = !triggerOwnedByPage && !options.launcher.hidden && (!isOpen || launcherLeaving);
|
|
7761
7859
|
const calloutToRender = launcherVisible && !launcherLeaving && !calloutDismissed && !drawerEdgeTab ? effectiveOptions.launcher.callout : null;
|
|
7762
|
-
return /* @__PURE__ */
|
|
7763
|
-
isOpen || activated ? /* @__PURE__ */
|
|
7764
|
-
launcherVisible ? /* @__PURE__ */
|
|
7860
|
+
return /* @__PURE__ */ jsxs32("div", { class: `${p34}-anchor`, "data-launcher-size": effectiveOptions.launcher.size, children: [
|
|
7861
|
+
isOpen || activated ? /* @__PURE__ */ jsx37("div", { class: `${p34}-surface`, hidden: !isOpen, children: renderSurface(panelSize) }) : null,
|
|
7862
|
+
launcherVisible ? /* @__PURE__ */ jsx37(
|
|
7765
7863
|
Launcher,
|
|
7766
7864
|
{
|
|
7767
7865
|
onToggle: handleOpen,
|
|
@@ -7771,7 +7869,7 @@ function App({ options, hostElement, bus }) {
|
|
|
7771
7869
|
edgeTab: drawerEdgeTab
|
|
7772
7870
|
}
|
|
7773
7871
|
) : null,
|
|
7774
|
-
calloutToRender ? /* @__PURE__ */
|
|
7872
|
+
calloutToRender ? /* @__PURE__ */ jsx37(
|
|
7775
7873
|
LauncherCallout,
|
|
7776
7874
|
{
|
|
7777
7875
|
callout: calloutToRender,
|
|
@@ -7836,34 +7934,34 @@ var TRACKED = {
|
|
|
7836
7934
|
expand: (on) => ({ on }),
|
|
7837
7935
|
fullscreen: (on) => ({ on }),
|
|
7838
7936
|
// Conversation funnel. `send` is the key conversion; text never rides.
|
|
7839
|
-
send: (
|
|
7840
|
-
message: (
|
|
7937
|
+
send: (p35) => ({ attachments: p35.attachmentCount }),
|
|
7938
|
+
message: (p35) => ({ role: p35.role }),
|
|
7841
7939
|
stop: () => void 0,
|
|
7842
7940
|
clear: () => void 0,
|
|
7843
7941
|
suggestion: () => void 0,
|
|
7844
|
-
toggleHistory: (
|
|
7942
|
+
toggleHistory: (p35) => ({ view: p35.view }),
|
|
7845
7943
|
handshake: () => void 0,
|
|
7846
7944
|
// Forms + human-in-the-loop — ids and outcomes, never values.
|
|
7847
|
-
formSubmit: (
|
|
7945
|
+
formSubmit: (p35) => ({ formId: p35.formId, skipped: p35.skipped }),
|
|
7848
7946
|
toolResult: () => void 0,
|
|
7849
|
-
toolDecision: (
|
|
7947
|
+
toolDecision: (p35) => ({ approved: p35.approved }),
|
|
7850
7948
|
// Content — ids, tags + counts only; titles/bodies never ride.
|
|
7851
|
-
contentView: (
|
|
7852
|
-
contentOpen: (
|
|
7853
|
-
contentSearch: (
|
|
7854
|
-
contentRead: (
|
|
7855
|
-
contentLinkClick: (
|
|
7949
|
+
contentView: (p35) => ({ section: p35.section, tags: p35.tags, count: p35.count }),
|
|
7950
|
+
contentOpen: (p35) => ({ contentId: p35.contentId, tags: p35.tags }),
|
|
7951
|
+
contentSearch: (p35) => ({ qlen: p35.queryLength, hits: p35.hitCount }),
|
|
7952
|
+
contentRead: (p35) => ({ contentId: p35.contentId }),
|
|
7953
|
+
contentLinkClick: (p35) => ({ contentId: p35.contentId }),
|
|
7856
7954
|
// Composer / attachments / voice.
|
|
7857
|
-
attach: (
|
|
7955
|
+
attach: (p35) => ({ count: p35.count, bytes: p35.totalBytes }),
|
|
7858
7956
|
voiceStart: () => void 0,
|
|
7859
|
-
voiceStop: (
|
|
7957
|
+
voiceStop: (p35) => ({ ms: p35.durationMs }),
|
|
7860
7958
|
voiceCancel: () => void 0,
|
|
7861
7959
|
// Preferences — how visitors tune the surface.
|
|
7862
7960
|
localeChange: (locale) => ({ locale }),
|
|
7863
7961
|
themeChange: (theme) => ({ theme }),
|
|
7864
7962
|
textSizeChange: (size) => ({ size }),
|
|
7865
|
-
soundToggle: (
|
|
7866
|
-
sidebarToggle: (
|
|
7963
|
+
soundToggle: (p35) => ({ muted: p35.muted }),
|
|
7964
|
+
sidebarToggle: (p35) => ({ collapsed: p35.collapsed }),
|
|
7867
7965
|
calloutDismiss: () => void 0,
|
|
7868
7966
|
// Health signal only — the error object itself never leaves the page.
|
|
7869
7967
|
error: () => void 0
|