@epam/ai-dial-conversation-messages 1.3.0-dev.35 → 1.3.0-dev.353

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/components/ConversationStartTimestamp/ConversationStartTimestamp.d.ts +5 -0
  2. package/components/ConversationStartTimestamp/ConversationStartTimestamp.d.ts.map +1 -0
  3. package/components/MessageActions/MessageActions.d.ts.map +1 -1
  4. package/components/MessageBubble/AssistantMessageBubble.d.ts.map +1 -1
  5. package/components/MessageBubble/MessageBubble.d.ts.map +1 -1
  6. package/components/MessageBubble/StatusMessageBubble.d.ts.map +1 -1
  7. package/components/MessageBubble/UserMessageBubble.d.ts.map +1 -1
  8. package/components/MessageSelectionReply/MessageSelectionReply.d.ts.map +1 -1
  9. package/components/MessageTimestamp/MessageTimestamp.d.ts +5 -0
  10. package/components/MessageTimestamp/MessageTimestamp.d.ts.map +1 -0
  11. package/components/NegativeFeedbackModal/NegativeFeedbackModal.d.ts +5 -0
  12. package/components/NegativeFeedbackModal/NegativeFeedbackModal.d.ts.map +1 -0
  13. package/hooks/useNow/useNow.d.ts +3 -0
  14. package/hooks/useNow/useNow.d.ts.map +1 -0
  15. package/index.css +3 -2
  16. package/index.d.ts +6 -1
  17. package/index.d.ts.map +1 -1
  18. package/index.js +493 -316
  19. package/models/conversation-start.d.ts +43 -0
  20. package/models/conversation-start.d.ts.map +1 -0
  21. package/models/message-actions.d.ts +5 -0
  22. package/models/message-actions.d.ts.map +1 -1
  23. package/models/message-bubble.d.ts +44 -27
  24. package/models/message-bubble.d.ts.map +1 -1
  25. package/models/negative-feedback-modal.d.ts +28 -0
  26. package/models/negative-feedback-modal.d.ts.map +1 -0
  27. package/package.json +5 -5
  28. package/types/conversation-start-kind.d.ts +10 -0
  29. package/types/conversation-start-kind.d.ts.map +1 -0
  30. package/types/negative-feedback-category.d.ts +14 -0
  31. package/types/negative-feedback-category.d.ts.map +1 -0
  32. package/utils/date-time.d.ts +10 -0
  33. package/utils/date-time.d.ts.map +1 -0
package/index.js CHANGED
@@ -1,17 +1,17 @@
1
- import { AttachmentType as e, CopyIconButton as t, DeploymentIcon as n, MDMessageViewer as r, MessageRating as i, MessageRole as a, ResponseFormat as o, buildCssVars as s, mergeClasses as c, useCollapsedText as l } from "@epam/ai-dial-chat-shared";
2
- import { AttachmentGroup as u } from "@epam/ai-dial-attachment-input";
3
- import { Button as d, ButtonVariant as f, DIAL_ICON_SIZE as p, DIAL_KIT_ICON_STROKE as m, ElementSize as h, GhostIconButton as g, InfoMessageNotification as _, LinkButton as v, NeutralButton as y } from "@epam/ai-dial-ui-kit";
4
- import { useCallback as b, useEffect as x, useId as S, useLayoutEffect as C, useMemo as ee, useRef as w, useState as T } from "react";
5
- import { IconArrowBackUp as E, IconChevronDown as D, IconChevronUp as O, IconMarkdown as k, IconPencilMinus as A, IconRefresh as j, IconThumbDown as M, IconThumbDownFilled as N, IconThumbUp as P, IconThumbUpFilled as te, IconTrashX as ne } from "@tabler/icons-react";
6
- import { Fragment as F, jsx as I, jsxs as L } from "react/jsx-runtime";
7
- import { createPortal as R } from "react-dom";
1
+ import { AttachmentType as e, CopyIconButton as t, DeploymentIcon as n, MDMessageViewer as r, MessageRating as i, MessageRole as a, ResponseFormat as o, buildCssVars as s, buildInlineSegmentSource as c, createInlineSegmentComponents as l, createRehypeInlineSegments as u, mergeClasses as d, useCollapsedText as f } from "@epam/ai-dial-chat-shared";
2
+ import { AttachmentGroup as p } from "@epam/ai-dial-attachment-input";
3
+ import { Button as m, ButtonVariant as h, DIAL_ICON_SIZE as g, DIAL_KIT_ICON_STROKE as _, ElementSize as v, GhostIconButton as y, InfoMessageNotification as b, LinkButton as x, LiveRegion as S, LiveRegionElement as C, NeutralButton as w, Popup as T, PopupSize as ee, Select as te, Textarea as E, Tooltip as D } from "@epam/ai-dial-ui-kit";
4
+ import { memo as O, useCallback as k, useEffect as A, useId as j, useLayoutEffect as M, useMemo as N, useRef as ne, useState as P } from "react";
5
+ import { IconArrowBackUp as F, IconChevronDown as I, IconChevronUp as re, IconMarkdown as ie, IconPencilMinus as ae, IconRefresh as L, IconThumbDown as oe, IconThumbDownFilled as se, IconThumbUp as ce, IconThumbUpFilled as le, IconTrashX as ue } from "@tabler/icons-react";
6
+ import { Fragment as R, jsx as z, jsxs as B } from "react/jsx-runtime";
7
+ import { createPortal as V } from "react-dom";
8
8
  //#region src/constants/public-class-names.ts
9
- var z = {
9
+ var H = {
10
10
  userBubble: "dial-cm-user-bubble",
11
11
  assistantContent: "dial-cm-assistant-content"
12
- }, B = 4, V = (e) => {
13
- let t = w(null), [n, r] = T(0);
14
- return x(() => {
12
+ }, de = 4, fe = (e) => {
13
+ let t = ne(null), [n, r] = P(0);
14
+ return A(() => {
15
15
  if (!e) return;
16
16
  let n = t.current;
17
17
  if (n == null) return;
@@ -22,416 +22,536 @@ var z = {
22
22
  return i.observe(n), () => i.disconnect();
23
23
  }, [e]), {
24
24
  slotRef: t,
25
- firstLineIndent: e ? `calc(${n}px + ${B}px)` : void 0
25
+ firstLineIndent: e ? `calc(${n}px + ${de}px)` : void 0
26
26
  };
27
- }, H = [
27
+ }, pe = [
28
28
  "href",
29
29
  "src",
30
30
  "alt",
31
31
  "colspan",
32
32
  "rowspan",
33
33
  "start"
34
- ], U = new Set([
34
+ ], me = /* @__PURE__ */ new Set([
35
35
  "pre",
36
36
  "pre-wrap",
37
37
  "pre-line",
38
38
  "break-spaces"
39
- ]), W = (e) => {
39
+ ]), U = (e) => {
40
40
  let t = document.createElement(e.tagName.toLowerCase());
41
- H.forEach((n) => {
41
+ pe.forEach((n) => {
42
42
  let r = e.getAttribute(n);
43
43
  r !== null && t.setAttribute(n, r);
44
44
  });
45
45
  let { whiteSpace: n } = window.getComputedStyle(e);
46
- return U.has(n) && (t.style.whiteSpace = "pre-wrap"), t;
47
- }, re = (e) => e instanceof SVGElement || window.getComputedStyle(e).display === "none", G = (e, t) => {
46
+ return me.has(n) && (t.style.whiteSpace = "pre-wrap"), t;
47
+ }, W = (e) => e instanceof SVGElement || window.getComputedStyle(e).display === "none", G = (e, t) => {
48
48
  if (!t.intersectsNode(e)) return null;
49
49
  if (e.nodeType === Node.TEXT_NODE) {
50
50
  let n = e.data, r = e === t.startContainer ? t.startOffset : 0, i = e === t.endContainer ? t.endOffset : n.length;
51
51
  return document.createTextNode(n.slice(r, i));
52
52
  }
53
- if (!(e instanceof Element) || re(e)) return null;
54
- let n = W(e);
53
+ if (!(e instanceof Element) || W(e)) return null;
54
+ let n = U(e);
55
55
  return e.childNodes.forEach((e) => {
56
56
  let r = G(e, t);
57
57
  r && n.appendChild(r);
58
58
  }), n;
59
- }, ie = (e, t, n) => {
59
+ }, K = (e, t, n) => {
60
60
  let r = e, i = t;
61
61
  for (; i && i !== n && n.contains(i);) {
62
- let e = W(i);
62
+ let e = U(i);
63
63
  e.appendChild(r), r = e, i = i.parentElement;
64
64
  }
65
65
  return r;
66
- }, ae = (e, t) => {
66
+ }, he = (e, t) => {
67
67
  let n = e.commonAncestorContainer, r = n instanceof Element ? n : n.parentElement;
68
68
  if (!r) return null;
69
69
  let i = G(r, e);
70
- return i ? ie(i, r.parentElement, t) : null;
71
- }, oe = (e) => {
70
+ return i ? K(i, r.parentElement, t) : null;
71
+ }, ge = (e) => {
72
72
  let t = window.getSelection();
73
73
  if (!t || t.isCollapsed || t.rangeCount === 0 || !e.clipboardData) return;
74
74
  let n = t.toString();
75
75
  if (!n) return;
76
76
  let r = document.createElement("div");
77
77
  for (let n = 0; n < t.rangeCount; n++) {
78
- let i = ae(t.getRangeAt(n), e.currentTarget);
78
+ let i = he(t.getRangeAt(n), e.currentTarget);
79
79
  i && r.appendChild(i);
80
80
  }
81
81
  e.clipboardData.setData("text/html", r.innerHTML), e.clipboardData.setData("text/plain", n), e.preventDefault();
82
- }, K = { activeRating: "_activeRating_ygoee_1" }, q = 2e3, se = ({ role: e = a.User, onEdit: n, onEditHover: r, onDelete: o, onRegenerate: l, onCopy: u, onCopyMarkdown: d, onLike: f, onDislike: _, activeRating: v, isAlwaysVisible: y, isDisabled: x = !1, className: S, labels: C, colors: ee }) => {
83
- let { tooltips: w, ariaLabels: E } = C ?? {}, [D, O] = T(null), [R, z] = T(""), B = n != null || o != null || l != null || u != null || d != null || f != null || _ != null, V = s({ "--ma-active-rating-text": ee?.activeRatingText }), H = b(() => {
84
- u?.(), O("copy"), z(e === a.User ? E?.copiedMessageStatus ?? "Message copied to clipboard" : E?.copiedStatus ?? "Copied to clipboard"), setTimeout(() => O(null), q);
82
+ }, _e = { activeRating: "_activeRating_ygoee_1" }, ve = 2e3, ye = ({ role: e = a.User, onEdit: n, onEditHover: r, onDelete: o, onRegenerate: c, onCopy: l, onCopyMarkdown: u, onLike: f, onDislike: p, activeRating: m, isAlwaysVisible: h, leadingContent: b, trailingContent: x, isDisabled: w = !1, className: T, labels: ee, colors: te }) => {
83
+ let { tooltips: E, ariaLabels: D } = ee ?? {}, [O, j] = P(null), [M, N] = P(""), F = ne(void 0);
84
+ A(() => () => clearTimeout(F.current), []);
85
+ let I = k(() => {
86
+ clearTimeout(F.current), F.current = setTimeout(() => j(null), ve);
87
+ }, []), re = n != null || o != null || c != null || l != null || u != null || f != null || p != null || b != null || x != null, V = s({ "--ma-active-rating-text": te?.activeRatingText }), H = k(() => {
88
+ l?.(), j("copy"), N(e === a.User ? D?.copiedMessageStatus ?? "Message copied to clipboard" : D?.copiedStatus ?? "Copied to clipboard"), I();
85
89
  }, [
86
- u,
90
+ l,
87
91
  e,
88
- E?.copiedStatus,
89
- E?.copiedMessageStatus
90
- ]), U = b(() => {
91
- d?.(), O("markdown"), z(E?.copiedMarkdownStatus ?? "Copied as Markdown to clipboard"), setTimeout(() => O(null), q);
92
- }, [d, E?.copiedMarkdownStatus]);
93
- return B ? /* @__PURE__ */ L("div", {
92
+ D?.copiedStatus,
93
+ D?.copiedMessageStatus,
94
+ I
95
+ ]), de = k(() => {
96
+ u?.(), j("markdown"), N(D?.copiedMarkdownStatus ?? "Copied as Markdown to clipboard"), I();
97
+ }, [
98
+ u,
99
+ D?.copiedMarkdownStatus,
100
+ I
101
+ ]);
102
+ return re ? /* @__PURE__ */ B("div", {
94
103
  role: "toolbar",
95
- "aria-label": E?.actionsGroup ?? "Message actions",
104
+ "aria-label": D?.actionsGroup ?? "Message actions",
96
105
  style: V,
97
- className: c("flex gap-1", !y && "opacity-0 group-hover:opacity-100", S),
98
- children: [/* @__PURE__ */ I("span", {
99
- role: "status",
100
- "aria-live": "polite",
101
- className: "sr-only",
102
- children: R
103
- }), e === a.User ? /* @__PURE__ */ L(F, { children: [
104
- u && /* @__PURE__ */ I(t, {
105
- iconSize: p.SM,
106
- onClick: H,
107
- size: h.Small,
108
- isCopied: D === "copy",
109
- copyLabel: w?.copyMessage ?? "Copy message",
110
- copiedLabel: w?.copied ?? "Copied!",
111
- ariaLabel: E?.copyMessage ?? "Copy message",
112
- isDisabled: x
106
+ className: d("flex items-center gap-1", !h && "opacity-0 group-hover:opacity-100", T),
107
+ children: [
108
+ b,
109
+ /* @__PURE__ */ z(S, {
110
+ visuallyHidden: !0,
111
+ as: C.Span,
112
+ children: M
113
113
  }),
114
- n && /* @__PURE__ */ I(g, {
115
- icon: /* @__PURE__ */ I(A, {
116
- size: p.SM,
117
- "aria-hidden": !0,
118
- stroke: m
114
+ e === a.User ? /* @__PURE__ */ B(R, { children: [
115
+ l && /* @__PURE__ */ z(t, {
116
+ iconSize: g.SM,
117
+ onClick: H,
118
+ size: v.Small,
119
+ isCopied: O === "copy",
120
+ copyLabel: E?.copyMessage ?? "Copy message",
121
+ copiedLabel: E?.copied ?? "Copied!",
122
+ ariaLabel: D?.copyMessage ?? "Copy message",
123
+ isDisabled: w
119
124
  }),
120
- size: h.Small,
121
- "aria-label": E?.editMessage ?? "Edit message",
122
- tooltipProps: { tooltip: w?.edit ?? "Edit" },
123
- onClick: n,
124
- onMouseEnter: r,
125
- onFocus: r,
126
- disabled: x
127
- }),
128
- o && /* @__PURE__ */ I(g, {
129
- icon: /* @__PURE__ */ I(ne, {
130
- size: p.SM,
131
- "aria-hidden": !0,
132
- stroke: m
125
+ n && /* @__PURE__ */ z(y, {
126
+ icon: /* @__PURE__ */ z(ae, {
127
+ size: g.SM,
128
+ "aria-hidden": !0,
129
+ stroke: _
130
+ }),
131
+ size: v.Small,
132
+ "aria-label": D?.editMessage ?? "Edit message",
133
+ tooltipProps: { tooltip: E?.edit ?? "Edit" },
134
+ onClick: n,
135
+ onMouseEnter: r,
136
+ onFocus: r,
137
+ disabled: w
133
138
  }),
134
- size: h.Small,
135
- "aria-label": E?.deleteMessage ?? "Delete message",
136
- tooltipProps: { tooltip: w?.delete ?? "Delete" },
137
- onClick: o,
138
- disabled: x
139
- })
140
- ] }) : /* @__PURE__ */ L(F, { children: [
141
- l && /* @__PURE__ */ I(g, {
142
- icon: /* @__PURE__ */ I(j, {
143
- size: p.SM,
144
- "aria-hidden": !0,
145
- stroke: m
139
+ o && /* @__PURE__ */ z(y, {
140
+ icon: /* @__PURE__ */ z(ue, {
141
+ size: g.SM,
142
+ "aria-hidden": !0,
143
+ stroke: _
144
+ }),
145
+ size: v.Small,
146
+ "aria-label": D?.deleteMessage ?? "Delete message",
147
+ tooltipProps: { tooltip: E?.delete ?? "Delete" },
148
+ onClick: o,
149
+ disabled: w
150
+ })
151
+ ] }) : /* @__PURE__ */ B(R, { children: [
152
+ c && /* @__PURE__ */ z(y, {
153
+ icon: /* @__PURE__ */ z(L, {
154
+ size: g.SM,
155
+ "aria-hidden": !0,
156
+ stroke: _
157
+ }),
158
+ size: v.Small,
159
+ "aria-label": D?.regenerateResponse ?? "Regenerate response",
160
+ tooltipProps: { tooltip: E?.regenerate ?? "Regenerate" },
161
+ onClick: c,
162
+ disabled: w
146
163
  }),
147
- size: h.Small,
148
- "aria-label": E?.regenerateResponse ?? "Regenerate response",
149
- tooltipProps: { tooltip: w?.regenerate ?? "Regenerate" },
150
- onClick: l,
151
- disabled: x
152
- }),
153
- u && /* @__PURE__ */ I(t, {
154
- iconSize: p.SM,
155
- onClick: H,
156
- size: h.Small,
157
- isCopied: D === "copy",
158
- copyLabel: w?.copy ?? "Copy",
159
- copiedLabel: w?.copied ?? "Copied!",
160
- ariaLabel: E?.copyResponse ?? "Copy response",
161
- isDisabled: x
162
- }),
163
- d && /* @__PURE__ */ I(t, {
164
- iconSize: p.SM,
165
- onClick: U,
166
- size: h.Small,
167
- isCopied: D === "markdown",
168
- iconCopy: /* @__PURE__ */ I(k, {
169
- size: p.SM,
170
- "aria-hidden": !0,
171
- stroke: m
164
+ l && /* @__PURE__ */ z(t, {
165
+ iconSize: g.SM,
166
+ onClick: H,
167
+ size: v.Small,
168
+ isCopied: O === "copy",
169
+ copyLabel: E?.copy ?? "Copy",
170
+ copiedLabel: E?.copied ?? "Copied!",
171
+ ariaLabel: D?.copyResponse ?? "Copy response",
172
+ isDisabled: w
172
173
  }),
173
- copyLabel: w?.copyMarkdown ?? "Copy as Markdown",
174
- copiedLabel: w?.copiedMarkdown ?? "Copied!",
175
- ariaLabel: E?.copyAsMarkdown ?? "Copy as markdown",
176
- isDisabled: x
177
- }),
178
- f && /* @__PURE__ */ I(g, {
179
- icon: v === i.Like ? /* @__PURE__ */ I(te, {
180
- className: K.activeRating,
181
- size: p.SM,
182
- "aria-hidden": !0
183
- }) : /* @__PURE__ */ I(P, {
184
- size: p.SM,
185
- "aria-hidden": !0,
186
- stroke: m
174
+ u && /* @__PURE__ */ z(t, {
175
+ iconSize: g.SM,
176
+ onClick: de,
177
+ size: v.Small,
178
+ isCopied: O === "markdown",
179
+ iconCopy: /* @__PURE__ */ z(ie, {
180
+ size: g.SM,
181
+ "aria-hidden": !0,
182
+ stroke: _
183
+ }),
184
+ copyLabel: E?.copyMarkdown ?? "Copy as Markdown",
185
+ copiedLabel: E?.copiedMarkdown ?? "Copied!",
186
+ ariaLabel: D?.copyAsMarkdown ?? "Copy as markdown",
187
+ isDisabled: w
187
188
  }),
188
- size: h.Small,
189
- "aria-label": E?.likeResponse ?? "Like response",
190
- "aria-pressed": v === i.Like,
191
- tooltipProps: { tooltip: w?.like ?? "Like" },
192
- onClick: f,
193
- disabled: x
194
- }),
195
- _ && /* @__PURE__ */ I(g, {
196
- icon: v === i.Dislike ? /* @__PURE__ */ I(N, {
197
- className: K.activeRating,
198
- size: p.SM,
199
- "aria-hidden": !0
200
- }) : /* @__PURE__ */ I(M, {
201
- size: p.SM,
202
- "aria-hidden": !0,
203
- stroke: m
189
+ f && /* @__PURE__ */ z(y, {
190
+ icon: m === i.Like ? /* @__PURE__ */ z(le, {
191
+ className: _e.activeRating,
192
+ size: g.SM,
193
+ "aria-hidden": !0
194
+ }) : /* @__PURE__ */ z(ce, {
195
+ size: g.SM,
196
+ "aria-hidden": !0,
197
+ stroke: _
198
+ }),
199
+ size: v.Small,
200
+ "aria-label": D?.likeResponse ?? "Like response",
201
+ "aria-pressed": m === i.Like,
202
+ tooltipProps: { tooltip: E?.like ?? "Like" },
203
+ onClick: f,
204
+ disabled: w
204
205
  }),
205
- size: h.Small,
206
- "aria-label": E?.dislikeResponse ?? "Dislike response",
207
- "aria-pressed": v === i.Dislike,
208
- tooltipProps: { tooltip: w?.dislike ?? "Dislike" },
209
- onClick: _,
210
- disabled: x
211
- })
212
- ] })]
206
+ p && /* @__PURE__ */ z(y, {
207
+ icon: m === i.Dislike ? /* @__PURE__ */ z(se, {
208
+ className: _e.activeRating,
209
+ size: g.SM,
210
+ "aria-hidden": !0
211
+ }) : /* @__PURE__ */ z(oe, {
212
+ size: g.SM,
213
+ "aria-hidden": !0,
214
+ stroke: _
215
+ }),
216
+ size: v.Small,
217
+ "aria-label": D?.dislikeResponse ?? "Dislike response",
218
+ "aria-pressed": m === i.Dislike,
219
+ tooltipProps: { tooltip: E?.dislike ?? "Dislike" },
220
+ onClick: p,
221
+ disabled: w
222
+ })
223
+ ] }),
224
+ x
225
+ ]
213
226
  }) : null;
214
- }, J = {
215
- userBubble: "_userBubble_cq829_1",
216
- collapsibleText: "_collapsibleText_cq829_6",
217
- expandedText: "_expandedText_cq829_11",
218
- collapsedText: "_collapsedText_cq829_15",
219
- startersDivider: "_startersDivider_cq829_26",
220
- text: "_text_cq829_30"
221
- }, ce = "[&>.cm-bubble-markdown>div>*:first-child]:indent-[var(--cm-bubble-first-line-indent,0px)]", Y = ({ text: t, contentRef: i, styles: l, actions: d, hasAlwaysVisibleActions: f, isStreaming: p, attachments: m, beforeContent: h, responseFormat: g, afterContent: _, hasThinkingPlaceholder: v = !0, starters: b, onSelectStarter: x, deploymentIconUrl: S, deploymentDisplayName: C, markdownComponents: w, markdownClassNames: T, markdownUrlTransform: E, onAttachmentClick: D, onDownloadAll: O, onAttachmentRetry: k, codeBlockTheme: A, tableOnOpenInCanvas: j, labels: M, selectedAttachmentId: N }) => {
222
- let { colors: P, typography: te, className: ne, bubbleClassName: F } = l ?? {}, { attachmentClickLabel: R, attachmentDownloadLabel: B, attachmentRetryLabel: H, attachmentOpenInNewTabLabel: U, startersAriaLabel: W = "Quick reply buttons", thinkingLabel: re, codeBlockCopyLabel: G, codeBlockCopiedLabel: ie, codeBlockDownloadLabel: ae, tableCopyLabel: K, tableCopiedLabel: q, tableDownloadCsvLabel: Y, tableOpenInCanvasLabel: X, tableDownloadFilename: Z, tableScrollRegionAriaLabel: le, mathScrollRegionAriaLabel: Q, assistantMessageAriaLabel: ue = "Assistant message", deploymentIconFallbackLabel: de = "AI" } = M ?? {}, fe = ee(() => ({
223
- copyLabel: K,
224
- copiedLabel: q,
225
- downloadCsvLabel: Y,
226
- openInCanvasLabel: X
227
+ }, be = (e) => {
228
+ let [t, n] = P(() => /* @__PURE__ */ new Date());
229
+ return A(() => {
230
+ let t = setInterval(() => n(/* @__PURE__ */ new Date()), e);
231
+ return () => clearInterval(t);
232
+ }, [e]), t;
233
+ }, q = /* @__PURE__ */ function(e) {
234
+ return e.Today = "today", e.Yesterday = "yesterday", e.Absolute = "absolute", e;
235
+ }({}), J = {
236
+ hour: "numeric",
237
+ minute: "2-digit"
238
+ }, xe = {
239
+ year: "numeric",
240
+ month: "short",
241
+ day: "numeric",
242
+ ...J
243
+ }, Y = 60, X = 3600, Z = 24 * X, Q = [
244
+ ["year", 365 * Z],
245
+ ["month", 30 * Z],
246
+ ["week", 7 * Z],
247
+ ["day", Z],
248
+ ["hour", X],
249
+ ["minute", Y]
250
+ ], Se = (e, t) => e.getFullYear() === t.getFullYear() && e.getMonth() === t.getMonth() && e.getDate() === t.getDate(), Ce = (e) => {
251
+ if (!e) return null;
252
+ let t = new Date(e);
253
+ return Number.isNaN(t.getTime()) ? null : t;
254
+ }, we = (e, t) => new Intl.DateTimeFormat(t, xe).format(e), Te = (e, t, n) => {
255
+ let r = new Date(t.getFullYear(), t.getMonth(), t.getDate() - 1);
256
+ return Se(e, t) ? {
257
+ kind: q.Today,
258
+ text: new Intl.DateTimeFormat(n, J).format(e)
259
+ } : Se(e, r) ? {
260
+ kind: q.Yesterday,
261
+ text: new Intl.DateTimeFormat(n, J).format(e)
262
+ } : {
263
+ kind: q.Absolute,
264
+ text: we(e, n)
265
+ };
266
+ }, Ee = (e, t, n) => {
267
+ let r = new Intl.RelativeTimeFormat(n, { numeric: "auto" }), i = (t.getTime() - e.getTime()) / 1e3;
268
+ for (let [e, t] of Q) {
269
+ let n = Math.floor(i / t);
270
+ if (n >= 1) return r.format(-n, e);
271
+ }
272
+ return r.format(0, "second");
273
+ }, De = { time: "_time_16pwx_2" }, Oe = 6e4, ke = "opacity-0 transition-opacity group-hover/message:opacity-100 group-focus-within/message:opacity-100 [@media(hover:none)]:opacity-100", Ae = ({ timestamp: e, locale: t, className: n = "dial-small-text" }) => {
274
+ let r = be(Oe), i = Ce(e);
275
+ return i == null ? null : /* @__PURE__ */ z(D, {
276
+ tooltip: we(i, t),
277
+ asChild: !0,
278
+ children: /* @__PURE__ */ z("time", {
279
+ dateTime: e,
280
+ tabIndex: 0,
281
+ className: d("px-1 whitespace-nowrap", De.time, n, ke),
282
+ children: Ee(i, r, t)
283
+ })
284
+ });
285
+ }, $ = {
286
+ userBubble: "_userBubble_17fln_1",
287
+ collapsibleText: "_collapsibleText_17fln_6",
288
+ expandedText: "_expandedText_17fln_11",
289
+ collapsedText: "_collapsedText_17fln_15",
290
+ startersDivider: "_startersDivider_17fln_31",
291
+ text: "_text_17fln_35"
292
+ }, je = "[&>.cm-bubble-markdown>div>*:first-child]:indent-[var(--cm-bubble-first-line-indent,0px)]", Me = ({ text: t, contentRef: i, styles: c, actions: l, hasAlwaysVisibleActions: u, timestamp: f, locale: m, isStreaming: h, attachments: g, beforeContent: _, responseFormat: v, afterContent: y, hasThinkingPlaceholder: b = !0, starters: x, onSelectStarter: S, deploymentIconUrl: C, deploymentDisplayName: T, markdownComponents: ee, markdownClassNames: te, markdownUrlTransform: E, onAttachmentClick: D, onDownloadAll: O, isAttachmentDownloadable: k, onAttachmentRetry: A, codeBlockTheme: j, tableOnOpenInCanvas: M, labels: ne, selectedAttachmentId: P }) => {
293
+ let { colors: F, typography: I, className: re, bubbleClassName: ie, timestampClassName: ae } = c ?? {}, L = f == null ? void 0 : /* @__PURE__ */ z(Ae, {
294
+ timestamp: f,
295
+ locale: m,
296
+ className: ae
297
+ }), { attachmentClickLabel: oe, attachmentDownloadLabel: se, attachmentRetryLabel: ce, attachmentOpenInNewTabLabel: le, startersAriaLabel: ue = "Quick reply buttons", thinkingLabel: V, codeBlockCopyLabel: de, codeBlockCopiedLabel: pe, codeBlockDownloadLabel: me, tableCopyLabel: U, tableCopiedLabel: W, tableDownloadCsvLabel: G, tableOpenInCanvasLabel: K, tableDownloadFilename: he, tableScrollRegionAriaLabel: _e, mathScrollRegionAriaLabel: ve, assistantMessageAriaLabel: be = "Assistant message", deploymentIconFallbackLabel: q = "AI" } = ne ?? {}, J = N(() => ({
298
+ copyLabel: U,
299
+ copiedLabel: W,
300
+ downloadCsvLabel: G,
301
+ openInCanvasLabel: K
227
302
  }), [
228
- K,
229
- q,
230
- Y,
231
- X
232
- ]), pe = p ? (m ?? []).filter((t) => t.type !== e.Audio) : m ?? [], $ = !!t?.trim(), { slotRef: me, firstLineIndent: he } = V(h != null && $), ge = s({
233
- "--cm-bubble-text": P?.text,
234
- "--cm-starters-divider": P?.startersDivider,
235
- "--cm-bubble-first-line-indent": he
236
- }), _e = c(J.text, te?.fontClassName), ve = !!(S || C);
237
- return /* @__PURE__ */ L("div", {
303
+ U,
304
+ W,
305
+ G,
306
+ K
307
+ ]), xe = h ? (g ?? []).filter((t) => t.type !== e.Audio) : g ?? [], Y = !!t?.trim(), X = !Y && !b, { slotRef: Z, firstLineIndent: Q } = fe(_ != null && Y), Se = s({
308
+ "--cm-bubble-text": F?.text,
309
+ "--cm-starters-divider": F?.startersDivider,
310
+ "--cm-timestamp-text": F?.timestampText,
311
+ "--cm-bubble-first-line-indent": Q
312
+ }), Ce = d($.text, I?.fontClassName), we = !!(C || T);
313
+ return /* @__PURE__ */ B("div", {
238
314
  role: "group",
239
- "aria-label": ue,
240
- style: ge,
241
- onCopy: oe,
242
- className: c("flex w-full items-start gap-3", ne),
243
- children: [ve && /* @__PURE__ */ I(n, {
244
- src: S,
315
+ "aria-label": be,
316
+ style: Se,
317
+ onCopy: ge,
318
+ className: d("group/message flex w-full items-start gap-3", re),
319
+ children: [we && /* @__PURE__ */ z(n, {
320
+ src: C,
245
321
  size: 28,
246
- initialsName: C || de,
247
- labels: { tooltip: C ?? de }
248
- }), /* @__PURE__ */ L("div", {
249
- className: "flex w-full min-w-0 max-w-full flex-col items-start gap-5",
250
- children: [/* @__PURE__ */ L("div", {
251
- className: c("flex w-full min-w-0 max-w-full flex-col items-start gap-4", F),
322
+ initialsName: T || q,
323
+ labels: { tooltip: T ?? q }
324
+ }), /* @__PURE__ */ B("div", {
325
+ className: "flex w-full max-w-full min-w-0 flex-col items-start gap-5",
326
+ children: [/* @__PURE__ */ B("div", {
327
+ className: d("flex w-full max-w-full min-w-0 flex-col items-start gap-4", ie),
252
328
  children: [
253
- h != null && !$ && /* @__PURE__ */ I("div", {
329
+ _ != null && !Y && /* @__PURE__ */ z("div", {
254
330
  className: "min-w-0",
255
- children: h
331
+ children: _
256
332
  }),
257
- ($ || p && v) && /* @__PURE__ */ L("div", {
333
+ (Y || h) && /* @__PURE__ */ B("div", {
258
334
  "aria-live": "polite",
259
335
  "aria-atomic": "false",
260
- className: c(_e, "relative min-w-0 max-w-full text-start", h != null && $ && ce, z.assistantContent),
261
- children: [h != null && $ && /* @__PURE__ */ I("div", {
262
- ref: me,
263
- className: "absolute start-0 top-0",
264
- children: h
265
- }), /* @__PURE__ */ I("div", {
336
+ className: d(Ce, X ? "absolute" : "relative", "max-w-full min-w-0 text-start", _ != null && Y && je, H.assistantContent),
337
+ children: [_ != null && Y && /* @__PURE__ */ z("div", {
338
+ ref: Z,
339
+ className: "absolute inset-s-0 top-0",
340
+ children: _
341
+ }), !X && /* @__PURE__ */ z("div", {
266
342
  ref: i,
267
- className: "cm-bubble-markdown min-w-0 max-w-full",
268
- children: /* @__PURE__ */ I(r, {
343
+ className: "cm-bubble-markdown max-w-full min-w-0 wrap-anywhere",
344
+ children: /* @__PURE__ */ z(r, {
269
345
  content: t ?? "",
270
- isPlainText: g === o.PlainText,
271
- isStreaming: p,
272
- thinkingLabel: re,
273
- components: w,
274
- classNames: T,
346
+ isPlainText: v === o.PlainText,
347
+ isStreaming: h,
348
+ thinkingLabel: V,
349
+ components: ee,
350
+ classNames: te,
275
351
  urlTransform: E,
276
- codeBlockCopyLabel: G,
277
- codeBlockCopiedLabel: ie,
278
- codeBlockDownloadLabel: ae,
279
- codeBlockTheme: A,
280
- tableActionLabels: fe,
281
- tableDownloadFilename: Z,
282
- tableOnOpenInCanvas: j,
283
- tableScrollRegionAriaLabel: le,
284
- mathScrollRegionAriaLabel: Q
352
+ codeBlockCopyLabel: de,
353
+ codeBlockCopiedLabel: pe,
354
+ codeBlockDownloadLabel: me,
355
+ codeBlockTheme: j,
356
+ tableActionLabels: J,
357
+ tableDownloadFilename: he,
358
+ tableOnOpenInCanvas: M,
359
+ tableScrollRegionAriaLabel: _e,
360
+ mathScrollRegionAriaLabel: ve
285
361
  })
286
362
  })]
287
363
  }),
288
- /* @__PURE__ */ I(u, {
289
- attachments: pe,
364
+ /* @__PURE__ */ z(p, {
365
+ attachments: xe,
290
366
  onAttachmentClick: D ? (e) => {
291
- let t = m?.find((t) => t.id === e);
367
+ let t = g?.find((t) => t.id === e);
292
368
  t && D(t);
293
369
  } : void 0,
294
370
  onDownloadAll: O,
295
- onRetry: k,
371
+ isAttachmentDownloadable: k,
372
+ onRetry: A,
296
373
  labels: {
297
- clickLabel: R,
298
- downloadLabel: B,
299
- retryLabel: H,
300
- openInNewTabLabel: U
374
+ clickLabel: oe,
375
+ downloadLabel: se,
376
+ retryLabel: ce,
377
+ openInNewTabLabel: le
301
378
  },
302
- selectedAttachmentId: N
379
+ selectedAttachmentId: P
303
380
  }),
304
- _,
305
- /* @__PURE__ */ I(se, {
306
- ...d,
307
- isAlwaysVisible: f,
381
+ y,
382
+ /* @__PURE__ */ z(ye, {
383
+ ...l,
384
+ isAlwaysVisible: u,
385
+ trailingContent: L == null ? l?.trailingContent : /* @__PURE__ */ B(R, { children: [l?.trailingContent, L] }),
308
386
  role: a.Assistant
309
387
  })
310
388
  ]
311
- }), b && b.length > 0 && x && /* @__PURE__ */ I("div", {
389
+ }), x && x.length > 0 && S && /* @__PURE__ */ z("div", {
312
390
  role: "list",
313
- "aria-label": W,
314
- className: c("flex w-full flex-wrap gap-2 border-t pt-5", J.startersDivider),
315
- children: b.map((e, t) => /* @__PURE__ */ I("div", {
391
+ "aria-label": ue,
392
+ className: d("flex w-full flex-wrap gap-2 border-t pt-5", $.startersDivider),
393
+ children: x.map((e, t) => /* @__PURE__ */ z("div", {
316
394
  role: "listitem",
317
395
  className: "min-w-[40px]",
318
- children: /* @__PURE__ */ I(y, {
396
+ children: /* @__PURE__ */ z(w, {
319
397
  label: e.title,
320
398
  className: "min-w-[40px]",
321
- onClick: () => x(e)
399
+ onClick: () => S(e)
322
400
  })
323
401
  }, t))
324
402
  })]
325
403
  })]
326
404
  });
327
- }, X = ({ labels: { titleText: e = "Model switched.", bodyText: t } }) => /* @__PURE__ */ I("div", {
328
- role: "status",
329
- "aria-live": "polite",
330
- children: /* @__PURE__ */ I(_, {
331
- title: e,
332
- message: t,
333
- textClassName: "flex-row flex-wrap gap-1"
334
- })
335
- }), Z = /* @__PURE__ */ function(e) {
405
+ }, Ne = ({ labels: { titleText: e = "Model switched.", bodyText: t } }) => /* @__PURE__ */ z(b, {
406
+ title: e,
407
+ message: t,
408
+ textClassName: "flex-row flex-wrap gap-1"
409
+ }), Pe = /* @__PURE__ */ function(e) {
336
410
  return e.Bottom = "Bottom", e.Top = "Top", e;
337
- }({}), le = 10, Q = ({ text: e, contentRef: t, position: n = Z.Bottom, styles: r, actions: i, hasAlwaysVisibleActions: o, attachments: d, collapsedLineCount: f = le, labels: m, textSegments: g, onAttachmentClick: _, onDownloadAll: y, onAttachmentRetry: b, selectedAttachmentId: x }) => {
338
- let { colors: C, typography: ee, className: w, bubbleClassName: T } = r ?? {}, { showMoreLabel: E = "Show more", showLessLabel: k = "Show less", showMoreAriaLabel: A, showLessAriaLabel: j, attachmentClickLabel: M, attachmentDownloadLabel: N, attachmentRetryLabel: P, attachmentOpenInNewTabLabel: te, userMessageAriaLabel: ne = "User message" } = m ?? {}, { textRef: R, isTextCollapsed: B, isOverflowing: V, collapsedMaxHeight: H, expandedMaxHeight: U, isCollapsed: W, toggleCollapsed: re } = l({
411
+ }({}), Fe = 10, Ie = "[&>div>*:first-child]:mt-0 [&>div>*:last-child]:mb-0", Le = [], Re = ({ text: e, contentRef: t, position: n = Pe.Bottom, styles: i, actions: o, hasAlwaysVisibleActions: m, timestamp: h, locale: _, attachments: y, collapsedLineCount: b = Fe, labels: S, textSegments: C, onAttachmentClick: w, onDownloadAll: T, isAttachmentDownloadable: ee, onAttachmentRetry: te, selectedAttachmentId: E, markdownClassNames: D, markdownUrlTransform: O, codeBlockTheme: k, tableOnOpenInCanvas: A }) => {
412
+ let { colors: M, typography: ne, className: P, bubbleClassName: F, timestampClassName: ie } = i ?? {}, ae = h == null ? void 0 : /* @__PURE__ */ z(Ae, {
413
+ timestamp: h,
414
+ locale: _,
415
+ className: ie
416
+ }), { showMoreLabel: L = "Show more", showLessLabel: oe = "Show less", showMoreAriaLabel: se, showLessAriaLabel: ce, attachmentClickLabel: le, attachmentDownloadLabel: ue, attachmentRetryLabel: V, attachmentOpenInNewTabLabel: de, userMessageAriaLabel: fe = "User message", codeBlockCopyLabel: pe, codeBlockCopiedLabel: me, codeBlockDownloadLabel: U, tableCopyLabel: W, tableCopiedLabel: G, tableDownloadCsvLabel: K, tableOpenInCanvasLabel: he, tableDownloadFilename: _e, tableScrollRegionAriaLabel: ve, mathScrollRegionAriaLabel: be } = S ?? {}, q = N(() => ({
417
+ copyLabel: W,
418
+ copiedLabel: G,
419
+ downloadCsvLabel: K,
420
+ openInCanvasLabel: he
421
+ }), [
422
+ W,
423
+ G,
424
+ K,
425
+ he
426
+ ]), { textRef: J, isTextCollapsed: xe, isOverflowing: Y, collapsedMaxHeight: X, expandedMaxHeight: Z, isCollapsed: Q, toggleCollapsed: Se } = f({
339
427
  text: e ?? "",
340
- collapsedLineCount: f
341
- }), G = s({
342
- "--cm-bubble-user-bg": C?.userBackground,
343
- "--cm-bubble-user-border": C?.userBorder,
344
- "--cm-bubble-fade-start": C?.fadeStart,
345
- "--cm-bubble-text": C?.text,
346
- "--cm-bubble-collapsed-height": V ? `${H}px` : void 0,
347
- "--cm-bubble-expanded-height": V ? `${U}px` : void 0
348
- }), ie = n === Z.Top ? "rounded-ee-md rounded-se-2xl" : "rounded-se-md rounded-ee-2xl", ae = c(J.text, ee?.fontClassName), K = A ?? E, q = j ?? k, ce = W ? E : k, Y = W ? K : q, X = W ? D : O, Q = S();
349
- return /* @__PURE__ */ I("div", {
428
+ collapsedLineCount: b
429
+ }), Ce = s({
430
+ "--cm-bubble-user-bg": M?.userBackground,
431
+ "--cm-bubble-user-border": M?.userBorder,
432
+ "--cm-bubble-fade-start": M?.fadeStart,
433
+ "--cm-bubble-text": M?.text,
434
+ "--cm-timestamp-text": M?.timestampText,
435
+ "--cm-bubble-collapsed-height": Y ? `${X}px` : void 0,
436
+ "--cm-bubble-expanded-height": Y ? `${Z}px` : void 0
437
+ }), we = n === Pe.Top ? "rounded-ee-md rounded-se-2xl" : "rounded-se-md rounded-ee-2xl", Te = d($.text, ne?.fontClassName), { markdownSource: Ee, segmentRehypePlugins: De, segmentComponents: Oe } = N(() => {
438
+ if (C == null) return {
439
+ markdownSource: e ?? "",
440
+ segmentRehypePlugins: Le,
441
+ segmentComponents: void 0
442
+ };
443
+ let { source: t, inlineSegments: n } = c(C);
444
+ return {
445
+ markdownSource: t,
446
+ segmentRehypePlugins: [u(n)],
447
+ segmentComponents: l(n)
448
+ };
449
+ }, [e, C]), ke = se ?? L, je = ce ?? oe, Me = Q ? L : oe, Ne = Q ? ke : je, Re = Q ? I : re, ze = j();
450
+ return /* @__PURE__ */ z("div", {
350
451
  role: "group",
351
- "aria-label": ne,
352
- style: G,
353
- onCopy: oe,
354
- className: c("flex w-full", w),
355
- children: /* @__PURE__ */ L("div", {
356
- className: "ms-auto flex w-fit min-w-0 max-w-full flex-col items-end gap-4",
452
+ "aria-label": fe,
453
+ style: Ce,
454
+ onCopy: ge,
455
+ className: d("group/message flex w-full", P),
456
+ children: /* @__PURE__ */ B("div", {
457
+ className: "ms-auto flex w-fit max-w-full min-w-0 flex-col items-end gap-4",
357
458
  children: [
358
- /* @__PURE__ */ I(u, {
359
- attachments: d ?? [],
360
- onAttachmentClick: _ ? (e) => {
361
- let t = d?.find((t) => t.id === e);
362
- t && _(t);
459
+ /* @__PURE__ */ z(p, {
460
+ attachments: y ?? [],
461
+ onAttachmentClick: w ? (e) => {
462
+ let t = y?.find((t) => t.id === e);
463
+ t && w(t);
363
464
  } : void 0,
364
- onDownloadAll: y,
365
- onRetry: b,
465
+ onDownloadAll: T,
466
+ isAttachmentDownloadable: ee,
467
+ onRetry: te,
366
468
  labels: {
367
- clickLabel: M,
368
- downloadLabel: N,
369
- retryLabel: P,
370
- openInNewTabLabel: te
469
+ clickLabel: le,
470
+ downloadLabel: ue,
471
+ retryLabel: V,
472
+ openInNewTabLabel: de
371
473
  },
372
474
  styles: { className: "max-w-[640px]" },
373
- selectedAttachmentId: x
475
+ selectedAttachmentId: E
374
476
  }),
375
- e && /* @__PURE__ */ I("div", {
376
- className: c(J.userBubble, "flex w-fit items-center justify-end rounded-es-2xl rounded-ss-2xl border px-6 py-4", ie, T, z.userBubble),
377
- children: /* @__PURE__ */ L("div", {
477
+ e && /* @__PURE__ */ z("div", {
478
+ className: d($.userBubble, "flex w-fit max-w-full min-w-0 items-center justify-end rounded-ss-2xl rounded-es-2xl border px-6 py-4 wrap-anywhere", we, F, H.userBubble),
479
+ children: /* @__PURE__ */ B("div", {
378
480
  className: "flex min-w-0 flex-col items-start",
379
- children: [/* @__PURE__ */ I("div", {
380
- id: Q,
481
+ children: [/* @__PURE__ */ z("div", {
482
+ id: ze,
381
483
  ref: t,
382
- className: c("relative -me-1 -ms-1 w-[calc(100%+8px)] overflow-hidden pe-1 ps-1", V && J.collapsibleText, V && !W && J.expandedText, B && J.collapsedText),
383
- children: /* @__PURE__ */ I("p", {
384
- ref: R,
385
- className: c(ae, "whitespace-pre-wrap text-start [overflow-wrap:anywhere]"),
386
- children: g ?? e
484
+ className: d("relative -ms-1 -me-1 w-[calc(100%+8px)] overflow-hidden ps-1 pe-1", Y && $.collapsibleText, Y && !Q && $.expandedText, xe && $.collapsedText),
485
+ children: /* @__PURE__ */ z("div", {
486
+ ref: J,
487
+ className: d(Te, "max-w-full min-w-0 text-start", Ie),
488
+ children: /* @__PURE__ */ z(r, {
489
+ content: Ee,
490
+ isRawHtmlEnabled: !1,
491
+ rehypePlugins: De,
492
+ components: Oe,
493
+ classNames: D,
494
+ urlTransform: O,
495
+ codeBlockCopyLabel: pe,
496
+ codeBlockCopiedLabel: me,
497
+ codeBlockDownloadLabel: U,
498
+ codeBlockTheme: k,
499
+ tableActionLabels: q,
500
+ tableDownloadFilename: _e,
501
+ tableOnOpenInCanvas: A,
502
+ tableScrollRegionAriaLabel: ve,
503
+ mathScrollRegionAriaLabel: be
504
+ })
387
505
  })
388
- }), V && /* @__PURE__ */ I(v, {
389
- label: /* @__PURE__ */ I(F, { children: ce }),
390
- iconBefore: /* @__PURE__ */ I(X, {
391
- size: p.SM,
506
+ }), Y && /* @__PURE__ */ z(x, {
507
+ label: /* @__PURE__ */ z(R, { children: Me }),
508
+ iconBefore: /* @__PURE__ */ z(Re, {
509
+ size: g.SM,
392
510
  "aria-hidden": "true"
393
511
  }),
394
- "aria-label": Y,
395
- "aria-expanded": !W,
396
- "aria-controls": Q,
512
+ "aria-label": Ne,
513
+ "aria-expanded": !Q,
514
+ "aria-controls": ze,
397
515
  className: "mt-3",
398
- onClick: re,
399
- size: h.Small
516
+ onClick: Se,
517
+ size: v.Small
400
518
  })]
401
519
  })
402
520
  }),
403
- /* @__PURE__ */ I(se, {
404
- ...i,
405
- isAlwaysVisible: o,
521
+ /* @__PURE__ */ z(ye, {
522
+ ...o,
523
+ isAlwaysVisible: m,
524
+ leadingContent: ae == null ? o?.leadingContent : /* @__PURE__ */ B(R, { children: [ae, o?.leadingContent] }),
406
525
  role: a.User
407
526
  })
408
527
  ]
409
528
  })
410
529
  });
411
- }, ue = ({ role: e, beforeContent: t, textSegments: n, onAttachmentClick: r, responseFormat: i, markdownComponents: o, markdownUrlTransform: s, ...c }) => e === a.Status ? /* @__PURE__ */ I(X, { labels: {
530
+ }, ze = ({ role: e, beforeContent: t, textSegments: n, onAttachmentClick: r, responseFormat: i, markdownComponents: o, markdownUrlTransform: s, ...c }) => e === a.Status ? /* @__PURE__ */ z(Ne, { labels: {
412
531
  titleText: c.labels?.statusTitleText,
413
532
  bodyText: c.labels?.statusBodyText ?? ""
414
- } }) : e === a.User ? /* @__PURE__ */ I(Q, {
533
+ } }) : e === a.User ? /* @__PURE__ */ z(Re, {
415
534
  ...c,
416
535
  textSegments: n,
536
+ markdownUrlTransform: s,
417
537
  onAttachmentClick: r
418
- }) : /* @__PURE__ */ I(Y, {
538
+ }) : /* @__PURE__ */ z(Me, {
419
539
  ...c,
420
540
  beforeContent: t,
421
541
  responseFormat: i,
422
542
  markdownComponents: o,
423
543
  markdownUrlTransform: s,
424
544
  onAttachmentClick: r
425
- }), de = { button: "_button_tqo4d_3" }, fe = ({ rect: e, actionRef: t, onReply: n, addedRevision: r, labels: i, styles: a, portalContainer: o }) => {
426
- let { colors: l, typography: u, className: p, buttonClassName: g } = a ?? {}, _ = u?.fontClassName ?? "dial-small-text", v = o === void 0 ? typeof document > "u" ? null : document.body : o, y = s({
427
- "--cm-reply-background": l?.background,
428
- "--cm-reply-hover-background": l?.hoverBackground,
429
- "--cm-reply-text": l?.text
430
- }), [b, x] = T({
545
+ }), Be = { button: "_button_tqo4d_3" }, Ve = ({ rect: e, actionRef: t, onReply: n, addedRevision: r, labels: i, styles: a, portalContainer: o }) => {
546
+ let { colors: c, typography: l, className: u, buttonClassName: f } = a ?? {}, p = l?.fontClassName ?? "dial-small-text", g = o === void 0 ? typeof document > "u" ? null : document.body : o, y = s({
547
+ "--cm-reply-background": c?.background,
548
+ "--cm-reply-hover-background": c?.hoverBackground,
549
+ "--cm-reply-text": c?.text
550
+ }), [b, x] = P({
431
551
  x: 0,
432
552
  y: 0
433
553
  });
434
- return C(() => {
554
+ return M(() => {
435
555
  if (!e || !t.current) return;
436
556
  let n = t.current.getBoundingClientRect(), r = window.visualViewport, i = r?.offsetLeft ?? 0, a = r?.offsetTop ?? 0, o = r?.width ?? document.documentElement.clientWidth, s = r?.height ?? document.documentElement.clientHeight, c = e.top - n.height - 8 >= a + 8 ? e.top - n.height - 8 : e.bottom + 8;
437
557
  x({
@@ -441,38 +561,95 @@ var z = {
441
561
  }, [
442
562
  e,
443
563
  t,
444
- v,
445
- p,
446
564
  g,
447
- _,
565
+ u,
566
+ f,
567
+ p,
448
568
  i.reply
449
- ]), v ? R(/* @__PURE__ */ L(F, { children: [e && /* @__PURE__ */ I("div", {
569
+ ]), g ? V(/* @__PURE__ */ B(R, { children: [e && /* @__PURE__ */ z("div", {
450
570
  ref: t,
451
- className: c("fixed left-0 top-0 z-50 max-w-[calc(100vw-16px)]", p),
571
+ className: d("fixed top-0 left-0 z-50 max-w-[calc(100vw-16px)]", u),
452
572
  style: {
453
573
  ...y,
454
574
  transform: `translate(${b.x}px, ${b.y}px)`
455
575
  },
456
- children: /* @__PURE__ */ I(d, {
457
- variant: f.Neutral,
458
- size: h.Small,
576
+ children: /* @__PURE__ */ z(m, {
577
+ variant: h.Neutral,
578
+ size: v.Small,
459
579
  label: i.reply,
460
580
  onClick: n,
461
- textClassName: _,
462
- className: c(de.button, "h-8 min-h-8 min-w-11 px-2 shadow-lg mobile:h-11 mobile:min-h-11", g),
463
- iconAfter: /* @__PURE__ */ I(E, {
581
+ textClassName: p,
582
+ className: d(Be.button, "h-8 min-h-8 min-w-11 px-2 shadow-lg mobile:h-11 mobile:min-h-11", f),
583
+ iconAfter: /* @__PURE__ */ z(F, {
464
584
  size: 16,
465
- stroke: m,
585
+ stroke: _,
466
586
  "aria-hidden": "true",
467
587
  className: "rtl:scale-x-[-1]"
468
588
  })
469
589
  })
470
- }), /* @__PURE__ */ I("div", {
471
- role: "status",
472
- "aria-live": "polite",
473
- className: "sr-only",
474
- children: e ? i.selectionAvailable : r > 0 ? /* @__PURE__ */ I("span", { children: i.attachmentAdded }, r) : null
475
- })] }), v) : null;
476
- };
590
+ }), /* @__PURE__ */ z(S, {
591
+ visuallyHidden: !0,
592
+ children: e ? i.selectionAvailable : r > 0 ? /* @__PURE__ */ z("span", { children: i.attachmentAdded }, r) : null
593
+ })] }), g) : null;
594
+ }, He = { label: "_label_1nohb_1" }, Ue = (e) => `Today ${e}`, We = (e) => `Yesterday ${e}`, Ge = ({ timestamp: e, locale: t, labels: n, className: r = "dial-small-text", colors: i }) => {
595
+ let a = Ce(e);
596
+ if (a == null) return null;
597
+ let { kind: o, text: c } = Te(a, /* @__PURE__ */ new Date(), t), l = c;
598
+ return o === q.Today ? l = (n?.today ?? Ue)(c) : o === q.Yesterday && (l = (n?.yesterday ?? We)(c)), /* @__PURE__ */ z("time", {
599
+ dateTime: e,
600
+ className: d("self-center text-center", He.label, r),
601
+ style: s({ "--cst-text": i?.text }),
602
+ children: l
603
+ });
604
+ }, Ke = /* @__PURE__ */ function(e) {
605
+ return e.UiBug = "UI bug", e.OveractiveRefusal = "Overactive refusal", e.IncompleteResponse = "Incomplete response", e.ShouldHaveTriggeredThinking = "Should have triggered thinking", e.ShouldHaveSearchedTheWeb = "Should have searched the web", e;
606
+ }({}), qe = O(({ onClose: e, onSubmit: t, isCommentEnabled: n = !0, labels: r }) => {
607
+ let { title: i = "Send negative feedback", feedbackTypeLabel: a = "What type of feedback you want to give?", selectPlaceholder: o = "Select", commentPlaceholder: s = "Type an optional comment to your feedback", sendLabel: c = "Send", categoryLabels: l } = r ?? {}, [u, d] = P(""), [f, p] = P(""), m = N(() => Object.values(Ke).map((e) => ({
608
+ value: e,
609
+ label: l?.[e] ?? e
610
+ })), [l]), g = k(() => {
611
+ t(f.trim() ? `${u}: ${f.trim()}` : u);
612
+ }, [
613
+ u,
614
+ f,
615
+ t
616
+ ]), _ = N(() => [{
617
+ label: c,
618
+ variant: h.Primary,
619
+ disabled: !u,
620
+ onClick: g
621
+ }], [
622
+ u,
623
+ g,
624
+ c
625
+ ]);
626
+ return /* @__PURE__ */ z(T, {
627
+ open: !0,
628
+ header: i,
629
+ onClose: e,
630
+ size: ee.Sm,
631
+ className: "h-[422px]!",
632
+ mainButtons: _,
633
+ children: /* @__PURE__ */ B("div", {
634
+ className: "flex h-full flex-col gap-4 px-6 py-4",
635
+ children: [/* @__PURE__ */ z(te, {
636
+ labelProps: {
637
+ label: a,
638
+ required: !0
639
+ },
640
+ options: m,
641
+ value: u,
642
+ placeholder: o,
643
+ onChange: (e) => d(e)
644
+ }), n && /* @__PURE__ */ z(E, {
645
+ value: f,
646
+ placeholder: s,
647
+ onChange: (e) => p(e ?? ""),
648
+ containerClassName: "flex-1",
649
+ className: "h-full"
650
+ })]
651
+ })
652
+ });
653
+ });
477
654
  //#endregion
478
- export { Y as AssistantMessageBubble, Z as BubblePosition, z as CONVERSATION_MESSAGES_CLASS, se as MessageActions, ue as MessageBubble, fe as MessageSelectionReply, X as StatusMessageBubble, Q as UserMessageBubble };
655
+ export { Me as AssistantMessageBubble, Pe as BubblePosition, H as CONVERSATION_MESSAGES_CLASS, Ge as ConversationStartTimestamp, ye as MessageActions, ze as MessageBubble, Ve as MessageSelectionReply, Ke as NegativeFeedbackCategory, qe as NegativeFeedbackModal, Ne as StatusMessageBubble, Re as UserMessageBubble };