@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/index.mjs
CHANGED
|
@@ -30,7 +30,7 @@ var BRAND = {
|
|
|
30
30
|
};
|
|
31
31
|
|
|
32
32
|
// src/core/version.ts
|
|
33
|
-
var ELEMENTS_VERSION = true ? "0.
|
|
33
|
+
var ELEMENTS_VERSION = true ? "0.45.0" : "0.0.0-dev";
|
|
34
34
|
var ELEMENTS_VERSION_PARAM = "_ev";
|
|
35
35
|
|
|
36
36
|
// src/i18n/strings.ts
|
|
@@ -91,6 +91,9 @@ var STRINGS_EN = {
|
|
|
91
91
|
thinking: "Thinking\u2026",
|
|
92
92
|
thoughts: "Thoughts",
|
|
93
93
|
usedTool: "Used tool",
|
|
94
|
+
toolDetails: "Details",
|
|
95
|
+
toolResult: "Result",
|
|
96
|
+
sources: "Sources",
|
|
94
97
|
// ── Messenger modules ──────────────────────────────────────────
|
|
95
98
|
tabHome: "Home",
|
|
96
99
|
tabConversations: "Conversations",
|
|
@@ -204,6 +207,9 @@ var STRINGS_FR = {
|
|
|
204
207
|
thinking: "R\xE9flexion\u2026",
|
|
205
208
|
thoughts: "R\xE9flexions",
|
|
206
209
|
usedTool: "Outil utilis\xE9",
|
|
210
|
+
toolDetails: "D\xE9tails",
|
|
211
|
+
toolResult: "R\xE9sultat",
|
|
212
|
+
sources: "Sources",
|
|
207
213
|
// ── Messenger modules ──────────────────────────────────────────
|
|
208
214
|
tabHome: "Accueil",
|
|
209
215
|
tabConversations: "Conversations",
|
|
@@ -615,6 +621,7 @@ function resolveOptions(rawOpts) {
|
|
|
615
621
|
responseMode: behavior.responseMode ?? "streaming",
|
|
616
622
|
showReasoning: behavior.showReasoning ?? false,
|
|
617
623
|
showToolCalls: behavior.showToolCalls ?? false,
|
|
624
|
+
showSources: behavior.showSources ?? false,
|
|
618
625
|
features: {
|
|
619
626
|
files: opts.features?.files ?? DEFAULT_FEATURES.files,
|
|
620
627
|
voice: opts.features?.voice ?? DEFAULT_FEATURES.voice,
|
|
@@ -941,7 +948,8 @@ var BEHAVIOR_ATTRS = [
|
|
|
941
948
|
["response-mode", "responseMode", (v) => v],
|
|
942
949
|
["start-minimized", "startMinimized", boolAttr],
|
|
943
950
|
["show-reasoning", "showReasoning", boolAttr],
|
|
944
|
-
["show-tool-calls", "showToolCalls", boolAttr]
|
|
951
|
+
["show-tool-calls", "showToolCalls", boolAttr],
|
|
952
|
+
["show-sources", "showSources", boolAttr]
|
|
945
953
|
];
|
|
946
954
|
var I18N_ATTRS = [["locale", "locale"]];
|
|
947
955
|
var ACTION_NAMES = new Set(ACTION_NAME_LITERALS);
|
|
@@ -1196,7 +1204,7 @@ var tokens_default = ':host{--__P__-accent-user: __BRAND_ACCENT__;--__P__-accent
|
|
|
1196
1204
|
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';
|
|
1197
1205
|
|
|
1198
1206
|
// src/styles/panel.css
|
|
1199
|
-
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';
|
|
1207
|
+
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';
|
|
1200
1208
|
|
|
1201
1209
|
// src/styles/standalone.css
|
|
1202
1210
|
var standalone_default = ".__P__-standalone-page{margin:0;height:100vh;background:var(--__P__-bg, #fff);display:grid;place-items:stretch}\n";
|
|
@@ -1284,22 +1292,22 @@ function attachAdoptedSheet(shadow, doc) {
|
|
|
1284
1292
|
}
|
|
1285
1293
|
}
|
|
1286
1294
|
function applyThemeOverrides(host, overrides) {
|
|
1287
|
-
const
|
|
1288
|
-
if (overrides.accent) host.style.setProperty(`--${
|
|
1289
|
-
if (overrides.accentText) host.style.setProperty(`--${
|
|
1290
|
-
if (overrides.radius) host.style.setProperty(`--${
|
|
1291
|
-
if (overrides.fontFamily) host.style.setProperty(`--${
|
|
1295
|
+
const p35 = BRAND.cssPrefix;
|
|
1296
|
+
if (overrides.accent) host.style.setProperty(`--${p35}-accent-user`, overrides.accent);
|
|
1297
|
+
if (overrides.accentText) host.style.setProperty(`--${p35}-accent-text-user`, overrides.accentText);
|
|
1298
|
+
if (overrides.radius) host.style.setProperty(`--${p35}-radius`, overrides.radius);
|
|
1299
|
+
if (overrides.fontFamily) host.style.setProperty(`--${p35}-font`, overrides.fontFamily);
|
|
1292
1300
|
}
|
|
1293
1301
|
function applyThemeMode(host, mode) {
|
|
1294
1302
|
host.dataset.theme = mode;
|
|
1295
1303
|
}
|
|
1296
1304
|
function applySize(host, size) {
|
|
1297
|
-
const
|
|
1298
|
-
if (size.width !== void 0) host.style.setProperty(`--${
|
|
1299
|
-
if (size.height !== void 0) host.style.setProperty(`--${
|
|
1300
|
-
if (size.expanded?.width !== void 0) host.style.setProperty(`--${
|
|
1301
|
-
if (size.expanded?.height !== void 0) host.style.setProperty(`--${
|
|
1302
|
-
if (size.inset !== void 0) host.style.setProperty(`--${
|
|
1305
|
+
const p35 = BRAND.cssPrefix;
|
|
1306
|
+
if (size.width !== void 0) host.style.setProperty(`--${p35}-panel-w`, size.width);
|
|
1307
|
+
if (size.height !== void 0) host.style.setProperty(`--${p35}-panel-h`, size.height);
|
|
1308
|
+
if (size.expanded?.width !== void 0) host.style.setProperty(`--${p35}-expanded-w`, size.expanded.width);
|
|
1309
|
+
if (size.expanded?.height !== void 0) host.style.setProperty(`--${p35}-expanded-h`, size.expanded.height);
|
|
1310
|
+
if (size.inset !== void 0) host.style.setProperty(`--${p35}-panel-inset`, size.inset);
|
|
1303
1311
|
}
|
|
1304
1312
|
function applyPosition(host, pos) {
|
|
1305
1313
|
host.dataset.position = pos;
|
|
@@ -1415,7 +1423,7 @@ import { h, render as renderPreact } from "preact";
|
|
|
1415
1423
|
|
|
1416
1424
|
// src/ui/app.tsx
|
|
1417
1425
|
import { useCallback as useCallback6, useEffect as useEffect16, useMemo as useMemo3, useRef as useRef9, useState as useState13 } from "preact/hooks";
|
|
1418
|
-
import { batch, useComputed as
|
|
1426
|
+
import { batch, useComputed as useComputed8, useSignal as useSignal2 } from "@preact/signals";
|
|
1419
1427
|
|
|
1420
1428
|
// src/core/handshake-shape.ts
|
|
1421
1429
|
function isPlainObject2(raw) {
|
|
@@ -1563,11 +1571,11 @@ function toBase64Url(json) {
|
|
|
1563
1571
|
var nonEmpty = (ctx) => ctx && Object.keys(ctx).length > 0 ? ctx : void 0;
|
|
1564
1572
|
function encodeContext(user, page) {
|
|
1565
1573
|
const u = nonEmpty(user);
|
|
1566
|
-
const
|
|
1567
|
-
if (!u && !
|
|
1574
|
+
const p35 = nonEmpty(page);
|
|
1575
|
+
if (!u && !p35) return void 0;
|
|
1568
1576
|
const envelope = {};
|
|
1569
1577
|
if (u) envelope.user = u;
|
|
1570
|
-
if (
|
|
1578
|
+
if (p35) envelope.page = p35;
|
|
1571
1579
|
return toBase64Url(JSON.stringify(envelope));
|
|
1572
1580
|
}
|
|
1573
1581
|
|
|
@@ -1577,6 +1585,13 @@ function parseWireDate(value) {
|
|
|
1577
1585
|
const ms = Date.parse(value);
|
|
1578
1586
|
return Number.isFinite(ms) ? ms : void 0;
|
|
1579
1587
|
}
|
|
1588
|
+
function toolPartType(toolName) {
|
|
1589
|
+
const bare = toolName.startsWith("tool:") ? toolName.slice(5) : toolName;
|
|
1590
|
+
return `tool-${bare}`;
|
|
1591
|
+
}
|
|
1592
|
+
function toolNameFromType(type) {
|
|
1593
|
+
return type.startsWith("tool-") ? type.slice(5) : type;
|
|
1594
|
+
}
|
|
1580
1595
|
var DEFAULT_PATHS = {
|
|
1581
1596
|
/** Conversation bootstrap. `POST` → deployment config + per-visitor state. */
|
|
1582
1597
|
handshake: "/pai/handshake",
|
|
@@ -1658,8 +1673,8 @@ function buildSendMessageRequest(params) {
|
|
|
1658
1673
|
if (Object.keys(data).length > 0) body.data = data;
|
|
1659
1674
|
return body;
|
|
1660
1675
|
}
|
|
1661
|
-
function isResolvedToolPart(
|
|
1662
|
-
return
|
|
1676
|
+
function isResolvedToolPart(p35) {
|
|
1677
|
+
return p35.state === "output-available" || p35.state === "output-error" || p35.state === "output-denied" || p35.approval?.approved !== void 0;
|
|
1663
1678
|
}
|
|
1664
1679
|
function normalizeToolRef(ref) {
|
|
1665
1680
|
if (typeof ref === "string") return ref ? { code: ref } : null;
|
|
@@ -1667,24 +1682,23 @@ function normalizeToolRef(ref) {
|
|
|
1667
1682
|
}
|
|
1668
1683
|
function messageToWireParts(m) {
|
|
1669
1684
|
const out = [];
|
|
1670
|
-
for (const
|
|
1671
|
-
if (
|
|
1672
|
-
out.push({ text:
|
|
1685
|
+
for (const p35 of m.parts) {
|
|
1686
|
+
if (p35.kind === "text" && p35.text) {
|
|
1687
|
+
out.push({ text: p35.text, type: "text" });
|
|
1673
1688
|
}
|
|
1674
|
-
if (
|
|
1675
|
-
out.push({ mediaType:
|
|
1689
|
+
if (p35.kind === "file" && p35.url) {
|
|
1690
|
+
out.push({ mediaType: p35.mediaType, type: "file", url: p35.url });
|
|
1676
1691
|
}
|
|
1677
|
-
if (
|
|
1692
|
+
if (p35.kind === "tool" && isResolvedToolPart(p35)) {
|
|
1678
1693
|
const part = {
|
|
1679
|
-
type:
|
|
1680
|
-
toolCallId:
|
|
1681
|
-
|
|
1682
|
-
state: p33.state
|
|
1694
|
+
type: toolPartType(p35.toolName),
|
|
1695
|
+
toolCallId: p35.toolCallId,
|
|
1696
|
+
state: p35.state
|
|
1683
1697
|
};
|
|
1684
|
-
if (
|
|
1685
|
-
if (
|
|
1686
|
-
if (
|
|
1687
|
-
if (
|
|
1698
|
+
if (p35.input !== void 0) part.input = p35.input;
|
|
1699
|
+
if (p35.output !== void 0) part.output = p35.output;
|
|
1700
|
+
if (p35.error !== void 0) part.errorText = p35.error;
|
|
1701
|
+
if (p35.approval && p35.approval.approved !== void 0) part.approval = p35.approval;
|
|
1688
1702
|
out.push(part);
|
|
1689
1703
|
}
|
|
1690
1704
|
}
|
|
@@ -2381,11 +2395,23 @@ function fromWireMessage(w) {
|
|
|
2381
2395
|
if (part.type === "file") {
|
|
2382
2396
|
return { kind: "file", url: part.url, mediaType: part.mediaType };
|
|
2383
2397
|
}
|
|
2384
|
-
if (part.type === "
|
|
2398
|
+
if (part.type === "source-url") {
|
|
2399
|
+
return { kind: "source", sourceId: part.sourceId, url: part.url, title: part.title };
|
|
2400
|
+
}
|
|
2401
|
+
if (part.type === "source-document") {
|
|
2402
|
+
return {
|
|
2403
|
+
kind: "source",
|
|
2404
|
+
sourceId: part.sourceId,
|
|
2405
|
+
title: part.title,
|
|
2406
|
+
filename: part.filename,
|
|
2407
|
+
mediaType: part.mediaType
|
|
2408
|
+
};
|
|
2409
|
+
}
|
|
2410
|
+
if (part.type.startsWith("tool-")) {
|
|
2385
2411
|
return {
|
|
2386
2412
|
kind: "tool",
|
|
2387
2413
|
toolCallId: part.toolCallId,
|
|
2388
|
-
toolName: part.
|
|
2414
|
+
toolName: toolNameFromType(part.type),
|
|
2389
2415
|
inputPartialSig: signal(""),
|
|
2390
2416
|
inputSig: signal(part.input),
|
|
2391
2417
|
outputSig: signal(part.output),
|
|
@@ -2395,7 +2421,7 @@ function fromWireMessage(w) {
|
|
|
2395
2421
|
};
|
|
2396
2422
|
}
|
|
2397
2423
|
return null;
|
|
2398
|
-
}).filter((
|
|
2424
|
+
}).filter((p35) => p35 !== null);
|
|
2399
2425
|
return {
|
|
2400
2426
|
id: w.id,
|
|
2401
2427
|
role: w.role,
|
|
@@ -2425,61 +2451,47 @@ function assistantText(m) {
|
|
|
2425
2451
|
}
|
|
2426
2452
|
return out;
|
|
2427
2453
|
}
|
|
2428
|
-
function partToReactive(
|
|
2429
|
-
if (
|
|
2430
|
-
return { kind:
|
|
2454
|
+
function partToReactive(p35) {
|
|
2455
|
+
if (p35.kind === "text" || p35.kind === "reasoning") {
|
|
2456
|
+
return { kind: p35.kind, id: p35.id, textSig: signal(p35.text), doneSig: signal(p35.done) };
|
|
2431
2457
|
}
|
|
2432
|
-
if (
|
|
2458
|
+
if (p35.kind === "tool") {
|
|
2433
2459
|
return {
|
|
2434
2460
|
kind: "tool",
|
|
2435
|
-
toolCallId:
|
|
2436
|
-
toolName:
|
|
2437
|
-
inputPartialSig: signal(
|
|
2438
|
-
inputSig: signal(
|
|
2439
|
-
outputSig: signal(
|
|
2440
|
-
errorSig: signal(
|
|
2441
|
-
stateSig: signal(
|
|
2442
|
-
approvalSig: signal(
|
|
2461
|
+
toolCallId: p35.toolCallId,
|
|
2462
|
+
toolName: p35.toolName,
|
|
2463
|
+
inputPartialSig: signal(p35.inputPartial),
|
|
2464
|
+
inputSig: signal(p35.input),
|
|
2465
|
+
outputSig: signal(p35.output),
|
|
2466
|
+
errorSig: signal(p35.error),
|
|
2467
|
+
stateSig: signal(p35.state),
|
|
2468
|
+
approvalSig: signal(p35.approval)
|
|
2443
2469
|
};
|
|
2444
2470
|
}
|
|
2445
|
-
return
|
|
2471
|
+
return p35;
|
|
2446
2472
|
}
|
|
2447
|
-
function partFromReactive(
|
|
2448
|
-
if (
|
|
2449
|
-
return { kind:
|
|
2473
|
+
function partFromReactive(p35) {
|
|
2474
|
+
if (p35.kind === "text" || p35.kind === "reasoning") {
|
|
2475
|
+
return { kind: p35.kind, id: p35.id, text: p35.textSig.value, done: p35.doneSig.value };
|
|
2450
2476
|
}
|
|
2451
|
-
if (
|
|
2477
|
+
if (p35.kind === "tool") {
|
|
2452
2478
|
return {
|
|
2453
2479
|
kind: "tool",
|
|
2454
|
-
toolCallId:
|
|
2455
|
-
toolName:
|
|
2456
|
-
inputPartial:
|
|
2457
|
-
input:
|
|
2458
|
-
output:
|
|
2459
|
-
error:
|
|
2460
|
-
state:
|
|
2461
|
-
approval:
|
|
2480
|
+
toolCallId: p35.toolCallId,
|
|
2481
|
+
toolName: p35.toolName,
|
|
2482
|
+
inputPartial: p35.inputPartialSig.value,
|
|
2483
|
+
input: p35.inputSig.value,
|
|
2484
|
+
output: p35.outputSig.value,
|
|
2485
|
+
error: p35.errorSig.value,
|
|
2486
|
+
state: p35.stateSig.value,
|
|
2487
|
+
approval: p35.approvalSig.value
|
|
2462
2488
|
};
|
|
2463
2489
|
}
|
|
2464
|
-
return
|
|
2490
|
+
return p35;
|
|
2465
2491
|
}
|
|
2466
2492
|
|
|
2467
2493
|
// src/stream/reducer.ts
|
|
2468
2494
|
import { signal as signal2 } from "@preact/signals";
|
|
2469
|
-
|
|
2470
|
-
// src/stream/constants.ts
|
|
2471
|
-
function isAskUserInputTool(toolName) {
|
|
2472
|
-
if (!toolName) return false;
|
|
2473
|
-
const name = toolName.startsWith("tool:") ? toolName.slice(5) : toolName;
|
|
2474
|
-
return name === "ask-user-input" || name === "ask_user_input" || name === "request-user-input" || name === "request_user_input";
|
|
2475
|
-
}
|
|
2476
|
-
var TRIGGER = {
|
|
2477
|
-
submitMessage: "submit-message",
|
|
2478
|
-
toolResult: "tool-result",
|
|
2479
|
-
toolApproval: "tool-approval"
|
|
2480
|
-
};
|
|
2481
|
-
|
|
2482
|
-
// src/stream/reducer.ts
|
|
2483
2495
|
var log7 = logger.scope("reducer");
|
|
2484
2496
|
var StreamReducer = class {
|
|
2485
2497
|
constructor(messagesSig) {
|
|
@@ -2517,8 +2529,8 @@ var StreamReducer = class {
|
|
|
2517
2529
|
ensureTextPart(m, "text", chunk.id);
|
|
2518
2530
|
return;
|
|
2519
2531
|
case "text-delta": {
|
|
2520
|
-
const
|
|
2521
|
-
|
|
2532
|
+
const p35 = ensureTextPart(m, "text", chunk.id);
|
|
2533
|
+
p35.textSig.value += chunk.delta;
|
|
2522
2534
|
return;
|
|
2523
2535
|
}
|
|
2524
2536
|
case "text-end":
|
|
@@ -2528,8 +2540,8 @@ var StreamReducer = class {
|
|
|
2528
2540
|
ensureTextPart(m, "reasoning", chunk.id).doneSig.value = false;
|
|
2529
2541
|
return;
|
|
2530
2542
|
case "reasoning-delta": {
|
|
2531
|
-
const
|
|
2532
|
-
|
|
2543
|
+
const p35 = ensureTextPart(m, "reasoning", chunk.id);
|
|
2544
|
+
p35.textSig.value += chunk.delta;
|
|
2533
2545
|
return;
|
|
2534
2546
|
}
|
|
2535
2547
|
case "reasoning-end":
|
|
@@ -2540,18 +2552,25 @@ var StreamReducer = class {
|
|
|
2540
2552
|
case "tool-input-available":
|
|
2541
2553
|
case "tool-output-available":
|
|
2542
2554
|
case "tool-output-error":
|
|
2555
|
+
case "tool-output-denied":
|
|
2543
2556
|
case "tool-approval-request":
|
|
2544
2557
|
applyTool(m, chunk);
|
|
2545
2558
|
return;
|
|
2546
2559
|
case "file":
|
|
2547
2560
|
appendPart(m, { kind: "file", url: chunk.url, mediaType: chunk.mediaType });
|
|
2548
2561
|
return;
|
|
2549
|
-
case "source-url":
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
|
|
2562
|
+
case "source-url":
|
|
2563
|
+
appendSource(m, { kind: "source", sourceId: chunk.sourceId, url: chunk.url, title: chunk.title });
|
|
2564
|
+
return;
|
|
2565
|
+
case "source-document":
|
|
2566
|
+
appendSource(m, {
|
|
2567
|
+
kind: "source",
|
|
2568
|
+
sourceId: chunk.sourceId,
|
|
2569
|
+
title: chunk.title,
|
|
2570
|
+
filename: chunk.filename,
|
|
2571
|
+
mediaType: chunk.mediaType
|
|
2572
|
+
});
|
|
2553
2573
|
return;
|
|
2554
|
-
}
|
|
2555
2574
|
case "data-notification":
|
|
2556
2575
|
return;
|
|
2557
2576
|
default: {
|
|
@@ -2572,14 +2591,14 @@ var StreamReducer = class {
|
|
|
2572
2591
|
}
|
|
2573
2592
|
};
|
|
2574
2593
|
function ensureTextPart(m, kind, id) {
|
|
2575
|
-
const existing = m.partsSig.value.find((
|
|
2594
|
+
const existing = m.partsSig.value.find((p35) => p35.kind === kind && p35.id === id);
|
|
2576
2595
|
if (existing) return existing;
|
|
2577
2596
|
const part = { kind, id, textSig: signal2(""), doneSig: signal2(false) };
|
|
2578
2597
|
appendPart(m, part);
|
|
2579
2598
|
return part;
|
|
2580
2599
|
}
|
|
2581
2600
|
function ensureToolPart(m, toolCallId, toolName) {
|
|
2582
|
-
const existing = m.partsSig.value.find((
|
|
2601
|
+
const existing = m.partsSig.value.find((p35) => p35.kind === "tool" && p35.toolCallId === toolCallId);
|
|
2583
2602
|
if (existing) return existing;
|
|
2584
2603
|
const part = {
|
|
2585
2604
|
kind: "tool",
|
|
@@ -2589,7 +2608,7 @@ function ensureToolPart(m, toolCallId, toolName) {
|
|
|
2589
2608
|
inputSig: signal2(void 0),
|
|
2590
2609
|
outputSig: signal2(void 0),
|
|
2591
2610
|
errorSig: signal2(void 0),
|
|
2592
|
-
stateSig: signal2("input"),
|
|
2611
|
+
stateSig: signal2("input-streaming"),
|
|
2593
2612
|
approvalSig: signal2(void 0)
|
|
2594
2613
|
};
|
|
2595
2614
|
appendPart(m, part);
|
|
@@ -2598,38 +2617,47 @@ function ensureToolPart(m, toolCallId, toolName) {
|
|
|
2598
2617
|
function appendPart(m, part) {
|
|
2599
2618
|
m.partsSig.value = [...m.partsSig.value, part];
|
|
2600
2619
|
}
|
|
2620
|
+
function appendSource(m, source) {
|
|
2621
|
+
if (m.partsSig.value.some((p35) => p35.kind === "source" && p35.sourceId === source.sourceId)) return;
|
|
2622
|
+
appendPart(m, source);
|
|
2623
|
+
}
|
|
2601
2624
|
function applyTool(m, chunk) {
|
|
2602
2625
|
switch (chunk.type) {
|
|
2603
2626
|
case "tool-input-start":
|
|
2604
2627
|
ensureToolPart(m, chunk.toolCallId, chunk.toolName);
|
|
2605
2628
|
return;
|
|
2606
2629
|
case "tool-input-delta": {
|
|
2607
|
-
const
|
|
2608
|
-
|
|
2630
|
+
const p35 = ensureToolPart(m, chunk.toolCallId);
|
|
2631
|
+
p35.inputPartialSig.value += chunk.inputTextDelta;
|
|
2609
2632
|
return;
|
|
2610
2633
|
}
|
|
2611
2634
|
case "tool-input-available": {
|
|
2612
|
-
const
|
|
2613
|
-
|
|
2614
|
-
|
|
2635
|
+
const p35 = ensureToolPart(m, chunk.toolCallId, chunk.toolName);
|
|
2636
|
+
p35.inputSig.value = chunk.input;
|
|
2637
|
+
p35.stateSig.value = "input-available";
|
|
2615
2638
|
return;
|
|
2616
2639
|
}
|
|
2617
2640
|
case "tool-approval-request": {
|
|
2618
|
-
const
|
|
2619
|
-
|
|
2620
|
-
|
|
2641
|
+
const p35 = ensureToolPart(m, chunk.toolCallId, chunk.toolName);
|
|
2642
|
+
p35.approvalSig.value = { id: chunk.approvalId };
|
|
2643
|
+
p35.stateSig.value = "approval-requested";
|
|
2621
2644
|
return;
|
|
2622
2645
|
}
|
|
2623
2646
|
case "tool-output-available": {
|
|
2624
|
-
const
|
|
2625
|
-
|
|
2626
|
-
|
|
2647
|
+
const p35 = ensureToolPart(m, chunk.toolCallId);
|
|
2648
|
+
p35.outputSig.value = chunk.output;
|
|
2649
|
+
p35.stateSig.value = "output-available";
|
|
2627
2650
|
return;
|
|
2628
2651
|
}
|
|
2629
2652
|
case "tool-output-error": {
|
|
2630
|
-
const
|
|
2631
|
-
|
|
2632
|
-
|
|
2653
|
+
const p35 = ensureToolPart(m, chunk.toolCallId);
|
|
2654
|
+
p35.errorSig.value = chunk.errorText;
|
|
2655
|
+
p35.stateSig.value = "output-error";
|
|
2656
|
+
return;
|
|
2657
|
+
}
|
|
2658
|
+
case "tool-output-denied": {
|
|
2659
|
+
const p35 = ensureToolPart(m, chunk.toolCallId);
|
|
2660
|
+
p35.stateSig.value = "output-denied";
|
|
2633
2661
|
return;
|
|
2634
2662
|
}
|
|
2635
2663
|
default:
|
|
@@ -2637,6 +2665,18 @@ function applyTool(m, chunk) {
|
|
|
2637
2665
|
}
|
|
2638
2666
|
}
|
|
2639
2667
|
|
|
2668
|
+
// src/stream/constants.ts
|
|
2669
|
+
function isAskUserInputTool(toolName) {
|
|
2670
|
+
if (!toolName) return false;
|
|
2671
|
+
const name = toolName.startsWith("tool:") ? toolName.slice(5) : toolName;
|
|
2672
|
+
return name === "ask-user-input" || name === "ask_user_input" || name === "request-user-input" || name === "request_user_input";
|
|
2673
|
+
}
|
|
2674
|
+
var TRIGGER = {
|
|
2675
|
+
submitMessage: "submit-message",
|
|
2676
|
+
toolResult: "tool-result",
|
|
2677
|
+
toolApproval: "tool-approval"
|
|
2678
|
+
};
|
|
2679
|
+
|
|
2640
2680
|
// src/core/feedback/index.ts
|
|
2641
2681
|
import { signal as signal3 } from "@preact/signals";
|
|
2642
2682
|
|
|
@@ -3211,7 +3251,11 @@ var TID = {
|
|
|
3211
3251
|
/** Tool-approval reject button. */
|
|
3212
3252
|
toolReject: `${p2}-tool-reject`,
|
|
3213
3253
|
/** Recorded tool decision summary (after approve/reject/submit). */
|
|
3214
|
-
toolDecision: `${p2}-tool-decision
|
|
3254
|
+
toolDecision: `${p2}-tool-decision`,
|
|
3255
|
+
/** Automatic (non-interactive) tool-call disclosure — shown only when `showToolCalls`. */
|
|
3256
|
+
toolCall: `${p2}-tool-call`,
|
|
3257
|
+
/** A citation source (web link or document reference) — shown only when `showSources`. */
|
|
3258
|
+
source: `${p2}-source`
|
|
3215
3259
|
};
|
|
3216
3260
|
function tid(base, suffix) {
|
|
3217
3261
|
return `${base}-${suffix}`;
|
|
@@ -3322,24 +3366,24 @@ import { useCallback as useCallback2, useEffect as useEffect9, useRef as useRef6
|
|
|
3322
3366
|
import { useEffect as useEffect2, useRef } from "preact/hooks";
|
|
3323
3367
|
import { jsx as jsx3 } from "preact/jsx-runtime";
|
|
3324
3368
|
function ResizeGrip({ panelEl, resize, position, initialSize, onSizeChange, strings }) {
|
|
3325
|
-
const
|
|
3369
|
+
const p35 = BRAND.cssPrefix;
|
|
3326
3370
|
const dragRef = useRef(null);
|
|
3327
3371
|
useEffect2(() => {
|
|
3328
3372
|
if (!panelEl) return;
|
|
3329
3373
|
const style = panelEl.style;
|
|
3330
|
-
if (resize.minWidth) style.setProperty(`--${
|
|
3331
|
-
if (resize.maxWidth) style.setProperty(`--${
|
|
3332
|
-
if (resize.minHeight) style.setProperty(`--${
|
|
3333
|
-
if (resize.maxHeight) style.setProperty(`--${
|
|
3374
|
+
if (resize.minWidth) style.setProperty(`--${p35}-resize-min-w`, resize.minWidth);
|
|
3375
|
+
if (resize.maxWidth) style.setProperty(`--${p35}-resize-max-w`, resize.maxWidth);
|
|
3376
|
+
if (resize.minHeight) style.setProperty(`--${p35}-resize-min-h`, resize.minHeight);
|
|
3377
|
+
if (resize.maxHeight) style.setProperty(`--${p35}-resize-max-h`, resize.maxHeight);
|
|
3334
3378
|
if (initialSize) {
|
|
3335
|
-
style.setProperty(`--${
|
|
3336
|
-
style.setProperty(`--${
|
|
3379
|
+
style.setProperty(`--${p35}-widget-w`, `${initialSize.width}px`);
|
|
3380
|
+
style.setProperty(`--${p35}-widget-h`, `${initialSize.height}px`);
|
|
3337
3381
|
}
|
|
3338
|
-
}, [panelEl, resize.minWidth, resize.maxWidth, resize.minHeight, resize.maxHeight,
|
|
3382
|
+
}, [panelEl, resize.minWidth, resize.maxWidth, resize.minHeight, resize.maxHeight, p35, initialSize]);
|
|
3339
3383
|
if (!panelEl) return null;
|
|
3340
3384
|
const isTop = position.startsWith("top-");
|
|
3341
3385
|
const isRight = position.endsWith("-right");
|
|
3342
|
-
const cornerClass = `${
|
|
3386
|
+
const cornerClass = `${p35}-resize-grip ${p35}-resize-grip--${isTop ? "bottom" : "top"}-${isRight ? "left" : "right"}`;
|
|
3343
3387
|
const onPointerDown = (e) => {
|
|
3344
3388
|
if (!panelEl) return;
|
|
3345
3389
|
const target = e.currentTarget;
|
|
@@ -3364,8 +3408,8 @@ function ResizeGrip({ panelEl, resize, position, initialSize, onSizeChange, stri
|
|
|
3364
3408
|
if (!d || e.pointerId !== d.pointerId || !panelEl) return;
|
|
3365
3409
|
const dx = (e.clientX - d.startX) * d.dirX;
|
|
3366
3410
|
const dy = (e.clientY - d.startY) * d.dirY;
|
|
3367
|
-
panelEl.style.setProperty(`--${
|
|
3368
|
-
panelEl.style.setProperty(`--${
|
|
3411
|
+
panelEl.style.setProperty(`--${p35}-widget-w`, `${d.startW + dx}px`);
|
|
3412
|
+
panelEl.style.setProperty(`--${p35}-widget-h`, `${d.startH + dy}px`);
|
|
3369
3413
|
};
|
|
3370
3414
|
const onPointerUp = (e) => {
|
|
3371
3415
|
const d = dragRef.current;
|
|
@@ -4102,7 +4146,7 @@ function usePopoverMenu({ itemCount, initialFocusIndex }) {
|
|
|
4102
4146
|
// src/ui/overflow-menu.tsx
|
|
4103
4147
|
import { jsx as jsx8, jsxs as jsxs6 } from "preact/jsx-runtime";
|
|
4104
4148
|
function OverflowMenu({ items, triggerLabel }) {
|
|
4105
|
-
const
|
|
4149
|
+
const p35 = BRAND.cssPrefix;
|
|
4106
4150
|
const menu = usePopoverMenu({ itemCount: items.length });
|
|
4107
4151
|
const handleSelect = (item) => {
|
|
4108
4152
|
if (item.disabled) return;
|
|
@@ -4125,13 +4169,13 @@ function OverflowMenu({ items, triggerLabel }) {
|
|
|
4125
4169
|
e.stopPropagation();
|
|
4126
4170
|
pickSegment(item, segs[next].value);
|
|
4127
4171
|
};
|
|
4128
|
-
return /* @__PURE__ */ jsxs6("div", { class: `${
|
|
4172
|
+
return /* @__PURE__ */ jsxs6("div", { class: `${p35}-menu-wrap`, children: [
|
|
4129
4173
|
/* @__PURE__ */ jsx8(
|
|
4130
4174
|
"button",
|
|
4131
4175
|
{
|
|
4132
4176
|
ref: menu.triggerRef,
|
|
4133
4177
|
type: "button",
|
|
4134
|
-
class: `${
|
|
4178
|
+
class: `${p35}-icon-btn`,
|
|
4135
4179
|
"aria-label": triggerLabel,
|
|
4136
4180
|
"aria-haspopup": "menu",
|
|
4137
4181
|
"aria-expanded": menu.open,
|
|
@@ -4145,7 +4189,7 @@ function OverflowMenu({ items, triggerLabel }) {
|
|
|
4145
4189
|
"div",
|
|
4146
4190
|
{
|
|
4147
4191
|
ref: menu.menuRef,
|
|
4148
|
-
class: `${
|
|
4192
|
+
class: `${p35}-menu`,
|
|
4149
4193
|
role: "menu",
|
|
4150
4194
|
"aria-label": triggerLabel,
|
|
4151
4195
|
onKeyDown: menu.onMenuKey,
|
|
@@ -4155,14 +4199,14 @@ function OverflowMenu({ items, triggerLabel }) {
|
|
|
4155
4199
|
"div",
|
|
4156
4200
|
{
|
|
4157
4201
|
role: "menuitem",
|
|
4158
|
-
class: `${
|
|
4202
|
+
class: `${p35}-menu-item ${p35}-menu-item-segmented`,
|
|
4159
4203
|
"aria-label": item.label,
|
|
4160
4204
|
tabIndex: -1,
|
|
4161
4205
|
onKeyDown: (e) => onSegmentRowKey(e, item),
|
|
4162
4206
|
children: [
|
|
4163
|
-
item.icon ? /* @__PURE__ */ jsx8("span", { class: `${
|
|
4164
|
-
/* @__PURE__ */ jsx8("span", { class: `${
|
|
4165
|
-
/* @__PURE__ */ jsx8("span", { class: `${
|
|
4207
|
+
item.icon ? /* @__PURE__ */ jsx8("span", { class: `${p35}-menu-icon`, children: item.icon }) : null,
|
|
4208
|
+
/* @__PURE__ */ jsx8("span", { class: `${p35}-menu-label`, children: item.label }),
|
|
4209
|
+
/* @__PURE__ */ jsx8("span", { class: `${p35}-segmented`, role: "group", "aria-label": item.label, children: item.segments.map((seg) => {
|
|
4166
4210
|
const active = seg.value === item.value;
|
|
4167
4211
|
return /* @__PURE__ */ jsx8(
|
|
4168
4212
|
"button",
|
|
@@ -4170,7 +4214,7 @@ function OverflowMenu({ items, triggerLabel }) {
|
|
|
4170
4214
|
type: "button",
|
|
4171
4215
|
role: "menuitemradio",
|
|
4172
4216
|
"aria-checked": active,
|
|
4173
|
-
class: `${
|
|
4217
|
+
class: `${p35}-segment`,
|
|
4174
4218
|
"data-on": active ? "true" : void 0,
|
|
4175
4219
|
lang: seg.lang,
|
|
4176
4220
|
title: seg.value,
|
|
@@ -4190,14 +4234,14 @@ function OverflowMenu({ items, triggerLabel }) {
|
|
|
4190
4234
|
{
|
|
4191
4235
|
type: "button",
|
|
4192
4236
|
role: "menuitem",
|
|
4193
|
-
class: `${
|
|
4237
|
+
class: `${p35}-menu-item`,
|
|
4194
4238
|
"aria-pressed": item.type === "switch" ? item.on : void 0,
|
|
4195
4239
|
disabled: item.disabled,
|
|
4196
4240
|
onClick: () => handleSelect(item),
|
|
4197
4241
|
children: [
|
|
4198
|
-
item.icon ? /* @__PURE__ */ jsx8("span", { class: `${
|
|
4199
|
-
/* @__PURE__ */ jsx8("span", { class: `${
|
|
4200
|
-
item.type === "switch" && item.on ? /* @__PURE__ */ jsx8("span", { class: `${
|
|
4242
|
+
item.icon ? /* @__PURE__ */ jsx8("span", { class: `${p35}-menu-icon`, children: item.icon }) : null,
|
|
4243
|
+
/* @__PURE__ */ jsx8("span", { class: `${p35}-menu-label`, children: item.label }),
|
|
4244
|
+
item.type === "switch" && item.on ? /* @__PURE__ */ jsx8("span", { class: `${p35}-menu-check`, "aria-hidden": "true", children: /* @__PURE__ */ jsx8(CheckIcon, {}) }) : null
|
|
4201
4245
|
]
|
|
4202
4246
|
},
|
|
4203
4247
|
item.id
|
|
@@ -4349,7 +4393,7 @@ function HeaderActions({ panelProps, variant }) {
|
|
|
4349
4393
|
|
|
4350
4394
|
// src/ui/message-list.tsx
|
|
4351
4395
|
import { useEffect as useEffect7, useLayoutEffect as useLayoutEffect2, useRef as useRef5, useState as useState6 } from "preact/hooks";
|
|
4352
|
-
import { useComputed as
|
|
4396
|
+
import { useComputed as useComputed6 } from "@preact/signals";
|
|
4353
4397
|
|
|
4354
4398
|
// src/ui/form/dynamic-form.tsx
|
|
4355
4399
|
import { useState as useState5 } from "preact/hooks";
|
|
@@ -4737,7 +4781,7 @@ function FormDoneMarker({
|
|
|
4737
4781
|
}
|
|
4738
4782
|
|
|
4739
4783
|
// src/ui/message-bubble.tsx
|
|
4740
|
-
import { useComputed as
|
|
4784
|
+
import { useComputed as useComputed5 } from "@preact/signals";
|
|
4741
4785
|
|
|
4742
4786
|
// src/ui/markdown.tsx
|
|
4743
4787
|
import { useLayoutEffect, useMemo, useRef as useRef4 } from "preact/hooks";
|
|
@@ -4810,10 +4854,27 @@ function hardenLink(a) {
|
|
|
4810
4854
|
a.rel = [...tokens].join(" ");
|
|
4811
4855
|
}
|
|
4812
4856
|
|
|
4857
|
+
// src/ui/source-view.tsx
|
|
4858
|
+
import { jsx as jsx13, jsxs as jsxs10 } from "preact/jsx-runtime";
|
|
4859
|
+
var p12 = BRAND.cssPrefix;
|
|
4860
|
+
function SourceView({ part, strings }) {
|
|
4861
|
+
const label = part.title || part.filename || part.url || strings.sources;
|
|
4862
|
+
if (part.url) {
|
|
4863
|
+
return /* @__PURE__ */ jsxs10("a", { class: `${p12}-source`, href: part.url, target: "_blank", rel: "noreferrer noopener", "data-testid": TID.source, children: [
|
|
4864
|
+
/* @__PURE__ */ jsx13("span", { class: `${p12}-source-icon`, "aria-hidden": "true", children: "\u{1F517}" }),
|
|
4865
|
+
/* @__PURE__ */ jsx13("span", { class: `${p12}-source-label`, children: label })
|
|
4866
|
+
] });
|
|
4867
|
+
}
|
|
4868
|
+
return /* @__PURE__ */ jsxs10("span", { class: `${p12}-source`, "data-testid": TID.source, children: [
|
|
4869
|
+
/* @__PURE__ */ jsx13("span", { class: `${p12}-source-icon`, "aria-hidden": "true", children: "\u{1F4C4}" }),
|
|
4870
|
+
/* @__PURE__ */ jsx13("span", { class: `${p12}-source-label`, children: label })
|
|
4871
|
+
] });
|
|
4872
|
+
}
|
|
4873
|
+
|
|
4813
4874
|
// src/ui/tool-approval.tsx
|
|
4814
4875
|
import { useComputed as useComputed2, useSignal } from "@preact/signals";
|
|
4815
|
-
import { Fragment as Fragment2, jsx as
|
|
4816
|
-
var
|
|
4876
|
+
import { Fragment as Fragment2, jsx as jsx14, jsxs as jsxs11 } from "preact/jsx-runtime";
|
|
4877
|
+
var p13 = BRAND.cssPrefix;
|
|
4817
4878
|
function displayToolName(toolName) {
|
|
4818
4879
|
return (toolName.startsWith("tool:") ? toolName.slice(5) : toolName).replace(/[-_]+/g, " ");
|
|
4819
4880
|
}
|
|
@@ -4824,24 +4885,24 @@ function ToolApproval({ part, strings, active, onDecision }) {
|
|
|
4824
4885
|
const decided = approval.value?.approved !== void 0;
|
|
4825
4886
|
if (decided) {
|
|
4826
4887
|
const ap = approval.value;
|
|
4827
|
-
return /* @__PURE__ */
|
|
4828
|
-
/* @__PURE__ */
|
|
4829
|
-
/* @__PURE__ */
|
|
4830
|
-
ap?.reason ? /* @__PURE__ */
|
|
4888
|
+
return /* @__PURE__ */ jsxs11("div", { class: `${p13}-tool-approval ${p13}-tool-decided`, "data-testid": TID.toolDecision, children: [
|
|
4889
|
+
/* @__PURE__ */ jsx14("span", { class: `${p13}-tool-decided-label`, "data-approved": ap?.approved ? "true" : "false", children: ap?.approved ? strings.approved : strings.rejected }),
|
|
4890
|
+
/* @__PURE__ */ jsx14("strong", { class: `${p13}-tool-title`, children: displayToolName(part.toolName) }),
|
|
4891
|
+
ap?.reason ? /* @__PURE__ */ jsx14("span", { class: `${p13}-tool-decided-value`, children: ap.reason }) : null
|
|
4831
4892
|
] });
|
|
4832
4893
|
}
|
|
4833
4894
|
const args = summarizeInput(input.value);
|
|
4834
|
-
return /* @__PURE__ */
|
|
4835
|
-
/* @__PURE__ */
|
|
4836
|
-
/* @__PURE__ */
|
|
4837
|
-
/* @__PURE__ */
|
|
4895
|
+
return /* @__PURE__ */ jsxs11("div", { class: `${p13}-tool-approval`, "data-testid": TID.toolApproval, children: [
|
|
4896
|
+
/* @__PURE__ */ jsxs11("div", { class: `${p13}-tool-head`, children: [
|
|
4897
|
+
/* @__PURE__ */ jsx14("span", { class: `${p13}-tool-badge`, children: strings.approvalRequired }),
|
|
4898
|
+
/* @__PURE__ */ jsx14("strong", { class: `${p13}-tool-title`, children: displayToolName(part.toolName) })
|
|
4838
4899
|
] }),
|
|
4839
|
-
args ? /* @__PURE__ */
|
|
4840
|
-
active ? /* @__PURE__ */
|
|
4841
|
-
/* @__PURE__ */
|
|
4900
|
+
args ? /* @__PURE__ */ jsx14("pre", { class: `${p13}-tool-args`, children: args }) : null,
|
|
4901
|
+
active ? /* @__PURE__ */ jsxs11(Fragment2, { children: [
|
|
4902
|
+
/* @__PURE__ */ jsx14(
|
|
4842
4903
|
"input",
|
|
4843
4904
|
{
|
|
4844
|
-
class: `${
|
|
4905
|
+
class: `${p13}-field-input`,
|
|
4845
4906
|
value: reason.value,
|
|
4846
4907
|
placeholder: strings.approvalReason,
|
|
4847
4908
|
onInput: (e) => {
|
|
@@ -4849,29 +4910,29 @@ function ToolApproval({ part, strings, active, onDecision }) {
|
|
|
4849
4910
|
}
|
|
4850
4911
|
}
|
|
4851
4912
|
),
|
|
4852
|
-
/* @__PURE__ */
|
|
4853
|
-
/* @__PURE__ */
|
|
4913
|
+
/* @__PURE__ */ jsxs11("div", { class: `${p13}-form-actions`, children: [
|
|
4914
|
+
/* @__PURE__ */ jsx14(
|
|
4854
4915
|
"button",
|
|
4855
4916
|
{
|
|
4856
4917
|
type: "button",
|
|
4857
|
-
class: `${
|
|
4918
|
+
class: `${p13}-tool-reject`,
|
|
4858
4919
|
onClick: () => onDecision(part.toolCallId, false, reason.value.trim() || void 0),
|
|
4859
4920
|
"data-testid": TID.toolReject,
|
|
4860
4921
|
children: strings.reject
|
|
4861
4922
|
}
|
|
4862
4923
|
),
|
|
4863
|
-
/* @__PURE__ */
|
|
4924
|
+
/* @__PURE__ */ jsx14(
|
|
4864
4925
|
"button",
|
|
4865
4926
|
{
|
|
4866
4927
|
type: "button",
|
|
4867
|
-
class: `${
|
|
4928
|
+
class: `${p13}-tool-approve`,
|
|
4868
4929
|
onClick: () => onDecision(part.toolCallId, true, reason.value.trim() || void 0),
|
|
4869
4930
|
"data-testid": TID.toolApprove,
|
|
4870
4931
|
children: strings.approve
|
|
4871
4932
|
}
|
|
4872
4933
|
)
|
|
4873
4934
|
] })
|
|
4874
|
-
] }) : /* @__PURE__ */
|
|
4935
|
+
] }) : /* @__PURE__ */ jsx14("p", { class: `${p13}-tool-stale-note`, children: strings.stepNoLongerActive })
|
|
4875
4936
|
] });
|
|
4876
4937
|
}
|
|
4877
4938
|
function summarizeInput(input) {
|
|
@@ -4942,13 +5003,13 @@ function num(v) {
|
|
|
4942
5003
|
}
|
|
4943
5004
|
|
|
4944
5005
|
// src/ui/tool-ask-input.tsx
|
|
4945
|
-
import { jsx as
|
|
4946
|
-
var
|
|
5006
|
+
import { jsx as jsx15, jsxs as jsxs12 } from "preact/jsx-runtime";
|
|
5007
|
+
var p14 = BRAND.cssPrefix;
|
|
4947
5008
|
function ToolAskInput({ part, strings, active, onSubmit, onDecision }) {
|
|
4948
5009
|
const state = useComputed3(() => part.stateSig.value);
|
|
4949
5010
|
const approval = useComputed3(() => part.approvalSig.value);
|
|
4950
5011
|
const request = useComputed3(() => parseAskUserInput(part.inputSig.value));
|
|
4951
|
-
const decided = state.value === "output" || state.value === "error" || approval.value?.approved !== void 0;
|
|
5012
|
+
const decided = state.value === "output-available" || state.value === "output-error" || state.value === "output-denied" || state.value === "approval-responded" || approval.value?.approved !== void 0;
|
|
4952
5013
|
const viaApproval = approval.value !== void 0;
|
|
4953
5014
|
const resolve = (answer, accepted) => {
|
|
4954
5015
|
if (viaApproval) onDecision(part.toolCallId, accepted, answer);
|
|
@@ -4956,42 +5017,42 @@ function ToolAskInput({ part, strings, active, onSubmit, onDecision }) {
|
|
|
4956
5017
|
else onSubmit(part.toolCallId, accepted ? { answer } : {});
|
|
4957
5018
|
};
|
|
4958
5019
|
if (decided) {
|
|
4959
|
-
return /* @__PURE__ */
|
|
5020
|
+
return /* @__PURE__ */ jsx15(DecidedSummary, { part, strings });
|
|
4960
5021
|
}
|
|
4961
5022
|
if (!active) {
|
|
4962
|
-
return /* @__PURE__ */
|
|
4963
|
-
/* @__PURE__ */
|
|
4964
|
-
/* @__PURE__ */
|
|
5023
|
+
return /* @__PURE__ */ jsxs12("div", { class: `${p14}-tool-ask-input ${p14}-tool-stale`, "data-testid": TID.toolAskInput, children: [
|
|
5024
|
+
/* @__PURE__ */ jsx15(Header, { strings, title: request.value.title ?? request.value.question }),
|
|
5025
|
+
/* @__PURE__ */ jsx15("p", { class: `${p14}-tool-stale-note`, children: strings.stepNoLongerActive })
|
|
4965
5026
|
] });
|
|
4966
5027
|
}
|
|
4967
5028
|
const req = request.value;
|
|
4968
5029
|
const isConfirmation = req.responseType === "confirmation";
|
|
4969
|
-
return /* @__PURE__ */
|
|
4970
|
-
/* @__PURE__ */
|
|
4971
|
-
req.description ? /* @__PURE__ */
|
|
4972
|
-
isConfirmation ? /* @__PURE__ */
|
|
4973
|
-
isConfirmation ? /* @__PURE__ */
|
|
4974
|
-
/* @__PURE__ */
|
|
5030
|
+
return /* @__PURE__ */ jsxs12("div", { class: `${p14}-tool-ask-input`, "data-testid": TID.toolAskInput, children: [
|
|
5031
|
+
/* @__PURE__ */ jsx15(Header, { strings, title: req.title }),
|
|
5032
|
+
req.description ? /* @__PURE__ */ jsx15("p", { class: `${p14}-tool-desc`, children: req.description }) : null,
|
|
5033
|
+
isConfirmation ? /* @__PURE__ */ jsx15("p", { class: `${p14}-tool-question`, children: req.question }) : null,
|
|
5034
|
+
isConfirmation ? /* @__PURE__ */ jsxs12("div", { class: `${p14}-form-actions`, children: [
|
|
5035
|
+
/* @__PURE__ */ jsx15(
|
|
4975
5036
|
"button",
|
|
4976
5037
|
{
|
|
4977
5038
|
type: "button",
|
|
4978
|
-
class: `${
|
|
5039
|
+
class: `${p14}-form-skip`,
|
|
4979
5040
|
onClick: () => resolve(void 0, false),
|
|
4980
5041
|
"data-testid": TID.toolInputSkip,
|
|
4981
5042
|
children: strings.reject
|
|
4982
5043
|
}
|
|
4983
5044
|
),
|
|
4984
|
-
/* @__PURE__ */
|
|
5045
|
+
/* @__PURE__ */ jsx15(
|
|
4985
5046
|
"button",
|
|
4986
5047
|
{
|
|
4987
5048
|
type: "button",
|
|
4988
|
-
class: `${
|
|
5049
|
+
class: `${p14}-form-submit`,
|
|
4989
5050
|
onClick: () => resolve(void 0, true),
|
|
4990
5051
|
"data-testid": TID.toolInputSubmit,
|
|
4991
5052
|
children: strings.approve
|
|
4992
5053
|
}
|
|
4993
5054
|
)
|
|
4994
|
-
] }) : /* @__PURE__ */
|
|
5055
|
+
] }) : /* @__PURE__ */ jsx15(
|
|
4995
5056
|
DynamicForm,
|
|
4996
5057
|
{
|
|
4997
5058
|
fields: askInputToFields(req),
|
|
@@ -5007,9 +5068,9 @@ function ToolAskInput({ part, strings, active, onSubmit, onDecision }) {
|
|
|
5007
5068
|
] });
|
|
5008
5069
|
}
|
|
5009
5070
|
function Header({ strings, title }) {
|
|
5010
|
-
return /* @__PURE__ */
|
|
5011
|
-
/* @__PURE__ */
|
|
5012
|
-
title ? /* @__PURE__ */
|
|
5071
|
+
return /* @__PURE__ */ jsxs12("div", { class: `${p14}-tool-head`, children: [
|
|
5072
|
+
/* @__PURE__ */ jsx15("span", { class: `${p14}-tool-badge`, children: strings.inputRequired }),
|
|
5073
|
+
title ? /* @__PURE__ */ jsx15("strong", { class: `${p14}-tool-title`, children: title }) : null
|
|
5013
5074
|
] });
|
|
5014
5075
|
}
|
|
5015
5076
|
function DecidedSummary({ part, strings }) {
|
|
@@ -5017,9 +5078,9 @@ function DecidedSummary({ part, strings }) {
|
|
|
5017
5078
|
const approval = useComputed3(() => part.approvalSig.value);
|
|
5018
5079
|
const answer = approval.value?.approved !== void 0 ? approval.value.reason ?? "" : summarizeOutput(output.value);
|
|
5019
5080
|
const skipped = approval.value?.approved === false;
|
|
5020
|
-
return /* @__PURE__ */
|
|
5021
|
-
/* @__PURE__ */
|
|
5022
|
-
/* @__PURE__ */
|
|
5081
|
+
return /* @__PURE__ */ jsxs12("div", { class: `${p14}-tool-ask-input ${p14}-tool-decided`, "data-testid": TID.toolDecision, children: [
|
|
5082
|
+
/* @__PURE__ */ jsx15("span", { class: `${p14}-tool-decided-label`, children: skipped ? strings.inputSkip : strings.inputSubmitted }),
|
|
5083
|
+
/* @__PURE__ */ jsx15("span", { class: `${p14}-tool-decided-value`, children: skipped ? "" : answer || strings.inputSubmitted })
|
|
5023
5084
|
] });
|
|
5024
5085
|
}
|
|
5025
5086
|
function summarizeOutput(output) {
|
|
@@ -5033,37 +5094,70 @@ function summarizeOutput(output) {
|
|
|
5033
5094
|
return String(output);
|
|
5034
5095
|
}
|
|
5035
5096
|
|
|
5036
|
-
// src/ui/tool-
|
|
5037
|
-
import {
|
|
5038
|
-
|
|
5039
|
-
|
|
5040
|
-
|
|
5041
|
-
|
|
5042
|
-
|
|
5043
|
-
|
|
5097
|
+
// src/ui/tool-call.tsx
|
|
5098
|
+
import { useComputed as useComputed4 } from "@preact/signals";
|
|
5099
|
+
import { jsx as jsx16, jsxs as jsxs13 } from "preact/jsx-runtime";
|
|
5100
|
+
var p15 = BRAND.cssPrefix;
|
|
5101
|
+
function displayToolName2(toolName) {
|
|
5102
|
+
return (toolName.startsWith("tool:") ? toolName.slice(5) : toolName).replace(/[-_]+/g, " ").trim();
|
|
5103
|
+
}
|
|
5104
|
+
function ToolCall({ part, strings }) {
|
|
5105
|
+
const details = useComputed4(() => pretty(part.inputSig.value));
|
|
5106
|
+
const result = useComputed4(() => part.errorSig.value ?? pretty(unwrapResult(part.outputSig.value)));
|
|
5107
|
+
const isError = useComputed4(() => !!part.errorSig.value);
|
|
5108
|
+
if (!details.value && !result.value) return null;
|
|
5109
|
+
return /* @__PURE__ */ jsxs13("details", { class: `${p15}-tool-call`, "data-testid": TID.toolCall, children: [
|
|
5110
|
+
/* @__PURE__ */ jsxs13("summary", { class: `${p15}-tool-call-summary`, children: [
|
|
5111
|
+
/* @__PURE__ */ jsx16("span", { class: `${p15}-tool-badge`, children: strings.usedTool }),
|
|
5112
|
+
/* @__PURE__ */ jsx16("strong", { class: `${p15}-tool-title`, children: displayToolName2(part.toolName) })
|
|
5044
5113
|
] }),
|
|
5045
|
-
/* @__PURE__ */
|
|
5114
|
+
details.value ? /* @__PURE__ */ jsxs13("div", { class: `${p15}-tool-call-section`, children: [
|
|
5115
|
+
/* @__PURE__ */ jsx16("span", { class: `${p15}-tool-call-label`, children: strings.toolDetails }),
|
|
5116
|
+
/* @__PURE__ */ jsx16("pre", { class: `${p15}-tool-args`, children: details.value })
|
|
5117
|
+
] }) : null,
|
|
5118
|
+
result.value ? /* @__PURE__ */ jsxs13("div", { class: `${p15}-tool-call-section`, "data-error": isError.value ? "true" : void 0, children: [
|
|
5119
|
+
/* @__PURE__ */ jsx16("span", { class: `${p15}-tool-call-label`, children: strings.toolResult }),
|
|
5120
|
+
/* @__PURE__ */ jsx16("pre", { class: `${p15}-tool-args`, children: result.value })
|
|
5121
|
+
] }) : null
|
|
5046
5122
|
] });
|
|
5047
5123
|
}
|
|
5124
|
+
function unwrapResult(output) {
|
|
5125
|
+
if (output && typeof output === "object") {
|
|
5126
|
+
const rec = output;
|
|
5127
|
+
if (rec.storage === "tool-result-ref" && "summary" in rec) return rec.summary;
|
|
5128
|
+
}
|
|
5129
|
+
return output;
|
|
5130
|
+
}
|
|
5131
|
+
function pretty(value) {
|
|
5132
|
+
if (value == null) return "";
|
|
5133
|
+
try {
|
|
5134
|
+
const json = typeof value === "string" ? value : JSON.stringify(value, null, 2);
|
|
5135
|
+
if (!json || json === "{}" || json === "[]" || json === '""') return "";
|
|
5136
|
+
return json.length > 600 ? `${json.slice(0, 600)}\u2026` : json;
|
|
5137
|
+
} catch {
|
|
5138
|
+
return "";
|
|
5139
|
+
}
|
|
5140
|
+
}
|
|
5048
5141
|
|
|
5049
5142
|
// src/ui/message-bubble.tsx
|
|
5050
|
-
import { jsx as
|
|
5051
|
-
var
|
|
5143
|
+
import { jsx as jsx17, jsxs as jsxs14 } from "preact/jsx-runtime";
|
|
5144
|
+
var p16 = BRAND.cssPrefix;
|
|
5052
5145
|
function MessageBubble({
|
|
5053
5146
|
message,
|
|
5054
5147
|
strings,
|
|
5055
5148
|
responseMode,
|
|
5056
5149
|
showReasoning,
|
|
5057
5150
|
showToolCalls,
|
|
5151
|
+
showSources,
|
|
5058
5152
|
interactive = false,
|
|
5059
5153
|
tool
|
|
5060
5154
|
}) {
|
|
5061
|
-
const parts =
|
|
5155
|
+
const parts = useComputed5(() => message.partsSig.value);
|
|
5062
5156
|
const partList = parts.value;
|
|
5063
|
-
const hasAnswerText =
|
|
5157
|
+
const hasAnswerText = useComputed5(
|
|
5064
5158
|
() => message.partsSig.value.some((part) => part.kind === "text" && part.textSig.value.length > 0)
|
|
5065
5159
|
);
|
|
5066
|
-
const reasoningVisible =
|
|
5160
|
+
const reasoningVisible = useComputed5(
|
|
5067
5161
|
() => showReasoning && message.partsSig.value.some((part) => part.kind === "reasoning")
|
|
5068
5162
|
);
|
|
5069
5163
|
const streaming = message.role === "assistant" && message.status === "streaming";
|
|
@@ -5071,9 +5165,9 @@ function MessageBubble({
|
|
|
5071
5165
|
const working = streaming && !hasAnswerText.value;
|
|
5072
5166
|
const showStreamDots = streaming && !bufferedHold && !(reasoningVisible.value && working);
|
|
5073
5167
|
const stamp = formatStamp(message.createdAt);
|
|
5074
|
-
return /* @__PURE__ */
|
|
5075
|
-
/* @__PURE__ */
|
|
5076
|
-
bufferedHold ? /* @__PURE__ */
|
|
5168
|
+
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: [
|
|
5169
|
+
/* @__PURE__ */ jsxs14("div", { class: `${p16}-bubble`, children: [
|
|
5170
|
+
bufferedHold ? /* @__PURE__ */ jsx17(LoadingSpinner, { label: strings.loading }) : partList.map((part) => /* @__PURE__ */ jsx17(
|
|
5077
5171
|
PartView,
|
|
5078
5172
|
{
|
|
5079
5173
|
part,
|
|
@@ -5081,15 +5175,16 @@ function MessageBubble({
|
|
|
5081
5175
|
strings,
|
|
5082
5176
|
showReasoning,
|
|
5083
5177
|
showToolCalls,
|
|
5178
|
+
showSources,
|
|
5084
5179
|
interactive,
|
|
5085
5180
|
tool
|
|
5086
5181
|
},
|
|
5087
5182
|
partKey(part)
|
|
5088
5183
|
)),
|
|
5089
|
-
showStreamDots && /* @__PURE__ */
|
|
5090
|
-
message.status === "error" && message.errorText ? /* @__PURE__ */
|
|
5184
|
+
showStreamDots && /* @__PURE__ */ jsx17(TypingDots, {}),
|
|
5185
|
+
message.status === "error" && message.errorText ? /* @__PURE__ */ jsx17("div", { class: `${p16}-error`, role: "alert", children: /* @__PURE__ */ jsx17("span", { children: message.errorText }) }) : null
|
|
5091
5186
|
] }),
|
|
5092
|
-
stamp ? /* @__PURE__ */
|
|
5187
|
+
stamp ? /* @__PURE__ */ jsx17("time", { class: `${p16}-bubble-time`, dateTime: stamp.iso, title: stamp.full, children: stamp.short }) : null
|
|
5093
5188
|
] }) });
|
|
5094
5189
|
}
|
|
5095
5190
|
function formatStamp(createdAt) {
|
|
@@ -5111,16 +5206,17 @@ function PartView({
|
|
|
5111
5206
|
strings,
|
|
5112
5207
|
showReasoning,
|
|
5113
5208
|
showToolCalls,
|
|
5209
|
+
showSources,
|
|
5114
5210
|
interactive,
|
|
5115
5211
|
tool
|
|
5116
5212
|
}) {
|
|
5117
5213
|
switch (part.kind) {
|
|
5118
5214
|
case "text":
|
|
5119
|
-
return /* @__PURE__ */
|
|
5215
|
+
return /* @__PURE__ */ jsx17(MarkdownView, { textSig: part.textSig, doneSig: part.doneSig });
|
|
5120
5216
|
case "reasoning":
|
|
5121
|
-
return showReasoning ? /* @__PURE__ */
|
|
5217
|
+
return showReasoning ? /* @__PURE__ */ jsx17(ReasoningView, { part, active, strings }) : null;
|
|
5122
5218
|
case "tool":
|
|
5123
|
-
return /* @__PURE__ */
|
|
5219
|
+
return /* @__PURE__ */ jsx17(
|
|
5124
5220
|
ToolPartView,
|
|
5125
5221
|
{
|
|
5126
5222
|
part,
|
|
@@ -5132,11 +5228,11 @@ function PartView({
|
|
|
5132
5228
|
);
|
|
5133
5229
|
case "file":
|
|
5134
5230
|
if (part.mediaType.startsWith("image/")) {
|
|
5135
|
-
return /* @__PURE__ */
|
|
5231
|
+
return /* @__PURE__ */ jsx17("img", { src: part.url, alt: "", loading: "lazy" });
|
|
5136
5232
|
}
|
|
5137
|
-
return /* @__PURE__ */
|
|
5233
|
+
return /* @__PURE__ */ jsx17("a", { href: part.url, target: "_blank", rel: "noreferrer noopener", children: part.url });
|
|
5138
5234
|
case "source":
|
|
5139
|
-
return null;
|
|
5235
|
+
return showSources ? /* @__PURE__ */ jsx17(SourceView, { part, strings }) : null;
|
|
5140
5236
|
}
|
|
5141
5237
|
}
|
|
5142
5238
|
function ToolPartView({
|
|
@@ -5146,11 +5242,10 @@ function ToolPartView({
|
|
|
5146
5242
|
interactive,
|
|
5147
5243
|
tool
|
|
5148
5244
|
}) {
|
|
5149
|
-
const
|
|
5150
|
-
const hasApproval = useComputed4(() => part.approvalSig.value !== void 0);
|
|
5245
|
+
const hasApproval = useComputed5(() => part.approvalSig.value !== void 0);
|
|
5151
5246
|
if (tool?.humanInLoop) {
|
|
5152
|
-
if (isAskUserInputTool(part.toolName)
|
|
5153
|
-
return /* @__PURE__ */
|
|
5247
|
+
if (isAskUserInputTool(part.toolName)) {
|
|
5248
|
+
return /* @__PURE__ */ jsx17(
|
|
5154
5249
|
ToolAskInput,
|
|
5155
5250
|
{
|
|
5156
5251
|
part,
|
|
@@ -5161,20 +5256,20 @@ function ToolPartView({
|
|
|
5161
5256
|
}
|
|
5162
5257
|
);
|
|
5163
5258
|
}
|
|
5164
|
-
if (hasApproval.value
|
|
5165
|
-
return /* @__PURE__ */
|
|
5259
|
+
if (hasApproval.value) {
|
|
5260
|
+
return /* @__PURE__ */ jsx17(ToolApproval, { part, strings, active: interactive, onDecision: tool.onDecision });
|
|
5166
5261
|
}
|
|
5167
5262
|
}
|
|
5168
|
-
return showToolCalls ? /* @__PURE__ */
|
|
5263
|
+
return showToolCalls ? /* @__PURE__ */ jsx17(ToolCall, { part, strings }) : null;
|
|
5169
5264
|
}
|
|
5170
5265
|
function ReasoningView({
|
|
5171
5266
|
part,
|
|
5172
5267
|
active,
|
|
5173
5268
|
strings
|
|
5174
5269
|
}) {
|
|
5175
|
-
return /* @__PURE__ */
|
|
5176
|
-
/* @__PURE__ */
|
|
5177
|
-
/* @__PURE__ */
|
|
5270
|
+
return /* @__PURE__ */ jsxs14("details", { class: `${p16}-reasoning`, open: active, "data-active": active ? "true" : void 0, children: [
|
|
5271
|
+
/* @__PURE__ */ jsx17("summary", { class: `${p16}-reasoning-summary`, children: /* @__PURE__ */ jsx17("span", { class: `${p16}-reasoning-label`, children: active ? strings.thinking : strings.thoughts }) }),
|
|
5272
|
+
/* @__PURE__ */ jsx17("div", { class: `${p16}-reasoning-body`, children: /* @__PURE__ */ jsx17(MarkdownView, { textSig: part.textSig, doneSig: part.doneSig }) })
|
|
5178
5273
|
] });
|
|
5179
5274
|
}
|
|
5180
5275
|
function partKey(part) {
|
|
@@ -5191,22 +5286,22 @@ function partKey(part) {
|
|
|
5191
5286
|
}
|
|
5192
5287
|
}
|
|
5193
5288
|
function TypingDots() {
|
|
5194
|
-
return /* @__PURE__ */
|
|
5195
|
-
/* @__PURE__ */
|
|
5196
|
-
/* @__PURE__ */
|
|
5197
|
-
/* @__PURE__ */
|
|
5289
|
+
return /* @__PURE__ */ jsxs14("span", { class: `${p16}-typing`, "aria-hidden": "true", children: [
|
|
5290
|
+
/* @__PURE__ */ jsx17("span", {}),
|
|
5291
|
+
/* @__PURE__ */ jsx17("span", {}),
|
|
5292
|
+
/* @__PURE__ */ jsx17("span", {})
|
|
5198
5293
|
] });
|
|
5199
5294
|
}
|
|
5200
5295
|
function LoadingSpinner({ label }) {
|
|
5201
|
-
return /* @__PURE__ */
|
|
5202
|
-
/* @__PURE__ */
|
|
5203
|
-
/* @__PURE__ */
|
|
5296
|
+
return /* @__PURE__ */ jsxs14("span", { class: `${p16}-loading`, role: "status", children: [
|
|
5297
|
+
/* @__PURE__ */ jsx17("span", { class: `${p16}-loading-spinner`, "aria-hidden": "true" }),
|
|
5298
|
+
/* @__PURE__ */ jsx17("span", { class: `${p16}-loading-label`, children: label })
|
|
5204
5299
|
] });
|
|
5205
5300
|
}
|
|
5206
5301
|
|
|
5207
5302
|
// src/ui/message-list.tsx
|
|
5208
|
-
import { jsx as
|
|
5209
|
-
var
|
|
5303
|
+
import { jsx as jsx18, jsxs as jsxs15 } from "preact/jsx-runtime";
|
|
5304
|
+
var p17 = BRAND.cssPrefix;
|
|
5210
5305
|
var STICK_THRESHOLD = 120;
|
|
5211
5306
|
var INTERACTION_GRACE_MS = 350;
|
|
5212
5307
|
var DIVIDER_IDLE_MS = 1200;
|
|
@@ -5216,6 +5311,7 @@ function MessageList({
|
|
|
5216
5311
|
responseMode,
|
|
5217
5312
|
showReasoning,
|
|
5218
5313
|
showToolCalls,
|
|
5314
|
+
showSources,
|
|
5219
5315
|
loading,
|
|
5220
5316
|
idle,
|
|
5221
5317
|
tool,
|
|
@@ -5224,7 +5320,7 @@ function MessageList({
|
|
|
5224
5320
|
onFillForm
|
|
5225
5321
|
}) {
|
|
5226
5322
|
const ref = useRef5(null);
|
|
5227
|
-
const messages =
|
|
5323
|
+
const messages = useComputed6(() => messagesSig.value);
|
|
5228
5324
|
const [showJump, setShowJump] = useState6(false);
|
|
5229
5325
|
const [scrolling, setScrolling] = useState6(false);
|
|
5230
5326
|
const hasHydratedRef = useRef5(false);
|
|
@@ -5376,7 +5472,7 @@ function MessageList({
|
|
|
5376
5472
|
const pendingMarkers = [...formMarkers ?? []].toSorted(
|
|
5377
5473
|
(a, b) => (a.createdAt ?? Infinity) - (b.createdAt ?? Infinity)
|
|
5378
5474
|
);
|
|
5379
|
-
const markerRow = (marker) => /* @__PURE__ */
|
|
5475
|
+
const markerRow = (marker) => /* @__PURE__ */ jsx18(
|
|
5380
5476
|
FormDoneMarker,
|
|
5381
5477
|
{
|
|
5382
5478
|
marker,
|
|
@@ -5397,12 +5493,12 @@ function MessageList({
|
|
|
5397
5493
|
const day = dayKey(m.createdAt);
|
|
5398
5494
|
if (day && day !== prevDay) {
|
|
5399
5495
|
rows.push(
|
|
5400
|
-
/* @__PURE__ */
|
|
5496
|
+
/* @__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}`)
|
|
5401
5497
|
);
|
|
5402
5498
|
prevDay = day;
|
|
5403
5499
|
}
|
|
5404
5500
|
rows.push(
|
|
5405
|
-
/* @__PURE__ */
|
|
5501
|
+
/* @__PURE__ */ jsx18(
|
|
5406
5502
|
MessageBubble,
|
|
5407
5503
|
{
|
|
5408
5504
|
message: m,
|
|
@@ -5410,6 +5506,7 @@ function MessageList({
|
|
|
5410
5506
|
responseMode,
|
|
5411
5507
|
showReasoning,
|
|
5412
5508
|
showToolCalls,
|
|
5509
|
+
showSources,
|
|
5413
5510
|
interactive: Boolean(idle) && m.id === lastId,
|
|
5414
5511
|
tool
|
|
5415
5512
|
},
|
|
@@ -5420,33 +5517,33 @@ function MessageList({
|
|
|
5420
5517
|
for (const marker of pendingMarkers) {
|
|
5421
5518
|
rows.push(markerRow(marker));
|
|
5422
5519
|
}
|
|
5423
|
-
return /* @__PURE__ */
|
|
5424
|
-
/* @__PURE__ */
|
|
5520
|
+
return /* @__PURE__ */ jsxs15("div", { class: `${p17}-list-wrap`, children: [
|
|
5521
|
+
/* @__PURE__ */ jsxs15(
|
|
5425
5522
|
"div",
|
|
5426
5523
|
{
|
|
5427
5524
|
ref,
|
|
5428
|
-
class: `${
|
|
5525
|
+
class: `${p17}-list`,
|
|
5429
5526
|
role: "log",
|
|
5430
5527
|
"aria-live": "polite",
|
|
5431
5528
|
"aria-relevant": "additions text",
|
|
5432
5529
|
"data-scrolling": scrolling ? "true" : void 0,
|
|
5433
5530
|
children: [
|
|
5434
|
-
loading && messages.value.length === 0 ? /* @__PURE__ */
|
|
5531
|
+
loading && messages.value.length === 0 ? /* @__PURE__ */ jsx18("div", { class: `${p17}-list-loading`, role: "status", children: strings.conversationLoading }) : null,
|
|
5435
5532
|
rows,
|
|
5436
|
-
form ? /* @__PURE__ */
|
|
5533
|
+
form ? /* @__PURE__ */ jsx18(FormGate, { form: form.form, strings, onSubmit: form.onSubmit, onSkip: form.onSkip }) : null
|
|
5437
5534
|
]
|
|
5438
5535
|
}
|
|
5439
5536
|
),
|
|
5440
|
-
showJump ? /* @__PURE__ */
|
|
5537
|
+
showJump ? /* @__PURE__ */ jsx18(
|
|
5441
5538
|
"button",
|
|
5442
5539
|
{
|
|
5443
5540
|
type: "button",
|
|
5444
|
-
class: `${
|
|
5541
|
+
class: `${p17}-jump`,
|
|
5445
5542
|
onClick: jumpToBottom,
|
|
5446
5543
|
"aria-label": strings.scrollToBottom,
|
|
5447
5544
|
title: strings.scrollToBottom,
|
|
5448
5545
|
"data-testid": TID.scrollToBottom,
|
|
5449
|
-
children: /* @__PURE__ */
|
|
5546
|
+
children: /* @__PURE__ */ jsx18(ChevronDownIcon, {})
|
|
5450
5547
|
}
|
|
5451
5548
|
) : null
|
|
5452
5549
|
] });
|
|
@@ -5505,7 +5602,7 @@ function startOfDay(ms) {
|
|
|
5505
5602
|
}
|
|
5506
5603
|
|
|
5507
5604
|
// src/ui/conversation-list.tsx
|
|
5508
|
-
import { Fragment as Fragment3, jsx as
|
|
5605
|
+
import { Fragment as Fragment3, jsx as jsx19, jsxs as jsxs16 } from "preact/jsx-runtime";
|
|
5509
5606
|
var log12 = logger.scope("history");
|
|
5510
5607
|
var DEFAULT_SKELETON_ROWS = 3;
|
|
5511
5608
|
var MAX_SKELETON_ROWS = 6;
|
|
@@ -5532,7 +5629,7 @@ function ConversationList({
|
|
|
5532
5629
|
onSelect,
|
|
5533
5630
|
onNewConversation
|
|
5534
5631
|
}) {
|
|
5535
|
-
const
|
|
5632
|
+
const p35 = BRAND.cssPrefix;
|
|
5536
5633
|
const seed = transport.peekConversations({ visitorId });
|
|
5537
5634
|
const [state, setState] = useState7(seed ? "loaded" : "loading");
|
|
5538
5635
|
const [conversations, setChats] = useState7(seed?.conversations ?? []);
|
|
@@ -5553,32 +5650,32 @@ function ConversationList({
|
|
|
5553
5650
|
cancelled = true;
|
|
5554
5651
|
};
|
|
5555
5652
|
}, [transport, visitorId, persistence]);
|
|
5556
|
-
const newChatButton = onNewConversation ? /* @__PURE__ */
|
|
5653
|
+
const newChatButton = onNewConversation ? /* @__PURE__ */ jsx19("div", { class: `${p35}-history-footer`, children: /* @__PURE__ */ jsxs16(
|
|
5557
5654
|
"button",
|
|
5558
5655
|
{
|
|
5559
5656
|
type: "button",
|
|
5560
|
-
class: `${
|
|
5657
|
+
class: `${p35}-history-new`,
|
|
5561
5658
|
onClick: onNewConversation,
|
|
5562
5659
|
"data-testid": TID.sidebarNewConversation,
|
|
5563
5660
|
children: [
|
|
5564
|
-
/* @__PURE__ */
|
|
5661
|
+
/* @__PURE__ */ jsx19(PlusIcon, {}),
|
|
5565
5662
|
strings.newConversation
|
|
5566
5663
|
]
|
|
5567
5664
|
}
|
|
5568
5665
|
) }) : null;
|
|
5569
5666
|
if (state === "loading") {
|
|
5570
5667
|
const rows = Math.min(persistence.loadHistoryCount() ?? DEFAULT_SKELETON_ROWS, MAX_SKELETON_ROWS);
|
|
5571
|
-
return /* @__PURE__ */
|
|
5572
|
-
/* @__PURE__ */
|
|
5573
|
-
/* @__PURE__ */
|
|
5574
|
-
/* @__PURE__ */
|
|
5575
|
-
/* @__PURE__ */
|
|
5576
|
-
/* @__PURE__ */
|
|
5577
|
-
/* @__PURE__ */
|
|
5578
|
-
/* @__PURE__ */
|
|
5579
|
-
/* @__PURE__ */
|
|
5668
|
+
return /* @__PURE__ */ jsxs16(Fragment3, { children: [
|
|
5669
|
+
/* @__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: [
|
|
5670
|
+
/* @__PURE__ */ jsx19("div", { class: `${p35}-history-heading`, children: /* @__PURE__ */ jsx19("span", { class: `${p35}-skeleton ${p35}-skeleton-heading` }) }),
|
|
5671
|
+
/* @__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: [
|
|
5672
|
+
/* @__PURE__ */ jsx19("span", { class: `${p35}-history-avatar ${p35}-skeleton` }),
|
|
5673
|
+
/* @__PURE__ */ jsxs16("span", { class: `${p35}-history-body`, children: [
|
|
5674
|
+
/* @__PURE__ */ jsxs16("span", { class: `${p35}-history-row`, children: [
|
|
5675
|
+
/* @__PURE__ */ jsx19("span", { class: `${p35}-history-title`, children: /* @__PURE__ */ jsx19("span", { class: `${p35}-skeleton ${p35}-skeleton-title` }) }),
|
|
5676
|
+
/* @__PURE__ */ jsx19("span", { class: `${p35}-history-time`, children: /* @__PURE__ */ jsx19("span", { class: `${p35}-skeleton ${p35}-skeleton-time` }) })
|
|
5580
5677
|
] }),
|
|
5581
|
-
/* @__PURE__ */
|
|
5678
|
+
/* @__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` }) }) })
|
|
5582
5679
|
] })
|
|
5583
5680
|
] }, i)) })
|
|
5584
5681
|
] }) }),
|
|
@@ -5586,36 +5683,36 @@ function ConversationList({
|
|
|
5586
5683
|
] });
|
|
5587
5684
|
}
|
|
5588
5685
|
if (state === "error" || conversations.length === 0) {
|
|
5589
|
-
return /* @__PURE__ */
|
|
5590
|
-
/* @__PURE__ */
|
|
5686
|
+
return /* @__PURE__ */ jsxs16(Fragment3, { children: [
|
|
5687
|
+
/* @__PURE__ */ jsx19("div", { class: `${p35}-history-empty`, children: strings.historyEmpty }),
|
|
5591
5688
|
newChatButton
|
|
5592
5689
|
] });
|
|
5593
5690
|
}
|
|
5594
5691
|
const now = Date.now();
|
|
5595
5692
|
const groups = groupByBucket(now, conversations);
|
|
5596
|
-
return /* @__PURE__ */
|
|
5597
|
-
/* @__PURE__ */
|
|
5598
|
-
/* @__PURE__ */
|
|
5599
|
-
/* @__PURE__ */
|
|
5693
|
+
return /* @__PURE__ */ jsxs16(Fragment3, { children: [
|
|
5694
|
+
/* @__PURE__ */ jsx19("div", { class: `${p35}-history`, role: "list", children: groups.map((group) => /* @__PURE__ */ jsxs16("div", { class: `${p35}-history-group`, children: [
|
|
5695
|
+
/* @__PURE__ */ jsx19("div", { class: `${p35}-history-heading`, children: strings[BUCKET_TO_STRING[group.bucket]] }),
|
|
5696
|
+
/* @__PURE__ */ jsx19("div", { class: `${p35}-history-card`, children: group.conversations.map((chat) => /* @__PURE__ */ jsxs16(
|
|
5600
5697
|
"button",
|
|
5601
5698
|
{
|
|
5602
5699
|
type: "button",
|
|
5603
5700
|
role: "listitem",
|
|
5604
|
-
class: `${
|
|
5701
|
+
class: `${p35}-history-item`,
|
|
5605
5702
|
onClick: () => onSelect(chat),
|
|
5606
5703
|
"data-closed": chat.canContinue ? void 0 : "true",
|
|
5607
5704
|
"data-unread": (chat.unreadCount ?? 0) > 0 ? "true" : void 0,
|
|
5608
5705
|
"data-testid": tid(TID.historyItem, chat.conversationId),
|
|
5609
5706
|
children: [
|
|
5610
|
-
/* @__PURE__ */
|
|
5611
|
-
/* @__PURE__ */
|
|
5612
|
-
/* @__PURE__ */
|
|
5613
|
-
/* @__PURE__ */
|
|
5614
|
-
/* @__PURE__ */
|
|
5707
|
+
/* @__PURE__ */ jsx19("span", { class: `${p35}-history-avatar`, "aria-hidden": "true", children: /* @__PURE__ */ jsx19(MessageIcon, {}) }),
|
|
5708
|
+
/* @__PURE__ */ jsxs16("span", { class: `${p35}-history-body`, children: [
|
|
5709
|
+
/* @__PURE__ */ jsxs16("span", { class: `${p35}-history-row`, children: [
|
|
5710
|
+
/* @__PURE__ */ jsx19("span", { class: `${p35}-history-title`, children: chat.title }),
|
|
5711
|
+
/* @__PURE__ */ jsx19("span", { class: `${p35}-history-time`, children: rowTime(chat.lastMessageAt, now, locale) })
|
|
5615
5712
|
] }),
|
|
5616
|
-
/* @__PURE__ */
|
|
5617
|
-
/* @__PURE__ */
|
|
5618
|
-
(chat.unreadCount ?? 0) > 0 ? /* @__PURE__ */
|
|
5713
|
+
/* @__PURE__ */ jsxs16("span", { class: `${p35}-history-row`, children: [
|
|
5714
|
+
/* @__PURE__ */ jsx19("span", { class: `${p35}-history-preview`, children: chat.preview ?? (chat.canContinue ? strings.historyContinue : strings.conversationClosed) }),
|
|
5715
|
+
(chat.unreadCount ?? 0) > 0 ? /* @__PURE__ */ jsx19("span", { class: `${p35}-history-dot` }) : null
|
|
5619
5716
|
] })
|
|
5620
5717
|
] })
|
|
5621
5718
|
]
|
|
@@ -5628,15 +5725,15 @@ function ConversationList({
|
|
|
5628
5725
|
}
|
|
5629
5726
|
|
|
5630
5727
|
// src/ui/suggestions.tsx
|
|
5631
|
-
import { jsx as
|
|
5632
|
-
var
|
|
5728
|
+
import { jsx as jsx20 } from "preact/jsx-runtime";
|
|
5729
|
+
var p18 = BRAND.cssPrefix;
|
|
5633
5730
|
function Suggestions({ suggestions, onPick }) {
|
|
5634
5731
|
if (suggestions.length === 0) return null;
|
|
5635
|
-
return /* @__PURE__ */
|
|
5732
|
+
return /* @__PURE__ */ jsx20("div", { class: `${p18}-suggestions`, role: "group", "aria-label": "Suggested replies", children: suggestions.map((s, i) => /* @__PURE__ */ jsx20(
|
|
5636
5733
|
"button",
|
|
5637
5734
|
{
|
|
5638
5735
|
type: "button",
|
|
5639
|
-
class: `${
|
|
5736
|
+
class: `${p18}-suggestion`,
|
|
5640
5737
|
onClick: () => onPick(s),
|
|
5641
5738
|
"data-testid": tid(TID.suggestion, i),
|
|
5642
5739
|
children: s.label
|
|
@@ -5646,8 +5743,8 @@ function Suggestions({ suggestions, onPick }) {
|
|
|
5646
5743
|
}
|
|
5647
5744
|
|
|
5648
5745
|
// src/ui/panel.tsx
|
|
5649
|
-
import { Fragment as Fragment4, jsx as
|
|
5650
|
-
var
|
|
5746
|
+
import { Fragment as Fragment4, jsx as jsx21, jsxs as jsxs17 } from "preact/jsx-runtime";
|
|
5747
|
+
var p19 = BRAND.cssPrefix;
|
|
5651
5748
|
function Panel(props2) {
|
|
5652
5749
|
const { options, onClose } = props2;
|
|
5653
5750
|
const s = options.strings;
|
|
@@ -5671,18 +5768,18 @@ function Panel(props2) {
|
|
|
5671
5768
|
}, []);
|
|
5672
5769
|
const { visible: dragOver } = useFileDrop({ containerRef, onDrop: onDropItems });
|
|
5673
5770
|
useDragMove(containerRef.current, options.mode === "modal");
|
|
5674
|
-
return /* @__PURE__ */
|
|
5771
|
+
return /* @__PURE__ */ jsxs17(
|
|
5675
5772
|
"div",
|
|
5676
5773
|
{
|
|
5677
5774
|
ref: containerRef,
|
|
5678
|
-
class: `${
|
|
5775
|
+
class: `${p19}-panel`,
|
|
5679
5776
|
role: "dialog",
|
|
5680
5777
|
"aria-modal": "false",
|
|
5681
5778
|
"aria-label": s.panelTitle,
|
|
5682
5779
|
style: { position: "relative" },
|
|
5683
5780
|
"data-testid": TID.panel,
|
|
5684
5781
|
children: [
|
|
5685
|
-
/* @__PURE__ */
|
|
5782
|
+
/* @__PURE__ */ jsx21(
|
|
5686
5783
|
PanelContent,
|
|
5687
5784
|
{
|
|
5688
5785
|
...props2,
|
|
@@ -5691,7 +5788,7 @@ function Panel(props2) {
|
|
|
5691
5788
|
composerAttachApiRef
|
|
5692
5789
|
}
|
|
5693
5790
|
),
|
|
5694
|
-
/* @__PURE__ */
|
|
5791
|
+
/* @__PURE__ */ jsx21(PoweredByBar, { poweredBy: props2.options.poweredBy })
|
|
5695
5792
|
]
|
|
5696
5793
|
}
|
|
5697
5794
|
);
|
|
@@ -5738,9 +5835,9 @@ function PanelContent(props2) {
|
|
|
5738
5835
|
if (activeForm) {
|
|
5739
5836
|
composerArea = null;
|
|
5740
5837
|
} else if (canSend) {
|
|
5741
|
-
composerArea = /* @__PURE__ */
|
|
5742
|
-
/* @__PURE__ */
|
|
5743
|
-
/* @__PURE__ */
|
|
5838
|
+
composerArea = /* @__PURE__ */ jsxs17(Fragment4, { children: [
|
|
5839
|
+
/* @__PURE__ */ jsx21(Suggestions, { suggestions, onPick: onSuggestion }),
|
|
5840
|
+
/* @__PURE__ */ jsx21(
|
|
5744
5841
|
Composer,
|
|
5745
5842
|
{
|
|
5746
5843
|
options,
|
|
@@ -5755,10 +5852,10 @@ function PanelContent(props2) {
|
|
|
5755
5852
|
)
|
|
5756
5853
|
] });
|
|
5757
5854
|
} else {
|
|
5758
|
-
composerArea = /* @__PURE__ */
|
|
5855
|
+
composerArea = /* @__PURE__ */ jsx21(ReadOnlyBanner, { label: s.conversationClosed, ctaLabel: s.startNewConversation, onNewConversation: onClear });
|
|
5759
5856
|
}
|
|
5760
|
-
return /* @__PURE__ */
|
|
5761
|
-
view === "history" ? /* @__PURE__ */
|
|
5857
|
+
return /* @__PURE__ */ jsxs17(Fragment4, { children: [
|
|
5858
|
+
view === "history" ? /* @__PURE__ */ jsx21(
|
|
5762
5859
|
HistoryHeader,
|
|
5763
5860
|
{
|
|
5764
5861
|
strings: s,
|
|
@@ -5766,22 +5863,22 @@ function PanelContent(props2) {
|
|
|
5766
5863
|
onClose,
|
|
5767
5864
|
showClose: canShowClose(options.mode, panelSize, options.actions)
|
|
5768
5865
|
}
|
|
5769
|
-
) : /* @__PURE__ */
|
|
5770
|
-
onBack ? /* @__PURE__ */
|
|
5866
|
+
) : /* @__PURE__ */ jsxs17("header", { class: `${p19}-header`, "data-testid": TID.panelHeader, children: [
|
|
5867
|
+
onBack ? /* @__PURE__ */ jsx21(
|
|
5771
5868
|
"button",
|
|
5772
5869
|
{
|
|
5773
5870
|
type: "button",
|
|
5774
|
-
class: `${
|
|
5871
|
+
class: `${p19}-icon-btn`,
|
|
5775
5872
|
onClick: onBack,
|
|
5776
5873
|
"aria-label": s.moduleBack,
|
|
5777
5874
|
title: s.moduleBack,
|
|
5778
|
-
children: /* @__PURE__ */
|
|
5875
|
+
children: /* @__PURE__ */ jsx21(BackIcon, {})
|
|
5779
5876
|
}
|
|
5780
5877
|
) : null,
|
|
5781
|
-
agent ? /* @__PURE__ */
|
|
5782
|
-
/* @__PURE__ */
|
|
5878
|
+
agent ? /* @__PURE__ */ jsx21(AgentBadge, { agent, strings: s }) : /* @__PURE__ */ jsx21("h1", { children: s.panelTitle }),
|
|
5879
|
+
/* @__PURE__ */ jsx21(HeaderActions, { panelProps: props2, variant: "chat" })
|
|
5783
5880
|
] }),
|
|
5784
|
-
view === "history" ? /* @__PURE__ */
|
|
5881
|
+
view === "history" ? /* @__PURE__ */ jsx21(
|
|
5785
5882
|
ConversationList,
|
|
5786
5883
|
{
|
|
5787
5884
|
transport,
|
|
@@ -5792,9 +5889,9 @@ function PanelContent(props2) {
|
|
|
5792
5889
|
onSelect: (conversation) => onSelectHistoryConversation(conversation.conversationId),
|
|
5793
5890
|
onNewConversation
|
|
5794
5891
|
}
|
|
5795
|
-
) : /* @__PURE__ */
|
|
5796
|
-
/* @__PURE__ */
|
|
5797
|
-
/* @__PURE__ */
|
|
5892
|
+
) : /* @__PURE__ */ jsxs17(Fragment4, { children: [
|
|
5893
|
+
/* @__PURE__ */ jsx21(DropZone, { visible: dragOver, strings: s }),
|
|
5894
|
+
/* @__PURE__ */ jsx21(
|
|
5798
5895
|
MessageList,
|
|
5799
5896
|
{
|
|
5800
5897
|
messagesSig,
|
|
@@ -5802,6 +5899,7 @@ function PanelContent(props2) {
|
|
|
5802
5899
|
responseMode: options.responseMode,
|
|
5803
5900
|
showReasoning: options.showReasoning,
|
|
5804
5901
|
showToolCalls: options.showToolCalls,
|
|
5902
|
+
showSources: options.showSources,
|
|
5805
5903
|
loading: loadingMessages,
|
|
5806
5904
|
idle: !isStreaming,
|
|
5807
5905
|
tool,
|
|
@@ -5811,9 +5909,9 @@ function PanelContent(props2) {
|
|
|
5811
5909
|
}
|
|
5812
5910
|
),
|
|
5813
5911
|
composerArea,
|
|
5814
|
-
/* @__PURE__ */
|
|
5912
|
+
/* @__PURE__ */ jsx21(ComposerFooter, { disclaimer: options.composerDisclaimer })
|
|
5815
5913
|
] }),
|
|
5816
|
-
options.size.resize?.enabled ? /* @__PURE__ */
|
|
5914
|
+
options.size.resize?.enabled ? /* @__PURE__ */ jsx21(
|
|
5817
5915
|
ResizeGrip,
|
|
5818
5916
|
{
|
|
5819
5917
|
panelEl: containerEl,
|
|
@@ -5832,28 +5930,28 @@ function HistoryHeader({
|
|
|
5832
5930
|
onClose,
|
|
5833
5931
|
showClose
|
|
5834
5932
|
}) {
|
|
5835
|
-
return /* @__PURE__ */
|
|
5836
|
-
/* @__PURE__ */
|
|
5933
|
+
return /* @__PURE__ */ jsxs17("header", { class: `${p19}-header`, children: [
|
|
5934
|
+
/* @__PURE__ */ jsx21(
|
|
5837
5935
|
"button",
|
|
5838
5936
|
{
|
|
5839
5937
|
type: "button",
|
|
5840
|
-
class: `${
|
|
5938
|
+
class: `${p19}-icon-btn`,
|
|
5841
5939
|
onClick: onBack,
|
|
5842
5940
|
"aria-label": strings.historyBack,
|
|
5843
5941
|
title: strings.historyBack,
|
|
5844
|
-
children: /* @__PURE__ */
|
|
5942
|
+
children: /* @__PURE__ */ jsx21(BackIcon, {})
|
|
5845
5943
|
}
|
|
5846
5944
|
),
|
|
5847
|
-
/* @__PURE__ */
|
|
5848
|
-
showClose ? /* @__PURE__ */
|
|
5945
|
+
/* @__PURE__ */ jsx21("h1", { children: strings.historyTitle }),
|
|
5946
|
+
showClose ? /* @__PURE__ */ jsx21(
|
|
5849
5947
|
"button",
|
|
5850
5948
|
{
|
|
5851
5949
|
type: "button",
|
|
5852
|
-
class: `${
|
|
5950
|
+
class: `${p19}-icon-btn`,
|
|
5853
5951
|
onClick: onClose,
|
|
5854
5952
|
"aria-label": strings.close,
|
|
5855
5953
|
title: strings.close,
|
|
5856
|
-
children: /* @__PURE__ */
|
|
5954
|
+
children: /* @__PURE__ */ jsx21(CloseIcon, {})
|
|
5857
5955
|
}
|
|
5858
5956
|
) : null
|
|
5859
5957
|
] });
|
|
@@ -5863,28 +5961,28 @@ function ReadOnlyBanner({
|
|
|
5863
5961
|
ctaLabel,
|
|
5864
5962
|
onNewConversation
|
|
5865
5963
|
}) {
|
|
5866
|
-
return /* @__PURE__ */
|
|
5867
|
-
/* @__PURE__ */
|
|
5868
|
-
/* @__PURE__ */
|
|
5964
|
+
return /* @__PURE__ */ jsxs17("div", { class: `${p19}-readonly-banner`, role: "note", children: [
|
|
5965
|
+
/* @__PURE__ */ jsx21("span", { class: `${p19}-readonly-label`, children: label }),
|
|
5966
|
+
/* @__PURE__ */ jsx21("button", { type: "button", class: `${p19}-readonly-cta`, onClick: onNewConversation, children: ctaLabel })
|
|
5869
5967
|
] });
|
|
5870
5968
|
}
|
|
5871
5969
|
function ComposerFooter({ disclaimer }) {
|
|
5872
5970
|
if (!disclaimer) return null;
|
|
5873
|
-
return /* @__PURE__ */
|
|
5971
|
+
return /* @__PURE__ */ jsx21("div", { class: `${p19}-composer-footer`, children: /* @__PURE__ */ jsx21("div", { class: `${p19}-disclaimer`, children: disclaimer }) });
|
|
5874
5972
|
}
|
|
5875
5973
|
function PoweredByBar({ poweredBy }) {
|
|
5876
5974
|
if (!poweredBy) return null;
|
|
5877
|
-
return /* @__PURE__ */
|
|
5975
|
+
return /* @__PURE__ */ jsx21("div", { class: `${p19}-poweredby-bar`, children: /* @__PURE__ */ jsx21(PoweredBy, { logoUrl: poweredBy.logoUrl, text: poweredBy.text, href: poweredBy.href }) });
|
|
5878
5976
|
}
|
|
5879
5977
|
function PoweredBy({ logoUrl, text, href }) {
|
|
5880
|
-
const inner = /* @__PURE__ */
|
|
5881
|
-
logoUrl ? /* @__PURE__ */
|
|
5882
|
-
text ? /* @__PURE__ */
|
|
5978
|
+
const inner = /* @__PURE__ */ jsxs17(Fragment4, { children: [
|
|
5979
|
+
logoUrl ? /* @__PURE__ */ jsx21("img", { class: `${p19}-poweredby-logo`, src: logoUrl, alt: "", loading: "lazy" }) : null,
|
|
5980
|
+
text ? /* @__PURE__ */ jsx21("span", { children: text }) : null
|
|
5883
5981
|
] });
|
|
5884
5982
|
if (href) {
|
|
5885
|
-
return /* @__PURE__ */
|
|
5983
|
+
return /* @__PURE__ */ jsx21("a", { class: `${p19}-poweredby`, href, target: "_blank", rel: "noopener noreferrer", children: inner });
|
|
5886
5984
|
}
|
|
5887
|
-
return /* @__PURE__ */
|
|
5985
|
+
return /* @__PURE__ */ jsx21("span", { class: `${p19}-poweredby`, children: inner });
|
|
5888
5986
|
}
|
|
5889
5987
|
|
|
5890
5988
|
// src/ui/form/form-controller.ts
|
|
@@ -5967,34 +6065,34 @@ function whenPasses(form, d) {
|
|
|
5967
6065
|
}
|
|
5968
6066
|
|
|
5969
6067
|
// src/ui/sidebar.tsx
|
|
5970
|
-
import { Fragment as Fragment5, jsx as
|
|
6068
|
+
import { Fragment as Fragment5, jsx as jsx22, jsxs as jsxs18 } from "preact/jsx-runtime";
|
|
5971
6069
|
function Sidebar(props2) {
|
|
5972
|
-
const
|
|
6070
|
+
const p35 = BRAND.cssPrefix;
|
|
5973
6071
|
const { site, blocks, strings, collapsed } = props2;
|
|
5974
6072
|
const navigation = blocks?.navigation ?? [];
|
|
5975
6073
|
const linkCards = blocks?.linkCards ?? [];
|
|
5976
6074
|
const toggleLabel = collapsed ? strings.expandSidebar : strings.collapseSidebar;
|
|
5977
|
-
return /* @__PURE__ */
|
|
5978
|
-
/* @__PURE__ */
|
|
5979
|
-
/* @__PURE__ */
|
|
5980
|
-
/* @__PURE__ */
|
|
6075
|
+
return /* @__PURE__ */ jsxs18("aside", { class: `${p35}-sidebar`, "data-collapsed": collapsed ? "true" : "false", "data-testid": TID.sidebar, children: [
|
|
6076
|
+
/* @__PURE__ */ jsxs18("div", { class: `${p35}-sidebar-header`, children: [
|
|
6077
|
+
/* @__PURE__ */ jsx22(SidebarBrand, { site }),
|
|
6078
|
+
/* @__PURE__ */ jsx22(
|
|
5981
6079
|
"button",
|
|
5982
6080
|
{
|
|
5983
6081
|
type: "button",
|
|
5984
|
-
class: `${
|
|
6082
|
+
class: `${p35}-sidebar-toggle`,
|
|
5985
6083
|
"aria-label": toggleLabel,
|
|
5986
6084
|
"aria-expanded": collapsed ? "false" : "true",
|
|
5987
6085
|
title: toggleLabel,
|
|
5988
6086
|
onClick: props2.onToggleCollapsed,
|
|
5989
6087
|
"data-testid": TID.sidebarToggle,
|
|
5990
|
-
children: /* @__PURE__ */
|
|
6088
|
+
children: /* @__PURE__ */ jsx22(SidebarToggleIcon, { collapsed })
|
|
5991
6089
|
}
|
|
5992
6090
|
)
|
|
5993
6091
|
] }),
|
|
5994
|
-
collapsed ? null : /* @__PURE__ */
|
|
5995
|
-
navigation.length > 0 ? /* @__PURE__ */
|
|
5996
|
-
linkCards.length > 0 ? /* @__PURE__ */
|
|
5997
|
-
props2.showConversations ? /* @__PURE__ */
|
|
6092
|
+
collapsed ? null : /* @__PURE__ */ jsxs18(Fragment5, { children: [
|
|
6093
|
+
navigation.length > 0 ? /* @__PURE__ */ jsx22("nav", { class: `${p35}-sidebar-section`, "data-section": "navigation", children: /* @__PURE__ */ jsx22(SidebarNav, { items: navigation }) }) : null,
|
|
6094
|
+
linkCards.length > 0 ? /* @__PURE__ */ jsx22("div", { class: `${p35}-sidebar-section`, "data-section": "link-cards", children: /* @__PURE__ */ jsx22(SidebarCards, { items: linkCards }) }) : null,
|
|
6095
|
+
props2.showConversations ? /* @__PURE__ */ jsx22("div", { class: `${p35}-sidebar-conversations`, children: /* @__PURE__ */ jsx22(
|
|
5998
6096
|
ConversationList,
|
|
5999
6097
|
{
|
|
6000
6098
|
transport: props2.transport,
|
|
@@ -6010,18 +6108,18 @@ function Sidebar(props2) {
|
|
|
6010
6108
|
] });
|
|
6011
6109
|
}
|
|
6012
6110
|
function SidebarBrand({ site }) {
|
|
6013
|
-
const
|
|
6111
|
+
const p35 = BRAND.cssPrefix;
|
|
6014
6112
|
if (site?.logo?.url) {
|
|
6015
6113
|
const alt = site.logo.alt ?? site.title ?? "Logo";
|
|
6016
|
-
return /* @__PURE__ */
|
|
6017
|
-
site.logoDark?.url ? /* @__PURE__ */
|
|
6018
|
-
/* @__PURE__ */
|
|
6114
|
+
return /* @__PURE__ */ jsxs18("picture", { children: [
|
|
6115
|
+
site.logoDark?.url ? /* @__PURE__ */ jsx22("source", { srcset: site.logoDark.url, media: "(prefers-color-scheme: dark)" }) : null,
|
|
6116
|
+
/* @__PURE__ */ jsx22("img", { class: `${p35}-sidebar-logo`, src: site.logo.url, alt })
|
|
6019
6117
|
] });
|
|
6020
6118
|
}
|
|
6021
|
-
return /* @__PURE__ */
|
|
6119
|
+
return /* @__PURE__ */ jsx22("div", { class: `${p35}-sidebar-title`, children: site?.title ?? BRAND.name });
|
|
6022
6120
|
}
|
|
6023
6121
|
function SidebarToggleIcon({ collapsed }) {
|
|
6024
|
-
return /* @__PURE__ */
|
|
6122
|
+
return /* @__PURE__ */ jsx22(
|
|
6025
6123
|
"svg",
|
|
6026
6124
|
{
|
|
6027
6125
|
width: "16",
|
|
@@ -6031,38 +6129,38 @@ function SidebarToggleIcon({ collapsed }) {
|
|
|
6031
6129
|
stroke: "currentColor",
|
|
6032
6130
|
"stroke-width": "2",
|
|
6033
6131
|
"aria-hidden": "true",
|
|
6034
|
-
children: collapsed ? /* @__PURE__ */
|
|
6132
|
+
children: collapsed ? /* @__PURE__ */ jsx22("polyline", { points: "9 6 15 12 9 18" }) : /* @__PURE__ */ jsx22("polyline", { points: "15 6 9 12 15 18" })
|
|
6035
6133
|
}
|
|
6036
6134
|
);
|
|
6037
6135
|
}
|
|
6038
6136
|
function SidebarNav({ items }) {
|
|
6039
|
-
const
|
|
6040
|
-
return /* @__PURE__ */
|
|
6137
|
+
const p35 = BRAND.cssPrefix;
|
|
6138
|
+
return /* @__PURE__ */ jsx22("ul", { class: `${p35}-sidebar-nav`, children: items.map((item) => /* @__PURE__ */ jsx22("li", { children: /* @__PURE__ */ jsxs18(
|
|
6041
6139
|
"a",
|
|
6042
6140
|
{
|
|
6043
|
-
class: `${
|
|
6141
|
+
class: `${p35}-sidebar-nav-item`,
|
|
6044
6142
|
href: item.href,
|
|
6045
6143
|
target: item.href ? "_blank" : void 0,
|
|
6046
6144
|
rel: item.href ? "noreferrer" : void 0,
|
|
6047
6145
|
children: [
|
|
6048
|
-
item.icon ? /* @__PURE__ */
|
|
6049
|
-
/* @__PURE__ */
|
|
6146
|
+
item.icon ? /* @__PURE__ */ jsx22("span", { class: `${p35}-sidebar-nav-icon`, "data-icon": item.icon }) : null,
|
|
6147
|
+
/* @__PURE__ */ jsx22("span", { class: `${p35}-sidebar-nav-label`, children: item.label })
|
|
6050
6148
|
]
|
|
6051
6149
|
}
|
|
6052
6150
|
) }, item.id ?? item.label)) });
|
|
6053
6151
|
}
|
|
6054
6152
|
function SidebarCards({ items }) {
|
|
6055
|
-
const
|
|
6056
|
-
return /* @__PURE__ */
|
|
6153
|
+
const p35 = BRAND.cssPrefix;
|
|
6154
|
+
return /* @__PURE__ */ jsx22("div", { class: `${p35}-sidebar-cards`, children: items.map((item) => /* @__PURE__ */ jsxs18(
|
|
6057
6155
|
"a",
|
|
6058
6156
|
{
|
|
6059
|
-
class: `${
|
|
6157
|
+
class: `${p35}-sidebar-card`,
|
|
6060
6158
|
href: item.href,
|
|
6061
6159
|
target: item.href ? "_blank" : void 0,
|
|
6062
6160
|
rel: item.href ? "noreferrer" : void 0,
|
|
6063
6161
|
children: [
|
|
6064
|
-
/* @__PURE__ */
|
|
6065
|
-
item.description ? /* @__PURE__ */
|
|
6162
|
+
/* @__PURE__ */ jsx22("div", { class: `${p35}-sidebar-card-label`, children: item.label }),
|
|
6163
|
+
item.description ? /* @__PURE__ */ jsx22("div", { class: `${p35}-sidebar-card-desc`, children: item.description }) : null
|
|
6066
6164
|
]
|
|
6067
6165
|
},
|
|
6068
6166
|
item.id ?? item.label
|
|
@@ -6070,11 +6168,11 @@ function SidebarCards({ items }) {
|
|
|
6070
6168
|
}
|
|
6071
6169
|
|
|
6072
6170
|
// src/ui/page-shell.tsx
|
|
6073
|
-
import { jsx as
|
|
6074
|
-
var
|
|
6171
|
+
import { jsx as jsx23, jsxs as jsxs19 } from "preact/jsx-runtime";
|
|
6172
|
+
var p20 = BRAND.cssPrefix;
|
|
6075
6173
|
function PageShell(props2) {
|
|
6076
|
-
return /* @__PURE__ */
|
|
6077
|
-
/* @__PURE__ */
|
|
6174
|
+
return /* @__PURE__ */ jsxs19("main", { class: `${p20}-page-shell`, "data-sidebar-collapsed": props2.sidebarCollapsed ? "true" : "false", children: [
|
|
6175
|
+
/* @__PURE__ */ jsx23(
|
|
6078
6176
|
Sidebar,
|
|
6079
6177
|
{
|
|
6080
6178
|
site: props2.site,
|
|
@@ -6091,7 +6189,7 @@ function PageShell(props2) {
|
|
|
6091
6189
|
onToggleCollapsed: props2.onToggleSidebarCollapsed
|
|
6092
6190
|
}
|
|
6093
6191
|
),
|
|
6094
|
-
/* @__PURE__ */
|
|
6192
|
+
/* @__PURE__ */ jsx23("section", { class: `${p20}-page-chat`, "aria-label": "Chat", children: props2.children })
|
|
6095
6193
|
] });
|
|
6096
6194
|
}
|
|
6097
6195
|
|
|
@@ -6129,7 +6227,7 @@ var atTabRoot = (s) => activeStack(s).length === 0;
|
|
|
6129
6227
|
|
|
6130
6228
|
// src/ui/messenger-home.tsx
|
|
6131
6229
|
import { useCallback as useCallback4, useEffect as useEffect14, useRef as useRef8 } from "preact/hooks";
|
|
6132
|
-
import { useComputed as
|
|
6230
|
+
import { useComputed as useComputed7 } from "@preact/signals";
|
|
6133
6231
|
|
|
6134
6232
|
// src/ui/modules/chat.tsx
|
|
6135
6233
|
var chatLayout = {
|
|
@@ -6141,80 +6239,80 @@ var chatLayout = {
|
|
|
6141
6239
|
import { useEffect as useEffect10, useMemo as useMemo2, useState as useState8 } from "preact/hooks";
|
|
6142
6240
|
|
|
6143
6241
|
// src/ui/back-header.tsx
|
|
6144
|
-
import { jsx as
|
|
6145
|
-
var
|
|
6242
|
+
import { jsx as jsx24, jsxs as jsxs20 } from "preact/jsx-runtime";
|
|
6243
|
+
var p21 = BRAND.cssPrefix;
|
|
6146
6244
|
function TitleBar({ title, actions }) {
|
|
6147
|
-
return /* @__PURE__ */
|
|
6148
|
-
/* @__PURE__ */
|
|
6149
|
-
/* @__PURE__ */
|
|
6150
|
-
actions ?? /* @__PURE__ */
|
|
6245
|
+
return /* @__PURE__ */ jsxs20("header", { class: `${p21}-back-header`, "data-variant": "title", children: [
|
|
6246
|
+
/* @__PURE__ */ jsx24("span", { class: `${p21}-back-spacer`, "aria-hidden": "true" }),
|
|
6247
|
+
/* @__PURE__ */ jsx24("h1", { class: `${p21}-back-title`, children: title }),
|
|
6248
|
+
actions ?? /* @__PURE__ */ jsx24("span", { class: `${p21}-back-spacer`, "aria-hidden": "true" })
|
|
6151
6249
|
] });
|
|
6152
6250
|
}
|
|
6153
6251
|
function BackHeader({ title, backLabel, onBack, actions, testid }) {
|
|
6154
|
-
return /* @__PURE__ */
|
|
6155
|
-
/* @__PURE__ */
|
|
6156
|
-
/* @__PURE__ */
|
|
6157
|
-
actions ?? /* @__PURE__ */
|
|
6252
|
+
return /* @__PURE__ */ jsxs20("header", { class: `${p21}-back-header`, "data-testid": testid, children: [
|
|
6253
|
+
/* @__PURE__ */ jsx24("button", { type: "button", class: `${p21}-icon-btn`, onClick: onBack, "aria-label": backLabel, title: backLabel, children: /* @__PURE__ */ jsx24(BackIcon, {}) }),
|
|
6254
|
+
/* @__PURE__ */ jsx24("h1", { class: `${p21}-back-title`, children: title }),
|
|
6255
|
+
actions ?? /* @__PURE__ */ jsx24("span", { class: `${p21}-back-spacer`, "aria-hidden": "true" })
|
|
6158
6256
|
] });
|
|
6159
6257
|
}
|
|
6160
6258
|
|
|
6161
6259
|
// src/ui/home-search.tsx
|
|
6162
|
-
import { jsx as
|
|
6163
|
-
var
|
|
6260
|
+
import { jsx as jsx25, jsxs as jsxs21 } from "preact/jsx-runtime";
|
|
6261
|
+
var p22 = BRAND.cssPrefix;
|
|
6164
6262
|
function HomeSearchButton({ placeholder, onActivate }) {
|
|
6165
|
-
return /* @__PURE__ */
|
|
6166
|
-
/* @__PURE__ */
|
|
6167
|
-
/* @__PURE__ */
|
|
6263
|
+
return /* @__PURE__ */ jsxs21("button", { type: "button", class: `${p22}-home-search`, onClick: onActivate, "data-testid": TID.homeSearch, children: [
|
|
6264
|
+
/* @__PURE__ */ jsx25("span", { class: `${p22}-home-search-text`, children: placeholder }),
|
|
6265
|
+
/* @__PURE__ */ jsx25("span", { class: `${p22}-home-search-icon`, "aria-hidden": "true", children: /* @__PURE__ */ jsx25(SearchIcon, {}) })
|
|
6168
6266
|
] });
|
|
6169
6267
|
}
|
|
6170
6268
|
function HelpSearchInput({ placeholder, value, onInput }) {
|
|
6171
|
-
return /* @__PURE__ */
|
|
6172
|
-
/* @__PURE__ */
|
|
6269
|
+
return /* @__PURE__ */ jsxs21("div", { class: `${p22}-home-search`, "data-input": "true", children: [
|
|
6270
|
+
/* @__PURE__ */ jsx25(
|
|
6173
6271
|
"input",
|
|
6174
6272
|
{
|
|
6175
6273
|
type: "search",
|
|
6176
|
-
class: `${
|
|
6274
|
+
class: `${p22}-home-search-input`,
|
|
6177
6275
|
placeholder,
|
|
6178
6276
|
value,
|
|
6179
6277
|
onInput: (e) => onInput(e.currentTarget.value),
|
|
6180
6278
|
"data-testid": TID.helpSearch
|
|
6181
6279
|
}
|
|
6182
6280
|
),
|
|
6183
|
-
/* @__PURE__ */
|
|
6281
|
+
/* @__PURE__ */ jsx25("span", { class: `${p22}-home-search-icon`, "aria-hidden": "true", children: /* @__PURE__ */ jsx25(SearchIcon, {}) })
|
|
6184
6282
|
] });
|
|
6185
6283
|
}
|
|
6186
6284
|
|
|
6187
6285
|
// src/ui/list-row.tsx
|
|
6188
|
-
import { jsx as
|
|
6189
|
-
var
|
|
6286
|
+
import { jsx as jsx26, jsxs as jsxs22 } from "preact/jsx-runtime";
|
|
6287
|
+
var p23 = BRAND.cssPrefix;
|
|
6190
6288
|
function ListRow({ title, subtitle, onClick, testid }) {
|
|
6191
|
-
return /* @__PURE__ */
|
|
6192
|
-
/* @__PURE__ */
|
|
6193
|
-
/* @__PURE__ */
|
|
6194
|
-
subtitle ? /* @__PURE__ */
|
|
6289
|
+
return /* @__PURE__ */ jsxs22("button", { type: "button", class: `${p23}-list-row`, onClick, "data-testid": testid, children: [
|
|
6290
|
+
/* @__PURE__ */ jsxs22("span", { class: `${p23}-list-row-body`, children: [
|
|
6291
|
+
/* @__PURE__ */ jsx26("span", { class: `${p23}-list-row-title`, children: title }),
|
|
6292
|
+
subtitle ? /* @__PURE__ */ jsx26("span", { class: `${p23}-list-row-sub`, children: subtitle }) : null
|
|
6195
6293
|
] }),
|
|
6196
|
-
/* @__PURE__ */
|
|
6294
|
+
/* @__PURE__ */ jsx26("span", { class: `${p23}-list-row-chevron`, "aria-hidden": "true", children: /* @__PURE__ */ jsx26(ChevronRightIcon, {}) })
|
|
6197
6295
|
] });
|
|
6198
6296
|
}
|
|
6199
6297
|
|
|
6200
6298
|
// src/ui/module-state.tsx
|
|
6201
|
-
import { jsx as
|
|
6202
|
-
var
|
|
6299
|
+
import { jsx as jsx27, jsxs as jsxs23 } from "preact/jsx-runtime";
|
|
6300
|
+
var p24 = BRAND.cssPrefix;
|
|
6203
6301
|
function ModuleState({
|
|
6204
6302
|
tone = "info",
|
|
6205
6303
|
message,
|
|
6206
6304
|
onRetry,
|
|
6207
6305
|
strings
|
|
6208
6306
|
}) {
|
|
6209
|
-
return /* @__PURE__ */
|
|
6210
|
-
/* @__PURE__ */
|
|
6211
|
-
onRetry ? /* @__PURE__ */
|
|
6307
|
+
return /* @__PURE__ */ jsxs23("div", { class: `${p24}-module-empty`, role: tone === "error" ? "alert" : "status", "aria-live": "polite", children: [
|
|
6308
|
+
/* @__PURE__ */ jsx27("span", { children: message }),
|
|
6309
|
+
onRetry ? /* @__PURE__ */ jsx27("button", { type: "button", class: `${p24}-module-retry`, onClick: onRetry, children: strings.errorRetry }) : null
|
|
6212
6310
|
] });
|
|
6213
6311
|
}
|
|
6214
6312
|
|
|
6215
6313
|
// src/ui/modules/help.tsx
|
|
6216
|
-
import { jsx as
|
|
6217
|
-
var
|
|
6314
|
+
import { jsx as jsx28, jsxs as jsxs24 } from "preact/jsx-runtime";
|
|
6315
|
+
var p25 = BRAND.cssPrefix;
|
|
6218
6316
|
var log13 = logger.scope("help");
|
|
6219
6317
|
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 });
|
|
6220
6318
|
function groupByCategory(items) {
|
|
@@ -6243,7 +6341,7 @@ function fuzzySearch(items, query) {
|
|
|
6243
6341
|
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);
|
|
6244
6342
|
}
|
|
6245
6343
|
function ArticleRow({ article, nav }) {
|
|
6246
|
-
return /* @__PURE__ */
|
|
6344
|
+
return /* @__PURE__ */ jsx28(
|
|
6247
6345
|
ListRow,
|
|
6248
6346
|
{
|
|
6249
6347
|
title: article.title,
|
|
@@ -6288,46 +6386,46 @@ function HelpRoot({ transport, strings, config, nav, bus, panelProps }) {
|
|
|
6288
6386
|
}, [query, results, bus]);
|
|
6289
6387
|
function renderBody() {
|
|
6290
6388
|
if (query.trim().length > 0) {
|
|
6291
|
-
if (results.length === 0) return /* @__PURE__ */
|
|
6292
|
-
return /* @__PURE__ */
|
|
6389
|
+
if (results.length === 0) return /* @__PURE__ */ jsx28(ModuleState, { message: strings.helpSearchEmpty, strings });
|
|
6390
|
+
return /* @__PURE__ */ jsx28("div", { class: `${p25}-help-card`, children: results.map((a) => /* @__PURE__ */ jsx28(ArticleRow, { article: a, nav }, a.id)) });
|
|
6293
6391
|
}
|
|
6294
|
-
if (state === "loading") return /* @__PURE__ */
|
|
6392
|
+
if (state === "loading") return /* @__PURE__ */ jsx28(ModuleState, { message: strings.helpLoading, strings });
|
|
6295
6393
|
if (state === "error") {
|
|
6296
|
-
return /* @__PURE__ */
|
|
6394
|
+
return /* @__PURE__ */ jsx28(ModuleState, { tone: "error", message: errorMsg, onRetry: () => setReloadKey((k) => k + 1), strings });
|
|
6297
6395
|
}
|
|
6298
|
-
if (items.length === 0) return /* @__PURE__ */
|
|
6299
|
-
return groupByCategory(items).map(([category, rows]) => /* @__PURE__ */
|
|
6300
|
-
category ? /* @__PURE__ */
|
|
6301
|
-
/* @__PURE__ */
|
|
6396
|
+
if (items.length === 0) return /* @__PURE__ */ jsx28(ModuleState, { message: strings.helpEmpty, strings });
|
|
6397
|
+
return groupByCategory(items).map(([category, rows]) => /* @__PURE__ */ jsxs24("section", { class: `${p25}-help-group`, children: [
|
|
6398
|
+
category ? /* @__PURE__ */ jsx28("h2", { class: `${p25}-help-section-title`, children: category }) : null,
|
|
6399
|
+
/* @__PURE__ */ jsx28("div", { class: `${p25}-help-card`, children: rows.map((a) => /* @__PURE__ */ jsx28(ArticleRow, { article: a, nav }, a.id)) })
|
|
6302
6400
|
] }, category));
|
|
6303
6401
|
}
|
|
6304
|
-
return /* @__PURE__ */
|
|
6305
|
-
/* @__PURE__ */
|
|
6306
|
-
/* @__PURE__ */
|
|
6307
|
-
/* @__PURE__ */
|
|
6402
|
+
return /* @__PURE__ */ jsxs24("div", { class: `${p25}-module`, children: [
|
|
6403
|
+
/* @__PURE__ */ jsx28(TitleBar, { title: strings.helpTitle, actions: /* @__PURE__ */ jsx28(HeaderActions, { panelProps, variant: "plain" }) }),
|
|
6404
|
+
/* @__PURE__ */ jsx28("div", { class: `${p25}-module-pad`, children: /* @__PURE__ */ jsx28(HelpSearchInput, { placeholder: strings.helpSearchPlaceholder, value: query, onInput: setQuery }) }),
|
|
6405
|
+
/* @__PURE__ */ jsx28("div", { class: `${p25}-help-list`, children: renderBody() })
|
|
6308
6406
|
] });
|
|
6309
6407
|
}
|
|
6310
6408
|
var helpLayout = {
|
|
6311
6409
|
Icon: HelpIcon,
|
|
6312
|
-
Root: (props2) => /* @__PURE__ */
|
|
6410
|
+
Root: (props2) => /* @__PURE__ */ jsx28(HelpRoot, { ...props2 })
|
|
6313
6411
|
};
|
|
6314
6412
|
|
|
6315
6413
|
// src/ui/modules/home.tsx
|
|
6316
6414
|
import { useEffect as useEffect11, useState as useState9 } from "preact/hooks";
|
|
6317
6415
|
|
|
6318
6416
|
// src/ui/home-card.tsx
|
|
6319
|
-
import { jsx as
|
|
6320
|
-
var
|
|
6417
|
+
import { jsx as jsx29 } from "preact/jsx-runtime";
|
|
6418
|
+
var p26 = BRAND.cssPrefix;
|
|
6321
6419
|
function HomeCard({ onClick, children, testid }) {
|
|
6322
6420
|
if (onClick) {
|
|
6323
|
-
return /* @__PURE__ */
|
|
6421
|
+
return /* @__PURE__ */ jsx29("button", { type: "button", class: `${p26}-home-card`, "data-interactive": "true", onClick, "data-testid": testid, children });
|
|
6324
6422
|
}
|
|
6325
|
-
return /* @__PURE__ */
|
|
6423
|
+
return /* @__PURE__ */ jsx29("div", { class: `${p26}-home-card`, "data-testid": testid, children });
|
|
6326
6424
|
}
|
|
6327
6425
|
|
|
6328
6426
|
// src/ui/modules/home.tsx
|
|
6329
|
-
import { Fragment as Fragment6, jsx as
|
|
6330
|
-
var
|
|
6427
|
+
import { Fragment as Fragment6, jsx as jsx30, jsxs as jsxs25 } from "preact/jsx-runtime";
|
|
6428
|
+
var p27 = BRAND.cssPrefix;
|
|
6331
6429
|
var log14 = logger.scope("home");
|
|
6332
6430
|
function resolveGreeting(props2) {
|
|
6333
6431
|
const name = props2.options.userContext?.name;
|
|
@@ -6370,49 +6468,49 @@ function HomeRoot(props2) {
|
|
|
6370
6468
|
const status = config.status;
|
|
6371
6469
|
const statusText = status?.text ? localizeText(strings, status.text) : strings.homeStatus;
|
|
6372
6470
|
const contentTitle = config.contentBlockTitle ? localizeText(strings, config.contentBlockTitle) : strings.homeContentTitle;
|
|
6373
|
-
return /* @__PURE__ */
|
|
6374
|
-
/* @__PURE__ */
|
|
6375
|
-
/* @__PURE__ */
|
|
6376
|
-
config.brandName ? /* @__PURE__ */
|
|
6377
|
-
/* @__PURE__ */
|
|
6378
|
-
avatars.length > 0 ? /* @__PURE__ */
|
|
6379
|
-
/* @__PURE__ */
|
|
6471
|
+
return /* @__PURE__ */ jsx30("div", { class: `${p27}-module ${p27}-home`, "data-testid": TID.homeView, children: /* @__PURE__ */ jsxs25("div", { class: `${p27}-home-scroll`, children: [
|
|
6472
|
+
/* @__PURE__ */ jsxs25("div", { class: `${p27}-home-hero`, children: [
|
|
6473
|
+
/* @__PURE__ */ jsxs25("div", { class: `${p27}-home-hero-top`, children: [
|
|
6474
|
+
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" }),
|
|
6475
|
+
/* @__PURE__ */ jsxs25("div", { class: `${p27}-home-hero-actions`, children: [
|
|
6476
|
+
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,
|
|
6477
|
+
/* @__PURE__ */ jsx30(HeaderActions, { panelProps, variant: "plain" })
|
|
6380
6478
|
] })
|
|
6381
6479
|
] }),
|
|
6382
|
-
config.showGreeting !== false ? /* @__PURE__ */
|
|
6383
|
-
/* @__PURE__ */
|
|
6384
|
-
greeting.subtitle ? /* @__PURE__ */
|
|
6480
|
+
config.showGreeting !== false ? /* @__PURE__ */ jsxs25(Fragment6, { children: [
|
|
6481
|
+
/* @__PURE__ */ jsx30("h1", { class: `${p27}-home-greeting`, "data-testid": TID.homeGreeting, children: greeting.title }),
|
|
6482
|
+
greeting.subtitle ? /* @__PURE__ */ jsx30("p", { class: `${p27}-home-lead`, children: greeting.subtitle }) : null
|
|
6385
6483
|
] }) : null
|
|
6386
6484
|
] }),
|
|
6387
|
-
/* @__PURE__ */
|
|
6388
|
-
config.showSearchBar !== false ? /* @__PURE__ */
|
|
6485
|
+
/* @__PURE__ */ jsxs25("div", { class: `${p27}-home-cards`, children: [
|
|
6486
|
+
config.showSearchBar !== false ? /* @__PURE__ */ jsx30(
|
|
6389
6487
|
HomeSearchButton,
|
|
6390
6488
|
{
|
|
6391
6489
|
placeholder: strings.homeSearchPlaceholder,
|
|
6392
6490
|
onActivate: () => nav.switchToLayout("help")
|
|
6393
6491
|
}
|
|
6394
6492
|
) : null,
|
|
6395
|
-
recent ? /* @__PURE__ */
|
|
6396
|
-
/* @__PURE__ */
|
|
6397
|
-
/* @__PURE__ */
|
|
6398
|
-
/* @__PURE__ */
|
|
6399
|
-
recent.preview ? /* @__PURE__ */
|
|
6493
|
+
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: [
|
|
6494
|
+
/* @__PURE__ */ jsx30("span", { class: `${p27}-home-recent-avatar`, "aria-hidden": "true", children: /* @__PURE__ */ jsx30(BubblesIcon, {}) }),
|
|
6495
|
+
/* @__PURE__ */ jsxs25("span", { class: `${p27}-home-recent-body`, children: [
|
|
6496
|
+
/* @__PURE__ */ jsx30("span", { class: `${p27}-home-recent-title`, children: recent.title }),
|
|
6497
|
+
recent.preview ? /* @__PURE__ */ jsx30("span", { class: `${p27}-home-recent-preview`, children: recent.preview }) : null
|
|
6400
6498
|
] }),
|
|
6401
|
-
(recent.unreadCount ?? 0) > 0 ? /* @__PURE__ */
|
|
6499
|
+
(recent.unreadCount ?? 0) > 0 ? /* @__PURE__ */ jsx30("span", { class: `${p27}-home-recent-dot`, "aria-label": "Unread" }) : null
|
|
6402
6500
|
] }) }) : null,
|
|
6403
|
-
status ? /* @__PURE__ */
|
|
6501
|
+
status ? /* @__PURE__ */ jsx30(
|
|
6404
6502
|
HomeCard,
|
|
6405
6503
|
{
|
|
6406
6504
|
onClick: status.url ? () => nav.push({ kind: "iframe", url: status.url, title: statusText }) : void 0,
|
|
6407
|
-
children: /* @__PURE__ */
|
|
6408
|
-
/* @__PURE__ */
|
|
6409
|
-
/* @__PURE__ */
|
|
6505
|
+
children: /* @__PURE__ */ jsxs25("div", { class: `${p27}-home-status`, "data-level": status.level ?? "operational", children: [
|
|
6506
|
+
/* @__PURE__ */ jsx30("span", { class: `${p27}-home-status-icon`, "aria-hidden": "true", children: /* @__PURE__ */ jsx30(StatusOkIcon, {}) }),
|
|
6507
|
+
/* @__PURE__ */ jsx30("span", { class: `${p27}-home-status-text`, children: statusText })
|
|
6410
6508
|
] })
|
|
6411
6509
|
}
|
|
6412
6510
|
) : null,
|
|
6413
|
-
content.length > 0 ? /* @__PURE__ */
|
|
6414
|
-
/* @__PURE__ */
|
|
6415
|
-
/* @__PURE__ */
|
|
6511
|
+
content.length > 0 ? /* @__PURE__ */ jsxs25("section", { class: `${p27}-home-content`, children: [
|
|
6512
|
+
/* @__PURE__ */ jsx30("div", { class: `${p27}-home-content-title`, children: contentTitle }),
|
|
6513
|
+
/* @__PURE__ */ jsx30("div", { class: `${p27}-home-content-list`, children: content.map((item) => /* @__PURE__ */ jsx30(
|
|
6416
6514
|
ListRow,
|
|
6417
6515
|
{
|
|
6418
6516
|
title: item.title,
|
|
@@ -6428,13 +6526,13 @@ function HomeRoot(props2) {
|
|
|
6428
6526
|
}
|
|
6429
6527
|
var homeLayout = {
|
|
6430
6528
|
Icon: HomeIcon,
|
|
6431
|
-
Root: (props2) => /* @__PURE__ */
|
|
6529
|
+
Root: (props2) => /* @__PURE__ */ jsx30(HomeRoot, { ...props2 })
|
|
6432
6530
|
};
|
|
6433
6531
|
|
|
6434
6532
|
// src/ui/modules/news.tsx
|
|
6435
6533
|
import { useEffect as useEffect12, useState as useState10 } from "preact/hooks";
|
|
6436
|
-
import { jsx as
|
|
6437
|
-
var
|
|
6534
|
+
import { jsx as jsx31, jsxs as jsxs26 } from "preact/jsx-runtime";
|
|
6535
|
+
var p28 = BRAND.cssPrefix;
|
|
6438
6536
|
var log15 = logger.scope("news");
|
|
6439
6537
|
function NewsRoot({ transport, strings, config, nav, bus, panelProps }) {
|
|
6440
6538
|
const tags = config.contentTags;
|
|
@@ -6462,37 +6560,37 @@ function NewsRoot({ transport, strings, config, nav, bus, panelProps }) {
|
|
|
6462
6560
|
};
|
|
6463
6561
|
}, [transport, tags, reloadKey, bus]);
|
|
6464
6562
|
function renderBody() {
|
|
6465
|
-
if (state === "loading") return /* @__PURE__ */
|
|
6563
|
+
if (state === "loading") return /* @__PURE__ */ jsx31(ModuleState, { message: strings.newsLoading, strings });
|
|
6466
6564
|
if (state === "error") {
|
|
6467
|
-
return /* @__PURE__ */
|
|
6565
|
+
return /* @__PURE__ */ jsx31(ModuleState, { tone: "error", message: errorMsg, onRetry: () => setReloadKey((k) => k + 1), strings });
|
|
6468
6566
|
}
|
|
6469
|
-
if (items.length === 0) return /* @__PURE__ */
|
|
6470
|
-
return /* @__PURE__ */
|
|
6567
|
+
if (items.length === 0) return /* @__PURE__ */ jsx31(ModuleState, { message: strings.newsEmpty, strings });
|
|
6568
|
+
return /* @__PURE__ */ jsx31("div", { class: `${p28}-news-list`, children: items.map((item) => /* @__PURE__ */ jsxs26(
|
|
6471
6569
|
"button",
|
|
6472
6570
|
{
|
|
6473
6571
|
type: "button",
|
|
6474
|
-
class: `${
|
|
6572
|
+
class: `${p28}-news-card`,
|
|
6475
6573
|
onClick: () => nav.push({ kind: "content", id: item.id, title: item.title }),
|
|
6476
6574
|
"data-testid": tid(TID.newsItem, item.id),
|
|
6477
6575
|
children: [
|
|
6478
|
-
item.image ? /* @__PURE__ */
|
|
6479
|
-
/* @__PURE__ */
|
|
6480
|
-
/* @__PURE__ */
|
|
6481
|
-
item.description ? /* @__PURE__ */
|
|
6576
|
+
item.image ? /* @__PURE__ */ jsx31("img", { class: `${p28}-news-hero`, src: item.image, alt: "", loading: "lazy" }) : null,
|
|
6577
|
+
/* @__PURE__ */ jsxs26("span", { class: `${p28}-news-body`, children: [
|
|
6578
|
+
/* @__PURE__ */ jsx31("span", { class: `${p28}-news-title`, children: item.title }),
|
|
6579
|
+
item.description ? /* @__PURE__ */ jsx31("span", { class: `${p28}-news-summary`, children: item.description }) : null
|
|
6482
6580
|
] })
|
|
6483
6581
|
]
|
|
6484
6582
|
},
|
|
6485
6583
|
item.id
|
|
6486
6584
|
)) });
|
|
6487
6585
|
}
|
|
6488
|
-
return /* @__PURE__ */
|
|
6489
|
-
/* @__PURE__ */
|
|
6490
|
-
/* @__PURE__ */
|
|
6586
|
+
return /* @__PURE__ */ jsxs26("div", { class: `${p28}-module`, children: [
|
|
6587
|
+
/* @__PURE__ */ jsx31(TitleBar, { title: strings.newsTitle, actions: /* @__PURE__ */ jsx31(HeaderActions, { panelProps, variant: "plain" }) }),
|
|
6588
|
+
/* @__PURE__ */ jsx31("div", { class: `${p28}-module-scroll`, children: renderBody() })
|
|
6491
6589
|
] });
|
|
6492
6590
|
}
|
|
6493
6591
|
var newsLayout = {
|
|
6494
6592
|
Icon: NewsIcon,
|
|
6495
|
-
Root: (props2) => /* @__PURE__ */
|
|
6593
|
+
Root: (props2) => /* @__PURE__ */ jsx31(NewsRoot, { ...props2 })
|
|
6496
6594
|
};
|
|
6497
6595
|
|
|
6498
6596
|
// src/ui/modules/registry.ts
|
|
@@ -6504,28 +6602,28 @@ var LAYOUTS = {
|
|
|
6504
6602
|
};
|
|
6505
6603
|
|
|
6506
6604
|
// src/ui/home-tab-bar.tsx
|
|
6507
|
-
import { jsx as
|
|
6508
|
-
var
|
|
6605
|
+
import { jsx as jsx32, jsxs as jsxs27 } from "preact/jsx-runtime";
|
|
6606
|
+
var p29 = BRAND.cssPrefix;
|
|
6509
6607
|
function HomeTabBar({ modules, activeTab, strings, unreadCount, onSelect }) {
|
|
6510
|
-
return /* @__PURE__ */
|
|
6608
|
+
return /* @__PURE__ */ jsx32("nav", { class: `${p29}-tabbar`, role: "tablist", "aria-label": strings.panelTitle, children: modules.map((m) => {
|
|
6511
6609
|
const Icon = LAYOUTS[m.layout].Icon;
|
|
6512
6610
|
const selected = m.id === activeTab;
|
|
6513
6611
|
const badge = m.layout === "chat" && unreadCount > 0 ? unreadCount > 9 ? "9+" : String(unreadCount) : null;
|
|
6514
|
-
return /* @__PURE__ */
|
|
6612
|
+
return /* @__PURE__ */ jsxs27(
|
|
6515
6613
|
"button",
|
|
6516
6614
|
{
|
|
6517
6615
|
type: "button",
|
|
6518
6616
|
role: "tab",
|
|
6519
6617
|
"aria-selected": selected,
|
|
6520
|
-
class: `${
|
|
6618
|
+
class: `${p29}-tab`,
|
|
6521
6619
|
onClick: () => onSelect(m.id),
|
|
6522
6620
|
"data-testid": tid(TID.tab, m.id),
|
|
6523
6621
|
children: [
|
|
6524
|
-
/* @__PURE__ */
|
|
6525
|
-
/* @__PURE__ */
|
|
6526
|
-
badge ? /* @__PURE__ */
|
|
6622
|
+
/* @__PURE__ */ jsxs27("span", { class: `${p29}-tab-icon`, "aria-hidden": "true", children: [
|
|
6623
|
+
/* @__PURE__ */ jsx32(Icon, {}),
|
|
6624
|
+
badge ? /* @__PURE__ */ jsx32("span", { class: `${p29}-tab-badge`, "data-testid": TID.tabBadge, children: badge }) : null
|
|
6527
6625
|
] }),
|
|
6528
|
-
/* @__PURE__ */
|
|
6626
|
+
/* @__PURE__ */ jsx32("span", { class: `${p29}-tab-label`, children: localizeText(strings, m.label) })
|
|
6529
6627
|
]
|
|
6530
6628
|
},
|
|
6531
6629
|
m.id
|
|
@@ -6534,12 +6632,12 @@ function HomeTabBar({ modules, activeTab, strings, unreadCount, onSelect }) {
|
|
|
6534
6632
|
}
|
|
6535
6633
|
|
|
6536
6634
|
// src/ui/iframe-view.tsx
|
|
6537
|
-
import { jsx as
|
|
6538
|
-
var
|
|
6635
|
+
import { jsx as jsx33, jsxs as jsxs28 } from "preact/jsx-runtime";
|
|
6636
|
+
var p30 = BRAND.cssPrefix;
|
|
6539
6637
|
var SANDBOX = "allow-scripts allow-forms allow-popups allow-popups-to-escape-sandbox allow-downloads";
|
|
6540
6638
|
function IframeView({ url, title, strings, onBack, actions }) {
|
|
6541
|
-
return /* @__PURE__ */
|
|
6542
|
-
/* @__PURE__ */
|
|
6639
|
+
return /* @__PURE__ */ jsxs28("div", { class: `${p30}-module`, children: [
|
|
6640
|
+
/* @__PURE__ */ jsx33(
|
|
6543
6641
|
BackHeader,
|
|
6544
6642
|
{
|
|
6545
6643
|
title: title || strings.moduleBack,
|
|
@@ -6548,10 +6646,10 @@ function IframeView({ url, title, strings, onBack, actions }) {
|
|
|
6548
6646
|
actions
|
|
6549
6647
|
}
|
|
6550
6648
|
),
|
|
6551
|
-
/* @__PURE__ */
|
|
6649
|
+
/* @__PURE__ */ jsx33(
|
|
6552
6650
|
"iframe",
|
|
6553
6651
|
{
|
|
6554
|
-
class: `${
|
|
6652
|
+
class: `${p30}-content-frame`,
|
|
6555
6653
|
src: url,
|
|
6556
6654
|
title: title || "content",
|
|
6557
6655
|
sandbox: SANDBOX,
|
|
@@ -6565,8 +6663,8 @@ function IframeView({ url, title, strings, onBack, actions }) {
|
|
|
6565
6663
|
|
|
6566
6664
|
// src/ui/content-view.tsx
|
|
6567
6665
|
import { useCallback as useCallback3, useEffect as useEffect13, useState as useState11 } from "preact/hooks";
|
|
6568
|
-
import { jsx as
|
|
6569
|
-
var
|
|
6666
|
+
import { jsx as jsx34, jsxs as jsxs29 } from "preact/jsx-runtime";
|
|
6667
|
+
var p31 = BRAND.cssPrefix;
|
|
6570
6668
|
var log16 = logger.scope("content");
|
|
6571
6669
|
var READ_DWELL_MS = 5e3;
|
|
6572
6670
|
function ContentView({ id, title, transport, strings, bus, onBack, actions }) {
|
|
@@ -6610,16 +6708,16 @@ function ContentView({ id, title, transport, strings, bus, onBack, actions }) {
|
|
|
6610
6708
|
[bus, id]
|
|
6611
6709
|
);
|
|
6612
6710
|
function renderBody() {
|
|
6613
|
-
if (failed) return /* @__PURE__ */
|
|
6614
|
-
if (item === null) return /* @__PURE__ */
|
|
6615
|
-
return /* @__PURE__ */
|
|
6616
|
-
item.image ? /* @__PURE__ */
|
|
6617
|
-
item.description ? /* @__PURE__ */
|
|
6618
|
-
/* @__PURE__ */
|
|
6711
|
+
if (failed) return /* @__PURE__ */ jsx34(ModuleState, { tone: "error", message: strings.errorGeneric, onRetry: retry, strings });
|
|
6712
|
+
if (item === null) return /* @__PURE__ */ jsx34(ModuleState, { message: strings.contentLoading, strings });
|
|
6713
|
+
return /* @__PURE__ */ jsxs29("article", { class: `${p31}-content`, "data-testid": TID.contentView, onClick: onArticleClick, children: [
|
|
6714
|
+
item.image ? /* @__PURE__ */ jsx34("img", { class: `${p31}-content-hero`, src: item.image, alt: "", loading: "lazy" }) : null,
|
|
6715
|
+
item.description ? /* @__PURE__ */ jsx34("p", { class: `${p31}-content-subtitle`, children: item.description }) : null,
|
|
6716
|
+
/* @__PURE__ */ jsx34(StaticMarkdown, { text: item.content ?? "" })
|
|
6619
6717
|
] });
|
|
6620
6718
|
}
|
|
6621
|
-
return /* @__PURE__ */
|
|
6622
|
-
/* @__PURE__ */
|
|
6719
|
+
return /* @__PURE__ */ jsxs29("div", { class: `${p31}-module`, children: [
|
|
6720
|
+
/* @__PURE__ */ jsx34(
|
|
6623
6721
|
BackHeader,
|
|
6624
6722
|
{
|
|
6625
6723
|
title: item?.title || title || strings.moduleBack,
|
|
@@ -6629,13 +6727,13 @@ function ContentView({ id, title, transport, strings, bus, onBack, actions }) {
|
|
|
6629
6727
|
testid: TID.backHeader
|
|
6630
6728
|
}
|
|
6631
6729
|
),
|
|
6632
|
-
/* @__PURE__ */
|
|
6730
|
+
/* @__PURE__ */ jsx34("div", { class: `${p31}-module-scroll`, "data-testid": TID.contentScroll, children: renderBody() })
|
|
6633
6731
|
] });
|
|
6634
6732
|
}
|
|
6635
6733
|
|
|
6636
6734
|
// src/ui/messenger-home.tsx
|
|
6637
|
-
import { jsx as
|
|
6638
|
-
var
|
|
6735
|
+
import { jsx as jsx35, jsxs as jsxs30 } from "preact/jsx-runtime";
|
|
6736
|
+
var p32 = BRAND.cssPrefix;
|
|
6639
6737
|
function MessengerHome({
|
|
6640
6738
|
panelProps,
|
|
6641
6739
|
enabledModules,
|
|
@@ -6669,7 +6767,7 @@ function MessengerHome({
|
|
|
6669
6767
|
}, []);
|
|
6670
6768
|
const { visible: dragOver } = useFileDrop({ containerRef, onDrop: onDropItems });
|
|
6671
6769
|
useDragMove(containerRef.current, options.mode === "modal");
|
|
6672
|
-
const navState =
|
|
6770
|
+
const navState = useComputed7(() => nav.sig.value).value;
|
|
6673
6771
|
const top = topScreen(navState);
|
|
6674
6772
|
const activeModule = options.modules.byId[navState.activeTab];
|
|
6675
6773
|
const isReader = top?.kind === "iframe" || top?.kind === "content";
|
|
@@ -6706,12 +6804,12 @@ function MessengerHome({
|
|
|
6706
6804
|
bus,
|
|
6707
6805
|
panelProps
|
|
6708
6806
|
});
|
|
6709
|
-
const plainActions = /* @__PURE__ */
|
|
6807
|
+
const plainActions = /* @__PURE__ */ jsx35(HeaderActions, { panelProps, variant: "plain" });
|
|
6710
6808
|
if (activeModule) visitedRef.current.add(activeModule.id);
|
|
6711
6809
|
const visitedTabs = enabledModules.filter((m) => visitedRef.current.has(m.id));
|
|
6712
6810
|
const tabRoot = (module) => {
|
|
6713
6811
|
if (module.layout === "chat") {
|
|
6714
|
-
return /* @__PURE__ */
|
|
6812
|
+
return /* @__PURE__ */ jsx35(
|
|
6715
6813
|
PanelContent,
|
|
6716
6814
|
{
|
|
6717
6815
|
...panelProps,
|
|
@@ -6722,14 +6820,14 @@ function MessengerHome({
|
|
|
6722
6820
|
);
|
|
6723
6821
|
}
|
|
6724
6822
|
const Root = LAYOUTS[module.layout].Root;
|
|
6725
|
-
return Root ? /* @__PURE__ */
|
|
6823
|
+
return Root ? /* @__PURE__ */ jsx35(Root, { ...screenProps(module) }) : null;
|
|
6726
6824
|
};
|
|
6727
6825
|
const renderReader = () => {
|
|
6728
6826
|
if (top?.kind === "iframe") {
|
|
6729
|
-
return /* @__PURE__ */
|
|
6827
|
+
return /* @__PURE__ */ jsx35(IframeView, { url: top.url, title: top.title, strings, onBack: nav.pop, actions: plainActions });
|
|
6730
6828
|
}
|
|
6731
6829
|
if (top?.kind === "content") {
|
|
6732
|
-
return /* @__PURE__ */
|
|
6830
|
+
return /* @__PURE__ */ jsx35(
|
|
6733
6831
|
ContentView,
|
|
6734
6832
|
{
|
|
6735
6833
|
id: top.id,
|
|
@@ -6744,22 +6842,22 @@ function MessengerHome({
|
|
|
6744
6842
|
}
|
|
6745
6843
|
return null;
|
|
6746
6844
|
};
|
|
6747
|
-
return /* @__PURE__ */
|
|
6845
|
+
return /* @__PURE__ */ jsxs30(
|
|
6748
6846
|
"div",
|
|
6749
6847
|
{
|
|
6750
6848
|
ref: containerRef,
|
|
6751
|
-
class: `${
|
|
6849
|
+
class: `${p32}-panel ${p32}-messenger`,
|
|
6752
6850
|
role: "dialog",
|
|
6753
6851
|
"aria-modal": "false",
|
|
6754
6852
|
"aria-label": strings.panelTitle,
|
|
6755
6853
|
style: { position: "relative" },
|
|
6756
6854
|
"data-testid": TID.messengerHome,
|
|
6757
6855
|
children: [
|
|
6758
|
-
/* @__PURE__ */
|
|
6759
|
-
visitedTabs.map((m) => /* @__PURE__ */
|
|
6856
|
+
/* @__PURE__ */ jsxs30("div", { class: `${p32}-messenger-body`, children: [
|
|
6857
|
+
visitedTabs.map((m) => /* @__PURE__ */ jsx35("div", { class: `${p32}-messenger-pane`, hidden: isReader || m.id !== activeModule?.id, children: tabRoot(m) }, m.id)),
|
|
6760
6858
|
renderReader()
|
|
6761
6859
|
] }),
|
|
6762
|
-
showTabBar ? /* @__PURE__ */
|
|
6860
|
+
showTabBar ? /* @__PURE__ */ jsx35(
|
|
6763
6861
|
HomeTabBar,
|
|
6764
6862
|
{
|
|
6765
6863
|
modules: enabledModules,
|
|
@@ -6769,8 +6867,8 @@ function MessengerHome({
|
|
|
6769
6867
|
onSelect: nav.switchTab
|
|
6770
6868
|
}
|
|
6771
6869
|
) : null,
|
|
6772
|
-
/* @__PURE__ */
|
|
6773
|
-
options.size.resize?.enabled && !(activeModule?.layout === "chat" && !top) ? /* @__PURE__ */
|
|
6870
|
+
/* @__PURE__ */ jsx35(PoweredByBar, { poweredBy: options.poweredBy }),
|
|
6871
|
+
options.size.resize?.enabled && !(activeModule?.layout === "chat" && !top) ? /* @__PURE__ */ jsx35(
|
|
6774
6872
|
ResizeGrip,
|
|
6775
6873
|
{
|
|
6776
6874
|
panelEl: containerRef.current,
|
|
@@ -6787,29 +6885,29 @@ function MessengerHome({
|
|
|
6787
6885
|
}
|
|
6788
6886
|
|
|
6789
6887
|
// src/ui/modules-empty.tsx
|
|
6790
|
-
import { jsx as
|
|
6791
|
-
var
|
|
6888
|
+
import { jsx as jsx36, jsxs as jsxs31 } from "preact/jsx-runtime";
|
|
6889
|
+
var p33 = BRAND.cssPrefix;
|
|
6792
6890
|
function ModulesEmpty({ strings, onClose }) {
|
|
6793
|
-
return /* @__PURE__ */
|
|
6891
|
+
return /* @__PURE__ */ jsxs31(
|
|
6794
6892
|
"div",
|
|
6795
6893
|
{
|
|
6796
|
-
class: `${
|
|
6894
|
+
class: `${p33}-panel ${p33}-modules-empty`,
|
|
6797
6895
|
role: "dialog",
|
|
6798
6896
|
"aria-label": strings.panelTitle,
|
|
6799
6897
|
"data-testid": TID.modulesEmpty,
|
|
6800
6898
|
children: [
|
|
6801
|
-
onClose ? /* @__PURE__ */
|
|
6899
|
+
onClose ? /* @__PURE__ */ jsx36(
|
|
6802
6900
|
"button",
|
|
6803
6901
|
{
|
|
6804
6902
|
type: "button",
|
|
6805
|
-
class: `${
|
|
6903
|
+
class: `${p33}-icon-btn ${p33}-modules-empty-close`,
|
|
6806
6904
|
onClick: onClose,
|
|
6807
6905
|
"aria-label": strings.close,
|
|
6808
6906
|
title: strings.close,
|
|
6809
|
-
children: /* @__PURE__ */
|
|
6907
|
+
children: /* @__PURE__ */ jsx36(CloseIcon, {})
|
|
6810
6908
|
}
|
|
6811
6909
|
) : null,
|
|
6812
|
-
/* @__PURE__ */
|
|
6910
|
+
/* @__PURE__ */ jsx36("p", { class: `${p33}-modules-empty-text`, children: strings.modulesEmpty })
|
|
6813
6911
|
]
|
|
6814
6912
|
}
|
|
6815
6913
|
);
|
|
@@ -6832,9 +6930,9 @@ function useLauncherCallout({ callout, persistence }) {
|
|
|
6832
6930
|
}
|
|
6833
6931
|
|
|
6834
6932
|
// src/ui/app.tsx
|
|
6835
|
-
import { jsx as
|
|
6933
|
+
import { jsx as jsx37, jsxs as jsxs32 } from "preact/jsx-runtime";
|
|
6836
6934
|
var log17 = logger.scope("app");
|
|
6837
|
-
var
|
|
6935
|
+
var p34 = BRAND.cssPrefix;
|
|
6838
6936
|
function makeLocalizedWelcome(w, strings) {
|
|
6839
6937
|
return makeInstantWelcomeMessage({ ...w, text: localizeText(strings, w.text) });
|
|
6840
6938
|
}
|
|
@@ -7376,7 +7474,7 @@ function App({ options, hostElement, bus }) {
|
|
|
7376
7474
|
bus.emit("toolResult", { toolCallId });
|
|
7377
7475
|
resolveTool(toolCallId, TRIGGER.toolResult, (part) => {
|
|
7378
7476
|
part.outputSig.value = output;
|
|
7379
|
-
part.stateSig.value = "output";
|
|
7477
|
+
part.stateSig.value = "output-available";
|
|
7380
7478
|
});
|
|
7381
7479
|
},
|
|
7382
7480
|
[bus, resolveTool]
|
|
@@ -7388,7 +7486,7 @@ function App({ options, hostElement, bus }) {
|
|
|
7388
7486
|
resolveTool(toolCallId, TRIGGER.toolApproval, (part) => {
|
|
7389
7487
|
const id = part.approvalSig.value?.id ?? toolCallId;
|
|
7390
7488
|
part.approvalSig.value = { id, approved, reason };
|
|
7391
|
-
part.stateSig.value = "
|
|
7489
|
+
part.stateSig.value = "approval-responded";
|
|
7392
7490
|
});
|
|
7393
7491
|
},
|
|
7394
7492
|
[bus, resolveTool]
|
|
@@ -7429,12 +7527,12 @@ function App({ options, hostElement, bus }) {
|
|
|
7429
7527
|
void transport.submitForm({ formId: form.id, conversationId: activeConversationId, trigger, values, skipped });
|
|
7430
7528
|
}
|
|
7431
7529
|
});
|
|
7432
|
-
const activeForm =
|
|
7530
|
+
const activeForm = useComputed8(() => forms.activeForm.value);
|
|
7433
7531
|
useEffect16(() => {
|
|
7434
7532
|
forms.refresh();
|
|
7435
7533
|
}, [effectiveForms, forms]);
|
|
7436
7534
|
const pageArea = options.pageContext?.area ? String(options.pageContext.area) : void 0;
|
|
7437
|
-
const msgCount =
|
|
7535
|
+
const msgCount = useComputed8(() => messagesSig.value.length);
|
|
7438
7536
|
useEffect16(() => {
|
|
7439
7537
|
if (conversationReady && formsReady) forms.fire("pre-chat");
|
|
7440
7538
|
}, [conversationReady, formsReady, forms]);
|
|
@@ -7749,12 +7847,12 @@ function App({ options, hostElement, bus }) {
|
|
|
7749
7847
|
const renderSurface = (size) => {
|
|
7750
7848
|
const closeable = isActionVisible("close", effectiveOptions.mode, size);
|
|
7751
7849
|
if (enabledModules.length === 0) {
|
|
7752
|
-
return /* @__PURE__ */
|
|
7850
|
+
return /* @__PURE__ */ jsx37(ModulesEmpty, { strings: effectiveOptions.strings, onClose: closeable ? handleClose : void 0 });
|
|
7753
7851
|
}
|
|
7754
7852
|
if (enabledModules.length === 1 && enabledModules[0]?.layout === "chat") {
|
|
7755
|
-
return /* @__PURE__ */
|
|
7853
|
+
return /* @__PURE__ */ jsx37(Panel, { ...panelProps, panelSize: size });
|
|
7756
7854
|
}
|
|
7757
|
-
return /* @__PURE__ */
|
|
7855
|
+
return /* @__PURE__ */ jsx37(
|
|
7758
7856
|
MessengerHome,
|
|
7759
7857
|
{
|
|
7760
7858
|
panelProps: { ...panelProps, panelSize: size, onClose: closeable ? handleClose : void 0 },
|
|
@@ -7773,7 +7871,7 @@ function App({ options, hostElement, bus }) {
|
|
|
7773
7871
|
void handleSelectHistoryConversation(chat.conversationId);
|
|
7774
7872
|
};
|
|
7775
7873
|
const conversationsEnabled = enabledModules.some((m) => m.layout === "chat");
|
|
7776
|
-
return /* @__PURE__ */
|
|
7874
|
+
return /* @__PURE__ */ jsx37("div", { class: `${p34}-anchor`, children: /* @__PURE__ */ jsx37(
|
|
7777
7875
|
PageShell,
|
|
7778
7876
|
{
|
|
7779
7877
|
site: parsedSite,
|
|
@@ -7794,15 +7892,15 @@ function App({ options, hostElement, bus }) {
|
|
|
7794
7892
|
}
|
|
7795
7893
|
if (isInlineLike) {
|
|
7796
7894
|
const inlineSize = options.mode === "standalone" ? "fullscreen" : panelSize;
|
|
7797
|
-
return /* @__PURE__ */
|
|
7895
|
+
return /* @__PURE__ */ jsx37("div", { class: `${p34}-anchor`, children: renderSurface(inlineSize) });
|
|
7798
7896
|
}
|
|
7799
7897
|
const drawerEdgeTab = options.mode === "drawer";
|
|
7800
7898
|
const triggerOwnedByPage = options.mode === "modal";
|
|
7801
7899
|
const launcherVisible = !triggerOwnedByPage && !options.launcher.hidden && (!isOpen || launcherLeaving);
|
|
7802
7900
|
const calloutToRender = launcherVisible && !launcherLeaving && !calloutDismissed && !drawerEdgeTab ? effectiveOptions.launcher.callout : null;
|
|
7803
|
-
return /* @__PURE__ */
|
|
7804
|
-
isOpen || activated ? /* @__PURE__ */
|
|
7805
|
-
launcherVisible ? /* @__PURE__ */
|
|
7901
|
+
return /* @__PURE__ */ jsxs32("div", { class: `${p34}-anchor`, "data-launcher-size": effectiveOptions.launcher.size, children: [
|
|
7902
|
+
isOpen || activated ? /* @__PURE__ */ jsx37("div", { class: `${p34}-surface`, hidden: !isOpen, children: renderSurface(panelSize) }) : null,
|
|
7903
|
+
launcherVisible ? /* @__PURE__ */ jsx37(
|
|
7806
7904
|
Launcher,
|
|
7807
7905
|
{
|
|
7808
7906
|
onToggle: handleOpen,
|
|
@@ -7812,7 +7910,7 @@ function App({ options, hostElement, bus }) {
|
|
|
7812
7910
|
edgeTab: drawerEdgeTab
|
|
7813
7911
|
}
|
|
7814
7912
|
) : null,
|
|
7815
|
-
calloutToRender ? /* @__PURE__ */
|
|
7913
|
+
calloutToRender ? /* @__PURE__ */ jsx37(
|
|
7816
7914
|
LauncherCallout,
|
|
7817
7915
|
{
|
|
7818
7916
|
callout: calloutToRender,
|
|
@@ -7877,34 +7975,34 @@ var TRACKED = {
|
|
|
7877
7975
|
expand: (on) => ({ on }),
|
|
7878
7976
|
fullscreen: (on) => ({ on }),
|
|
7879
7977
|
// Conversation funnel. `send` is the key conversion; text never rides.
|
|
7880
|
-
send: (
|
|
7881
|
-
message: (
|
|
7978
|
+
send: (p35) => ({ attachments: p35.attachmentCount }),
|
|
7979
|
+
message: (p35) => ({ role: p35.role }),
|
|
7882
7980
|
stop: () => void 0,
|
|
7883
7981
|
clear: () => void 0,
|
|
7884
7982
|
suggestion: () => void 0,
|
|
7885
|
-
toggleHistory: (
|
|
7983
|
+
toggleHistory: (p35) => ({ view: p35.view }),
|
|
7886
7984
|
handshake: () => void 0,
|
|
7887
7985
|
// Forms + human-in-the-loop — ids and outcomes, never values.
|
|
7888
|
-
formSubmit: (
|
|
7986
|
+
formSubmit: (p35) => ({ formId: p35.formId, skipped: p35.skipped }),
|
|
7889
7987
|
toolResult: () => void 0,
|
|
7890
|
-
toolDecision: (
|
|
7988
|
+
toolDecision: (p35) => ({ approved: p35.approved }),
|
|
7891
7989
|
// Content — ids, tags + counts only; titles/bodies never ride.
|
|
7892
|
-
contentView: (
|
|
7893
|
-
contentOpen: (
|
|
7894
|
-
contentSearch: (
|
|
7895
|
-
contentRead: (
|
|
7896
|
-
contentLinkClick: (
|
|
7990
|
+
contentView: (p35) => ({ section: p35.section, tags: p35.tags, count: p35.count }),
|
|
7991
|
+
contentOpen: (p35) => ({ contentId: p35.contentId, tags: p35.tags }),
|
|
7992
|
+
contentSearch: (p35) => ({ qlen: p35.queryLength, hits: p35.hitCount }),
|
|
7993
|
+
contentRead: (p35) => ({ contentId: p35.contentId }),
|
|
7994
|
+
contentLinkClick: (p35) => ({ contentId: p35.contentId }),
|
|
7897
7995
|
// Composer / attachments / voice.
|
|
7898
|
-
attach: (
|
|
7996
|
+
attach: (p35) => ({ count: p35.count, bytes: p35.totalBytes }),
|
|
7899
7997
|
voiceStart: () => void 0,
|
|
7900
|
-
voiceStop: (
|
|
7998
|
+
voiceStop: (p35) => ({ ms: p35.durationMs }),
|
|
7901
7999
|
voiceCancel: () => void 0,
|
|
7902
8000
|
// Preferences — how visitors tune the surface.
|
|
7903
8001
|
localeChange: (locale) => ({ locale }),
|
|
7904
8002
|
themeChange: (theme) => ({ theme }),
|
|
7905
8003
|
textSizeChange: (size) => ({ size }),
|
|
7906
|
-
soundToggle: (
|
|
7907
|
-
sidebarToggle: (
|
|
8004
|
+
soundToggle: (p35) => ({ muted: p35.muted }),
|
|
8005
|
+
sidebarToggle: (p35) => ({ collapsed: p35.collapsed }),
|
|
7908
8006
|
calloutDismiss: () => void 0,
|
|
7909
8007
|
// Health signal only — the error object itself never leaves the page.
|
|
7910
8008
|
error: () => void 0
|