@runtypelabs/persona 4.33.0 → 4.35.1

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.
Files changed (220) hide show
  1. package/dist/activity-ui.d.cts +3 -15
  2. package/dist/activity-ui.d.ts +3 -15
  3. package/dist/animations/glyph-cycle.d.cts +1 -3
  4. package/dist/animations/glyph-cycle.d.ts +1 -3
  5. package/dist/animations/wipe.d.cts +1 -3
  6. package/dist/animations/wipe.d.ts +1 -3
  7. package/dist/approval-ui.cjs +2 -2
  8. package/dist/approval-ui.d.cts +3 -15
  9. package/dist/approval-ui.d.ts +3 -15
  10. package/dist/approval-ui.js +1 -1
  11. package/dist/artifacts-ui.cjs +1 -1
  12. package/dist/artifacts-ui.d.cts +3 -21
  13. package/dist/artifacts-ui.d.ts +3 -21
  14. package/dist/background-runtime.d.cts +2 -3
  15. package/dist/background-runtime.d.ts +2 -3
  16. package/dist/{chunk-DW7Vg_l2.js → chunk-B1P8w9_X.js} +1 -1
  17. package/dist/{chunk-D6U0E82p.js → chunk-B30Jdgg6.js} +1 -1
  18. package/dist/{chunk-gu34lr-P.js → chunk-Brdx4NCz.js} +1 -1
  19. package/dist/{chunk-6CUrH_jm.js → chunk-Bzo9GaAi.js} +1 -1
  20. package/dist/{chunk-Ds_twaZn.js → chunk-C4v-HNhS.js} +1 -1
  21. package/dist/{chunk-Bkma5hIU.js → chunk-CE4seJxF.js} +1 -1
  22. package/dist/chunk-CNBMBx-Y.js +2 -0
  23. package/dist/{chunk-ql5N2I_t.js → chunk-CWzHNuVK.js} +1 -1
  24. package/dist/{chunk-DbGLjU2P.js → chunk-CYpt7PsO.js} +1 -1
  25. package/dist/chunk-Cd8mp8Sv.js +1 -0
  26. package/dist/chunk-CsfE8WRG.js +1 -0
  27. package/dist/{chunk-DOZmcve8.js → chunk-Csr59G5V.js} +1 -1
  28. package/dist/{chunk-Co3VVwGe.js → chunk-D2pHRNEq.js} +0 -0
  29. package/dist/chunk-D3kZO8u-.js +1 -0
  30. package/dist/chunk-DAthf5H3.js +1 -0
  31. package/dist/{chunk-CXQJG7pb.js → chunk-DZ_aillY.js} +2 -2
  32. package/dist/{chunk-6C23QQdP.js → chunk-DgJV9zbK.js} +1 -1
  33. package/dist/chunk-Dv6KtIT1.js +1 -0
  34. package/dist/chunk-Dws8IrdR.js +1 -0
  35. package/dist/chunk-ThxxD8oK.js +1 -0
  36. package/dist/{chunk-C-EHtpbB.js → chunk-h5aOI_Pa.js} +1 -1
  37. package/dist/chunk-kizhspe5.js +1 -0
  38. package/dist/client-dispatch.js +1 -1
  39. package/dist/client-history.js +1 -1
  40. package/dist/client-stream.js +1 -1
  41. package/dist/{code-generators-DqauYyfX.d.cts → code-generators-DPAqTcAz.d.cts} +0 -2
  42. package/dist/{code-generators-DqauYyfX.d.ts → code-generators-DPAqTcAz.d.ts} +0 -2
  43. package/dist/codegen.cjs +1 -1
  44. package/dist/codegen.d.cts +1 -1
  45. package/dist/codegen.d.ts +1 -1
  46. package/dist/codegen.js +1 -1
  47. package/dist/composer-actions-runtime.cjs +1 -1
  48. package/dist/composer-actions-runtime.d.cts +4 -20
  49. package/dist/composer-actions-runtime.d.ts +4 -20
  50. package/dist/composer-actions-runtime.js +1 -1
  51. package/dist/{composer-input-DnqGCXZz.d.ts → composer-input-BSDNPOqV.d.cts} +1 -7
  52. package/dist/{composer-input-DnqGCXZz.d.cts → composer-input-BSDNPOqV.d.ts} +1 -7
  53. package/dist/{composer-store-6Iwy6WLI.d.ts → composer-store-DC-gAjtN.d.cts} +1 -3
  54. package/dist/{composer-store-6Iwy6WLI.d.cts → composer-store-DC-gAjtN.d.ts} +1 -3
  55. package/dist/config-diagnostics.d.cts +0 -2
  56. package/dist/config-diagnostics.d.ts +0 -2
  57. package/dist/{context-mention-manager-B-rHF98n.d.ts → context-mention-manager-CCpeoGL2.d.cts} +2 -6
  58. package/dist/{context-mention-manager-B-rHF98n.d.cts → context-mention-manager-CCpeoGL2.d.ts} +2 -6
  59. package/dist/context-mentions-inline.cjs +1 -1
  60. package/dist/context-mentions-inline.d.cts +2 -4
  61. package/dist/context-mentions-inline.d.ts +2 -4
  62. package/dist/context-mentions-inline.js +1 -1
  63. package/dist/context-mentions.cjs +2 -2
  64. package/dist/context-mentions.d.cts +3 -9
  65. package/dist/context-mentions.d.ts +3 -9
  66. package/dist/context-mentions.js +1 -1
  67. package/dist/{defaults-BuOjqUAG.d.ts → defaults-tj5RcN8r.d.cts} +1 -5
  68. package/dist/{defaults-BuOjqUAG.d.cts → defaults-tj5RcN8r.d.ts} +1 -5
  69. package/dist/dictation-runtime.cjs +1 -1
  70. package/dist/dictation-runtime.d.cts +4 -13
  71. package/dist/dictation-runtime.d.ts +4 -13
  72. package/dist/dictation-runtime.js +1 -1
  73. package/dist/{dom-context-DHTabIn7.d.cts → dom-context-Bw-_9Evh.d.cts} +0 -2
  74. package/dist/{dom-context-DHTabIn7.d.ts → dom-context-Bw-_9Evh.d.ts} +0 -2
  75. package/dist/event-stream-view.cjs +1 -1
  76. package/dist/event-stream-view.d.cts +3 -16
  77. package/dist/event-stream-view.d.ts +3 -16
  78. package/dist/{fallback-speech-engine-SqEfkGda.d.ts → fallback-speech-engine-gkhbjLiZ.d.cts} +1 -3
  79. package/dist/{fallback-speech-engine-SqEfkGda.d.cts → fallback-speech-engine-gkhbjLiZ.d.ts} +1 -3
  80. package/dist/{feature-preferences-DqAmje-2.d.ts → feature-preferences-CerDWGZ7.d.cts} +1 -5
  81. package/dist/{feature-preferences-DqAmje-2.d.cts → feature-preferences-CerDWGZ7.d.ts} +1 -5
  82. package/dist/forms-ui.d.cts +2 -4
  83. package/dist/forms-ui.d.ts +2 -4
  84. package/dist/{history-confirm-dialog-B3L7QNcO.d.cts → history-confirm-dialog-CrkSB3Ra.d.cts} +2 -14
  85. package/dist/{history-confirm-dialog-B3L7QNcO.d.ts → history-confirm-dialog-CrkSB3Ra.d.ts} +2 -14
  86. package/dist/history-shell.cjs +1 -1
  87. package/dist/history-shell.d.cts +8 -27
  88. package/dist/history-shell.d.ts +8 -27
  89. package/dist/history-shell.js +1 -1
  90. package/dist/history-view.d.cts +1 -1
  91. package/dist/history-view.d.ts +1 -1
  92. package/dist/icons-extra.cjs +1 -1
  93. package/dist/icons-extra.d.cts +0 -2
  94. package/dist/icons-extra.d.ts +0 -2
  95. package/dist/index.cjs +44 -44
  96. package/dist/index.cjs.map +1 -1
  97. package/dist/index.d.cts +10 -10
  98. package/dist/index.d.ts +10 -10
  99. package/dist/index.global.js +1 -1
  100. package/dist/index.global.js.map +1 -1
  101. package/dist/index.js +50 -50
  102. package/dist/index.js.map +1 -1
  103. package/dist/install.global.js +1 -1
  104. package/dist/install.global.js.map +1 -1
  105. package/dist/launcher.global.js +2 -2
  106. package/dist/launcher.global.js.map +1 -1
  107. package/dist/{loading-label-runtime-loader-JecjOfJS.d.ts → loading-label-runtime-loader-fWIRrhUF.d.cts} +1 -3
  108. package/dist/{loading-label-runtime-loader-JecjOfJS.d.cts → loading-label-runtime-loader-fWIRrhUF.d.ts} +1 -3
  109. package/dist/loading-label-runtime.cjs +1 -1
  110. package/dist/loading-label-runtime.d.cts +1 -1
  111. package/dist/loading-label-runtime.d.ts +1 -1
  112. package/dist/loading-label-runtime.js +1 -1
  113. package/dist/markdown-parsers.js +1 -1
  114. package/dist/{message-bubble-CBYtpDsT.d.ts → message-bubble-Czc0lOHr.d.cts} +20 -3
  115. package/dist/{message-bubble-CBYtpDsT.d.cts → message-bubble-Czc0lOHr.d.ts} +20 -3
  116. package/dist/{plugin-kit-C1mRjLgW.d.cts → plugin-kit-C30jE-cw.d.cts} +3 -3
  117. package/dist/{plugin-kit-C1mRjLgW.d.ts → plugin-kit-C30jE-cw.d.ts} +3 -3
  118. package/dist/plugin-kit.cjs +1 -1
  119. package/dist/plugin-kit.d.cts +1 -1
  120. package/dist/plugin-kit.d.ts +1 -1
  121. package/dist/plugin-kit.js +1 -1
  122. package/dist/preferences-runtime.cjs +1 -1
  123. package/dist/preferences-runtime.d.cts +1 -1
  124. package/dist/preferences-runtime.d.ts +1 -1
  125. package/dist/preferences-runtime.js +1 -1
  126. package/dist/{preview-_UJwwt2L.d.cts → preview-D-osV3FU.d.cts} +2 -6
  127. package/dist/{preview-_UJwwt2L.d.ts → preview-D-osV3FU.d.ts} +2 -6
  128. package/dist/{registry-B5ZV3K-h.d.ts → registry-B6w91tx0.d.cts} +1 -8
  129. package/dist/{registry-B5ZV3K-h.d.cts → registry-B6w91tx0.d.ts} +1 -8
  130. package/dist/{session-Bys8_XuB.d.cts → session-BUQrs3Of.d.cts} +10 -93
  131. package/dist/{session-Bys8_XuB.d.ts → session-BUQrs3Of.d.ts} +10 -93
  132. package/dist/session-reconnect.d.cts +2 -4
  133. package/dist/session-reconnect.d.ts +2 -4
  134. package/dist/smart-dom-reader.d.cts +2 -8
  135. package/dist/smart-dom-reader.d.ts +2 -8
  136. package/dist/testing.d.cts +0 -2
  137. package/dist/testing.d.ts +0 -2
  138. package/dist/theme-editor-preview.cjs +50 -50
  139. package/dist/theme-editor-preview.d.cts +1 -1
  140. package/dist/theme-editor-preview.d.ts +1 -1
  141. package/dist/theme-editor-preview.js +25 -25
  142. package/dist/theme-editor.cjs +25 -5
  143. package/dist/theme-editor.d.cts +2 -22
  144. package/dist/theme-editor.d.ts +2 -22
  145. package/dist/theme-editor.js +1 -1
  146. package/dist/theme-reference.cjs +1 -1
  147. package/dist/theme-reference.d.cts +2 -4
  148. package/dist/theme-reference.d.ts +2 -4
  149. package/dist/theme-reference.js +1 -1
  150. package/dist/{tool-loading-animation-d5qAQcwv.d.ts → tool-loading-animation-B7XUf8TN.d.cts} +1 -7
  151. package/dist/{tool-loading-animation-d5qAQcwv.d.cts → tool-loading-animation-B7XUf8TN.d.ts} +1 -7
  152. package/dist/{tooltip-BkW-8MnD.d.cts → tooltip-DbXkAuJL.d.cts} +0 -2
  153. package/dist/{tooltip-BkW-8MnD.d.ts → tooltip-DbXkAuJL.d.ts} +0 -2
  154. package/dist/{turn-activity-ui-q6fHVnx-.d.cts → turn-activity-ui-CohuNMHT.d.cts} +2 -12
  155. package/dist/{turn-activity-ui-q6fHVnx-.d.ts → turn-activity-ui-CohuNMHT.d.ts} +2 -12
  156. package/dist/turn-activity-ui.d.cts +1 -1
  157. package/dist/turn-activity-ui.d.ts +1 -1
  158. package/dist/{types-B_mj21jg.d.cts → types-9i0xcAMT.d.cts} +128 -29
  159. package/dist/{types-B_mj21jg.d.ts → types-9i0xcAMT.d.ts} +128 -29
  160. package/dist/ui-extras.js +3 -3
  161. package/dist/voice-client-tools.d.cts +1 -3
  162. package/dist/voice-client-tools.d.ts +1 -3
  163. package/dist/voice-runtime.cjs +1 -1
  164. package/dist/voice-runtime.d.cts +2 -12
  165. package/dist/voice-runtime.d.ts +2 -12
  166. package/dist/voice-runtime.js +2 -2
  167. package/dist/voice-worklet-player.d.cts +2 -6
  168. package/dist/voice-worklet-player.d.ts +2 -6
  169. package/dist/{webmcp-runtime-entry-ClEO3qdI.d.ts → webmcp-runtime-entry-XNaXa-9h.d.cts} +9 -5
  170. package/dist/{webmcp-runtime-entry-ClEO3qdI.d.cts → webmcp-runtime-entry-XNaXa-9h.d.ts} +9 -5
  171. package/dist/webmcp-runtime.cjs +1 -1
  172. package/dist/webmcp-runtime.d.cts +1 -1
  173. package/dist/webmcp-runtime.d.ts +1 -1
  174. package/dist/webmcp-runtime.js +1 -1
  175. package/dist/widget.css +1 -1
  176. package/package.json +5 -5
  177. package/src/client-dispatch.ts +13 -0
  178. package/src/client.ts +37 -2
  179. package/src/client.webmcp-require-confirm.test.ts +212 -0
  180. package/src/components/composer-model-picker.ts +0 -14
  181. package/src/components/composer-overflow-menu.ts +0 -15
  182. package/src/components/composer-tokens.ts +0 -20
  183. package/src/components/event-stream-view.test.ts +5 -0
  184. package/src/components/message-bubble.ts +26 -6
  185. package/src/components/scroll-to-bottom.test.ts +135 -0
  186. package/src/components/scroll-to-bottom.ts +50 -13
  187. package/src/components/user-message-collapse.ts +117 -0
  188. package/src/defaults.ts +6 -0
  189. package/src/generated/runtype-openapi-contract.ts +13 -0
  190. package/src/plugin-kit.test.ts +101 -0
  191. package/src/plugin-kit.ts +29 -1
  192. package/src/session.ts +6 -2
  193. package/src/session.webmcp.test.ts +32 -0
  194. package/src/styles/widget.css +56 -0
  195. package/src/theme-reference.ts +2 -2
  196. package/src/types/theme.ts +29 -0
  197. package/src/types.ts +84 -5
  198. package/src/ui.composer-models.test.ts +5 -7
  199. package/src/ui.composer-overflow.test.ts +14 -21
  200. package/src/ui.scroll-additive.test.ts +219 -117
  201. package/src/ui.scroll.test.ts +176 -13
  202. package/src/ui.ts +230 -107
  203. package/src/ui.turn-activity.test.ts +7 -7
  204. package/src/ui.user-message-collapse.test.ts +540 -0
  205. package/src/utils/auto-follow.test.ts +0 -38
  206. package/src/utils/auto-follow.ts +0 -35
  207. package/src/utils/context-mention-controller.test.ts +56 -0
  208. package/src/utils/theme.test.ts +23 -0
  209. package/src/utils/tokens.ts +16 -0
  210. package/src/webmcp-bridge.test.ts +102 -0
  211. package/src/webmcp-runtime-entry.ts +29 -1
  212. package/dist/chunk-BAkaTZpd.js +0 -1
  213. package/dist/chunk-BEDTp-dm.js +0 -1
  214. package/dist/chunk-C7-m0EmI.js +0 -1
  215. package/dist/chunk-CNhThrLX.js +0 -1
  216. package/dist/chunk-CVMIncEY.js +0 -1
  217. package/dist/chunk-CzLEhoB_.js +0 -2
  218. package/dist/chunk-DVgzoVCB.js +0 -1
  219. package/dist/chunk-d54BJdKd.js +0 -1
  220. package/dist/chunk-dLJWKfOb.js +0 -1
@@ -5,6 +5,7 @@ import { ContextMentionController } from "./context-mention-controller";
5
5
  import { createTextareaComposerInput } from "./composer-input";
6
6
  import { createContentEditableComposerInput } from "./composer-contenteditable";
7
7
  import { createSlashCommandsSource } from "./mention-matcher";
8
+ import { applyThemeVariables } from "./theme";
8
9
  import type {
9
10
  AgentWidgetConfig,
10
11
  AgentWidgetContextMentionConfig,
@@ -433,6 +434,61 @@ describe("ContextMentionController", () => {
433
434
  });
434
435
  });
435
436
 
437
+ describe("ContextMentionController — theme", () => {
438
+ beforeEach(() => {
439
+ document.body.innerHTML = "";
440
+ });
441
+
442
+ // The menu portals to document.body, outside the themed widget root. Without
443
+ // the root's variables it painted the light fallbacks in a dark widget.
444
+ it("paints the body-portaled menu with the widget's dark theme and follows a scheme change", async () => {
445
+ const root = document.createElement("div");
446
+ root.setAttribute("data-persona-root", "true");
447
+ const dark: AgentWidgetConfig = {
448
+ colorScheme: "dark",
449
+ future: { v5Defaults: true },
450
+ theme: { semantic: { colors: { surface: "#17181c", border: "#2e3038" } } },
451
+ } as AgentWidgetConfig;
452
+ applyThemeVariables(root, dark);
453
+ const form = document.createElement("form");
454
+ const textarea = document.createElement("textarea");
455
+ form.appendChild(textarea);
456
+ root.appendChild(form);
457
+ document.body.appendChild(root);
458
+
459
+ const controller = new ContextMentionController({
460
+ mentionConfig: { enabled: true, sources: [syncSource("files", [item("App.tsx")])] },
461
+ composerInput: createTextareaComposerInput(textarea),
462
+ anchor: form,
463
+ getMessages: () => [],
464
+ getConfig: () => ({}) as AgentWidgetConfig,
465
+ onSelect: vi.fn(() => true),
466
+ announce: vi.fn(),
467
+ });
468
+ textarea.value = "@";
469
+ textarea.setSelectionRange(1, 1);
470
+ controller.onInput();
471
+
472
+ const menu = document.querySelector<HTMLElement>("[data-persona-mention-menu]")!;
473
+ expect(menu.parentElement).toBe(document.body);
474
+ expect(menu.getAttribute("data-persona-color-scheme")).toBe("dark");
475
+ expect(menu.style.getPropertyValue("--persona-surface")).toBe("#17181c");
476
+ expect(menu.style.getPropertyValue("--persona-border")).toBe("#2e3038");
477
+ const darkText = root.style.getPropertyValue("--persona-text");
478
+ expect(darkText).not.toBe("");
479
+ expect(menu.style.getPropertyValue("--persona-text")).toBe(darkText);
480
+
481
+ // controller.update({ colorScheme }) re-applies the theme onto the root.
482
+ applyThemeVariables(root, { ...dark, colorScheme: "light" } as AgentWidgetConfig);
483
+ await tick();
484
+ expect(menu.getAttribute("data-persona-color-scheme")).toBe("light");
485
+ expect(menu.style.getPropertyValue("--persona-text")).toBe(root.style.getPropertyValue("--persona-text"));
486
+ expect(menu.style.getPropertyValue("--persona-text")).not.toBe(darkText);
487
+
488
+ controller.destroy();
489
+ });
490
+ });
491
+
436
492
  describe("ContextMentionController — slash-commands", () => {
437
493
  beforeEach(() => {
438
494
  document.body.innerHTML = "";
@@ -1218,6 +1218,29 @@ describe('theme utils', () => {
1218
1218
  expect(cssVars['--persona-scroll-to-bottom-count-font-weight']).toBe('700');
1219
1219
  });
1220
1220
 
1221
+ it('maps approval-state overrides and otherwise leaves them to the pill colors', () => {
1222
+ const cssVars = themeToCssVariables(createTheme({
1223
+ components: {
1224
+ scrollToBottom: {
1225
+ approval: {
1226
+ background: 'palette.colors.warning.50',
1227
+ foreground: '#713f12',
1228
+ border: 'palette.colors.warning.300',
1229
+ fontWeight: '600',
1230
+ },
1231
+ },
1232
+ },
1233
+ }));
1234
+ expect(cssVars['--persona-scroll-to-bottom-approval-bg']).toMatch(/^#/);
1235
+ expect(cssVars['--persona-scroll-to-bottom-approval-fg']).toBe('#713f12');
1236
+ expect(cssVars['--persona-scroll-to-bottom-approval-border']).toMatch(/^#/);
1237
+ expect(cssVars['--persona-scroll-to-bottom-approval-font-weight']).toBe('600');
1238
+ for (const v5Defaults of [false, true]) {
1239
+ const defaults = themeToCssVariables(getActiveTheme({ apiUrl: '/api', future: { v5Defaults } }));
1240
+ expect(Object.keys(defaults).filter(key => key.startsWith('--persona-scroll-to-bottom-approval-'))).toEqual([]);
1241
+ }
1242
+ });
1243
+
1221
1244
  it.each([false, true])('preserves CSS count badge fallbacks with V5=%s', (v5Defaults) => {
1222
1245
  for (const colorScheme of ['light', 'dark'] as const) {
1223
1246
  const cssVars = themeToCssVariables(getActiveTheme({
@@ -1341,6 +1341,13 @@ export function themeToCssVariables(theme: PersonaTheme): Record<string, string>
1341
1341
  ['fontSize', 'font-size'],
1342
1342
  ['fontWeight', 'font-weight'],
1343
1343
  ], '--persona-components-scrollToBottom-countBadge-');
1344
+ // The approval state falls back to the pill's own colors in CSS.
1345
+ emitTruthy(cssVars, 'scroll-to-bottom-approval-', [
1346
+ ['background', 'bg'],
1347
+ ['foreground', 'fg'],
1348
+ ['border', 'border'],
1349
+ ['fontWeight', 'font-weight'],
1350
+ ], '--persona-components-scrollToBottom-approval-');
1344
1351
 
1345
1352
  // V5 materializes message-action defaults in the theme; V4 retains the CSS
1346
1353
  // fallbacks. References follow ghost/semantic overrides in either scheme.
@@ -1352,6 +1359,15 @@ export function themeToCssVariables(theme: PersonaTheme): Record<string, string>
1352
1359
  ['borderRadius', 'radius'],
1353
1360
  ], '--persona-components-messageActions-');
1354
1361
 
1362
+ // Long user message collapse. widget.css carries the defaults in its var()
1363
+ // fallbacks (the fade and toggle follow the bubble text), so unset stays unset.
1364
+ emitTruthy(cssVars, 'user-collapse-', [
1365
+ ['fadeHeight', 'fade-height'],
1366
+ ['toggleForeground', 'toggle-fg'],
1367
+ ['toggleFontSize', 'toggle-font-size'],
1368
+ ['toggleFontWeight', 'toggle-font-weight'],
1369
+ ], '--persona-components-userMessageCollapse-');
1370
+
1355
1371
  // Intro card aliases: short names the panel inline-styles read directly.
1356
1372
  // The full-path `--persona-components-introCard-*` variables auto-emit above.
1357
1373
  // Default is flat (transparent, no shadow): the greeting renders as plain
@@ -30,6 +30,7 @@ vi.mock("@mcp-b/webmcp-polyfill", () => ({
30
30
  // one-argument constructor, wired to the real core deps — so these tests also
31
31
  // exercise the deps-injection seam the lazy CDN path uses.
32
32
  import { WebMcpBridge } from "./webmcp-bridge-public";
33
+ import { WebMcpBridge as WebMcpBridgeRuntime } from "./webmcp-runtime-entry";
33
34
  import {
34
35
  getWebMcpToolDisplayTitle,
35
36
  isWebMcpToolName,
@@ -962,3 +963,104 @@ describe("WebMcpBridge.watchToolChanges", () => {
962
963
  expect(() => stop()).not.toThrow();
963
964
  });
964
965
  });
966
+
967
+ describe("WebMcpBridge requireConfirmFor", () => {
968
+ const runtimeBridge = (
969
+ config: AgentWidgetWebMcpConfig,
970
+ getRequireConfirmFor: () => readonly string[] | null | undefined,
971
+ ) =>
972
+ new WebMcpBridgeRuntime(config, {
973
+ recordToolDisplayTitles: () => {},
974
+ getToolDisplayTitle: () => undefined,
975
+ loadPolyfill: async () => ({ initializeWebMCPPolyfill: () => {} }),
976
+ getRequireConfirmFor,
977
+ });
978
+
979
+ it("flags a widget-config match with confirmRequired on the confirm info", async () => {
980
+ const onConfirm = vi.fn<WebMcpConfirmHandler>(async () => true);
981
+ registry.tools = [fakeTool({ name: "checkout_submit" }), fakeTool({ name: "search" })];
982
+ const bridge = new WebMcpBridge({
983
+ enabled: true,
984
+ onConfirm,
985
+ requireConfirmFor: ["checkout_*"],
986
+ });
987
+ await bridge.executeToolCall("webmcp:checkout_submit", {});
988
+ await bridge.executeToolCall("webmcp:search", {});
989
+ expect(onConfirm).toHaveBeenNthCalledWith(
990
+ 1,
991
+ expect.objectContaining({ toolName: "checkout_submit", confirmRequired: true }),
992
+ );
993
+ expect(onConfirm.mock.calls[1]?.[0]).not.toHaveProperty("confirmRequired");
994
+ });
995
+
996
+ it("reads server patterns at call time and matches the bare tool name", async () => {
997
+ const onConfirm = vi.fn<WebMcpConfirmHandler>(async () => true);
998
+ registry.tools = [fakeTool({ name: "delete_account" }), fakeTool({ name: "deleted_items" })];
999
+ let server: string[] | undefined;
1000
+ const bridge = runtimeBridge({ enabled: true, onConfirm }, () => server);
1001
+ await bridge.executeToolCall("webmcp:delete_account", {});
1002
+ expect(onConfirm.mock.calls[0]?.[0]).not.toHaveProperty("confirmRequired");
1003
+
1004
+ // Init lands after the bridge was built.
1005
+ server = ["delete_account", "*_admin"];
1006
+ await bridge.executeToolCall("webmcp:delete_account", {});
1007
+ await bridge.executeToolCall("webmcp:deleted_items", {});
1008
+ expect(onConfirm.mock.calls[1]?.[0]).toMatchObject({ confirmRequired: true });
1009
+ expect(onConfirm.mock.calls[2]?.[0]).not.toHaveProperty("confirmRequired");
1010
+ });
1011
+
1012
+ it("merges widget and server patterns", async () => {
1013
+ const onConfirm = vi.fn<WebMcpConfirmHandler>(async () => true);
1014
+ registry.tools = [fakeTool({ name: "pay_now" }), fakeTool({ name: "wipe_cart" })];
1015
+ const bridge = runtimeBridge(
1016
+ { enabled: true, onConfirm, requireConfirmFor: ["pay_*"] },
1017
+ () => ["wipe_*"],
1018
+ );
1019
+ await bridge.executeToolCall("webmcp:pay_now", {});
1020
+ await bridge.executeToolCall("webmcp:wipe_cart", {});
1021
+ expect(onConfirm.mock.calls.map((c) => c[0]?.confirmRequired)).toEqual([true, true]);
1022
+ });
1023
+
1024
+ it.each([[undefined], [[] as string[]]])(
1025
+ "an absent or empty list leaves the gate unflagged (%s)",
1026
+ async (list) => {
1027
+ const onConfirm = vi.fn<WebMcpConfirmHandler>(async () => true);
1028
+ registry.tools = [fakeTool({ name: "checkout_submit" })];
1029
+ const bridge = runtimeBridge({ enabled: true, onConfirm, requireConfirmFor: list }, () => list);
1030
+ await bridge.executeToolCall("webmcp:checkout_submit", {});
1031
+ expect(onConfirm.mock.calls[0]?.[0]).not.toHaveProperty("confirmRequired");
1032
+ },
1033
+ );
1034
+
1035
+ it("fails closed while the server policy is not loaded (null) or its read throws", async () => {
1036
+ const onConfirm = vi.fn<WebMcpConfirmHandler>(async () => false);
1037
+ const execute = vi.fn(() => "ran");
1038
+ registry.tools = [fakeTool({ name: "next_slide", annotations: { readOnlyHint: true }, execute })];
1039
+ const unloaded = runtimeBridge({ enabled: true, onConfirm }, () => null);
1040
+ const throwing = runtimeBridge({ enabled: true, onConfirm }, () => {
1041
+ throw new Error("boom");
1042
+ });
1043
+ for (const bridge of [unloaded, throwing]) {
1044
+ const r = await bridge.executeVoiceToolCall("webmcp:next_slide", {}, { autoConfirmReadOnly: true });
1045
+ expect(r.status).toBe("denied");
1046
+ }
1047
+ expect(onConfirm).toHaveBeenCalledTimes(2);
1048
+ expect(onConfirm.mock.calls.map((c) => c[0]?.confirmRequired)).toEqual([true, true]);
1049
+ expect(execute).not.toHaveBeenCalled();
1050
+ });
1051
+
1052
+ it("does not let the voice read-only fast tier skip a matched tool", async () => {
1053
+ const onConfirm = vi.fn<WebMcpConfirmHandler>(async () => false);
1054
+ const execute = vi.fn(() => "ran");
1055
+ registry.tools = [
1056
+ fakeTool({ name: "checkout_preview", annotations: { readOnlyHint: true }, execute }),
1057
+ ];
1058
+ const bridge = runtimeBridge({ enabled: true, onConfirm }, () => ["checkout_*"]);
1059
+ const r = await bridge.executeVoiceToolCall("webmcp:checkout_preview", {}, {
1060
+ autoConfirmReadOnly: true,
1061
+ });
1062
+ expect(onConfirm).toHaveBeenCalledWith(expect.objectContaining({ confirmRequired: true }));
1063
+ expect(execute).not.toHaveBeenCalled();
1064
+ expect(r.status).toBe("denied");
1065
+ });
1066
+ });
@@ -35,6 +35,14 @@ export interface WebMcpBridgeDeps {
35
35
  getToolDisplayTitle: (toolName: string) => string | undefined;
36
36
  /** Core's `loadWebMcpPolyfillModule` (slot-aware polyfill resolution). */
37
37
  loadPolyfill: () => Promise<WebMcpPolyfillModule>;
38
+ /**
39
+ * Server-supplied `requireConfirmFor` patterns (the bound surface's policy
40
+ * from client-token init), read at call time because init can land after
41
+ * the bridge is built. Merged with `config.requireConfirmFor`. `null` means
42
+ * a policy is expected but not loaded yet: every call then needs
43
+ * confirmation (fail closed).
44
+ */
45
+ getRequireConfirmFor?: () => readonly string[] | null | undefined;
38
46
  }
39
47
 
40
48
  const DEFAULT_TOOL_TIMEOUT_MS = 30_000;
@@ -339,7 +347,13 @@ export class WebMcpBridge {
339
347
  ...(signal ? { signal } : {}),
340
348
  reason: "gate",
341
349
  };
342
- const skipGate = autoConfirmReadOnly && annotations?.readOnlyHint === true;
350
+ // A `requireConfirmFor` match always reaches the confirm handler: it skips
351
+ // `autoApprove` on the default UI (session.ts) and the voice read-only
352
+ // fast tier here.
353
+ const confirmRequired = this.#requiresConfirmation(bareName);
354
+ if (confirmRequired) gateInfo.confirmRequired = true;
355
+ const skipGate =
356
+ !confirmRequired && autoConfirmReadOnly && annotations?.readOnlyHint === true;
343
357
  if (!skipGate && !(await this.#requestConfirm(gateInfo))) {
344
358
  return runFailure("denied", "User declined the tool call.");
345
359
  }
@@ -487,6 +501,20 @@ export class WebMcpBridge {
487
501
  }
488
502
  }
489
503
 
504
+ #requiresConfirmation(toolName: string): boolean {
505
+ let serverPatterns: readonly string[] | null | undefined;
506
+ try {
507
+ serverPatterns = this.#deps.getRequireConfirmFor?.();
508
+ } catch {
509
+ serverPatterns = null;
510
+ }
511
+ if (serverPatterns === null) return true;
512
+ const matches = (list: readonly string[] | undefined): boolean =>
513
+ Array.isArray(list) &&
514
+ list.some((pattern) => typeof pattern === "string" && matchesGlob(toolName, pattern));
515
+ return matches(this.config.requireConfirmFor) || matches(serverPatterns);
516
+ }
517
+
490
518
  #passesClientAllowlist(toolName: string): boolean {
491
519
  const list = this.config.allowlist;
492
520
  if (!list || list.length === 0) return true;
@@ -1 +0,0 @@
1
- const e=`data-persona-tooltip-suppressed`,t=`persona-composer-control`,n=`persona-composer-control--glyph`,r=(e,t,n)=>{let r=e.ownerDocument?.defaultView;if(!r)return;let i=r.getComputedStyle(e);for(let e of n){let n=i.getPropertyValue(e).trim();n?t.style.setProperty(e,n):t.style.removeProperty(e)}};export{e as i,n,r,t};
@@ -1 +0,0 @@
1
- import{i as e,r as t,t as n}from"./chunk-D5BxWOFB.js";import{n as r,t as i}from"./chunk-CNhThrLX.js";import{i as a,n as o,r as s,t as c}from"./chunk-BAkaTZpd.js";var l=`.persona-composer-overflow-menu{gap:var(--persona-components-composer-overflowMenu-rowGap,2px);min-width:min(var(--persona-components-composer-overflowMenu-minWidth,180px), calc(100vw - 16px));box-sizing:border-box;max-width:calc(100vw - 16px);max-height:min(var(--persona-components-composer-overflowMenu-maxHeight,320px), calc(100vh - 16px));padding:var(--persona-components-composer-overflowMenu-padding,4px);border-radius:var(--persona-components-composer-overflowMenu-borderRadius,var(--persona-radius-lg,.5rem));border:1px solid var(--persona-components-composer-overflowMenu-borderColor,var(--persona-border,#e5e7eb));background:var(--persona-components-composer-overflowMenu-background,var(--persona-surface,#fff));color:var(--persona-components-composer-overflowMenu-foreground,var(--persona-text,#111827));box-shadow:var(--persona-components-composer-overflowMenu-shadow,var(--persona-shadow-md,0 8px 24px #0000001f));font-family:var(--persona-font-family,inherit);line-height:var(--persona-components-composer-overflowMenu-lineHeight,1.35);flex-direction:column;display:flex;overflow-y:auto}.persona-composer-overflow-menu__item{align-items:center;gap:var(--persona-components-composer-overflowMenu-iconGap,8px);width:100%;padding:var(--persona-components-composer-overflowMenu-rowPadding,6px 8px);border-radius:var(--persona-components-composer-overflowMenu-rowBorderRadius,var(--persona-radius-md,.375rem));color:inherit;font-family:inherit;font-size:var(--persona-components-composer-overflowMenu-fontSize,13px);text-align:start;cursor:pointer;background:0 0;border:none;display:flex}.persona-composer-overflow-menu__item:hover:not(:disabled){background:var(--persona-components-composer-overflowMenu-hoverBackground,var(--persona-button-ghost-hover-bg,#0000000d))}.persona-composer-overflow-menu__item:focus-visible{background:var(--persona-components-composer-overflowMenu-focusBackground,var(--persona-button-ghost-hover-bg,#0000000d))}.persona-composer-overflow-menu__item[aria-pressed=true]{background:var(--persona-button-ghost-hover-bg,#0000000d);font-weight:600}.persona-composer-overflow-menu__item:disabled{opacity:.5;cursor:default}.persona-composer-overflow-menu__item[aria-busy=true]{opacity:.6;cursor:progress}.persona-composer-overflow-menu__icon{width:var(--persona-components-composer-overflowMenu-iconSize,16px);height:var(--persona-components-composer-overflowMenu-iconSize,16px);flex:none;align-items:center;display:inline-flex}.persona-composer-overflow-menu__content{display:contents}.persona-composer-overflow-menu__text{flex-direction:column;min-width:0;display:flex}.persona-composer-overflow-menu__icon>svg{width:100%;height:100%}.persona-composer-overflow-menu__description{color:var(--persona-components-composer-overflowMenu-descriptionColor,var(--persona-text-muted,#6b7280));font-size:var(--persona-components-composer-overflowMenu-descriptionFontSize,12px);line-height:var(--persona-components-composer-overflowMenu-lineHeight,1.35);white-space:normal;display:block}.persona-composer-overflow-menu[data-persona-menu-description-layout=inline] .persona-composer-overflow-menu__text,.persona-composer-overflow-menu[data-persona-menu-description-layout=inline] .persona-composer-overflow-menu__slot>.persona-composer-overflow-menu__label{align-items:baseline;gap:0 var(--persona-components-composer-overflowMenu-iconGap,8px);flex-flow:wrap;display:flex}.persona-composer-overflow-menu__divider{border-top:1px solid var(--persona-components-composer-overflowMenu-dividerColor,var(--persona-border,#e5e7eb));margin:var(--persona-components-composer-overflowMenu-dividerSpacing,4px 0);flex-shrink:0}.persona-composer-overflow-menu__label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.persona-composer-overflow-menu__slot{align-items:center;gap:var(--persona-components-composer-overflowMenu-iconGap,8px);width:100%;padding:var(--persona-components-composer-overflowMenu-rowPadding,6px 8px);border-radius:var(--persona-components-composer-overflowMenu-rowBorderRadius,var(--persona-radius-md,.375rem));font-size:var(--persona-components-composer-overflowMenu-fontSize,13px);text-align:start;cursor:pointer;display:flex}.persona-composer-overflow-menu__slot:hover{background:var(--persona-components-composer-overflowMenu-hoverBackground,var(--persona-button-ghost-hover-bg,#0000000d))}.persona-composer-overflow-menu__slot[data-persona-menu-focus]{background:var(--persona-components-composer-overflowMenu-focusBackground,var(--persona-button-ghost-hover-bg,#0000000d))}.persona-composer-overflow-menu__slot .persona-send-button-wrapper{display:contents}.persona-composer-overflow-menu__slot .persona-composer-control{width:var(--persona-components-composer-overflowMenu-iconSize,16px);height:var(--persona-components-composer-overflowMenu-iconSize,16px);min-width:var(--persona-components-composer-overflowMenu-iconSize,16px);min-height:var(--persona-components-composer-overflowMenu-iconSize,16px);box-shadow:none;color:inherit;cursor:inherit;background:0 0;border:none;border-radius:0;flex:none;padding:0;line-height:1;overflow:hidden}.persona-composer-overflow-menu__slot .persona-composer-control>svg{width:var(--persona-components-composer-overflowMenu-iconSize,16px);height:var(--persona-components-composer-overflowMenu-iconSize,16px)}.persona-composer-overflow-menu__slot .persona-composer-control:focus-visible{outline:none}.persona-composer-overflow-menu__slot .persona-control-tooltip{display:none}.persona-composer-segmented{align-items:center;gap:var(--persona-components-composer-segmented-gap,2px);padding:var(--persona-components-composer-segmented-padding,2px);border-radius:var(--persona-components-composer-segmented-trackBorderRadius,9999px);background:var(--persona-components-composer-segmented-trackBackground,var(--persona-container,#f3f4f6));flex:none;display:inline-flex}.persona-composer-segmented-item{cursor:pointer;white-space:nowrap;box-shadow:none;font-family:inherit;font-size:var(--persona-components-composer-segmented-fontSize,var(--persona-composer-font-size,.875rem));line-height:var(--persona-components-composer-segmented-lineHeight,var(--persona-composer-line-height,1.25rem));font-weight:var(--persona-components-composer-segmented-fontWeight,normal);min-height:var(--persona-components-composer-segmented-minHeight,0px);padding:var(--persona-components-composer-segmented-itemPadding,.25rem .625rem);border-radius:var(--persona-components-composer-segmented-trackBorderRadius,9999px);color:var(--persona-components-composer-segmented-inactiveForeground,var(--persona-muted,#6b7280));background:0 0;border:none;align-items:center;gap:.375rem;display:inline-flex}.persona-composer-segmented-item[aria-pressed=true]{background:var(--persona-components-composer-segmented-activeBackground,var(--persona-surface,#fff));color:var(--persona-components-composer-segmented-activeForeground,var(--persona-text,#111827));box-shadow:var(--persona-components-composer-segmented-activeShadow,0 1px 2px 0 #0f172a1f)}.persona-composer-segmented-item svg{flex:none}@media (pointer:coarse){.persona-composer-segmented-item{min-height:36px}}.persona-composer-model-picker-wrapper{align-items:center;display:inline-grid}.persona-composer-model-picker-wrapper>*{grid-area:1/1}[data-persona-root] .persona-composer-model-picker{max-width:10rem;height:var(--persona-components-composer-modelPicker-height,var(--persona-composer-control-size,40px));min-height:var(--persona-components-composer-modelPicker-height,var(--persona-composer-control-size,40px));width:auto;min-width:var(--persona-components-composer-modelPicker-minWidth,0px);line-height:var(--persona-components-composer-modelPicker-height,var(--persona-composer-control-size,40px));padding-block:0;padding-inline:.625rem 1.75rem;padding-inline:var(--persona-components-composer-modelPicker-paddingInline,.625rem 1.75rem);border-radius:var(--persona-components-composer-modelPicker-borderRadius,var(--persona-button-ghost-radius,var(--persona-radius-md,.375rem)));background-color:var(--persona-components-composer-modelPicker-background,var(--persona-button-ghost-bg,transparent));color:var(--persona-components-composer-modelPicker-labelColor,var(--persona-button-ghost-fg,var(--persona-text,#111827)));box-shadow:inset 0 0 0 1px var(--persona-components-composer-modelPicker-borderColor,transparent);font-family:inherit;font-size:var(--persona-components-composer-modelPicker-fontSize,.8125rem);font-weight:var(--persona-components-composer-modelPicker-fontWeight,normal);cursor:pointer;appearance:none;text-overflow:ellipsis;white-space:nowrap;text-align:start;border:none;overflow:hidden}.persona-composer-model-picker-chevron{pointer-events:none;background-color:var(--persona-components-composer-modelPicker-labelColor,var(--persona-button-ghost-fg,var(--persona-text,#111827)));justify-self:end;width:.875rem;height:.875rem;margin-inline-end:.625rem;-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}[data-persona-root] .persona-composer-model-picker option{line-height:normal}@media (pointer:coarse){[data-persona-root] .persona-composer-model-picker{min-width:40px;min-height:40px}}[data-persona-root] .persona-composer-model-picker:hover:not(:disabled){background-color:var(--persona-components-composer-modelPicker-hoverBackground,var(--persona-button-ghost-hover-bg,#0000000d))}[data-persona-root] .persona-composer-model-picker:disabled{opacity:.5;cursor:default}[data-persona-root] .persona-composer-model-picker-trigger{align-items:center;gap:.25rem;display:inline-flex}.persona-composer-model-picker-label{text-overflow:ellipsis;white-space:nowrap;color:var(--persona-components-composer-modelPicker-labelColor,inherit);overflow:hidden}.persona-composer-model-picker-suffix{color:var(--persona-components-composer-modelPicker-suffixColor,var(--persona-muted,#6b7280));flex:none}.persona-composer-model-picker-suffix:empty{display:none}.persona-composer-model-menu{border-radius:var(--persona-components-composer-modelPicker-menuBorderRadius,var(--persona-radius-lg,.5rem));border:1px solid var(--persona-border,#e5e7eb);background:var(--persona-components-composer-modelPicker-menuBackground,var(--persona-surface,#fff));min-width:220px;max-height:320px;color:var(--persona-text,#111827);box-shadow:var(--persona-shadow-md,0 8px 24px #0000001f);font-family:var(--persona-font-family,inherit);flex-direction:column;gap:2px;padding:4px;display:flex;overflow-y:auto}.persona-composer-model-option{border-radius:var(--persona-radius-md,.375rem);width:100%;color:inherit;text-align:start;cursor:pointer;background:0 0;border:none;align-items:flex-start;gap:8px;padding:6px 8px;font-family:inherit;font-size:13px;display:flex}.persona-composer-model-option:hover,.persona-composer-model-option:focus{background:var(--persona-components-composer-modelPicker-rowHoverBackground,var(--persona-button-ghost-hover-bg,#0000000d));outline:none}.persona-composer-model-option-icon,.persona-composer-model-option-check{flex:none;align-items:center;margin-top:1px;display:inline-flex}.persona-composer-model-option-check{visibility:hidden}.persona-composer-model-option[aria-selected=true] .persona-composer-model-option-check{visibility:visible}.persona-composer-model-option-body{flex-direction:column;flex:auto;gap:2px;min-width:0;display:flex}.persona-composer-model-option-label{color:var(--persona-components-composer-modelPicker-labelColor,inherit)}.persona-composer-model-option-description{color:var(--persona-components-composer-modelPicker-descriptionColor,var(--persona-muted,#6b7280));font-size:12px;line-height:1.35}.persona-composer-mode-chip{background:var(--persona-mode-chip-bg,var(--persona-container,#f3f4f6));border-color:var(--persona-mode-chip-border,var(--persona-border,#e5e7eb));color:var(--persona-mode-chip-fg,var(--persona-text,#111827))}[data-persona-composer-expanded] .persona-widget-composer:not(.persona-pill-composer) :is(.persona-widget-composer__actions,.persona-widget-composer__left-actions,.persona-widget-composer__right-actions,.persona-composer-segmented){flex-wrap:wrap;min-width:0;max-width:100%}[data-persona-composer-expanded] .persona-widget-composer:not(.persona-pill-composer) :is(.persona-composer-control,.persona-composer-model-picker,.persona-composer-segmented-item){max-width:100%}[data-persona-composer-expanded] .persona-widget-composer:not(.persona-pill-composer) :is(.persona-composer-action-button,.persona-composer-model-picker,.persona-composer-segmented-item){text-overflow:ellipsis;overflow:hidden}[data-persona-composer-crowded] .persona-widget-composer:not(.persona-pill-composer) .persona-composer-model-picker-wrapper{max-width:min(100%,16rem)}`;const u=e=>r(e,`composer-actions`,l),d=`button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])`,f=[`--persona-components-composer-overflowMenu-background`,`--persona-components-composer-overflowMenu-borderColor`,`--persona-components-composer-overflowMenu-borderRadius`,`--persona-components-composer-overflowMenu-foreground`,`--persona-components-composer-overflowMenu-shadow`,...[`padding`,`rowGap`,`rowPadding`,`rowBorderRadius`,`fontSize`,`lineHeight`,`iconSize`,`iconGap`,`hoverBackground`,`focusBackground`,`descriptionColor`,`descriptionFontSize`,`dividerColor`,`dividerSpacing`,`minWidth`,`maxHeight`].map(e=>`--persona-components-composer-overflowMenu-${e}`)],p=`data-persona-menu-focus`,m=/* @__PURE__ */ new Set([`ArrowDown`,`ArrowUp`,`Home`,`End`]);function h(e){return e.getAttribute(`role`)===`menuitem`?e:e.querySelector(d)??e}const g=e=>e.disabled===!0||e.getAttribute(`aria-disabled`)===`true`;function _(e){let{renderLucideIcon:r,attachTooltip:a}=e.deps,l=e.label,_=!1,v=!1,y=!1,b=!1,x=!0,S=n(`div`,`persona-send-button-wrapper`),C=t(`button`,{className:`persona-rounded-button persona-flex persona-items-center persona-justify-center persona-cursor-pointer persona-composer-action-button persona-composer-overflow-trigger ${c} ${o}`,attrs:{type:`button`,"aria-haspopup":`menu`,"aria-expanded":`false`,"data-persona-composer-overflow-trigger":``}});S.appendChild(C);let w=t(`div`,{className:`persona-composer-overflow-menu`,attrs:{role:`menu`,tabindex:`-1`,"data-persona-composer-overflow-menu":``}}),T=()=>{let t=e.getButtonSize?.()??``;C.style.width=t,C.style.height=t,C.style.minWidth=t,C.style.minHeight=t,C.style.lineHeight=`1`,C.replaceChildren();let n=r((z()?e.getConfig?.()?.openTriggerIconName:void 0)??e.getConfig?.()?.triggerIconName??`plus`,24,`currentColor`,1.5);n?C.appendChild(n):C.textContent=`+`},ee=()=>{C.setAttribute(`aria-label`,l),w.setAttribute(`aria-label`,l)};ee();let E=a({anchor:C,trigger:S,text:()=>C.getAttribute(`aria-expanded`)===`true`?``:l}),D=[],O=-1,k=!1,A=()=>{let e=w.getRootNode().activeElement;return e instanceof HTMLElement?e:null},j=()=>{let e=A();for(let t of D){let n=!!e&&h(t)===e;t.toggleAttribute(p,n&&k)}},M=()=>D.filter(e=>e.isConnected||w.contains(e)).map(h).filter(e=>!g(e)),N=(e,t)=>{e.forEach((e,n)=>{e.setAttribute(`tabindex`,n===t?`0`:`-1`)})},P=e=>{let t=M();if(t.length===0)return;let n=(e%t.length+t.length)%t.length;O=n,N(t,n),t[n].focus(),j()},te=()=>S.ownerDocument??document,F=null,I=null,L=null,ne=()=>{F&&=(te().removeEventListener(`focusin`,F,!0),null)},re=()=>{I&&=(w.removeEventListener(`focusin`,I),null),L&&=(w.removeEventListener(`pointerdown`,L,!0),null)},R=null,ie=()=>(R||=i({anchor:C,getAnchorRect:()=>{if(e.getConfig?.()?.width===`composer`){let t=e.getComposer?.()?.getBoundingClientRect();if(t)return w.style.width=`${t.width}px`,t}return C.getBoundingClientRect()},content:w,placement:`top-start`,getPlacement:()=>e.getConfig?.()?.placement===`below`?`bottom-start`:`top-start`,viewportPadding:8,offset:6,onDismiss:()=>{B()}}),R),z=()=>R?.isOpen===!0,B=()=>{b=!0,v=!1,C.setAttribute(`aria-expanded`,`false`),ne(),re(),O=-1,k=!1;for(let e of D)e.removeAttribute(p);try{e.onClose?.()}finally{b=!1}T()},V=(e=!1)=>{(z()||v)&&(R?.close(),B(),e&&!_&&C.focus())},H=()=>{s(C,w,f),w.setAttribute(`data-persona-menu-description-layout`,e.getConfig?.()?.descriptionLayout??`stacked`);let t=e.getConfig?.()?.width;w.style.width=t===`composer`?`${e.getComposer?.()?.getBoundingClientRect().width??0}px`:t&&t!==`content`?t:``,T(),R?.reposition()};T();let U=(t=0,n=!1)=>{if(_||y||b||z())return;u(C),E.hide(),v=!0,y=!0;let r;try{r=e.beforeOpen?.()}finally{y=!1}if(r===!1||!v||_)v&&V();else{if(k=n,H(),ie().open(),v=!1,C.setAttribute(`aria-expanded`,`true`),T(),x){let e=M();N(e,-1),P(t<0?e.length-1:t),e.length||w.focus()}else(Array.from(w.querySelectorAll(d)).find(e=>!g(e)&&!e.closest(`[hidden]`))??w).focus();z()&&!_&&(F=e=>{let t=typeof e.composedPath==`function`?e.composedPath():[];t.includes(w)||t.includes(S)||V()},te().addEventListener(`focusin`,F,!0),I=()=>j(),w.addEventListener(`focusin`,I),L=()=>{k=!1},w.addEventListener(`pointerdown`,L,!0))}},W=e=>{e.preventDefault(),e.stopPropagation(),z()?V(!0):U(0)},G=e=>{e.key===`ArrowDown`||e.key===`Enter`||e.key===` `?(e.preventDefault(),k=!0,z()?x?P(0):w.focus():U(0,!0)):e.key===`ArrowUp`&&(e.preventDefault(),k=!0,z()?x?P(-1):w.focus():U(-1,!0))},K=e=>{if(!x)e.key===`Escape`&&!e.defaultPrevented&&(e.preventDefault(),e.stopPropagation(),V(!0));else switch(m.has(e.key)&&(k=!0),e.key){case`ArrowDown`:e.preventDefault(),P(O+1);return;case`ArrowUp`:e.preventDefault(),P(O-1);return;case`Home`:e.preventDefault(),P(0);return;case`End`:e.preventDefault(),P(M().length-1);return;case`Escape`:e.preventDefault(),e.stopPropagation(),V(!0);return;case`Tab`:V(!0);return}};return C.addEventListener(`click`,W),C.addEventListener(`keydown`,G),w.addEventListener(`keydown`,K),{trigger:S,triggerButton:C,panel:w,setItems:e=>{for(let t of D)e.includes(t)||t.removeAttribute(p);if(D=[...e],!z()||!x)return;let t=M();N(t,Math.min(O,t.length-1)),j()},isOpen:z,open:()=>U(0),close:V,setLabel:e=>{e!==l&&(l=e,ee(),E.isOpen&&(E.hide(),E.show()))},applyButtonSize:T,refresh:H,setContentMode:(e,t)=>{let n=t&&!x&&z();x=t,w.setAttribute(`role`,e),C.setAttribute(`aria-haspopup`,e),n&&P(0)},destroy:()=>{_=!0,V(),E.destroy(),ne(),re(),C.removeEventListener(`click`,W),C.removeEventListener(`keydown`,G),w.removeEventListener(`keydown`,K),R?.destroy(),R=null,S.remove(),w.remove(),D=[]}}}function v(e,t,n,r){return e<=0?r:e>=t+n*2+120+(r?0:16)}const y=e=>Number.parseFloat(e)||0;function b(e,t){let n=t.getComputedStyle(e);if(n.display===`none`)return 0;let r=Array.from(e.children).filter(e=>{if(!(e instanceof t.HTMLElement))return!1;let n=t.getComputedStyle(e);return n.display!==`none`&&![`absolute`,`fixed`].includes(n.position)});return r.reduce((e,n)=>{let r=t.getComputedStyle(n);return e+(r.display===`contents`?b(n,t):Math.max(n.getBoundingClientRect().width,n.scrollWidth))+y(r.marginLeft)+y(r.marginRight)},0)+Math.max(0,r.length-1)*y(n.columnGap)+y(n.paddingLeft)+y(n.paddingRight)}function x(e){let t=null,n=null,r=null,i=null,a=0,o=!0,s=!1,c=!1,l=()=>{i!==null&&t?.form.ownerDocument.defaultView?.cancelAnimationFrame(i),i=null,n?.disconnect(),r?.disconnect(),n=null,r=null,t?.form.ownerDocument.defaultView?.removeEventListener(`resize`,u)},u=()=>{if(c||i!==null)return;let n=t?.form.ownerDocument.defaultView;n&&(i=n.requestAnimationFrame(()=>{i=null,c||e.onMeasure()}))};return{measure:()=>{if(c)return o;let i=e.getSurface();if(i?.form!==t?.form||i?.input!==t?.input||i?.start!==t?.start||i?.end!==t?.end){l(),t=i,o=!0,s=!1,a=0;let e=t?.form.ownerDocument.defaultView;if(t&&e){if(e.addEventListener(`resize`,u),e.ResizeObserver!==void 0){n=new e.ResizeObserver(u);let r=[t.form,t.start,t.end,t.input];for(let e of r)n.observe(e)}e.MutationObserver!==void 0&&(r=new e.MutationObserver(e=>{e.some(e=>e.target!==t?.input||e.type!==`attributes`)&&u()}),r.observe(t.form,{subtree:!0,childList:!0,characterData:!0,attributes:!0,attributeFilter:[`class`,`style`,`hidden`]}))}}t&&i&&(t.resizeInput=i.resizeInput);let d=t?.form.ownerDocument.defaultView;if(!t||!d)return!0;if(!t.form.clientWidth)return o;let f=d.getComputedStyle(t.form),p=Math.max(1,t.form.clientWidth-y(f.paddingLeft)-y(f.paddingRight)),m=b(t.start,d)+b(t.end,d),h=y(f.columnGap);s=m+h+(s?16:0)>p,o=v(p,m,h,o);let g=t.input.getBoundingClientRect().width;if(t.resizeInput!==!1&&g>0&&g!==a&&t.input.tagName===`TEXTAREA`){a=g,t.input.style.height=`auto`;let e=y(d.getComputedStyle(t.input).maxHeight)||1/0,n=Math.min(t.input.scrollHeight,e);t.input.style.height=`${n}px`}return o},toolbarCrowded:()=>s,refresh:u,destroy:()=>{c=!0,l(),t=null}}}function S(e){if(e.available<=0)return new Set(e.previous);let t=t=>{let n={start:{...e.slots.start},end:{...e.slots.end}};for(let r of e.actions){if(t.has(r.id))continue;let e=n[r.placement];e.width+=r.width,e.count+=1}return(e.hasMenu||t.size)&&(n.start.width+=e.triggerWidth,n.start.count+=1),n.start.width+n.end.width+Math.max(0,n.start.count-1)*e.gaps.start+Math.max(0,n.end.count-1)*e.gaps.end+(n.start.count&&n.end.count?e.clusterGap:0)},n=/* @__PURE__ */ new Set,r=t(n),i=e.available-(e.previous.size?16:0),a=e.actions.filter(e=>e.auto).sort((e,t)=>t.order-e.order||t.sequence-e.sequence);for(let e of a){if(t(n)<=i)break;n.add(e.id)}return!e.hasMenu&&t(n)>=r?/* @__PURE__ */ new Set:n}function C(e){let t=e.ownerDocument.defaultView;if(!t)return 0;let n=t.getComputedStyle(e);if(n.display===`none`||[`absolute`,`fixed`].includes(n.position))return 0;let r=e=>Number.parseFloat(e)||0;return(n.display===`contents`?Array.from(e.children).reduce((e,n)=>e+(n instanceof t.HTMLElement?C(n):0),0):Math.max(e.getBoundingClientRect().width,e.scrollWidth))+r(n.marginLeft)+r(n.marginRight)}const w={mention:100,attachment:200,mic:800,overflow:900,send:1e3,custom:500},T=`data-persona-composer-action`,ee=`data-persona-composer-disable-when-streaming`,E=`core:overflow`,D=e=>e===`core:attachment`?`attachments`:e.startsWith(`core:mention`)?`mentions`:null;function O(e,t){if(e===void 0)return null;if(typeof e==`number`)return Number.isFinite(e)?e:null;let r=Number.parseFloat(e);if(/^\s*-?\d*\.?\d+(px)?\s*$/.test(e)&&Number.isFinite(r))return r;let i=n(`div`);i.style.position=`absolute`,i.style.visibility=`hidden`,i.style.pointerEvents=`none`,i.style.height=`0`,i.style.width=e,t.appendChild(i);let a=i.getBoundingClientRect().width;return i.remove(),Number.isFinite(a)&&a>0?a:Number.isFinite(r)?r:null}function k(e){let t=e.clientWidth;if(!t)return 0;let n=e.ownerDocument?.defaultView;if(!n?.getComputedStyle)return t;let r=n.getComputedStyle(e),i=(Number.parseFloat(r.paddingLeft)||0)+(Number.parseFloat(r.paddingRight)||0);return Math.max(0,t-i)}const A=(e,t)=>{e&&typeof console<`u`&&console.warn(t)},j=(e,t)=>t.includes(`:`)?t:`${e}:${t}`;function M(e){let{debug:t}=e,n=[],r=/* @__PURE__ */ new Map,i=0,a=e=>{let i=r.get(e.id);i?A(t,`[Persona] composer action "${e.id}" is already contributed by ${N(i)}; the ${N(e)} copy is ignored.`):(r.set(e.id,e),n.push(e))};for(let t of e.builtIns)a({id:t.id,placement:t.placement,presentation:`bar`,order:t.order,sequence:i++,source:`core`,builtIn:t});let o=(e,n,r)=>{let o=r?j(r,e.id):e.id,s=e.order??w.custom;e.placement===`end`&&s>=w.send&&(A(t,`[Persona] composer action "${o}" ordered at ${s} would render after send; clamped to ${w.send-1}.`),s=w.send-1),a({id:o,placement:e.placement,presentation:e.presentation??`bar`,order:s,sequence:i++,source:n,pluginId:r,action:e})};for(let t of e.configActions??[])o(t,`config`);for(let t of e.plugins){if(!t.contributeComposerActions)continue;let n;try{n=t.contributeComposerActions(e.contributionContext)}catch(e){typeof console<`u`&&console.error(`[Persona] plugin "${t.id}" contributeComposerActions failed:`,e);continue}for(let e of n??[])o(e,`plugin`,t.id)}return n.sort((e,t)=>e.order===t.order?e.sequence-t.sequence:e.order-t.order)}const N=e=>e.source===`plugin`?`plugin "${e.pluginId}"`:e.source===`config`?`composer.actions`:`a core built-in`,P=(e,t,n)=>e===void 0?n:typeof e==`function`?e(t)===!0:e===!0,te=e=>e.phase===`streaming`||e.text.trim().length>0||e.attachments.length>0;function F(e,t){if(!e||e===`always`)return!0;let n=te(t);return e===`when-text`?n:!n}const I=e=>e.kind===`custom`,L=e=>e instanceof HTMLButtonElement?e:e.querySelector(`button`)??e,ne=e=>{let t=L(e);return t.getAttribute(`aria-label`)?.trim()||t.getAttribute(`title`)?.trim()||``};function re(e){let t=``,n=e=>{if(e.nodeType===Node.TEXT_NODE){t+=e.nodeValue??``;return}if(e.nodeType!==Node.ELEMENT_NODE)return;let r=e;typeof r.matches==`function`&&r.matches(`.persona-control-tooltip, [role="tooltip"], .persona-sr-only, [hidden], [aria-hidden="true"]`)||e.childNodes.forEach(n)};return n(e),t.trim()}const R=e=>re(e).length===0,ie=e=>!e||typeof e!=`object`?e:Object.freeze(Array.isArray(e)?e.map(ie):Object.fromEntries(Object.entries(e).map(([e,t])=>[e,ie(t)])));function z(r){let{renderLucideIcon:i,attachTooltip:s,hideTooltipFor:l}=r.deps,d=/* @__PURE__ */ new Map,f=[],p=!1,m=null,g=[],v=[],y=n(`div`,`persona-composer-overflow-menu__content`),b=()=>r.getButtonSize?.(),x=(e,a)=>{let o=e.button;if(!o)return;o.setAttribute(`role`,`menuitem`),o.setAttribute(`tabindex`,`-1`),o.className=`persona-composer-overflow-menu__item`;for(let e of[`width`,`height`,`minWidth`,`minHeight`,`fontSize`,`color`,`backgroundColor`])o.style[e]=``;o.style.lineHeight=``,a.showTooltip!==!1&&a.tooltipText?o.setAttribute(`title`,a.tooltipText):o.removeAttribute(`title`),o.replaceChildren();let s=n(`span`,`persona-composer-overflow-menu__icon`);if(a.iconName){let e=i(a.iconName,16,`currentColor`,1.5);e&&s.appendChild(e)}let c=n(`span`,`persona-composer-overflow-menu__label`),l=r.getOverflow?.()?.menu?.items?.[e.resolved.id];c.textContent=l?.label??a.shortLabel??a.label;let u=n(`span`,`persona-composer-overflow-menu__text`);u.appendChild(c);let d=l?.description??a.description;o.setAttribute(`aria-label`,l?.label??a.label),d?o.setAttribute(`aria-description`,d):o.removeAttribute(`aria-description`),d&&u.appendChild(t(`span`,{className:`persona-composer-overflow-menu__description`,text:d})),o.append(s,u)},A=(t,r)=>{let a=t.button;if(!a)return;if(a.setAttribute(`aria-label`,r.label),r.pressed===void 0?a.removeAttribute(`aria-pressed`):a.setAttribute(`aria-pressed`,r.pressed?`true`:`false`),a.toggleAttribute(ee,r.disableWhenStreaming===!0),t.mode===`menu`){t.tooltip?.destroy(),t.tooltip=void 0,x(t,r);return}a.removeAttribute(`role`),a.removeAttribute(`tabindex`),a.removeAttribute(`aria-description`),a.removeAttribute(`title`);let l=b(),u=!!r.shortLabel||!r.iconName;if(a.className=e(`persona-rounded-button persona-flex persona-items-center persona-justify-center disabled:persona-opacity-50 persona-cursor-pointer persona-composer-action-button`,c,o,u&&`persona-composer-action-button--text persona-gap-1 persona-text-sm`),a.style.width=l&&!u?l:``,a.style.height=l??``,a.style.minWidth=l&&!u?l:``,a.style.minHeight=l??``,a.style.fontSize=u?``:`18px`,a.style.lineHeight=`1`,a.style.color=r.iconColor??``,a.style.backgroundColor=r.backgroundColor??``,a.replaceChildren(),r.iconName){let e=i(r.iconName,24,`currentColor`,1.5);e&&(r.iconName===`voice-bars`&&r.iconAnimation===`voice`&&e.classList.add(`persona-voice-bars--animated`),a.appendChild(e))}if(u){let e=n(`span`,`persona-composer-action-button__label`);e.textContent=r.shortLabel??r.label,a.appendChild(e)}if(r.trailingIconName&&u){let e=i(r.trailingIconName,24,`currentColor`,1.5);e&&a.appendChild(e)}a.firstChild||(a.textContent=r.label),t.tooltip?.destroy(),t.tooltip=s({anchor:a,trigger:t.element,text:()=>r.tooltipText??r.label,enabled:r.showTooltip??(!u||!!r.tooltipText)})},j=(e,t)=>{if(p||d.get(e.resolved.id)!==e||e.busy)return!1;let n=e.resolved.action,i=r.getState();if(!e.visible||n&&(!P(n.visible,i,!0)||!F(n.visibility,i)||P(n.disabled,i,!1)||n.disableWhenStreaming===!0&&i.phase===`streaming`))return!1;let a=L(e.element);if(a.disabled||a.getAttribute(`aria-disabled`)===`true`)return!1;if((e.mode===`menu`||H?.isOpen())&&(m=e.resolved.id,H?.close(!0)),!n||I(n))return a.click(),!0;let o;try{o=n.onSelect(r.actionContext,t)}catch(t){return r.reportError(t,{actionId:e.resolved.id}),!0}return o&&typeof o.then==`function`&&(e.busy=!0,e.button?.setAttribute(`aria-busy`,`true`),o.catch(t=>r.reportError(t,{actionId:e.resolved.id})).finally(()=>{e.busy=!1,e.button?.removeAttribute(`aria-busy`),!p&&d.get(e.resolved.id)===e&&ke()})),!0},N=(e,r)=>{let i=e.action,a=t(`button`,{attrs:{type:`button`}}),o=a;if(r===`bar`){let e=n(`div`,`persona-send-button-wrapper`);e.appendChild(a),o=e}o.setAttribute(T,e.id);let s={resolved:e,element:o,button:a,owned:!0,managed:!0,busy:!1,visible:!0,mode:r},c=e=>{e.preventDefault(),e.stopPropagation(),j(s,e)};return a.addEventListener(`click`,c),s.detach=()=>a.removeEventListener(`click`,c),A(s,i),s},te=e=>{let t=e.action,n;try{n=t.render({...r.actionContext,id:e.id,action:t})}catch(t){return r.reportError(t,{actionId:e.id}),null}return n?.element?(n.element.setAttribute(T,e.id),n.element.toggleAttribute(ee,t.disableWhenStreaming===!0),{resolved:e,element:n.element,owned:!0,managed:!0,destroy:n.destroy,busy:!1,visible:!0,mode:`bar`}):null},re=(e,t)=>{if(e.builtIn){let t=e.builtIn.element;return t?{resolved:e,element:t,owned:!1,managed:e.builtIn.managed===!0,busy:!1,visible:!0,mode:`bar`}:null}let n=e.action;return n?I(n)?te(e):N(e,t):null},z=e=>{if(e.detach?.(),e.tooltip?.destroy(),e.detachMenuSlot?.(),e.detachMenuSlot=void 0,e.menuLabel?.remove(),e.menuLabel=void 0,e.menuSlot?.remove(),e.menuSlot=void 0,e.owned){try{e.destroy?.()}catch(t){r.reportError(t,{actionId:e.resolved.id})}e.element.remove()}},B=(e,t)=>{let n=null;for(let r=t.length-1;r>=0;r--){let i=t[r];i.managed?(n?(i.element.parentElement!==e||i.element.nextSibling!==n)&&e.insertBefore(i.element,n):e.lastChild!==i.element&&e.appendChild(i.element),n=i.element):i.element.parentElement===e&&(n=i.element)}},V=(e,t)=>{if(e.button){e.button.disabled=t;return}if(!e.owned)return;let n=e.element;n.toggleAttribute(`data-disabled`,t),n.setAttribute(`aria-disabled`,t?`true`:`false`);let r=n instanceof HTMLButtonElement||n instanceof HTMLSelectElement||n instanceof HTMLInputElement||n instanceof HTMLTextAreaElement?n:n.querySelector(`button, select, input, textarea`);r&&(r.disabled=t)},H=null,U=null,W=null,G=0,K=null,q=null,J=null,ae=0,Y=/* @__PURE__ */ new Set,X=/* @__PURE__ */ new Map,oe=()=>{ae+=1,Z()},Z=()=>{if(p||q!==null||!U)return;let e=U.ownerDocument.defaultView;e&&(q=e.requestAnimationFrame(()=>{q=null,ke()}))},se=()=>{q!==null&&U?.ownerDocument.defaultView?.cancelAnimationFrame(q),q=null,K?.disconnect(),K=null,U?.ownerDocument.defaultView?.removeEventListener(`resize`,Z),U?.ownerDocument.fonts?.removeEventListener(`loadingdone`,oe),J=null},ce=()=>{let e=r.getOverflow?.();return e?.enabled===!0?e:void 0},Q=null,le=null,ue=null,de,$=!0,fe=!1,pe=!1,me=e=>r.reportError(e,{actionId:E}),he=e=>{try{e?.destroy?.()}catch(e){me(e)}},ge=()=>{let e=Q,t=le;Q=null,le=null,ue=null,de=void 0,fe=!1,e?.abort(),he(t),H?.panel.replaceChildren(y),H?.setContentMode(`menu`,!0),$=!0},_e=e=>{let t=e.resolved.action,n=ce()?.menu?.items?.[e.resolved.id],i=L(e.element),a=r.getState();return Object.freeze({id:e.resolved.id,kind:t?I(t)?`custom`:`button`:`builtin`,label:n?.label??(t?(I(t)?void 0:t.shortLabel)??t.label:ne(e.element)),description:n?.description??t?.description,group:n?.group??t?.group,iconName:t&&!I(t)?t.iconName:void 0,disabled:!!(i.disabled||i.getAttribute(`aria-disabled`)===`true`||t&&(P(t.disabled,a,!1)||t.disableWhenStreaming===!0&&a.phase===`streaming`)),busy:e.busy,pressed:t&&!I(t)?t.pressed:void 0})},ve=e=>{let t=()=>!p&&Q===e&&!e.signal.aborted;return Object.freeze({config:ie(ce()?.menu??{}),state:ie(r.getState()),items:Object.freeze(v.map(_e)),signal:e.signal,actions:Object.freeze({invoke:e=>{if(!t()||!H?.isOpen())return!1;let n=d.get(e);return!n||n.mode!==`menu`||!v.includes(n)?!1:j(n,new Event(`click`,{bubbles:!0,cancelable:!0}))},openAttachmentPicker:()=>{if(!t()||!H?.isOpen())return;let e=d.get(`core:attachment`);e&&j(e,new Event(`click`,{bubbles:!0,cancelable:!0}))},close:()=>{t()&&H?.close(!0)},requestUpdate:()=>{t()&&!fe&&(fe=!0,Promise.resolve().then(()=>{t()&&(fe=!1,Ae())}))}}),defaultRenderer:()=>({element:y,role:`menu`})})},ye=()=>{let e=new AbortController;Q=e;let t=ve(e);for(let n of g){if(e.signal.aborted||Q!==e||p)return!1;if(!n.renderComposerMenu)continue;let r;try{r=n.renderComposerMenu(t)}catch(e){me(e);continue}if(!r)continue;let i=r instanceof HTMLElement?{element:r}:r;if(e.signal.aborted||Q!==e||p)return he(i),!1;if(!(i.element instanceof HTMLElement))he(i);else return le=i,ue=n,de=n.renderComposerMenu,$=i.element===y,H?.panel.replaceChildren(i.element),H?.setContentMode(i.role??($?`menu`:`dialog`),$),!0}return e.signal.aborted||p?!1:($=!0,H?.panel.replaceChildren(y),H?.setContentMode(`menu`,!0),!0)},be=()=>{if(!Q||Q.signal.aborted||!H?.isOpen())return;if(ue&&!g.some(e=>e.id===ue?.id&&e.renderComposerMenu===de)){H.close();return}if(pe)return;let e=Q,t=le;pe=!0;try{t?.update?.(ve(e))}catch(n){if(me(n),Q===e){if(Q=null,le=null,e.abort(),he(t),p||!H?.isOpen()||Q)return;Q=new AbortController,ue=null,de=void 0,$=!0,H.panel.replaceChildren(y),H.setContentMode(`menu`,!0)}}finally{pe=!1}H?.refresh()},xe=()=>(H?H.setLabel(r.getOverflowLabel?.()??`More actions`):H=_({deps:r.deps,label:r.getOverflowLabel?.()??`More actions`,getButtonSize:b,getConfig:()=>ce()?.menu,getComposer:()=>r.getBindings()?.form,beforeOpen:ye,onClose:ge}),H),Se=(e,t)=>{let n=e.footer;if(!(U===n&&(t?J===e.form:J===null))){if(se(),W?.disconnect(),U=n,G=k(n),t){J=e.form;let t=n.ownerDocument.defaultView;t?.addEventListener(`resize`,Z),n.ownerDocument.fonts?.addEventListener(`loadingdone`,oe),t?.MutationObserver&&(K=new t.MutationObserver(n=>{n.some(n=>{if(H?.trigger.contains(n.target)||n.target===e.input&&n.type===`attributes`)return!1;let r=[...Array.from(n.addedNodes),...Array.from(n.removedNodes)];return!(r.length&&r.every(e=>e instanceof t.HTMLElement&&e.hasAttribute(`data-persona-composer-measure`)))})&&Z()}),K.observe(n,{subtree:!0,childList:!0,characterData:!0,attributes:!0,attributeFilter:[`class`,`style`,`hidden`,`data-persona-composer-layout`,`data-persona-composer-compact`]}))}typeof ResizeObserver<`u`&&(W=new ResizeObserver(e=>{if(t){Z();return}let r=e[e.length-1]?.contentRect?.width??k(n);r!==G&&(G=r,ke())}),W.observe(n),t&&(W.observe(e.form),W.observe(e.actionsStart),W.observe(e.actionsEnd)))}},Ce=(e,t)=>{let n=O(e.collapseAutoActionsBelow,t);if(n===null)return!1;let r=G||k(t);return r>0&&r<n},we=(e,t,n)=>{if(!t)return`bar`;if(e.resolved.builtIn){let n=D(e.resolved.id);return n&&t.includeBuiltIns?.includes(n)?`menu`:`bar`}let r=e.resolved.presentation;return r===`overflow`||r===`auto`&&n?`menu`:`bar`},Te=e=>{let r=e.menuSlot;if(!r)return;let i=ce()?.menu?.items?.[e.resolved.id],a=i?.description??e.resolved.action?.description;if(!i?.label&&!a&&!R(e.element)){e.menuLabel?.remove(),e.menuLabel=void 0;return}let o=i?.label??ne(e.element);o?(e.menuLabel||=n(`span`,`persona-composer-overflow-menu__label`),e.menuLabel.replaceChildren(t(`span`,{text:o})),a&&e.menuLabel.appendChild(t(`span`,{className:`persona-composer-overflow-menu__description`,text:a})),e.menuLabel.parentElement!==r&&r.appendChild(e.menuLabel)):(e.menuLabel?.remove(),e.menuLabel=void 0)},Ee=(e,r)=>{if(e.mode===r)return e;let i=e.resolved.action;if(i&&!I(i)){let t=e.element;return r===`menu`?e.element=e.button:(e.element=n(`div`,`persona-send-button-wrapper`),e.element.appendChild(e.button),e.button.removeAttribute(T)),t!==e.element&&t!==e.button&&t.remove(),e.element.setAttribute(T,e.resolved.id),e.mode=r,A(e,i),e}if(r===`menu`){let n=t(`div`,{className:`persona-composer-overflow-menu__slot`,attrs:{role:`none`,[a]:``}});n.appendChild(e.element),l(L(e.element)),e.menuSlot=n;let r=t=>{let n=L(e.element);if(n.disabled)return;let r=t.target===n||n.contains(t.target);m=e.resolved.id,H?.close(!0),r||n.click()};n.addEventListener(`click`,r,!0),e.detachMenuSlot=()=>n.removeEventListener(`click`,r,!0),e.managed=!0,Te(e)}else e.detachMenuSlot?.(),e.detachMenuSlot=void 0,e.menuLabel?.remove(),e.menuLabel=void 0,e.menuSlot?.remove(),e.menuSlot=void 0;return e.mode=r,e},De=(e,n)=>{let r=Array.from(e.querySelectorAll(`.persona-composer-overflow-menu__divider`)),i=0,a=[];for(n.forEach((e,o)=>{let s=_e(e).group;o&&s!==_e(n[o-1]).group&&a.push(r[i++]??t(`div`,{className:`persona-composer-overflow-menu__divider`,attrs:{role:`separator`}})),a.push(e.menuSlot??e.element)}),a.forEach((t,n)=>{let r=e.children[n];r!==t&&(r?e.insertBefore(t,r):e.appendChild(t))});e.children.length>a.length;)e.lastElementChild?.remove()},Oe=(e,t,n)=>{let r=k(e.form);if(!r)return Y;let i=e.form.ownerDocument.defaultView,a=i.getComputedStyle(e.form),o=e=>Number.parseFloat(e)||0,s=o(a.columnGap),c=e.footer.getAttribute(`data-persona-composer-layout`)===`single-row`&&e.footer.hasAttribute(`data-persona-composer-compact`),l=[a.fontFamily,a.fontSize,a.getPropertyValue(`--persona-composer-font-size`),a.getPropertyValue(`--persona-composer-control-size`),a.getPropertyValue(`--persona-composer-control-icon-size`),b(),ae].join(`|`),u={start:e.actionsStart,end:e.actionsEnd},d={start:{width:0,count:0},end:{width:0,count:0}},f={start:0,end:0};for(let e of[`start`,`end`]){f[e]=o(i.getComputedStyle(u[e]).columnGap);for(let n of Array.from(u[e].children)){if(!(n instanceof i.HTMLElement)||n===H?.trigger||t.some(e=>e.element===n))continue;let r=C(n);r&&(d[e].width+=r,d[e].count+=1)}}let p=[],m=!1;for(let e of t){if(we(e,n,!1)===`menu`){m=!0;continue}let t=e.resolved.action,r=`${l}|${t&&!I(t)?[t.label,t.shortLabel,t.iconName,t.trailingIconName,t.pressed].join(`|`):`custom`}`,a=e.mode===`bar`?C(e.element):0,o=X.get(e.resolved.id);if(!a&&o?.key===r&&(a=o.width),!a&&t&&!I(t)){let t=N(e.resolved,`bar`);t.element.setAttribute(`data-persona-composer-measure`,``),t.element.style.cssText=`position:absolute;visibility:hidden;width:max-content;pointer-events:none`,u[e.resolved.placement].appendChild(t.element),a=C(t.button),z(t)}if(!a&&t&&I(t)&&(a=o?.width??0),a&&X.set(e.resolved.id,{key:r,width:a}),!a&&i.getComputedStyle(e.element).display!==`none`)return Y;a&&p.push({id:e.resolved.id,placement:e.resolved.placement,width:a,order:e.resolved.order,sequence:e.resolved.sequence,auto:e.resolved.presentation===`auto`})}let h=o(a.getPropertyValue(`--persona-composer-control-size`))||40,g=H?C(H.trigger):0;return S({available:Math.max(1,r-(c?120+s*2:0)),actions:p,slots:d,gaps:f,clusterGap:c?0:s,triggerWidth:g||o(b()??``)||h,hasMenu:m,previous:Y})},ke=()=>{if(p)return;let e=r.getBindings();if(e&&u(e.form),!e)return;let t=r.getState(),n=t.phase===`streaming`,i=ce(),a=i?.collapseAutoActions===`fit`;i?Se(e,a):(se(),W?.disconnect(),U=null);let o=i&&!a?Ce(i,e.footer):!1,s=e.footer.getRootNode(),c=s.activeElement,l=c===H?.triggerButton,g=c?Array.from(d.values()).find(e=>e.element.contains(c)):void 0,_=g?.mode;if(a){let n=f.map(e=>d.get(e.id)).filter(e=>!!e).filter(e=>!e.resolved.action||P(e.resolved.action.visible,t,!0)&&F(e.resolved.action.visibility,t));for(let t of n){if(!t.managed||t.mode!==`bar`)continue;let n=t.resolved.placement===`start`?e.actionsStart:e.actionsEnd;t.element.parentElement!==n&&n.appendChild(t.element)}Y=Oe(e,n,i)}else Y.clear();let b={start:[],end:[]},S=[];for(let e of f){let r=d.get(e.id);if(!r)continue;let s=e.action,c=!s||P(s.visible,t,!0)&&F(s.visibility,t);if(r.visible!==c&&(r.visible=c,!c&&r.managed&&(r.menuSlot??r.element).remove()),!c)continue;let l=we(r,i,o);if(r=Ee(r,l===`menu`||a&&e.presentation===`auto`&&Y.has(e.id)?`menu`:`bar`),s){let e=P(s.disabled,t,!1)||s.disableWhenStreaming===!0&&n;V(r,e),!I(s)&&s.pressed!==void 0&&r.button?.setAttribute(`aria-pressed`,s.pressed?`true`:`false`)}r.mode===`menu`?(Te(r),S.push(r)):b[e.placement].push(r)}if(v=S,S.length>0){let e=xe();Q||e.panel.replaceChildren(y),De(y,S);for(let e of S){let t=e.resolved.action;t&&!I(t)&&x(e,t)}e.setItems(S.map(e=>e.menuSlot??e.element)),e.refresh(),be();let t=Number.isFinite(i?.order)?i?.order:w.overflow,n=b.start.findIndex(e=>e.resolved.order>t),r={resolved:{id:E,placement:`start`,presentation:`bar`,order:t,sequence:-1,source:`core`},element:e.trigger,owned:!1,managed:!0,busy:!1,visible:!0,mode:`bar`};b.start.splice(n<0?b.start.length:n,0,r)}else H&&(H.close(),H.trigger.remove(),H.setItems([]));if(B(e.actionsStart,b.start),B(e.actionsEnd,b.end),g&&c&&g.visible&&(!c.isConnected||g.mode!==_||s.activeElement!==c))g.mode===`bar`?(H?.close(),h(g.element).focus()):H?.isOpen()&&$?h(g.menuSlot??g.element).focus():H?.triggerButton.focus();else if(l&&!S.length){let t=m?d.get(m):void 0;t?.visible&&t.mode===`bar`?h(t.element).focus():e.input.focus()}m=null},Ae=()=>{if(p)return;let e=r.collect();g=e.plugins;let t=M(e),n=new Set(t.map(e=>e.id));for(let[e,t]of d)n.has(e)||(z(t),d.delete(e),X.delete(e));for(let e of t){let t=d.get(e.id);if(!t){let t=re(e,`bar`);t&&d.set(e.id,t);continue}let n=t.resolved.action,r=e.action;if(!!n!=!!r||n&&r&&I(n)!==I(r)||n&&r&&I(n)&&I(r)&&n.render!==r.render){z(t),d.delete(e.id),X.delete(e.id);let n=re(e,t.mode);n&&d.set(e.id,n)}else t.resolved=e,e.builtIn?(t.managed=e.builtIn.managed===!0||t.mode===`menu`,e.builtIn.element&&t.mode===`bar`&&(t.element=e.builtIn.element)):r&&!I(r)?A(t,r):r&&t.element.toggleAttribute(ee,r.disableWhenStreaming===!0)}f=t,ke()};return{resolve:Ae,sync:ke,getResolved:()=>f,getOverflowMenu:()=>H,destroy:()=>{if(!p){p=!0,se(),W?.disconnect(),W=null,U=null,H?.close(),ge();for(let e of d.values())z(e);d.clear(),H?.destroy(),H=null,f=[]}}}}const B=e=>`core:mode:${e}`,V=e=>Math.min(300+e,499),H=e=>`core:mode-group:${e}`;function U(e,t){return e?t?.find(t=>t.id===e)?.presentation===`segmented`:!1}function W(e,t){return e?t?.find(t=>t.id===e)?.chipVisibility===`hidden`:!1}function G(e,t,n=!1){return e?.length?e.filter(e=>!U(e.groupId,t)&&!W(e.groupId,t)&&(!n||e.presentation===`overflow`||t?.find(t=>t.id===e.groupId)?.chipVisibility===`auto`)):[]}const K=(e,t)=>e.groupId?t?.find(t=>t.id===e.groupId)?.selection??null:null;function q(e,t,n,r){let i=n.find(e=>e.id===t);if(!i)return[...e];let a=e.includes(t),o=new Set(e);if(a)o.delete(t);else{if(K(i,r)===`single`){let e=n.filter(e=>e.groupId===i.groupId).map(e=>e.id);o=new Set([...o].filter(t=>!e.includes(t)))}o.add(t)}return n.filter(e=>o.has(e.id)).map(e=>e.id)}function J(e,t){return t?.length?t.filter(t=>e.includes(t.id)).map(e=>e.id):[]}function ae(e,t){return t?.length?t.filter(t=>e.includes(t.id)&&(t.persistence??`sticky`)!==`once`).map(e=>e.id):[]}function Y(e,t){if(t?.length&&e.length!==0)return t.find(t=>e.includes(t.id)&&t.placeholder)?.placeholder}function X(e,t,n){let r=[];for(let i of e)r.includes(i)||(r=q(r,i,t,n));return r}export{V as a,Y as c,T as d,w as f,u as h,H as i,X as l,x as m,ae as n,U as o,z as p,B as r,J as s,G as t,q as u};
@@ -1 +0,0 @@
1
- import{r as e,t}from"./chunk-D5BxWOFB.js";import{a as n,h as r,i,o as a,p as o,r as s}from"./chunk-BEDTp-dm.js";import{r as c,t as l}from"./chunk-CNhThrLX.js";import{r as u}from"./chunk-BAkaTZpd.js";import{r as d}from"./chunk-Crczk7D3.js";const f=[`--persona-components-composer-modelPicker-menuBackground`,`--persona-components-composer-modelPicker-menuBorderRadius`,`--persona-components-composer-modelPicker-rowHoverBackground`,`--persona-components-composer-modelPicker-labelColor`,`--persona-components-composer-modelPicker-descriptionColor`],p=()=>({wrapper:e(`span`,{className:`persona-composer-model-picker-wrapper`,attrs:{"data-persona-composer-model-picker-wrapper":``}}),chevron:e(`span`,{className:`persona-composer-model-picker-chevron`,attrs:{"aria-hidden":`true`}})});function m(n){let r=n.label??`Model`,i=n.presentation??`native`,a=null,o=e=>{let t=n.getSelectedModelId();return e.find(e=>e.id===t)??e[0]},s=()=>{let t=e(`select`,{className:`persona-composer-model-picker`,attrs:{"aria-label":r,"data-persona-composer-model-picker":``}}),i=``,s=()=>{let r=n.getModels(),a=r.map(e=>`${e.id}:${e.label}`).join(`|`);a!==i&&(i=a,t.replaceChildren(...r.map(t=>{let n=e(`option`,{attrs:{value:t.id}});return n.textContent=t.label,n}))),t.value=o(r)?.id??``};s(),a=s;let c=()=>{t.value&&n.onSelect(t.value)};t.addEventListener(`change`,c);let l=e=>e.stopPropagation();t.addEventListener(`click`,l);let{wrapper:u,chevron:d}=p();return u.append(t,d),{element:u,destroy:()=>{a===s&&(a=null),t.removeEventListener(`change`,c),t.removeEventListener(`click`,l)}}},c=()=>{let i=e(`button`,{className:`persona-composer-model-picker persona-composer-model-picker-trigger`,attrs:{type:`button`,"aria-haspopup":`listbox`,"aria-expanded":`false`,"data-persona-composer-model-picker":`popover`}}),s=t(`span`,`persona-composer-model-picker-label`),c=t(`span`,`persona-composer-model-picker-suffix`);i.append(s,c);let d=e(`div`,{className:`persona-composer-model-menu`,attrs:{role:`listbox`,tabindex:`-1`,"aria-label":r,"data-persona-composer-model-menu":``}}),m=/* @__PURE__ */ new Map,h=``,g=null,_=()=>g?.isOpen===!0,v=(e=!1)=>{_()&&(g?.close(),i.setAttribute(`aria-expanded`,`false`),e&&i.focus())},y=e=>{let t=[...m.values()];t.length!==0&&t[(e%t.length+t.length)%t.length].focus()},b=e=>{if(_())return;g||=l({anchor:i,content:d,placement:`top-start`,offset:6,onDismiss:()=>i.setAttribute(`aria-expanded`,`false`)}),u(i,d,f),g.open(),i.setAttribute(`aria-expanded`,`true`);let t=[...m.keys()].indexOf(o(n.getModels())?.id??``);y(e??(t>=0?t:0))},x=e=>{v(!0),n.onSelect(e)},S=e=>{e.preventDefault(),e.stopPropagation();let t=e.currentTarget.getAttribute(`data-persona-model-option`);t&&x(t)},C=r=>{let i=e(`button`,{className:`persona-composer-model-option`,attrs:{type:`button`,role:`option`,tabindex:`-1`,"aria-selected":`false`,"data-persona-model-option":r.id}});if(r.icon){let e=n.renderIcon(r.icon,16,`currentColor`,1.5);if(e){let n=t(`span`,`persona-composer-model-option-icon`);n.appendChild(e),i.appendChild(n)}}let a=t(`span`,`persona-composer-model-option-body`),o=t(`span`,`persona-composer-model-option-label`);if(o.textContent=r.label,a.appendChild(o),r.description){let e=t(`span`,`persona-composer-model-option-description`);e.textContent=r.description,a.appendChild(e)}i.appendChild(a);let s=t(`span`,`persona-composer-model-option-check`);s.setAttribute(`aria-hidden`,`true`);let c=n.renderIcon(`check`,16,`currentColor`,2);return c&&s.appendChild(c),i.appendChild(s),i.addEventListener(`click`,S),i},w=()=>{let e=n.getModels(),t=e.map(e=>`${e.id}:${e.label}:${e.icon??``}:${e.description??``}`).join(`|`);if(t!==h){h=t;for(let e of m.values())e.removeEventListener(`click`,S);m.clear(),d.replaceChildren(...e.map(e=>{let t=C(e);return m.set(e.id,t),t}))}let a=o(e);for(let[e,t]of m)t.setAttribute(`aria-selected`,String(e===a?.id));s.textContent=a?.label??``;let l=n.getSuffix?.()??``;c.textContent=l,i.setAttribute(`aria-label`,[r,[a?.label,l].filter(Boolean).join(` `)].filter(Boolean).join(`: `))};w(),a=w;let T=e=>{e.preventDefault(),e.stopPropagation(),_()?v(!0):b()},E=e=>{e.key===`ArrowDown`?(e.preventDefault(),_()?y(0):b(0)):e.key===`ArrowUp`&&(e.preventDefault(),_()?y(-1):b(-1))},D=e=>{let t=[...m.values()],n=t.indexOf(e.target?.closest?.(`.persona-composer-model-option`));switch(e.key){case`ArrowDown`:e.preventDefault(),y(n+1);return;case`ArrowUp`:e.preventDefault(),y(n-1);return;case`Home`:e.preventDefault(),y(0);return;case`End`:e.preventDefault(),y(t.length-1);return;case`Escape`:e.preventDefault(),e.stopPropagation(),v(!0);return;case`Tab`:v(!0);return}};i.addEventListener(`click`,T),i.addEventListener(`keydown`,E),d.addEventListener(`keydown`,D);let{wrapper:O,chevron:k}=p();return O.append(i,k),{element:O,destroy:()=>{a===w&&(a=null),i.removeEventListener(`click`,T),i.removeEventListener(`keydown`,E),d.removeEventListener(`keydown`,D);for(let e of m.values())e.removeEventListener(`click`,S);m.clear(),g?.destroy(),g=null,d.remove()}}};return{action:{id:`core:model`,kind:`custom`,placement:`end`,order:700,presentation:i===`popover`?`bar`:`auto`,label:r,render:()=>i===`popover`?c():s()},repaint:()=>a?.()}}function h(n){let r=null;return{action:{id:i(n.groupId),kind:`custom`,placement:`start`,presentation:`bar`,label:n.getGroup()?.label??n.groupId,render:()=>{let i=e(`div`,{className:`persona-composer-segmented`,attrs:{"data-persona-composer-mode-group":n.groupId}}),a=/* @__PURE__ */ new Map,o=``,s=e=>{e.preventDefault(),e.stopPropagation();let t=e.currentTarget.getAttribute(`data-persona-composer-mode`);t&&(n.getActiveIds().includes(t)&&n.getGroup()?.selection===`single`||n.onSelect(t))},c=r=>{let i=e(`button`,{className:`persona-composer-segmented-item`,attrs:{type:`button`,"data-persona-composer-mode":r.id,"aria-label":r.label}});if(r.iconName){let e=n.renderIcon(r.iconName,16,`currentColor`,1.5);e&&i.appendChild(e)}let a=t(`span`,`persona-composer-segmented-label`);return a.textContent=r.shortLabel??r.label,i.appendChild(a),i.addEventListener(`click`,s),i},l=()=>{let e=n.getGroup();e?.label?(i.setAttribute(`role`,`group`),i.setAttribute(`aria-label`,e.label)):(i.removeAttribute(`role`),i.removeAttribute(`aria-label`));let t=n.getModes(),r=t.map(e=>`${e.id}:${e.shortLabel??e.label}:${e.iconName??``}`).join(`|`);if(r!==o){o=r;for(let e of a.values())e.removeEventListener(`click`,s);a.clear();let e=t.map(e=>{let t=c(e);return a.set(e.id,t),t});i.replaceChildren(...e)}let l=n.getActiveIds();for(let[e,t]of a)t.setAttribute(`aria-pressed`,String(l.includes(e)))};return l(),r=l,{element:i,destroy:()=>{r===l&&(r=null);for(let e of a.values())e.removeEventListener(`click`,s);a.clear()}}}},repaint:()=>r?.()}}function g(n){let r=n.row,i=``,a=!1,o=new Set(n.initialIds??[]),s=r=>{let i=e(`span`,{className:`persona-mention-chip persona-composer-mode-chip`,attrs:{"data-persona-composer-mode":r.id}});if(r.iconName){let e=t(`span`,`persona-mention-chip-icon`),a=n.renderIcon(r.iconName,12,`currentColor`,1.5);a&&e.appendChild(a),i.appendChild(e)}let a=t(`span`,`persona-mention-chip-label`);a.textContent=r.shortLabel??r.label,i.appendChild(a);let o=e(`button`,{className:`persona-mention-chip-remove`,attrs:{type:`button`,"aria-label":`Remove ${r.label}`}}),s=n.renderIcon(`x`,12,`currentColor`,2);return s?o.appendChild(s):o.textContent=`×`,o.addEventListener(`click`,e=>{e.preventDefault(),e.stopPropagation(),n.onRemove(r.id)}),i.appendChild(o),i},c=()=>Array.from(r.querySelectorAll(`:scope > [data-persona-composer-mode]`)),l=e=>{e.setAttribute(`data-persona-chip-exit`,``),e.setAttribute(`aria-hidden`,`true`),e.style.pointerEvents=`none`;let t=()=>{e.remove(),d(r)},n=r.ownerDocument.defaultView,i=typeof n?.getComputedStyle==`function`?n.getComputedStyle(e).animationName:``;!i||i===`none`?t():(e.addEventListener(`animationend`,t,{once:!0}),e.addEventListener(`animationcancel`,t,{once:!0}))},u=()=>{for(let e of c())e.remove()};return{element:r,render:(e,t)=>{if(a)return;let n=t.filter(t=>e.includes(t.id)),u=n.map(e=>`${e.id}:${e.shortLabel??e.label}`).join(`|`);if(u===i)return;i=u;let f=/* @__PURE__ */ new Map;for(let e of c()){let t=e.getAttribute(`data-persona-composer-mode`);t&&n.some(e=>e.id===t)&&!e.hasAttribute(`data-persona-chip-exit`)?f.set(t,e):e.hasAttribute(`data-persona-chip-exit`)||l(e)}let p=r.firstChild;for(let e of n){let t=f.get(e.id);t||(t=s(e),o.has(e.id)||(t.setAttribute(`data-persona-chip-enter`,``),t.addEventListener(`animationend`,()=>t?.removeAttribute(`data-persona-chip-enter`),{once:!0}))),o.delete(e.id),t!==p&&r.insertBefore(t,p),p=t.nextSibling}d(r)},destroy:()=>{a=!0,u(),d(r)}}}function _(e){let t=null,r=null,i=/* @__PURE__ */ new Map,o=t=>{let n=i.get(t);if(n)return n;let r=h({renderIcon:e.renderIcon,groupId:t,getGroup:()=>e.getConfig().composer?.modeGroups?.find(e=>e.id===t),getModes:()=>e.getModes().filter(e=>e.groupId===t),getActiveIds:()=>e.getState().activeModeIds,onSelect:t=>e.onModeChange(t)});return i.set(t,r),r};return{collect:()=>{let i=[],c=e.getState().activeModeIds,l=new Set(e.getChipModes().map(e=>e.id)),u=/* @__PURE__ */ new Set;if(e.getModes().forEach((t,r)=>{if(a(t.groupId,e.getConfig().composer?.modeGroups)){let a=t.groupId;if(u.has(a))return;u.add(a);let s=o(a);s.action.order=n(r),s.action.label=e.getConfig().composer?.modeGroups?.find(e=>e.id===a)?.label??a,i.push(s.action);return}let d=c.includes(t.id)&&!l.has(t.id);i.push({id:s(t.id),kind:`button`,placement:`start`,order:n(r),presentation:d?`bar`:t.presentation??`auto`,label:t.label,shortLabel:d?t.shortLabel??t.label:t.shortLabel,iconName:t.iconName,trailingIconName:t.trailingIconName,pressed:c.includes(t.id),onSelect:()=>e.onModeChange(t.id)})}),e.getConfig().composer?.models?.length&&!e.hasComposerPlugin()){let n=e.getConfig().composer?.modelPicker?.presentation??`native`;(!t||r!==n)&&(r=n,t=m({renderIcon:e.renderIcon,getModels:()=>e.getConfig().composer?.models??[],getSelectedModelId:()=>e.getState().selectedModelId,onSelect:t=>e.onModelChange(t),presentation:n,getSuffix:()=>e.getConfig().composer?.modelPicker?.suffix})),i.push(t.action)}return i},repaint:()=>{for(let[t,n]of i)a(t,e.getConfig().composer?.modeGroups)?n.repaint():i.delete(t);t?.repaint()}}}export{o as createComposerActionRenderer,_ as createComposerCoreControls,g as createComposerModeChipRow,m as createComposerModelPickerAction,h as createComposerSegmentedModeAction,l as createPopover,r as ensureComposerActionStyles,c as isEditableEventTarget};
@@ -1 +0,0 @@
1
- const e=e=>e.nodeType===Node.DOCUMENT_NODE,t=e=>e.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&e.host!==void 0;function n(n){let r=n.getRootNode?.();return r&&t(r)||r&&e(r)?r:n.ownerDocument??document}function r(t,n,r){let i=e(t)?t.head:t,a=n.replace(/["\\]/g,`\\$&`);if(i.querySelector(`style[data-persona-plugin-style="${a}"]`))return;let o=(e(t)?t:t.ownerDocument??document).createElement(`style`);o.setAttribute(`data-persona-plugin-style`,n),o.textContent=r,i.appendChild(o)}function i(i,a,o){if(e(i)||t(i)){r(i,a,o);return}let s=i;if(s.isConnected){r(n(s),a,o);return}let c=s.ownerDocument??document;r(c,a,o),queueMicrotask(()=>{let e=n(s);e!==c&&r(e,a,o)})}function a(e){let t=e.getRootNode?.();return t instanceof ShadowRoot?t:e.closest(`dialog[open]`)??(e.ownerDocument??document).body}function o(e){let{anchor:t,content:n,placement:r=`bottom-start`,offset:i=6,matchAnchorWidth:o=!1,horizontalOffset:s,verticalOffset:c,zIndex:l=2147483e3,onOpen:u,onDismiss:d}=e,f=()=>e.container??a(t),p=!1,m=null,h=()=>{if(!p)return;let a=f();if(n.parentNode!==a){let e=n.contains(n.ownerDocument.activeElement)?n.ownerDocument.activeElement:null;a.appendChild(n),e?.focus({preventScroll:!0})}let l=e.getAnchorRect?.()??t.getBoundingClientRect();n.style.position=`fixed`,o&&(n.style.minWidth=`${l.width}px`),s&&(n.style.maxWidth=`${l.width}px`);let u=n.getBoundingClientRect(),d=c?.()??null,m=d==null?l.top:l.top+d,h=e.getPlacement?.()??r,g=h===`top-start`||h===`top-end`?m-i-u.height:l.bottom+i,_=h===`bottom-end`||h===`top-end`?l.right-u.width:l.left,v=s?.()??null;if(v!=null){let e=Math.max(l.left,l.right-u.width);_=Math.min(Math.max(l.left+v,l.left),e)}if(e.viewportPadding!==void 0){let n=e.viewportPadding,r=t.ownerDocument.defaultView,a=r?.innerHeight??0,o=r?.innerWidth??0,s=m-i-n,c=a-l.bottom-i-n;g=(h.startsWith(`top`)?s>=u.height||s>=c:!(c>=u.height||c>=s))?m-i-u.height:l.bottom+i,g=Math.max(n,Math.min(g,a-n-u.height)),_=Math.max(n,Math.min(_,o-n-u.width))}n.style.top=`${g}px`,n.style.left=`${_}px`},g=()=>{p&&(p=!1,m&&=(m(),null),n.remove())},_=()=>{if(p)return;p=!0,l!=null&&(n.style.zIndex=String(l)),h();let r=(t.ownerDocument??document).defaultView??window,i=t.ownerDocument??document,a=()=>{t.isConnected?h():(g(),d?.(`anchor-removed`))},o=e=>{let r=typeof e.composedPath==`function`?e.composedPath():[];r.includes(n)||r.includes(t)||(g(),d?.(`outside`))},s=e.viewportPadding!==void 0&&r.ResizeObserver?new r.ResizeObserver(a):null;s?.observe(n),s?.observe(t);let c=r.setTimeout(()=>{i.addEventListener(`pointerdown`,o,!0)},0);r.addEventListener(`scroll`,a,!0),r.addEventListener(`resize`,a);let f=t.closest(`[data-persona-root]`);f?.addEventListener(`persona:internal:host-moved`,a),m=()=>{s?.disconnect(),r.clearTimeout(c),i.removeEventListener(`pointerdown`,o,!0),r.removeEventListener(`scroll`,a,!0),r.removeEventListener(`resize`,a),f?.removeEventListener(`persona:internal:host-moved`,a)},u?.()};return{get isOpen(){return p},open:_,close:g,toggle:()=>p?g():_(),reposition:h,destroy:g}}function s(e){return(typeof e.composedPath==`function`?e.composedPath():[]).some(e=>e instanceof HTMLElement&&(e.tagName===`INPUT`||e.tagName===`TEXTAREA`||e.isContentEditable))}export{i as n,s as r,o as t};
@@ -1 +0,0 @@
1
- function e(e){return e.role!==`assistant`||e.variant===`tool`||e.variant===`reasoning`?!1:e.variant===`approval`||!!(e.content?.trim()||e.rawContent?.trim()||e.contentParts?.length)}function t(e=!0){let t=e;return{isFollowing:()=>t,pause:()=>t?(t=!1,!0):!1,resume:()=>!t&&(t=!0,!0)}}function n(e){return Math.max(0,e.scrollHeight-e.clientHeight)}function r(e,t){return n(e)-e.scrollTop<=t}function i(e){let{following:t,currentScrollTop:n,lastScrollTop:r,nearBottom:i,userScrollThreshold:a,isAutoScrolling:o=!1,pauseOnUpwardScroll:s=!1,pauseWhenAwayFromBottom:c=!0,resumeRequiresDownwardScroll:l=!1}=e,u=n-r;return o||Math.abs(u)<a?{action:`none`,delta:u,nextLastScrollTop:n}:!t&&i&&(!l||u>0)?{action:`resume`,delta:u,nextLastScrollTop:n}:t&&s&&u<0||t&&c&&!i?{action:`pause`,delta:u,nextLastScrollTop:n}:{action:`none`,delta:u,nextLastScrollTop:n}}function a(e){let{following:t,deltaY:n,nearBottom:r=!1,resumeWhenNearBottom:i=!1}=e;return t&&n<0?`pause`:!t&&i&&n>0&&r?`resume`:`none`}function o(e,t){return!e||e.isCollapsed?!1:t.contains(e.anchorNode)||t.contains(e.focusNode)}function s(e){let t=Math.max(0,e.anchorOffsetTop-e.topOffset);return{targetScrollTop:t,spacerHeight:Math.max(0,t+e.viewportHeight-e.contentHeight+(e.slack??0))}}function c(e){let t=Math.max(0,e.currentContentHeight-e.contentHeightAtAnchor);return Math.max(0,e.initialSpacerHeight-t)}export{o as a,i as c,n as i,a as l,c as n,e as o,t as r,r as s,s as t};
@@ -1,2 +0,0 @@
1
- const e=(e,t)=>({ok:!1,reason:e,message:t}),t=e=>e.startsWith(`webmcp:`)?e.slice(7):e,n={warn(e,...t){typeof console<`u`&&typeof console.warn==`function`&&console.warn(`[Persona/WebMCP] ${e}`,...t)}};var r=class{#e;#t;#n=!1;#r=null;#i=!1;#a;constructor(e,t){this.config=e,this.#a=t,this.#e=e.onConfirm??null,this.#t=3e4}setConfirmHandler(e){this.#e=e}isOperational(){return this.config.enabled!==!0||!this.#n?!1:this.#l()!==null}async snapshotForDispatch(){if(await this.#s(),this.config.enabled!==!0)return[];let e=this.#l();if(!e)return[];let t;try{t=(await e.getTools()).filter(h)}catch(e){return n.warn(`getTools() threw: shipping an empty WebMCP snapshot.`,e),[]}this.#a.recordToolDisplayTitles(t);let r=typeof location<`u`?location.origin:``;return t.filter(e=>this.#d(e.name)).map(e=>{let t=o(e.annotations);return{name:e.name,description:e.description,parametersSchema:s(e.inputSchema),origin:`webmcp`,...r?{pageOrigin:r}:{},...t?{annotations:t}:{},...t?.untrustedContentHint===!0?{untrustedContentHint:!0}:{}}})}async executeToolCall(e,t,n,r){let i=await this.#o(e,t,n,!1,r);return i.ok?c(i.raw):u(i.message)}async executeVoiceToolCall(e,t,n={}){let r=await this.#o(e,t,n.signal,n.autoConfirmReadOnly===!0);return r.ok?f(r.raw):{status:r.reason===`aborted`?`failed`:r.reason,error:{message:r.message}}}watchToolChanges(e){let t=!1,n=null;return this.#s().then(()=>{if(t||this.config.enabled!==!0)return;let r=this.#l();r&&typeof r.addEventListener==`function`&&(n=r,n.addEventListener(`toolchange`,e))}),()=>{t=!0,n?.removeEventListener(`toolchange`,e),n=null}}async#o(n,r,i,a,s){if(await this.#s(),this.config.enabled!==!0)return e(`failed`,`WebMCP is not enabled on this widget.`);let c=this.#l();if(!c){let t=typeof document<`u`&&!!document.modelContext;return e(`failed`,t?`WebMCP is not operational: document.modelContext is present but does not expose the strict getTools()/executeTool() surface (likely a different or older WebMCP polyfill).`:`WebMCP bridge is not operational on this page (document.modelContext not available).`)}let u=t(n),d;try{d=(await c.getTools()).filter(h)}catch(t){let n=t instanceof Error?t.message:String(t);return e(`failed`,`Failed to read WebMCP registry: ${n}`)}this.#a.recordToolDisplayTitles(d);let f=d.find(e=>e.name===u);if(!f)return e(`stale`,`WebMCP tool not registered on this page: ${u}`);if(!this.#d(u))return e(`stale`,`WebMCP tool not allowed by client allowlist: ${u}`);if(i?.aborted)return e(`aborted`,`Aborted by cancel()`);let p=this.#a.getToolDisplayTitle(u),m=o(f.annotations),g={toolName:u,...s?{toolCallId:s}:{},args:r,description:f.description,...m?{annotations:m}:{},...p?{title:p}:{},...i?{signal:i}:{},reason:`gate`};if(!(a&&m?.readOnlyHint===!0)&&!await this.#u(g))return e(`denied`,`User declined the tool call.`);if(i?.aborted)return e(`aborted`,`Aborted by cancel()`);let _=new AbortController,v=!1,y=setTimeout(()=>{v=!0,_.abort()},this.#t),b=()=>_.abort();i&&(i.aborted?_.abort():i.addEventListener(`abort`,b,{once:!0}));try{return{ok:!0,raw:await c.executeTool(f,l(r),{signal:_.signal})}}catch(t){if(v)return e(`timeout`,`WebMCP tool '${u}' timed out after ${this.#t}ms`);if(i?.aborted)return e(`aborted`,`Aborted by cancel()`);let n=t instanceof Error?t.message:String(t);return e(`failed`,n)}finally{clearTimeout(y),i&&i.removeEventListener(`abort`,b)}}#s(){return this.config.enabled===!0?(this.#r||=this.#c(),this.#r):Promise.resolve()}async#c(){try{if(this.#l()){this.#n=!0;return}let e=await this.#a.loadPolyfill();`initializeWebMCPPolyfill`in e?e.initializeWebMCPPolyfill():e.installWebMCP(),this.#n=!0}catch(e){n.warn(`Failed to load @mcp-b/webmcp-polyfill: WebMCP consumption disabled.`,e),this.#n=!1}}#l(){if(typeof document>`u`)return null;let e=document.modelContext;if(!e||typeof e!=`object`)return null;let t=e;return typeof t.getTools!=`function`||typeof t.executeTool!=`function`?(this.#i||(this.#i=!0,n.warn(`document.modelContext is present but does not expose getTools()/executeTool(): WebMCP consumption is disabled. Another (incompatible or older) WebMCP polyfill likely installed document.modelContext before Persona. Remove it, or use a polyfill implementing the strict standard surface (e.g. @mcp-b/webmcp-polyfill).`)),null):e}async#u(e){let t=this.#e??p;try{return await t(e)}catch(t){return n.warn(`Confirm handler threw for WebMCP tool '${e.toolName}'; declining.`,t),!1}}#d(e){let t=this.config.allowlist;return!t||t.length===0||t.some(t=>i(e,t))}};const i=(e,t)=>{if(t===`*`)return!0;let n=t.replace(/[.+?^${}()|[\]\\]/g,`\\$&`);return RegExp(`^`+n.replace(/\*/g,`.*`)+`$`).test(e)},a={type:`object`,properties:{}},o=e=>{if(!e||typeof e!=`object`)return;let t={};for(let n of[`readOnlyHint`,`destructiveHint`,`consequentialHint`,`untrustedContentHint`,`idempotentHint`,`openWorldHint`,`debugging`]){let r=e[n];typeof r==`boolean`&&(t[n]=r)}return Object.keys(t).length>0?t:void 0},s=e=>{if(e===void 0||e===``)return{...a};if(typeof e==`object`)return e!==null&&!Array.isArray(e)?e:{...a};try{let t=JSON.parse(e);return typeof t==`object`&&t&&!Array.isArray(t)?t:{...a}}catch{return{...a}}},c=e=>{if(e==null)return{content:[{type:`text`,text:``}]};let t;try{t=JSON.parse(e)}catch{return{content:[{type:`text`,text:e}]}}return typeof t==`object`&&t&&Array.isArray(t.content)?t:{content:[{type:`text`,text:typeof t==`string`?t:g(t)}]}},l=e=>{let t;try{t=JSON.stringify(e)??`{}`}catch{t=`{}`}let n=JSON.parse(t);if(typeof n!=`object`||!n)throw TypeError(`WebMCP tool arguments must be an object or array.`);return Object.defineProperty(n,Symbol.toPrimitive,{value:()=>t}),n},u=e=>({isError:!0,content:[{type:`text`,text:e}]}),d=e=>Array.isArray(e)?e.map(e=>e&&typeof e==`object`&&typeof e.text==`string`?e.text:``).filter(Boolean).join(`
2
- `):``,f=e=>{if(e==null)return{status:`completed`};let t;try{t=JSON.parse(e)}catch{return{status:`completed`,result:e}}return typeof t==`object`&&t&&t.isError===!0?{status:`failed`,error:{message:d(t.content)||`The page tool reported an error.`}}:t===void 0?{status:`completed`}:{status:`completed`,result:t}},p=async e=>{if(typeof window>`u`||typeof window.confirm!=`function`)return!1;let t=m(e.args),n=`Allow the AI to call ${e.toolName}`+(t?`\n\nArguments:\n${t}`:``)+(e.description?`\n\n${e.description}`:``);return window.confirm(n)},m=e=>{if(e==null)return``;try{let t=JSON.stringify(e,null,2);return t.length>500?t.slice(0,500)+`…`:t}catch{return String(e)}},h=e=>(e.window===void 0||typeof window<`u`&&e.window===window)&&(e.origin===void 0||typeof location<`u`&&e.origin===location.origin),g=e=>{if(e===void 0)return``;try{return JSON.stringify(e)}catch{return String(e)}};export{r as WebMcpBridge};
@@ -1 +0,0 @@
1
- const e=`4.33.0`;export{e as t};
@@ -1 +0,0 @@
1
- import{f as e,m as t,p as n,r,s as i}from"./chunk-CEPM3FOp.js";import{r as a,t as o}from"./chunk-BnfM7-qg.js";import{t as s}from"./chunk-CnxIZOzx.js";import{i as c,r as l,t as u}from"./chunk-D5BxWOFB.js";import{r as d}from"./chunk-Bb41bKyp.js";import{t as f}from"./chunk-BlTD-Wgn.js";import{n as p,t as m}from"./chunk-BAkaTZpd.js";import{i as h,n as g,r as _,t as v}from"./chunk-BGPPJ_ui.js";import{t as y}from"./chunk-Bj8Hnh10.js";import{r as b}from"./chunk-Cy1A8vbF.js";import{Activity as x,ArrowDown as S,ArrowLeft as C,ArrowRight as w,ArrowUp as T,ArrowUpRight as E,AtSign as ee,Bot as D,Check as O,ChevronDown as k,ChevronLeft as A,ChevronRight as j,ChevronUp as M,Clipboard as N,ClipboardCopy as P,CodeXml as te,Copy as ne,Download as re,Ellipsis as ie,ExternalLink as ae,Eye as oe,File as se,FileCode as ce,FileSpreadsheet as le,FileText as ue,History as de,ImagePlus as fe,Loader as pe,LoaderCircle as me,Maximize as he,Menu as ge,MessageSquare as _e,Mic as ve,Minimize as ye,Minus as be,PanelLeft as xe,Paperclip as Se,Pencil as Ce,Plus as we,Quote as Te,RefreshCw as Ee,Search as De,Send as Oe,ShieldAlert as ke,ShieldCheck as Ae,ShieldX as je,Square as Me,Star as Ne,ThumbsDown as Pe,ThumbsUp as Fe,Trash as Ie,Trash2 as Le,Upload as Re,Volume2 as ze,X as Be}from"lucide";const Ve={activity:x,"arrow-down":S,"arrow-up":T,"arrow-up-right":E,bot:D,"chevron-down":k,"chevron-up":M,"chevron-right":j,"chevron-left":A,check:O,clipboard:N,"clipboard-copy":P,"code-xml":te,copy:ne,file:se,"file-code":ce,"file-spreadsheet":le,"file-text":ue,"image-plus":fe,loader:pe,"loader-circle":me,mic:ve,paperclip:Se,quote:Te,"refresh-cw":Ee,search:De,send:Oe,"shield-alert":ke,"shield-check":Ae,"shield-x":je,square:Me,"square-text":[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`}],[`path`,{d:`M7 8h10M7 12h10M7 16h6`}]],"thumbs-down":Pe,"thumbs-up":Fe,upload:Re,"volume-2":ze,"voice-bars":[[`path`,{d:`M4 10v4`}],[`path`,{d:`M8 6v12`}],[`path`,{d:`M12 3v18`}],[`path`,{d:`M16 7v10`}],[`path`,{d:`M20 10v4`}]],x:Be,"at-sign":ee,"arrow-left":C,"arrow-right":w,"external-link":ae,ellipsis:ie,menu:ge,"panel-left":xe,plus:we,minus:be,pencil:Ce,trash:Ie,"trash-2":Le,download:re,maximize:he,minimize:ye,"message-square":_e,star:Ne,eye:oe,history:de},He=/* @__PURE__ */ `brain.toolbox.wrench.circle.database.terminal.user.mail.phone.calendar.clock.building.map-pin.lock.key.credit-card.hash.globe.link.circle-check.circle-x.triangle-alert.info.ban.shield.ellipsis-vertical.house.pen-line.save.share.funnel.settings.rotate-cw.shopping-cart.shopping-bag.package.truck.tag.gift.receipt.wallet.store.dollar-sign.percent.play.pause.volume-x.camera.image.film.headphones.message-circle.bell.heart.eye-off.bookmark.calendar-days.timer.folder.folder-open.files.chart-column.sparkles.zap.sun.moon.flag.lightbulb.monitor.smartphone`.split(`.`),F=new Map(Object.entries(Ve)),I=/* @__PURE__ */ new Map;let L=!1;const Ue=/* @__PURE__ */ new Set,We=e=>{let t=[...Ue];e&&Ue.clear();for(let e of t)try{e()}catch{}},Ge=()=>{let e=0;for(let[t,n]of I){let r=F.get(n);if(!r)continue;I.delete(t),e++;let i=s(r);if(i)for(t.removeAttribute(`data-persona-icon-pending`);i.firstChild;)t.appendChild(i.firstChild)}return e},Ke=e=>{if(!L){for(let[t,n]of Object.entries(e))F.has(t)||F.set(t,n);L=!0,Ge(),We(!0)}},qe=()=>L?null:o().then(e=>Ke(e.EXTRA_LUCIDE_ICONS)),Je=()=>{qe()?.catch(e=>{console.warn(`[Persona] Failed to load the icons-extra chunk`,e)})},Ye=(e,t,n)=>{let r=s([],e,t,n);return r.setAttribute(`data-persona-icon-pending`,`true`),r},R=(e,t=24,n=`currentColor`,r=2)=>{let i=F.get(e);if(i)return s(i,t,n,r);if(He.includes(e)){let i=Ye(t,n,r);return I.size>=500&&I.delete(I.keys().next().value),I.set(i,e),Je(),i}return console.warn(`Unknown Persona icon "${e}". Use registerIcons().`),null},Xe=(e,t)=>e.visible!==!1&&(e.mode!==`transient`||t===`connecting`||t===`paused`||t===`resuming`||t===`error`),Ze=(e,t,n)=>{let r=t.mode===`transient`,i=e.hasAttribute(`data-persona-composer-reason`)||e.hasAttribute(`data-persona-composer-notice`);e.style.display=Xe(t,n)||r&&i&&t.visible!==!1?``:`none`,e.classList.toggle(`persona-mt-2`,!r),e.classList.toggle(`persona-mb-2`,r)},Qe=(e,t,n)=>{t.parentElement&&e.parentElement===t.parentElement&&(n.mode===`transient`?e.nextElementSibling!==t&&t.before(e):t.nextElementSibling!==e&&t.after(e))};function $e(e){let t=e.ownerDocument?.defaultView;if(!t?.getComputedStyle)return 20;let n=t.getComputedStyle(e).lineHeight;if(!n||!n.trim().endsWith(`px`))return 20;let r=parseFloat(n);return Number.isFinite(r)&&r>0?r:20}function et(e,t){return typeof e!=`number`||!Number.isFinite(e)?t:e>0?e:t}function tt(e,t){e.style.maxHeight=`${t*$e(e)}px`,e.style.overflowY=`auto`}function nt(e){let t=e?.ownerDocument?.defaultView??(typeof window<`u`?window:null);if(!t||typeof t.matchMedia!=`function`)return!1;try{return t.matchMedia(`(pointer: coarse)`).matches===!0}catch{return!1}}function rt(e){return e.insertNewlineOnTouchEnter===!0&&e.coarsePointer===!0}function it(e,t){if(e.key!==`Enter`||e.shiftKey||e.isComposing)return!1;let n=e.metaKey===!0||e.ctrlKey===!0,r=t.submitKey??`enter`;return r===`none`?!1:r===`mod-enter`?n:n||!rt(t)}function at(e){return(e.submitKey??`enter`)===`enter`?rt(e)?`enter`:`send`:`enter`}function ot(e,t){e.setAttribute(`enterkeyhint`,at(t))}function z(e,t){let n=t?.autocomplete;e.setAttribute(`autocomplete`,typeof n==`string`&&n?n:`off`);let r=(t,n)=>{n===void 0?e.removeAttribute(t):e.setAttribute(t,n)};r(`autocapitalize`,typeof t?.autocapitalize==`string`?t.autocapitalize:void 0),r(`spellcheck`,typeof t?.spellcheck==`boolean`?String(t.spellcheck):void 0),r(`inputmode`,typeof t?.inputmode==`string`&&t.inputmode?t.inputmode:void 0),r(`aria-label`,typeof t?.ariaLabel==`string`&&t.ariaLabel?t.ariaLabel:void 0)}function st(e){return e===!0?{disabled:!0}:!e||typeof e!=`object`?{disabled:!1}:{disabled:!0,reason:typeof e.reason==`string`&&e.reason?e.reason:void 0}}const{setLoader:ct,load:lt}=a({fallbackImport:()=>import(`./chunk-Co3VVwGe.js`)}),ut=lt,{setLoader:dt,load:ft}=a({fallbackImport:()=>import(`./chunk-Bkma5hIU.js`),resetOnSetLoader:!0}),pt=ft;let B=400,V=300,H=0;const U=e=>Math.max(0,e);function mt(e){e.delayMs!==void 0&&(B=U(e.delayMs)),e.skipDelayMs!==void 0&&(V=U(e.skipDelayMs))}const ht=()=>Date.now()<H,gt=e=>{H=e>0?Date.now()+e:0},W=/* @__PURE__ */ new WeakMap,_t=e=>typeof e.closest==`function`&&e.closest(`[data-persona-tooltip-suppressed]`)!==null;function vt(e){W.get(e)?.hide()}const yt=e=>e.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&`host`in e,bt=e=>{let t=e.getRootNode?.();return yt(t)?t:e.closest(`dialog[open]`)??e.ownerDocument.body},G=(e,t,n)=>Math.min(Math.max(e,t),Math.max(t,n)),xt=[...[`background`,`foreground`,`hint-fg`,`radius`,`font-size`,`padding`,`max-width`,`shadow`,`arrow-display`].map(e=>`--persona-tooltip-${e}`),`--persona-font-family`,`--persona-radius-sm`];function K(e){W.get(e.anchor)?.destroy();let{anchor:t,trigger:n=t,text:r,hint:i,enabled:a=!0,gap:o=8,viewportPadding:s=8}=e,c=()=>t.ownerDocument,l=()=>c().defaultView??window,u=null,f=null,p=null,m=null,h,g=!1,_=!1,v=!1,y=()=>(typeof r==`function`?r():r).trim(),b=()=>(typeof i==`function`?i():i??``).trim(),x=()=>U(e.delayMs??B),S=()=>U(e.skipDelayMs??V),C=()=>{h!==void 0&&(l().clearTimeout(h),h=void 0)},w=()=>{C();let e=u!==null;m?.(),m=null,u?.remove(),u=null,f=null,p=null,e&&gt(S())},T=()=>{if(!u)return;let e=c(),n=l(),r=t.getBoundingClientRect(),i=u.getBoundingClientRect(),a=e.documentElement.clientWidth||n.innerWidth,d=e.documentElement.clientHeight||n.innerHeight,f=a-s-i.width,p=r.left+r.width/2-i.width/2,m=G(p,s,f),h=r.top-s,g=d-s-r.bottom,_=h>=i.height+o||h>=g?`top`:`bottom`,v=_===`top`?r.top-o-i.height:r.bottom+o,y=d-s-i.height,b=G(v,s,y),x=r.left+r.width/2,S=Math.max(10,i.width-10),C=G(x-m,10,S);u.dataset.placement=_,u.style.left=`${m}px`,u.style.top=`${b}px`,u.style.setProperty(`--persona-tooltip-arrow-x`,`${C}px`)},E=()=>{if(v||!a||u||!t.isConnected||_t(t))return;let e=y(),n=bt(t);if(!e||!n)return;let r=c(),i=l();u=r.createElement(`div`),u.className=`persona-control-tooltip`,u.setAttribute(`role`,`tooltip`),u.dataset.state=`measuring`,u.style.zIndex=String(d);let o=i.getComputedStyle?.(t);if(o){for(let e of xt){let t=o.getPropertyValue(e).trim();t&&u.style.setProperty(e,t)}o.fontFamily&&(u.style.fontFamily=o.fontFamily)}f=r.createElement(`span`),f.className=`persona-control-tooltip__label`,f.textContent=e,u.appendChild(f);let s=b();s&&(p=r.createElement(`span`),p.className=`persona-control-tooltip__hint`,p.textContent=s,u.appendChild(p));let h=r.createElement(`span`);h.className=`persona-control-tooltip__arrow`,u.appendChild(h),n.appendChild(u),T(),u.dataset.state=`open`;let g=()=>{if(!t.isConnected){w();return}f&&(f.textContent=y()),p&&(p.textContent=b());let e=bt(t);u&&e&&u.parentNode!==e&&e.appendChild(u),T()};i.addEventListener(`scroll`,g,!0),i.addEventListener(`resize`,g);let _=t.closest(`[data-persona-root]`);_?.addEventListener(`persona:internal:host-moved`,g);let x=t.getRootNode(),S=yt(x)?x:r.documentElement,C=typeof MutationObserver>`u`?null:new MutationObserver(()=>{t.isConnected||w()});C?.observe(S,{childList:!0,subtree:!0}),m=()=>{i.removeEventListener(`scroll`,g,!0),i.removeEventListener(`resize`,g),_?.removeEventListener(`persona:internal:host-moved`,g),C?.disconnect()}},ee=e=>{v||u||(C(),e||x()<=0||ht()?E():h=l().setTimeout(()=>{h=void 0,E()},x()))},D=()=>{g||_?ee(_):w()},O=()=>{let e=l();e.matchMedia&&e.matchMedia(`(hover: none)`).matches||(g=!0,D())},k=()=>{g=!1,D()},A=()=>{try{_=t.matches(`:focus-visible`)}catch{_=!0}D()},j=()=>{_=!1,D()},M=()=>{g=!1,_=!1,w()},N=e=>{e.key===`Escape`&&M()};n.addEventListener(`mouseenter`,O),n.addEventListener(`mouseleave`,k),t.addEventListener(`focus`,A),t.addEventListener(`blur`,j),t.addEventListener(`keydown`,N),t.addEventListener(`click`,M);let P={get isOpen(){return u!==null},show:E,hide:w,reposition:T,destroy:()=>{v||(v=!0,w(),n.removeEventListener(`mouseenter`,O),n.removeEventListener(`mouseleave`,k),t.removeEventListener(`focus`,A),t.removeEventListener(`blur`,j),t.removeEventListener(`keydown`,N),t.removeEventListener(`click`,M),W.delete(t))}};return W.set(t,P),P}const q=(e,t,n,r)=>{let[i,a]=t.split(`.`);return[e?.theme,e?.darkTheme].some(e=>e?.components?.[i]?.[a]?.[n]!==void 0)?`var(--persona-components-${t.replace(`.`,`-`)}-${n}, ${r})`:r},J=(e,t)=>{let n=e&&r(e,t);return typeof n==`string`&&n?n:void 0},Y=(e,t,n,r)=>{let i=t.startsWith(`var(`);e.classList.toggle(`persona-theme-padding`,i),e.style.padding=i?``:t,i?e.style.setProperty(`--persona-theme-padding`,t):e.style.removeProperty(`--persona-theme-padding`),n&&(e.style.paddingLeft=e.style.paddingRight=n),r&&(e.style.paddingTop=e.style.paddingBottom=r)},X=(e,t,n)=>{let r=t.startsWith(`var(`)&&t.includes(`--persona-components-`);e.classList.toggle(`persona-control-size`,r),r?e.style.setProperty(`--persona-control-size`,t):e.style.removeProperty(`--persona-control-size`),e.style.width=e.style.height=t,e.style.minWidth=e.style.minHeight=n??``},St=`min(440px, calc(100vw - 24px))`,Ct=`40px`,wt={apiUrl:`https://api.runtype.com/api/chat/dispatch`,clientToken:void 0,agentId:void 0,target:void 0,theme:void 0,darkTheme:void 0,colorScheme:`light`,tooltip:{delayMs:400,skipDelayMs:300},launcher:{enabled:!0,mountMode:`floating`,dock:{side:`right`,width:`420px`},title:`Chat Assistant`,subtitle:`Here to help you get answers fast`,agentIconText:`💬`,agentIconName:`bot`,headerIconName:`bot`,position:`bottom-right`,width:St,heightOffset:0,autoExpand:!1,callToActionIconHidden:!1,agentIconSize:`40px`,headerIconSize:Ct,closeButtonPaddingX:`0px`,closeButtonPaddingY:`0px`,callToActionIconName:`arrow-up-right`,callToActionIconText:``,callToActionIconSize:`32px`,callToActionIconPadding:`5px`,callToActionIconColor:void 0,callToActionIconBackgroundColor:void 0,closeButtonBackgroundColor:`transparent`,clearChat:{backgroundColor:`transparent`,borderColor:`transparent`,enabled:!0,placement:`inline`,iconName:`refresh-cw`,showTooltip:!0,tooltipText:`Clear chat`,paddingX:`0px`,paddingY:`0px`},headerIconHidden:!1,border:void 0,shadow:`0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)`},copy:{inputPlaceholder:`How can I help...`,sendButtonLabel:`Send`},sendButton:{borderWidth:`0px`,paddingX:`12px`,paddingY:`10px`,borderColor:void 0,useIcon:!0,iconText:`↑`,showTooltip:!0,tooltipText:`Send message`,iconName:`send`},statusIndicator:{visible:!0,idleText:`Online`,connectingText:`Connecting…`,connectedText:`Streaming…`,errorText:`Offline`},voiceRecognition:{enabled:!0,pauseDuration:2e3,iconName:`mic`,borderWidth:`0px`,iconColor:void 0,backgroundColor:`transparent`,borderColor:`transparent`,recordingIconColor:void 0,recordingBackgroundColor:void 0,recordingBorderColor:`transparent`,showTooltip:!0,tooltipText:`Start voice recognition`},features:{showReasoning:!0,showToolCalls:!0,scrollToBottom:{enabled:!0,iconName:`arrow-down`,label:``,streamingIndicator:`arrow`,scrollBehavior:`instant`,scrollDurationMs:220,transition:`none`},scrollBehavior:{mode:`anchor-top`,anchorTopOffset:16,showActivityWhilePinned:!0},toolCallDisplay:_,reasoningDisplay:v,streamAnimation:{type:`none`,placeholder:`none`,speed:120,duration:1800},askUserQuestion:{enabled:!0,slideInMs:180,freeTextLabel:`Other…`,freeTextPlaceholder:`Type your answer…`,submitLabel:`Send`},history:{enabled:!1,presentation:`panel`,showScopeStatus:!0,showDelete:!0,showDeleteAll:!0}},suggestionChips:[`Show me what you can help with`,`Walk me through getting started`,`Answer a question about this page`],suggestionChipsConfig:{fontFamily:`sans-serif`,fontWeight:`500`,paddingX:`12px`,paddingY:`6px`},layout:{header:{layout:`default`,showIcon:!0,showTitle:!0,showSubtitle:!0,showCloseButton:!0,showClearChat:!0},messages:{layout:`bubble`,avatar:{show:!1,position:`left`},timestamp:{show:!1,position:`below`},groupConsecutive:!1},slots:{}},markdown:{options:{gfm:!0,breaks:!0},disableDefaultStyles:!1},messageActions:{enabled:!0,showCopy:!0,showUpvote:!1,showDownvote:!1,visibility:`hover`,align:`right`,layout:`pill-inside`},debug:!1},Tt={},Z={colorScheme:`light`,errorDisplay:`block`,messageActions:{visibility:void 0},suggestionChipsConfig:{fontWeight:void 0},approval:y,loadingIndicator:{variant:`label`},launcher:{variant:`circle`,width:`min(400px, calc(100vw - 24px))`,headerIconSize:`20px`},features:{artifacts:{enabled:!0},scrollToBottom:{streamingIndicator:`dots`,transition:`fade`,scrollBehavior:`smooth`},toolCallDisplay:h,reasoningDisplay:g},composer:{layout:`single-row`,placement:`overlay`},sendButton:{iconName:`arrow-up`},statusIndicator:{mode:`transient`},layout:{contentMaxWidth:`768px`,topFade:!0,header:{showSubtitle:!1},messages:{assistant:{width:`full`}}}};function Et(e){return e?.future?.v5Defaults===!0?`v5`:`v4`}function Q(t){let n=Et(t)===`v5`?Z:Tt;return e(wt,n)}Q();function Dt(t,n){if(t||n)return t?n?e(t,n):t:n}function Ot(e){let r=Q(e);return e?i(t(b({...r,...e,colorScheme:n(e,[`colorScheme`]).includes(`colorScheme`)?e.colorScheme:e.brand?void 0:r.colorScheme,...r.approval||e.approval!==void 0?{approval:e.approval!==!1&&{...r.approval||{},...e.approval}}:{},theme:Dt(r.theme,e.theme),darkTheme:Dt(r.darkTheme,e.darkTheme),launcher:{...r.launcher,...e.launcher,dock:{...r.launcher?.dock,...e.launcher?.dock},clearChat:{...r.launcher?.clearChat,...e.launcher?.clearChat}},...r.composer||e.composer?{composer:{...r.composer,...e.composer}}:{},tooltip:{...r.tooltip,...e.tooltip},copy:{...r.copy,...e.copy},sendButton:{...r.sendButton,...e.sendButton},statusIndicator:{...r.statusIndicator,...e.statusIndicator},voiceRecognition:{...r.voiceRecognition,...e.voiceRecognition},features:(()=>{let t=r.features?.artifacts,n=e.features?.artifacts,i=r.features?.scrollToBottom,a=e.features?.scrollToBottom,o=r.features?.scrollBehavior,s=e.features?.scrollBehavior,c=r.features?.streamAnimation,l=e.features?.streamAnimation,u=r.features?.askUserQuestion,d=e.features?.askUserQuestion,f=r.features?.history,p=e.features?.history,m=t===void 0&&n===void 0?void 0:{...t,...n,layout:{...t?.layout,...n?.layout}},h=i===void 0&&a===void 0?void 0:{...i,...a},g=o===void 0&&s===void 0?void 0:{...o,...s},_=c===void 0&&l===void 0?void 0:{...c,...l},v=u===void 0&&d===void 0?void 0:{...u,...d,styles:{...u?.styles,...d?.styles}},y=f===void 0&&p===void 0?void 0:{...f,...p,copy:{...f?.copy,...p?.copy}};return{...r.features,...e.features,toolCallDisplay:{...r.features?.toolCallDisplay,...e.features?.toolCallDisplay,...e.features?.toolCallDisplay?.layout===void 0&&e.features?.toolCallDisplay?.variant!==void 0?{layout:e.features.toolCallDisplay.variant}:{}},reasoningDisplay:{...r.features?.reasoningDisplay,...e.features?.reasoningDisplay,...e.features?.reasoningDisplay?.layout===void 0&&e.features?.reasoningDisplay?.variant!==void 0?{layout:e.features.reasoningDisplay.variant}:{}},...h===void 0?{}:{scrollToBottom:h},...g===void 0?{}:{scrollBehavior:g},...m===void 0?{}:{artifacts:m},..._===void 0?{}:{streamAnimation:_},...v===void 0?{}:{askUserQuestion:v},...y===void 0?{}:{history:y}}})(),suggestionChips:e.suggestionChips??r.suggestionChips,suggestionChipsConfig:{...r.suggestionChipsConfig,...e.suggestionChipsConfig},layout:{...r.layout,...e.layout,header:{...r.layout?.header,...e.layout?.header},messages:{...r.layout?.messages,...e.layout?.messages,...r.layout?.messages?.user||e.layout?.messages?.user?{user:{...r.layout?.messages?.user,...e.layout?.messages?.user}}:{},...r.layout?.messages?.assistant||e.layout?.messages?.assistant?{assistant:{...r.layout?.messages?.assistant,...e.layout?.messages?.assistant}}:{},avatar:{...r.layout?.messages?.avatar,...e.layout?.messages?.avatar},timestamp:{...r.layout?.messages?.timestamp,...e.layout?.messages?.timestamp}},slots:{...r.layout?.slots,...e.layout?.slots}},markdown:{...r.markdown,...e.markdown,options:{...r.markdown?.options,...e.markdown?.options}},messageActions:{...r.messageActions,...e.messageActions}},e),e,Z),e):i(t(b(r),void 0,Z))}const kt=(e,t)=>{let n=u(`textarea`);n.setAttribute(`data-persona-composer-input`,``),n.placeholder=e?.copy?.inputPlaceholder??`How can I help...`,n.dir=`auto`,ot(n,{submitKey:e?.composer?.submitKey,insertNewlineOnTouchEnter:e?.composer?.insertNewlineOnTouchEnter,coarsePointer:nt(n)}),z(n,e?.composer?.inputAttributes),n.className=`persona-w-full persona-min-h-[24px] persona-resize-none persona-border-none persona-bg-transparent persona-text-sm persona-text-persona-text focus:persona-outline-none focus:persona-border-none persona-composer-textarea`,n.rows=1,n.style.fontFamily=`var(--persona-input-font-family, var(--persona-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Arial, sans-serif))`,n.style.fontWeight=`var(--persona-input-font-weight, var(--persona-font-weight, 400))`;let r=et(e?.composer?.maxLines,t?.defaultMaxLines??3),i=`${r*20}px`;n.style.maxHeight=i,n.style.overflowY=`auto`;let a=()=>{let e=n.style.maxHeight;if(e!==i){let t=parseFloat(e);if(Number.isFinite(t)&&t>0)return t}let t=r*$e(n);return i=`${t}px`,n.style.maxHeight=i,t},o=()=>{n.addEventListener(`input`,()=>{n.style.height=`auto`;let e=Math.min(n.scrollHeight,a());n.style.height=`${e}px`})};return n.style.border=`none`,n.style.outline=`none`,n.style.borderWidth=`0`,n.style.borderStyle=`none`,n.style.borderColor=`transparent`,n.addEventListener(`focus`,()=>{n.style.border=`none`,n.style.outline=`none`,n.style.borderWidth=`0`,n.style.borderStyle=`none`,n.style.borderColor=`transparent`,n.style.boxShadow=`none`}),n.addEventListener(`blur`,()=>{n.style.border=`none`,n.style.outline=`none`}),{textarea:n,attachAutoResize:o}},At=`[data-persona-glyph-stack]`,jt=(e,t,n=`send`)=>{let r=l(`span`,{className:`persona-composer-glyph-stack`,attrs:{"data-mode":n,"data-persona-glyph-stack":``}});return e.setAttribute(`data-glyph`,`send`),t.setAttribute(`data-glyph`,`stop`),r.append(e,t),r},Mt=/* @__PURE__ */ new WeakMap,$=(e,t,n=!0)=>{Mt.set(e,t);let r=t?.sendButton??{},i=r.useIcon??!1,a=e.getAttribute(`data-persona-send-mode`)===`stop`?`stop`:`send`,o=e=>J(t,`sendButton.${e}`),s=(e,n)=>q(t,`composer.send`,e,n),l=o(`size`)||r.size;e.style.fontSize=i?`18px`:``,e.style.lineHeight=i?`1`:``,e.className=c(`persona-rounded-button disabled:persona-opacity-50 persona-cursor-pointer`,i?`persona-flex persona-items-center persona-justify-center ${m}`:`persona-bg-persona-accent persona-px-4 persona-py-2 persona-text-sm persona-font-semibold`,i&&!o(`backgroundColor`)&&`persona-bg-persona-primary`,!i&&!o(`textColor`)&&`persona-text-white`),X(e,i?l||(s(`size`,``)?s(`size`,`var(--persona-composer-control-size, 40px)`):``):``,i?l:void 0);let u=s(`foreground`,i?`var(--persona-send-button-fg, var(--persona-button-primary-fg, #ffffff))`:`#ffffff`),d=s(`background`,i?`var(--persona-button-primary-bg, var(--persona-primary, #111827))`:`var(--persona-accent, #0f0f0f)`);e.style.color=o(`textColor`)||(a===`stop`&&s(`foreground`,``)?`var(--persona-button-stop-fg, ${u})`:s(`foreground`,``)||(i?u:``)),e.style.backgroundColor=(i?o(`backgroundColor`):void 0)||(s(`background`,``)?a===`stop`?`var(--persona-button-stop-bg, ${d})`:d:``);let f=o(`borderWidth`)||(s(`borderWidth`,``)?s(`borderWidth`,r.borderWidth||`0px`):r.borderWidth||``);e.style.borderWidth=f,e.style.borderStyle=f?`solid`:``,e.style.borderColor=o(`borderColor`)||(s(`borderColor`,``)?s(`borderColor`,r.borderColor||`transparent`):r.borderColor||``),e.style.borderRadius=s(`borderRadius`,``)?s(`borderRadius`,`var(--persona-components-composer-sendButtonRadius, var(--persona-button-radius))`):``,Y(e,s(`padding`,i?`0`:`8px 16px`),i?void 0:o(`paddingX`)||(s(`padding`,``)?void 0:r.paddingX),i?void 0:o(`paddingY`)||(s(`padding`,``)?void 0:r.paddingY));let p=parseFloat(r.iconSize??``)||Math.round((parseFloat(r.size??``)||40)*.5);if(n){if(e.replaceChildren(),i){let t=r.iconStrokeWidth??2,n=r.iconName?R(r.iconName,p,`currentColor`,t):null,i=R(r.stopIconName??`square`,p,`currentColor`,t);n&&i?e.appendChild(jt(n,i,a)):n?e.appendChild(n):e.textContent=r.iconText??`↑`}else e.textContent=a===`stop`?t?.copy?.stopButtonLabel??`Stop`:t?.copy?.sendButtonLabel??`Send`}for(let n of Array.from(e.querySelectorAll(`svg`))){n.style.width=n.style.height=o(`iconSize`)?``:s(`iconSize`,`var(--persona-components-composer-sendIconSize, ${p}px)`);let e=t?.sendButton?.iconStrokeWidth;n.style.strokeWidth=e===void 0?s(`iconStrokeWidth`,``):String(e)}},Nt=e=>{let t=e?.sendButton,n=u(`div`,`persona-send-button-wrapper`),r=l(`button`,{attrs:{type:`submit`,"data-persona-composer-submit":``,"data-persona-send-mode":`send`}});return $(r,e),r.setAttribute(`aria-label`,t?.tooltipText??`Send message`),n.appendChild(r),K({anchor:r,trigger:n,text:()=>r.getAttribute(`aria-label`)??``,enabled:t?.showTooltip??!1}),{button:r,wrapper:n,setMode:e=>{if(r.getAttribute(`data-persona-send-mode`)===e)return;r.setAttribute(`data-persona-send-mode`,e),r.setAttribute(`aria-label`,e===`stop`?t?.stopTooltipText??`Stop generating`:t?.tooltipText??`Send message`);let n=Mt.get(r);$(r,n,!1),r.querySelector(At)?.setAttribute(`data-mode`,e),(n?.sendButton?.useIcon??!1)||(r.textContent=e===`stop`?n?.copy?.stopButtonLabel??`Stop`:n?.copy?.sendButtonLabel??`Send`)},glyphStack:r.querySelector(At)}},Pt=(e,t,n=`idle`,r=`none`)=>{let i=t?.voiceRecognition??{},a=e=>J(t,`voiceRecognition.${e}`),o=(e,n)=>q(t,`voice.control`,e,n),s=a(`iconSize`)||i.iconSize;X(e,s||(o(`size`,``)?o(`size`,`var(--persona-composer-control-size, 40px)`):``),s),e.classList.add(m),e.classList.toggle(p,!s&&!o(`size`,``)),e.style.fontSize=`18px`,e.style.lineHeight=`1`;let c=a(`iconColor`)||J(t,`sendButton.textColor`)||o(`foreground`,`var(--persona-text, #111827)`),l=a(`backgroundColor`)||J(t,`sendButton.backgroundColor`)||o(`background`,i.backgroundColor||`transparent`),u=a(`borderColor`)||o(`borderColor`,i.borderColor||`transparent`),d=a(`borderWidth`)||o(`borderWidth`,i.borderWidth||``);e.style.borderWidth=d,e.style.borderStyle=d?`solid`:``,e.style.borderRadius=o(`borderRadius`,``)?o(`borderRadius`,`var(--persona-button-radius)`):``,Y(e,o(`padding`,``)?o(`padding`,`0px`):``,a(`paddingX`)||(o(`padding`,``)?void 0:i.paddingX),a(`paddingY`)||(o(`padding`,``)?void 0:i.paddingY));let f=a(`recordingBackgroundColor`)||`var(--persona-voice-recording-bg, #ef4444)`,h=a(`recordingIconColor`)||`var(--persona-voice-recording-indicator, #ffffff)`,g=a(`recordingBorderColor`)||`var(--persona-consumer-voice-recording-border, ${i.recordingBorderColor||u})`,_=c,v=l,y=u,b=i.iconName??`mic`;if(n===`recording`)_=h,v=f,y=g;else if(n===`processing`)_=a(`processingIconColor`)||`var(--persona-consumer-voice-processing-icon, ${c})`,v=a(`processingBackgroundColor`)||`var(--persona-consumer-voice-processing-background, ${l})`,y=a(`processingBorderColor`)||`var(--persona-components-voice-processing-border, ${u})`,b=i.processingIconName??`loader`;else if(n===`speaking`){let e=r===`barge-in`;_=a(`speakingIconColor`)||`var(--persona-consumer-voice-speaking-icon, ${e&&a(`recordingIconColor`)||c})`,v=a(`speakingBackgroundColor`)||`var(--persona-components-voice-speaking-background, ${e?f:l})`,y=a(`speakingBorderColor`)||`var(--persona-components-voice-speaking-border, ${e?g:u})`,b=i.speakingIconName??(r===`cancel`?`square`:e?`mic`:`volume-2`)}e.style.color=_,e.style.backgroundColor=v,e.style.borderColor=y,e.setAttribute(`data-state`,n);let x=parseFloat(i.iconSize??``)||24,S=R(b,x,`currentColor`,1.5);if(e.replaceChildren(),S){let t=s||(o(`iconSize`,``)?o(`iconSize`,`var(--persona-composer-control-icon-size, 24px)`):``);S.style.width=S.style.height=t,!s&&o(`iconSize`,``)&&(S.style.flexBasis=t),S.style.strokeWidth=o(`iconStrokeWidth`,`1.5`),e.appendChild(S)}else e.textContent=`🎤`},Ft=e=>{let t=e?.voiceRecognition??{};if(t.enabled!==!0||t.showButton===!1)return null;let n=typeof window<`u`&&(window.webkitSpeechRecognition!==void 0||window.SpeechRecognition!==void 0),r=t.provider?.type===`runtype`,i=t.provider?.type===`custom`||t.dictation?.provider?.type===`custom`;if(!(n||r||i))return null;let a=u(`div`,`persona-send-button-wrapper`),o=l(`button`,{className:`persona-rounded-button persona-flex persona-items-center persona-justify-center disabled:persona-opacity-50 persona-cursor-pointer persona-composer-control`,attrs:{type:`button`,"data-persona-composer-mic":``,"data-state":`idle`,"aria-label":t.tooltipText??`Start voice recognition`}});Pt(o,e),a.appendChild(o);let s=t.tooltipText??`Start voice recognition`;return K({anchor:o,trigger:a,text:()=>o.getAttribute(`aria-label`)??s,enabled:t.showTooltip??!1}),{button:o,wrapper:a}},It=e=>{let t=e?.attachments??{};if(t.enabled!==!0)return null;let n=u(`div`,`persona-attachment-previews persona-flex persona-flex-wrap persona-gap-2 persona-mb-2`);n.setAttribute(`data-persona-composer-attachment-previews`,``),n.style.display=`none`;let r=u(`input`);r.type=`file`,r.setAttribute(`data-persona-composer-attachment-input`,``),r.accept=(t.allowedTypes??f).join(`,`),r.multiple=(t.maxFiles??4)>1,r.style.display=`none`,r.setAttribute(`aria-label`,`Attach files`);let i=t.buttonIconName??`paperclip`,a=u(`div`,`persona-send-button-wrapper`),o=l(`button`,{className:`persona-rounded-button persona-flex persona-items-center persona-justify-center disabled:persona-opacity-50 persona-cursor-pointer persona-attachment-button ${m} ${p}`,attrs:{type:`button`,"data-persona-composer-attachment-button":``,"aria-label":t.buttonTooltipText??`Attach file`},style:{fontSize:`18px`,lineHeight:`1`}}),s=R(i,24,`currentColor`,1.5);s?o.appendChild(s):o.textContent=`📎`,o.addEventListener(`click`,e=>{e.preventDefault(),r.click()}),a.appendChild(o);let c=t.buttonTooltipText??`Attach file`;return K({anchor:o,trigger:a,text:()=>o.getAttribute(`aria-label`)??c}),{button:o,wrapper:a,input:r,previewsContainer:n}},Lt=e=>{let t=e?.statusIndicator??{},n=t.align===`left`?`persona-text-left`:t.align===`center`?`persona-text-center`:`persona-text-right`,r=u(`div`,`persona-mt-2 ${n} persona-text-xs persona-text-persona-muted`);r.setAttribute(`data-persona-composer-status`,``),Ze(r,t,`idle`);let i=t.idleText??`Online`;if(t.idleLink){let e=u(`a`);e.href=t.idleLink,e.target=`_blank`,e.rel=`noopener noreferrer`,e.textContent=i,e.style.color=`inherit`,e.style.textDecoration=`none`,r.appendChild(e)}else r.textContent=i;return r},Rt=()=>l(`div`,{className:`persona-mb-3 persona-flex persona-flex-wrap persona-gap-2`,attrs:{"data-persona-composer-suggestions":``}});function zt(e){let{config:t,onOpen:n}=e,r=t.buttonIconName??`plus`,i=t.buttonTooltipText??`Add context`,a=u(`div`,`persona-send-button-wrapper`),o=l(`button`,{className:`persona-rounded-button persona-flex persona-items-center persona-justify-center disabled:persona-opacity-50 persona-cursor-pointer persona-mention-button ${m} ${p}`,attrs:{type:`button`,"data-persona-composer-mention-button":``,"aria-label":i,"aria-haspopup":`listbox`,"aria-expanded":`false`},style:{fontSize:`18px`,lineHeight:`1`}}),s=R(r,24,`currentColor`,1.5);return s?o.appendChild(s):o.textContent=`+`,o.addEventListener(`click`,e=>{e.preventDefault(),e.stopPropagation(),n()}),a.appendChild(o),K({anchor:o,trigger:a,text:()=>o.getAttribute(`aria-label`)??i}),{button:o,wrapper:a}}function Bt(e,t={}){if(t.render)return t.render({ref:e,readonly:!!t.readonly});let n=l(`span`,{className:c(`persona-mention-token`,t.readonly&&`persona-mention-token-readonly`),attrs:{"data-mention-source":e.sourceId,title:e.label,role:`img`,"aria-label":`${e.label} mention`}});e.color&&n.style.setProperty(`--persona-mention-token-accent`,e.color);let r=R(e.iconName??`at-sign`,13,`currentColor`,2);if(r){let e=u(`span`,`persona-mention-token-icon`);e.appendChild(r),n.appendChild(e)}return n.appendChild(l(`span`,{className:`persona-mention-token-label`,text:`@${e.label}`})),n}export{it as A,vt as C,z as D,ot as E,qe as F,R as I,et as M,Ze as N,tt as O,Qe as P,mt as S,ut as T,Y as _,It as a,J as b,Nt as c,Z as d,St as f,Et as g,Q as h,$ as i,st as j,nt as k,Lt as l,Ot as m,zt as n,kt as o,Ct as p,Pt as r,Ft as s,Bt as t,Rt as u,X as v,pt as w,K as x,q as y};
@@ -1 +0,0 @@
1
- import{n as e}from"./chunk-BAdIgC5d.js";import{t}from"./chunk-DVgzoVCB.js";import{t as n}from"./chunk-i4qGOJAL.js";import{n as r}from"./chunk-DTDHeUsG.js";const i=e=>e.replace(/[^a-zA-Z0-9_]/g,`_`).toLowerCase().replace(/_+/g,`_`).replace(/^_|_$/g,``),a=e=>typeof e==`object`&&!!e&&!Array.isArray(e),o=e=>{if(e.variant!==`tool`)return null;let t=e.agentMetadata?.clientToolAnswer;if(!t||!t.toolCallId||t.result===void 0)return null;let n=i(t.toolName);return n?{call:{toolCallId:t.toolCallId,toolName:n,args:a(t.args)?t.args:{}},result:{toolCallId:t.toolCallId,toolName:n,result:t.result}}:null},s=(e,t)=>{let n=[],r=[],i=[],a=``,s,c=()=>{r.length!==0&&(n.push({role:`assistant`,content:``,createdAt:a,toolCalls:r},{role:`tool`,content:``,createdAt:a,toolResults:i}),r=[],i=[])};for(let l of e){let e=o(l);if(e){let t=l.agentMetadata?.clientToolAnswer?.batch;r.length>0&&(t===void 0||t!==s)&&c(),r.length===0&&(a=l.createdAt,s=t),r.some(t=>t.toolCallId===e.call.toolCallId)||(r.push(e.call),i.push(e.result));continue}let u=t(l);u&&(c(),n.push(u))}return c(),n},c=e=>e.voiceCaption||r(e)?!1:!!(e.contentParts&&e.contentParts.length>0||e.llmContent&&e.llmContent.trim().length>0||e.rawContent&&e.rawContent.trim().length>0||e.content&&e.content.trim().length>0),l=e=>typeof e==`string`?!0:Array.isArray(e)?e.every(e=>{if(!e||typeof e!=`object`)return!1;switch(e.type){case`text`:return typeof e.text==`string`;case`image`:return typeof e.image==`string`;case`audio`:return typeof e.audio==`string`;case`video`:return typeof e.video==`string`;case`file`:return typeof e.data==`string`&&typeof e.mimeType==`string`&&typeof e.filename==`string`;default:return!1}}):!1,u=e=>e.slice().sort((e,t)=>new Date(e.createdAt).getTime()-new Date(t.createdAt).getTime()),d=e=>{let t=e.agentMetadata?.providerPhase??e.agentMetadata?.phase;return e.role===`assistant`&&(t===`commentary`||t===`partial_answer`||t===`final_answer`)?{phase:t}:{}},f=e=>({role:e.role,content:e.contentParts??e.llmContent??e.rawContent??e.content,createdAt:e.createdAt,...d(e)});var p=class{constructor(e){this.host=e}async initializeSession(){await this.host.historyInternals.historyBootstrapReady;let e=this.host.config.getStoredConversationId?.()||null,t=this.host.historyInternals.shouldResumeDurableConversation?.()===!0;if(!this.host.isHistoryCapable()&&!t)return this.#e(e,!1);let n=await this.host.readVisitorToken();if(e&&n)try{let n=await this.createClientSession({conversationId:e,durableResume:t});return t&&n.durableRecovery?.enabled!==!0&&this.host.historyInternals.setStoredResumableHandle?.(null),this.host.finishInit(n,e,!1)}catch(n){if(!(n instanceof this.host.HistoryClientError&&n.code===`not_found`)&&!(n instanceof this.host.HistoryClientError&&n.code===`visitor_required`)&&!(n instanceof this.host.HistoryClientError&&n.code===`history_disabled`))throw n;return t&&this.host.historyInternals.setStoredResumableHandle?.(null),this.#e(e,!0)}return this.#e(e,!1)}async#e(e,t){let n=this.host.historyInternals.visitorStore;return n&&!await this.host.readVisitorToken()?n.withFirstInitLock(()=>this.#t(e,t)):this.#t(e,t)}async#t(e,t){let n=this.host.config.getStoredSessionId?.()||null,r=await this.createClientSession({storedSessionId:n}),i=await this.#n(r);return this.host.finishInit(i,e,t)}async#n(e){if(!e.visitor?.token||this.host.claimInFlight||!this.host.isHistoryCapable()&&e.durableRecovery?.enabled!==!0)return e;this.host.claimInFlight=!0;try{return await this.createClientSession({storedSessionId:e.sessionId})}catch{return e}finally{this.host.claimInFlight=!1}}async sendWithClientToolsDiff(t,n,r,i){let a=!!(n&&n.length>0),o=a?e(n):void 0,s=this.host.clientToolsFingerprintSessionId===t,c=a&&s&&this.host.lastSentClientToolsFingerprint===o,l=!a&&i?.emptyMeansReplace===!0&&this.host.sentNonEmptyClientToolsSessionId===t,u=!1,d;for(let e=0;d=await r({...a&&(u||!c)&&n?{clientTools:n}:{},...l?{clientTools:[]}:{},...o?{clientToolsFingerprint:o}:{}}),d.status===409&&e===0&&a&&(await d.clone().json().catch(()=>null))?.error===`client_tools_resend_required`;e++)u=!0,this.host.lastSentClientToolsFingerprint=null;return{response:d,commit:()=>{this.host.lastSentClientToolsFingerprint=o??null,this.host.clientToolsFingerprintSessionId=t,a?this.host.sentNonEmptyClientToolsSessionId=t:l&&(this.host.sentNonEmptyClientToolsSessionId=null)}}}async createClientSession(e){let n=this.host.isHistoryCapable()&&!e.omitVisitorFields,r=!e.omitVisitorFields,i=null;(n||r)&&(await this.host.historyInternals.historyBootstrapReady,i=await this.host.readVisitorToken());let a=this.host.routing(),o=a.agentId??a.flowId,s=n||e.durableResume?e.conversationId:void 0,c={token:this.host.config.clientToken,...o&&{flowId:o},...n&&{visitorHistory:!0},...r&&{durableRecovery:!0},...(n||r)&&i?{visitorToken:i}:{},...n&&e.identityProof?{identityProof:e.identityProof}:{},...s?{conversationId:s}:e.storedSessionId?{sessionId:e.storedSessionId}:{}};e.signal?.throwIfAborted();let l=await fetch(this.host.getClientApiUrl(`init`),{method:`POST`,headers:{"Content-Type":`application/json`,"X-Persona-Version":t},body:JSON.stringify(c),signal:e.signal});if(!l.ok){let t=await l.json().catch(()=>({error:`Session initialization failed`}));if(n&&l.status===403&&t.error===`visitor_history_disabled`){if(this.host.markHistoryUnavailable(),s)throw new this.host.HistoryClientError(`history_disabled`,`Visitor history is disabled for this surface`);return this.createClientSession({...e,omitVisitorFields:!0})}throw l.status===403&&t.error===`durable_recovery_disabled`?new this.host.HistoryClientError(`history_disabled`,`Durable recovery is disabled for this surface`):(n||e.durableResume)&&l.status===401&&t.error===`visitor_required`?new this.host.HistoryClientError(`visitor_required`,`Visitor credential no longer resolves`):s&&l.status===404?new this.host.HistoryClientError(`not_found`,`Conversation not found`):l.status===401?Error(`Invalid client token: ${t.hint||t.error}`):l.status===403?Error(`Origin not allowed: ${t.hint||t.error}`):Error(t.error||`Failed to initialize session`)}let u=await l.json();return u.visitor?.token&&await this.host.historyInternals.visitorStore?.set(u.visitor.token),{sessionId:u.sessionId,expiresAt:new Date(u.expiresAt),flow:u.flow,...u.conversationId?{conversationId:u.conversationId}:{},...u.targetId?{targetId:u.targetId}:{},...u.conversationRevision?{conversationRevision:u.conversationRevision}:{},...u.durableRecovery?{durableRecovery:u.durableRecovery}:{},...u.visitor?{visitor:u.visitor}:{},config:{welcomeMessage:u.config.welcomeMessage,placeholder:u.config.placeholder,theme:u.config.theme}}}async sendFeedback(e){if([`upvote`,`downvote`,`copy`].includes(e.type)&&!e.messageId)throw Error(`messageId is required for ${e.type} feedback type`);if(e.type===`csat`&&(e.rating===void 0||e.rating<1||e.rating>5))throw Error(`CSAT rating must be between 1 and 5`);if(e.type===`nps`&&(e.rating===void 0||e.rating<0||e.rating>10))throw Error(`NPS rating must be between 0 and 10`);this.host.debug&&console.debug(`[AgentWidgetClient] sending feedback`,e);let n={...e,...this.host.config.clientToken&&{token:this.host.config.clientToken}},r=await fetch(`${this.host.clientApiBase()}/v1/client/feedback`,{method:`POST`,headers:{"Content-Type":`application/json`,"X-Persona-Version":t},body:JSON.stringify(n)});if(!r.ok){let e=await r.json().catch(()=>({error:`Feedback submission failed`}));throw r.status===401?(this.host.clientSession=null,this.host.resetSessionWarmLatch(),this.host.config.onSessionExpired?.(),Error(`Session expired. Please refresh to continue.`)):Error(e.error||`Failed to submit feedback`)}}async dispatchClientToken(e,r,i){let{HistoryClientError:a}=this.host,o=()=>this.host.isCurrentTurn(i),s=e=>{o()&&r(e)};try{let r=()=>{if(e.signal?.throwIfAborted(),!o())throw new DOMException(`Turn superseded`,`AbortError`)},c=this.host.clientSession??await this.host.initSession();r();let l=async()=>{r();let t=c,n=t.durableRecovery?.enabled===!0;if(n&&(!t.conversationId||!await this.host.readVisitorToken()))throw Error(`Renewing this conversation requires its visitor credential.`);r();let i=await this.host.createClientSession({...n||this.host.isHistoryCapable()?{conversationId:t.conversationId,durableResume:n}:{storedSessionId:t.sessionId},signal:e.signal});if(r(),t.conversationId&&i.conversationId!==t.conversationId||n&&i.durableRecovery?.enabled!==!0)throw Error(`Session renewal did not preserve this conversation.`);c=this.host.finishInit(i,t.conversationId??null,!1),this.host.clientSession=c,this.host.resetSessionWarmLatch(),this.host.resetClientToolsFingerprint(),this.host.config.onSessionInit?.(c)};Date.now()>=c.expiresAt.getTime()-6e4&&await l();let d=new Map(u(e.messages).map(e=>[e,this.#s(e)])),f=await this.#l(e.messages,void 0,d),p=f.metadata?Object.fromEntries(Object.entries(f.metadata).filter(([e])=>e!==`sessionId`&&e!==`session_id`)):void 0,m=this.host.isHistoryCapable(),h={sessionId:c.sessionId,messages:u(e.messages).flatMap(e=>{let t=d.get(e);if(!t)return[];let r=m?n(e,t.content):void 0;return[{id:e.id,role:t.role,content:t.content,...r!==void 0&&{displayContent:r}}]}),...e.assistantMessageId&&{assistantMessageId:e.assistantMessageId},...p&&Object.keys(p).length>0&&{metadata:p},...f.inputs&&Object.keys(f.inputs).length>0&&{inputs:f.inputs},...f.context&&{context:f.context},turnId:i,...e.interrupt&&{submitMode:`interrupt`},...e.voiceSpoken&&{voice:{spoken:!0,...e.voicePriorToolResults?.length&&{priorToolResults:e.voicePriorToolResults}}}},g=async()=>{r();let n=c.durableRecovery?.enabled===!0?await this.host.readVisitorToken():null;return r(),this.host.sendWithClientToolsDiff(c.sessionId,f.clientTools,async i=>{r();let a=await this.host.resolveChatIdentityProof(e.signal);r();let o={...h,sessionId:c.sessionId,...i,...a&&{identityProof:a}};return this.host.debug&&console.debug(`[AgentWidgetClient] client token dispatch`,{...o,...a&&{identityProof:{provider:a.provider,token:`[REDACTED]`}}}),fetch(this.host.getClientApiUrl(`chat`),{method:`POST`,headers:{"Content-Type":`application/json`,"X-Persona-Version":t,...n?{"X-Visitor-Token":n}:{}},body:JSON.stringify(o),signal:e.signal})})},_=await g();if(r(),_.response.status===401){let e=await _.response.clone().json().catch(()=>null);r(),e?.error===`Session not found or expired`&&(await l(),_=await g(),r())}let{response:v,commit:y}=_;if(!v.ok){let e=await v.json().catch(()=>({error:`Chat request failed`}));if(v.status===401&&e.error===`invalid_identity_proof`){let e=new a(`invalid_identity_proof`,`The identity proof was rejected`);throw s({type:`error`,error:e}),e}if(v.status===401){this.host.clearClientSession(),this.host.config.onSessionExpired?.();let e=/* @__PURE__ */ Error(`Session expired. Please refresh to continue.`);throw s({type:`error`,error:e}),e}if(v.status===429){let t=Error(e.hint||`Message limit reached for this session.`);throw s({type:`error`,error:t}),t}if(v.status===410&&e.error===`conversation_deleted`){let e=new a(`conversation_deleted`,`This conversation was deleted`);throw s({type:`error`,error:e}),e}let t=Error(e.error||`Failed to send message`);throw s({type:`error`,error:t}),t}if(!v.body){let e=/* @__PURE__ */ Error(`No response body received`);throw s({type:`error`,error:e}),e}y(),s({type:`status`,status:`connected`});try{await this.host.streamResponse(v.body,s,e.assistantMessageId,void 0,e.signal)}finally{s({type:`status`,status:`idle`})}}catch(e){let t=e instanceof Error?e:Error(String(e));throw!(t instanceof a)&&!t.message.includes(`Session expired`)&&!t.message.includes(`Message limit`)&&s({type:`error`,error:t}),t}}async dispatchProxy(e,t){let n=await this.#l(e.messages,e.composerOptions);this.host.debug&&console.debug(`[AgentWidgetClient] dispatch payload`,n);let r={...this.host.headers};if(this.host.getHeaders)try{let e=await this.host.getHeaders();r={...r,...e}}catch(e){typeof console<`u`&&console.error(`[AgentWidget] getHeaders error:`,e)}let i;if(this.host.customFetch)try{i=await this.host.customFetch(this.host.apiUrl,{method:`POST`,headers:r,body:JSON.stringify(n),signal:e.signal},n)}catch(e){let n=e instanceof Error?e:Error(String(e));throw t({type:`error`,error:n}),n}else i=await fetch(this.host.apiUrl,{method:`POST`,headers:r,body:JSON.stringify(n),signal:e.signal});if(!i.ok||!i.body){let e=/* @__PURE__ */ Error(`Chat backend request failed: ${i.status} ${i.statusText}`);throw t({type:`error`,error:e}),e}t({type:`status`,status:`connected`});try{await this.host.streamResponse(i.body,t,void 0,void 0,e.signal)}finally{t({type:`status`,status:`idle`})}}async dispatchAgent(e,t){let n=await this.#c(e.messages,e.composerOptions);this.host.debug&&console.debug(`[AgentWidgetClient] agent dispatch payload`,n);let r={...this.host.headers};if(this.host.getHeaders)try{let e=await this.host.getHeaders();r={...r,...e}}catch(e){typeof console<`u`&&console.error(`[AgentWidget] getHeaders error:`,e)}let i;if(this.host.customFetch)try{i=await this.host.customFetch(this.host.apiUrl,{method:`POST`,headers:r,body:JSON.stringify(n),signal:e.signal},n)}catch(e){let n=e instanceof Error?e:Error(String(e));throw t({type:`error`,error:n}),n}else i=await fetch(this.host.apiUrl,{method:`POST`,headers:r,body:JSON.stringify(n),signal:e.signal});if(!i.ok||!i.body){let e=/* @__PURE__ */ Error(`Agent execution request failed: ${i.status} ${i.statusText}`);throw t({type:`error`,error:e}),e}t({type:`status`,status:`connected`});try{await this.host.streamResponse(i.body,t,e.assistantMessageId,void 0,e.signal)}finally{t({type:`status`,status:`idle`})}}#r(e){for(let t=e.length-1;t>=0;t--){let n=e[t];if(n.role===`user`)return n.mentionContext&&Object.keys(n.mentionContext).length>0?{mentions:n.mentionContext}:null}return null}async#i(e){let t={};this.host.contextProviders.length&&await Promise.all(this.host.contextProviders.map(async n=>{try{let r=await n({messages:e,config:this.host.config});r&&typeof r==`object`&&Object.assign(t,r)}catch(e){typeof console<`u`&&console.warn(`[AgentWidget] Context provider failed:`,e)}}));let n=this.#r(e);return n&&Object.assign(t,n),Object.keys(t).length?t:null}#a(e){if(!e)return;let t={};return e.selectedModelId&&(t.selectedModelId=e.selectedModelId),e.activeModeIds?.length&&(t.activeModeIds=[...e.activeModeIds]),Object.keys(t).length>0?t:void 0}#o(e,t){let n=t?.selectedModelId;return!n||!(`model`in e)?e:this.host.config.composer?.models?.some(e=>e.id===n)?{...e,model:n}:e}#s(e){if(!c(e))return null;let t=e.contentParts??e.llmContent??e.rawContent??e.content,n=e.role===`operator`?null:f(e),r=this.host.config.modelMessageTransform;if(!r)return n;let i=r({message:e,content:t,modelMessage:n});if(i===null)return null;if(!i||typeof i!=`object`||![`user`,`assistant`,`system`].includes(i.role)||!l(i.content)||typeof i.createdAt!=`string`)throw TypeError(`modelMessageTransform must return a supported model message or null`);return{role:i.role,content:i.content,createdAt:i.createdAt,...i.role===`assistant`&&i.phase&&{phase:i.phase}}}async#c(e,t){let n=this.host.routing().agentId;if(!this.host.config.agent&&!n)throw Error(`Agent configuration required for agent mode`);let r=s(u(e),e=>!e.variant||e.variant===`assistant`?this.#s(e):null),i=this.#a(t),a={agent:this.#o(this.host.config.agent??{agentId:n},i),messages:r,options:{streamResponse:!0,recordMode:`virtual`,...this.host.config.agentOptions}};i&&(a.composerOptions=i);let o=[...this.host.builtInClientTools(this.host.config),...await(await this.host.getWebMcpBridge())?.snapshotForDispatch()??[]];o.length>0&&(a.clientTools=o);let c=await this.#i(e);return c&&(a.context=c),a}async#l(e,t,n){let r=s(u(e),e=>n?n.get(e)??null:this.#s(e)),i=this.host.routing(),a={messages:r,...i.agentId?{agent:{agentId:i.agentId}}:i.flowId?{flowId:i.flowId}:{}};if(i.targetPayload)for(let[e,t]of Object.entries(i.targetPayload))e!==`messages`&&(a[e]=t);let o=[...this.host.builtInClientTools(this.host.config),...await(await this.host.getWebMcpBridge())?.snapshotForDispatch()??[]];o.length>0&&(a.clientTools=o);let c=await this.#i(e);c&&(a.context=c);let l=this.#a(t);if(l&&(a.composerOptions=l),this.host.requestMiddleware)try{let e=await this.host.requestMiddleware({payload:{...a},config:this.host.config});if(e&&typeof e==`object`){let t=e;return a.clientTools!==void 0&&!(`clientTools`in t)&&(t.clientTools=a.clientTools),t}}catch(e){typeof console<`u`&&console.error(`[AgentWidget] Request middleware error:`,e)}return a}};export{p as ClientDispatch};