@aleph-alpha/chat-kit 5.2.0 → 5.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/{CkHistory.vue_vue_type_script_setup_true_lang-BxzHdcxY.js → CkHistory.vue_vue_type_script_setup_true_lang-D9oP6oEj.js} +217 -120
  2. package/dist/chat-kit.css +3 -3
  3. package/dist/components/base/CkConversationLayout/CkConversationLayout.vue.d.ts.map +1 -1
  4. package/dist/components/base/CkEditableUserMessage/CkEditableUserMessage.stories.d.ts +12 -0
  5. package/dist/components/base/CkEditableUserMessage/CkEditableUserMessage.stories.d.ts.map +1 -0
  6. package/dist/components/base/CkEditableUserMessage/CkEditableUserMessage.vue.d.ts +22 -0
  7. package/dist/components/base/CkEditableUserMessage/CkEditableUserMessage.vue.d.ts.map +1 -0
  8. package/dist/components/base/CkEditableUserMessage/index.d.ts +3 -0
  9. package/dist/components/base/CkEditableUserMessage/index.d.ts.map +1 -0
  10. package/dist/components/base/CkEditableUserMessage/types.d.ts +30 -0
  11. package/dist/components/base/CkEditableUserMessage/types.d.ts.map +1 -0
  12. package/dist/components/base/CkUserMessage/CkUserMessage.vue.d.ts.map +1 -1
  13. package/dist/components/base/CkUserMessage/types.d.ts +4 -1
  14. package/dist/components/base/CkUserMessage/types.d.ts.map +1 -1
  15. package/dist/components/base/index.d.ts +2 -0
  16. package/dist/components/base/index.d.ts.map +1 -1
  17. package/dist/components/composed/CkHistory/CkHistory.vue.d.ts +1 -0
  18. package/dist/components/composed/CkHistory/CkHistory.vue.d.ts.map +1 -1
  19. package/dist/components/composed/CkHistory/types.d.ts +9 -1
  20. package/dist/components/composed/CkHistory/types.d.ts.map +1 -1
  21. package/dist/components/index.d.ts +2 -2
  22. package/dist/components/index.d.ts.map +1 -1
  23. package/dist/components/index.js +21 -20
  24. package/dist/handlers/index.js +1 -1
  25. package/dist/handlers/useChatKitLabels.d.ts +4 -0
  26. package/dist/handlers/useChatKitLabels.d.ts.map +1 -1
  27. package/dist/index.d.ts +2 -2
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +23 -22
  30. package/dist/{useChatKitLabels-zMFV7aEz.js → useChatKitLabels-DLy0BFx8.js} +2 -0
  31. package/package.json +2 -2
  32. package/src/components/base/CkConversationLayout/CkConversationLayout.spec.ts +84 -1
  33. package/src/components/base/CkConversationLayout/CkConversationLayout.vue +61 -18
  34. package/src/components/base/CkEditableUserMessage/CkEditableUserMessage.spec.ts +53 -0
  35. package/src/components/base/CkEditableUserMessage/CkEditableUserMessage.stories.ts +53 -0
  36. package/src/components/base/CkEditableUserMessage/CkEditableUserMessage.vue +58 -0
  37. package/src/components/base/CkEditableUserMessage/index.ts +5 -0
  38. package/src/components/base/CkEditableUserMessage/types.ts +30 -0
  39. package/src/components/base/CkHistoryWrapper/CkHistoryWrapper.vue +1 -1
  40. package/src/components/base/CkUserMessage/CkUserMessage.vue +19 -30
  41. package/src/components/base/CkUserMessage/types.ts +4 -1
  42. package/src/components/base/index.ts +5 -0
  43. package/src/components/composed/CkHistory/CkHistory.spec.ts +30 -0
  44. package/src/components/composed/CkHistory/CkHistory.vue +5 -1
  45. package/src/components/composed/CkHistory/types.ts +9 -1
  46. package/src/components/index.ts +3 -0
  47. package/src/handlers/useChatKitLabels.ts +6 -0
  48. package/src/index.ts +3 -0
@@ -1,6 +1,6 @@
1
1
  import { defineComponent, openBlock, createBlock, unref, createElementBlock, createElementVNode, normalizeClass, renderSlot, createCommentVNode, mergeProps, withCtx, computed, createVNode, toDisplayString, ref, onBeforeUnmount, onMounted, nextTick, onUnmounted, watch, Fragment, renderList, normalizeStyle, Transition, createStaticVNode, Teleport, withModifiers, toValue, h, toRefs, useId, createTextVNode, useAttrs, useSlots, resolveDynamicComponent, useTemplateRef, onUpdated, createSlots, normalizeProps, guardReactiveProps, Comment, Text } from "vue";
2
- import { UiIcon, UiButton, UiFileType, UiPopover, UiPopoverTrigger, UiPopoverContent, UiTooltip, formatFileSize, UiDialog, UiDialogContent, UiDialogDescription, UiFieldLabel, UiToggleGroup, UiToggleGroupItem, UiField, UiTextarea, UiFileItem, UiProgress, Primitive, UiAvatar, UiAvatarImage, UiSpinner, UiAvatarFallback, UiSidebarPopoverMenu, UiSidebarPopoverMenuItem } from "@aleph-alpha/ui-library";
3
- import { u as useChatKitLabels, d as defaultChatKitLabels, r as remarkCitations, a as useMarkdownParser } from "./useChatKitLabels-zMFV7aEz.js";
2
+ import { UiIcon, UiButton, UiFileType, UiPopover, UiPopoverTrigger, UiPopoverContent, UiTooltip, formatFileSize, UiDialog, UiDialogContent, UiDialogDescription, UiFieldLabel, UiToggleGroup, UiToggleGroupItem, UiField, UiTextarea, UiFileItem, UiProgress, Primitive, UiFloatActions, UiFloatActionItems, UiAvatar, UiAvatarImage, UiSpinner, UiAvatarFallback, UiSidebarPopoverMenu, UiSidebarPopoverMenuItem } from "@aleph-alpha/ui-library";
3
+ import { u as useChatKitLabels, d as defaultChatKitLabels, r as remarkCitations, a as useMarkdownParser } from "./useChatKitLabels-DLy0BFx8.js";
4
4
  const MINUTE = 60;
5
5
  const HOUR = 60 * MINUTE;
6
6
  const DAY = 24 * HOUR;
@@ -36,7 +36,7 @@ function formatRelativeTime(unixSeconds, nowSeconds = Math.floor(Date.now() / 1e
36
36
  const years = Math.floor(delta / YEAR);
37
37
  return years === 1 ? "1 year ago" : `${years} years ago`;
38
38
  }
39
- const _sfc_main$s = /* @__PURE__ */ defineComponent({
39
+ const _sfc_main$t = /* @__PURE__ */ defineComponent({
40
40
  ...{ name: "CkSendIcon" },
41
41
  __name: "CkSendIcon",
42
42
  setup(__props) {
@@ -52,7 +52,7 @@ const _hoisted_1$h = {
52
52
  viewBox: "0 0 16 16",
53
53
  fill: "none"
54
54
  };
55
- const _sfc_main$r = /* @__PURE__ */ defineComponent({
55
+ const _sfc_main$s = /* @__PURE__ */ defineComponent({
56
56
  ...{ name: "CkStopIcon" },
57
57
  __name: "CkStopIcon",
58
58
  setup(__props) {
@@ -76,7 +76,7 @@ const _hoisted_3$9 = {
76
76
  key: 1,
77
77
  class: "flex items-center gap-4"
78
78
  };
79
- const _sfc_main$q = /* @__PURE__ */ defineComponent({
79
+ const _sfc_main$r = /* @__PURE__ */ defineComponent({
80
80
  ...{ name: "CkAgentMessage" },
81
81
  __name: "CkAgentMessage",
82
82
  props: {
@@ -114,7 +114,7 @@ const _hoisted_3$8 = {
114
114
  "data-testid": "ck-agent-message-header-activity",
115
115
  class: "flex flex-shrink-0 items-center"
116
116
  };
117
- const _sfc_main$p = /* @__PURE__ */ defineComponent({
117
+ const _sfc_main$q = /* @__PURE__ */ defineComponent({
118
118
  ...{ name: "CkAgentMessageHeader" },
119
119
  __name: "CkAgentMessageHeader",
120
120
  setup(__props) {
@@ -139,7 +139,7 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
139
139
  };
140
140
  }
141
141
  });
142
- const _sfc_main$o = /* @__PURE__ */ defineComponent({
142
+ const _sfc_main$p = /* @__PURE__ */ defineComponent({
143
143
  ...{
144
144
  name: "CkHeaderActivityButton"
145
145
  },
@@ -184,12 +184,12 @@ const _sfc_main$o = /* @__PURE__ */ defineComponent({
184
184
  const _hoisted_1$e = { class: "ck-citation-card flex w-[22.5rem] max-w-[90vw] flex-col gap-2 rounded-md bg-background-surface-floating px-6 pb-6 pt-4 shadow-md" };
185
185
  const _hoisted_2$8 = { class: "flex items-center gap-2" };
186
186
  const _hoisted_3$7 = ["title"];
187
- const _hoisted_4$6 = { class: "line-clamp-6 break-words text-sm leading-5 text-content-on-surface-secondary" };
187
+ const _hoisted_4$7 = { class: "line-clamp-6 break-words text-sm leading-5 text-content-on-surface-secondary" };
188
188
  const _hoisted_5$4 = {
189
189
  key: 0,
190
190
  class: "text-sm leading-5 text-content-on-surface-muted"
191
191
  };
192
- const _sfc_main$n = /* @__PURE__ */ defineComponent({
192
+ const _sfc_main$o = /* @__PURE__ */ defineComponent({
193
193
  ...{
194
194
  name: "CkCitationCard"
195
195
  },
@@ -243,7 +243,7 @@ const _sfc_main$n = /* @__PURE__ */ defineComponent({
243
243
  _: 1
244
244
  }, 8, ["aria-label"])) : createCommentVNode("", true)
245
245
  ]),
246
- createElementVNode("p", _hoisted_4$6, toDisplayString(__props.snippet), 1),
246
+ createElementVNode("p", _hoisted_4$7, toDisplayString(__props.snippet), 1),
247
247
  __props.locationLabel ? (openBlock(), createElementBlock("p", _hoisted_5$4, toDisplayString(__props.locationLabel), 1)) : createCommentVNode("", true)
248
248
  ]);
249
249
  };
@@ -251,7 +251,7 @@ const _sfc_main$n = /* @__PURE__ */ defineComponent({
251
251
  });
252
252
  const _hoisted_1$d = ["aria-label"];
253
253
  const CLOSE_DELAY_MS = 80;
254
- const _sfc_main$m = /* @__PURE__ */ defineComponent({
254
+ const _sfc_main$n = /* @__PURE__ */ defineComponent({
255
255
  ...{
256
256
  name: "CkCitation"
257
257
  },
@@ -353,7 +353,7 @@ const _sfc_main$m = /* @__PURE__ */ defineComponent({
353
353
  onFocusout: onContentFocusOut
354
354
  }, {
355
355
  default: withCtx(() => [
356
- createVNode(unref(_sfc_main$n), {
356
+ createVNode(unref(_sfc_main$o), {
357
357
  "file-name": __props.fileName,
358
358
  snippet: __props.snippet,
359
359
  "location-label": __props.locationLabel,
@@ -377,17 +377,18 @@ const _export_sfc = (sfc, props) => {
377
377
  }
378
378
  return target;
379
379
  };
380
- const CkCitation = /* @__PURE__ */ _export_sfc(_sfc_main$m, [["__scopeId", "data-v-73025da4"]]);
381
- const _hoisted_1$c = ["data-message-row"];
382
- const _hoisted_2$7 = {
380
+ const CkCitation = /* @__PURE__ */ _export_sfc(_sfc_main$n, [["__scopeId", "data-v-73025da4"]]);
381
+ const _hoisted_1$c = { class: "relative flex min-h-0 flex-col overflow-hidden" };
382
+ const _hoisted_2$7 = ["data-message-row"];
383
+ const _hoisted_3$6 = {
383
384
  key: 0,
384
385
  class: "flex min-w-0 justify-end"
385
386
  };
386
- const _hoisted_3$6 = {
387
+ const _hoisted_4$6 = {
387
388
  key: 1,
388
389
  class: "flex min-w-0 justify-start"
389
390
  };
390
- const _sfc_main$l = /* @__PURE__ */ defineComponent({
391
+ const _sfc_main$m = /* @__PURE__ */ defineComponent({
391
392
  ...{ name: "CkConversationLayout" },
392
393
  __name: "CkConversationLayout",
393
394
  props: {
@@ -400,6 +401,8 @@ const _sfc_main$l = /* @__PURE__ */ defineComponent({
400
401
  const isAutoScrollEnabled = ref(true);
401
402
  const hasBottomSpacer = ref(false);
402
403
  const spacerHeight = ref(0);
404
+ const showTopFade = ref(false);
405
+ const showBottomFade = ref(false);
403
406
  let resizeObserver = null;
404
407
  onMounted(() => {
405
408
  const container = scrollContainerRef.value;
@@ -409,10 +412,12 @@ const _sfc_main$l = /* @__PURE__ */ defineComponent({
409
412
  for (const entry of entries) {
410
413
  containerHeight.value = entry.contentRect.height;
411
414
  }
415
+ updateFades();
412
416
  });
413
417
  resizeObserver.observe(container);
414
418
  nextTick(() => {
415
419
  container.scrollTop = container.scrollHeight;
420
+ updateFades();
416
421
  });
417
422
  }
418
423
  });
@@ -431,6 +436,15 @@ const _sfc_main$l = /* @__PURE__ */ defineComponent({
431
436
  }
432
437
  function handleScroll() {
433
438
  isAutoScrollEnabled.value = isFollowingContent();
439
+ updateFades();
440
+ }
441
+ function updateFades() {
442
+ const container = scrollContainerRef.value;
443
+ if (!container) return;
444
+ const { scrollTop, scrollHeight, clientHeight } = container;
445
+ const maxScroll = scrollHeight - clientHeight;
446
+ showTopFade.value = scrollTop > 1;
447
+ showBottomFade.value = scrollTop < maxScroll - 1;
434
448
  }
435
449
  function updateSpacerHeight() {
436
450
  const container = scrollContainerRef.value;
@@ -495,7 +509,10 @@ const _sfc_main$l = /* @__PURE__ */ defineComponent({
495
509
  if (newLen <= (oldLen ?? 0)) return;
496
510
  const lastMessage = props.messages[newLen - 1];
497
511
  if (lastMessage?.role === "user") {
498
- nextTick(() => scrollUserMessageToTop());
512
+ nextTick(() => {
513
+ scrollUserMessageToTop();
514
+ updateFades();
515
+ });
499
516
  }
500
517
  }
501
518
  );
@@ -510,41 +527,52 @@ const _sfc_main$l = /* @__PURE__ */ defineComponent({
510
527
  if (isAutoScrollEnabled.value) {
511
528
  scrollToEndOfContent();
512
529
  }
530
+ updateFades();
513
531
  });
514
532
  }
515
533
  },
516
534
  { deep: true }
517
535
  );
518
536
  return (_ctx, _cache) => {
519
- return openBlock(), createElementBlock("div", {
520
- ref_key: "scrollContainerRef",
521
- ref: scrollContainerRef,
522
- class: "relative flex flex-col gap-8 overflow-y-auto",
523
- onScroll: handleScroll
524
- }, [
525
- (openBlock(true), createElementBlock(Fragment, null, renderList(__props.messages, (message) => {
526
- return openBlock(), createElementBlock("div", {
527
- key: message.id,
528
- "data-message-row": message.role,
529
- class: "min-w-0"
530
- }, [
531
- message.role === "user" ? (openBlock(), createElementBlock("div", _hoisted_2$7, [
532
- renderSlot(_ctx.$slots, "user-message", { message })
533
- ])) : (openBlock(), createElementBlock("div", _hoisted_3$6, [
534
- renderSlot(_ctx.$slots, "agent-message", { message })
535
- ]))
536
- ], 8, _hoisted_1$c);
537
- }), 128)),
538
- hasBottomSpacer.value ? (openBlock(), createElementBlock("div", {
539
- key: 0,
537
+ return openBlock(), createElementBlock("div", _hoisted_1$c, [
538
+ createElementVNode("div", {
539
+ "aria-hidden": "true",
540
+ class: normalizeClass(["pointer-events-none absolute inset-x-0 top-0 z-10 h-8 bg-gradient-to-b from-background-surface-primary to-transparent transition-opacity duration-200", showTopFade.value ? "opacity-100" : "opacity-0"])
541
+ }, null, 2),
542
+ createElementVNode("div", {
543
+ ref_key: "scrollContainerRef",
544
+ ref: scrollContainerRef,
545
+ class: "relative flex min-h-0 flex-1 flex-col gap-8 overflow-y-auto",
546
+ onScroll: handleScroll
547
+ }, [
548
+ (openBlock(true), createElementBlock(Fragment, null, renderList(__props.messages, (message) => {
549
+ return openBlock(), createElementBlock("div", {
550
+ key: message.id,
551
+ "data-message-row": message.role,
552
+ class: "min-w-0"
553
+ }, [
554
+ message.role === "user" ? (openBlock(), createElementBlock("div", _hoisted_3$6, [
555
+ renderSlot(_ctx.$slots, "user-message", { message })
556
+ ])) : (openBlock(), createElementBlock("div", _hoisted_4$6, [
557
+ renderSlot(_ctx.$slots, "agent-message", { message })
558
+ ]))
559
+ ], 8, _hoisted_2$7);
560
+ }), 128)),
561
+ hasBottomSpacer.value ? (openBlock(), createElementBlock("div", {
562
+ key: 0,
563
+ "aria-hidden": "true",
564
+ style: normalizeStyle({ minHeight: `${spacerHeight.value}px` })
565
+ }, null, 4)) : createCommentVNode("", true)
566
+ ], 544),
567
+ createElementVNode("div", {
540
568
  "aria-hidden": "true",
541
- style: normalizeStyle({ minHeight: `${spacerHeight.value}px` })
542
- }, null, 4)) : createCommentVNode("", true)
543
- ], 544);
569
+ class: normalizeClass(["pointer-events-none absolute inset-x-0 bottom-0 z-10 h-8 bg-gradient-to-t from-background-surface-primary to-transparent transition-opacity duration-200", showBottomFade.value ? "opacity-100" : "opacity-0"])
570
+ }, null, 2)
571
+ ]);
544
572
  };
545
573
  }
546
574
  });
547
- const _sfc_main$k = /* @__PURE__ */ defineComponent({
575
+ const _sfc_main$l = /* @__PURE__ */ defineComponent({
548
576
  ...{
549
577
  name: "CkMessageButton"
550
578
  },
@@ -572,7 +600,7 @@ const _hoisted_1$b = {
572
600
  class: "sr-only",
573
601
  "aria-live": "polite"
574
602
  };
575
- const _sfc_main$j = /* @__PURE__ */ defineComponent({
603
+ const _sfc_main$k = /* @__PURE__ */ defineComponent({
576
604
  ...{
577
605
  name: "CkCopyMessageButton"
578
606
  },
@@ -629,7 +657,7 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
629
657
  "delay-duration": 0
630
658
  }, {
631
659
  default: withCtx(() => [
632
- createVNode(unref(_sfc_main$k), mergeProps({ ariaLabel: copied.value ? __props.ariaLabelCopied : __props.ariaLabelCopy }, {
660
+ createVNode(unref(_sfc_main$l), mergeProps({ ariaLabel: copied.value ? __props.ariaLabelCopied : __props.ariaLabelCopy }, {
633
661
  disabled: __props.disabled,
634
662
  onClick: handleClick
635
663
  }), {
@@ -663,7 +691,7 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
663
691
  };
664
692
  }
665
693
  });
666
- const CkCopyMessageButton = /* @__PURE__ */ _export_sfc(_sfc_main$j, [["__scopeId", "data-v-ba2e5f32"]]);
694
+ const CkCopyMessageButton = /* @__PURE__ */ _export_sfc(_sfc_main$k, [["__scopeId", "data-v-ba2e5f32"]]);
667
695
  const _hoisted_1$a = {
668
696
  width: "208",
669
697
  height: "144",
@@ -673,7 +701,7 @@ const _hoisted_1$a = {
673
701
  "aria-hidden": "true",
674
702
  focusable: "false"
675
703
  };
676
- const _sfc_main$i = /* @__PURE__ */ defineComponent({
704
+ const _sfc_main$j = /* @__PURE__ */ defineComponent({
677
705
  ...{ name: "CkDropZoneIllustration" },
678
706
  __name: "CkDropZoneIllustration",
679
707
  setup(__props) {
@@ -698,7 +726,7 @@ const _hoisted_6$2 = {
698
726
  class: "pointer-events-none fixed bottom-6 left-1/2 z-50 max-w-[36rem] -translate-x-1/2 flex list-inside list-disc flex-col gap-1 rounded-md border border-border-surface-default bg-background-surface-default p-3 text-sm text-content-on-surface-secondary",
699
727
  role: "alert"
700
728
  };
701
- const _sfc_main$h = /* @__PURE__ */ defineComponent({
729
+ const _sfc_main$i = /* @__PURE__ */ defineComponent({
702
730
  ...{
703
731
  name: "CkDropZoneOverlay"
704
732
  },
@@ -861,7 +889,7 @@ const _sfc_main$h = /* @__PURE__ */ defineComponent({
861
889
  }, [
862
890
  createElementVNode("div", _hoisted_2$6, [
863
891
  renderSlot(_ctx.$slots, "default", {}, () => [
864
- createVNode(_sfc_main$i, { class: "h-36 w-52" }),
892
+ createVNode(_sfc_main$j, { class: "h-36 w-52" }),
865
893
  createElementVNode("div", _hoisted_3$5, [
866
894
  createElementVNode("p", _hoisted_4$5, toDisplayString(resolvedHeading.value), 1),
867
895
  __props.hint ? (openBlock(), createElementBlock("p", _hoisted_5$3, toDisplayString(__props.hint), 1)) : createCommentVNode("", true)
@@ -886,9 +914,9 @@ const _sfc_main$h = /* @__PURE__ */ defineComponent({
886
914
  };
887
915
  }
888
916
  });
889
- const CkDropZoneOverlay = /* @__PURE__ */ _export_sfc(_sfc_main$h, [["__scopeId", "data-v-54119668"]]);
917
+ const CkDropZoneOverlay = /* @__PURE__ */ _export_sfc(_sfc_main$i, [["__scopeId", "data-v-54119668"]]);
890
918
  const _hoisted_1$8 = ["aria-label"];
891
- const _sfc_main$g = /* @__PURE__ */ defineComponent({
919
+ const _sfc_main$h = /* @__PURE__ */ defineComponent({
892
920
  ...{
893
921
  name: "CkFeedbackButton"
894
922
  },
@@ -943,7 +971,7 @@ const _sfc_main$g = /* @__PURE__ */ defineComponent({
943
971
  "delay-duration": 0
944
972
  }, {
945
973
  default: withCtx(() => [
946
- createVNode(unref(_sfc_main$k), mergeProps({ ariaLabel: thumbsUpLabel.value }, {
974
+ createVNode(unref(_sfc_main$l), mergeProps({ ariaLabel: thumbsUpLabel.value }, {
947
975
  "aria-pressed": isUpSelected.value,
948
976
  "aria-disabled": __props.locked || void 0,
949
977
  disabled: isUpDisabled.value,
@@ -973,7 +1001,7 @@ const _sfc_main$g = /* @__PURE__ */ defineComponent({
973
1001
  "delay-duration": 0
974
1002
  }, {
975
1003
  default: withCtx(() => [
976
- createVNode(unref(_sfc_main$k), mergeProps({ ariaLabel: thumbsDownLabel.value }, {
1004
+ createVNode(unref(_sfc_main$l), mergeProps({ ariaLabel: thumbsDownLabel.value }, {
977
1005
  "aria-pressed": isDownSelected.value,
978
1006
  "aria-disabled": __props.locked || void 0,
979
1007
  disabled: isDownDisabled.value,
@@ -1000,7 +1028,7 @@ const _sfc_main$g = /* @__PURE__ */ defineComponent({
1000
1028
  };
1001
1029
  }
1002
1030
  });
1003
- const CkFeedbackButton = /* @__PURE__ */ _export_sfc(_sfc_main$g, [["__scopeId", "data-v-cf3d46b6"]]);
1031
+ const CkFeedbackButton = /* @__PURE__ */ _export_sfc(_sfc_main$h, [["__scopeId", "data-v-cf3d46b6"]]);
1004
1032
  function useCitationRendering(citations, onOpenSource) {
1005
1033
  const sourcesByIndex = computed(
1006
1034
  () => new Map(
@@ -1083,7 +1111,7 @@ function domToVNode(node, ctx) {
1083
1111
  }
1084
1112
  return vnode;
1085
1113
  }
1086
- const _sfc_main$f = defineComponent({
1114
+ const _sfc_main$g = defineComponent({
1087
1115
  name: "CkMarkdownRenderer",
1088
1116
  props: {
1089
1117
  content: { type: String, required: true },
@@ -1151,7 +1179,7 @@ const _hoisted_4$4 = {
1151
1179
  class: "self-end text-sm text-content-on-surface-muted tabular-nums",
1152
1180
  "aria-live": "polite"
1153
1181
  };
1154
- const _sfc_main$e = /* @__PURE__ */ defineComponent({
1182
+ const _sfc_main$f = /* @__PURE__ */ defineComponent({
1155
1183
  ...{
1156
1184
  name: "CkFeedbackDialog"
1157
1185
  },
@@ -1312,7 +1340,7 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent({
1312
1340
  _: 1
1313
1341
  }),
1314
1342
  createElementVNode("div", _hoisted_2$5, [
1315
- createVNode(unref(_sfc_main$f), { content: __props.responseText }, null, 8, ["content"])
1343
+ createVNode(unref(_sfc_main$g), { content: __props.responseText }, null, 8, ["content"])
1316
1344
  ])
1317
1345
  ])) : createCommentVNode("", true),
1318
1346
  createElementVNode("section", _hoisted_3$4, [
@@ -1378,8 +1406,8 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent({
1378
1406
  };
1379
1407
  }
1380
1408
  });
1381
- const CkFeedbackDialog = /* @__PURE__ */ _export_sfc(_sfc_main$e, [["__scopeId", "data-v-12dfee8a"]]);
1382
- const _sfc_main$d = /* @__PURE__ */ defineComponent({
1409
+ const CkFeedbackDialog = /* @__PURE__ */ _export_sfc(_sfc_main$f, [["__scopeId", "data-v-12dfee8a"]]);
1410
+ const _sfc_main$e = /* @__PURE__ */ defineComponent({
1383
1411
  ...{
1384
1412
  name: "CkFileItemRow",
1385
1413
  inheritAttrs: false
@@ -1440,7 +1468,7 @@ const _hoisted_6$1 = {
1440
1468
  const _hoisted_7$1 = ["aria-label"];
1441
1469
  const _hoisted_8$1 = ["onClick"];
1442
1470
  const ITEM_GAP = 8;
1443
- const _sfc_main$c = /* @__PURE__ */ defineComponent({
1471
+ const _sfc_main$d = /* @__PURE__ */ defineComponent({
1444
1472
  ...{
1445
1473
  name: "CkFileItemsList"
1446
1474
  },
@@ -1562,7 +1590,7 @@ const _sfc_main$c = /* @__PURE__ */ defineComponent({
1562
1590
  }),
1563
1591
  onClick: ($event) => handleRowClick(file, $event)
1564
1592
  }, [
1565
- createVNode(_sfc_main$d, {
1593
+ createVNode(_sfc_main$e, {
1566
1594
  file,
1567
1595
  size: __props.size,
1568
1596
  "is-removable": __props.isRemovable,
@@ -1642,7 +1670,7 @@ const _sfc_main$c = /* @__PURE__ */ defineComponent({
1642
1670
  style: normalizeStyle({ maxWidth: `${__props.maxItemWidth}px` }),
1643
1671
  onClick: ($event) => handleRowClick(file, $event)
1644
1672
  }, [
1645
- createVNode(_sfc_main$d, {
1673
+ createVNode(_sfc_main$e, {
1646
1674
  file,
1647
1675
  size: __props.size,
1648
1676
  "is-removable": __props.isRemovable,
@@ -1691,7 +1719,7 @@ const _hoisted_7 = {
1691
1719
  const _hoisted_8 = ["aria-label"];
1692
1720
  const _hoisted_9 = ["aria-label"];
1693
1721
  const _hoisted_10 = ["aria-label"];
1694
- const _sfc_main$b = /* @__PURE__ */ defineComponent({
1722
+ const _sfc_main$c = /* @__PURE__ */ defineComponent({
1695
1723
  ...{
1696
1724
  name: "CkHistoryItem",
1697
1725
  inheritAttrs: false
@@ -1931,8 +1959,8 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({
1931
1959
  };
1932
1960
  }
1933
1961
  });
1934
- const baseClass = "flex w-full min-w-0 flex-col p-2";
1935
- const _sfc_main$a = /* @__PURE__ */ defineComponent({
1962
+ const baseClass = "flex w-full min-w-0 flex-col py-2";
1963
+ const _sfc_main$b = /* @__PURE__ */ defineComponent({
1936
1964
  ...{
1937
1965
  name: "CkHistoryWrapper",
1938
1966
  inheritAttrs: false
@@ -1967,7 +1995,7 @@ const _hoisted_2$2 = { class: "min-w-0 max-w-[10rem] truncate" };
1967
1995
  const _hoisted_3$1 = ["aria-label"];
1968
1996
  const _hoisted_4$1 = ["aria-selected", "onClick"];
1969
1997
  const _hoisted_5 = { class: "min-w-0 flex-1 truncate" };
1970
- const _sfc_main$9 = /* @__PURE__ */ defineComponent({
1998
+ const _sfc_main$a = /* @__PURE__ */ defineComponent({
1971
1999
  ...{ name: "CkModelSelector" },
1972
2000
  __name: "CkModelSelector",
1973
2001
  props: {
@@ -2075,7 +2103,7 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
2075
2103
  };
2076
2104
  }
2077
2105
  });
2078
- const _sfc_main$8 = /* @__PURE__ */ defineComponent({
2106
+ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
2079
2107
  ...{ name: "CkPromptSendButton" },
2080
2108
  __name: "CkPromptSendButton",
2081
2109
  props: {
@@ -2101,7 +2129,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
2101
2129
  };
2102
2130
  }
2103
2131
  });
2104
- const _sfc_main$7 = /* @__PURE__ */ defineComponent({
2132
+ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
2105
2133
  ...{ name: "CkPromptMenuButton" },
2106
2134
  __name: "CkPromptMenuButton",
2107
2135
  props: {
@@ -2131,7 +2159,7 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
2131
2159
  };
2132
2160
  }
2133
2161
  });
2134
- const _sfc_main$6 = /* @__PURE__ */ defineComponent({
2162
+ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
2135
2163
  ...{ name: "CkPromptStopButton" },
2136
2164
  __name: "CkPromptStopButton",
2137
2165
  props: {
@@ -2165,7 +2193,7 @@ const _hoisted_2$1 = {
2165
2193
  const _hoisted_3 = ["for"];
2166
2194
  const _hoisted_4 = ["id", "value", "placeholder", "disabled"];
2167
2195
  const MAX_LINES = 6;
2168
- const _sfc_main$5 = /* @__PURE__ */ defineComponent({
2196
+ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
2169
2197
  ...{ name: "CkPromptInput" },
2170
2198
  __name: "CkPromptInput",
2171
2199
  props: {
@@ -2316,12 +2344,12 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
2316
2344
  };
2317
2345
  }
2318
2346
  });
2319
- const CkPromptInput = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-c6b78cec"]]);
2347
+ const CkPromptInput = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-c6b78cec"]]);
2320
2348
  const _hoisted_1$2 = {
2321
2349
  key: 0,
2322
2350
  class: "text-center text-content-on-surface-muted text-xs font-normal leading-4"
2323
2351
  };
2324
- const _sfc_main$4 = /* @__PURE__ */ defineComponent({
2352
+ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
2325
2353
  ...{ name: "CkPromptInputDisclaimer" },
2326
2354
  __name: "CkPromptInputDisclaimer",
2327
2355
  props: {
@@ -2337,7 +2365,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
2337
2365
  };
2338
2366
  }
2339
2367
  });
2340
- const _sfc_main$3 = /* @__PURE__ */ defineComponent({
2368
+ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
2341
2369
  ...{
2342
2370
  name: "CkRegenerateMessageButton"
2343
2371
  },
@@ -2364,7 +2392,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
2364
2392
  "delay-duration": 0
2365
2393
  }, {
2366
2394
  default: withCtx(() => [
2367
- createVNode(unref(_sfc_main$k), mergeProps({ ariaLabel: __props.ariaLabel }, {
2395
+ createVNode(unref(_sfc_main$l), mergeProps({ ariaLabel: __props.ariaLabel }, {
2368
2396
  disabled: __props.disabled,
2369
2397
  onClick: handleClick
2370
2398
  }), {
@@ -2385,7 +2413,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
2385
2413
  });
2386
2414
  const _hoisted_1$1 = { class: "inline-flex max-w-[536px] flex-col items-end justify-start gap-1" };
2387
2415
  const _hoisted_2 = ["aria-expanded"];
2388
- const _sfc_main$2 = /* @__PURE__ */ defineComponent({
2416
+ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
2389
2417
  ...{ name: "CkUserMessage" },
2390
2418
  __name: "CkUserMessage",
2391
2419
  props: {
@@ -2395,12 +2423,8 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
2395
2423
  setup(__props) {
2396
2424
  const props = __props;
2397
2425
  const labels = useChatKitLabels();
2398
- const showMoreLabel = computed(
2399
- () => labels.value.userMessageShowMore ?? defaultChatKitLabels.userMessageShowMore
2400
- );
2401
- const showLessLabel = computed(
2402
- () => labels.value.userMessageShowLess ?? defaultChatKitLabels.userMessageShowLess
2403
- );
2426
+ const showMoreLabel = computed(() => labels.value.userMessageShowMore);
2427
+ const showLessLabel = computed(() => labels.value.userMessageShowLess);
2404
2428
  const clampEnabled = computed(() => (props.collapsedLines ?? 0) > 0);
2405
2429
  const contentRef = ref(null);
2406
2430
  const expanded = ref(false);
@@ -2414,13 +2438,20 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
2414
2438
  expanded.value = !expanded.value;
2415
2439
  }
2416
2440
  let resizeObserver;
2417
- onMounted(() => {
2418
- nextTick(measure);
2419
- if (typeof ResizeObserver !== "undefined") {
2420
- resizeObserver = new ResizeObserver(() => measure());
2421
- if (contentRef.value) resizeObserver.observe(contentRef.value);
2422
- }
2423
- });
2441
+ function observeContent(el) {
2442
+ if (typeof ResizeObserver === "undefined") return;
2443
+ if (!resizeObserver) resizeObserver = new ResizeObserver(() => measure());
2444
+ resizeObserver.disconnect();
2445
+ if (el) resizeObserver.observe(el);
2446
+ }
2447
+ watch(
2448
+ contentRef,
2449
+ (el) => {
2450
+ observeContent(el);
2451
+ nextTick(measure);
2452
+ },
2453
+ { flush: "post" }
2454
+ );
2424
2455
  onBeforeUnmount(() => resizeObserver?.disconnect());
2425
2456
  watch([() => props.message, () => props.collapsedLines], () => {
2426
2457
  expanded.value = false;
@@ -2454,7 +2485,68 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
2454
2485
  };
2455
2486
  }
2456
2487
  });
2457
- const CkUserMessage = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-c759a863"]]);
2488
+ const CkUserMessage = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-4ca9ee1b"]]);
2489
+ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
2490
+ ...{ name: "CkEditableUserMessage" },
2491
+ __name: "CkEditableUserMessage",
2492
+ props: {
2493
+ message: { default: void 0 },
2494
+ collapsedLines: { default: 0 }
2495
+ },
2496
+ emits: ["edit"],
2497
+ setup(__props, { emit: __emit }) {
2498
+ const emit = __emit;
2499
+ const slots = useSlots();
2500
+ const labels = useChatKitLabels();
2501
+ const actionsLabel = computed(() => labels.value.userMessageActions);
2502
+ const editActionLabel = computed(() => labels.value.userMessageEditAction);
2503
+ return (_ctx, _cache) => {
2504
+ return openBlock(), createBlock(unref(UiFloatActions), {
2505
+ trigger: "hover",
2506
+ placement: "left",
2507
+ offset: 4,
2508
+ class: "max-w-full"
2509
+ }, {
2510
+ container: withCtx(() => [
2511
+ createVNode(unref(CkUserMessage), {
2512
+ message: __props.message,
2513
+ "collapsed-lines": __props.collapsedLines
2514
+ }, createSlots({ _: 2 }, [
2515
+ unref(slots).default ? {
2516
+ name: "default",
2517
+ fn: withCtx(() => [
2518
+ renderSlot(_ctx.$slots, "default")
2519
+ ]),
2520
+ key: "0"
2521
+ } : void 0
2522
+ ]), 1032, ["message", "collapsed-lines"])
2523
+ ]),
2524
+ action: withCtx(() => [
2525
+ createVNode(unref(UiFloatActionItems), { "aria-label": actionsLabel.value }, {
2526
+ default: withCtx(() => [
2527
+ createVNode(unref(UiFloatActionItems), {
2528
+ type: "button",
2529
+ "aria-label": editActionLabel.value,
2530
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("edit"))
2531
+ }, {
2532
+ default: withCtx(() => [
2533
+ createVNode(unref(UiIcon), {
2534
+ name: "pencil",
2535
+ size: 16,
2536
+ "aria-hidden": "true"
2537
+ })
2538
+ ]),
2539
+ _: 1
2540
+ }, 8, ["aria-label"])
2541
+ ]),
2542
+ _: 1
2543
+ }, 8, ["aria-label"])
2544
+ ]),
2545
+ _: 3
2546
+ });
2547
+ };
2548
+ }
2549
+ });
2458
2550
  const _hoisted_1 = {
2459
2551
  key: 1,
2460
2552
  class: "flex size-8 shrink-0 items-center justify-center rounded-2xl bg-background-surface-muted-subtle"
@@ -2500,7 +2592,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
2500
2592
  return slot ? slot({ message }).some((vnode) => !isVNodeEmpty(vnode)) : false;
2501
2593
  }
2502
2594
  return (_ctx, _cache) => {
2503
- return openBlock(), createBlock(_sfc_main$l, { messages: __props.messages }, {
2595
+ return openBlock(), createBlock(_sfc_main$m, { messages: __props.messages }, {
2504
2596
  "user-message": withCtx(({ message }) => [
2505
2597
  createElementVNode("div", {
2506
2598
  class: normalizeClass({ "ml-8": hasIcon.value })
@@ -2519,7 +2611,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
2519
2611
  ]),
2520
2612
  "agent-message": withCtx(({ message }) => [
2521
2613
  renderSlot(_ctx.$slots, "agent-message", { message }, () => [
2522
- createVNode(_sfc_main$q, {
2614
+ createVNode(_sfc_main$r, {
2523
2615
  "bottom-separator": message.id !== lastAgentMessageId.value
2524
2616
  }, createSlots({
2525
2617
  footer: withCtx(() => [
@@ -2534,7 +2626,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
2534
2626
  ]),
2535
2627
  default: withCtx(() => [
2536
2628
  renderSlot(_ctx.$slots, "agent-message-content", { message }, () => [
2537
- createVNode(_sfc_main$f, {
2629
+ createVNode(_sfc_main$g, {
2538
2630
  content: getMessageText(message),
2539
2631
  classes: __props.agentMarkdownClasses
2540
2632
  }, createSlots({ _: 2 }, [
@@ -2554,7 +2646,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
2554
2646
  name: "header",
2555
2647
  fn: withCtx(() => [
2556
2648
  renderSlot(_ctx.$slots, "agent-message-header", { message }, () => [
2557
- createVNode(_sfc_main$p, null, createSlots({
2649
+ createVNode(_sfc_main$q, null, createSlots({
2558
2650
  default: withCtx(() => [
2559
2651
  renderSlot(_ctx.$slots, "agent-message-header-content", { message })
2560
2652
  ]),
@@ -2642,7 +2734,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
2642
2734
  showActionOnHover: { type: Boolean, default: true },
2643
2735
  timeFormatter: { type: Function, default: formatRelativeTime },
2644
2736
  collapsedLimit: { default: 5 },
2645
- maxHeight: { default: void 0 }
2737
+ maxHeight: { default: void 0 },
2738
+ contentClass: { default: void 0 }
2646
2739
  },
2647
2740
  emits: ["select", "edit", "delete"],
2648
2741
  setup(__props, { emit: __emit }) {
@@ -2679,8 +2772,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
2679
2772
  }
2680
2773
  return (_ctx, _cache) => {
2681
2774
  return openBlock(), createElementBlock("div", null, [
2682
- createVNode(_sfc_main$a, {
2683
- class: normalizeClass(isExpanded.value && props.maxHeight ? "overflow-y-auto" : void 0),
2775
+ createVNode(_sfc_main$b, {
2776
+ class: normalizeClass([
2777
+ isExpanded.value && props.maxHeight ? "overflow-y-auto" : void 0,
2778
+ props.contentClass
2779
+ ]),
2684
2780
  style: normalizeStyle(
2685
2781
  isExpanded.value && props.maxHeight ? { maxHeight: props.maxHeight } : void 0
2686
2782
  )
@@ -2698,7 +2794,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
2698
2794
  edit: () => emit("edit", conversation),
2699
2795
  delete: () => emit("delete", conversation)
2700
2796
  }, () => [
2701
- createVNode(_sfc_main$b, {
2797
+ createVNode(_sfc_main$c, {
2702
2798
  as: "a",
2703
2799
  href: hrefFor(conversation),
2704
2800
  "is-active": conversation.id === props.activeId,
@@ -2765,32 +2861,33 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
2765
2861
  }
2766
2862
  });
2767
2863
  export {
2864
+ formatRelativeTime as A,
2768
2865
  CkCitation as C,
2769
- _sfc_main$q as _,
2770
- _sfc_main$p as a,
2771
- _sfc_main$n as b,
2866
+ _sfc_main$r as _,
2867
+ _sfc_main$q as a,
2868
+ _sfc_main$o as b,
2772
2869
  _sfc_main$1 as c,
2773
- _sfc_main$l as d,
2870
+ _sfc_main$m as d,
2774
2871
  CkCopyMessageButton as e,
2775
2872
  CkDropZoneOverlay as f,
2776
- CkFeedbackButton as g,
2777
- CkFeedbackDialog as h,
2778
- _sfc_main$c as i,
2779
- _sfc_main$o as j,
2780
- _sfc_main as k,
2781
- _sfc_main$b as l,
2782
- _sfc_main$a as m,
2783
- _sfc_main$f as n,
2784
- _sfc_main$k as o,
2785
- _sfc_main$9 as p,
2786
- CkPromptInput as q,
2787
- _sfc_main$4 as r,
2788
- _sfc_main$7 as s,
2873
+ _sfc_main$2 as g,
2874
+ CkFeedbackButton as h,
2875
+ CkFeedbackDialog as i,
2876
+ _sfc_main$d as j,
2877
+ _sfc_main$p as k,
2878
+ _sfc_main as l,
2879
+ _sfc_main$c as m,
2880
+ _sfc_main$b as n,
2881
+ _sfc_main$g as o,
2882
+ _sfc_main$l as p,
2883
+ _sfc_main$a as q,
2884
+ CkPromptInput as r,
2885
+ _sfc_main$5 as s,
2789
2886
  _sfc_main$8 as t,
2790
- _sfc_main$6 as u,
2791
- _sfc_main$3 as v,
2792
- _sfc_main$s as w,
2793
- _sfc_main$r as x,
2794
- CkUserMessage as y,
2795
- formatRelativeTime as z
2887
+ _sfc_main$9 as u,
2888
+ _sfc_main$7 as v,
2889
+ _sfc_main$4 as w,
2890
+ _sfc_main$t as x,
2891
+ _sfc_main$s as y,
2892
+ CkUserMessage as z
2796
2893
  };