@helpai/elements 0.14.2 → 0.16.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 +22 -7
- package/elements-web-component.esm.js +25 -25
- package/elements-web-component.esm.js.map +4 -4
- package/elements.cjs.js +25 -25
- package/elements.cjs.js.map +4 -4
- package/elements.esm.js +25 -25
- package/elements.esm.js.map +4 -4
- package/elements.js +25 -25
- package/elements.js.map +4 -4
- package/index.d.ts +38 -7
- package/index.mjs +394 -264
- package/package.json +1 -1
- package/schema.d.ts +6 -3
- package/schema.json +39 -12
- package/schema.mjs +22 -7
- package/style.css +3 -3
- package/web-component.mjs +392 -263
package/web-component.mjs
CHANGED
|
@@ -35,7 +35,8 @@ var STRINGS_EN = {
|
|
|
35
35
|
attachmentMimeRejected: "File type not supported",
|
|
36
36
|
attachmentTooLarge: "File is too large",
|
|
37
37
|
attachmentTooMany: "Attachment limit reached",
|
|
38
|
-
|
|
38
|
+
conversationClosed: "This conversation is closed",
|
|
39
|
+
conversationLoading: "Loading conversation\u2026",
|
|
39
40
|
close: "Close",
|
|
40
41
|
collapse: "Collapse",
|
|
41
42
|
collapseSidebar: "Collapse sidebar",
|
|
@@ -55,12 +56,10 @@ var STRINGS_EN = {
|
|
|
55
56
|
history: "History",
|
|
56
57
|
historyBack: "Back to chat",
|
|
57
58
|
historyEmpty: "No previous conversations yet",
|
|
58
|
-
historyLoading: "Loading your
|
|
59
|
-
|
|
60
|
-
historyTitle: "Chat history",
|
|
59
|
+
historyLoading: "Loading your conversations\u2026",
|
|
60
|
+
historyTitle: "Conversation history",
|
|
61
61
|
language: "Language",
|
|
62
62
|
launcherOpen: "Open chat",
|
|
63
|
-
messagesLoading: "Loading conversation\u2026",
|
|
64
63
|
micStart: "Start voice input",
|
|
65
64
|
micStop: "Stop voice input",
|
|
66
65
|
micUnsupported: "Voice input is not supported in this browser",
|
|
@@ -76,16 +75,20 @@ var STRINGS_EN = {
|
|
|
76
75
|
startNewConversation: "Start a new conversation",
|
|
77
76
|
stop: "Stop",
|
|
78
77
|
theme: "Theme",
|
|
79
|
-
themeAuto: "Auto
|
|
78
|
+
themeAuto: "Auto",
|
|
80
79
|
themeDark: "Dark",
|
|
81
80
|
themeLight: "Light",
|
|
81
|
+
textSize: "Text size",
|
|
82
|
+
textSizeSmall: "Small",
|
|
83
|
+
textSizeNormal: "Normal",
|
|
84
|
+
textSizeLarge: "Large",
|
|
82
85
|
loading: "Loading\u2026",
|
|
83
86
|
thinking: "Thinking\u2026",
|
|
84
87
|
thoughts: "Thoughts",
|
|
85
88
|
usedTool: "Used tool",
|
|
86
89
|
// ── Messenger modules ──────────────────────────────────────────
|
|
87
90
|
tabHome: "Home",
|
|
88
|
-
|
|
91
|
+
tabConversations: "Conversations",
|
|
89
92
|
tabHelp: "Help",
|
|
90
93
|
tabNews: "News",
|
|
91
94
|
modulesEmpty: "Nothing here yet",
|
|
@@ -109,6 +112,8 @@ var STRINGS_EN = {
|
|
|
109
112
|
// ── Forms + human-in-the-loop (forms / ask-input / approval) ────
|
|
110
113
|
formSubmit: "Submit",
|
|
111
114
|
formSkip: "Skip for now",
|
|
115
|
+
formSubmitted: "Form submitted",
|
|
116
|
+
formSkipped: "Form skipped",
|
|
112
117
|
formRequired: "This field is required",
|
|
113
118
|
formInvalidEmail: "Enter a valid email address",
|
|
114
119
|
formInvalidTel: "Enter a valid phone number",
|
|
@@ -140,7 +145,8 @@ var STRINGS_FR = {
|
|
|
140
145
|
attachmentMimeRejected: "Type de fichier non pris en charge",
|
|
141
146
|
attachmentTooLarge: "Le fichier est trop volumineux",
|
|
142
147
|
attachmentTooMany: "Limite de pi\xE8ces jointes atteinte",
|
|
143
|
-
|
|
148
|
+
conversationClosed: "Cette conversation est ferm\xE9e",
|
|
149
|
+
conversationLoading: "Chargement de la conversation\u2026",
|
|
144
150
|
close: "Fermer",
|
|
145
151
|
collapse: "R\xE9duire",
|
|
146
152
|
collapseSidebar: "R\xE9duire la barre lat\xE9rale",
|
|
@@ -161,11 +167,9 @@ var STRINGS_FR = {
|
|
|
161
167
|
historyBack: "Retour au chat",
|
|
162
168
|
historyEmpty: "Aucune conversation pour le moment",
|
|
163
169
|
historyLoading: "Chargement de vos conversations\u2026",
|
|
164
|
-
historyNewChat: "Nouvelle conversation",
|
|
165
170
|
historyTitle: "Historique des conversations",
|
|
166
171
|
language: "Langue",
|
|
167
172
|
launcherOpen: "Ouvrir le chat",
|
|
168
|
-
messagesLoading: "Chargement de la conversation\u2026",
|
|
169
173
|
micStart: "D\xE9marrer la saisie vocale",
|
|
170
174
|
micStop: "Arr\xEAter la saisie vocale",
|
|
171
175
|
micUnsupported: "La saisie vocale n'est pas prise en charge par ce navigateur",
|
|
@@ -181,16 +185,20 @@ var STRINGS_FR = {
|
|
|
181
185
|
startNewConversation: "D\xE9marrer une nouvelle conversation",
|
|
182
186
|
stop: "Arr\xEAter",
|
|
183
187
|
theme: "Th\xE8me",
|
|
184
|
-
themeAuto: "Auto
|
|
188
|
+
themeAuto: "Auto",
|
|
185
189
|
themeDark: "Sombre",
|
|
186
190
|
themeLight: "Clair",
|
|
191
|
+
textSize: "Taille du texte",
|
|
192
|
+
textSizeSmall: "Petite",
|
|
193
|
+
textSizeNormal: "Normale",
|
|
194
|
+
textSizeLarge: "Grande",
|
|
187
195
|
loading: "Chargement\u2026",
|
|
188
196
|
thinking: "R\xE9flexion\u2026",
|
|
189
197
|
thoughts: "R\xE9flexions",
|
|
190
198
|
usedTool: "Outil utilis\xE9",
|
|
191
199
|
// ── Messenger modules ──────────────────────────────────────────
|
|
192
200
|
tabHome: "Accueil",
|
|
193
|
-
|
|
201
|
+
tabConversations: "Conversations",
|
|
194
202
|
tabHelp: "Aide",
|
|
195
203
|
tabNews: "Actualit\xE9s",
|
|
196
204
|
modulesEmpty: "Rien pour le moment",
|
|
@@ -214,6 +222,8 @@ var STRINGS_FR = {
|
|
|
214
222
|
// ── Forms + human-in-the-loop (forms / ask-input / approval) ────
|
|
215
223
|
formSubmit: "Envoyer",
|
|
216
224
|
formSkip: "Ignorer pour l'instant",
|
|
225
|
+
formSubmitted: "Formulaire envoy\xE9",
|
|
226
|
+
formSkipped: "Formulaire ignor\xE9",
|
|
217
227
|
formRequired: "Ce champ est obligatoire",
|
|
218
228
|
formInvalidEmail: "Saisissez une adresse e-mail valide",
|
|
219
229
|
formInvalidTel: "Saisissez un num\xE9ro de t\xE9l\xE9phone valide",
|
|
@@ -457,12 +467,12 @@ var DEFAULT_LAUNCHER = {
|
|
|
457
467
|
hidden: false
|
|
458
468
|
};
|
|
459
469
|
var DEFAULT_ACTIONS_BY_MODE = {
|
|
460
|
-
floating: ["theme", "history", "close", "clear", "expand", "fullscreen", "popOut", "sound", "language"],
|
|
461
|
-
inline: ["theme", "history", "close", "clear", "fullscreen", "popOut", "sound", "language"],
|
|
462
|
-
standalone: ["theme", "history", "clear", "sound", "language"],
|
|
463
|
-
page: ["theme", "history", "clear", "sound", "language"],
|
|
464
|
-
modal: ["theme", "history", "close", "clear", "fullscreen", "popOut", "sound", "language"],
|
|
465
|
-
drawer: ["theme", "history", "close", "clear", "fullscreen", "popOut", "sound", "language"]
|
|
470
|
+
floating: ["theme", "textSize", "history", "close", "clear", "expand", "fullscreen", "popOut", "sound", "language"],
|
|
471
|
+
inline: ["theme", "textSize", "history", "close", "clear", "fullscreen", "popOut", "sound", "language"],
|
|
472
|
+
standalone: ["theme", "textSize", "history", "clear", "sound", "language"],
|
|
473
|
+
page: ["theme", "textSize", "history", "clear", "sound", "language"],
|
|
474
|
+
modal: ["theme", "textSize", "history", "close", "clear", "fullscreen", "popOut", "sound", "language"],
|
|
475
|
+
drawer: ["theme", "textSize", "history", "close", "clear", "fullscreen", "popOut", "sound", "language"]
|
|
466
476
|
};
|
|
467
477
|
var DEFAULT_SOUND = {
|
|
468
478
|
enabled: true,
|
|
@@ -473,7 +483,7 @@ var DEFAULT_HAPTICS = {
|
|
|
473
483
|
enabled: true,
|
|
474
484
|
events: void 0
|
|
475
485
|
};
|
|
476
|
-
var DEFAULT_MODULES = [{ label: "
|
|
486
|
+
var DEFAULT_MODULES = [{ label: "tabConversations", layout: "chat" }];
|
|
477
487
|
var DEFAULT_HOME_MODULE = { showSearchBar: true };
|
|
478
488
|
|
|
479
489
|
// src/core/config/resolve.ts
|
|
@@ -498,6 +508,8 @@ function resolveOptions(rawOpts) {
|
|
|
498
508
|
pageContext: sanitizePageContext(opts.pageContext),
|
|
499
509
|
position: presentation.position ?? "bottom-right",
|
|
500
510
|
themeMode,
|
|
511
|
+
// Purely an end-user preference (the ⋯ menu cycler) — no config input.
|
|
512
|
+
textSize: "normal",
|
|
501
513
|
themeOverrides,
|
|
502
514
|
mode,
|
|
503
515
|
iframe: presentation.iframe ?? false,
|
|
@@ -605,7 +617,7 @@ function resolveModules(overrides) {
|
|
|
605
617
|
resolved.greetingText = m.greetingText;
|
|
606
618
|
resolved.showGreeting = m.showGreeting ?? true;
|
|
607
619
|
resolved.showSearchBar = m.showSearchBar ?? DEFAULT_HOME_MODULE.showSearchBar;
|
|
608
|
-
resolved.
|
|
620
|
+
resolved.showRecentConversations = m.showRecentConversations ?? true;
|
|
609
621
|
if (m.userAvatars && m.userAvatars.length > 0) resolved.userAvatars = m.userAvatars;
|
|
610
622
|
if (m.status) resolved.status = m.status;
|
|
611
623
|
resolved.contentBlockTitle = m.contentBlockTitle;
|
|
@@ -685,14 +697,17 @@ function resolveLauncher(overrides) {
|
|
|
685
697
|
}
|
|
686
698
|
|
|
687
699
|
// src/core/config/overrides.ts
|
|
688
|
-
function applyOptionOverrides(options, activeLocale, activeThemeMode) {
|
|
689
|
-
if (activeLocale === options.locale && activeThemeMode === options.themeMode
|
|
700
|
+
function applyOptionOverrides(options, activeLocale, activeThemeMode, activeTextSize) {
|
|
701
|
+
if (activeLocale === options.locale && activeThemeMode === options.themeMode && activeTextSize === options.textSize) {
|
|
702
|
+
return options;
|
|
703
|
+
}
|
|
690
704
|
const next = { ...options };
|
|
691
705
|
if (activeLocale !== options.locale) {
|
|
692
706
|
next.locale = activeLocale;
|
|
693
707
|
next.strings = resolveStrings(activeLocale, options.stringsOverride);
|
|
694
708
|
}
|
|
695
709
|
if (activeThemeMode !== options.themeMode) next.themeMode = activeThemeMode;
|
|
710
|
+
if (activeTextSize !== options.textSize) next.textSize = activeTextSize;
|
|
696
711
|
return next;
|
|
697
712
|
}
|
|
698
713
|
|
|
@@ -777,6 +792,7 @@ var ACTION_NAME_LITERALS = [
|
|
|
777
792
|
"history",
|
|
778
793
|
"language",
|
|
779
794
|
"theme",
|
|
795
|
+
"textSize",
|
|
780
796
|
"close"
|
|
781
797
|
];
|
|
782
798
|
var boolAttr = (v) => v !== "false";
|
|
@@ -964,19 +980,19 @@ function bindHostCommands(host, handlers) {
|
|
|
964
980
|
}
|
|
965
981
|
|
|
966
982
|
// src/styles/tokens.css
|
|
967
|
-
var tokens_default = ':host{--__P__-accent: __BRAND_ACCENT__;--__P__-accent-text: __BRAND_ACCENT_TEXT__;--__P__-radius: __BRAND_RADIUS__;--__P__-radius-sm: 8px;--__P__-radius-md: 10px;--__P__-radius-lg: 16px;--__P__-font: __BRAND_FONT__;--__P__-font-display: var(--__P__-font);--__P__-font-mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;--__P__-bg: oklch(1 0 0);--__P__-bg-elevated: oklch(.9789 .0029 278.3);--__P__-surface: var(--__P__-bg-elevated);--__P__-muted: var(--__P__-fg-muted);--__P__-hover: oklch(.1686 .011 278.3 / .06);--__P__-fg: oklch(.1686 .011 278.3);--__P__-fg-muted: oklch(.4932 .0301 278.3);--__P__-border: oklch(.9312 .0084 278.3);--__P__-border-strong: oklch(.8757 .0131 278.3);--__P__-bubble-user: var(--__P__-accent);--__P__-bubble-user-text: var(--__P__-accent-text);--__P__-bubble-assistant: oklch(.9638 .0058 278.3);--__P__-bubble-assistant-text: var(--__P__-fg);--__P__-on-accent: var(--__P__-accent-text);--__P__-success: oklch(.6456 .1654 151.53);--__P__-warning: oklch(.7135 .1494 74.05);--__P__-danger: oklch(.5966 .1818 24.51);--__P__-danger-text: oklch(.5054 .1905 27.52);--__P__-danger-bg: oklch(.5966 .1818 24.51 / .1);--__P__-neutral: oklch(.7137 .0192 278.3);--__P__-focus: var(--__P__-accent);--__P__-shadow-panel: 0 8px 24px -8px rgba(13, 15, 20, .18), 0 24px 64px -24px rgba(13, 15, 20, .24);--__P__-shadow-card: 0 1px 2px rgba(13, 15, 20, .06), 0 4px 12px -6px rgba(13, 15, 20, .12);--__P__-backdrop: oklch(.1686 .011 278.3 / .55);--__P__-shadow-fab: 0 6px 16px -4px color-mix(in oklch, var(--__P__-accent) 45%, transparent), 0 12px 32px -12px rgba(13, 15, 20, .25);--__P__-z-fab: 2147483600;--__P__-z-panel: 2147483601;--__P__-panel-w: 380px;--__P__-panel-h: 600px;--__P__-fab-size: 56px;--__P__-space-1: 4px;--__P__-space-2: 8px;--__P__-space-3: 12px;--__P__-space-4: 16px;--__P__-space-5: 20px;--__P__-space-6: 24px;--__P__-space-8: 32px;--__P__-text-xs: 12px;--__P__-text-sm: 13px;--__P__-text-base: 15px;--__P__-text-md: 16px;--__P__-text-lg: 18px;--__P__-text-xl: 22px;--__P__-text-2xl: 30px
|
|
983
|
+
var tokens_default = ':host{--__P__-accent: __BRAND_ACCENT__;--__P__-accent-text: __BRAND_ACCENT_TEXT__;--__P__-radius: __BRAND_RADIUS__;--__P__-radius-sm: 8px;--__P__-radius-md: 10px;--__P__-radius-lg: 16px;--__P__-font: __BRAND_FONT__;--__P__-font-display: var(--__P__-font);--__P__-font-mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;--__P__-bg: oklch(1 0 0);--__P__-bg-elevated: oklch(.9789 .0029 278.3);--__P__-surface: var(--__P__-bg-elevated);--__P__-muted: var(--__P__-fg-muted);--__P__-hover: oklch(.1686 .011 278.3 / .06);--__P__-fg: oklch(.1686 .011 278.3);--__P__-fg-muted: oklch(.4932 .0301 278.3);--__P__-border: oklch(.9312 .0084 278.3);--__P__-border-strong: oklch(.8757 .0131 278.3);--__P__-bubble-user: var(--__P__-accent);--__P__-bubble-user-text: var(--__P__-accent-text);--__P__-bubble-assistant: oklch(.9638 .0058 278.3);--__P__-bubble-assistant-text: var(--__P__-fg);--__P__-on-accent: var(--__P__-accent-text);--__P__-success: oklch(.6456 .1654 151.53);--__P__-warning: oklch(.7135 .1494 74.05);--__P__-danger: oklch(.5966 .1818 24.51);--__P__-danger-text: oklch(.5054 .1905 27.52);--__P__-danger-bg: oklch(.5966 .1818 24.51 / .1);--__P__-neutral: oklch(.7137 .0192 278.3);--__P__-focus: var(--__P__-accent);--__P__-shadow-panel: 0 8px 24px -8px rgba(13, 15, 20, .18), 0 24px 64px -24px rgba(13, 15, 20, .24);--__P__-shadow-card: 0 1px 2px rgba(13, 15, 20, .06), 0 4px 12px -6px rgba(13, 15, 20, .12);--__P__-backdrop: oklch(.1686 .011 278.3 / .55);--__P__-shadow-fab: 0 6px 16px -4px color-mix(in oklch, var(--__P__-accent) 45%, transparent), 0 12px 32px -12px rgba(13, 15, 20, .25);--__P__-z-fab: 2147483600;--__P__-z-panel: 2147483601;--__P__-panel-w: 380px;--__P__-panel-h: 600px;--__P__-fab-size: 56px;--__P__-space-1: 4px;--__P__-space-2: 8px;--__P__-space-3: 12px;--__P__-space-4: 16px;--__P__-space-5: 20px;--__P__-space-6: 24px;--__P__-space-8: 32px;--__P__-text-scale: 1;--__P__-text-xs: calc(12px * var(--__P__-text-scale));--__P__-text-sm: calc(13px * var(--__P__-text-scale));--__P__-text-base: calc(15px * var(--__P__-text-scale));--__P__-text-md: calc(16px * var(--__P__-text-scale));--__P__-text-lg: calc(18px * var(--__P__-text-scale));--__P__-text-xl: calc(22px * var(--__P__-text-scale));--__P__-text-2xl: calc(30px * var(--__P__-text-scale))}:host([data-text-size="small"]){--__P__-text-scale: .9}:host([data-text-size="large"]){--__P__-text-scale: 1.15}:host{--__P__-ease: cubic-bezier(.2, .7, .2, 1);--__P__-ease-out: cubic-bezier(.2, .7, .2, 1);--__P__-ease-in: cubic-bezier(.4, 0, 1, 1);--__P__-ease-in-out: cubic-bezier(.65, 0, .35, 1);--__P__-dur-quick: .12s;--__P__-dur-base: .22s;--__P__-dur-slow: .32s;font-family:var(--__P__-font);color:var(--__P__-fg);color-scheme:light}:host([data-theme="dark"]){--__P__-bg: oklch(.1783 .0128 278.3);--__P__-bg-elevated: oklch(.2232 .0182 278.3);--__P__-fg: oklch(.9368 .01 278.3);--__P__-fg-muted: oklch(.7048 .0296 278.3);--__P__-border: oklch(.2752 .0266 278.3);--__P__-border-strong: oklch(.335 .0291 278.3);--__P__-hover: oklch(.9368 .01 278.3 / .08);--__P__-bubble-assistant: oklch(.2474 .0311 278.3);--__P__-bubble-assistant-text: var(--__P__-fg);--__P__-danger-text: oklch(.8077 .1035 19.57);--__P__-danger-bg: oklch(.5966 .1818 24.51 / .18);--__P__-shadow-panel: 0 8px 24px -8px rgba(0, 0, 0, .6), 0 24px 64px -24px rgba(0, 0, 0, .7);--__P__-shadow-card: 0 1px 2px rgba(0, 0, 0, .4), 0 4px 12px -6px rgba(0, 0, 0, .5);--__P__-backdrop: rgba(0, 0, 0, .65);color-scheme:dark}@media(prefers-color-scheme:dark){:host([data-theme="auto"]){--__P__-bg: oklch(.1783 .0128 278.3);--__P__-bg-elevated: oklch(.2232 .0182 278.3);--__P__-fg: oklch(.9368 .01 278.3);--__P__-fg-muted: oklch(.7048 .0296 278.3);--__P__-border: oklch(.2752 .0266 278.3);--__P__-border-strong: oklch(.335 .0291 278.3);--__P__-hover: oklch(.9368 .01 278.3 / .08);--__P__-bubble-assistant: oklch(.2474 .0311 278.3);--__P__-bubble-assistant-text: var(--__P__-fg);--__P__-shadow-panel: 0 8px 24px -8px rgba(0, 0, 0, .6), 0 24px 64px -24px rgba(0, 0, 0, .7);color-scheme:dark}}@media(prefers-reduced-motion:reduce){:host{--__P__-dur-quick: 1ms;--__P__-dur-base: 1ms;--__P__-dur-slow: 1ms}}\n';
|
|
968
984
|
|
|
969
985
|
// src/styles/reset.css
|
|
970
986
|
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';
|
|
971
987
|
|
|
972
988
|
// src/styles/panel.css
|
|
973
|
-
var panel_default = '.__P__-anchor{right:16px;bottom:16px}: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:14px}.__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:14px;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:#ffffff26}.__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)}: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;align-items:stretch;padding:0}: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}: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:14px;font-weight:600;flex:1;letter-spacing:-.01em}.__P__-header-actions{margin-left: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:14px;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-wrap{position:relative;flex:1;min-height:0;display:flex;flex-direction:column}.__P__-jump{position:absolute;right: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: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;scrollbar-width:thin;scrollbar-color:var(--__P__-border-strong) transparent;scrollbar-gutter:stable}.__P__-list::-webkit-scrollbar{width:8px}.__P__-list::-webkit-scrollbar-thumb{background:var(--__P__-border-strong);border-radius:8px}.__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:11px;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:14px;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-bottom-right-radius:5px}.__P__-bubble-row[data-role=assistant] .__P__-bubble{background:var(--__P__-bubble-assistant);color:var(--__P__-bubble-assistant-text);border-bottom-left-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:11px;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-left:1.5em;margin:10px 0}.__P__-md ul{list-style:disc}.__P__-md ol{list-style:decimal}.__P__-md li{margin:6px 0;padding-left: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:12.5px;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-left:3px solid color-mix(in srgb,var(--__P__-accent) 50%,transparent);background:color-mix(in srgb,var(--__P__-accent) 5%,transparent);border-radius:0 var(--__P__-radius-sm) var(--__P__-radius-sm) 0;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:left}.__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-left:var(--__P__-space-3);border-left: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::-webkit-details-marker{display:none}.__P__-reasoning-summary:before{content:"";width:5px;height:5px;border-right: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:14px;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:16px}.__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:14px;text-align:center}.__P__-history-group{display:flex;flex-direction:column;padding:0 var(--__P__-space-2)}.__P__-history-heading{font-size:var(--__P__-text-xs);font-weight:600;color:var(--__P__-fg-muted);padding:12px 8px 6px;text-transform:uppercase;letter-spacing:.04em}.__P__-history-item{all:unset;display:flex;flex-direction:column;gap:3px;padding:10px 12px;border-radius:var(--__P__-radius-md);cursor:pointer;transition:background var(--__P__-dur-base) var(--__P__-ease)}.__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-title{font-size:14px;font-weight:500;color:var(--__P__-fg);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.__P__-history-preview{font-size:var(--__P__-text-xs);color:var(--__P__-fg-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.__P__-history-item[data-closed=true] .__P__-history-title:after{content:"\\2022";margin-left:var(--__P__-space-2);opacity:.5}.__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:11px;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:11px;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%;right: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__-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{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.__P__-module{display:flex;flex-direction:column;height:100%;min-height:0}.__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{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__-help-card .__P__-list-row:hover{background:var(--__P__-hover)}.__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:10px;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:14px;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-greeting{margin:28px 0 0;font-family:var(--__P__-font-display);font-size:var(--__P__-text-2xl);font-weight:800;line-height:1.18;letter-spacing:-.01em;overflow-wrap:anywhere}.__P__-home-lead{margin:2px 0 0;font-family:var(--__P__-font-display);font-size:var(--__P__-text-2xl);font-weight:800;line-height:1.18;letter-spacing:-.01em;color:color-mix(in srgb,var(--__P__-on-accent) 88%,transparent);overflow-wrap:anywhere}.__P__-home-avatars{display:flex}.__P__-home-avatar{width:30px;height:30px;border-radius:999px;overflow:hidden;margin-left:-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-left: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:left;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:14px}.__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:14px}.__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:left}.__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:14px}.__P__-home-search-input{flex:1;border:0;background:transparent;font-size:14px;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:left;padding:var(--__P__-space-3) var(--__P__-space-2);border-radius:var(--__P__-radius-sm)}.__P__-list-row:hover{background:var(--__P__-bg-elevated)}.__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:left;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-tags{display:flex;gap:6px;flex-wrap:wrap}.__P__-news-tag{font-size:var(--__P__-text-xs);font-weight:600;color:var(--__P__-accent);background:color-mix(in srgb,var(--__P__-accent) 12%,transparent);padding:2px 8px;border-radius:999px}.__P__-news-title{font-weight:700;font-size:var(--__P__-text-md)}.__P__-news-summary{color:var(--__P__-fg-muted);font-size:14px;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;right: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-3)}.__P__-field{display:flex;flex-direction:column;gap:4px}.__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%;box-sizing:border-box;padding:var(--__P__-space-2) 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-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:6px}.__P__-choice{display:flex;align-items:flex-start;gap:8px;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:2px}.__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-2);padding:var(--__P__-space-3) var(--__P__-space-4) var(--__P__-space-4);border-top:1px solid var(--__P__-border);flex:1 1 auto;min-height:0;overflow-y:auto}.__P__-list-wrap:has(+.__P__-form-gate){flex:0 1 auto;max-height:40%}.__P__-list-wrap:has(+.__P__-form-gate) .__P__-list:empty{padding:0}.__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__-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)}\n';
|
|
989
|
+
var panel_default = '.__P__-anchor{right:16px;bottom:16px}: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:#ffffff26}.__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)}: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;align-items:stretch;padding:0}: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}: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-left: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-wrap{position:relative;flex:1;min-height:0;display:flex;flex-direction:column}.__P__-jump{position:absolute;right: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: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;scrollbar-width:thin;scrollbar-color:var(--__P__-border-strong) transparent;scrollbar-gutter:stable}.__P__-list::-webkit-scrollbar{width:8px}.__P__-list::-webkit-scrollbar-thumb{background:var(--__P__-border-strong);border-radius:8px}.__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-bottom-right-radius:5px}.__P__-bubble-row[data-role=assistant] .__P__-bubble{background:var(--__P__-bubble-assistant);color:var(--__P__-bubble-assistant-text);border-bottom-left-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-left:1.5em;margin:10px 0}.__P__-md ul{list-style:disc}.__P__-md ol{list-style:decimal}.__P__-md li{margin:6px 0;padding-left: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-left:3px solid color-mix(in srgb,var(--__P__-accent) 50%,transparent);background:color-mix(in srgb,var(--__P__-accent) 5%,transparent);border-radius:0 var(--__P__-radius-sm) var(--__P__-radius-sm) 0;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:left}.__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-left:var(--__P__-space-3);border-left: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::-webkit-details-marker{display:none}.__P__-reasoning-summary:before{content:"";width:5px;height:5px;border-right: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: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-2)}.__P__-history-heading{font-size:var(--__P__-text-xs);font-weight:600;color:var(--__P__-fg-muted);padding:12px 8px 6px;text-transform:uppercase;letter-spacing:.04em}.__P__-history-item{all:unset;display:flex;flex-direction:column;gap:3px;padding:10px 12px;border-radius:var(--__P__-radius-md);cursor:pointer;transition:background var(--__P__-dur-base) var(--__P__-ease)}.__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-title{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-preview{font-size:var(--__P__-text-xs);color:var(--__P__-fg-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.__P__-history-item[data-closed=true] .__P__-history-title:after{content:"\\2022";margin-left:var(--__P__-space-2);opacity:.5}.__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%;right: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__-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{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.__P__-module{display:flex;flex-direction:column;height:100%;min-height:0}.__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__-help-card .__P__-list-row:hover{background:var(--__P__-hover)}.__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-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:2px 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;color:color-mix(in srgb,var(--__P__-on-accent) 88%,transparent);overflow-wrap:anywhere}.__P__-home-avatars{display:flex}.__P__-home-avatar{width:30px;height:30px;border-radius:999px;overflow:hidden;margin-left:-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-left: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:left;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:left}.__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:left;padding:var(--__P__-space-3) var(--__P__-space-2);border-radius:var(--__P__-radius-sm)}.__P__-list-row:hover{background:var(--__P__-bg-elevated)}.__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:left;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-tags{display:flex;gap:6px;flex-wrap:wrap}.__P__-news-tag{font-size:var(--__P__-text-xs);font-weight:600;color:var(--__P__-accent);background:color-mix(in srgb,var(--__P__-accent) 12%,transparent);padding:2px 8px;border-radius:999px}.__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;right: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-3)}.__P__-field{display:flex;flex-direction:column;gap:4px}.__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%;box-sizing:border-box;padding:var(--__P__-space-2) 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-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:6px}.__P__-choice{display:flex;align-items:flex-start;gap:8px;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:2px}.__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-2);padding:var(--__P__-space-3);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-title{font-weight:400}.__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)}\n';
|
|
974
990
|
|
|
975
991
|
// src/styles/standalone.css
|
|
976
992
|
var standalone_default = ".__P__-standalone-page{margin:0;height:100vh;background:var(--__P__-bg, #fff);display:grid;place-items:stretch}\n";
|
|
977
993
|
|
|
978
994
|
// src/styles/page.css
|
|
979
|
-
var page_default = ':host([data-mode="page"]){min-height:0}:host([data-mode="page"]) .__P__-page-shell{display:grid;grid-template-columns:280px 1fr;width:100%;height:100%;min-height:0;background:var(--__P__-bg);color:var(--__P__-fg);transition:grid-template-columns var(--__P__-dur-base) var(--__P__-ease-in-out)}:host([data-mode="page"]) .__P__-page-shell[data-sidebar-collapsed=true]{grid-template-columns:48px 1fr}:host([data-mode="page"]) .__P__-page-chat{display:flex;flex-direction:column;min-width:0;min-height:0;overflow:hidden}:host([data-mode="page"]) .__P__-anchor{position:static;inset:auto;padding:0;align-items:stretch;width:100%;height:100%;min-width:0;min-height:0;flex:1 1 0}:host([data-mode="page"]) .__P__-panel{width:100%;height:100%;min-width:0;min-height:0;max-width:none;max-height:none;border-radius:0;border:0;box-shadow:none;animation:none}:host([data-mode="page"]) .__P__-sidebar{border-right:1px solid var(--__P__-border);display:flex;flex-direction:column;overflow:hidden;background:var(--__P__-surface)}:host([data-mode="page"]) .__P__-sidebar-header{padding:var(--__P__-space-4) var(--__P__-space-5);border-bottom:1px solid var(--__P__-border);display:flex;align-items:center;justify-content:space-between;gap:var(--__P__-space-2);min-height:56px;box-sizing:border-box}:host([data-mode="page"]) .__P__-sidebar[data-collapsed=true] .__P__-sidebar-header{padding:var(--__P__-space-4) var(--__P__-space-2);justify-content:center}:host([data-mode="page"]) .__P__-sidebar[data-collapsed=true] .__P__-sidebar-logo,:host([data-mode="page"]) .__P__-sidebar[data-collapsed=true] .__P__-sidebar-title{display:none}:host([data-mode="page"]) .__P__-sidebar-toggle{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:1px solid var(--__P__-border);border-radius:6px;background:transparent;color:var(--__P__-fg);cursor:pointer;transition:background .12s,border-color .12s}:host([data-mode="page"]) .__P__-sidebar-toggle:hover{background:var(--__P__-hover);border-color:var(--__P__-accent)}:host([data-mode="page"]) .__P__-sidebar-toggle:focus-visible{outline:2px solid var(--__P__-accent);outline-offset:2px}:host([data-mode="page"]) .__P__-sidebar-logo{height:32px;display:block}:host([data-mode="page"]) .__P__-sidebar-title{font-size:var(--__P__-text-md);font-weight:600}:host([data-mode="page"]) .__P__-sidebar-section{padding:var(--__P__-space-3) var(--__P__-space-4);border-bottom:1px solid var(--__P__-border)}:host([data-mode="page"]) .__P__-sidebar-nav{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px}:host([data-mode="page"]) .__P__-sidebar-nav-item{display:flex;align-items:center;gap:10px;padding:var(--__P__-space-2) var(--__P__-space-3);border-radius:var(--__P__-radius-sm);color:var(--__P__-fg);text-decoration:none;font-size:14px;transition:background var(--__P__-dur-quick) var(--__P__-ease-out)}:host([data-mode="page"]) .__P__-sidebar-nav-item:hover{background:var(--__P__-hover)}:host([data-mode="page"]) .__P__-sidebar-nav-item:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:-2px}:host([data-mode="page"]) .__P__-sidebar-cards{display:grid;grid-template-columns:1fr;gap:var(--__P__-space-2)}:host([data-mode="page"]) .__P__-sidebar-card{display:block;padding:10px 12px;border:1px solid var(--__P__-border);border-radius:var(--__P__-radius-sm);text-decoration:none;color:var(--__P__-fg);transition:border-color var(--__P__-dur-quick) var(--__P__-ease-out)}:host([data-mode="page"]) .__P__-sidebar-card:hover{border-color:var(--__P__-accent)}:host([data-mode="page"]) .__P__-sidebar-card:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px}:host([data-mode="page"]) .__P__-sidebar-card-label{font-weight:600;font-size:14px}:host([data-mode="page"]) .__P__-sidebar-card-desc{font-size:var(--__P__-text-xs);color:var(--__P__-muted);margin-top:2px}:host([data-mode="page"]) .__P__-sidebar-conversations{flex:1 1 auto;overflow-y:auto;padding:var(--__P__-space-3) var(--__P__-space-4)}:host([data-mode="page"]) .__P__-page-chat{display:flex;flex-direction:column;overflow:hidden}@media(max-width:768px){:host([data-mode="page"]) .__P__-page-shell{grid-template-columns:1fr}:host([data-mode="page"]) .__P__-sidebar{display:none}}\n';
|
|
995
|
+
var page_default = ':host([data-mode="page"]){min-height:0}:host([data-mode="page"]) .__P__-page-shell{display:grid;grid-template-columns:280px 1fr;width:100%;height:100%;min-height:0;background:var(--__P__-bg);color:var(--__P__-fg);transition:grid-template-columns var(--__P__-dur-base) var(--__P__-ease-in-out)}:host([data-mode="page"]) .__P__-page-shell[data-sidebar-collapsed=true]{grid-template-columns:48px 1fr}:host([data-mode="page"]) .__P__-page-chat{display:flex;flex-direction:column;min-width:0;min-height:0;overflow:hidden}:host([data-mode="page"]) .__P__-anchor{position:static;inset:auto;padding:0;align-items:stretch;width:100%;height:100%;min-width:0;min-height:0;flex:1 1 0}:host([data-mode="page"]) .__P__-panel{width:100%;height:100%;min-width:0;min-height:0;max-width:none;max-height:none;border-radius:0;border:0;box-shadow:none;animation:none}:host([data-mode="page"]) .__P__-sidebar{border-right:1px solid var(--__P__-border);display:flex;flex-direction:column;overflow:hidden;background:var(--__P__-surface)}:host([data-mode="page"]) .__P__-sidebar-header{padding:var(--__P__-space-4) var(--__P__-space-5);border-bottom:1px solid var(--__P__-border);display:flex;align-items:center;justify-content:space-between;gap:var(--__P__-space-2);min-height:56px;box-sizing:border-box}:host([data-mode="page"]) .__P__-sidebar[data-collapsed=true] .__P__-sidebar-header{padding:var(--__P__-space-4) var(--__P__-space-2);justify-content:center}:host([data-mode="page"]) .__P__-sidebar[data-collapsed=true] .__P__-sidebar-logo,:host([data-mode="page"]) .__P__-sidebar[data-collapsed=true] .__P__-sidebar-title{display:none}:host([data-mode="page"]) .__P__-sidebar-toggle{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:1px solid var(--__P__-border);border-radius:6px;background:transparent;color:var(--__P__-fg);cursor:pointer;transition:background .12s,border-color .12s}:host([data-mode="page"]) .__P__-sidebar-toggle:hover{background:var(--__P__-hover);border-color:var(--__P__-accent)}:host([data-mode="page"]) .__P__-sidebar-toggle:focus-visible{outline:2px solid var(--__P__-accent);outline-offset:2px}:host([data-mode="page"]) .__P__-sidebar-logo{height:32px;display:block}:host([data-mode="page"]) .__P__-sidebar-title{font-size:var(--__P__-text-md);font-weight:600}:host([data-mode="page"]) .__P__-sidebar-section{padding:var(--__P__-space-3) var(--__P__-space-4);border-bottom:1px solid var(--__P__-border)}:host([data-mode="page"]) .__P__-sidebar-nav{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px}:host([data-mode="page"]) .__P__-sidebar-nav-item{display:flex;align-items:center;gap:10px;padding:var(--__P__-space-2) var(--__P__-space-3);border-radius:var(--__P__-radius-sm);color:var(--__P__-fg);text-decoration:none;font-size:calc(14px * var(--__P__-text-scale));transition:background var(--__P__-dur-quick) var(--__P__-ease-out)}:host([data-mode="page"]) .__P__-sidebar-nav-item:hover{background:var(--__P__-hover)}:host([data-mode="page"]) .__P__-sidebar-nav-item:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:-2px}:host([data-mode="page"]) .__P__-sidebar-cards{display:grid;grid-template-columns:1fr;gap:var(--__P__-space-2)}:host([data-mode="page"]) .__P__-sidebar-card{display:block;padding:10px 12px;border:1px solid var(--__P__-border);border-radius:var(--__P__-radius-sm);text-decoration:none;color:var(--__P__-fg);transition:border-color var(--__P__-dur-quick) var(--__P__-ease-out)}:host([data-mode="page"]) .__P__-sidebar-card:hover{border-color:var(--__P__-accent)}:host([data-mode="page"]) .__P__-sidebar-card:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px}:host([data-mode="page"]) .__P__-sidebar-card-label{font-weight:600;font-size:calc(14px * var(--__P__-text-scale))}:host([data-mode="page"]) .__P__-sidebar-card-desc{font-size:var(--__P__-text-xs);color:var(--__P__-muted);margin-top:2px}:host([data-mode="page"]) .__P__-sidebar-conversations{flex:1 1 auto;overflow-y:auto;padding:var(--__P__-space-3) var(--__P__-space-4)}:host([data-mode="page"]) .__P__-page-chat{display:flex;flex-direction:column;overflow:hidden}@media(max-width:768px){:host([data-mode="page"]) .__P__-page-shell{grid-template-columns:1fr}:host([data-mode="page"]) .__P__-sidebar{display:none}}\n';
|
|
980
996
|
|
|
981
997
|
// src/styles/index.ts
|
|
982
998
|
var PREFIX = true ? "helpai" : "helpai";
|
|
@@ -1291,7 +1307,7 @@ var DEFAULT_PATHS = {
|
|
|
1291
1307
|
/**
|
|
1292
1308
|
* Form submission (the event-driven forms engine). POST `{ visitorId,
|
|
1293
1309
|
* conversationId, formId, trigger, values, skipped? }` → record the form's answers
|
|
1294
|
-
* immediately, keyed by the same
|
|
1310
|
+
* immediately, keyed by the same `visitorId` + `conversationId` the chat uses.
|
|
1295
1311
|
* Overridable via `endpoints.submitForm`. Fire-and-forget; 404 is ignored.
|
|
1296
1312
|
*/
|
|
1297
1313
|
submitForm: "/ai/agent/submit-form"
|
|
@@ -2629,6 +2645,10 @@ var MoreIcon = () => /* @__PURE__ */ jsxs("svg", { ...props, "aria-hidden": "tru
|
|
|
2629
2645
|
] });
|
|
2630
2646
|
var SpeakerIcon = () => /* @__PURE__ */ jsx("svg", { ...props, "aria-hidden": "true", children: /* @__PURE__ */ jsx("path", { d: "M11 5 6 9H2v6h4l5 4zM15 9a5 5 0 0 1 0 6M18 7a9 9 0 0 1 0 10" }) });
|
|
2631
2647
|
var SpeakerMutedIcon = () => /* @__PURE__ */ jsx("svg", { ...props, "aria-hidden": "true", children: /* @__PURE__ */ jsx("path", { d: "M11 5 6 9H2v6h4l5 4zM22 9l-6 6M16 9l6 6" }) });
|
|
2648
|
+
var TextSizeIcon = () => /* @__PURE__ */ jsxs("svg", { ...props, "aria-hidden": "true", children: [
|
|
2649
|
+
/* @__PURE__ */ jsx("path", { d: "M3 18 8 6l5 12M4.7 14h6.6" }),
|
|
2650
|
+
/* @__PURE__ */ jsx("path", { d: "M14.5 18l3.2-7 3.2 7M15.6 15.8h4.2" })
|
|
2651
|
+
] });
|
|
2632
2652
|
var CheckIcon = () => /* @__PURE__ */ jsx("svg", { ...props, "aria-hidden": "true", children: /* @__PURE__ */ jsx("path", { d: "M20 6 9 17l-5-5" }) });
|
|
2633
2653
|
var HistoryIcon = () => /* @__PURE__ */ jsxs("svg", { ...props, "aria-hidden": "true", children: [
|
|
2634
2654
|
/* @__PURE__ */ jsx("path", { d: "M3 3v6h6" }),
|
|
@@ -2809,8 +2829,8 @@ var TID = {
|
|
|
2809
2829
|
sidebar: `${p2}-sidebar`,
|
|
2810
2830
|
/** Sidebar collapse / expand toggle. */
|
|
2811
2831
|
sidebarToggle: `${p2}-sidebar-toggle`,
|
|
2812
|
-
/** Sidebar "New
|
|
2813
|
-
|
|
2832
|
+
/** Sidebar "New conversation" button. */
|
|
2833
|
+
sidebarNewConversation: `${p2}-sidebar-new-conversation`,
|
|
2814
2834
|
/** Sidebar history row — suffix `-{conversationId}` at the JSX site. */
|
|
2815
2835
|
sidebarItem: `${p2}-sidebar-item`,
|
|
2816
2836
|
// ── Messenger modules ───────────────────────────────────────────
|
|
@@ -2820,7 +2840,7 @@ var TID = {
|
|
|
2820
2840
|
modulesEmpty: `${p2}-modules-empty`,
|
|
2821
2841
|
/** Bottom-nav tab button — suffix `-{moduleId}` at the JSX site. */
|
|
2822
2842
|
tab: `${p2}-tab`,
|
|
2823
|
-
/** Unread badge on the
|
|
2843
|
+
/** Unread badge on the Conversations tab. */
|
|
2824
2844
|
tabBadge: `${p2}-tab-badge`,
|
|
2825
2845
|
/** Home module root. */
|
|
2826
2846
|
homeView: `${p2}-home-view`,
|
|
@@ -2835,7 +2855,7 @@ var TID = {
|
|
|
2835
2855
|
/** Home / Help search bar. */
|
|
2836
2856
|
homeSearch: `${p2}-home-search`,
|
|
2837
2857
|
helpSearch: `${p2}-help-search`,
|
|
2838
|
-
/** Home recent-
|
|
2858
|
+
/** Home recent-conversation card. */
|
|
2839
2859
|
homeRecent: `${p2}-home-recent`,
|
|
2840
2860
|
/** Home content-list row ("Popular articles") — suffix `-{id}`. */
|
|
2841
2861
|
homeContentRow: `${p2}-home-content-row`,
|
|
@@ -2844,8 +2864,10 @@ var TID = {
|
|
|
2844
2864
|
/** News list item — suffix `-{id}`. */
|
|
2845
2865
|
newsItem: `${p2}-news-item`,
|
|
2846
2866
|
// ── Forms + human-in-the-loop (forms / ask-input / approval) ─────
|
|
2847
|
-
/** Form gate root
|
|
2867
|
+
/** Form gate root — a timeline row that locks the chat while open. */
|
|
2848
2868
|
formGate: `${p2}-form-gate`,
|
|
2869
|
+
/** Collapsed "Form submitted / skipped" marker row (ephemeral). */
|
|
2870
|
+
formDone: `${p2}-form-done`,
|
|
2849
2871
|
/** Form submit button. */
|
|
2850
2872
|
formSubmit: `${p2}-form-submit`,
|
|
2851
2873
|
/** Form skip button (shown only when `skippable`). */
|
|
@@ -3109,6 +3131,7 @@ function isActionVisible(name, mode, panelSize, ctx) {
|
|
|
3109
3131
|
case "history":
|
|
3110
3132
|
case "language":
|
|
3111
3133
|
case "theme":
|
|
3134
|
+
case "textSize":
|
|
3112
3135
|
return true;
|
|
3113
3136
|
case "expand":
|
|
3114
3137
|
return mode === "floating";
|
|
@@ -3812,6 +3835,7 @@ function OverflowMenu({ items, triggerLabel }) {
|
|
|
3812
3835
|
import { jsx as jsx9, jsxs as jsxs7 } from "preact/jsx-runtime";
|
|
3813
3836
|
var p9 = BRAND.cssPrefix;
|
|
3814
3837
|
var NEXT_THEME = { auto: "dark", dark: "light", light: "auto" };
|
|
3838
|
+
var NEXT_TEXT_SIZE = { normal: "large", large: "small", small: "normal" };
|
|
3815
3839
|
function themeIcon(mode) {
|
|
3816
3840
|
if (mode === "light") return /* @__PURE__ */ jsx9(SunIcon, {});
|
|
3817
3841
|
if (mode === "dark") return /* @__PURE__ */ jsx9(MoonIcon, {});
|
|
@@ -3819,7 +3843,7 @@ function themeIcon(mode) {
|
|
|
3819
3843
|
}
|
|
3820
3844
|
function HeaderActions({ panelProps, variant }) {
|
|
3821
3845
|
const { options, panelSize, feedback, onClose, onClear, onExpand, onFullscreen, onPopOut, onSoundToggle } = panelProps;
|
|
3822
|
-
const { onToggleHistory, onLocaleChange, onThemeChange } = panelProps;
|
|
3846
|
+
const { onToggleHistory, onLocaleChange, onThemeChange, onTextSizeChange } = panelProps;
|
|
3823
3847
|
const s = options.strings;
|
|
3824
3848
|
const mode = options.mode;
|
|
3825
3849
|
const isChat = variant === "chat";
|
|
@@ -3829,27 +3853,15 @@ function HeaderActions({ panelProps, variant }) {
|
|
|
3829
3853
|
const visible = (name) => isActionVisible(name, mode, panelSize, { popOutUrl: options.popOutUrl });
|
|
3830
3854
|
const themeMode = options.themeMode;
|
|
3831
3855
|
const themeLabel = { auto: s.themeAuto, light: s.themeLight, dark: s.themeDark };
|
|
3856
|
+
const textSize = options.textSize;
|
|
3857
|
+
const textSizeLabel = {
|
|
3858
|
+
small: s.textSizeSmall,
|
|
3859
|
+
normal: s.textSizeNormal,
|
|
3860
|
+
large: s.textSizeLarge
|
|
3861
|
+
};
|
|
3832
3862
|
const items = [];
|
|
3833
|
-
if (has("
|
|
3834
|
-
items.push({
|
|
3835
|
-
id: "theme",
|
|
3836
|
-
icon: themeIcon(themeMode),
|
|
3837
|
-
label: `${s.theme}: ${themeLabel[themeMode]}`,
|
|
3838
|
-
onSelect: () => onThemeChange(NEXT_THEME[themeMode]),
|
|
3839
|
-
keepOpen: true
|
|
3840
|
-
});
|
|
3841
|
-
}
|
|
3842
|
-
if (has("language") && options.availableLocales.length > 1) {
|
|
3843
|
-
for (const locale of options.availableLocales) {
|
|
3844
|
-
items.push({
|
|
3845
|
-
id: `language:${locale}`,
|
|
3846
|
-
label: `${s.language} \u2014 ${locale}`,
|
|
3847
|
-
lang: locale,
|
|
3848
|
-
type: "switch",
|
|
3849
|
-
on: locale === options.locale,
|
|
3850
|
-
onSelect: () => onLocaleChange(locale)
|
|
3851
|
-
});
|
|
3852
|
-
}
|
|
3863
|
+
if (isChat && has("clear")) {
|
|
3864
|
+
items.push({ id: "clear", icon: /* @__PURE__ */ jsx9(ComposeIcon, {}), label: s.newConversation, onSelect: onClear });
|
|
3853
3865
|
}
|
|
3854
3866
|
if (has("expand") && visible("expand")) {
|
|
3855
3867
|
const on = panelSize === "expanded";
|
|
@@ -3886,8 +3898,35 @@ function HeaderActions({ panelProps, variant }) {
|
|
|
3886
3898
|
onSelect: onSoundToggle
|
|
3887
3899
|
});
|
|
3888
3900
|
}
|
|
3889
|
-
if (
|
|
3890
|
-
items.push({
|
|
3901
|
+
if (has("theme")) {
|
|
3902
|
+
items.push({
|
|
3903
|
+
id: "theme",
|
|
3904
|
+
icon: themeIcon(themeMode),
|
|
3905
|
+
label: `${s.theme}: ${themeLabel[themeMode]}`,
|
|
3906
|
+
onSelect: () => onThemeChange(NEXT_THEME[themeMode]),
|
|
3907
|
+
keepOpen: true
|
|
3908
|
+
});
|
|
3909
|
+
}
|
|
3910
|
+
if (has("textSize")) {
|
|
3911
|
+
items.push({
|
|
3912
|
+
id: "textSize",
|
|
3913
|
+
icon: /* @__PURE__ */ jsx9(TextSizeIcon, {}),
|
|
3914
|
+
label: `${s.textSize}: ${textSizeLabel[textSize]}`,
|
|
3915
|
+
onSelect: () => onTextSizeChange(NEXT_TEXT_SIZE[textSize]),
|
|
3916
|
+
keepOpen: true
|
|
3917
|
+
});
|
|
3918
|
+
}
|
|
3919
|
+
if (has("language") && options.availableLocales.length > 1) {
|
|
3920
|
+
for (const locale of options.availableLocales) {
|
|
3921
|
+
items.push({
|
|
3922
|
+
id: `language:${locale}`,
|
|
3923
|
+
label: `${s.language} \u2014 ${locale}`,
|
|
3924
|
+
lang: locale,
|
|
3925
|
+
type: "switch",
|
|
3926
|
+
on: locale === options.locale,
|
|
3927
|
+
onSelect: () => onLocaleChange(locale)
|
|
3928
|
+
});
|
|
3929
|
+
}
|
|
3891
3930
|
}
|
|
3892
3931
|
const showClose = !!onClose && canShowClose(mode, panelSize, options.actions);
|
|
3893
3932
|
const showHistory = isChat && has("history");
|
|
@@ -3920,6 +3959,10 @@ function HeaderActions({ panelProps, variant }) {
|
|
|
3920
3959
|
] });
|
|
3921
3960
|
}
|
|
3922
3961
|
|
|
3962
|
+
// src/ui/message-list.tsx
|
|
3963
|
+
import { useEffect as useEffect8, useLayoutEffect, useRef as useRef5, useState as useState6 } from "preact/hooks";
|
|
3964
|
+
import { useComputed as useComputed5 } from "@preact/signals";
|
|
3965
|
+
|
|
3923
3966
|
// src/ui/form/dynamic-form.tsx
|
|
3924
3967
|
import { useState as useState5 } from "preact/hooks";
|
|
3925
3968
|
|
|
@@ -4271,10 +4314,17 @@ function FormGate({ form, strings, onSubmit, onSkip }) {
|
|
|
4271
4314
|
)
|
|
4272
4315
|
] });
|
|
4273
4316
|
}
|
|
4274
|
-
|
|
4275
|
-
|
|
4276
|
-
|
|
4277
|
-
|
|
4317
|
+
function FormDoneMarker({ marker, strings }) {
|
|
4318
|
+
const label = marker.outcome === "skipped" ? strings.formSkipped : strings.formSubmitted;
|
|
4319
|
+
return /* @__PURE__ */ jsxs9("div", { class: `${p11}-form-done`, "data-testid": TID.formDone, role: "status", children: [
|
|
4320
|
+
/* @__PURE__ */ jsx11(CheckIcon, {}),
|
|
4321
|
+
/* @__PURE__ */ jsx11("span", { children: label }),
|
|
4322
|
+
marker.title ? /* @__PURE__ */ jsxs9("span", { class: `${p11}-form-done-title`, children: [
|
|
4323
|
+
"\xB7 ",
|
|
4324
|
+
marker.title
|
|
4325
|
+
] }) : null
|
|
4326
|
+
] });
|
|
4327
|
+
}
|
|
4278
4328
|
|
|
4279
4329
|
// src/ui/message-bubble.tsx
|
|
4280
4330
|
import { useComputed as useComputed4 } from "@preact/signals";
|
|
@@ -4736,7 +4786,9 @@ function MessageList({
|
|
|
4736
4786
|
showToolCalls,
|
|
4737
4787
|
loading,
|
|
4738
4788
|
idle,
|
|
4739
|
-
tool
|
|
4789
|
+
tool,
|
|
4790
|
+
form,
|
|
4791
|
+
formMarkers
|
|
4740
4792
|
}) {
|
|
4741
4793
|
const ref = useRef5(null);
|
|
4742
4794
|
const messages = useComputed5(() => messagesSig.value);
|
|
@@ -4792,6 +4844,12 @@ function MessageList({
|
|
|
4792
4844
|
obs.observe(el, { childList: true, subtree: true, characterData: true });
|
|
4793
4845
|
return () => obs.disconnect();
|
|
4794
4846
|
}, [messages.value]);
|
|
4847
|
+
const activeFormId = form?.form.id;
|
|
4848
|
+
useLayoutEffect(() => {
|
|
4849
|
+
const el = ref.current;
|
|
4850
|
+
if (!el || !activeFormId) return;
|
|
4851
|
+
el.scrollTop = el.scrollHeight;
|
|
4852
|
+
}, [activeFormId]);
|
|
4795
4853
|
useEffect8(() => {
|
|
4796
4854
|
const el = ref.current;
|
|
4797
4855
|
if (!el) return;
|
|
@@ -4817,7 +4875,19 @@ function MessageList({
|
|
|
4817
4875
|
const rows = [];
|
|
4818
4876
|
let prevDay = "";
|
|
4819
4877
|
const lastId = messages.value.at(-1)?.id;
|
|
4878
|
+
const pendingMarkers = [...formMarkers ?? []].toSorted(
|
|
4879
|
+
(a, b) => (a.createdAt ?? Infinity) - (b.createdAt ?? Infinity)
|
|
4880
|
+
);
|
|
4881
|
+
const flushMarkersBefore = (createdAt) => {
|
|
4882
|
+
let next = pendingMarkers[0];
|
|
4883
|
+
while (next && next.createdAt !== void 0 && (createdAt === void 0 || next.createdAt <= createdAt)) {
|
|
4884
|
+
pendingMarkers.shift();
|
|
4885
|
+
rows.push(/* @__PURE__ */ jsx17(FormDoneMarker, { marker: next, strings }, next.key));
|
|
4886
|
+
next = pendingMarkers[0];
|
|
4887
|
+
}
|
|
4888
|
+
};
|
|
4820
4889
|
for (const m of messages.value) {
|
|
4890
|
+
flushMarkersBefore(m.createdAt);
|
|
4821
4891
|
const day = dayKey(m.createdAt);
|
|
4822
4892
|
if (day && day !== prevDay) {
|
|
4823
4893
|
rows.push(
|
|
@@ -4841,6 +4911,9 @@ function MessageList({
|
|
|
4841
4911
|
)
|
|
4842
4912
|
);
|
|
4843
4913
|
}
|
|
4914
|
+
for (const marker of pendingMarkers) {
|
|
4915
|
+
rows.push(/* @__PURE__ */ jsx17(FormDoneMarker, { marker, strings }, marker.key));
|
|
4916
|
+
}
|
|
4844
4917
|
return /* @__PURE__ */ jsxs14("div", { class: `${p15}-list-wrap`, children: [
|
|
4845
4918
|
/* @__PURE__ */ jsxs14(
|
|
4846
4919
|
"div",
|
|
@@ -4852,8 +4925,9 @@ function MessageList({
|
|
|
4852
4925
|
"aria-relevant": "additions text",
|
|
4853
4926
|
"data-scrolling": scrolling ? "true" : void 0,
|
|
4854
4927
|
children: [
|
|
4855
|
-
loading && messages.value.length === 0 ? /* @__PURE__ */ jsx17("div", { class: `${p15}-list-loading`, role: "status", children: strings.
|
|
4856
|
-
rows
|
|
4928
|
+
loading && messages.value.length === 0 ? /* @__PURE__ */ jsx17("div", { class: `${p15}-list-loading`, role: "status", children: strings.conversationLoading }) : null,
|
|
4929
|
+
rows,
|
|
4930
|
+
form ? /* @__PURE__ */ jsx17(FormGate, { form: form.form, strings, onSubmit: form.onSubmit, onSkip: form.onSkip }) : null
|
|
4857
4931
|
]
|
|
4858
4932
|
}
|
|
4859
4933
|
),
|
|
@@ -4933,7 +5007,13 @@ var BUCKET_TO_STRING = {
|
|
|
4933
5007
|
lastWeek: "dateLastWeek",
|
|
4934
5008
|
older: "dateOlder"
|
|
4935
5009
|
};
|
|
4936
|
-
function ConversationList({
|
|
5010
|
+
function ConversationList({
|
|
5011
|
+
transport,
|
|
5012
|
+
strings,
|
|
5013
|
+
visitorId,
|
|
5014
|
+
onSelect,
|
|
5015
|
+
onNewConversation
|
|
5016
|
+
}) {
|
|
4937
5017
|
const p33 = BRAND.cssPrefix;
|
|
4938
5018
|
const [state, setState] = useState7("loading");
|
|
4939
5019
|
const [conversations, setChats] = useState7([]);
|
|
@@ -4952,10 +5032,19 @@ function ConversationList({ transport, strings, visitorId, onSelect, onNewChat }
|
|
|
4952
5032
|
cancelled = true;
|
|
4953
5033
|
};
|
|
4954
5034
|
}, [transport, visitorId]);
|
|
4955
|
-
const newChatButton =
|
|
4956
|
-
|
|
4957
|
-
|
|
4958
|
-
|
|
5035
|
+
const newChatButton = onNewConversation ? /* @__PURE__ */ jsx18("div", { class: `${p33}-history-footer`, children: /* @__PURE__ */ jsxs15(
|
|
5036
|
+
"button",
|
|
5037
|
+
{
|
|
5038
|
+
type: "button",
|
|
5039
|
+
class: `${p33}-history-new`,
|
|
5040
|
+
onClick: onNewConversation,
|
|
5041
|
+
"data-testid": TID.sidebarNewConversation,
|
|
5042
|
+
children: [
|
|
5043
|
+
/* @__PURE__ */ jsx18(PlusIcon, {}),
|
|
5044
|
+
strings.newConversation
|
|
5045
|
+
]
|
|
5046
|
+
}
|
|
5047
|
+
) }) : null;
|
|
4959
5048
|
if (state === "loading") {
|
|
4960
5049
|
return /* @__PURE__ */ jsxs15(Fragment2, { children: [
|
|
4961
5050
|
/* @__PURE__ */ jsx18("div", { class: `${p33}-history-empty`, children: strings.historyLoading }),
|
|
@@ -4993,18 +5082,12 @@ function ConversationList({ transport, strings, visitorId, onSelect, onNewChat }
|
|
|
4993
5082
|
] });
|
|
4994
5083
|
}
|
|
4995
5084
|
|
|
4996
|
-
// src/ui/chat-history-pane.tsx
|
|
4997
|
-
import { jsx as jsx19 } from "preact/jsx-runtime";
|
|
4998
|
-
function ChatHistoryPane(props2) {
|
|
4999
|
-
return /* @__PURE__ */ jsx19(ConversationList, { ...props2 });
|
|
5000
|
-
}
|
|
5001
|
-
|
|
5002
5085
|
// src/ui/suggestions.tsx
|
|
5003
|
-
import { jsx as
|
|
5086
|
+
import { jsx as jsx19 } from "preact/jsx-runtime";
|
|
5004
5087
|
var p16 = BRAND.cssPrefix;
|
|
5005
5088
|
function Suggestions({ suggestions, onPick }) {
|
|
5006
5089
|
if (suggestions.length === 0) return null;
|
|
5007
|
-
return /* @__PURE__ */
|
|
5090
|
+
return /* @__PURE__ */ jsx19("div", { class: `${p16}-suggestions`, role: "group", "aria-label": "Suggested replies", children: suggestions.map((s, i) => /* @__PURE__ */ jsx19(
|
|
5008
5091
|
"button",
|
|
5009
5092
|
{
|
|
5010
5093
|
type: "button",
|
|
@@ -5018,7 +5101,7 @@ function Suggestions({ suggestions, onPick }) {
|
|
|
5018
5101
|
}
|
|
5019
5102
|
|
|
5020
5103
|
// src/ui/panel.tsx
|
|
5021
|
-
import { Fragment as Fragment3, jsx as
|
|
5104
|
+
import { Fragment as Fragment3, jsx as jsx20, jsxs as jsxs16 } from "preact/jsx-runtime";
|
|
5022
5105
|
var p17 = BRAND.cssPrefix;
|
|
5023
5106
|
function Panel(props2) {
|
|
5024
5107
|
const { options, onClose } = props2;
|
|
@@ -5054,7 +5137,7 @@ function Panel(props2) {
|
|
|
5054
5137
|
style: { position: "relative" },
|
|
5055
5138
|
"data-testid": TID.panel,
|
|
5056
5139
|
children: [
|
|
5057
|
-
/* @__PURE__ */
|
|
5140
|
+
/* @__PURE__ */ jsx20(
|
|
5058
5141
|
PanelContent,
|
|
5059
5142
|
{
|
|
5060
5143
|
...props2,
|
|
@@ -5063,7 +5146,7 @@ function Panel(props2) {
|
|
|
5063
5146
|
composerAttachApiRef
|
|
5064
5147
|
}
|
|
5065
5148
|
),
|
|
5066
|
-
/* @__PURE__ */
|
|
5149
|
+
/* @__PURE__ */ jsx20(PoweredByBar, { poweredBy: props2.options.poweredBy })
|
|
5067
5150
|
]
|
|
5068
5151
|
}
|
|
5069
5152
|
);
|
|
@@ -5088,13 +5171,14 @@ function PanelContent(props2) {
|
|
|
5088
5171
|
onBack,
|
|
5089
5172
|
onClear,
|
|
5090
5173
|
onToggleHistory,
|
|
5091
|
-
|
|
5092
|
-
|
|
5174
|
+
onSelectHistoryConversation,
|
|
5175
|
+
onNewConversation,
|
|
5093
5176
|
onWidgetSizeChange,
|
|
5094
5177
|
onSend,
|
|
5095
5178
|
onStop,
|
|
5096
5179
|
onSuggestion,
|
|
5097
5180
|
activeForm,
|
|
5181
|
+
formMarkers,
|
|
5098
5182
|
onFormSubmit,
|
|
5099
5183
|
onFormSkip,
|
|
5100
5184
|
tool,
|
|
@@ -5105,11 +5189,11 @@ function PanelContent(props2) {
|
|
|
5105
5189
|
const s = options.strings;
|
|
5106
5190
|
let composerArea;
|
|
5107
5191
|
if (activeForm) {
|
|
5108
|
-
composerArea =
|
|
5192
|
+
composerArea = null;
|
|
5109
5193
|
} else if (canSend) {
|
|
5110
5194
|
composerArea = /* @__PURE__ */ jsxs16(Fragment3, { children: [
|
|
5111
|
-
/* @__PURE__ */
|
|
5112
|
-
/* @__PURE__ */
|
|
5195
|
+
/* @__PURE__ */ jsx20(Suggestions, { suggestions, onPick: onSuggestion }),
|
|
5196
|
+
/* @__PURE__ */ jsx20(
|
|
5113
5197
|
Composer,
|
|
5114
5198
|
{
|
|
5115
5199
|
options,
|
|
@@ -5124,10 +5208,10 @@ function PanelContent(props2) {
|
|
|
5124
5208
|
)
|
|
5125
5209
|
] });
|
|
5126
5210
|
} else {
|
|
5127
|
-
composerArea = /* @__PURE__ */
|
|
5211
|
+
composerArea = /* @__PURE__ */ jsx20(ReadOnlyBanner, { label: s.conversationClosed, ctaLabel: s.startNewConversation, onNewConversation: onClear });
|
|
5128
5212
|
}
|
|
5129
5213
|
return /* @__PURE__ */ jsxs16(Fragment3, { children: [
|
|
5130
|
-
view === "history" ? /* @__PURE__ */
|
|
5214
|
+
view === "history" ? /* @__PURE__ */ jsx20(
|
|
5131
5215
|
HistoryHeader,
|
|
5132
5216
|
{
|
|
5133
5217
|
strings: s,
|
|
@@ -5136,7 +5220,7 @@ function PanelContent(props2) {
|
|
|
5136
5220
|
showClose: canShowClose(options.mode, panelSize, options.actions)
|
|
5137
5221
|
}
|
|
5138
5222
|
) : /* @__PURE__ */ jsxs16("header", { class: `${p17}-header`, "data-testid": TID.panelHeader, children: [
|
|
5139
|
-
onBack ? /* @__PURE__ */
|
|
5223
|
+
onBack ? /* @__PURE__ */ jsx20(
|
|
5140
5224
|
"button",
|
|
5141
5225
|
{
|
|
5142
5226
|
type: "button",
|
|
@@ -5144,24 +5228,24 @@ function PanelContent(props2) {
|
|
|
5144
5228
|
onClick: onBack,
|
|
5145
5229
|
"aria-label": s.moduleBack,
|
|
5146
5230
|
title: s.moduleBack,
|
|
5147
|
-
children: /* @__PURE__ */
|
|
5231
|
+
children: /* @__PURE__ */ jsx20(BackIcon, {})
|
|
5148
5232
|
}
|
|
5149
5233
|
) : null,
|
|
5150
|
-
agent ? /* @__PURE__ */
|
|
5151
|
-
/* @__PURE__ */
|
|
5234
|
+
agent ? /* @__PURE__ */ jsx20(AgentBadge, { agent }) : /* @__PURE__ */ jsx20("h1", { children: s.panelTitle }),
|
|
5235
|
+
/* @__PURE__ */ jsx20(HeaderActions, { panelProps: props2, variant: "chat" })
|
|
5152
5236
|
] }),
|
|
5153
|
-
view === "history" ? /* @__PURE__ */
|
|
5154
|
-
|
|
5237
|
+
view === "history" ? /* @__PURE__ */ jsx20(
|
|
5238
|
+
ConversationList,
|
|
5155
5239
|
{
|
|
5156
5240
|
transport,
|
|
5157
5241
|
strings: s,
|
|
5158
5242
|
visitorId,
|
|
5159
|
-
onSelect: (
|
|
5160
|
-
|
|
5243
|
+
onSelect: (conversation) => onSelectHistoryConversation(conversation.conversationId),
|
|
5244
|
+
onNewConversation
|
|
5161
5245
|
}
|
|
5162
5246
|
) : /* @__PURE__ */ jsxs16(Fragment3, { children: [
|
|
5163
|
-
/* @__PURE__ */
|
|
5164
|
-
/* @__PURE__ */
|
|
5247
|
+
/* @__PURE__ */ jsx20(DropZone, { visible: dragOver, strings: s }),
|
|
5248
|
+
/* @__PURE__ */ jsx20(
|
|
5165
5249
|
MessageList,
|
|
5166
5250
|
{
|
|
5167
5251
|
messagesSig,
|
|
@@ -5171,13 +5255,15 @@ function PanelContent(props2) {
|
|
|
5171
5255
|
showToolCalls: options.showToolCalls,
|
|
5172
5256
|
loading: loadingMessages,
|
|
5173
5257
|
idle: !isStreaming,
|
|
5174
|
-
tool
|
|
5258
|
+
tool,
|
|
5259
|
+
form: activeForm ? { form: activeForm, onSubmit: onFormSubmit, onSkip: onFormSkip } : null,
|
|
5260
|
+
formMarkers
|
|
5175
5261
|
}
|
|
5176
5262
|
),
|
|
5177
5263
|
composerArea,
|
|
5178
|
-
/* @__PURE__ */
|
|
5264
|
+
/* @__PURE__ */ jsx20(ComposerFooter, { disclaimer: options.composerDisclaimer })
|
|
5179
5265
|
] }),
|
|
5180
|
-
options.size.resize?.enabled ? /* @__PURE__ */
|
|
5266
|
+
options.size.resize?.enabled ? /* @__PURE__ */ jsx20(
|
|
5181
5267
|
ResizeGrip,
|
|
5182
5268
|
{
|
|
5183
5269
|
panelEl: containerEl,
|
|
@@ -5197,7 +5283,7 @@ function HistoryHeader({
|
|
|
5197
5283
|
showClose
|
|
5198
5284
|
}) {
|
|
5199
5285
|
return /* @__PURE__ */ jsxs16("header", { class: `${p17}-header`, children: [
|
|
5200
|
-
/* @__PURE__ */
|
|
5286
|
+
/* @__PURE__ */ jsx20(
|
|
5201
5287
|
"button",
|
|
5202
5288
|
{
|
|
5203
5289
|
type: "button",
|
|
@@ -5205,11 +5291,11 @@ function HistoryHeader({
|
|
|
5205
5291
|
onClick: onBack,
|
|
5206
5292
|
"aria-label": strings.historyBack,
|
|
5207
5293
|
title: strings.historyBack,
|
|
5208
|
-
children: /* @__PURE__ */
|
|
5294
|
+
children: /* @__PURE__ */ jsx20(BackIcon, {})
|
|
5209
5295
|
}
|
|
5210
5296
|
),
|
|
5211
|
-
/* @__PURE__ */
|
|
5212
|
-
showClose ? /* @__PURE__ */
|
|
5297
|
+
/* @__PURE__ */ jsx20("h1", { children: strings.historyTitle }),
|
|
5298
|
+
showClose ? /* @__PURE__ */ jsx20(
|
|
5213
5299
|
"button",
|
|
5214
5300
|
{
|
|
5215
5301
|
type: "button",
|
|
@@ -5217,34 +5303,38 @@ function HistoryHeader({
|
|
|
5217
5303
|
onClick: onClose,
|
|
5218
5304
|
"aria-label": strings.close,
|
|
5219
5305
|
title: strings.close,
|
|
5220
|
-
children: /* @__PURE__ */
|
|
5306
|
+
children: /* @__PURE__ */ jsx20(CloseIcon, {})
|
|
5221
5307
|
}
|
|
5222
5308
|
) : null
|
|
5223
5309
|
] });
|
|
5224
5310
|
}
|
|
5225
|
-
function ReadOnlyBanner({
|
|
5311
|
+
function ReadOnlyBanner({
|
|
5312
|
+
label,
|
|
5313
|
+
ctaLabel,
|
|
5314
|
+
onNewConversation
|
|
5315
|
+
}) {
|
|
5226
5316
|
return /* @__PURE__ */ jsxs16("div", { class: `${p17}-readonly-banner`, role: "note", children: [
|
|
5227
|
-
/* @__PURE__ */
|
|
5228
|
-
/* @__PURE__ */
|
|
5317
|
+
/* @__PURE__ */ jsx20("span", { class: `${p17}-readonly-label`, children: label }),
|
|
5318
|
+
/* @__PURE__ */ jsx20("button", { type: "button", class: `${p17}-readonly-cta`, onClick: onNewConversation, children: ctaLabel })
|
|
5229
5319
|
] });
|
|
5230
5320
|
}
|
|
5231
5321
|
function ComposerFooter({ disclaimer }) {
|
|
5232
5322
|
if (!disclaimer) return null;
|
|
5233
|
-
return /* @__PURE__ */
|
|
5323
|
+
return /* @__PURE__ */ jsx20("div", { class: `${p17}-composer-footer`, children: /* @__PURE__ */ jsx20("div", { class: `${p17}-disclaimer`, children: disclaimer }) });
|
|
5234
5324
|
}
|
|
5235
5325
|
function PoweredByBar({ poweredBy }) {
|
|
5236
5326
|
if (!poweredBy) return null;
|
|
5237
|
-
return /* @__PURE__ */
|
|
5327
|
+
return /* @__PURE__ */ jsx20("div", { class: `${p17}-poweredby-bar`, children: /* @__PURE__ */ jsx20(PoweredBy, { logoUrl: poweredBy.logoUrl, text: poweredBy.text, href: poweredBy.href }) });
|
|
5238
5328
|
}
|
|
5239
5329
|
function PoweredBy({ logoUrl, text, href }) {
|
|
5240
5330
|
const inner = /* @__PURE__ */ jsxs16(Fragment3, { children: [
|
|
5241
|
-
logoUrl ? /* @__PURE__ */
|
|
5242
|
-
text ? /* @__PURE__ */
|
|
5331
|
+
logoUrl ? /* @__PURE__ */ jsx20("img", { class: `${p17}-poweredby-logo`, src: logoUrl, alt: "", loading: "lazy" }) : null,
|
|
5332
|
+
text ? /* @__PURE__ */ jsx20("span", { children: text }) : null
|
|
5243
5333
|
] });
|
|
5244
5334
|
if (href) {
|
|
5245
|
-
return /* @__PURE__ */
|
|
5335
|
+
return /* @__PURE__ */ jsx20("a", { class: `${p17}-poweredby`, href, target: "_blank", rel: "noopener noreferrer", children: inner });
|
|
5246
5336
|
}
|
|
5247
|
-
return /* @__PURE__ */
|
|
5337
|
+
return /* @__PURE__ */ jsx20("span", { class: `${p17}-poweredby`, children: inner });
|
|
5248
5338
|
}
|
|
5249
5339
|
|
|
5250
5340
|
// src/ui/form/form-controller.ts
|
|
@@ -5320,7 +5410,7 @@ function whenPasses(form, d) {
|
|
|
5320
5410
|
}
|
|
5321
5411
|
|
|
5322
5412
|
// src/ui/sidebar.tsx
|
|
5323
|
-
import { Fragment as Fragment4, jsx as
|
|
5413
|
+
import { Fragment as Fragment4, jsx as jsx21, jsxs as jsxs17 } from "preact/jsx-runtime";
|
|
5324
5414
|
function Sidebar(props2) {
|
|
5325
5415
|
const p33 = BRAND.cssPrefix;
|
|
5326
5416
|
const { site, blocks, strings, collapsed } = props2;
|
|
@@ -5329,8 +5419,8 @@ function Sidebar(props2) {
|
|
|
5329
5419
|
const toggleLabel = collapsed ? strings.expandSidebar : strings.collapseSidebar;
|
|
5330
5420
|
return /* @__PURE__ */ jsxs17("aside", { class: `${p33}-sidebar`, "data-collapsed": collapsed ? "true" : "false", "data-testid": TID.sidebar, children: [
|
|
5331
5421
|
/* @__PURE__ */ jsxs17("div", { class: `${p33}-sidebar-header`, children: [
|
|
5332
|
-
/* @__PURE__ */
|
|
5333
|
-
/* @__PURE__ */
|
|
5422
|
+
/* @__PURE__ */ jsx21(SidebarBrand, { site }),
|
|
5423
|
+
/* @__PURE__ */ jsx21(
|
|
5334
5424
|
"button",
|
|
5335
5425
|
{
|
|
5336
5426
|
type: "button",
|
|
@@ -5340,21 +5430,21 @@ function Sidebar(props2) {
|
|
|
5340
5430
|
title: toggleLabel,
|
|
5341
5431
|
onClick: props2.onToggleCollapsed,
|
|
5342
5432
|
"data-testid": TID.sidebarToggle,
|
|
5343
|
-
children: /* @__PURE__ */
|
|
5433
|
+
children: /* @__PURE__ */ jsx21(SidebarToggleIcon, { collapsed })
|
|
5344
5434
|
}
|
|
5345
5435
|
)
|
|
5346
5436
|
] }),
|
|
5347
5437
|
collapsed ? null : /* @__PURE__ */ jsxs17(Fragment4, { children: [
|
|
5348
|
-
navigation.length > 0 ? /* @__PURE__ */
|
|
5349
|
-
linkCards.length > 0 ? /* @__PURE__ */
|
|
5350
|
-
props2.showConversations ? /* @__PURE__ */
|
|
5438
|
+
navigation.length > 0 ? /* @__PURE__ */ jsx21("nav", { class: `${p33}-sidebar-section`, "data-section": "navigation", children: /* @__PURE__ */ jsx21(SidebarNav, { items: navigation }) }) : null,
|
|
5439
|
+
linkCards.length > 0 ? /* @__PURE__ */ jsx21("div", { class: `${p33}-sidebar-section`, "data-section": "link-cards", children: /* @__PURE__ */ jsx21(SidebarCards, { items: linkCards }) }) : null,
|
|
5440
|
+
props2.showConversations ? /* @__PURE__ */ jsx21("div", { class: `${p33}-sidebar-conversations`, children: /* @__PURE__ */ jsx21(
|
|
5351
5441
|
ConversationList,
|
|
5352
5442
|
{
|
|
5353
5443
|
transport: props2.transport,
|
|
5354
5444
|
strings: props2.strings,
|
|
5355
5445
|
visitorId: props2.visitorId,
|
|
5356
|
-
onSelect: props2.
|
|
5357
|
-
|
|
5446
|
+
onSelect: props2.onSelectConversation,
|
|
5447
|
+
onNewConversation: props2.onNewConversation
|
|
5358
5448
|
}
|
|
5359
5449
|
) }) : null
|
|
5360
5450
|
] })
|
|
@@ -5365,14 +5455,14 @@ function SidebarBrand({ site }) {
|
|
|
5365
5455
|
if (site?.logo?.url) {
|
|
5366
5456
|
const alt = site.logo.alt ?? site.title ?? "Logo";
|
|
5367
5457
|
return /* @__PURE__ */ jsxs17("picture", { children: [
|
|
5368
|
-
site.logoDark?.url ? /* @__PURE__ */
|
|
5369
|
-
/* @__PURE__ */
|
|
5458
|
+
site.logoDark?.url ? /* @__PURE__ */ jsx21("source", { srcset: site.logoDark.url, media: "(prefers-color-scheme: dark)" }) : null,
|
|
5459
|
+
/* @__PURE__ */ jsx21("img", { class: `${p33}-sidebar-logo`, src: site.logo.url, alt })
|
|
5370
5460
|
] });
|
|
5371
5461
|
}
|
|
5372
|
-
return /* @__PURE__ */
|
|
5462
|
+
return /* @__PURE__ */ jsx21("div", { class: `${p33}-sidebar-title`, children: site?.title ?? BRAND.name });
|
|
5373
5463
|
}
|
|
5374
5464
|
function SidebarToggleIcon({ collapsed }) {
|
|
5375
|
-
return /* @__PURE__ */
|
|
5465
|
+
return /* @__PURE__ */ jsx21(
|
|
5376
5466
|
"svg",
|
|
5377
5467
|
{
|
|
5378
5468
|
width: "16",
|
|
@@ -5382,13 +5472,13 @@ function SidebarToggleIcon({ collapsed }) {
|
|
|
5382
5472
|
stroke: "currentColor",
|
|
5383
5473
|
"stroke-width": "2",
|
|
5384
5474
|
"aria-hidden": "true",
|
|
5385
|
-
children: collapsed ? /* @__PURE__ */
|
|
5475
|
+
children: collapsed ? /* @__PURE__ */ jsx21("polyline", { points: "9 6 15 12 9 18" }) : /* @__PURE__ */ jsx21("polyline", { points: "15 6 9 12 15 18" })
|
|
5386
5476
|
}
|
|
5387
5477
|
);
|
|
5388
5478
|
}
|
|
5389
5479
|
function SidebarNav({ items }) {
|
|
5390
5480
|
const p33 = BRAND.cssPrefix;
|
|
5391
|
-
return /* @__PURE__ */
|
|
5481
|
+
return /* @__PURE__ */ jsx21("ul", { class: `${p33}-sidebar-nav`, children: items.map((item) => /* @__PURE__ */ jsx21("li", { children: /* @__PURE__ */ jsxs17(
|
|
5392
5482
|
"a",
|
|
5393
5483
|
{
|
|
5394
5484
|
class: `${p33}-sidebar-nav-item`,
|
|
@@ -5396,15 +5486,15 @@ function SidebarNav({ items }) {
|
|
|
5396
5486
|
target: item.href ? "_blank" : void 0,
|
|
5397
5487
|
rel: item.href ? "noreferrer" : void 0,
|
|
5398
5488
|
children: [
|
|
5399
|
-
item.icon ? /* @__PURE__ */
|
|
5400
|
-
/* @__PURE__ */
|
|
5489
|
+
item.icon ? /* @__PURE__ */ jsx21("span", { class: `${p33}-sidebar-nav-icon`, "data-icon": item.icon }) : null,
|
|
5490
|
+
/* @__PURE__ */ jsx21("span", { class: `${p33}-sidebar-nav-label`, children: item.label })
|
|
5401
5491
|
]
|
|
5402
5492
|
}
|
|
5403
5493
|
) }, item.id ?? item.label)) });
|
|
5404
5494
|
}
|
|
5405
5495
|
function SidebarCards({ items }) {
|
|
5406
5496
|
const p33 = BRAND.cssPrefix;
|
|
5407
|
-
return /* @__PURE__ */
|
|
5497
|
+
return /* @__PURE__ */ jsx21("div", { class: `${p33}-sidebar-cards`, children: items.map((item) => /* @__PURE__ */ jsxs17(
|
|
5408
5498
|
"a",
|
|
5409
5499
|
{
|
|
5410
5500
|
class: `${p33}-sidebar-card`,
|
|
@@ -5412,8 +5502,8 @@ function SidebarCards({ items }) {
|
|
|
5412
5502
|
target: item.href ? "_blank" : void 0,
|
|
5413
5503
|
rel: item.href ? "noreferrer" : void 0,
|
|
5414
5504
|
children: [
|
|
5415
|
-
/* @__PURE__ */
|
|
5416
|
-
item.description ? /* @__PURE__ */
|
|
5505
|
+
/* @__PURE__ */ jsx21("div", { class: `${p33}-sidebar-card-label`, children: item.label }),
|
|
5506
|
+
item.description ? /* @__PURE__ */ jsx21("div", { class: `${p33}-sidebar-card-desc`, children: item.description }) : null
|
|
5417
5507
|
]
|
|
5418
5508
|
},
|
|
5419
5509
|
item.id ?? item.label
|
|
@@ -5421,11 +5511,11 @@ function SidebarCards({ items }) {
|
|
|
5421
5511
|
}
|
|
5422
5512
|
|
|
5423
5513
|
// src/ui/page-shell.tsx
|
|
5424
|
-
import { jsx as
|
|
5514
|
+
import { jsx as jsx22, jsxs as jsxs18 } from "preact/jsx-runtime";
|
|
5425
5515
|
var p18 = BRAND.cssPrefix;
|
|
5426
5516
|
function PageShell(props2) {
|
|
5427
5517
|
return /* @__PURE__ */ jsxs18("main", { class: `${p18}-page-shell`, "data-sidebar-collapsed": props2.sidebarCollapsed ? "true" : "false", children: [
|
|
5428
|
-
/* @__PURE__ */
|
|
5518
|
+
/* @__PURE__ */ jsx22(
|
|
5429
5519
|
Sidebar,
|
|
5430
5520
|
{
|
|
5431
5521
|
site: props2.site,
|
|
@@ -5434,13 +5524,13 @@ function PageShell(props2) {
|
|
|
5434
5524
|
strings: props2.strings,
|
|
5435
5525
|
visitorId: props2.visitorId,
|
|
5436
5526
|
showConversations: props2.showConversations,
|
|
5437
|
-
|
|
5438
|
-
|
|
5527
|
+
onSelectConversation: props2.onSelectConversation,
|
|
5528
|
+
onNewConversation: props2.onNewConversation,
|
|
5439
5529
|
collapsed: props2.sidebarCollapsed,
|
|
5440
5530
|
onToggleCollapsed: props2.onToggleSidebarCollapsed
|
|
5441
5531
|
}
|
|
5442
5532
|
),
|
|
5443
|
-
/* @__PURE__ */
|
|
5533
|
+
/* @__PURE__ */ jsx22("section", { class: `${p18}-page-chat`, "aria-label": "Chat", children: props2.children })
|
|
5444
5534
|
] });
|
|
5445
5535
|
}
|
|
5446
5536
|
|
|
@@ -5480,7 +5570,7 @@ var atTabRoot = (s) => activeStack(s).length === 0;
|
|
|
5480
5570
|
import { useCallback as useCallback4, useEffect as useEffect15, useRef as useRef8 } from "preact/hooks";
|
|
5481
5571
|
import { useComputed as useComputed6 } from "@preact/signals";
|
|
5482
5572
|
|
|
5483
|
-
// src/ui/modules/
|
|
5573
|
+
// src/ui/modules/chat.tsx
|
|
5484
5574
|
var chatLayout = {
|
|
5485
5575
|
Icon: BubblesIcon
|
|
5486
5576
|
// No `Root`: MessengerHome renders the existing chat panel for this tab.
|
|
@@ -5490,35 +5580,35 @@ var chatLayout = {
|
|
|
5490
5580
|
import { useEffect as useEffect11, useMemo as useMemo2, useState as useState8 } from "preact/hooks";
|
|
5491
5581
|
|
|
5492
5582
|
// src/ui/back-header.tsx
|
|
5493
|
-
import { jsx as
|
|
5583
|
+
import { jsx as jsx23, jsxs as jsxs19 } from "preact/jsx-runtime";
|
|
5494
5584
|
var p19 = BRAND.cssPrefix;
|
|
5495
5585
|
function TitleBar({ title, actions }) {
|
|
5496
5586
|
return /* @__PURE__ */ jsxs19("header", { class: `${p19}-back-header`, "data-variant": "title", children: [
|
|
5497
|
-
/* @__PURE__ */
|
|
5498
|
-
/* @__PURE__ */
|
|
5499
|
-
actions ?? /* @__PURE__ */
|
|
5587
|
+
/* @__PURE__ */ jsx23("span", { class: `${p19}-back-spacer`, "aria-hidden": "true" }),
|
|
5588
|
+
/* @__PURE__ */ jsx23("h1", { class: `${p19}-back-title`, children: title }),
|
|
5589
|
+
actions ?? /* @__PURE__ */ jsx23("span", { class: `${p19}-back-spacer`, "aria-hidden": "true" })
|
|
5500
5590
|
] });
|
|
5501
5591
|
}
|
|
5502
5592
|
function BackHeader({ title, backLabel, onBack, actions, testid }) {
|
|
5503
5593
|
return /* @__PURE__ */ jsxs19("header", { class: `${p19}-back-header`, "data-testid": testid, children: [
|
|
5504
|
-
/* @__PURE__ */
|
|
5505
|
-
/* @__PURE__ */
|
|
5506
|
-
actions ?? /* @__PURE__ */
|
|
5594
|
+
/* @__PURE__ */ jsx23("button", { type: "button", class: `${p19}-icon-btn`, onClick: onBack, "aria-label": backLabel, title: backLabel, children: /* @__PURE__ */ jsx23(BackIcon, {}) }),
|
|
5595
|
+
/* @__PURE__ */ jsx23("h1", { class: `${p19}-back-title`, children: title }),
|
|
5596
|
+
actions ?? /* @__PURE__ */ jsx23("span", { class: `${p19}-back-spacer`, "aria-hidden": "true" })
|
|
5507
5597
|
] });
|
|
5508
5598
|
}
|
|
5509
5599
|
|
|
5510
5600
|
// src/ui/home-search.tsx
|
|
5511
|
-
import { jsx as
|
|
5601
|
+
import { jsx as jsx24, jsxs as jsxs20 } from "preact/jsx-runtime";
|
|
5512
5602
|
var p20 = BRAND.cssPrefix;
|
|
5513
5603
|
function HomeSearchButton({ placeholder, onActivate }) {
|
|
5514
5604
|
return /* @__PURE__ */ jsxs20("button", { type: "button", class: `${p20}-home-search`, onClick: onActivate, "data-testid": TID.homeSearch, children: [
|
|
5515
|
-
/* @__PURE__ */
|
|
5516
|
-
/* @__PURE__ */
|
|
5605
|
+
/* @__PURE__ */ jsx24("span", { class: `${p20}-home-search-text`, children: placeholder }),
|
|
5606
|
+
/* @__PURE__ */ jsx24("span", { class: `${p20}-home-search-icon`, "aria-hidden": "true", children: /* @__PURE__ */ jsx24(SearchIcon, {}) })
|
|
5517
5607
|
] });
|
|
5518
5608
|
}
|
|
5519
5609
|
function HelpSearchInput({ placeholder, value, onInput }) {
|
|
5520
5610
|
return /* @__PURE__ */ jsxs20("div", { class: `${p20}-home-search`, "data-input": "true", children: [
|
|
5521
|
-
/* @__PURE__ */
|
|
5611
|
+
/* @__PURE__ */ jsx24(
|
|
5522
5612
|
"input",
|
|
5523
5613
|
{
|
|
5524
5614
|
type: "search",
|
|
@@ -5529,25 +5619,25 @@ function HelpSearchInput({ placeholder, value, onInput }) {
|
|
|
5529
5619
|
"data-testid": TID.helpSearch
|
|
5530
5620
|
}
|
|
5531
5621
|
),
|
|
5532
|
-
/* @__PURE__ */
|
|
5622
|
+
/* @__PURE__ */ jsx24("span", { class: `${p20}-home-search-icon`, "aria-hidden": "true", children: /* @__PURE__ */ jsx24(SearchIcon, {}) })
|
|
5533
5623
|
] });
|
|
5534
5624
|
}
|
|
5535
5625
|
|
|
5536
5626
|
// src/ui/list-row.tsx
|
|
5537
|
-
import { jsx as
|
|
5627
|
+
import { jsx as jsx25, jsxs as jsxs21 } from "preact/jsx-runtime";
|
|
5538
5628
|
var p21 = BRAND.cssPrefix;
|
|
5539
5629
|
function ListRow({ title, subtitle, onClick, testid }) {
|
|
5540
5630
|
return /* @__PURE__ */ jsxs21("button", { type: "button", class: `${p21}-list-row`, onClick, "data-testid": testid, children: [
|
|
5541
5631
|
/* @__PURE__ */ jsxs21("span", { class: `${p21}-list-row-body`, children: [
|
|
5542
|
-
/* @__PURE__ */
|
|
5543
|
-
subtitle ? /* @__PURE__ */
|
|
5632
|
+
/* @__PURE__ */ jsx25("span", { class: `${p21}-list-row-title`, children: title }),
|
|
5633
|
+
subtitle ? /* @__PURE__ */ jsx25("span", { class: `${p21}-list-row-sub`, children: subtitle }) : null
|
|
5544
5634
|
] }),
|
|
5545
|
-
/* @__PURE__ */
|
|
5635
|
+
/* @__PURE__ */ jsx25("span", { class: `${p21}-list-row-chevron`, "aria-hidden": "true", children: /* @__PURE__ */ jsx25(ChevronRightIcon, {}) })
|
|
5546
5636
|
] });
|
|
5547
5637
|
}
|
|
5548
5638
|
|
|
5549
5639
|
// src/ui/module-state.tsx
|
|
5550
|
-
import { jsx as
|
|
5640
|
+
import { jsx as jsx26, jsxs as jsxs22 } from "preact/jsx-runtime";
|
|
5551
5641
|
var p22 = BRAND.cssPrefix;
|
|
5552
5642
|
function ModuleState({
|
|
5553
5643
|
tone = "info",
|
|
@@ -5556,13 +5646,13 @@ function ModuleState({
|
|
|
5556
5646
|
strings
|
|
5557
5647
|
}) {
|
|
5558
5648
|
return /* @__PURE__ */ jsxs22("div", { class: `${p22}-module-empty`, role: tone === "error" ? "alert" : "status", "aria-live": "polite", children: [
|
|
5559
|
-
/* @__PURE__ */
|
|
5560
|
-
onRetry ? /* @__PURE__ */
|
|
5649
|
+
/* @__PURE__ */ jsx26("span", { children: message }),
|
|
5650
|
+
onRetry ? /* @__PURE__ */ jsx26("button", { type: "button", class: `${p22}-module-retry`, onClick: onRetry, children: strings.errorRetry }) : null
|
|
5561
5651
|
] });
|
|
5562
5652
|
}
|
|
5563
5653
|
|
|
5564
5654
|
// src/ui/modules/help.tsx
|
|
5565
|
-
import { jsx as
|
|
5655
|
+
import { jsx as jsx27, jsxs as jsxs23 } from "preact/jsx-runtime";
|
|
5566
5656
|
var p23 = BRAND.cssPrefix;
|
|
5567
5657
|
var log12 = logger.scope("help");
|
|
5568
5658
|
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 });
|
|
@@ -5592,7 +5682,7 @@ function fuzzySearch(items, query) {
|
|
|
5592
5682
|
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);
|
|
5593
5683
|
}
|
|
5594
5684
|
function ArticleRow({ article, nav }) {
|
|
5595
|
-
return /* @__PURE__ */
|
|
5685
|
+
return /* @__PURE__ */ jsx27(
|
|
5596
5686
|
ListRow,
|
|
5597
5687
|
{
|
|
5598
5688
|
title: article.title,
|
|
@@ -5629,45 +5719,45 @@ function HelpRoot({ transport, strings, config, nav, panelProps }) {
|
|
|
5629
5719
|
const results = useMemo2(() => fuzzySearch(items, query), [items, query]);
|
|
5630
5720
|
function renderBody() {
|
|
5631
5721
|
if (query.trim().length > 0) {
|
|
5632
|
-
if (results.length === 0) return /* @__PURE__ */
|
|
5633
|
-
return /* @__PURE__ */
|
|
5722
|
+
if (results.length === 0) return /* @__PURE__ */ jsx27(ModuleState, { message: strings.helpSearchEmpty, strings });
|
|
5723
|
+
return /* @__PURE__ */ jsx27("div", { class: `${p23}-help-card`, children: results.map((a) => /* @__PURE__ */ jsx27(ArticleRow, { article: a, nav }, a.id)) });
|
|
5634
5724
|
}
|
|
5635
|
-
if (state === "loading") return /* @__PURE__ */
|
|
5725
|
+
if (state === "loading") return /* @__PURE__ */ jsx27(ModuleState, { message: strings.helpLoading, strings });
|
|
5636
5726
|
if (state === "error") {
|
|
5637
|
-
return /* @__PURE__ */
|
|
5727
|
+
return /* @__PURE__ */ jsx27(ModuleState, { tone: "error", message: errorMsg, onRetry: () => setReloadKey((k) => k + 1), strings });
|
|
5638
5728
|
}
|
|
5639
|
-
if (items.length === 0) return /* @__PURE__ */
|
|
5729
|
+
if (items.length === 0) return /* @__PURE__ */ jsx27(ModuleState, { message: strings.helpEmpty, strings });
|
|
5640
5730
|
return groupByCategory(items).map(([category, rows]) => /* @__PURE__ */ jsxs23("section", { class: `${p23}-help-group`, children: [
|
|
5641
|
-
category ? /* @__PURE__ */
|
|
5642
|
-
/* @__PURE__ */
|
|
5731
|
+
category ? /* @__PURE__ */ jsx27("h2", { class: `${p23}-help-section-title`, children: category }) : null,
|
|
5732
|
+
/* @__PURE__ */ jsx27("div", { class: `${p23}-help-card`, children: rows.map((a) => /* @__PURE__ */ jsx27(ArticleRow, { article: a, nav }, a.id)) })
|
|
5643
5733
|
] }, category));
|
|
5644
5734
|
}
|
|
5645
5735
|
return /* @__PURE__ */ jsxs23("div", { class: `${p23}-module`, children: [
|
|
5646
|
-
/* @__PURE__ */
|
|
5647
|
-
/* @__PURE__ */
|
|
5648
|
-
/* @__PURE__ */
|
|
5736
|
+
/* @__PURE__ */ jsx27(TitleBar, { title: strings.helpTitle, actions: /* @__PURE__ */ jsx27(HeaderActions, { panelProps, variant: "plain" }) }),
|
|
5737
|
+
/* @__PURE__ */ jsx27("div", { class: `${p23}-module-pad`, children: /* @__PURE__ */ jsx27(HelpSearchInput, { placeholder: strings.helpSearchPlaceholder, value: query, onInput: setQuery }) }),
|
|
5738
|
+
/* @__PURE__ */ jsx27("div", { class: `${p23}-help-list`, children: renderBody() })
|
|
5649
5739
|
] });
|
|
5650
5740
|
}
|
|
5651
5741
|
var helpLayout = {
|
|
5652
5742
|
Icon: HelpIcon,
|
|
5653
|
-
Root: (props2) => /* @__PURE__ */
|
|
5743
|
+
Root: (props2) => /* @__PURE__ */ jsx27(HelpRoot, { ...props2 })
|
|
5654
5744
|
};
|
|
5655
5745
|
|
|
5656
5746
|
// src/ui/modules/home.tsx
|
|
5657
5747
|
import { useEffect as useEffect12, useState as useState9 } from "preact/hooks";
|
|
5658
5748
|
|
|
5659
5749
|
// src/ui/home-card.tsx
|
|
5660
|
-
import { jsx as
|
|
5750
|
+
import { jsx as jsx28 } from "preact/jsx-runtime";
|
|
5661
5751
|
var p24 = BRAND.cssPrefix;
|
|
5662
5752
|
function HomeCard({ onClick, children, testid }) {
|
|
5663
5753
|
if (onClick) {
|
|
5664
|
-
return /* @__PURE__ */
|
|
5754
|
+
return /* @__PURE__ */ jsx28("button", { type: "button", class: `${p24}-home-card`, "data-interactive": "true", onClick, "data-testid": testid, children });
|
|
5665
5755
|
}
|
|
5666
|
-
return /* @__PURE__ */
|
|
5756
|
+
return /* @__PURE__ */ jsx28("div", { class: `${p24}-home-card`, "data-testid": testid, children });
|
|
5667
5757
|
}
|
|
5668
5758
|
|
|
5669
5759
|
// src/ui/modules/home.tsx
|
|
5670
|
-
import { Fragment as Fragment5, jsx as
|
|
5760
|
+
import { Fragment as Fragment5, jsx as jsx29, jsxs as jsxs24 } from "preact/jsx-runtime";
|
|
5671
5761
|
var p25 = BRAND.cssPrefix;
|
|
5672
5762
|
var log13 = logger.scope("home");
|
|
5673
5763
|
function resolveGreeting(props2) {
|
|
@@ -5686,13 +5776,13 @@ function HomeRoot(props2) {
|
|
|
5686
5776
|
const [content, setContent] = useState9([]);
|
|
5687
5777
|
const tagsKey = config.contentTags?.join(",");
|
|
5688
5778
|
useEffect12(() => {
|
|
5689
|
-
if (!config.
|
|
5779
|
+
if (!config.showRecentConversations) return;
|
|
5690
5780
|
let cancelled = false;
|
|
5691
5781
|
transport.listConversations({ limit: 1 }).then((res) => !cancelled && setRecent(res.conversations?.[0] ?? null)).catch((err) => !cancelled && log13.warn("listConversations (home) failed", { err }));
|
|
5692
5782
|
return () => {
|
|
5693
5783
|
cancelled = true;
|
|
5694
5784
|
};
|
|
5695
|
-
}, [transport, config.
|
|
5785
|
+
}, [transport, config.showRecentConversations]);
|
|
5696
5786
|
useEffect12(() => {
|
|
5697
5787
|
if (!config.contentTags?.length) return;
|
|
5698
5788
|
let cancelled = false;
|
|
@@ -5705,49 +5795,49 @@ function HomeRoot(props2) {
|
|
|
5705
5795
|
const avatars = config.userAvatars ?? [];
|
|
5706
5796
|
const status = config.status;
|
|
5707
5797
|
const contentTitle = config.contentBlockTitle ? moduleLabel(strings, config.contentBlockTitle) : strings.homeContentTitle;
|
|
5708
|
-
return /* @__PURE__ */
|
|
5798
|
+
return /* @__PURE__ */ jsx29("div", { class: `${p25}-module ${p25}-home`, "data-testid": TID.homeView, children: /* @__PURE__ */ jsxs24("div", { class: `${p25}-home-scroll`, children: [
|
|
5709
5799
|
/* @__PURE__ */ jsxs24("div", { class: `${p25}-home-hero`, children: [
|
|
5710
5800
|
/* @__PURE__ */ jsxs24("div", { class: `${p25}-home-hero-top`, children: [
|
|
5711
|
-
config.brandName ? /* @__PURE__ */
|
|
5801
|
+
config.brandName ? /* @__PURE__ */ jsx29("span", { class: `${p25}-home-brand`, "data-testid": TID.homeBrand, children: config.brandName }) : /* @__PURE__ */ jsx29("span", { class: `${p25}-home-brand-spacer`, "aria-hidden": "true" }),
|
|
5712
5802
|
/* @__PURE__ */ jsxs24("div", { class: `${p25}-home-hero-actions`, children: [
|
|
5713
|
-
avatars.length > 0 ? /* @__PURE__ */
|
|
5714
|
-
/* @__PURE__ */
|
|
5803
|
+
avatars.length > 0 ? /* @__PURE__ */ jsx29("div", { class: `${p25}-home-avatars`, children: avatars.map((a) => /* @__PURE__ */ jsx29("span", { class: `${p25}-home-avatar`, title: a.role ? `${a.name} \xB7 ${a.role}` : a.name, children: a.avatar ? /* @__PURE__ */ jsx29("img", { src: a.avatar, alt: "", loading: "lazy" }) : /* @__PURE__ */ jsx29("span", { children: initials(a.name) }) }, a.name)) }) : null,
|
|
5804
|
+
/* @__PURE__ */ jsx29(HeaderActions, { panelProps, variant: "plain" })
|
|
5715
5805
|
] })
|
|
5716
5806
|
] }),
|
|
5717
5807
|
config.showGreeting !== false ? /* @__PURE__ */ jsxs24(Fragment5, { children: [
|
|
5718
|
-
/* @__PURE__ */
|
|
5719
|
-
greeting.subtitle ? /* @__PURE__ */
|
|
5808
|
+
/* @__PURE__ */ jsx29("h1", { class: `${p25}-home-greeting`, "data-testid": TID.homeGreeting, children: greeting.title }),
|
|
5809
|
+
greeting.subtitle ? /* @__PURE__ */ jsx29("p", { class: `${p25}-home-lead`, children: greeting.subtitle }) : null
|
|
5720
5810
|
] }) : null
|
|
5721
5811
|
] }),
|
|
5722
5812
|
/* @__PURE__ */ jsxs24("div", { class: `${p25}-home-cards`, children: [
|
|
5723
|
-
config.showSearchBar !== false ? /* @__PURE__ */
|
|
5813
|
+
config.showSearchBar !== false ? /* @__PURE__ */ jsx29(
|
|
5724
5814
|
HomeSearchButton,
|
|
5725
5815
|
{
|
|
5726
5816
|
placeholder: strings.homeSearchPlaceholder,
|
|
5727
5817
|
onActivate: () => nav.switchToLayout("help")
|
|
5728
5818
|
}
|
|
5729
5819
|
) : null,
|
|
5730
|
-
recent ? /* @__PURE__ */
|
|
5731
|
-
/* @__PURE__ */
|
|
5820
|
+
recent ? /* @__PURE__ */ jsx29(HomeCard, { onClick: () => nav.selectConversation(recent.conversationId), testid: TID.homeRecent, children: /* @__PURE__ */ jsxs24("div", { class: `${p25}-home-recent-row`, "data-unread": (recent.unreadCount ?? 0) > 0 ? "true" : void 0, children: [
|
|
5821
|
+
/* @__PURE__ */ jsx29("span", { class: `${p25}-home-recent-avatar`, "aria-hidden": "true", children: /* @__PURE__ */ jsx29(BubblesIcon, {}) }),
|
|
5732
5822
|
/* @__PURE__ */ jsxs24("span", { class: `${p25}-home-recent-body`, children: [
|
|
5733
|
-
/* @__PURE__ */
|
|
5734
|
-
recent.preview ? /* @__PURE__ */
|
|
5823
|
+
/* @__PURE__ */ jsx29("span", { class: `${p25}-home-recent-title`, children: recent.title }),
|
|
5824
|
+
recent.preview ? /* @__PURE__ */ jsx29("span", { class: `${p25}-home-recent-preview`, children: recent.preview }) : null
|
|
5735
5825
|
] }),
|
|
5736
|
-
(recent.unreadCount ?? 0) > 0 ? /* @__PURE__ */
|
|
5826
|
+
(recent.unreadCount ?? 0) > 0 ? /* @__PURE__ */ jsx29("span", { class: `${p25}-home-recent-dot`, "aria-label": "Unread" }) : null
|
|
5737
5827
|
] }) }) : null,
|
|
5738
|
-
status ? /* @__PURE__ */
|
|
5828
|
+
status ? /* @__PURE__ */ jsx29(
|
|
5739
5829
|
HomeCard,
|
|
5740
5830
|
{
|
|
5741
5831
|
onClick: status.url ? () => nav.push({ kind: "iframe", url: status.url, title: status.text }) : void 0,
|
|
5742
5832
|
children: /* @__PURE__ */ jsxs24("div", { class: `${p25}-home-status`, "data-level": status.level ?? "operational", children: [
|
|
5743
|
-
/* @__PURE__ */
|
|
5744
|
-
/* @__PURE__ */
|
|
5833
|
+
/* @__PURE__ */ jsx29("span", { class: `${p25}-home-status-icon`, "aria-hidden": "true", children: /* @__PURE__ */ jsx29(StatusOkIcon, {}) }),
|
|
5834
|
+
/* @__PURE__ */ jsx29("span", { class: `${p25}-home-status-text`, children: status.text })
|
|
5745
5835
|
] })
|
|
5746
5836
|
}
|
|
5747
5837
|
) : null,
|
|
5748
5838
|
content.length > 0 ? /* @__PURE__ */ jsxs24("section", { class: `${p25}-home-content`, children: [
|
|
5749
|
-
/* @__PURE__ */
|
|
5750
|
-
/* @__PURE__ */
|
|
5839
|
+
/* @__PURE__ */ jsx29("div", { class: `${p25}-home-content-title`, children: contentTitle }),
|
|
5840
|
+
/* @__PURE__ */ jsx29("div", { class: `${p25}-home-content-list`, children: content.map((item) => /* @__PURE__ */ jsx29(
|
|
5751
5841
|
ListRow,
|
|
5752
5842
|
{
|
|
5753
5843
|
title: item.title,
|
|
@@ -5763,12 +5853,12 @@ function HomeRoot(props2) {
|
|
|
5763
5853
|
}
|
|
5764
5854
|
var homeLayout = {
|
|
5765
5855
|
Icon: HomeIcon,
|
|
5766
|
-
Root: (props2) => /* @__PURE__ */
|
|
5856
|
+
Root: (props2) => /* @__PURE__ */ jsx29(HomeRoot, { ...props2 })
|
|
5767
5857
|
};
|
|
5768
5858
|
|
|
5769
5859
|
// src/ui/modules/news.tsx
|
|
5770
5860
|
import { useEffect as useEffect13, useState as useState10 } from "preact/hooks";
|
|
5771
|
-
import { jsx as
|
|
5861
|
+
import { jsx as jsx30, jsxs as jsxs25 } from "preact/jsx-runtime";
|
|
5772
5862
|
var p26 = BRAND.cssPrefix;
|
|
5773
5863
|
var log14 = logger.scope("news");
|
|
5774
5864
|
function NewsRoot({ transport, strings, config, nav, panelProps }) {
|
|
@@ -5795,12 +5885,12 @@ function NewsRoot({ transport, strings, config, nav, panelProps }) {
|
|
|
5795
5885
|
};
|
|
5796
5886
|
}, [transport, tags, reloadKey]);
|
|
5797
5887
|
function renderBody() {
|
|
5798
|
-
if (state === "loading") return /* @__PURE__ */
|
|
5888
|
+
if (state === "loading") return /* @__PURE__ */ jsx30(ModuleState, { message: strings.newsLoading, strings });
|
|
5799
5889
|
if (state === "error") {
|
|
5800
|
-
return /* @__PURE__ */
|
|
5890
|
+
return /* @__PURE__ */ jsx30(ModuleState, { tone: "error", message: errorMsg, onRetry: () => setReloadKey((k) => k + 1), strings });
|
|
5801
5891
|
}
|
|
5802
|
-
if (items.length === 0) return /* @__PURE__ */
|
|
5803
|
-
return /* @__PURE__ */
|
|
5892
|
+
if (items.length === 0) return /* @__PURE__ */ jsx30(ModuleState, { message: strings.newsEmpty, strings });
|
|
5893
|
+
return /* @__PURE__ */ jsx30("div", { class: `${p26}-news-list`, children: items.map((item) => /* @__PURE__ */ jsxs25(
|
|
5804
5894
|
"button",
|
|
5805
5895
|
{
|
|
5806
5896
|
type: "button",
|
|
@@ -5808,11 +5898,11 @@ function NewsRoot({ transport, strings, config, nav, panelProps }) {
|
|
|
5808
5898
|
onClick: () => nav.push({ kind: "content", id: item.id, title: item.title }),
|
|
5809
5899
|
"data-testid": tid(TID.newsItem, item.id),
|
|
5810
5900
|
children: [
|
|
5811
|
-
item.image ? /* @__PURE__ */
|
|
5901
|
+
item.image ? /* @__PURE__ */ jsx30("img", { class: `${p26}-news-hero`, src: item.image, alt: "", loading: "lazy" }) : null,
|
|
5812
5902
|
/* @__PURE__ */ jsxs25("span", { class: `${p26}-news-body`, children: [
|
|
5813
|
-
item.tags && item.tags.length > 0 ? /* @__PURE__ */
|
|
5814
|
-
/* @__PURE__ */
|
|
5815
|
-
item.description ? /* @__PURE__ */
|
|
5903
|
+
item.tags && item.tags.length > 0 ? /* @__PURE__ */ jsx30("span", { class: `${p26}-news-tags`, children: item.tags.map((t) => /* @__PURE__ */ jsx30("span", { class: `${p26}-news-tag`, children: t }, t)) }) : null,
|
|
5904
|
+
/* @__PURE__ */ jsx30("span", { class: `${p26}-news-title`, children: item.title }),
|
|
5905
|
+
item.description ? /* @__PURE__ */ jsx30("span", { class: `${p26}-news-summary`, children: item.description }) : null
|
|
5816
5906
|
] })
|
|
5817
5907
|
]
|
|
5818
5908
|
},
|
|
@@ -5820,13 +5910,13 @@ function NewsRoot({ transport, strings, config, nav, panelProps }) {
|
|
|
5820
5910
|
)) });
|
|
5821
5911
|
}
|
|
5822
5912
|
return /* @__PURE__ */ jsxs25("div", { class: `${p26}-module`, children: [
|
|
5823
|
-
/* @__PURE__ */
|
|
5824
|
-
/* @__PURE__ */
|
|
5913
|
+
/* @__PURE__ */ jsx30(TitleBar, { title: strings.newsTitle, actions: /* @__PURE__ */ jsx30(HeaderActions, { panelProps, variant: "plain" }) }),
|
|
5914
|
+
/* @__PURE__ */ jsx30("div", { class: `${p26}-module-scroll`, children: renderBody() })
|
|
5825
5915
|
] });
|
|
5826
5916
|
}
|
|
5827
5917
|
var newsLayout = {
|
|
5828
5918
|
Icon: NewsIcon,
|
|
5829
|
-
Root: (props2) => /* @__PURE__ */
|
|
5919
|
+
Root: (props2) => /* @__PURE__ */ jsx30(NewsRoot, { ...props2 })
|
|
5830
5920
|
};
|
|
5831
5921
|
|
|
5832
5922
|
// src/ui/modules/registry.ts
|
|
@@ -5838,10 +5928,10 @@ var LAYOUTS = {
|
|
|
5838
5928
|
};
|
|
5839
5929
|
|
|
5840
5930
|
// src/ui/home-tab-bar.tsx
|
|
5841
|
-
import { jsx as
|
|
5931
|
+
import { jsx as jsx31, jsxs as jsxs26 } from "preact/jsx-runtime";
|
|
5842
5932
|
var p27 = BRAND.cssPrefix;
|
|
5843
5933
|
function HomeTabBar({ modules, activeTab, strings, unreadCount, onSelect }) {
|
|
5844
|
-
return /* @__PURE__ */
|
|
5934
|
+
return /* @__PURE__ */ jsx31("nav", { class: `${p27}-tabbar`, role: "tablist", "aria-label": strings.panelTitle, children: modules.map((m) => {
|
|
5845
5935
|
const Icon = LAYOUTS[m.layout].Icon;
|
|
5846
5936
|
const selected = m.id === activeTab;
|
|
5847
5937
|
const badge = m.layout === "chat" && unreadCount > 0 ? unreadCount > 9 ? "9+" : String(unreadCount) : null;
|
|
@@ -5856,10 +5946,10 @@ function HomeTabBar({ modules, activeTab, strings, unreadCount, onSelect }) {
|
|
|
5856
5946
|
"data-testid": tid(TID.tab, m.id),
|
|
5857
5947
|
children: [
|
|
5858
5948
|
/* @__PURE__ */ jsxs26("span", { class: `${p27}-tab-icon`, "aria-hidden": "true", children: [
|
|
5859
|
-
/* @__PURE__ */
|
|
5860
|
-
badge ? /* @__PURE__ */
|
|
5949
|
+
/* @__PURE__ */ jsx31(Icon, {}),
|
|
5950
|
+
badge ? /* @__PURE__ */ jsx31("span", { class: `${p27}-tab-badge`, "data-testid": TID.tabBadge, children: badge }) : null
|
|
5861
5951
|
] }),
|
|
5862
|
-
/* @__PURE__ */
|
|
5952
|
+
/* @__PURE__ */ jsx31("span", { class: `${p27}-tab-label`, children: moduleLabel(strings, m.label) })
|
|
5863
5953
|
]
|
|
5864
5954
|
},
|
|
5865
5955
|
m.id
|
|
@@ -5868,12 +5958,12 @@ function HomeTabBar({ modules, activeTab, strings, unreadCount, onSelect }) {
|
|
|
5868
5958
|
}
|
|
5869
5959
|
|
|
5870
5960
|
// src/ui/iframe-view.tsx
|
|
5871
|
-
import { jsx as
|
|
5961
|
+
import { jsx as jsx32, jsxs as jsxs27 } from "preact/jsx-runtime";
|
|
5872
5962
|
var p28 = BRAND.cssPrefix;
|
|
5873
5963
|
var SANDBOX = "allow-scripts allow-forms allow-popups allow-popups-to-escape-sandbox allow-downloads";
|
|
5874
5964
|
function IframeView({ url, title, strings, onBack, actions }) {
|
|
5875
5965
|
return /* @__PURE__ */ jsxs27("div", { class: `${p28}-module`, children: [
|
|
5876
|
-
/* @__PURE__ */
|
|
5966
|
+
/* @__PURE__ */ jsx32(
|
|
5877
5967
|
BackHeader,
|
|
5878
5968
|
{
|
|
5879
5969
|
title: title || strings.moduleBack,
|
|
@@ -5882,7 +5972,7 @@ function IframeView({ url, title, strings, onBack, actions }) {
|
|
|
5882
5972
|
actions
|
|
5883
5973
|
}
|
|
5884
5974
|
),
|
|
5885
|
-
/* @__PURE__ */
|
|
5975
|
+
/* @__PURE__ */ jsx32(
|
|
5886
5976
|
"iframe",
|
|
5887
5977
|
{
|
|
5888
5978
|
class: `${p28}-content-frame`,
|
|
@@ -5899,7 +5989,7 @@ function IframeView({ url, title, strings, onBack, actions }) {
|
|
|
5899
5989
|
|
|
5900
5990
|
// src/ui/content-view.tsx
|
|
5901
5991
|
import { useCallback as useCallback3, useEffect as useEffect14, useState as useState11 } from "preact/hooks";
|
|
5902
|
-
import { jsx as
|
|
5992
|
+
import { jsx as jsx33, jsxs as jsxs28 } from "preact/jsx-runtime";
|
|
5903
5993
|
var p29 = BRAND.cssPrefix;
|
|
5904
5994
|
var log15 = logger.scope("content");
|
|
5905
5995
|
function ContentView({ id, title, transport, strings, onBack, actions }) {
|
|
@@ -5928,17 +6018,17 @@ function ContentView({ id, title, transport, strings, onBack, actions }) {
|
|
|
5928
6018
|
};
|
|
5929
6019
|
}, [transport, id, reloadKey]);
|
|
5930
6020
|
function renderBody() {
|
|
5931
|
-
if (failed) return /* @__PURE__ */
|
|
5932
|
-
if (item === null) return /* @__PURE__ */
|
|
6021
|
+
if (failed) return /* @__PURE__ */ jsx33(ModuleState, { tone: "error", message: strings.errorGeneric, onRetry: retry, strings });
|
|
6022
|
+
if (item === null) return /* @__PURE__ */ jsx33(ModuleState, { message: strings.contentLoading, strings });
|
|
5933
6023
|
return /* @__PURE__ */ jsxs28("article", { class: `${p29}-content`, "data-testid": TID.contentView, children: [
|
|
5934
|
-
item.image ? /* @__PURE__ */
|
|
5935
|
-
item.description ? /* @__PURE__ */
|
|
5936
|
-
item.tags && item.tags.length > 0 ? /* @__PURE__ */
|
|
5937
|
-
/* @__PURE__ */
|
|
6024
|
+
item.image ? /* @__PURE__ */ jsx33("img", { class: `${p29}-content-hero`, src: item.image, alt: "", loading: "lazy" }) : null,
|
|
6025
|
+
item.description ? /* @__PURE__ */ jsx33("p", { class: `${p29}-content-subtitle`, children: item.description }) : null,
|
|
6026
|
+
item.tags && item.tags.length > 0 ? /* @__PURE__ */ jsx33("span", { class: `${p29}-news-tags`, children: item.tags.map((t) => /* @__PURE__ */ jsx33("span", { class: `${p29}-news-tag`, children: t }, t)) }) : null,
|
|
6027
|
+
/* @__PURE__ */ jsx33(StaticMarkdown, { text: item.content ?? "" })
|
|
5938
6028
|
] });
|
|
5939
6029
|
}
|
|
5940
6030
|
return /* @__PURE__ */ jsxs28("div", { class: `${p29}-module`, children: [
|
|
5941
|
-
/* @__PURE__ */
|
|
6031
|
+
/* @__PURE__ */ jsx33(
|
|
5942
6032
|
BackHeader,
|
|
5943
6033
|
{
|
|
5944
6034
|
title: item?.title || title || strings.moduleBack,
|
|
@@ -5948,12 +6038,12 @@ function ContentView({ id, title, transport, strings, onBack, actions }) {
|
|
|
5948
6038
|
testid: TID.backHeader
|
|
5949
6039
|
}
|
|
5950
6040
|
),
|
|
5951
|
-
/* @__PURE__ */
|
|
6041
|
+
/* @__PURE__ */ jsx33("div", { class: `${p29}-module-scroll`, "data-testid": TID.contentScroll, children: renderBody() })
|
|
5952
6042
|
] });
|
|
5953
6043
|
}
|
|
5954
6044
|
|
|
5955
6045
|
// src/ui/messenger-home.tsx
|
|
5956
|
-
import { jsx as
|
|
6046
|
+
import { jsx as jsx34, jsxs as jsxs29 } from "preact/jsx-runtime";
|
|
5957
6047
|
var p30 = BRAND.cssPrefix;
|
|
5958
6048
|
function MessengerHome({
|
|
5959
6049
|
panelProps,
|
|
@@ -6022,12 +6112,12 @@ function MessengerHome({
|
|
|
6022
6112
|
nav: moduleNav,
|
|
6023
6113
|
panelProps
|
|
6024
6114
|
});
|
|
6025
|
-
const plainActions = /* @__PURE__ */
|
|
6115
|
+
const plainActions = /* @__PURE__ */ jsx34(HeaderActions, { panelProps, variant: "plain" });
|
|
6026
6116
|
let body;
|
|
6027
6117
|
if (top?.kind === "iframe") {
|
|
6028
|
-
body = /* @__PURE__ */
|
|
6118
|
+
body = /* @__PURE__ */ jsx34(IframeView, { url: top.url, title: top.title, strings, onBack: nav.pop, actions: plainActions });
|
|
6029
6119
|
} else if (top?.kind === "content") {
|
|
6030
|
-
body = /* @__PURE__ */
|
|
6120
|
+
body = /* @__PURE__ */ jsx34(
|
|
6031
6121
|
ContentView,
|
|
6032
6122
|
{
|
|
6033
6123
|
id: top.id,
|
|
@@ -6039,7 +6129,7 @@ function MessengerHome({
|
|
|
6039
6129
|
}
|
|
6040
6130
|
);
|
|
6041
6131
|
} else if (activeModule?.layout === "chat") {
|
|
6042
|
-
body = /* @__PURE__ */
|
|
6132
|
+
body = /* @__PURE__ */ jsx34(
|
|
6043
6133
|
PanelContent,
|
|
6044
6134
|
{
|
|
6045
6135
|
...panelProps,
|
|
@@ -6050,7 +6140,7 @@ function MessengerHome({
|
|
|
6050
6140
|
);
|
|
6051
6141
|
} else if (activeModule) {
|
|
6052
6142
|
const Root = LAYOUTS[activeModule.layout].Root;
|
|
6053
|
-
body = Root ? /* @__PURE__ */
|
|
6143
|
+
body = Root ? /* @__PURE__ */ jsx34(Root, { ...screenProps(activeModule) }, activeModule.id) : null;
|
|
6054
6144
|
} else {
|
|
6055
6145
|
body = null;
|
|
6056
6146
|
}
|
|
@@ -6065,8 +6155,8 @@ function MessengerHome({
|
|
|
6065
6155
|
style: { position: "relative" },
|
|
6066
6156
|
"data-testid": TID.messengerHome,
|
|
6067
6157
|
children: [
|
|
6068
|
-
/* @__PURE__ */
|
|
6069
|
-
showTabBar ? /* @__PURE__ */
|
|
6158
|
+
/* @__PURE__ */ jsx34("div", { class: `${p30}-messenger-body`, children: body }),
|
|
6159
|
+
showTabBar ? /* @__PURE__ */ jsx34(
|
|
6070
6160
|
HomeTabBar,
|
|
6071
6161
|
{
|
|
6072
6162
|
modules: enabledModules,
|
|
@@ -6076,8 +6166,8 @@ function MessengerHome({
|
|
|
6076
6166
|
onSelect: nav.switchTab
|
|
6077
6167
|
}
|
|
6078
6168
|
) : null,
|
|
6079
|
-
/* @__PURE__ */
|
|
6080
|
-
options.size.resize?.enabled && !(activeModule?.layout === "chat" && !top) ? /* @__PURE__ */
|
|
6169
|
+
/* @__PURE__ */ jsx34(PoweredByBar, { poweredBy: options.poweredBy }),
|
|
6170
|
+
options.size.resize?.enabled && !(activeModule?.layout === "chat" && !top) ? /* @__PURE__ */ jsx34(
|
|
6081
6171
|
ResizeGrip,
|
|
6082
6172
|
{
|
|
6083
6173
|
panelEl: containerRef.current,
|
|
@@ -6094,7 +6184,7 @@ function MessengerHome({
|
|
|
6094
6184
|
}
|
|
6095
6185
|
|
|
6096
6186
|
// src/ui/modules-empty.tsx
|
|
6097
|
-
import { jsx as
|
|
6187
|
+
import { jsx as jsx35, jsxs as jsxs30 } from "preact/jsx-runtime";
|
|
6098
6188
|
var p31 = BRAND.cssPrefix;
|
|
6099
6189
|
function ModulesEmpty({ strings, onClose }) {
|
|
6100
6190
|
return /* @__PURE__ */ jsxs30(
|
|
@@ -6105,7 +6195,7 @@ function ModulesEmpty({ strings, onClose }) {
|
|
|
6105
6195
|
"aria-label": strings.panelTitle,
|
|
6106
6196
|
"data-testid": TID.modulesEmpty,
|
|
6107
6197
|
children: [
|
|
6108
|
-
onClose ? /* @__PURE__ */
|
|
6198
|
+
onClose ? /* @__PURE__ */ jsx35(
|
|
6109
6199
|
"button",
|
|
6110
6200
|
{
|
|
6111
6201
|
type: "button",
|
|
@@ -6113,10 +6203,10 @@ function ModulesEmpty({ strings, onClose }) {
|
|
|
6113
6203
|
onClick: onClose,
|
|
6114
6204
|
"aria-label": strings.close,
|
|
6115
6205
|
title: strings.close,
|
|
6116
|
-
children: /* @__PURE__ */
|
|
6206
|
+
children: /* @__PURE__ */ jsx35(CloseIcon, {})
|
|
6117
6207
|
}
|
|
6118
6208
|
) : null,
|
|
6119
|
-
/* @__PURE__ */
|
|
6209
|
+
/* @__PURE__ */ jsx35("p", { class: `${p31}-modules-empty-text`, children: strings.modulesEmpty })
|
|
6120
6210
|
]
|
|
6121
6211
|
}
|
|
6122
6212
|
);
|
|
@@ -6188,7 +6278,7 @@ function useLauncherCallout({ callout, persistence }) {
|
|
|
6188
6278
|
}
|
|
6189
6279
|
|
|
6190
6280
|
// src/ui/app.tsx
|
|
6191
|
-
import { jsx as
|
|
6281
|
+
import { jsx as jsx36, jsxs as jsxs31 } from "preact/jsx-runtime";
|
|
6192
6282
|
var log16 = logger.scope("app");
|
|
6193
6283
|
var p32 = BRAND.cssPrefix;
|
|
6194
6284
|
function App({ options, hostElement, bus }) {
|
|
@@ -6199,10 +6289,12 @@ function App({ options, hostElement, bus }) {
|
|
|
6199
6289
|
const [activeThemeMode, setActiveThemeMode] = useState13(
|
|
6200
6290
|
() => initialSettings.themeMode ?? options.themeMode
|
|
6201
6291
|
);
|
|
6292
|
+
const [activeTextSize, setActiveTextSize] = useState13(() => initialSettings.textSize ?? options.textSize);
|
|
6202
6293
|
const conversationIdSig = useSignal2(persistence.loadConversationId());
|
|
6203
6294
|
const messagesSig = useSignal2([]);
|
|
6204
6295
|
const unreadCountSig = useSignal2(0);
|
|
6205
6296
|
const [loadingMessages, setLoadingMessages] = useState13(false);
|
|
6297
|
+
const [formMarkers, setFormMarkers] = useState13([]);
|
|
6206
6298
|
function landingTab() {
|
|
6207
6299
|
const list = options.modules.list;
|
|
6208
6300
|
const ids = new Set(list.map((m) => m.id));
|
|
@@ -6280,6 +6372,9 @@ function App({ options, hostElement, bus }) {
|
|
|
6280
6372
|
useEffect17(() => {
|
|
6281
6373
|
hostElement.dataset.theme = activeThemeMode;
|
|
6282
6374
|
}, [hostElement, activeThemeMode, options]);
|
|
6375
|
+
useEffect17(() => {
|
|
6376
|
+
hostElement.dataset.textSize = activeTextSize;
|
|
6377
|
+
}, [hostElement, activeTextSize, options]);
|
|
6283
6378
|
useEffect17(() => {
|
|
6284
6379
|
feedback.update(options.sound, options.haptics);
|
|
6285
6380
|
}, [feedback, options.sound, options.haptics]);
|
|
@@ -6404,14 +6499,29 @@ function App({ options, hostElement, bus }) {
|
|
|
6404
6499
|
if (res.userPrefs.locale) setActiveLocale(res.userPrefs.locale);
|
|
6405
6500
|
if (res.userPrefs.soundMuted !== void 0) feedback.setMuted(res.userPrefs.soundMuted);
|
|
6406
6501
|
if (res.userPrefs.themeMode) setActiveThemeMode(res.userPrefs.themeMode);
|
|
6502
|
+
if (res.userPrefs.textSize) setActiveTextSize(res.userPrefs.textSize);
|
|
6407
6503
|
}
|
|
6408
6504
|
const isResume = !newConversation && persistedChatId && res.conversationId === persistedChatId;
|
|
6409
6505
|
if (isResume) {
|
|
6410
6506
|
setLoadingMessages(true);
|
|
6411
6507
|
try {
|
|
6412
|
-
const chat = res.messages?.length ? {
|
|
6508
|
+
const chat = res.messages?.length ? {
|
|
6509
|
+
conversationId: persistedChatId,
|
|
6510
|
+
canContinue: res.canContinue ?? true,
|
|
6511
|
+
messages: res.messages,
|
|
6512
|
+
formSubmissions: res.formSubmissions
|
|
6513
|
+
} : await transport.loadConversation(persistedChatId);
|
|
6413
6514
|
if (isStale()) return;
|
|
6414
6515
|
const loaded = (chat.messages ?? []).map(fromWireMessage);
|
|
6516
|
+
const subs = chat.formSubmissions ?? res.formSubmissions ?? [];
|
|
6517
|
+
setFormMarkers(
|
|
6518
|
+
subs.map((rec, i) => ({
|
|
6519
|
+
key: `wire:${rec.formId}:${rec.createdAt ?? i}`,
|
|
6520
|
+
formId: rec.formId,
|
|
6521
|
+
outcome: rec.skipped ? "skipped" : "submitted",
|
|
6522
|
+
createdAt: rec.createdAt
|
|
6523
|
+
}))
|
|
6524
|
+
);
|
|
6415
6525
|
const tail = resumeBubbleRef.current ? [resumeBubbleRef.current] : [];
|
|
6416
6526
|
if (loaded.length || tail.length) {
|
|
6417
6527
|
messagesSig.value = [...loaded, ...tail];
|
|
@@ -6639,6 +6749,10 @@ function App({ options, hostElement, bus }) {
|
|
|
6639
6749
|
onComplete: (form, trigger, values, skipped) => {
|
|
6640
6750
|
log16.info("formSubmit", { formId: form.id, trigger, skipped });
|
|
6641
6751
|
bus.emit("formSubmit", { formId: form.id, values, skipped });
|
|
6752
|
+
setFormMarkers((prev) => [
|
|
6753
|
+
...prev,
|
|
6754
|
+
{ key: `local:${form.id}:${prev.length}`, formId: form.id, outcome: skipped ? "skipped" : "submitted" }
|
|
6755
|
+
]);
|
|
6642
6756
|
if (skipped || Object.keys(values).length === 0) return;
|
|
6643
6757
|
const activeConversationId = conversationIdSig.value ?? uuid7();
|
|
6644
6758
|
if (!conversationIdSig.value) {
|
|
@@ -6752,6 +6866,7 @@ function App({ options, hostElement, bus }) {
|
|
|
6752
6866
|
conversationIdSig.value = void 0;
|
|
6753
6867
|
persistence.clearConversation();
|
|
6754
6868
|
setCanSend(true);
|
|
6869
|
+
setFormMarkers([]);
|
|
6755
6870
|
void runStartConversation({ newConversation: true });
|
|
6756
6871
|
}, [streaming, activeCancel, messagesSig, conversationIdSig, persistence, runStartConversation, bus]);
|
|
6757
6872
|
const handleNewChat = useCallback6(() => {
|
|
@@ -6777,7 +6892,7 @@ function App({ options, hostElement, bus }) {
|
|
|
6777
6892
|
const handlePopOut = useCallback6(() => {
|
|
6778
6893
|
if (!options.popOutUrl) return;
|
|
6779
6894
|
const url = new URL(options.popOutUrl);
|
|
6780
|
-
if (conversationIdSig.value) url.searchParams.set("
|
|
6895
|
+
if (conversationIdSig.value) url.searchParams.set("conversation", conversationIdSig.value);
|
|
6781
6896
|
if (options.widgetId !== "default") url.searchParams.set("widgetId", options.widgetId);
|
|
6782
6897
|
log16.info("popOut", { url: url.toString() });
|
|
6783
6898
|
window.open(url.toString(), "_blank", "noopener,noreferrer");
|
|
@@ -6810,6 +6925,16 @@ function App({ options, hostElement, bus }) {
|
|
|
6810
6925
|
},
|
|
6811
6926
|
[hostElement, patchAndSync, bus]
|
|
6812
6927
|
);
|
|
6928
|
+
const handleTextSizeChange = useCallback6(
|
|
6929
|
+
(size) => {
|
|
6930
|
+
log16.info("textSizeChange", { size });
|
|
6931
|
+
setActiveTextSize(size);
|
|
6932
|
+
hostElement.dataset.textSize = size;
|
|
6933
|
+
patchAndSync({ textSize: size });
|
|
6934
|
+
bus.emit("textSizeChange", size);
|
|
6935
|
+
},
|
|
6936
|
+
[hostElement, patchAndSync, bus]
|
|
6937
|
+
);
|
|
6813
6938
|
const handleToggleSidebarCollapsed = useCallback6(() => {
|
|
6814
6939
|
setSidebarCollapsed((prev) => {
|
|
6815
6940
|
const next = !prev;
|
|
@@ -6827,12 +6952,12 @@ function App({ options, hostElement, bus }) {
|
|
|
6827
6952
|
},
|
|
6828
6953
|
[patchAndSync, bus]
|
|
6829
6954
|
);
|
|
6830
|
-
const
|
|
6831
|
-
async (
|
|
6832
|
-
log16.info("
|
|
6833
|
-
bus.emit("
|
|
6955
|
+
const handleSelectHistoryConversation = useCallback6(
|
|
6956
|
+
async (targetConversationId) => {
|
|
6957
|
+
log16.info("selectConversation", { conversationId: targetConversationId });
|
|
6958
|
+
bus.emit("selectConversation", { conversationId: targetConversationId });
|
|
6834
6959
|
try {
|
|
6835
|
-
const res = await transport.loadConversation(
|
|
6960
|
+
const res = await transport.loadConversation(targetConversationId);
|
|
6836
6961
|
const hydrated = res.messages.map(fromWireMessage);
|
|
6837
6962
|
messagesSig.value = hydrated;
|
|
6838
6963
|
conversationIdSig.value = res.conversationId;
|
|
@@ -6841,7 +6966,7 @@ function App({ options, hostElement, bus }) {
|
|
|
6841
6966
|
setCanSend(res.canContinue);
|
|
6842
6967
|
setSuggestions(res.suggestions ?? []);
|
|
6843
6968
|
setView("chat");
|
|
6844
|
-
await transport.markRead(
|
|
6969
|
+
await transport.markRead(targetConversationId);
|
|
6845
6970
|
refreshUnread();
|
|
6846
6971
|
} catch (err) {
|
|
6847
6972
|
bus.emit("error", err);
|
|
@@ -6862,8 +6987,8 @@ function App({ options, hostElement, bus }) {
|
|
|
6862
6987
|
return unsub;
|
|
6863
6988
|
}, [hostElement, handleOpen, handleClose, handleExpand, handleFullscreen, handlePopOut, forms]);
|
|
6864
6989
|
const effectiveOptions = useMemo3(
|
|
6865
|
-
() => applyOptionOverrides(options, activeLocale, activeThemeMode),
|
|
6866
|
-
[options, activeLocale, activeThemeMode]
|
|
6990
|
+
() => applyOptionOverrides(options, activeLocale, activeThemeMode, activeTextSize),
|
|
6991
|
+
[options, activeLocale, activeThemeMode, activeTextSize]
|
|
6867
6992
|
);
|
|
6868
6993
|
const panelProps = {
|
|
6869
6994
|
options: effectiveOptions,
|
|
@@ -6886,10 +7011,11 @@ function App({ options, hostElement, bus }) {
|
|
|
6886
7011
|
onPopOut: handlePopOut,
|
|
6887
7012
|
onSoundToggle: handleSoundToggle,
|
|
6888
7013
|
onToggleHistory: handleToggleHistory,
|
|
6889
|
-
|
|
6890
|
-
|
|
7014
|
+
onSelectHistoryConversation: handleSelectHistoryConversation,
|
|
7015
|
+
onNewConversation: handleNewChat,
|
|
6891
7016
|
onLocaleChange: handleLocaleChange,
|
|
6892
7017
|
onThemeChange: handleThemeChange,
|
|
7018
|
+
onTextSizeChange: handleTextSizeChange,
|
|
6893
7019
|
onWidgetSizeChange: handleWidgetSizeChange,
|
|
6894
7020
|
onSend: handleSend,
|
|
6895
7021
|
onStop: handleStop,
|
|
@@ -6902,12 +7028,15 @@ function App({ options, hostElement, bus }) {
|
|
|
6902
7028
|
// Active form: replaces the composer as a gate and locks every chat action
|
|
6903
7029
|
// until the visitor submits or (when skippable) skips.
|
|
6904
7030
|
activeForm: activeForm.value?.form ?? null,
|
|
7031
|
+
// Resolve marker titles against the CURRENT forms config — the wire echo
|
|
7032
|
+
// can land before the server config merge populates `options.forms`.
|
|
7033
|
+
formMarkers: formMarkers.map((m) => ({ ...m, title: options.forms.list.find((f) => f.id === m.formId)?.title })),
|
|
6905
7034
|
onFormSubmit: forms.complete,
|
|
6906
7035
|
onFormSkip: forms.skip,
|
|
6907
7036
|
tool: toolInteraction
|
|
6908
7037
|
};
|
|
6909
7038
|
const onSelectConversation = (conversationId) => {
|
|
6910
|
-
void
|
|
7039
|
+
void handleSelectHistoryConversation(conversationId);
|
|
6911
7040
|
const chatId = chatTabId();
|
|
6912
7041
|
if (chatId) homeNav.switchTab(chatId);
|
|
6913
7042
|
};
|
|
@@ -6916,12 +7045,12 @@ function App({ options, hostElement, bus }) {
|
|
|
6916
7045
|
const renderSurface = (size) => {
|
|
6917
7046
|
const closeable = isActionVisible("close", effectiveOptions.mode, size);
|
|
6918
7047
|
if (enabledModules.length === 0) {
|
|
6919
|
-
return /* @__PURE__ */
|
|
7048
|
+
return /* @__PURE__ */ jsx36(ModulesEmpty, { strings: effectiveOptions.strings, onClose: closeable ? handleClose : void 0 });
|
|
6920
7049
|
}
|
|
6921
7050
|
if (enabledModules.length === 1 && enabledModules[0]?.layout === "chat") {
|
|
6922
|
-
return /* @__PURE__ */
|
|
7051
|
+
return /* @__PURE__ */ jsx36(Panel, { ...panelProps, panelSize: size });
|
|
6923
7052
|
}
|
|
6924
|
-
return /* @__PURE__ */
|
|
7053
|
+
return /* @__PURE__ */ jsx36(
|
|
6925
7054
|
MessengerHome,
|
|
6926
7055
|
{
|
|
6927
7056
|
panelProps: { ...panelProps, panelSize: size, onClose: closeable ? handleClose : void 0 },
|
|
@@ -6935,11 +7064,11 @@ function App({ options, hostElement, bus }) {
|
|
|
6935
7064
|
);
|
|
6936
7065
|
};
|
|
6937
7066
|
if (options.mode === "page") {
|
|
6938
|
-
const
|
|
6939
|
-
void
|
|
7067
|
+
const onSelectConversationFromSidebar = (chat) => {
|
|
7068
|
+
void handleSelectHistoryConversation(chat.conversationId);
|
|
6940
7069
|
};
|
|
6941
|
-
const
|
|
6942
|
-
return /* @__PURE__ */
|
|
7070
|
+
const conversationsEnabled = enabledModules.some((m) => m.layout === "chat");
|
|
7071
|
+
return /* @__PURE__ */ jsx36("div", { class: `${p32}-anchor`, children: /* @__PURE__ */ jsx36(
|
|
6943
7072
|
PageShell,
|
|
6944
7073
|
{
|
|
6945
7074
|
site: parsedSite,
|
|
@@ -6947,9 +7076,9 @@ function App({ options, hostElement, bus }) {
|
|
|
6947
7076
|
transport,
|
|
6948
7077
|
strings: effectiveOptions.strings,
|
|
6949
7078
|
visitorId,
|
|
6950
|
-
showConversations:
|
|
6951
|
-
|
|
6952
|
-
|
|
7079
|
+
showConversations: conversationsEnabled,
|
|
7080
|
+
onSelectConversation: onSelectConversationFromSidebar,
|
|
7081
|
+
onNewConversation: handleNewChat,
|
|
6953
7082
|
sidebarCollapsed,
|
|
6954
7083
|
onToggleSidebarCollapsed: handleToggleSidebarCollapsed,
|
|
6955
7084
|
children: renderSurface("fullscreen")
|
|
@@ -6958,7 +7087,7 @@ function App({ options, hostElement, bus }) {
|
|
|
6958
7087
|
}
|
|
6959
7088
|
if (isInlineLike) {
|
|
6960
7089
|
const inlineSize = options.mode === "standalone" ? "fullscreen" : panelSize;
|
|
6961
|
-
return /* @__PURE__ */
|
|
7090
|
+
return /* @__PURE__ */ jsx36("div", { class: `${p32}-anchor`, children: renderSurface(inlineSize) });
|
|
6962
7091
|
}
|
|
6963
7092
|
const drawerEdgeTab = options.mode === "drawer";
|
|
6964
7093
|
const triggerOwnedByPage = options.mode === "modal";
|
|
@@ -6966,7 +7095,7 @@ function App({ options, hostElement, bus }) {
|
|
|
6966
7095
|
const calloutToRender = launcherVisible && !launcherLeaving && !calloutDismissed && !drawerEdgeTab ? effectiveOptions.launcher.callout : null;
|
|
6967
7096
|
return /* @__PURE__ */ jsxs31("div", { class: `${p32}-anchor`, "data-launcher-size": effectiveOptions.launcher.size, children: [
|
|
6968
7097
|
isOpen ? renderSurface(panelSize) : null,
|
|
6969
|
-
launcherVisible ? /* @__PURE__ */
|
|
7098
|
+
launcherVisible ? /* @__PURE__ */ jsx36(
|
|
6970
7099
|
Launcher,
|
|
6971
7100
|
{
|
|
6972
7101
|
onToggle: handleOpen,
|
|
@@ -6976,7 +7105,7 @@ function App({ options, hostElement, bus }) {
|
|
|
6976
7105
|
edgeTab: drawerEdgeTab
|
|
6977
7106
|
}
|
|
6978
7107
|
) : null,
|
|
6979
|
-
calloutToRender ? /* @__PURE__ */
|
|
7108
|
+
calloutToRender ? /* @__PURE__ */ jsx36(
|
|
6980
7109
|
LauncherCallout,
|
|
6981
7110
|
{
|
|
6982
7111
|
callout: calloutToRender,
|