@_solaris/messenger-widget 0.5.25 → 0.5.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/messenger.js CHANGED
@@ -1,4 +1,4 @@
1
- import { reactive as Fe, openBlock as c, createElementBlock as u, normalizeStyle as q, normalizeClass as O, toDisplayString as v, resolveComponent as E, createVNode as V, Transition as Ue, withCtx as Pe, Fragment as R, renderList as j, withKeys as ue, withModifiers as J, createElementVNode as o, createCommentVNode as b, createBlock as U, withDirectives as K, vModelText as X, createTextVNode as pe, resolveDynamicComponent as je, renderSlot as De, vModelCheckbox as ze, vModelSelect as He, markRaw as ke } from "vue";
1
+ import { reactive as De, openBlock as c, createElementBlock as u, normalizeStyle as q, normalizeClass as O, toDisplayString as v, resolveComponent as I, createVNode as $, Transition as Le, withCtx as Be, Fragment as E, renderList as P, withKeys as ue, withModifiers as J, createElementVNode as o, createCommentVNode as b, createBlock as U, withDirectives as K, vModelText as X, createTextVNode as pe, resolveDynamicComponent as Pe, renderSlot as je, vModelCheckbox as He, vModelSelect as ze, markRaw as ke } from "vue";
2
2
  const qe = [
3
3
  "connected",
4
4
  "message",
@@ -98,7 +98,13 @@ function We(e) {
98
98
  ...t.token ? { token: t.token } : {},
99
99
  // Déclaration de mode du marchand (validée serveur contre
100
100
  // widgets.allow_unauthenticated). Le serveur 400 si mismatch.
101
- allowUnauthenticated: d.allowUnauthenticated === !0
101
+ allowUnauthenticated: d.allowUnauthenticated === !0,
102
+ // Data customer du marchand (`context.customer`). Stockée
103
+ // sur la session en `pending_customer` jusqu'à création
104
+ // du row au premier message. Permet aux templates
105
+ // `{{customer.*}}` du widget config d'être résolus dès
106
+ // le premier render.
107
+ ...d.customer && typeof d.customer == "object" ? { customer: d.customer } : {}
102
108
  })
103
109
  }
104
110
  );
@@ -132,7 +138,7 @@ function We(e) {
132
138
  }
133
139
  async function k() {
134
140
  try {
135
- const d = await I();
141
+ const d = await B();
136
142
  t.lastActivityAt = d.reduce((f, _) => {
137
143
  const y = _ == null ? void 0 : _.last_message_at;
138
144
  return y && (!f || y > f) ? y : f;
@@ -149,14 +155,14 @@ function We(e) {
149
155
  const f = await a("PATCH", "/customers/me", d);
150
156
  return (f == null ? void 0 : f.customer) ?? null;
151
157
  }
152
- async function I() {
158
+ async function B() {
153
159
  const d = await a("GET", "/conversations");
154
160
  return (d == null ? void 0 : d.conversations) ?? [];
155
161
  }
156
162
  async function A(d = {}) {
157
163
  return (await a("POST", "/conversations", d)).conversation;
158
164
  }
159
- async function z(d) {
165
+ async function H(d) {
160
166
  return (await a(
161
167
  "GET",
162
168
  `/conversations/${encodeURIComponent(d)}`
@@ -185,7 +191,7 @@ function We(e) {
185
191
  `/conversations/${encodeURIComponent(d)}/messages${y}`
186
192
  );
187
193
  }
188
- async function P(d, f) {
194
+ async function D(d, f) {
189
195
  se();
190
196
  const _ = {
191
197
  client_msg_id: f.client_msg_id,
@@ -236,7 +242,7 @@ function We(e) {
236
242
  const d = new URLSearchParams({ widgetId: t.widgetId }).toString();
237
243
  return `${t.baseUrl}${fe}/stream?${d}`;
238
244
  }
239
- function $() {
245
+ function V() {
240
246
  if (!t.eventSource && !(typeof document < "u" && document.hidden) && t.started)
241
247
  try {
242
248
  const d = new EventSource(te(), { withCredentials: !0 });
@@ -262,16 +268,16 @@ function We(e) {
262
268
  t.eventSource && (t.eventSource.close(), t.eventSource = null), t.connection !== "paused" && r("idle");
263
269
  }
264
270
  function se() {
265
- clearTimeout(t.burstTimer), $(), t.panelOpen || (t.burstTimer = setTimeout(() => {
271
+ clearTimeout(t.burstTimer), V(), t.panelOpen || (t.burstTimer = setTimeout(() => {
266
272
  t.panelOpen || Y();
267
273
  }, Ve));
268
274
  }
269
275
  function ce(d) {
270
- t.panelOpen = !!d, t.panelOpen ? (clearTimeout(t.burstTimer), $()) : se();
276
+ t.panelOpen = !!d, t.panelOpen ? (clearTimeout(t.burstTimer), V()) : se();
271
277
  }
272
278
  async function me() {
273
279
  try {
274
- const d = await I(), f = d.reduce((y, C) => {
280
+ const d = await B(), f = d.reduce((y, C) => {
275
281
  const S = C == null ? void 0 : C.last_message_at;
276
282
  return S && (!y || S > y) ? S : y;
277
283
  }, null);
@@ -296,7 +302,7 @@ function We(e) {
296
302
  clearTimeout(t.hiddenGraceTimer), t.hiddenGraceTimer = null;
297
303
  return;
298
304
  }
299
- r("idle"), de(), t.panelOpen && $();
305
+ r("idle"), de(), t.panelOpen && V();
300
306
  }
301
307
  }
302
308
  function g() {
@@ -313,13 +319,13 @@ function We(e) {
313
319
  // REST
314
320
  getCustomer: w,
315
321
  patchCustomer: T,
316
- listConversations: I,
322
+ listConversations: B,
317
323
  createConversation: A,
318
- getConversation: z,
324
+ getConversation: H,
319
325
  patchConversation: M,
320
326
  markConversationRead: F,
321
327
  listMessages: N,
322
- postMessage: P,
328
+ postMessage: D,
323
329
  postCallback: G,
324
330
  uploadAttachment: Z,
325
331
  signAttachment: ee,
@@ -348,7 +354,7 @@ function Je() {
348
354
  return t.slice(0, 4).join("") + "-" + t.slice(4, 6).join("") + "-" + t.slice(6, 8).join("") + "-" + t.slice(8, 10).join("") + "-" + t.slice(10, 16).join("");
349
355
  }
350
356
  function Qe(e) {
351
- const t = Fe({
357
+ const t = De({
352
358
  ready: !1,
353
359
  error: null,
354
360
  config: null,
@@ -386,7 +392,7 @@ function Qe(e) {
386
392
  ), n.push(
387
393
  e.on("message", (h) => {
388
394
  const m = h == null ? void 0 : h.conversation_id, g = h == null ? void 0 : h.message;
389
- !m || !(g != null && g.id) || ($(m, g), g.client_msg_id && delete t.streamingByMsgId[g.client_msg_id], se(m, g.created_at));
395
+ !m || !(g != null && g.id) || (V(m, g), g.client_msg_id && delete t.streamingByMsgId[g.client_msg_id], se(m, g.created_at));
390
396
  })
391
397
  ), n.push(
392
398
  e.on("message_stream", (h) => {
@@ -525,7 +531,7 @@ function Qe(e) {
525
531
  const g = await e.patchConversation(h, m), d = t.conversations.findIndex((f) => f.id === h);
526
532
  d !== -1 && (t.conversations[d] = g);
527
533
  }
528
- async function I(h) {
534
+ async function B(h) {
529
535
  if (!h) return [];
530
536
  const m = t.messagesByConv[h] || [];
531
537
  let g = "";
@@ -543,7 +549,7 @@ function Qe(e) {
543
549
  const C = [];
544
550
  for (const S of f) {
545
551
  const L = (S == null ? void 0 : S.id) != null && _.has(String(S.id)) || (S == null ? void 0 : S.client_msg_id) && y.has(S.client_msg_id);
546
- $(h, S), L || C.push(S);
552
+ V(h, S), L || C.push(S);
547
553
  }
548
554
  return C;
549
555
  } catch (d) {
@@ -562,7 +568,7 @@ function Qe(e) {
562
568
  console.error("[store] markConversationRead failed", g);
563
569
  }
564
570
  }
565
- async function z(h, m, { attachments: g, metadata: d } = {}) {
571
+ async function H(h, m, { attachments: g, metadata: d } = {}) {
566
572
  var L;
567
573
  const f = (m || "").trim(), _ = Array.isArray(g) && g.length > 0;
568
574
  if (!h || !f && !_) return;
@@ -582,7 +588,7 @@ function Qe(e) {
582
588
  ..._ ? { payload: { type: "content", attachments: g } } : {},
583
589
  ...d && typeof d == "object" ? { metadata: d } : {}
584
590
  };
585
- $(h, S);
591
+ V(h, S);
586
592
  try {
587
593
  await e.postMessage(h, {
588
594
  client_msg_id: y,
@@ -626,7 +632,7 @@ function Qe(e) {
626
632
  }
627
633
  return null;
628
634
  }
629
- async function P(h, { rating: m, comment: g } = {}) {
635
+ async function D(h, { rating: m, comment: g } = {}) {
630
636
  const d = t.conversations.find((y) => y.id === h), _ = {
631
637
  ...(d == null ? void 0 : d.metadata) || {},
632
638
  feedback: {
@@ -686,15 +692,15 @@ function Qe(e) {
686
692
  if (L && typeof L == "object" && typeof L.label == "string") {
687
693
  const x = L.label.trim();
688
694
  if (!x) return null;
689
- const Ne = L.kind === "cta" || L.kind === "choice" || L.kind === "followup" ? L.kind : null;
690
- return { label: x, kind: Ne };
695
+ const Ue = L.kind === "cta" || L.kind === "choice" || L.kind === "followup" ? L.kind : null;
696
+ return { label: x, kind: Ue };
691
697
  }
692
698
  return null;
693
699
  }).filter(Boolean).slice(0, 4) : [];
694
700
  }
695
701
  return [];
696
702
  }
697
- function $(h, m) {
703
+ function V(h, m) {
698
704
  var _;
699
705
  const g = t.messagesByConv[h] || [];
700
706
  let d = -1;
@@ -757,13 +763,13 @@ function Qe(e) {
757
763
  createConversation: a,
758
764
  openConversation: p,
759
765
  loadMore: k,
760
- fetchSinceLast: I,
766
+ fetchSinceLast: B,
761
767
  patchConversation: T,
762
768
  markConversationRead: A,
763
- send: z,
769
+ send: H,
764
770
  clickCallback: M,
765
771
  signAttachment: N,
766
- submitFeedback: P,
772
+ submitFeedback: D,
767
773
  getPendingApproval: G,
768
774
  getActionInFlight: ee,
769
775
  getLatestSuggestions: te,
@@ -772,7 +778,7 @@ function Qe(e) {
772
778
  setPanelOpen: e.setPanelOpen
773
779
  };
774
780
  }
775
- const H = {
781
+ const z = {
776
782
  w: "#ffffff",
777
783
  g50: "#F9F9F7",
778
784
  g100: "#F2F1EE",
@@ -802,7 +808,7 @@ function ve(e = "") {
802
808
  function ye(e = "") {
803
809
  return e.split(" ").map((t) => t[0] || "").join("").toUpperCase().slice(0, 2);
804
810
  }
805
- function Le(e = /* @__PURE__ */ new Date(), t = "fr-FR") {
811
+ function Ee(e = /* @__PURE__ */ new Date(), t = "fr-FR") {
806
812
  return e.toLocaleTimeString(t, { hour: "2-digit", minute: "2-digit" });
807
813
  }
808
814
  const Xe = `
@@ -811,21 +817,21 @@ const Xe = `
811
817
  .wm-root {
812
818
  --wm-f: 'Geist', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
813
819
  --wm-fm: 'Geist Mono', ui-monospace, SFMono-Regular, Menlo, monospace;
814
- --wm-w: ${H.w};
815
- --wm-g50: ${H.g50};
816
- --wm-g100: ${H.g100};
817
- --wm-g150: ${H.g150};
818
- --wm-g200: ${H.g200};
819
- --wm-g300: ${H.g300};
820
- --wm-g400: ${H.g400};
821
- --wm-g500: ${H.g500};
822
- --wm-g700: ${H.g700};
823
- --wm-g900: ${H.g900};
824
- --wm-a: ${H.accent};
825
- --wm-al: ${H.accentLight};
826
- --wm-green: ${H.green};
827
- --wm-red: ${H.red};
828
- --wm-redBg: ${H.redBg};
820
+ --wm-w: ${z.w};
821
+ --wm-g50: ${z.g50};
822
+ --wm-g100: ${z.g100};
823
+ --wm-g150: ${z.g150};
824
+ --wm-g200: ${z.g200};
825
+ --wm-g300: ${z.g300};
826
+ --wm-g400: ${z.g400};
827
+ --wm-g500: ${z.g500};
828
+ --wm-g700: ${z.g700};
829
+ --wm-g900: ${z.g900};
830
+ --wm-a: ${z.accent};
831
+ --wm-al: ${z.accentLight};
832
+ --wm-green: ${z.green};
833
+ --wm-red: ${z.red};
834
+ --wm-redBg: ${z.redBg};
829
835
  --wm-sh1: 0 1px 3px rgba(0,0,0,.06);
830
836
  --wm-sh2: 0 4px 24px rgba(0,0,0,.09), 0 1px 4px rgba(0,0,0,.05);
831
837
  --wm-shPanel: 0 12px 40px rgba(0,0,0,.13), 0 2px 8px rgba(0,0,0,.06);
@@ -916,6 +922,7 @@ Je réponds en quelques secondes.`,
916
922
  "messageList.approvalRequestSent": "Demande d'approbation envoyée",
917
923
  "messageList.conversationUpdate": "Mise à jour de la conversation",
918
924
  "messageList.anAgent": "Un agent",
925
+ "messageList.scrollToBottom": "Aller en bas",
919
926
  // ── System events ────────────────────────────────────────────────
920
927
  "system.transferredToHuman": "Conversation transférée à un humain",
921
928
  "system.assigned": "{name} a rejoint la conversation",
@@ -1036,6 +1043,7 @@ I reply within seconds.`,
1036
1043
  "messageList.approvalRequestSent": "Approval request sent",
1037
1044
  "messageList.conversationUpdate": "Conversation update",
1038
1045
  "messageList.anAgent": "An agent",
1046
+ "messageList.scrollToBottom": "Scroll to bottom",
1039
1047
  // ── System events ────────────────────────────────────────────────
1040
1048
  "system.transferredToHuman": "Conversation transferred to a human",
1041
1049
  "system.assigned": "{name} joined the conversation",
@@ -1101,7 +1109,7 @@ function we(e) {
1101
1109
  function oe(e) {
1102
1110
  return Ce[we(e)] || Ce[ie];
1103
1111
  }
1104
- function D(e) {
1112
+ function j(e) {
1105
1113
  const t = we(e), n = _e[t] || _e[ie], i = _e[ie];
1106
1114
  return function(s, a) {
1107
1115
  let l = n[s];
@@ -1119,7 +1127,7 @@ function Ae(e, t) {
1119
1127
  function Ie(e, t, n) {
1120
1128
  return Array.isArray(t) ? t.map((i) => Ae(e, String(i))).join(", ") : typeof t == "boolean" ? n(t ? "common.yes" : "common.no") : Ae(e, String(t));
1121
1129
  }
1122
- function tt(e, t, n = D()) {
1130
+ function tt(e, t, n = j()) {
1123
1131
  if (!e || !t) return "";
1124
1132
  const i = Array.isArray(e.fields) ? e.fields : [], r = [];
1125
1133
  for (const s of i) {
@@ -1134,7 +1142,7 @@ ${l}`);
1134
1142
 
1135
1143
  `);
1136
1144
  }
1137
- function nt(e, t, n = D()) {
1145
+ function nt(e, t, n = j()) {
1138
1146
  const i = [], r = Array.isArray(e == null ? void 0 : e.fields) ? e.fields : [];
1139
1147
  for (const s of r) {
1140
1148
  if (!(s != null && s.key) || !(s != null && s.label)) continue;
@@ -1204,7 +1212,7 @@ function it(e, t, n, i) {
1204
1212
  return r.join(`
1205
1213
  `);
1206
1214
  }
1207
- function at(e, t, n = D(), i) {
1215
+ function at(e, t, n = j(), i) {
1208
1216
  if (!e) return;
1209
1217
  const r = it(e, t || [], n, oe(i)), s = new Blob([r], { type: "text/plain;charset=utf-8" });
1210
1218
  try {
@@ -1629,7 +1637,7 @@ function pt(e) {
1629
1637
  }
1630
1638
  return null;
1631
1639
  }
1632
- const B = (e, t) => {
1640
+ const R = (e, t) => {
1633
1641
  const n = e.__vccOpts || e;
1634
1642
  for (const [i, r] of t)
1635
1643
  n[i] = r;
@@ -1675,13 +1683,13 @@ function wt(e, t, n, i, r, s) {
1675
1683
  }, v(s.initials), 5))
1676
1684
  ], 6);
1677
1685
  }
1678
- const Re = /* @__PURE__ */ B(vt, [["render", wt], ["__scopeId", "data-v-14e10c0d"]]), bt = 3, kt = {
1686
+ const Re = /* @__PURE__ */ R(vt, [["render", wt], ["__scopeId", "data-v-14e10c0d"]]), bt = 3, kt = {
1679
1687
  name: "WmLauncher",
1680
1688
  components: { HumanAvatar: Re },
1681
1689
  inject: {
1682
1690
  // Translator shared by the Messenger shell; French fallback when
1683
1691
  // the component is used standalone.
1684
- t: { default: () => D() }
1692
+ t: { default: () => j() }
1685
1693
  },
1686
1694
  props: {
1687
1695
  // Nombre de conversations non lues — pilote la pastille.
@@ -1701,9 +1709,9 @@ const Re = /* @__PURE__ */ B(vt, [["render", wt], ["__scopeId", "data-v-14e10c0d
1701
1709
  return this.peeks.slice(0, bt).reverse();
1702
1710
  }
1703
1711
  }
1704
- }, Ct = ["aria-label", "onClick", "onKeydown"], At = ["aria-label", "onClick"], St = { class: "wm-peek__avatar" }, Mt = ["aria-label"], Tt = { class: "wm-peek__body" }, xt = { class: "wm-peek__head" }, Ot = { class: "wm-peek__name" }, Lt = { class: "wm-peek__action" }, It = { class: "wm-peek__text" }, Rt = ["onClick"], Et = ["aria-label"], Bt = ["aria-label"];
1712
+ }, Ct = ["aria-label", "onClick", "onKeydown"], At = ["aria-label", "onClick"], St = { class: "wm-peek__avatar" }, Mt = ["aria-label"], Tt = { class: "wm-peek__body" }, xt = { class: "wm-peek__head" }, Ot = { class: "wm-peek__name" }, Lt = { class: "wm-peek__action" }, Bt = { class: "wm-peek__text" }, Et = ["onClick"], It = ["aria-label"], Rt = ["aria-label"];
1705
1713
  function Nt(e, t, n, i, r, s) {
1706
- const a = E("HumanAvatar");
1714
+ const a = I("HumanAvatar");
1707
1715
  return c(), u("div", {
1708
1716
  class: "wm-launcherWrap",
1709
1717
  onMouseenter: t[1] || (t[1] = (l) => e.$emit("hover", !0)),
@@ -1711,13 +1719,13 @@ function Nt(e, t, n, i, r, s) {
1711
1719
  onFocusin: t[3] || (t[3] = (l) => e.$emit("hover", !0)),
1712
1720
  onFocusout: t[4] || (t[4] = (l) => e.$emit("hover", !1))
1713
1721
  }, [
1714
- V(Ue, { name: "wm-peek" }, {
1715
- default: Pe(() => [
1722
+ $(Le, { name: "wm-peek" }, {
1723
+ default: Be(() => [
1716
1724
  s.visiblePeeks.length ? (c(), u("div", {
1717
1725
  key: 0,
1718
1726
  class: O(["wm-peekStack", { "wm-peekStack--multi": s.visiblePeeks.length > 1 }])
1719
1727
  }, [
1720
- (c(!0), u(R, null, j(s.visiblePeeks, (l, p) => (c(), u("div", {
1728
+ (c(!0), u(E, null, P(s.visiblePeeks, (l, p) => (c(), u("div", {
1721
1729
  key: l.convId,
1722
1730
  class: "wm-peek",
1723
1731
  style: q({
@@ -1756,7 +1764,7 @@ function Nt(e, t, n, i, r, s) {
1756
1764
  ], -1)
1757
1765
  ])], 8, At),
1758
1766
  o("div", St, [
1759
- V(a, {
1767
+ $(a, {
1760
1768
  name: l.senderName,
1761
1769
  "avatar-url": l.senderAvatarUrl,
1762
1770
  size: 34
@@ -1772,13 +1780,13 @@ function Nt(e, t, n, i, r, s) {
1772
1780
  o("span", Ot, v(l.senderName || s.t("common.agent")), 1),
1773
1781
  o("span", Lt, v(s.t("launcher.repliedToYou")), 1)
1774
1782
  ]),
1775
- o("p", It, v(l.preview), 1)
1783
+ o("p", Bt, v(l.preview), 1)
1776
1784
  ]),
1777
1785
  o("button", {
1778
1786
  type: "button",
1779
1787
  class: "wm-peek__open",
1780
1788
  onClick: J((k) => e.$emit("open", l.convId), ["stop"])
1781
- }, v(s.t("common.open")), 9, Rt)
1789
+ }, v(s.t("common.open")), 9, Et)
1782
1790
  ], 44, Ct))), 128))
1783
1791
  ], 2)) : b("", !0)
1784
1792
  ]),
@@ -1811,11 +1819,11 @@ function Nt(e, t, n, i, r, s) {
1811
1819
  }) : s.t("launcher.unreadConversationsOne", {
1812
1820
  count: n.unreadCount
1813
1821
  })
1814
- }, v(n.unreadCount > 9 ? "9+" : n.unreadCount), 9, Bt)) : b("", !0)
1815
- ], 8, Et)
1822
+ }, v(n.unreadCount > 9 ? "9+" : n.unreadCount), 9, Rt)) : b("", !0)
1823
+ ], 8, It)
1816
1824
  ], 32);
1817
1825
  }
1818
- const Ft = /* @__PURE__ */ B(kt, [["render", Nt], ["__scopeId", "data-v-44ddf1a1"]]), Ut = {
1826
+ const Ft = /* @__PURE__ */ R(kt, [["render", Nt], ["__scopeId", "data-v-44ddf1a1"]]), Ut = {
1819
1827
  name: "WmAIAvatar",
1820
1828
  props: {
1821
1829
  size: { type: Number, default: 26 },
@@ -1844,11 +1852,11 @@ const Ft = /* @__PURE__ */ B(kt, [["render", Nt], ["__scopeId", "data-v-44ddf1a1
1844
1852
  return ve(this.name);
1845
1853
  }
1846
1854
  }
1847
- }, Pt = {
1855
+ }, Dt = {
1848
1856
  key: 0,
1849
1857
  class: "wm-aiav__pulse"
1850
- }, jt = ["src", "alt"], Dt = ["width", "height"];
1851
- function zt(e, t, n, i, r, s) {
1858
+ }, Pt = ["src", "alt"], jt = ["width", "height"];
1859
+ function Ht(e, t, n, i, r, s) {
1852
1860
  return c(), u("div", {
1853
1861
  class: O(["wm-aiav", { "wm-aiav--tail": n.tail }]),
1854
1862
  style: q({
@@ -1857,7 +1865,7 @@ function zt(e, t, n, i, r, s) {
1857
1865
  "--wm-avr": n.size * 0.32 + "px"
1858
1866
  })
1859
1867
  }, [
1860
- n.pulse ? (c(), u("div", Pt)) : b("", !0),
1868
+ n.pulse ? (c(), u("div", Dt)) : b("", !0),
1861
1869
  o("div", {
1862
1870
  class: O(["wm-aiav__inner", {
1863
1871
  "wm-aiav__inner--glow": n.pulse,
@@ -1872,7 +1880,7 @@ function zt(e, t, n, i, r, s) {
1872
1880
  key: 0,
1873
1881
  src: n.imageUrl,
1874
1882
  alt: n.name || ""
1875
- }, null, 8, jt)) : s.initials ? (c(), u("span", {
1883
+ }, null, 8, Pt)) : s.initials ? (c(), u("span", {
1876
1884
  key: 1,
1877
1885
  style: q({ fontSize: n.size * 0.36 + "px" })
1878
1886
  }, v(s.initials), 5)) : (c(), u("svg", {
@@ -1902,11 +1910,11 @@ function zt(e, t, n, i, r, s) {
1902
1910
  fill: "white",
1903
1911
  opacity: "0.38"
1904
1912
  }, null, -1)
1905
- ])], 8, Dt))
1913
+ ])], 8, jt))
1906
1914
  ], 6)
1907
1915
  ], 6);
1908
1916
  }
1909
- const le = /* @__PURE__ */ B(Ut, [["render", zt], ["__scopeId", "data-v-6f7f685d"]]), Ht = {
1917
+ const le = /* @__PURE__ */ R(Ut, [["render", Ht], ["__scopeId", "data-v-6f7f685d"]]), zt = {
1910
1918
  name: "WmTeamAvatars",
1911
1919
  props: {
1912
1920
  members: { type: Array, default: () => [] },
@@ -1941,7 +1949,7 @@ function Wt(e, t, n, i, r, s) {
1941
1949
  class: "wm-team__stack",
1942
1950
  style: q({ width: s.stackWidth + "px" })
1943
1951
  }, [
1944
- (c(!0), u(R, null, j(n.members.slice(0, 3), (a, l) => (c(), u("div", {
1952
+ (c(!0), u(E, null, P(n.members.slice(0, 3), (a, l) => (c(), u("div", {
1945
1953
  key: l,
1946
1954
  class: "wm-team__pill",
1947
1955
  style: q({
@@ -1960,13 +1968,13 @@ function Wt(e, t, n, i, r, s) {
1960
1968
  n.responseLabel ? (c(), u("span", Kt, v(n.responseLabel), 1)) : b("", !0)
1961
1969
  ])) : b("", !0);
1962
1970
  }
1963
- const Gt = /* @__PURE__ */ B(Ht, [["render", Wt], ["__scopeId", "data-v-e49a9063"]]), Yt = {
1971
+ const Gt = /* @__PURE__ */ R(zt, [["render", Wt], ["__scopeId", "data-v-e49a9063"]]), Yt = {
1964
1972
  name: "WmHeader",
1965
1973
  components: { AIAvatar: le, TeamAvatars: Gt },
1966
1974
  inject: {
1967
1975
  // Translator shared by the Messenger shell. Falls back to a French
1968
1976
  // translator when the component is used standalone (no provider).
1969
- t: { default: () => D() }
1977
+ t: { default: () => j() }
1970
1978
  },
1971
1979
  props: {
1972
1980
  title: { type: String, default: "Nouvelle conversation" },
@@ -2007,7 +2015,7 @@ const Gt = /* @__PURE__ */ B(Ht, [["render", Wt], ["__scopeId", "data-v-e49a9063
2007
2015
  class: "wm-header__fill"
2008
2016
  }, sn = { class: "wm-header__actions" }, rn = ["aria-label", "title"], an = ["aria-label", "title"];
2009
2017
  function on(e, t, n, i, r, s) {
2010
- const a = E("AIAvatar"), l = E("TeamAvatars");
2018
+ const a = I("AIAvatar"), l = I("TeamAvatars");
2011
2019
  return c(), u("div", Jt, [
2012
2020
  n.showBack ? (c(), u("button", {
2013
2021
  key: 0,
@@ -2030,9 +2038,9 @@ function on(e, t, n, i, r, s) {
2030
2038
  o("path", { d: "M19 12H5M12 5l-7 7 7 7" })
2031
2039
  ], -1)
2032
2040
  ])], 8, Qt)) : (c(), u("div", Xt)),
2033
- n.showIdentity ? (c(), u(R, { key: 2 }, [
2041
+ n.showIdentity ? (c(), u(E, { key: 2 }, [
2034
2042
  o("div", Zt, [
2035
- V(a, {
2043
+ $(a, {
2036
2044
  size: 30,
2037
2045
  name: n.agentName,
2038
2046
  "image-url": n.agentAvatarUrl
@@ -2105,8 +2113,8 @@ function on(e, t, n, i, r, s) {
2105
2113
  ])
2106
2114
  ]);
2107
2115
  }
2108
- const ln = /* @__PURE__ */ B(Yt, [["render", on], ["__scopeId", "data-v-925c9e94"]]);
2109
- function Ee(e) {
2116
+ const ln = /* @__PURE__ */ R(Yt, [["render", on], ["__scopeId", "data-v-925c9e94"]]);
2117
+ function Ne(e) {
2110
2118
  return String(e).replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;");
2111
2119
  }
2112
2120
  function cn(e) {
@@ -2124,11 +2132,11 @@ function re(e) {
2124
2132
  function dn(e) {
2125
2133
  if (!e) return "";
2126
2134
  const t = String(e).replace(/\[([^\]\n]+)\]\([^)\s]+\)/g, "$1");
2127
- return re(Ee(t));
2135
+ return re(Ne(t));
2128
2136
  }
2129
2137
  function un(e) {
2130
2138
  if (!e) return "";
2131
- const t = Ee(e).split(`
2139
+ const t = Ne(e).split(`
2132
2140
  `), n = [];
2133
2141
  let i = 0;
2134
2142
  for (; i < t.length; ) {
@@ -2167,10 +2175,10 @@ function un(e) {
2167
2175
  if (!A) break;
2168
2176
  w.push(A[1]), i++;
2169
2177
  }
2170
- const T = w.map((A) => `<li>${re(A)}</li>`).join(""), I = k !== 1 ? ` start="${k}"` : "";
2178
+ const T = w.map((A) => `<li>${re(A)}</li>`).join(""), B = k !== 1 ? ` start="${k}"` : "";
2171
2179
  n.push({
2172
2180
  type: "block",
2173
- html: `<ol class="wm-md-ol"${I}>${T}</ol>`
2181
+ html: `<ol class="wm-md-ol"${B}>${T}</ol>`
2174
2182
  });
2175
2183
  continue;
2176
2184
  }
@@ -2207,7 +2215,7 @@ const Te = {
2207
2215
  inject: {
2208
2216
  // Translator + resolved-language getter shared by the Messenger
2209
2217
  // shell. Fall back to French wording when used standalone.
2210
- t: { default: () => D() },
2218
+ t: { default: () => j() },
2211
2219
  wmLocale: { default: () => () => "fr" }
2212
2220
  },
2213
2221
  props: {
@@ -2289,15 +2297,15 @@ const Te = {
2289
2297
  }, On = {
2290
2298
  key: 1,
2291
2299
  class: "wm-onb__section"
2292
- }, Ln = { class: "wm-onb__section-title" }, In = { class: "wm-onb__search" }, Rn = ["placeholder", "aria-label"], En = { class: "wm-onb__list" }, Bn = ["onClick"], Nn = ["aria-label"], Fn = { class: "wm-onb__thread-body" }, Un = { class: "wm-onb__thread-title" }, Pn = ["innerHTML"], jn = { class: "wm-onb__thread-meta" }, Dn = {
2300
+ }, Ln = { class: "wm-onb__section-title" }, Bn = { class: "wm-onb__search" }, En = ["placeholder", "aria-label"], In = { class: "wm-onb__list" }, Rn = ["onClick"], Nn = ["aria-label"], Fn = { class: "wm-onb__thread-body" }, Un = { class: "wm-onb__thread-title" }, Dn = ["innerHTML"], Pn = { class: "wm-onb__thread-meta" }, jn = {
2293
2301
  key: 0,
2294
2302
  class: "wm-onb__thread-time"
2295
- }, zn = {
2303
+ }, Hn = {
2296
2304
  key: 0,
2297
2305
  class: "wm-onb__empty"
2298
2306
  };
2299
- function Hn(e, t, n, i, r, s) {
2300
- const a = E("AIAvatar");
2307
+ function zn(e, t, n, i, r, s) {
2308
+ const a = I("AIAvatar");
2301
2309
  return c(), u("div", mn, [
2302
2310
  o("div", fn, [
2303
2311
  t[2] || (t[2] = o("svg", {
@@ -2334,7 +2342,7 @@ function Hn(e, t, n, i, r, s) {
2334
2342
  opacity: "0.65"
2335
2343
  })
2336
2344
  ], -1)),
2337
- V(a, {
2345
+ $(a, {
2338
2346
  size: 52,
2339
2347
  "image-url": n.defaultIconUrl
2340
2348
  }, null, 8, ["image-url"]),
@@ -2373,7 +2381,7 @@ function Hn(e, t, n, i, r, s) {
2373
2381
  o("div", {
2374
2382
  class: O(s.quickLinksLayout)
2375
2383
  }, [
2376
- (c(!0), u(R, null, j(n.quickLinks, (l, p) => (c(), u("button", {
2384
+ (c(!0), u(E, null, P(n.quickLinks, (l, p) => (c(), u("button", {
2377
2385
  key: p,
2378
2386
  type: "button",
2379
2387
  class: O(["wm-onb__card", { "wm-onb__card--row": s.isOddQuickLinks }]),
@@ -2395,7 +2403,7 @@ function Hn(e, t, n, i, r, s) {
2395
2403
  ])) : b("", !0),
2396
2404
  n.openThreads.length ? (c(), u("div", On, [
2397
2405
  o("div", Ln, v(s.t("onboarding.recentConversations")), 1),
2398
- o("div", In, [
2406
+ o("div", Bn, [
2399
2407
  t[4] || (t[4] = o("span", { class: "wm-onb__searchIcon" }, [
2400
2408
  o("svg", {
2401
2409
  width: "12",
@@ -2416,12 +2424,12 @@ function Hn(e, t, n, i, r, s) {
2416
2424
  type: "text",
2417
2425
  placeholder: s.t("onboarding.search"),
2418
2426
  "aria-label": s.t("onboarding.search")
2419
- }, null, 8, Rn), [
2427
+ }, null, 8, En), [
2420
2428
  [X, r.query]
2421
2429
  ])
2422
2430
  ]),
2423
- o("div", En, [
2424
- (c(!0), u(R, null, j(s.filteredThreads, (l) => (c(), u("button", {
2431
+ o("div", In, [
2432
+ (c(!0), u(E, null, P(s.filteredThreads, (l) => (c(), u("button", {
2425
2433
  key: l.id,
2426
2434
  type: "button",
2427
2435
  class: "wm-onb__thread",
@@ -2454,10 +2462,10 @@ function Hn(e, t, n, i, r, s) {
2454
2462
  o("span", {
2455
2463
  class: "wm-onb__thread-preview",
2456
2464
  innerHTML: s.renderPreview(l.preview)
2457
- }, null, 8, Pn)
2465
+ }, null, 8, Dn)
2458
2466
  ]),
2459
- o("span", jn, [
2460
- s.formatTs(l._ts) ? (c(), u("span", Dn, v(s.formatTs(l._ts)), 1)) : b("", !0),
2467
+ o("span", Pn, [
2468
+ s.formatTs(l._ts) ? (c(), u("span", jn, v(s.formatTs(l._ts)), 1)) : b("", !0),
2461
2469
  t[6] || (t[6] = o("svg", {
2462
2470
  width: "14",
2463
2471
  height: "14",
@@ -2473,13 +2481,13 @@ function Hn(e, t, n, i, r, s) {
2473
2481
  o("path", { d: "M5 12h14M13 5l7 7-7 7" })
2474
2482
  ], -1))
2475
2483
  ])
2476
- ], 8, Bn))), 128)),
2477
- s.filteredThreads.length ? b("", !0) : (c(), u("div", zn, v(s.t("onboarding.noResults", { query: r.query })), 1))
2484
+ ], 8, Rn))), 128)),
2485
+ s.filteredThreads.length ? b("", !0) : (c(), u("div", Hn, v(s.t("onboarding.noResults", { query: r.query })), 1))
2478
2486
  ])
2479
2487
  ])) : b("", !0)
2480
2488
  ]);
2481
2489
  }
2482
- const qn = /* @__PURE__ */ B(hn, [["render", Hn], ["__scopeId", "data-v-28c0780b"]]);
2490
+ const qn = /* @__PURE__ */ R(hn, [["render", zn], ["__scopeId", "data-v-a85aae63"]]);
2483
2491
  function $n(e) {
2484
2492
  return typeof e != "string" ? "" : e.replace(/`([^`]+)`/g, "$1").replace(/\*\*([^*]+)\*\*/g, "$1").replace(new RegExp("(?<!\\*)\\*([^*]+)\\*(?!\\*)", "g"), "$1").replace(/__([^_]+)__/g, "$1").replace(/\[([^\]]+)\]\([^)]+\)/g, "$1").replace(/\s+/g, " ").trim();
2485
2493
  }
@@ -2574,7 +2582,7 @@ function es(e, t, n, i, r, s) {
2574
2582
  ]),
2575
2583
  o("span", Qn, [
2576
2584
  o("span", Xn, v(n.label), 1),
2577
- s.detailText ? (c(), u(R, { key: 0 }, [
2585
+ s.detailText ? (c(), u(E, { key: 0 }, [
2578
2586
  t[4] || (t[4] = o("span", {
2579
2587
  class: "wm-result__sep",
2580
2588
  "aria-hidden": "true"
@@ -2584,12 +2592,12 @@ function es(e, t, n, i, r, s) {
2584
2592
  ])
2585
2593
  ], 2);
2586
2594
  }
2587
- const ts = /* @__PURE__ */ B(Vn, [["render", es], ["__scopeId", "data-v-7284acd0"]]), ns = {
2595
+ const ts = /* @__PURE__ */ R(Vn, [["render", es], ["__scopeId", "data-v-7284acd0"]]), ns = {
2588
2596
  name: "WmArtifactFormResponse",
2589
2597
  inject: {
2590
2598
  // Translator shared by the Messenger shell; French fallback when
2591
2599
  // the component is used standalone.
2592
- t: { default: () => D() }
2600
+ t: { default: () => j() }
2593
2601
  },
2594
2602
  props: {
2595
2603
  data: { type: Object, required: !0 }
@@ -2623,7 +2631,7 @@ function cs(e, t, n, i, r, s) {
2623
2631
  ])
2624
2632
  ]),
2625
2633
  o("div", os, [
2626
- (c(!0), u(R, null, j(s.fields, (a, l) => (c(), u("div", {
2634
+ (c(!0), u(E, null, P(s.fields, (a, l) => (c(), u("div", {
2627
2635
  key: l,
2628
2636
  class: "wm-art__field"
2629
2637
  }, [
@@ -2638,7 +2646,7 @@ function cs(e, t, n, i, r, s) {
2638
2646
  ])
2639
2647
  ]);
2640
2648
  }
2641
- const ds = /* @__PURE__ */ B(ns, [["render", cs], ["__scopeId", "data-v-713aecf1"]]), us = {
2649
+ const ds = /* @__PURE__ */ R(ns, [["render", cs], ["__scopeId", "data-v-713aecf1"]]), us = {
2642
2650
  name: "WmArtifactInfoCard",
2643
2651
  props: {
2644
2652
  data: { type: Object, required: !0 }
@@ -2690,7 +2698,7 @@ function ks(e, t, n, i, r, s) {
2690
2698
  ]),
2691
2699
  s.hasBody ? (c(), u("div", ys, [
2692
2700
  n.data.body ? (c(), u("div", ws, v(n.data.body), 1)) : b("", !0),
2693
- s.fields.length ? (c(!0), u(R, { key: 1 }, j(s.fields, (a, l) => (c(), u("div", {
2701
+ s.fields.length ? (c(!0), u(E, { key: 1 }, P(s.fields, (a, l) => (c(), u("div", {
2694
2702
  key: l,
2695
2703
  class: "wm-art__field"
2696
2704
  }, [
@@ -2705,7 +2713,7 @@ function ks(e, t, n, i, r, s) {
2705
2713
  ])) : b("", !0)
2706
2714
  ]);
2707
2715
  }
2708
- const Cs = /* @__PURE__ */ B(us, [["render", ks], ["__scopeId", "data-v-7eae0e4a"]]);
2716
+ const Cs = /* @__PURE__ */ R(us, [["render", ks], ["__scopeId", "data-v-7eae0e4a"]]);
2709
2717
  function As(e, t, n) {
2710
2718
  if (!e) return "";
2711
2719
  const i = new Date(e);
@@ -2725,7 +2733,7 @@ const Ss = {
2725
2733
  inject: {
2726
2734
  // Translator + resolved-language getter shared by the Messenger
2727
2735
  // shell. Fall back to French wording when used standalone.
2728
- t: { default: () => D() },
2736
+ t: { default: () => j() },
2729
2737
  wmLocale: { default: () => () => "fr" }
2730
2738
  },
2731
2739
  props: {
@@ -2766,13 +2774,13 @@ const Ss = {
2766
2774
  return /high|haute|élev|elev|critic|critiq|urgent/.test(t) ? 3 : /low|basse|faible|minor/.test(t) ? 1 : 2;
2767
2775
  }
2768
2776
  }
2769
- }, Ms = { class: "wm-art wm-art--ticket" }, Ts = { class: "wm-art__head wm-tk__head" }, xs = { class: "wm-art__title wm-tk__title" }, Os = { class: "wm-tk__sub" }, Ls = { class: "wm-tk__ref" }, Is = {
2777
+ }, Ms = { class: "wm-art wm-art--ticket" }, Ts = { class: "wm-art__head wm-tk__head" }, xs = { class: "wm-art__title wm-tk__title" }, Os = { class: "wm-tk__sub" }, Ls = { class: "wm-tk__ref" }, Bs = {
2770
2778
  key: 0,
2771
2779
  class: "wm-tk__text"
2772
- }, Rs = {
2780
+ }, Es = {
2773
2781
  key: 0,
2774
2782
  class: "wm-art__body"
2775
- }, Es = { class: "wm-art__fieldLabel" }, Bs = ["data-level"], Ns = {
2783
+ }, Is = { class: "wm-art__fieldLabel" }, Rs = ["data-level"], Ns = {
2776
2784
  key: 1,
2777
2785
  class: "wm-tk__date",
2778
2786
  width: "12",
@@ -2824,14 +2832,14 @@ function Us(e, t, n, i, r, s) {
2824
2832
  pe(" " + v(n.data.status.label), 1)
2825
2833
  ], 2)
2826
2834
  ]),
2827
- n.data.body ? (c(), u("div", Is, v(n.data.body), 1)) : b("", !0)
2835
+ n.data.body ? (c(), u("div", Bs, v(n.data.body), 1)) : b("", !0)
2828
2836
  ]),
2829
- s.fields.length ? (c(), u("div", Rs, [
2830
- (c(!0), u(R, null, j(s.fields, (a, l) => (c(), u("div", {
2837
+ s.fields.length ? (c(), u("div", Es, [
2838
+ (c(!0), u(E, null, P(s.fields, (a, l) => (c(), u("div", {
2831
2839
  key: l,
2832
2840
  class: "wm-art__field"
2833
2841
  }, [
2834
- o("div", Es, v(a.label), 1),
2842
+ o("div", Is, v(a.label), 1),
2835
2843
  o("div", {
2836
2844
  class: O([
2837
2845
  "wm-art__fieldValue",
@@ -2868,7 +2876,7 @@ function Us(e, t, n, i, r, s) {
2868
2876
  height: "9",
2869
2877
  rx: "0.5"
2870
2878
  }, null, -1)
2871
- ])], 8, Bs)) : s.isDate(a.label) ? (c(), u("svg", Ns, [...t[3] || (t[3] = [
2879
+ ])], 8, Rs)) : s.isDate(a.label) ? (c(), u("svg", Ns, [...t[3] || (t[3] = [
2872
2880
  o("rect", {
2873
2881
  x: "3",
2874
2882
  y: "4",
@@ -2907,11 +2915,11 @@ function Us(e, t, n, i, r, s) {
2907
2915
  ])) : b("", !0)
2908
2916
  ]);
2909
2917
  }
2910
- const Ps = /* @__PURE__ */ B(Ss, [["render", Us], ["__scopeId", "data-v-5f30c914"]]), js = {
2918
+ const Ds = /* @__PURE__ */ R(Ss, [["render", Us], ["__scopeId", "data-v-5f30c914"]]), Ps = {
2911
2919
  form_response: ds,
2912
2920
  info_card: Cs,
2913
- ticket: Ps
2914
- }, Ds = {
2921
+ ticket: Ds
2922
+ }, js = {
2915
2923
  name: "WmArtifactRenderer",
2916
2924
  props: {
2917
2925
  // Forme : { kind: string, data: any } (le `data` est validé
@@ -2922,23 +2930,23 @@ const Ps = /* @__PURE__ */ B(Ss, [["render", Us], ["__scopeId", "data-v-5f30c914
2922
2930
  component() {
2923
2931
  var t;
2924
2932
  const e = (t = this.artifact) == null ? void 0 : t.kind;
2925
- return e && js[e] || null;
2933
+ return e && Ps[e] || null;
2926
2934
  }
2927
2935
  }
2928
2936
  };
2929
- function zs(e, t, n, i, r, s) {
2930
- return s.component ? (c(), U(je(s.component), {
2937
+ function Hs(e, t, n, i, r, s) {
2938
+ return s.component ? (c(), U(Pe(s.component), {
2931
2939
  key: 0,
2932
2940
  data: n.artifact.data
2933
2941
  }, null, 8, ["data"])) : b("", !0);
2934
2942
  }
2935
- const Hs = /* @__PURE__ */ B(Ds, [["render", zs]]), qs = {
2943
+ const zs = /* @__PURE__ */ R(js, [["render", Hs]]), qs = {
2936
2944
  name: "WmAttachmentPreview",
2937
2945
  inject: {
2938
2946
  signAttachmentFn: { default: null },
2939
2947
  // Translator shared by the Messenger shell; French fallback when
2940
2948
  // the component is used standalone.
2941
- t: { default: () => D() }
2949
+ t: { default: () => j() }
2942
2950
  },
2943
2951
  props: {
2944
2952
  attachment: { type: Object, required: !0 }
@@ -3067,7 +3075,7 @@ function Zs(e, t, n, i, r, s) {
3067
3075
  ], 8, Gs))
3068
3076
  ], 2);
3069
3077
  }
3070
- const er = /* @__PURE__ */ B(qs, [["render", Zs], ["__scopeId", "data-v-0c877a62"]]), tr = {
3078
+ const er = /* @__PURE__ */ R(qs, [["render", Zs], ["__scopeId", "data-v-0c877a62"]]), tr = {
3071
3079
  name: "WmBubble",
3072
3080
  props: {
3073
3081
  role: { type: String, default: "ai" },
@@ -3084,12 +3092,12 @@ function sr(e, t, n, i, r, s) {
3084
3092
  return c(), u("div", {
3085
3093
  class: O(["wm-bubble", "wm-bubble--" + n.role])
3086
3094
  }, [
3087
- De(e.$slots, "default", {}, () => [
3095
+ je(e.$slots, "default", {}, () => [
3088
3096
  o("span", { innerHTML: s.rendered }, null, 8, nr)
3089
3097
  ], !0)
3090
3098
  ], 2);
3091
3099
  }
3092
- const rr = /* @__PURE__ */ B(tr, [["render", sr], ["__scopeId", "data-v-7ab13147"]]), ir = { name: "WmTyping" }, ar = { class: "wm-typing" };
3100
+ const rr = /* @__PURE__ */ R(tr, [["render", sr], ["__scopeId", "data-v-7ab13147"]]), ir = { name: "WmTyping" }, ar = { class: "wm-typing" };
3093
3101
  function or(e, t, n, i, r, s) {
3094
3102
  return c(), u("div", ar, [...t[0] || (t[0] = [
3095
3103
  o("span", { style: { "animation-delay": "0s" } }, null, -1),
@@ -3097,7 +3105,7 @@ function or(e, t, n, i, r, s) {
3097
3105
  o("span", { style: { "animation-delay": "0.4s" } }, null, -1)
3098
3106
  ])]);
3099
3107
  }
3100
- const lr = /* @__PURE__ */ B(ir, [["render", or], ["__scopeId", "data-v-df2447fd"]]);
3108
+ const lr = /* @__PURE__ */ R(ir, [["render", or], ["__scopeId", "data-v-df2447fd"]]);
3101
3109
  function Q(e) {
3102
3110
  return e ? e.client_msg_id || e.id : "";
3103
3111
  }
@@ -3117,12 +3125,12 @@ const cr = {
3117
3125
  Typing: lr,
3118
3126
  ActionResult: ts,
3119
3127
  AttachmentPreview: er,
3120
- ArtifactRenderer: Hs
3128
+ ArtifactRenderer: zs
3121
3129
  },
3122
3130
  inject: {
3123
3131
  // Translator + resolved-language getter shared by the Messenger
3124
3132
  // shell. Fall back to French wording when used standalone.
3125
- t: { default: () => D() },
3133
+ t: { default: () => j() },
3126
3134
  wmLocale: { default: () => () => "fr" }
3127
3135
  },
3128
3136
  props: {
@@ -3168,7 +3176,12 @@ const cr = {
3168
3176
  // par `cornersFor()` pour décider du rétractement des coins
3169
3177
  // intérieurs. Avant la première mesure, `cornersFor` retombe
3170
3178
  // sur la convention kind-based (`card` > `bubble`).
3171
- widthByKey: Object.freeze({})
3179
+ widthByKey: Object.freeze({}),
3180
+ // True dès que l'utilisateur a remonté l'historique au-delà du
3181
+ // seuil "pinned" — affiche un bouton flottant pour revenir en
3182
+ // bas. Recalculé sur chaque `onScroll` et après chaque restore
3183
+ // de position.
3184
+ showScrollDown: !1
3172
3185
  };
3173
3186
  },
3174
3187
  computed: {
@@ -3301,7 +3314,7 @@ const cr = {
3301
3314
  },
3302
3315
  onScroll() {
3303
3316
  const e = this.$refs.scrollEl;
3304
- e && (this.loadingMore || !this.hasMore || this._pendingLoadMore || e.scrollTop <= ur && (this._pendingLoadMore = !0, this.$emit("load-more")));
3317
+ e && (this.showScrollDown = !this.isAtBottom(e), !(this.loadingMore || !this.hasMore) && (this._pendingLoadMore || e.scrollTop <= ur && (this._pendingLoadMore = !0, this.$emit("load-more"))));
3305
3318
  },
3306
3319
  // Capture pre-patch scroll state and restore it on the next tick.
3307
3320
  //
@@ -3502,9 +3515,9 @@ const cr = {
3502
3515
  // doit garder son arrondi.
3503
3516
  cornersFor(e, t) {
3504
3517
  var Z, ee, te;
3505
- const n = e.items, i = (Z = n[t]) == null ? void 0 : Z.kind, r = (ee = n[t - 1]) == null ? void 0 : ee.kind, s = (te = n[t + 1]) == null ? void 0 : te.kind, a = e.role === "user", l = 14, p = 4, k = r == null ? void 0 : r.bottom, w = s == null ? void 0 : s.top, T = this.widthByKey[this.rowKeyOf(e, t)], I = this.widthByKey[this.rowKeyOf(e, t - 1)], A = this.widthByKey[this.rowKeyOf(e, t + 1)], z = 0.5, M = ($, ne, Y) => $ != null && T != null ? $ + z >= T : ne === Y || ne === "card" && Y === "bubble";
3506
- let F = l, N = l, P = l, G = l;
3507
- return a ? (k && (N = p), (w || !s) && (P = p), k && M(I, k, i == null ? void 0 : i.top) && (F = p), w && M(A, w, i == null ? void 0 : i.bottom) && (G = p)) : (k && (F = p), (w || !s) && (G = p), k && M(I, k, i == null ? void 0 : i.top) && (N = p), w && M(A, w, i == null ? void 0 : i.bottom) && (P = p)), { tl: F, tr: N, br: P, bl: G };
3518
+ const n = e.items, i = (Z = n[t]) == null ? void 0 : Z.kind, r = (ee = n[t - 1]) == null ? void 0 : ee.kind, s = (te = n[t + 1]) == null ? void 0 : te.kind, a = e.role === "user", l = 14, p = 4, k = r == null ? void 0 : r.bottom, w = s == null ? void 0 : s.top, T = this.widthByKey[this.rowKeyOf(e, t)], B = this.widthByKey[this.rowKeyOf(e, t - 1)], A = this.widthByKey[this.rowKeyOf(e, t + 1)], H = 0.5, M = (V, ne, Y) => V != null && T != null ? V + H >= T : ne === Y || ne === "card" && Y === "bubble";
3519
+ let F = l, N = l, D = l, G = l;
3520
+ return a ? (k && (N = p), (w || !s) && (D = p), k && M(B, k, i == null ? void 0 : i.top) && (F = p), w && M(A, w, i == null ? void 0 : i.bottom) && (G = p)) : (k && (F = p), (w || !s) && (G = p), k && M(B, k, i == null ? void 0 : i.top) && (N = p), w && M(A, w, i == null ? void 0 : i.bottom) && (D = p)), { tl: F, tr: N, br: D, bl: G };
3508
3521
  },
3509
3522
  // Inline style emitting the four corner CSS variables. Set on
3510
3523
  // `.wm-list__row` so they cascade to Bubble/ActionResult/
@@ -3570,7 +3583,7 @@ const cr = {
3570
3583
  const t = e.items[e.items.length - 1], n = (t == null ? void 0 : t.message) || e.messages[e.messages.length - 1];
3571
3584
  if (!(n != null && n.created_at)) return "";
3572
3585
  try {
3573
- return Le(
3586
+ return Ee(
3574
3587
  new Date(n.created_at),
3575
3588
  oe(this.wmLocale())
3576
3589
  );
@@ -3622,166 +3635,202 @@ const cr = {
3622
3635
  },
3623
3636
  scrollToBottom() {
3624
3637
  const e = this.$refs.scrollEl;
3625
- e && (e.scrollTop = e.scrollHeight);
3638
+ e && (e.scrollTop = e.scrollHeight), this.showScrollDown = !1;
3639
+ },
3640
+ // Variante "user-initiated" du bouton flottant : scroll fluide pour
3641
+ // que le geste se voit, contrairement aux restores automatiques qui
3642
+ // doivent être instantanés.
3643
+ scrollToBottomSmooth() {
3644
+ const e = this.$refs.scrollEl;
3645
+ e && (typeof e.scrollTo == "function" ? e.scrollTo({ top: e.scrollHeight, behavior: "smooth" }) : e.scrollTop = e.scrollHeight, this.showScrollDown = !1);
3626
3646
  }
3627
3647
  }
3628
- }, mr = {
3648
+ }, mr = { class: "wm-list__wrap" }, fr = {
3629
3649
  key: 0,
3630
3650
  class: "wm-list__loadMore",
3631
3651
  role: "status",
3632
3652
  "aria-live": "polite"
3633
- }, fr = { class: "wm-list__loadMore-lbl" }, gr = {
3653
+ }, gr = { class: "wm-list__loadMore-lbl" }, _r = {
3634
3654
  key: 1,
3635
3655
  class: "wm-list__historyEnd"
3636
- }, _r = {
3656
+ }, pr = {
3637
3657
  key: 2,
3638
3658
  class: "wm-list__sep"
3639
- }, pr = { class: "wm-list__sep-label" }, vr = {
3659
+ }, vr = { class: "wm-list__sep-label" }, yr = {
3640
3660
  key: 0,
3641
3661
  class: "wm-list__sep wm-list__sep--unread"
3642
- }, yr = { class: "wm-list__sep-label wm-list__sep-label--unread" }, wr = {
3662
+ }, wr = { class: "wm-list__sep-label wm-list__sep-label--unread" }, br = {
3643
3663
  key: 0,
3644
3664
  class: "wm-list__sysep"
3645
- }, br = { class: "wm-list__sysep-label" }, kr = ["data-row-key"], Cr = {
3665
+ }, kr = { class: "wm-list__sysep-label" }, Cr = ["data-row-key"], Ar = {
3646
3666
  key: 0,
3647
3667
  class: "wm-list__avatarSlot"
3648
- }, Ar = {
3668
+ }, Sr = {
3649
3669
  key: 5,
3650
3670
  class: "wm-list__body"
3651
- }, Sr = { key: 0 }, Mr = {
3671
+ }, Mr = { key: 0 }, Tr = {
3652
3672
  key: 1,
3653
3673
  "aria-hidden": "true"
3654
- }, Tr = { key: 2 }, xr = {
3674
+ }, xr = { key: 2 }, Or = {
3655
3675
  key: 3,
3656
3676
  class: "wm-list__row wm-list__row--ai fade-up"
3657
- }, Or = { class: "wm-list__avatarSlot" };
3658
- function Lr(e, t, n, i, r, s) {
3659
- const a = E("AIAvatar"), l = E("HumanAvatar"), p = E("ActionResult"), k = E("ArtifactRenderer"), w = E("Bubble"), T = E("AttachmentPreview"), I = E("Typing");
3660
- return c(), u("div", {
3661
- ref: "scrollEl",
3662
- class: O(["wm-list", { "wm-list--silent": r.silentFades }]),
3663
- onScrollPassive: t[0] || (t[0] = (...A) => s.onScroll && s.onScroll(...A))
3664
- }, [
3665
- n.loadingMore ? (c(), u("div", mr, [
3666
- t[1] || (t[1] = o("span", {
3667
- class: "wm-list__loadMore-spinner",
3668
- "aria-hidden": "true"
3669
- }, null, -1)),
3670
- o("span", fr, v(s.t("messageList.loadingHistory")), 1)
3671
- ])) : s.historyExhausted ? (c(), u("div", gr, v(s.t("messageList.conversationStart")), 1)) : b("", !0),
3672
- n.dateLabel ? (c(), u("div", _r, [
3673
- t[2] || (t[2] = o("div", { class: "wm-list__line" }, null, -1)),
3674
- o("span", pr, v(n.dateLabel), 1),
3675
- t[3] || (t[3] = o("div", { class: "wm-list__line" }, null, -1))
3676
- ])) : b("", !0),
3677
- (c(!0), u(R, null, j(s.groups, (A, z) => (c(), u(R, {
3678
- key: A.key
3677
+ }, Lr = { class: "wm-list__avatarSlot" }, Br = ["aria-label", "title"];
3678
+ function Er(e, t, n, i, r, s) {
3679
+ const a = I("AIAvatar"), l = I("HumanAvatar"), p = I("ActionResult"), k = I("ArtifactRenderer"), w = I("Bubble"), T = I("AttachmentPreview"), B = I("Typing");
3680
+ return c(), u("div", mr, [
3681
+ o("div", {
3682
+ ref: "scrollEl",
3683
+ class: O(["wm-list", { "wm-list--silent": r.silentFades }]),
3684
+ onScrollPassive: t[0] || (t[0] = (...A) => s.onScroll && s.onScroll(...A))
3679
3685
  }, [
3680
- A.key === s.unreadGroupKey ? (c(), u("div", vr, [
3681
- t[4] || (t[4] = o("div", { class: "wm-list__line wm-list__line--unread" }, null, -1)),
3682
- o("span", yr, v(s.t("messageList.unread")), 1),
3683
- t[5] || (t[5] = o("div", { class: "wm-list__line wm-list__line--unread" }, null, -1))
3686
+ n.loadingMore ? (c(), u("div", fr, [
3687
+ t[2] || (t[2] = o("span", {
3688
+ class: "wm-list__loadMore-spinner",
3689
+ "aria-hidden": "true"
3690
+ }, null, -1)),
3691
+ o("span", gr, v(s.t("messageList.loadingHistory")), 1)
3692
+ ])) : s.historyExhausted ? (c(), u("div", _r, v(s.t("messageList.conversationStart")), 1)) : b("", !0),
3693
+ n.dateLabel ? (c(), u("div", pr, [
3694
+ t[3] || (t[3] = o("div", { class: "wm-list__line" }, null, -1)),
3695
+ o("span", vr, v(n.dateLabel), 1),
3696
+ t[4] || (t[4] = o("div", { class: "wm-list__line" }, null, -1))
3684
3697
  ])) : b("", !0),
3685
- A.role === "system" || A.items.length ? (c(), u("div", {
3686
- key: 1,
3687
- class: O(["wm-list__group", "wm-list__group--" + A.role])
3698
+ (c(!0), u(E, null, P(s.groups, (A, H) => (c(), u(E, {
3699
+ key: A.key
3688
3700
  }, [
3689
- A.role === "system" ? (c(), u("div", wr, [
3690
- t[6] || (t[6] = o("div", { class: "wm-list__line wm-list__line--strong" }, null, -1)),
3691
- o("span", br, v(A.systemLabel), 1),
3692
- t[7] || (t[7] = o("div", { class: "wm-list__line wm-list__line--strong" }, null, -1))
3693
- ])) : (c(), u(R, { key: 1 }, [
3694
- (c(!0), u(R, null, j(A.items, (M, F) => (c(), u("div", {
3695
- key: `${s.messageKey(M.message)}-${M.partKey}`,
3696
- "data-row-key": `${s.messageKey(M.message)}-${M.partKey}`,
3697
- class: O(["wm-list__row fade-up", [
3698
- "wm-list__row--" + A.role,
3699
- {
3700
- "is-pending": M.message._pending,
3701
- "is-failed": M.message._failed
3702
- }
3703
- ]]),
3704
- style: q(s.cornersStyle(A, F))
3705
- }, [
3706
- A.role !== "user" ? (c(), u("div", Cr, [
3707
- F === A.items.length - 1 ? (c(), u(R, { key: 0 }, [
3708
- A.role === "ai" ? (c(), U(a, {
3701
+ A.key === s.unreadGroupKey ? (c(), u("div", yr, [
3702
+ t[5] || (t[5] = o("div", { class: "wm-list__line wm-list__line--unread" }, null, -1)),
3703
+ o("span", wr, v(s.t("messageList.unread")), 1),
3704
+ t[6] || (t[6] = o("div", { class: "wm-list__line wm-list__line--unread" }, null, -1))
3705
+ ])) : b("", !0),
3706
+ A.role === "system" || A.items.length ? (c(), u("div", {
3707
+ key: 1,
3708
+ class: O(["wm-list__group", "wm-list__group--" + A.role])
3709
+ }, [
3710
+ A.role === "system" ? (c(), u("div", br, [
3711
+ t[7] || (t[7] = o("div", { class: "wm-list__line wm-list__line--strong" }, null, -1)),
3712
+ o("span", kr, v(A.systemLabel), 1),
3713
+ t[8] || (t[8] = o("div", { class: "wm-list__line wm-list__line--strong" }, null, -1))
3714
+ ])) : (c(), u(E, { key: 1 }, [
3715
+ (c(!0), u(E, null, P(A.items, (M, F) => (c(), u("div", {
3716
+ key: `${s.messageKey(M.message)}-${M.partKey}`,
3717
+ "data-row-key": `${s.messageKey(M.message)}-${M.partKey}`,
3718
+ class: O(["wm-list__row fade-up", [
3719
+ "wm-list__row--" + A.role,
3720
+ {
3721
+ "is-pending": M.message._pending,
3722
+ "is-failed": M.message._failed
3723
+ }
3724
+ ]]),
3725
+ style: q(s.cornersStyle(A, F))
3726
+ }, [
3727
+ A.role !== "user" ? (c(), u("div", Ar, [
3728
+ F === A.items.length - 1 ? (c(), u(E, { key: 0 }, [
3729
+ A.role === "ai" ? (c(), U(a, {
3730
+ key: 0,
3731
+ size: 26,
3732
+ tail: !0,
3733
+ name: n.aiAgentName,
3734
+ "image-url": n.aiAgentAvatarUrl
3735
+ }, null, 8, ["name", "image-url"])) : (c(), U(l, {
3736
+ key: 1,
3737
+ name: A.agentName,
3738
+ "avatar-url": A.agentAvatarUrl,
3739
+ size: 26,
3740
+ tail: !0
3741
+ }, null, 8, ["name", "avatar-url"]))
3742
+ ], 64)) : b("", !0)
3743
+ ])) : b("", !0),
3744
+ M.renderAs === "action" ? (c(), U(p, {
3745
+ key: 1,
3746
+ state: M.message.payload.state,
3747
+ label: s.actionLabel(M.message),
3748
+ detail: s.actionDetail(M.message)
3749
+ }, null, 8, ["state", "label", "detail"])) : M.renderAs === "admin-pending" ? (c(), U(p, {
3750
+ key: 2,
3751
+ state: "awaiting",
3752
+ label: s.t("messageList.approvalRequestSent"),
3753
+ detail: M.message.text_md || ""
3754
+ }, null, 8, ["label", "detail"])) : M.renderAs === "artifact-of-action" ? (c(), U(k, {
3755
+ key: 3,
3756
+ artifact: s.actionArtifact(M.message)
3757
+ }, null, 8, ["artifact"])) : M.renderAs === "artifact" ? (c(), U(k, {
3758
+ key: 4,
3759
+ artifact: s.artifactOf(M.message)
3760
+ }, null, 8, ["artifact"])) : (c(), u("div", Sr, [
3761
+ M.message.text_md ? (c(), U(w, {
3709
3762
  key: 0,
3710
- size: 26,
3711
- tail: !0,
3712
- name: n.aiAgentName,
3713
- "image-url": n.aiAgentAvatarUrl
3714
- }, null, 8, ["name", "image-url"])) : (c(), U(l, {
3763
+ role: A.role,
3764
+ text: M.message.text_md
3765
+ }, null, 8, ["role", "text"])) : b("", !0),
3766
+ s.attachmentsOf(M.message).length ? (c(), u("div", {
3715
3767
  key: 1,
3716
- name: A.agentName,
3717
- "avatar-url": A.agentAvatarUrl,
3718
- size: 26,
3719
- tail: !0
3720
- }, null, 8, ["name", "avatar-url"]))
3721
- ], 64)) : b("", !0)
3722
- ])) : b("", !0),
3723
- M.renderAs === "action" ? (c(), U(p, {
3724
- key: 1,
3725
- state: M.message.payload.state,
3726
- label: s.actionLabel(M.message),
3727
- detail: s.actionDetail(M.message)
3728
- }, null, 8, ["state", "label", "detail"])) : M.renderAs === "admin-pending" ? (c(), U(p, {
3729
- key: 2,
3730
- state: "awaiting",
3731
- label: s.t("messageList.approvalRequestSent"),
3732
- detail: M.message.text_md || ""
3733
- }, null, 8, ["label", "detail"])) : M.renderAs === "artifact-of-action" ? (c(), U(k, {
3734
- key: 3,
3735
- artifact: s.actionArtifact(M.message)
3736
- }, null, 8, ["artifact"])) : M.renderAs === "artifact" ? (c(), U(k, {
3737
- key: 4,
3738
- artifact: s.artifactOf(M.message)
3739
- }, null, 8, ["artifact"])) : (c(), u("div", Ar, [
3740
- M.message.text_md ? (c(), U(w, {
3741
- key: 0,
3742
- role: A.role,
3743
- text: M.message.text_md
3744
- }, null, 8, ["role", "text"])) : b("", !0),
3745
- s.attachmentsOf(M.message).length ? (c(), u("div", {
3746
- key: 1,
3747
- class: O(["wm-list__atts", {
3748
- "wm-list__atts--align-end": A.role === "user"
3749
- }])
3750
- }, [
3751
- (c(!0), u(R, null, j(s.attachmentsOf(
3752
- M.message
3753
- ), (N, P) => (c(), U(T, {
3754
- key: `${s.messageKey(M.message)}-att-${P}`,
3755
- attachment: N
3756
- }, null, 8, ["attachment"]))), 128))
3757
- ], 2)) : b("", !0)
3758
- ]))
3759
- ], 14, kr))), 128)),
3760
- (A.role !== "user" || s.lastTimeOf(A)) && !s.hasTrailingOverlay(A) ? (c(), u("div", {
3761
- key: 0,
3762
- class: O(["wm-list__meta", { "wm-list__meta--right": A.role === "user" }])
3768
+ class: O(["wm-list__atts", {
3769
+ "wm-list__atts--align-end": A.role === "user"
3770
+ }])
3771
+ }, [
3772
+ (c(!0), u(E, null, P(s.attachmentsOf(
3773
+ M.message
3774
+ ), (N, D) => (c(), U(T, {
3775
+ key: `${s.messageKey(M.message)}-att-${D}`,
3776
+ attachment: N
3777
+ }, null, 8, ["attachment"]))), 128))
3778
+ ], 2)) : b("", !0)
3779
+ ]))
3780
+ ], 14, Cr))), 128)),
3781
+ (A.role !== "user" || s.lastTimeOf(A)) && !s.hasTrailingOverlay(A) ? (c(), u("div", {
3782
+ key: 0,
3783
+ class: O(["wm-list__meta", { "wm-list__meta--right": A.role === "user" }])
3784
+ }, [
3785
+ A.role !== "user" ? (c(), u("span", Mr, v(s.roleLabel(A)), 1)) : b("", !0),
3786
+ A.role !== "user" && s.lastTimeOf(A) ? (c(), u("span", Tr, "•")) : b("", !0),
3787
+ s.lastTimeOf(A) ? (c(), u("span", xr, v(s.lastTimeOf(A)), 1)) : b("", !0)
3788
+ ], 2)) : b("", !0)
3789
+ ], 64))
3790
+ ], 2)) : b("", !0)
3791
+ ], 64))), 128)),
3792
+ n.streamingActive ? (c(), u("div", Or, [
3793
+ o("div", Lr, [
3794
+ $(a, {
3795
+ size: 26,
3796
+ tail: !0,
3797
+ name: n.aiAgentName,
3798
+ "image-url": n.aiAgentAvatarUrl
3799
+ }, null, 8, ["name", "image-url"])
3800
+ ]),
3801
+ $(B)
3802
+ ])) : b("", !0)
3803
+ ], 34),
3804
+ $(Le, { name: "wm-scrollDown" }, {
3805
+ default: Be(() => [
3806
+ r.showScrollDown ? (c(), u("button", {
3807
+ key: 0,
3808
+ type: "button",
3809
+ class: "wm-list__scrollDown",
3810
+ "aria-label": s.t("messageList.scrollToBottom"),
3811
+ title: s.t("messageList.scrollToBottom"),
3812
+ onClick: t[1] || (t[1] = (...A) => s.scrollToBottomSmooth && s.scrollToBottomSmooth(...A))
3813
+ }, [...t[9] || (t[9] = [
3814
+ o("svg", {
3815
+ width: "14",
3816
+ height: "14",
3817
+ viewBox: "0 0 24 24",
3818
+ fill: "none",
3819
+ stroke: "currentColor",
3820
+ "stroke-width": "2.2",
3821
+ "stroke-linecap": "round",
3822
+ "stroke-linejoin": "round",
3823
+ "aria-hidden": "true"
3763
3824
  }, [
3764
- A.role !== "user" ? (c(), u("span", Sr, v(s.roleLabel(A)), 1)) : b("", !0),
3765
- A.role !== "user" && s.lastTimeOf(A) ? (c(), u("span", Mr, "·")) : b("", !0),
3766
- s.lastTimeOf(A) ? (c(), u("span", Tr, v(s.lastTimeOf(A)), 1)) : b("", !0)
3767
- ], 2)) : b("", !0)
3768
- ], 64))
3769
- ], 2)) : b("", !0)
3770
- ], 64))), 128)),
3771
- n.streamingActive ? (c(), u("div", xr, [
3772
- o("div", Or, [
3773
- V(a, {
3774
- size: 26,
3775
- tail: !0,
3776
- name: n.aiAgentName,
3777
- "image-url": n.aiAgentAvatarUrl
3778
- }, null, 8, ["name", "image-url"])
3825
+ o("path", { d: "M6 9l6 6 6-6" })
3826
+ ], -1)
3827
+ ])], 8, Br)) : b("", !0)
3779
3828
  ]),
3780
- V(I)
3781
- ])) : b("", !0)
3782
- ], 34);
3829
+ _: 1
3830
+ })
3831
+ ]);
3783
3832
  }
3784
- const Ir = /* @__PURE__ */ B(hr, [["render", Lr], ["__scopeId", "data-v-d769b193"]]), he = typeof navigator < "u" && !!navigator.mediaDevices && typeof navigator.mediaDevices.getDisplayMedia == "function", be = typeof window < "u" && typeof window.MediaRecorder < "u";
3833
+ const Ir = /* @__PURE__ */ R(hr, [["render", Er], ["__scopeId", "data-v-9590b3b2"]]), he = typeof navigator < "u" && !!navigator.mediaDevices && typeof navigator.mediaDevices.getDisplayMedia == "function", be = typeof window < "u" && typeof window.MediaRecorder < "u";
3785
3834
  function Rr() {
3786
3835
  return be && [
3787
3836
  "video/webm;codecs=vp9,opus",
@@ -3793,7 +3842,7 @@ function Rr() {
3793
3842
  return (i = (n = window.MediaRecorder).isTypeSupported) == null ? void 0 : i.call(n, t);
3794
3843
  }) || "";
3795
3844
  }
3796
- function Be({ audio: e }) {
3845
+ function Fe({ audio: e }) {
3797
3846
  return {
3798
3847
  video: !0,
3799
3848
  audio: !!e,
@@ -3805,18 +3854,18 @@ function Be({ audio: e }) {
3805
3854
  function za(e) {
3806
3855
  return e ? e.startsWith("image/") ? "image" : e.startsWith("video/") ? "video" : "file" : "file";
3807
3856
  }
3808
- async function Er() {
3857
+ async function Nr() {
3809
3858
  if (!he) return null;
3810
3859
  let e;
3811
3860
  try {
3812
3861
  e = await navigator.mediaDevices.getDisplayMedia(
3813
- Be({ audio: !1 })
3862
+ Fe({ audio: !1 })
3814
3863
  );
3815
3864
  } catch (t) {
3816
3865
  return (t == null ? void 0 : t.name) !== "NotAllowedError" && console.error("[media] screenshot picker", t), null;
3817
3866
  }
3818
3867
  try {
3819
- return await Br(e);
3868
+ return await Fr(e);
3820
3869
  } catch (t) {
3821
3870
  return console.error("[media] screenshot capture", t), null;
3822
3871
  } finally {
@@ -3825,7 +3874,7 @@ async function Er() {
3825
3874
  });
3826
3875
  }
3827
3876
  }
3828
- async function Br(e) {
3877
+ async function Fr(e) {
3829
3878
  const t = document.createElement("video");
3830
3879
  t.muted = !0, t.playsInline = !0, t.srcObject = e, await t.play(), await new Promise((l) => requestAnimationFrame(l));
3831
3880
  const n = t.videoWidth || 1280, i = t.videoHeight || 720, r = document.createElement("canvas");
@@ -3838,13 +3887,13 @@ async function Br(e) {
3838
3887
  }), a = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-").slice(0, 19);
3839
3888
  return new File([s], `capture-${a}.png`, { type: "image/png" });
3840
3889
  }
3841
- async function Nr(e = {}) {
3890
+ async function Ur(e = {}) {
3842
3891
  var k;
3843
3892
  if (!he || !be) return null;
3844
3893
  let t;
3845
3894
  try {
3846
3895
  t = await navigator.mediaDevices.getDisplayMedia(
3847
- Be({ audio: !0 })
3896
+ Fe({ audio: !0 })
3848
3897
  );
3849
3898
  } catch (w) {
3850
3899
  return (w == null ? void 0 : w.name) !== "NotAllowedError" && console.error("[media] record picker", w), null;
@@ -3864,11 +3913,11 @@ async function Nr(e = {}) {
3864
3913
  w.data && w.data.size > 0 && r.push(w.data);
3865
3914
  }), i.addEventListener("stop", () => {
3866
3915
  var w, T;
3867
- if (s && clearInterval(s), t.getTracks().forEach((I) => {
3868
- I.stop();
3916
+ if (s && clearInterval(s), t.getTracks().forEach((B) => {
3917
+ B.stop();
3869
3918
  }), r.length) {
3870
- const I = i.mimeType || n || "video/webm", A = new Blob(r, { type: I }), z = /mp4/.test(I) ? "mp4" : "webm", M = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-").slice(0, 19), F = new File([A], `ecran-${M}.${z}`, {
3871
- type: I
3919
+ const B = i.mimeType || n || "video/webm", A = new Blob(r, { type: B }), H = /mp4/.test(B) ? "mp4" : "webm", M = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-").slice(0, 19), F = new File([A], `ecran-${M}.${H}`, {
3920
+ type: B
3872
3921
  });
3873
3922
  (w = e.onfinalize) == null || w.call(e, F);
3874
3923
  } else
@@ -3903,7 +3952,7 @@ async function Nr(e = {}) {
3903
3952
  }
3904
3953
  };
3905
3954
  }
3906
- const Fr = [
3955
+ const Dr = [
3907
3956
  {
3908
3957
  action: "file",
3909
3958
  labelKey: "composer.attachFile",
@@ -3919,18 +3968,21 @@ const Fr = [
3919
3968
  labelKey: "composer.recordScreen",
3920
3969
  path: "M23 7l-7 5 7 5V7z M1 5a2 2 0 012-2h12a2 2 0 012 2v14a2 2 0 01-2 2H3a2 2 0 01-2-2V5z"
3921
3970
  }
3922
- ], Ur = {
3971
+ ], Pr = {
3923
3972
  name: "WmComposer",
3924
3973
  inject: {
3925
3974
  // Translator shared by the Messenger shell; French fallback when
3926
3975
  // the component is used standalone.
3927
- t: { default: () => D() }
3976
+ t: { default: () => j() }
3928
3977
  },
3929
3978
  props: {
3930
3979
  modelValue: { type: String, default: "" },
3931
3980
  placeholder: { type: String, default: "Écrivez votre message…" },
3932
3981
  disabled: { type: Boolean, default: !1 },
3933
- attachLabel: { type: String, default: "Joindre" }
3982
+ attachLabel: { type: String, default: "Joindre" },
3983
+ // 'floating' | 'sheet' | 'embedded' — only 'sheet' enables the
3984
+ // visualViewport-based keyboard tracking (mobile fullscreen mode).
3985
+ displayMode: { type: String, default: "floating" }
3934
3986
  },
3935
3987
  emits: ["update:modelValue", "send", "attach"],
3936
3988
  data() {
@@ -3939,7 +3991,10 @@ const Fr = [
3939
3991
  attachOpen: !1,
3940
3992
  recording: !1,
3941
3993
  recordingElapsed: 0,
3942
- recorder: null
3994
+ recorder: null,
3995
+ // Pixels the composer is lifted to stay above the soft keyboard.
3996
+ // Driven by visualViewport — 0 when no keyboard.
3997
+ kbOffset: 0
3943
3998
  };
3944
3999
  },
3945
4000
  computed: {
@@ -3947,7 +4002,7 @@ const Fr = [
3947
4002
  return !this.disabled && !!this.local.trim();
3948
4003
  },
3949
4004
  attachItems() {
3950
- return Fr.map((e) => ({
4005
+ return Dr.map((e) => ({
3951
4006
  ...e,
3952
4007
  label: this.t(e.labelKey),
3953
4008
  disabled: e.action === "screenshot" && !he || e.action === "record" && (!he || !be)
@@ -3967,7 +4022,7 @@ const Fr = [
3967
4022
  }
3968
4023
  },
3969
4024
  mounted() {
3970
- this.autosize();
4025
+ this.autosize(), this.displayMode === "sheet" && this.setupKeyboardTracking();
3971
4026
  },
3972
4027
  beforeUnmount() {
3973
4028
  if (this.recorder)
@@ -3975,6 +4030,7 @@ const Fr = [
3975
4030
  this.recorder.stop();
3976
4031
  } catch {
3977
4032
  }
4033
+ this.teardownKeyboardTracking();
3978
4034
  },
3979
4035
  methods: {
3980
4036
  // Imperatively move the caret into the textarea — called by the
@@ -4020,13 +4076,13 @@ const Fr = [
4020
4076
  },
4021
4077
  async captureScreenshot() {
4022
4078
  if (this.disabled) return;
4023
- const e = await Er();
4079
+ const e = await Nr();
4024
4080
  e && this.$emit("attach", e);
4025
4081
  },
4026
4082
  async startRecording() {
4027
4083
  if (this.recording || this.disabled) return;
4028
4084
  this.recordingElapsed = 0;
4029
- const e = await Nr({
4085
+ const e = await Ur({
4030
4086
  onstart: () => {
4031
4087
  this.recording = !0;
4032
4088
  },
@@ -4049,29 +4105,49 @@ const Fr = [
4049
4105
  } catch (e) {
4050
4106
  console.error("[composer] stop recording", e);
4051
4107
  }
4108
+ },
4109
+ // Track the soft keyboard via visualViewport so we can lift only the
4110
+ // composer above it — the message list stays put behind. Works inside
4111
+ // the iframe because each frame has its own visualViewport.
4112
+ setupKeyboardTracking() {
4113
+ const e = window.visualViewport;
4114
+ e && (this._vvHandler = () => {
4115
+ const t = Math.max(
4116
+ 0,
4117
+ window.innerHeight - e.height - e.offsetTop
4118
+ );
4119
+ this.kbOffset = t;
4120
+ }, e.addEventListener("resize", this._vvHandler), e.addEventListener("scroll", this._vvHandler));
4121
+ },
4122
+ teardownKeyboardTracking() {
4123
+ const e = window.visualViewport;
4124
+ !e || !this._vvHandler || (e.removeEventListener("resize", this._vvHandler), e.removeEventListener("scroll", this._vvHandler), this._vvHandler = null);
4052
4125
  }
4053
4126
  }
4054
- }, Pr = { class: "wm-compose-wrap" }, jr = {
4127
+ }, jr = {
4055
4128
  key: 0,
4056
4129
  class: "wm-rec"
4057
- }, Dr = { class: "wm-rec__lbl" }, zr = {
4130
+ }, Hr = { class: "wm-rec__lbl" }, zr = {
4058
4131
  key: 1,
4059
4132
  class: "wm-compose__menu",
4060
4133
  role: "menu"
4061
- }, Hr = ["disabled", "onClick"], qr = { class: "wm-compose__menuIcon" }, $r = {
4134
+ }, qr = ["disabled", "onClick"], $r = { class: "wm-compose__menuIcon" }, Vr = {
4062
4135
  viewBox: "0 0 24 24",
4063
4136
  width: "14",
4064
4137
  height: "14",
4065
4138
  "aria-hidden": "true"
4066
- }, Vr = ["d"], Kr = ["placeholder", "disabled"], Wr = { class: "wm-compose__actions" }, Gr = ["title", "aria-label", "disabled"], Yr = ["disabled", "aria-label"];
4067
- function Jr(e, t, n, i, r, s) {
4068
- return c(), u("div", Pr, [
4139
+ }, Kr = ["d"], Wr = ["placeholder", "disabled"], Gr = { class: "wm-compose__actions" }, Yr = ["title", "aria-label", "disabled"], Jr = ["disabled", "aria-label"];
4140
+ function Qr(e, t, n, i, r, s) {
4141
+ return c(), u("div", {
4142
+ class: O(["wm-compose-wrap", { "wm-compose-wrap--sheet": n.displayMode === "sheet" }]),
4143
+ style: q(r.kbOffset ? { transform: `translateY(-${r.kbOffset}px)` } : null)
4144
+ }, [
4069
4145
  r.recording ? (c(), u("div", jr, [
4070
4146
  t[8] || (t[8] = o("span", {
4071
4147
  class: "wm-rec__dot",
4072
4148
  "aria-hidden": "true"
4073
4149
  }, null, -1)),
4074
- o("span", Dr, v(s.t("composer.recording", { time: s.recordingElapsedLabel })), 1),
4150
+ o("span", Hr, v(s.t("composer.recording", { time: s.recordingElapsedLabel })), 1),
4075
4151
  o("button", {
4076
4152
  type: "button",
4077
4153
  class: "wm-rec__stop",
@@ -4095,15 +4171,15 @@ function Jr(e, t, n, i, r, s) {
4095
4171
  onClick: t[2] || (t[2] = (a) => r.attachOpen = !1)
4096
4172
  })) : b("", !0),
4097
4173
  r.attachOpen ? (c(), u("div", zr, [
4098
- (c(!0), u(R, null, j(s.attachItems, (a) => (c(), u("button", {
4174
+ (c(!0), u(E, null, P(s.attachItems, (a) => (c(), u("button", {
4099
4175
  key: a.action,
4100
4176
  type: "button",
4101
4177
  class: "wm-compose__menuItem",
4102
4178
  disabled: a.disabled,
4103
4179
  onClick: (l) => s.onAttachAction(a.action)
4104
4180
  }, [
4105
- o("span", qr, [
4106
- (c(), u("svg", $r, [
4181
+ o("span", $r, [
4182
+ (c(), u("svg", Vr, [
4107
4183
  o("path", {
4108
4184
  d: a.path,
4109
4185
  stroke: "currentColor",
@@ -4111,11 +4187,11 @@ function Jr(e, t, n, i, r, s) {
4111
4187
  "stroke-linecap": "round",
4112
4188
  "stroke-linejoin": "round",
4113
4189
  fill: "none"
4114
- }, null, 8, Vr)
4190
+ }, null, 8, Kr)
4115
4191
  ]))
4116
4192
  ]),
4117
4193
  o("span", null, v(a.label), 1)
4118
- ], 8, Hr))), 128))
4194
+ ], 8, qr))), 128))
4119
4195
  ])) : b("", !0),
4120
4196
  K(o("textarea", {
4121
4197
  ref: "inputEl",
@@ -4126,10 +4202,10 @@ function Jr(e, t, n, i, r, s) {
4126
4202
  disabled: n.disabled,
4127
4203
  onKeydown: t[4] || (t[4] = (...a) => s.onKeydown && s.onKeydown(...a)),
4128
4204
  onInput: t[5] || (t[5] = (...a) => s.autosize && s.autosize(...a))
4129
- }, null, 40, Kr), [
4205
+ }, null, 40, Wr), [
4130
4206
  [X, r.local]
4131
4207
  ]),
4132
- o("div", Wr, [
4208
+ o("div", Gr, [
4133
4209
  o("button", {
4134
4210
  type: "button",
4135
4211
  class: O(["wm-compose__icon", { "is-open": r.attachOpen }]),
@@ -4151,7 +4227,7 @@ function Jr(e, t, n, i, r, s) {
4151
4227
  }, [
4152
4228
  o("path", { d: "M21.44 11.05l-9.19 9.19a6 6 0 01-8.49-8.49l9.19-9.19a4 4 0 015.66 5.66l-9.2 9.19a2 2 0 01-2.83-2.83l8.49-8.48" })
4153
4229
  ], -1)
4154
- ])], 10, Gr),
4230
+ ])], 10, Yr),
4155
4231
  o("button", {
4156
4232
  type: "submit",
4157
4233
  class: O(["wm-compose__send", { "is-empty": !s.canSend }]),
@@ -4171,12 +4247,12 @@ function Jr(e, t, n, i, r, s) {
4171
4247
  }, [
4172
4248
  o("path", { d: "M22 2L11 13M22 2l-7 20-4-9-9-4 20-7z" })
4173
4249
  ], -1)
4174
- ])], 10, Yr)
4250
+ ])], 10, Jr)
4175
4251
  ])
4176
4252
  ], 34)
4177
- ]);
4253
+ ], 6);
4178
4254
  }
4179
- const Qr = /* @__PURE__ */ B(Ur, [["render", Jr], ["__scopeId", "data-v-b88b1cbb"]]), Xr = {
4255
+ const Xr = /* @__PURE__ */ R(Pr, [["render", Qr], ["__scopeId", "data-v-d6c1e5e7"]]), Zr = {
4180
4256
  name: "WmSuggestionChips",
4181
4257
  props: {
4182
4258
  items: { type: Array, default: () => [] },
@@ -4193,28 +4269,28 @@ const Qr = /* @__PURE__ */ B(Ur, [["render", Jr], ["__scopeId", "data-v-b88b1cbb
4193
4269
  return this.items.map((e) => (e == null ? void 0 : e.label) || (e == null ? void 0 : e.text) || "").join("§");
4194
4270
  }
4195
4271
  }
4196
- }, Zr = ["onClick"];
4197
- function ei(e, t, n, i, r, s) {
4272
+ }, ei = ["onClick"];
4273
+ function ti(e, t, n, i, r, s) {
4198
4274
  return n.items.length ? (c(), u("div", {
4199
4275
  key: s.batchKey,
4200
4276
  class: "wm-chips"
4201
4277
  }, [
4202
- (c(!0), u(R, null, j(n.items, (a, l) => (c(), u("button", {
4278
+ (c(!0), u(E, null, P(n.items, (a, l) => (c(), u("button", {
4203
4279
  key: l,
4204
4280
  type: "button",
4205
4281
  class: "wm-chip",
4206
4282
  style: q({ animationDelay: n.baseDelay + l * n.stepDelay + "ms" }),
4207
4283
  onClick: (p) => e.$emit("select", a)
4208
- }, v(a.label), 13, Zr))), 128))
4284
+ }, v(a.label), 13, ei))), 128))
4209
4285
  ])) : b("", !0);
4210
4286
  }
4211
- const ti = /* @__PURE__ */ B(Xr, [["render", ei], ["__scopeId", "data-v-47ad8085"]]), ni = {
4287
+ const ni = /* @__PURE__ */ R(Zr, [["render", ti], ["__scopeId", "data-v-47ad8085"]]), si = {
4212
4288
  name: "WmApprovalCard",
4213
4289
  components: { AIAvatar: le },
4214
4290
  inject: {
4215
4291
  // Translator shared by the Messenger shell; French fallback when
4216
4292
  // the component is used standalone.
4217
- t: { default: () => D() }
4293
+ t: { default: () => j() }
4218
4294
  },
4219
4295
  props: {
4220
4296
  action: { type: String, required: !0 },
@@ -4252,27 +4328,27 @@ const ti = /* @__PURE__ */ B(Xr, [["render", ei], ["__scopeId", "data-v-47ad8085
4252
4328
  return ((e = this.rejectCallback) == null ? void 0 : e.label) || this.t("approval.reject");
4253
4329
  }
4254
4330
  }
4255
- }, si = { class: "wm-approval" }, ri = { class: "wm-approval__head" }, ii = { class: "wm-approval__icon" }, ai = { class: "wm-approval__main" }, oi = { class: "wm-approval__title" }, li = {
4331
+ }, ri = { class: "wm-approval" }, ii = { class: "wm-approval__head" }, ai = { class: "wm-approval__icon" }, oi = { class: "wm-approval__main" }, li = { class: "wm-approval__title" }, ci = {
4256
4332
  key: 0,
4257
4333
  class: "wm-approval__detail"
4258
- }, ci = { class: "wm-approval__actions" };
4259
- function di(e, t, n, i, r, s) {
4260
- const a = E("AIAvatar");
4261
- return c(), u("div", si, [
4262
- o("div", ri, [
4263
- o("div", ii, [
4264
- V(a, {
4334
+ }, di = { class: "wm-approval__actions" };
4335
+ function ui(e, t, n, i, r, s) {
4336
+ const a = I("AIAvatar");
4337
+ return c(), u("div", ri, [
4338
+ o("div", ii, [
4339
+ o("div", ai, [
4340
+ $(a, {
4265
4341
  size: 24,
4266
4342
  name: n.agentName,
4267
4343
  "image-url": n.agentAvatarUrl
4268
4344
  }, null, 8, ["name", "image-url"])
4269
4345
  ]),
4270
- o("div", ai, [
4271
- o("div", oi, v(n.action), 1),
4272
- n.detail ? (c(), u("div", li, v(n.detail), 1)) : b("", !0)
4346
+ o("div", oi, [
4347
+ o("div", li, v(n.action), 1),
4348
+ n.detail ? (c(), u("div", ci, v(n.detail), 1)) : b("", !0)
4273
4349
  ])
4274
4350
  ]),
4275
- o("div", ci, [
4351
+ o("div", di, [
4276
4352
  s.rejectId ? (c(), u("button", {
4277
4353
  key: 0,
4278
4354
  type: "button",
@@ -4288,9 +4364,9 @@ function di(e, t, n, i, r, s) {
4288
4364
  ])
4289
4365
  ]);
4290
4366
  }
4291
- const ui = /* @__PURE__ */ B(ni, [["render", di], ["__scopeId", "data-v-a2bed37e"]]);
4367
+ const hi = /* @__PURE__ */ R(si, [["render", ui], ["__scopeId", "data-v-a2bed37e"]]);
4292
4368
  let xe = 0;
4293
- const hi = /* @__PURE__ */ new Set([
4369
+ const mi = /* @__PURE__ */ new Set([
4294
4370
  "text",
4295
4371
  "textarea",
4296
4372
  "number",
@@ -4298,13 +4374,13 @@ const hi = /* @__PURE__ */ new Set([
4298
4374
  "select",
4299
4375
  "multiselect",
4300
4376
  "date"
4301
- ]), mi = {
4377
+ ]), fi = {
4302
4378
  name: "WmFormCard",
4303
4379
  components: { AIAvatar: le },
4304
4380
  inject: {
4305
4381
  // Translator shared by the Messenger shell; French fallback when
4306
4382
  // the component is used standalone.
4307
- t: { default: () => D() }
4383
+ t: { default: () => j() }
4308
4384
  },
4309
4385
  props: {
4310
4386
  form: { type: Object, required: !0 },
@@ -4328,7 +4404,7 @@ const hi = /* @__PURE__ */ new Set([
4328
4404
  // douteux.
4329
4405
  normalizedFields() {
4330
4406
  var t;
4331
- return (Array.isArray((t = this.form) == null ? void 0 : t.fields) ? this.form.fields : []).filter((n) => !(!(n != null && n.key) || !(n != null && n.label) || !hi.has(n == null ? void 0 : n.type) || (n.type === "select" || n.type === "multiselect") && (!Array.isArray(n.options) || n.options.length === 0)));
4407
+ return (Array.isArray((t = this.form) == null ? void 0 : t.fields) ? this.form.fields : []).filter((n) => !(!(n != null && n.key) || !(n != null && n.label) || !mi.has(n == null ? void 0 : n.type) || (n.type === "select" || n.type === "multiselect") && (!Array.isArray(n.options) || n.options.length === 0)));
4332
4408
  }
4333
4409
  },
4334
4410
  created() {
@@ -4381,54 +4457,54 @@ const hi = /* @__PURE__ */ new Set([
4381
4457
  }
4382
4458
  }
4383
4459
  }
4384
- }, fi = { class: "wm-form" }, gi = { class: "wm-form__head" }, _i = { class: "wm-form__icon" }, pi = { class: "wm-form__main" }, vi = { class: "wm-form__title" }, yi = {
4460
+ }, gi = { class: "wm-form" }, _i = { class: "wm-form__head" }, pi = { class: "wm-form__icon" }, vi = { class: "wm-form__main" }, yi = { class: "wm-form__title" }, wi = {
4385
4461
  key: 0,
4386
4462
  class: "wm-form__detail"
4387
- }, wi = ["for"], bi = {
4463
+ }, bi = ["for"], ki = {
4388
4464
  key: 0,
4389
4465
  class: "wm-form__req",
4390
4466
  "aria-hidden": "true"
4391
- }, ki = ["id", "onUpdate:modelValue", "placeholder", "required", "disabled"], Ci = ["id", "onUpdate:modelValue", "placeholder", "required", "disabled"], Ai = ["id", "onUpdate:modelValue", "placeholder", "required", "disabled"], Si = ["id", "onUpdate:modelValue", "required", "disabled"], Mi = {
4467
+ }, Ci = ["id", "onUpdate:modelValue", "placeholder", "required", "disabled"], Ai = ["id", "onUpdate:modelValue", "placeholder", "required", "disabled"], Si = ["id", "onUpdate:modelValue", "placeholder", "required", "disabled"], Mi = ["id", "onUpdate:modelValue", "required", "disabled"], Ti = {
4392
4468
  key: 4,
4393
4469
  class: "wm-form__bool"
4394
- }, Ti = ["id", "onUpdate:modelValue", "disabled"], xi = ["id", "onUpdate:modelValue", "required", "disabled"], Oi = {
4470
+ }, xi = ["id", "onUpdate:modelValue", "disabled"], Oi = ["id", "onUpdate:modelValue", "required", "disabled"], Li = {
4395
4471
  value: "",
4396
4472
  disabled: ""
4397
- }, Li = ["value"], Ii = {
4473
+ }, Bi = ["value"], Ei = {
4398
4474
  key: 6,
4399
4475
  class: "wm-form__multi"
4400
- }, Ri = ["value", "checked", "disabled", "onChange"], Ei = {
4476
+ }, Ii = ["value", "checked", "disabled", "onChange"], Ri = {
4401
4477
  key: 0,
4402
4478
  class: "wm-form__err"
4403
- }, Bi = ["disabled"], Ni = {
4479
+ }, Ni = ["disabled"], Fi = {
4404
4480
  key: 0,
4405
4481
  class: "wm-form__spinner",
4406
4482
  "aria-hidden": "true"
4407
- }, Fi = {
4483
+ }, Ui = {
4408
4484
  key: 2,
4409
4485
  class: "wm-form__doneLbl"
4410
4486
  };
4411
- function Ui(e, t, n, i, r, s) {
4412
- const a = E("AIAvatar");
4413
- return c(), u("div", fi, [
4414
- o("div", gi, [
4415
- o("div", _i, [
4416
- V(a, {
4487
+ function Di(e, t, n, i, r, s) {
4488
+ const a = I("AIAvatar");
4489
+ return c(), u("div", gi, [
4490
+ o("div", _i, [
4491
+ o("div", pi, [
4492
+ $(a, {
4417
4493
  size: 24,
4418
4494
  name: n.agentName,
4419
4495
  "image-url": n.agentAvatarUrl
4420
4496
  }, null, 8, ["name", "image-url"])
4421
4497
  ]),
4422
- o("div", pi, [
4423
- o("div", vi, v(n.form.title || s.t("form.title")), 1),
4424
- n.form.description ? (c(), u("div", yi, v(n.form.description), 1)) : b("", !0)
4498
+ o("div", vi, [
4499
+ o("div", yi, v(n.form.title || s.t("form.title")), 1),
4500
+ n.form.description ? (c(), u("div", wi, v(n.form.description), 1)) : b("", !0)
4425
4501
  ])
4426
4502
  ]),
4427
4503
  o("form", {
4428
4504
  class: "wm-form__body",
4429
4505
  onSubmit: t[0] || (t[0] = J((...l) => s.onSubmit && s.onSubmit(...l), ["prevent"]))
4430
4506
  }, [
4431
- (c(!0), u(R, null, j(s.normalizedFields, (l) => (c(), u("div", {
4507
+ (c(!0), u(E, null, P(s.normalizedFields, (l) => (c(), u("div", {
4432
4508
  key: l.key,
4433
4509
  class: "wm-form__field"
4434
4510
  }, [
@@ -4437,8 +4513,8 @@ function Ui(e, t, n, i, r, s) {
4437
4513
  class: "wm-form__label"
4438
4514
  }, [
4439
4515
  pe(v(l.label), 1),
4440
- l.required ? (c(), u("span", bi, "*")) : b("", !0)
4441
- ], 8, wi),
4516
+ l.required ? (c(), u("span", ki, "*")) : b("", !0)
4517
+ ], 8, bi),
4442
4518
  l.type === "text" ? K((c(), u("input", {
4443
4519
  key: 0,
4444
4520
  id: `wm-f-${r._uid}-${l.key}`,
@@ -4448,7 +4524,7 @@ function Ui(e, t, n, i, r, s) {
4448
4524
  placeholder: l.placeholder || "",
4449
4525
  required: l.required,
4450
4526
  disabled: n.readOnly || r.busy
4451
- }, null, 8, ki)), [
4527
+ }, null, 8, Ci)), [
4452
4528
  [X, r.values[l.key]]
4453
4529
  ]) : l.type === "textarea" ? K((c(), u("textarea", {
4454
4530
  key: 1,
@@ -4459,7 +4535,7 @@ function Ui(e, t, n, i, r, s) {
4459
4535
  placeholder: l.placeholder || "",
4460
4536
  required: l.required,
4461
4537
  disabled: n.readOnly || r.busy
4462
- }, null, 8, Ci)), [
4538
+ }, null, 8, Ai)), [
4463
4539
  [X, r.values[l.key]]
4464
4540
  ]) : l.type === "number" ? K((c(), u("input", {
4465
4541
  key: 2,
@@ -4470,7 +4546,7 @@ function Ui(e, t, n, i, r, s) {
4470
4546
  placeholder: l.placeholder || "",
4471
4547
  required: l.required,
4472
4548
  disabled: n.readOnly || r.busy
4473
- }, null, 8, Ai)), [
4549
+ }, null, 8, Si)), [
4474
4550
  [
4475
4551
  X,
4476
4552
  r.values[l.key],
@@ -4485,16 +4561,16 @@ function Ui(e, t, n, i, r, s) {
4485
4561
  class: "wm-form__input",
4486
4562
  required: l.required,
4487
4563
  disabled: n.readOnly || r.busy
4488
- }, null, 8, Si)), [
4564
+ }, null, 8, Mi)), [
4489
4565
  [X, r.values[l.key]]
4490
- ]) : l.type === "boolean" ? (c(), u("label", Mi, [
4566
+ ]) : l.type === "boolean" ? (c(), u("label", Ti, [
4491
4567
  K(o("input", {
4492
4568
  id: `wm-f-${r._uid}-${l.key}`,
4493
4569
  "onUpdate:modelValue": (p) => r.values[l.key] = p,
4494
4570
  type: "checkbox",
4495
4571
  disabled: n.readOnly || r.busy
4496
- }, null, 8, Ti), [
4497
- [ze, r.values[l.key]]
4572
+ }, null, 8, xi), [
4573
+ [He, r.values[l.key]]
4498
4574
  ]),
4499
4575
  o("span", null, v(l.placeholder || s.t("common.yes")), 1)
4500
4576
  ])) : l.type === "select" ? K((c(), u("select", {
@@ -4505,15 +4581,15 @@ function Ui(e, t, n, i, r, s) {
4505
4581
  required: l.required,
4506
4582
  disabled: n.readOnly || r.busy
4507
4583
  }, [
4508
- o("option", Oi, v(l.placeholder || s.t("form.choose")), 1),
4509
- (c(!0), u(R, null, j(l.options, (p) => (c(), u("option", {
4584
+ o("option", Li, v(l.placeholder || s.t("form.choose")), 1),
4585
+ (c(!0), u(E, null, P(l.options, (p) => (c(), u("option", {
4510
4586
  key: p.value,
4511
4587
  value: p.value
4512
- }, v(p.label), 9, Li))), 128))
4513
- ], 8, xi)), [
4514
- [He, r.values[l.key]]
4515
- ]) : l.type === "multiselect" ? (c(), u("div", Ii, [
4516
- (c(!0), u(R, null, j(l.options, (p) => (c(), u("label", {
4588
+ }, v(p.label), 9, Bi))), 128))
4589
+ ], 8, Oi)), [
4590
+ [ze, r.values[l.key]]
4591
+ ]) : l.type === "multiselect" ? (c(), u("div", Ei, [
4592
+ (c(!0), u(E, null, P(l.options, (p) => (c(), u("label", {
4517
4593
  key: p.value,
4518
4594
  class: "wm-form__multiItem"
4519
4595
  }, [
@@ -4527,30 +4603,30 @@ function Ui(e, t, n, i, r, s) {
4527
4603
  p.value,
4528
4604
  k.target.checked
4529
4605
  )
4530
- }, null, 40, Ri),
4606
+ }, null, 40, Ii),
4531
4607
  o("span", null, v(p.label), 1)
4532
4608
  ]))), 128))
4533
4609
  ])) : b("", !0)
4534
4610
  ]))), 128)),
4535
- r.error ? (c(), u("div", Ei, v(r.error), 1)) : b("", !0),
4536
- n.readOnly ? (c(), u("div", Fi, v(s.t("form.responseSent")), 1)) : (c(), u("button", {
4611
+ r.error ? (c(), u("div", Ri, v(r.error), 1)) : b("", !0),
4612
+ n.readOnly ? (c(), u("div", Ui, v(s.t("form.responseSent")), 1)) : (c(), u("button", {
4537
4613
  key: 1,
4538
4614
  type: "submit",
4539
4615
  class: "wm-form__submit",
4540
4616
  disabled: r.busy
4541
4617
  }, [
4542
- r.busy ? (c(), u("span", Ni)) : b("", !0),
4618
+ r.busy ? (c(), u("span", Fi)) : b("", !0),
4543
4619
  o("span", null, v(r.busy ? s.t("common.sending") : n.form.submit_label || s.t("common.send")), 1)
4544
- ], 8, Bi))
4620
+ ], 8, Ni))
4545
4621
  ], 32)
4546
4622
  ]);
4547
4623
  }
4548
- const Pi = /* @__PURE__ */ B(mi, [["render", Ui], ["__scopeId", "data-v-fe65cc56"]]), ji = {
4624
+ const Pi = /* @__PURE__ */ R(fi, [["render", Di], ["__scopeId", "data-v-fe65cc56"]]), ji = {
4549
4625
  name: "WmFeedback",
4550
4626
  inject: {
4551
4627
  // Translator shared by the Messenger shell; French fallback when
4552
4628
  // the component is used standalone.
4553
- t: { default: () => D() }
4629
+ t: { default: () => j() }
4554
4630
  },
4555
4631
  props: {
4556
4632
  busy: { type: Boolean, default: !1 },
@@ -4579,13 +4655,13 @@ const Pi = /* @__PURE__ */ B(mi, [["render", Ui], ["__scopeId", "data-v-fe65cc56
4579
4655
  !this.sel || this.busy || this.$emit("submit", { rating: this.sel });
4580
4656
  }
4581
4657
  }
4582
- }, Di = { class: "wm-fb" }, zi = { class: "wm-fb__title" }, Hi = { class: "wm-fb__sub" }, qi = { class: "wm-fb__row" }, $i = ["onClick"], Vi = { class: "wm-fb__emoji" }, Ki = { class: "wm-fb__label" }, Wi = ["disabled"], Gi = {
4658
+ }, Hi = { class: "wm-fb" }, zi = { class: "wm-fb__title" }, qi = { class: "wm-fb__sub" }, $i = { class: "wm-fb__row" }, Vi = ["onClick"], Ki = { class: "wm-fb__emoji" }, Wi = { class: "wm-fb__label" }, Gi = ["disabled"], Yi = {
4583
4659
  key: 1,
4584
4660
  class: "wm-fb__done"
4585
- }, Yi = { class: "wm-fb__doneTitle" }, Ji = { class: "wm-fb__doneSub" };
4586
- function Qi(e, t, n, i, r, s) {
4587
- return c(), u("div", Di, [
4588
- n.done ? (c(), u("div", Gi, [
4661
+ }, Ji = { class: "wm-fb__doneTitle" }, Qi = { class: "wm-fb__doneSub" };
4662
+ function Xi(e, t, n, i, r, s) {
4663
+ return c(), u("div", Hi, [
4664
+ n.done ? (c(), u("div", Yi, [
4589
4665
  t[1] || (t[1] = o("div", { class: "wm-fb__check" }, [
4590
4666
  o("svg", {
4591
4667
  width: "16",
@@ -4601,37 +4677,37 @@ function Qi(e, t, n, i, r, s) {
4601
4677
  o("path", { d: "M20 6L9 17l-5-5" })
4602
4678
  ])
4603
4679
  ], -1)),
4604
- o("div", Yi, v(s.t("feedback.doneTitle")), 1),
4605
- o("div", Ji, v(s.t("feedback.doneSubtitle")), 1)
4606
- ])) : (c(), u(R, { key: 0 }, [
4680
+ o("div", Ji, v(s.t("feedback.doneTitle")), 1),
4681
+ o("div", Qi, v(s.t("feedback.doneSubtitle")), 1)
4682
+ ])) : (c(), u(E, { key: 0 }, [
4607
4683
  o("div", zi, v(s.t("feedback.question")), 1),
4608
- o("div", Hi, v(s.t("feedback.subtitle")), 1),
4609
- o("div", qi, [
4610
- (c(!0), u(R, null, j(s.options, (a) => (c(), u("button", {
4684
+ o("div", qi, v(s.t("feedback.subtitle")), 1),
4685
+ o("div", $i, [
4686
+ (c(!0), u(E, null, P(s.options, (a) => (c(), u("button", {
4611
4687
  key: a.v,
4612
4688
  type: "button",
4613
4689
  class: O(["wm-fb__opt", { "is-selected": r.sel === a.v }]),
4614
4690
  onClick: (l) => r.sel = a.v
4615
4691
  }, [
4616
- o("span", Vi, v(a.e), 1),
4617
- o("span", Ki, v(a.l), 1)
4618
- ], 10, $i))), 128))
4692
+ o("span", Ki, v(a.e), 1),
4693
+ o("span", Wi, v(a.l), 1)
4694
+ ], 10, Vi))), 128))
4619
4695
  ]),
4620
4696
  o("button", {
4621
4697
  type: "button",
4622
4698
  class: "wm-fb__send",
4623
4699
  disabled: !r.sel || n.busy,
4624
4700
  onClick: t[0] || (t[0] = (...a) => s.onSend && s.onSend(...a))
4625
- }, v(n.busy ? s.t("common.sending") : s.t("feedback.submit")), 9, Wi)
4701
+ }, v(n.busy ? s.t("common.sending") : s.t("feedback.submit")), 9, Gi)
4626
4702
  ], 64))
4627
4703
  ]);
4628
4704
  }
4629
- const Xi = /* @__PURE__ */ B(ji, [["render", Qi], ["__scopeId", "data-v-9b630564"]]), Zi = {
4705
+ const Zi = /* @__PURE__ */ R(ji, [["render", Xi], ["__scopeId", "data-v-9b630564"]]), ea = {
4630
4706
  name: "WmMoreMenu",
4631
4707
  inject: {
4632
4708
  // Translator shared by the Messenger shell; French fallback when
4633
4709
  // the component is used standalone.
4634
- t: { default: () => D() }
4710
+ t: { default: () => j() }
4635
4711
  },
4636
4712
  props: {
4637
4713
  canRename: { type: Boolean, default: !0 },
@@ -4669,24 +4745,24 @@ const Xi = /* @__PURE__ */ B(ji, [["render", Qi], ["__scopeId", "data-v-9b630564
4669
4745
  this.browserNotifOn = !this.browserNotifOn, this.$emit("browser-notif-toggle", this.browserNotifOn);
4670
4746
  }
4671
4747
  }
4672
- }, ea = { class: "wm-mm" }, ta = {
4748
+ }, ta = { class: "wm-mm" }, na = {
4673
4749
  class: "wm-mm__pop",
4674
4750
  role: "menu"
4675
- }, na = {
4751
+ }, sa = {
4676
4752
  key: 0,
4677
4753
  class: "wm-mm__section"
4678
- }, sa = { class: "wm-mm__label" }, ra = { class: "wm-mm__label" }, ia = {
4754
+ }, ra = { class: "wm-mm__label" }, ia = { class: "wm-mm__label" }, aa = {
4679
4755
  key: 1,
4680
4756
  class: "wm-mm__sep"
4681
- }, aa = { class: "wm-mm__section" }, oa = { class: "wm-mm__label" }, la = { class: "wm-mm__label" }, ca = { class: "wm-mm__section" }, da = { class: "wm-mm__label" }, ua = { class: "wm-mm__label" };
4682
- function ha(e, t, n, i, r, s) {
4683
- return c(), u("div", ea, [
4757
+ }, oa = { class: "wm-mm__section" }, la = { class: "wm-mm__label" }, ca = { class: "wm-mm__label" }, da = { class: "wm-mm__section" }, ua = { class: "wm-mm__label" }, ha = { class: "wm-mm__label" };
4758
+ function ma(e, t, n, i, r, s) {
4759
+ return c(), u("div", ta, [
4684
4760
  o("div", {
4685
4761
  class: "wm-mm__scrim",
4686
4762
  onClick: t[0] || (t[0] = (a) => e.$emit("close"))
4687
4763
  }),
4688
- o("div", ta, [
4689
- n.canRename || n.canExport ? (c(), u("div", na, [
4764
+ o("div", na, [
4765
+ n.canRename || n.canExport ? (c(), u("div", sa, [
4690
4766
  n.canRename ? (c(), u("button", {
4691
4767
  key: 0,
4692
4768
  type: "button",
@@ -4709,7 +4785,7 @@ function ha(e, t, n, i, r, s) {
4709
4785
  o("path", { d: "M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4 12.5-12.5z" })
4710
4786
  ])
4711
4787
  ], -1)),
4712
- o("span", sa, v(s.t("moreMenu.editTitle")), 1)
4788
+ o("span", ra, v(s.t("moreMenu.editTitle")), 1)
4713
4789
  ])) : b("", !0),
4714
4790
  n.canExport ? (c(), u("button", {
4715
4791
  key: 1,
@@ -4732,12 +4808,12 @@ function ha(e, t, n, i, r, s) {
4732
4808
  o("path", { d: "M4 12v8a2 2 0 002 2h12a2 2 0 002-2v-8M16 6l-4-4-4 4M12 2v13" })
4733
4809
  ])
4734
4810
  ], -1)),
4735
- o("span", ra, v(s.t("moreMenu.exportTranscript")), 1),
4811
+ o("span", ia, v(s.t("moreMenu.exportTranscript")), 1),
4736
4812
  t[9] || (t[9] = o("span", { class: "wm-mm__hint" }, ".txt", -1))
4737
4813
  ])) : b("", !0)
4738
4814
  ])) : b("", !0),
4739
- n.canRename || n.canExport ? (c(), u("div", ia)) : b("", !0),
4740
- o("div", aa, [
4815
+ n.canRename || n.canExport ? (c(), u("div", aa)) : b("", !0),
4816
+ o("div", oa, [
4741
4817
  o("button", {
4742
4818
  type: "button",
4743
4819
  class: "wm-mm__item",
@@ -4759,7 +4835,7 @@ function ha(e, t, n, i, r, s) {
4759
4835
  o("path", { d: "M15.54 8.46a5 5 0 010 7.07M19.07 4.93a10 10 0 010 14.14" })
4760
4836
  ])
4761
4837
  ], -1)),
4762
- o("span", oa, v(s.t("moreMenu.sound")), 1),
4838
+ o("span", la, v(s.t("moreMenu.sound")), 1),
4763
4839
  o("span", {
4764
4840
  class: O(["wm-mm__toggle", { "wm-mm__toggle--on": r.soundOn }])
4765
4841
  }, [...t[10] || (t[10] = [
@@ -4786,7 +4862,7 @@ function ha(e, t, n, i, r, s) {
4786
4862
  o("path", { d: "M15 17h5l-1.4-1.4A2 2 0 0118 14.2V11a6 6 0 10-12 0v3.2c0 .5-.2 1-.6 1.4L4 17h5m6 0a3 3 0 11-6 0" })
4787
4863
  ])
4788
4864
  ], -1)),
4789
- o("span", la, v(s.t("moreMenu.browserNotifications")), 1),
4865
+ o("span", ca, v(s.t("moreMenu.browserNotifications")), 1),
4790
4866
  o("span", {
4791
4867
  class: O(["wm-mm__toggle", { "wm-mm__toggle--on": r.browserNotifOn }])
4792
4868
  }, [...t[12] || (t[12] = [
@@ -4795,7 +4871,7 @@ function ha(e, t, n, i, r, s) {
4795
4871
  ])
4796
4872
  ]),
4797
4873
  t[16] || (t[16] = o("div", { class: "wm-mm__sep" }, null, -1)),
4798
- o("div", ca, [
4874
+ o("div", da, [
4799
4875
  n.statusUrl ? (c(), u("button", {
4800
4876
  key: 0,
4801
4877
  type: "button",
@@ -4817,7 +4893,7 @@ function ha(e, t, n, i, r, s) {
4817
4893
  o("path", { d: "M18 10a8 8 0 11-16 0 8 8 0 0116 0zM10 6v4l3 2" })
4818
4894
  ])
4819
4895
  ], -1)),
4820
- o("span", da, v(s.t("moreMenu.serviceStatus")), 1)
4896
+ o("span", ua, v(s.t("moreMenu.serviceStatus")), 1)
4821
4897
  ])) : b("", !0),
4822
4898
  n.helpUrl ? (c(), u("button", {
4823
4899
  key: 1,
@@ -4840,18 +4916,18 @@ function ha(e, t, n, i, r, s) {
4840
4916
  o("path", { d: "M9 11a3 3 0 116 0c0 2-3 2-3 5M12 19h.01M12 22a10 10 0 110-20 10 10 0 010 20z" })
4841
4917
  ])
4842
4918
  ], -1)),
4843
- o("span", ua, v(s.t("moreMenu.helpCenter")), 1)
4919
+ o("span", ha, v(s.t("moreMenu.helpCenter")), 1)
4844
4920
  ])) : b("", !0)
4845
4921
  ])
4846
4922
  ])
4847
4923
  ]);
4848
4924
  }
4849
- const ma = /* @__PURE__ */ B(Zi, [["render", ha], ["__scopeId", "data-v-76281e95"]]), fa = {
4925
+ const fa = /* @__PURE__ */ R(ea, [["render", ma], ["__scopeId", "data-v-76281e95"]]), ga = {
4850
4926
  name: "WmRenameDialog",
4851
4927
  inject: {
4852
4928
  // Translator shared by the Messenger shell; French fallback when
4853
4929
  // the component is used standalone.
4854
- t: { default: () => D() }
4930
+ t: { default: () => j() }
4855
4931
  },
4856
4932
  props: {
4857
4933
  // Empty defaults: the resolved fallback comes from the translator
@@ -4888,20 +4964,20 @@ const ma = /* @__PURE__ */ B(Zi, [["render", ha], ["__scopeId", "data-v-76281e95
4888
4964
  this.canSubmit && this.$emit("submit", this.value.trim());
4889
4965
  }
4890
4966
  }
4891
- }, ga = { class: "wm-dialog" }, _a = {
4967
+ }, _a = { class: "wm-dialog" }, pa = {
4892
4968
  class: "wm-dialog__card",
4893
4969
  role: "dialog",
4894
4970
  "aria-modal": "true"
4895
- }, pa = { class: "wm-dialog__head" }, va = { class: "wm-dialog__title" }, ya = ["aria-label"], wa = { class: "wm-dialog__body" }, ba = ["placeholder"], ka = { class: "wm-dialog__actions" }, Ca = ["disabled"];
4896
- function Aa(e, t, n, i, r, s) {
4897
- return c(), u("div", ga, [
4971
+ }, va = { class: "wm-dialog__head" }, ya = { class: "wm-dialog__title" }, wa = ["aria-label"], ba = { class: "wm-dialog__body" }, ka = ["placeholder"], Ca = { class: "wm-dialog__actions" }, Aa = ["disabled"];
4972
+ function Sa(e, t, n, i, r, s) {
4973
+ return c(), u("div", _a, [
4898
4974
  o("div", {
4899
4975
  class: "wm-dialog__scrim",
4900
4976
  onClick: t[0] || (t[0] = (a) => e.$emit("close"))
4901
4977
  }),
4902
- o("div", _a, [
4903
- o("div", pa, [
4904
- o("div", va, v(n.title || s.t("rename.title")), 1),
4978
+ o("div", pa, [
4979
+ o("div", va, [
4980
+ o("div", ya, v(n.title || s.t("rename.title")), 1),
4905
4981
  o("button", {
4906
4982
  type: "button",
4907
4983
  class: "wm-dialog__close",
@@ -4921,9 +4997,9 @@ function Aa(e, t, n, i, r, s) {
4921
4997
  }, [
4922
4998
  o("path", { d: "M18 6L6 18M6 6l12 12" })
4923
4999
  ], -1)
4924
- ])], 8, ya)
5000
+ ])], 8, wa)
4925
5001
  ]),
4926
- o("div", wa, [
5002
+ o("div", ba, [
4927
5003
  K(o("input", {
4928
5004
  ref: "input",
4929
5005
  "onUpdate:modelValue": t[2] || (t[2] = (a) => r.value = a),
@@ -4935,11 +5011,11 @@ function Aa(e, t, n, i, r, s) {
4935
5011
  t[3] || (t[3] = ue(J((...a) => s.onSubmit && s.onSubmit(...a), ["prevent"]), ["enter"])),
4936
5012
  t[4] || (t[4] = ue(J((a) => e.$emit("close"), ["prevent"]), ["esc"]))
4937
5013
  ]
4938
- }, null, 40, ba), [
5014
+ }, null, 40, ka), [
4939
5015
  [X, r.value]
4940
5016
  ])
4941
5017
  ]),
4942
- o("div", ka, [
5018
+ o("div", Ca, [
4943
5019
  o("button", {
4944
5020
  type: "button",
4945
5021
  class: "wm-dialog__btn",
@@ -4950,25 +5026,25 @@ function Aa(e, t, n, i, r, s) {
4950
5026
  class: "wm-dialog__btn wm-dialog__btn--primary",
4951
5027
  disabled: !s.canSubmit,
4952
5028
  onClick: t[6] || (t[6] = (...a) => s.onSubmit && s.onSubmit(...a))
4953
- }, v(s.t("common.save")), 9, Ca)
5029
+ }, v(s.t("common.save")), 9, Aa)
4954
5030
  ])
4955
5031
  ])
4956
5032
  ]);
4957
5033
  }
4958
- const Sa = /* @__PURE__ */ B(fa, [["render", Aa], ["__scopeId", "data-v-6d5f94a8"]]), Oe = "ww-messenger-tokens", Ma = {
5034
+ const Ma = /* @__PURE__ */ R(ga, [["render", Sa], ["__scopeId", "data-v-6d5f94a8"]]), Oe = "ww-messenger-tokens", Ta = {
4959
5035
  name: "Messenger",
4960
5036
  components: {
4961
5037
  Launcher: Ft,
4962
5038
  Header: ln,
4963
5039
  Onboarding: qn,
4964
5040
  MessageList: Ir,
4965
- Composer: Qr,
4966
- SuggestionChips: ti,
4967
- ApprovalCard: ui,
5041
+ Composer: Xr,
5042
+ SuggestionChips: ni,
5043
+ ApprovalCard: hi,
4968
5044
  FormCard: Pi,
4969
- Feedback: Xi,
4970
- MoreMenu: ma,
4971
- RenameDialog: Sa
5045
+ Feedback: Zi,
5046
+ MoreMenu: fa,
5047
+ RenameDialog: Ma
4972
5048
  },
4973
5049
  mixins: [
4974
5050
  ot,
@@ -5119,7 +5195,7 @@ const Sa = /* @__PURE__ */ B(fa, [["render", Aa], ["__scopeId", "data-v-6d5f94a8
5119
5195
  // `locale` changes. `t()` below (and the provided closure) delegate
5120
5196
  // to it so every string resolves against the current language.
5121
5197
  translator() {
5122
- return D(this.locale);
5198
+ return j(this.locale);
5123
5199
  },
5124
5200
  error() {
5125
5201
  var e;
@@ -5157,9 +5233,9 @@ const Sa = /* @__PURE__ */ B(fa, [["render", Aa], ["__scopeId", "data-v-6d5f94a8
5157
5233
  const T = r[w];
5158
5234
  if (!T) continue;
5159
5235
  if (((k = T.author) == null ? void 0 : k.type) === "user") break;
5160
- const I = W(T.id);
5161
- if (I != null) {
5162
- if (s != null && I <= s) break;
5236
+ const B = W(T.id);
5237
+ if (B != null) {
5238
+ if (s != null && B <= s) break;
5163
5239
  t[T.id] !== 0 && (!l && T.author && (l = T.author), a++);
5164
5240
  }
5165
5241
  }
@@ -5439,7 +5515,7 @@ const Sa = /* @__PURE__ */ B(fa, [["render", Aa], ["__scopeId", "data-v-6d5f94a8
5439
5515
  }
5440
5516
  }
5441
5517
  return this.t("messageList.today", {
5442
- time: Le(t, oe(this.locale))
5518
+ time: Ee(t, oe(this.locale))
5443
5519
  });
5444
5520
  },
5445
5521
  // Pagination state for the active conversation. Drives the
@@ -5608,10 +5684,11 @@ const Sa = /* @__PURE__ */ B(fa, [["render", Aa], ["__scopeId", "data-v-6d5f94a8
5608
5684
  })
5609
5685
  ), this.store = ke(Qe(this.transport)), this.hydrateNotifPref();
5610
5686
  const n = ((e = this.parentContext) == null ? void 0 : e.customer) || ((t = this.context) == null ? void 0 : t.customer);
5611
- n && typeof n == "object" && await this.store.applyCustomer(n), await this.store.start({
5687
+ await this.store.start({
5612
5688
  origin: this.parentOrigin,
5613
5689
  token: this.parentToken || void 0,
5614
- allowUnauthenticated: this.parentAllowUnauthenticated
5690
+ allowUnauthenticated: this.parentAllowUnauthenticated,
5691
+ customer: n && typeof n == "object" ? n : void 0
5615
5692
  }), this.setupLiveReveal();
5616
5693
  } catch (n) {
5617
5694
  console.error("[ww-messenger] bootstrap failed", n), this.bootError = (n == null ? void 0 : n.message) || String(n);
@@ -5694,21 +5771,21 @@ const Sa = /* @__PURE__ */ B(fa, [["render", Aa], ["__scopeId", "data-v-6d5f94a8
5694
5771
  this.launcherHovered = e, this.sendCurrentLauncherSize();
5695
5772
  },
5696
5773
  sendCurrentLauncherSize() {
5697
- var T, I, A, z, M, F, N;
5774
+ var T, B, A, H, M, F, N;
5698
5775
  if (this.isOpen) return;
5699
- const e = (I = (T = this.$el) == null ? void 0 : T.querySelector) == null ? void 0 : I.call(T, ".wm-launcherWrap");
5776
+ const e = (B = (T = this.$el) == null ? void 0 : T.querySelector) == null ? void 0 : B.call(T, ".wm-launcherWrap");
5700
5777
  if (!e) return;
5701
5778
  const t = e.getBoundingClientRect();
5702
5779
  if (!t.width || !t.height) return;
5703
- const n = (((A = this.launcherPeeks) == null ? void 0 : A.length) ?? 0) > 0, i = this.launcherHovered ? 28 : 16, r = Math.ceil(t.width), s = Math.ceil(t.height), a = (M = (z = this.$el) == null ? void 0 : z.querySelector) == null ? void 0 : M.call(z, ".wm-launcher"), l = a == null ? void 0 : a.getBoundingClientRect(), p = (N = (F = this.$el) == null ? void 0 : F.querySelectorAll) == null ? void 0 : N.call(F, ".wm-peek"), k = p && p.length ? p[p.length - 1] : null;
5780
+ const n = (((A = this.launcherPeeks) == null ? void 0 : A.length) ?? 0) > 0, i = this.launcherHovered ? 28 : 16, r = Math.ceil(t.width), s = Math.ceil(t.height), a = (M = (H = this.$el) == null ? void 0 : H.querySelector) == null ? void 0 : M.call(H, ".wm-launcher"), l = a == null ? void 0 : a.getBoundingClientRect(), p = (N = (F = this.$el) == null ? void 0 : F.querySelectorAll) == null ? void 0 : N.call(F, ".wm-peek"), k = p && p.length ? p[p.length - 1] : null;
5704
5781
  let w = null;
5705
5782
  if (k) {
5706
- const P = k.getBoundingClientRect();
5783
+ const D = k.getBoundingClientRect();
5707
5784
  w = {
5708
- width: Math.ceil(P.width),
5709
- height: Math.ceil(P.height),
5710
- rightOffset: Math.max(0, Math.ceil(t.right - P.right)),
5711
- bottomOffset: Math.max(0, Math.ceil(t.bottom - P.bottom))
5785
+ width: Math.ceil(D.width),
5786
+ height: Math.ceil(D.height),
5787
+ rightOffset: Math.max(0, Math.ceil(t.right - D.right)),
5788
+ bottomOffset: Math.max(0, Math.ceil(t.bottom - D.bottom))
5712
5789
  };
5713
5790
  }
5714
5791
  this.notifyParentResize("closed", {
@@ -5931,29 +6008,29 @@ const Sa = /* @__PURE__ */ B(fa, [["render", Aa], ["__scopeId", "data-v-6d5f94a8
5931
6008
  }
5932
6009
  }
5933
6010
  }
5934
- }, Ta = {
6011
+ }, xa = {
5935
6012
  key: 0,
5936
6013
  class: "wm-loading",
5937
6014
  "aria-busy": "true",
5938
6015
  "aria-live": "polite"
5939
- }, xa = ["aria-label"], Oa = {
6016
+ }, Oa = ["aria-label"], La = {
5940
6017
  key: 0,
5941
6018
  class: "wm-state"
5942
- }, La = { class: "wm-state__err" }, Ia = { class: "wm-state__errTitle" }, Ra = { class: "wm-state__errSub" }, Ea = { class: "wm-bottom" }, Ba = {
6019
+ }, Ba = { class: "wm-state__err" }, Ea = { class: "wm-state__errTitle" }, Ia = { class: "wm-state__errSub" }, Ra = { class: "wm-bottom" }, Na = {
5943
6020
  key: 0,
5944
6021
  ref: "floatEl",
5945
6022
  class: "wm-float"
5946
- }, Na = {
6023
+ }, Fa = {
5947
6024
  key: 1,
5948
6025
  class: "wm-actionWait",
5949
6026
  role: "status",
5950
6027
  "aria-live": "polite"
5951
- }, Fa = { class: "wm-actionWait__lbl" }, Ua = {
6028
+ }, Ua = { class: "wm-actionWait__lbl" }, Da = {
5952
6029
  key: 2,
5953
6030
  class: "wm-attached"
5954
6031
  }, Pa = ["aria-label", "onClick"];
5955
6032
  function ja(e, t, n, i, r, s) {
5956
- const a = E("Launcher"), l = E("Header"), p = E("Onboarding"), k = E("MessageList"), w = E("ApprovalCard"), T = E("FormCard"), I = E("Feedback"), A = E("SuggestionChips"), z = E("Composer"), M = E("MoreMenu"), F = E("RenameDialog");
6033
+ const a = I("Launcher"), l = I("Header"), p = I("Onboarding"), k = I("MessageList"), w = I("ApprovalCard"), T = I("FormCard"), B = I("Feedback"), A = I("SuggestionChips"), H = I("Composer"), M = I("MoreMenu"), F = I("RenameDialog");
5957
6034
  return c(), u("div", {
5958
6035
  class: O(["wm-root", `wm-root--${n.displayMode}`])
5959
6036
  }, [
@@ -5976,7 +6053,7 @@ function ja(e, t, n, i, r, s) {
5976
6053
  role: "dialog",
5977
6054
  "aria-label": "Messenger"
5978
6055
  }, [
5979
- !s.ready && !s.error ? (c(), u("div", Ta, [
6056
+ !s.ready && !s.error ? (c(), u("div", xa, [
5980
6057
  s.isEmbedded ? b("", !0) : (c(), u("button", {
5981
6058
  key: 0,
5982
6059
  type: "button",
@@ -5997,13 +6074,13 @@ function ja(e, t, n, i, r, s) {
5997
6074
  }, [
5998
6075
  o("path", { d: "M18 6L6 18M6 6l12 12" })
5999
6076
  ], -1)
6000
- ])], 8, xa)),
6077
+ ])], 8, Oa)),
6001
6078
  t[6] || (t[6] = o("div", {
6002
6079
  class: "wm-loading__spinner",
6003
6080
  "aria-hidden": "true"
6004
6081
  }, null, -1))
6005
- ])) : (c(), u(R, { key: 1 }, [
6006
- V(l, {
6082
+ ])) : (c(), u(E, { key: 1 }, [
6083
+ $(l, {
6007
6084
  title: s.headerTitle,
6008
6085
  "team-members": s.teamMembers,
6009
6086
  "response-label": s.responseLabel,
@@ -6017,8 +6094,8 @@ function ja(e, t, n, i, r, s) {
6017
6094
  onMore: s.toggleMore,
6018
6095
  onClose: s.close
6019
6096
  }, null, 8, ["title", "team-members", "response-label", "show-identity", "show-back", "show-close", "more-active", "agent-name", "agent-avatar-url", "onBack", "onMore", "onClose"]),
6020
- s.error ? (c(), u("div", Oa, [
6021
- o("div", La, [
6097
+ s.error ? (c(), u("div", La, [
6098
+ o("div", Ba, [
6022
6099
  t[7] || (t[7] = o("div", { class: "wm-state__errIcon" }, [
6023
6100
  o("svg", {
6024
6101
  width: "14",
@@ -6035,12 +6112,12 @@ function ja(e, t, n, i, r, s) {
6035
6112
  ])
6036
6113
  ], -1)),
6037
6114
  o("div", null, [
6038
- o("div", Ia, v(s.t("error.connectionFailed")), 1),
6039
- o("div", Ra, v(s.error), 1)
6115
+ o("div", Ea, v(s.t("error.connectionFailed")), 1),
6116
+ o("div", Ia, v(s.error), 1)
6040
6117
  ])
6041
6118
  ])
6042
- ])) : s.currentConv ? (c(), u(R, { key: 2 }, [
6043
- V(k, {
6119
+ ])) : s.currentConv ? (c(), u(E, { key: 2 }, [
6120
+ $(k, {
6044
6121
  ref: "messageList",
6045
6122
  messages: s.displayedMessages,
6046
6123
  "streaming-active": s.streamingActive,
@@ -6054,8 +6131,8 @@ function ja(e, t, n, i, r, s) {
6054
6131
  "ai-agent-avatar-url": s.agentAvatarUrl,
6055
6132
  onLoadMore: s.onLoadMore
6056
6133
  }, null, 8, ["messages", "streaming-active", "date-label", "conversation-id", "loading-more", "has-more", "unread-anchor-id", "unread-boundary-ts", "ai-agent-name", "ai-agent-avatar-url", "onLoadMore"]),
6057
- o("div", Ea, [
6058
- s.floatVisible ? (c(), u("div", Ba, [
6134
+ o("div", Ra, [
6135
+ s.floatVisible ? (c(), u("div", Na, [
6059
6136
  s.approvalReady ? (c(), U(w, {
6060
6137
  key: 0,
6061
6138
  action: s.approvalTitle,
@@ -6070,7 +6147,7 @@ function ja(e, t, n, i, r, s) {
6070
6147
  "agent-name": s.agentName,
6071
6148
  "agent-avatar-url": s.agentAvatarUrl,
6072
6149
  onSubmit: s.onFormSubmit
6073
- }, null, 8, ["form", "agent-name", "agent-avatar-url", "onSubmit"])) : s.showFeedback ? (c(), U(I, {
6150
+ }, null, 8, ["form", "agent-name", "agent-avatar-url", "onSubmit"])) : s.showFeedback ? (c(), U(B, {
6074
6151
  key: 2,
6075
6152
  busy: r.feedbackBusy,
6076
6153
  done: r.feedbackDone,
@@ -6081,15 +6158,15 @@ function ja(e, t, n, i, r, s) {
6081
6158
  onSelect: s.onSuggestion
6082
6159
  }, null, 8, ["items", "onSelect"]))
6083
6160
  ], 512)) : b("", !0),
6084
- s.actionInFlight ? (c(), u("div", Na, [
6161
+ s.actionInFlight ? (c(), u("div", Fa, [
6085
6162
  t[8] || (t[8] = o("span", {
6086
6163
  class: "wm-actionWait__spinner",
6087
6164
  "aria-hidden": "true"
6088
6165
  }, null, -1)),
6089
- o("span", Fa, v(s.t("action.inProgress", {
6166
+ o("span", Ua, v(s.t("action.inProgress", {
6090
6167
  name: s.actionInFlightName
6091
6168
  })), 1)
6092
- ])) : (c(), U(z, {
6169
+ ])) : (c(), U(H, {
6093
6170
  key: 2,
6094
6171
  ref: "composer",
6095
6172
  modelValue: r.draft,
@@ -6097,9 +6174,10 @@ function ja(e, t, n, i, r, s) {
6097
6174
  placeholder: s.composerPlaceholder,
6098
6175
  disabled: !!s.pendingApproval,
6099
6176
  "attach-label": s.t("composer.attachFile"),
6177
+ "display-mode": n.displayMode,
6100
6178
  onSend: s.onSend,
6101
6179
  onAttach: s.onAttach
6102
- }, null, 8, ["modelValue", "placeholder", "disabled", "attach-label", "onSend", "onAttach"]))
6180
+ }, null, 8, ["modelValue", "placeholder", "disabled", "attach-label", "display-mode", "onSend", "onAttach"]))
6103
6181
  ]),
6104
6182
  r.moreOpen ? (c(), U(M, {
6105
6183
  key: 0,
@@ -6121,9 +6199,9 @@ function ja(e, t, n, i, r, s) {
6121
6199
  onClose: t[3] || (t[3] = (N) => r.renameDialogOpen = !1),
6122
6200
  onSubmit: s.onRenameSubmit
6123
6201
  }, null, 8, ["initial-value", "title", "onSubmit"])) : b("", !0),
6124
- r.pendingAttachments.length ? (c(), u("div", Ua, [
6125
- (c(!0), u(R, null, j(r.pendingAttachments, (N, P) => (c(), u("div", {
6126
- key: P,
6202
+ r.pendingAttachments.length ? (c(), u("div", Da, [
6203
+ (c(!0), u(E, null, P(r.pendingAttachments, (N, D) => (c(), u("div", {
6204
+ key: D,
6127
6205
  class: "wm-attached__chip"
6128
6206
  }, [
6129
6207
  t[10] || (t[10] = o("svg", {
@@ -6143,7 +6221,7 @@ function ja(e, t, n, i, r, s) {
6143
6221
  o("button", {
6144
6222
  type: "button",
6145
6223
  "aria-label": s.t("attachment.remove"),
6146
- onClick: (G) => r.pendingAttachments.splice(P, 1)
6224
+ onClick: (G) => r.pendingAttachments.splice(D, 1)
6147
6225
  }, [...t[9] || (t[9] = [
6148
6226
  o("svg", {
6149
6227
  width: "10",
@@ -6191,53 +6269,53 @@ function ja(e, t, n, i, r, s) {
6191
6269
  ], 6)) : b("", !0)
6192
6270
  ], 2);
6193
6271
  }
6194
- const Ha = /* @__PURE__ */ B(Ma, [["render", ja], ["__scopeId", "data-v-608c117b"]]), qa = "0.5.25";
6272
+ const qa = /* @__PURE__ */ R(Ta, [["render", ja], ["__scopeId", "data-v-010fdbd1"]]), $a = "0.5.27";
6195
6273
  export {
6196
6274
  le as AIAvatar,
6197
6275
  ge as AVATAR_COLORS,
6198
6276
  ts as ActionResult,
6199
- ui as ApprovalCard,
6277
+ hi as ApprovalCard,
6200
6278
  ds as ArtifactFormResponse,
6201
6279
  Cs as ArtifactInfoCard,
6202
- Hs as ArtifactRenderer,
6203
- Ps as ArtifactTicket,
6280
+ zs as ArtifactRenderer,
6281
+ Ds as ArtifactTicket,
6204
6282
  er as AttachmentPreview,
6205
6283
  rr as Bubble,
6206
- Qr as Composer,
6284
+ Xr as Composer,
6207
6285
  Ze as DEFAULT_BASE_URL,
6208
6286
  ie as DEFAULT_LANGUAGE,
6209
- Xi as Feedback,
6287
+ Zi as Feedback,
6210
6288
  Pi as FormCard,
6211
6289
  ln as Header,
6212
6290
  Re as HumanAvatar,
6213
6291
  Ft as Launcher,
6214
6292
  be as MEDIA_RECORDER_SUPPORTED,
6215
6293
  Ir as MessageList,
6216
- Ha as Messenger,
6217
- ma as MoreMenu,
6294
+ qa as Messenger,
6295
+ fa as MoreMenu,
6218
6296
  qn as Onboarding,
6219
6297
  he as SCREEN_CAPTURE_SUPPORTED,
6220
6298
  et as SUPPORTED_LANGUAGES,
6221
- ti as SuggestionChips,
6299
+ ni as SuggestionChips,
6222
6300
  Gt as TeamAvatars,
6223
6301
  lr as Typing,
6224
- qa as VERSION,
6302
+ $a as VERSION,
6225
6303
  ve as avatarColor,
6226
6304
  ye as avatarInitials,
6227
- Er as captureScreenshotFile,
6228
- H as colors,
6305
+ Nr as captureScreenshotFile,
6306
+ z as colors,
6229
6307
  Qe as createStore,
6230
- D as createTranslator,
6308
+ j as createTranslator,
6231
6309
  We as createTransport,
6232
6310
  oe as dateLocale,
6233
- Ha as default,
6234
- Le as formatTime,
6311
+ qa as default,
6312
+ Ee as formatTime,
6235
6313
  za as guessAttachmentKind,
6236
6314
  Rr as pickRecorderMime,
6237
6315
  dn as renderInlineMarkdown,
6238
6316
  un as renderMarkdown,
6239
6317
  we as resolveLanguage,
6240
- Nr as startScreenRecording,
6318
+ Ur as startScreenRecording,
6241
6319
  Xe as tokensCss,
6242
6320
  Je as uuid,
6243
6321
  Je as v4