@mieweb/ui 0.10.0-dev.6 → 0.10.0-dev.8

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 (105) hide show
  1. package/agent/mieweb-ui.instructions.md +13 -1
  2. package/dist/brands/index.cjs +13 -13
  3. package/dist/brands/index.js +1 -1
  4. package/dist/chunk-3YBS4WUQ.js +52 -0
  5. package/dist/chunk-3YBS4WUQ.js.map +1 -0
  6. package/dist/chunk-4IS3QCOQ.cjs +453 -0
  7. package/dist/chunk-4IS3QCOQ.cjs.map +1 -0
  8. package/dist/chunk-4NCDU5IG.cjs +56 -0
  9. package/dist/chunk-4NCDU5IG.cjs.map +1 -0
  10. package/dist/chunk-76TBQDED.js +166 -0
  11. package/dist/chunk-76TBQDED.js.map +1 -0
  12. package/dist/{chunk-JI244Y7C.js → chunk-7G3ZIYFY.js} +13 -3
  13. package/dist/chunk-7G3ZIYFY.js.map +1 -0
  14. package/dist/chunk-DZ5HFLRC.js +258 -0
  15. package/dist/chunk-DZ5HFLRC.js.map +1 -0
  16. package/dist/{chunk-U42F3HLE.cjs → chunk-EZSSESEU.cjs} +13 -3
  17. package/dist/chunk-EZSSESEU.cjs.map +1 -0
  18. package/dist/chunk-G4D6CLBT.js +333 -0
  19. package/dist/chunk-G4D6CLBT.js.map +1 -0
  20. package/dist/chunk-IT775BYG.js +179 -0
  21. package/dist/chunk-IT775BYG.js.map +1 -0
  22. package/dist/{chunk-ELPW32ZI.cjs → chunk-KQUI4BGS.cjs} +3 -3
  23. package/dist/{chunk-ELPW32ZI.cjs.map → chunk-KQUI4BGS.cjs.map} +1 -1
  24. package/dist/{chunk-WNM7IZJ7.js → chunk-MNILXWVY.js} +2 -2
  25. package/dist/{chunk-WNM7IZJ7.js.map → chunk-MNILXWVY.js.map} +1 -1
  26. package/dist/chunk-OCSCBB52.cjs +188 -0
  27. package/dist/chunk-OCSCBB52.cjs.map +1 -0
  28. package/dist/{chunk-2YCERQWC.js → chunk-TVTIGV7Q.js} +3 -3
  29. package/dist/{chunk-2YCERQWC.js.map → chunk-TVTIGV7Q.js.map} +1 -1
  30. package/dist/chunk-URAQIF67.cjs +356 -0
  31. package/dist/chunk-URAQIF67.cjs.map +1 -0
  32. package/dist/chunk-VINZZQBD.cjs +323 -0
  33. package/dist/chunk-VINZZQBD.cjs.map +1 -0
  34. package/dist/chunk-XDIMTPZU.cjs +202 -0
  35. package/dist/chunk-XDIMTPZU.cjs.map +1 -0
  36. package/dist/chunk-XVW5DPPP.js +429 -0
  37. package/dist/chunk-XVW5DPPP.js.map +1 -0
  38. package/dist/chunk-XZNN3S3S.cjs +281 -0
  39. package/dist/chunk-XZNN3S3S.cjs.map +1 -0
  40. package/dist/chunk-Y4QNLW7W.js +300 -0
  41. package/dist/chunk-Y4QNLW7W.js.map +1 -0
  42. package/dist/{chunk-2QKBTPUC.cjs → chunk-ZPSJ2UV6.cjs} +2 -2
  43. package/dist/{chunk-2QKBTPUC.cjs.map → chunk-ZPSJ2UV6.cjs.map} +1 -1
  44. package/dist/components/BoardView/index.cjs +24 -0
  45. package/dist/components/BoardView/index.cjs.map +1 -0
  46. package/dist/components/BoardView/index.d.cts +42 -0
  47. package/dist/components/BoardView/index.d.ts +42 -0
  48. package/dist/components/BoardView/index.js +7 -0
  49. package/dist/components/BoardView/index.js.map +1 -0
  50. package/dist/components/CalendarView/index.cjs +22 -0
  51. package/dist/components/CalendarView/index.cjs.map +1 -0
  52. package/dist/components/CalendarView/index.d.cts +40 -0
  53. package/dist/components/CalendarView/index.d.ts +40 -0
  54. package/dist/components/CalendarView/index.js +9 -0
  55. package/dist/components/CalendarView/index.js.map +1 -0
  56. package/dist/components/GanttView/index.cjs +20 -0
  57. package/dist/components/GanttView/index.cjs.map +1 -0
  58. package/dist/components/GanttView/index.d.cts +37 -0
  59. package/dist/components/GanttView/index.d.ts +37 -0
  60. package/dist/components/GanttView/index.js +7 -0
  61. package/dist/components/GanttView/index.js.map +1 -0
  62. package/dist/components/ListView/index.cjs +22 -0
  63. package/dist/components/ListView/index.cjs.map +1 -0
  64. package/dist/components/ListView/index.d.cts +37 -0
  65. package/dist/components/ListView/index.d.ts +37 -0
  66. package/dist/components/ListView/index.js +9 -0
  67. package/dist/components/ListView/index.js.map +1 -0
  68. package/dist/components/Markdown/index.cjs +15 -15
  69. package/dist/components/Markdown/index.js +3 -3
  70. package/dist/components/QuickAction/index.d.cts +1 -1
  71. package/dist/components/QuickAction/index.d.ts +1 -1
  72. package/dist/components/SuperChat/index.cjs +185 -159
  73. package/dist/components/SuperChat/index.cjs.map +1 -1
  74. package/dist/components/SuperChat/index.js +185 -159
  75. package/dist/components/SuperChat/index.js.map +1 -1
  76. package/dist/components/ViewSet/index.cjs +23 -0
  77. package/dist/components/ViewSet/index.cjs.map +1 -0
  78. package/dist/components/ViewSet/index.d.cts +89 -0
  79. package/dist/components/ViewSet/index.d.ts +89 -0
  80. package/dist/components/ViewSet/index.js +14 -0
  81. package/dist/components/ViewSet/index.js.map +1 -0
  82. package/dist/components/ViewSwitcher/index.cjs +20 -0
  83. package/dist/components/ViewSwitcher/index.cjs.map +1 -0
  84. package/dist/components/ViewSwitcher/index.d.cts +40 -0
  85. package/dist/components/ViewSwitcher/index.d.ts +40 -0
  86. package/dist/components/ViewSwitcher/index.js +7 -0
  87. package/dist/components/ViewSwitcher/index.js.map +1 -0
  88. package/dist/esheet.cjs +5 -5
  89. package/dist/esheet.js +2 -2
  90. package/dist/hooks/index.cjs +5 -5
  91. package/dist/hooks/index.js +1 -1
  92. package/dist/index.cjs +439 -372
  93. package/dist/index.cjs.map +1 -1
  94. package/dist/index.d.cts +8 -0
  95. package/dist/index.d.ts +8 -0
  96. package/dist/index.js +57 -50
  97. package/dist/index.js.map +1 -1
  98. package/dist/styles.css +1 -1
  99. package/dist/tailwind-preset.cjs +4 -4
  100. package/dist/tailwind-preset.js +1 -1
  101. package/dist/types-CbWXIKbe.d.cts +119 -0
  102. package/dist/types-CbWXIKbe.d.ts +119 -0
  103. package/package.json +1 -1
  104. package/dist/chunk-JI244Y7C.js.map +0 -1
  105. package/dist/chunk-U42F3HLE.cjs.map +0 -1
@@ -578,11 +578,7 @@ var MessageActionsBar = React2.forwardRef(function MessageActionsBar2({ actions,
578
578
  {
579
579
  ref,
580
580
  "data-slot": "superchat-message-actions",
581
- className: cn(
582
- "flex items-center gap-0.5",
583
- isSelf && "justify-end",
584
- actionRevealClass
585
- ),
581
+ className: cn("flex flex-col items-center gap-0.5", actionRevealClass),
586
582
  children: actions.map((action) => /* @__PURE__ */ jsx(FooterActionButton, { action, isSelf }, action.id))
587
583
  }
588
584
  );
@@ -601,7 +597,7 @@ function MessageOverflowMenu({
601
597
  "div",
602
598
  {
603
599
  className: cn(
604
- "sticky bottom-2 shrink-0 self-end transition-opacity",
600
+ "sticky bottom-2 mt-auto shrink-0 transition-opacity",
605
601
  // Rich content (e.g. NITRO tables) layers internals up to z-50, so the
606
602
  // open menu's stacking context must clear that.
607
603
  open ? "z-[60]" : "z-10",
@@ -660,6 +656,7 @@ var MessageRow = React2.memo(function MessageRow2({
660
656
  const hasBody = !!message.text || (message.content?.length ?? 0) > 0;
661
657
  const [isEditing, setIsEditing] = React2.useState(false);
662
658
  const [draft, setDraft] = React2.useState(message.text ?? "");
659
+ const [editMinWidth, setEditMinWidth] = React2.useState();
663
660
  const editRef = React2.useRef(null);
664
661
  const bubbleRef = React2.useRef(null);
665
662
  const autosize = React2.useCallback(() => {
@@ -689,7 +686,10 @@ ${block.text}
689
686
  return "";
690
687
  }).filter(Boolean).join("\n\n") ?? "";
691
688
  const canCopy = !isEditing && (!!message.content?.length || typeof message.text === "string" && message.text.length > 0);
692
- const hasActions = canCopy || canEdit && !isEditing;
689
+ const showEditAction = canEdit && !isEditing;
690
+ const actionCount = (canCopy ? 1 : 0) + (showEditAction ? 1 : 0);
691
+ const hasActions = actionCount > 0;
692
+ const collapseToMenu = actionCount > 1;
693
693
  const copy = useMessageCopy({
694
694
  markdown: markdownSource,
695
695
  getHtml: () => bubbleRef.current?.innerHTML ?? "",
@@ -706,7 +706,7 @@ ${block.text}
706
706
  });
707
707
  observer.observe(el);
708
708
  return () => observer.disconnect();
709
- }, [hasActions]);
709
+ }, [hasActions, collapseToMenu]);
710
710
  if (message.type === "system") {
711
711
  return /* @__PURE__ */ jsx(
712
712
  "div",
@@ -739,6 +739,12 @@ ${block.text}
739
739
  const accentTextColor = accessibleAccentTextColor(accent);
740
740
  const authorName = participant?.name ?? "Unknown";
741
741
  const startEdit = () => {
742
+ const el = bubbleRef.current;
743
+ if (el) {
744
+ const cs = getComputedStyle(el);
745
+ const contentWidth = el.clientWidth - parseFloat(cs.paddingLeft) - parseFloat(cs.paddingRight);
746
+ setEditMinWidth(contentWidth > 0 ? contentWidth : void 0);
747
+ }
742
748
  setDraft(message.text ?? "");
743
749
  setIsEditing(true);
744
750
  };
@@ -812,7 +818,7 @@ ${block.text}
812
818
  }
813
819
  }
814
820
  ] : [],
815
- ...canEdit && !isEditing ? [
821
+ ...showEditAction ? [
816
822
  {
817
823
  id: "edit",
818
824
  label: "Edit message",
@@ -832,172 +838,191 @@ ${block.text}
832
838
  isSelf ? "flex-row-reverse" : "flex-row"
833
839
  ),
834
840
  children: [
835
- /* @__PURE__ */ jsx(ParticipantAvatar, { participant }),
836
- /* @__PURE__ */ jsxs("div", { className: cn("flex min-w-0 flex-col gap-1", isSelf && "items-end"), children: [
837
- /* @__PURE__ */ jsxs(
838
- "div",
839
- {
840
- "data-slot": "superchat-message-meta",
841
- className: "flex items-baseline gap-2",
842
- children: [
841
+ /* @__PURE__ */ jsxs(
842
+ "div",
843
+ {
844
+ "data-slot": "superchat-message-gutter",
845
+ className: "flex shrink-0 flex-col items-center gap-1",
846
+ children: [
847
+ /* @__PURE__ */ jsx(ParticipantAvatar, { participant }),
848
+ hasActions && /* @__PURE__ */ jsxs(Fragment, { children: [
843
849
  /* @__PURE__ */ jsx(
844
- "span",
845
- {
846
- className: "text-xs font-medium",
847
- style: accentTextColor ? { color: accentTextColor } : void 0,
848
- children: authorName
849
- }
850
- ),
851
- participant?.role && /* @__PURE__ */ jsx("span", { className: "text-[10px] text-neutral-500 dark:text-neutral-400", children: participant.role }),
852
- /* @__PURE__ */ jsx("span", { className: "text-[10px] text-neutral-500 dark:text-neutral-400", children: formatTime(message.time) }),
853
- message.editedAt && /* @__PURE__ */ jsx(
854
- "span",
855
- {
856
- "data-slot": "superchat-edited-indicator",
857
- className: "text-[10px] text-neutral-500 dark:text-neutral-400",
858
- title: `Edited ${formatTime(message.editedAt)}`,
859
- children: "(edited)"
860
- }
861
- )
862
- ]
863
- }
864
- ),
865
- /* @__PURE__ */ jsxs(
866
- "div",
867
- {
868
- className: cn(
869
- "flex items-center gap-1",
870
- isSelf ? "flex-row-reverse" : "flex-row"
871
- ),
872
- children: [
873
- hasActions && /* @__PURE__ */ jsx(
874
850
  MessageOverflowMenu,
875
851
  {
876
852
  isSelf,
877
853
  actions,
878
- footerVisible
854
+ footerVisible: collapseToMenu ? false : footerVisible
879
855
  }
880
856
  ),
881
- /* @__PURE__ */ jsx(
882
- ChatBubble,
857
+ !collapseToMenu && /* @__PURE__ */ jsx(
858
+ MessageActionsBar,
883
859
  {
884
- ref: bubbleRef,
885
- "data-slot": "superchat-bubble",
886
- variant: isSelf ? "user" : "assistant",
887
- hasError: message.status === "error",
888
- className: "text-sm has-[[data-slot=superchat-nitro-table]]:w-full has-[[data-slot=superchat-nitro-table]]:max-w-full",
889
- children: isEditing ? /* @__PURE__ */ jsxs(
890
- "div",
860
+ ref: actionsBarRef,
861
+ actions,
862
+ isSelf
863
+ }
864
+ )
865
+ ] })
866
+ ]
867
+ }
868
+ ),
869
+ /* @__PURE__ */ jsxs(
870
+ "div",
871
+ {
872
+ className: cn(
873
+ "flex min-w-0 flex-1 flex-col gap-1",
874
+ isSelf && "items-end"
875
+ ),
876
+ children: [
877
+ /* @__PURE__ */ jsxs(
878
+ "div",
879
+ {
880
+ "data-slot": "superchat-message-meta",
881
+ className: "flex items-baseline gap-2",
882
+ children: [
883
+ /* @__PURE__ */ jsx(
884
+ "span",
891
885
  {
892
- "data-slot": "superchat-message-editor",
893
- className: "flex w-80 max-w-full flex-col gap-2",
894
- children: [
895
- /* @__PURE__ */ jsx(
896
- "textarea",
897
- {
898
- value: draft,
899
- ref: editRef,
900
- rows: 2,
901
- onChange: (e) => {
902
- setDraft(e.target.value);
903
- autosize();
904
- },
905
- onPaste: handleEditPaste,
906
- onKeyDown: (e) => {
907
- if (e.key === "Enter" && !e.shiftKey) {
908
- e.preventDefault();
909
- saveEdit();
910
- } else if (e.key === "Escape") {
911
- e.preventDefault();
912
- cancelEdit();
913
- }
914
- },
915
- "aria-label": "Edit message",
916
- className: "focus:ring-primary-500 max-h-60 min-h-16 w-full resize-none rounded-lg border border-neutral-300 bg-white px-3 py-2 text-sm text-neutral-900 focus:ring-1 focus:outline-none dark:border-neutral-600 dark:bg-neutral-900 dark:text-white"
917
- }
918
- ),
919
- /* @__PURE__ */ jsxs("div", { className: "flex justify-end gap-2", children: [
886
+ className: "text-xs font-medium",
887
+ style: accentTextColor ? { color: accentTextColor } : void 0,
888
+ children: authorName
889
+ }
890
+ ),
891
+ participant?.role && /* @__PURE__ */ jsx("span", { className: "text-[10px] text-neutral-500 dark:text-neutral-400", children: participant.role }),
892
+ /* @__PURE__ */ jsx("span", { className: "text-[10px] text-neutral-500 dark:text-neutral-400", children: formatTime(message.time) }),
893
+ message.editedAt && /* @__PURE__ */ jsx(
894
+ "span",
895
+ {
896
+ "data-slot": "superchat-edited-indicator",
897
+ className: "text-[10px] text-neutral-500 dark:text-neutral-400",
898
+ title: `Edited ${formatTime(message.editedAt)}`,
899
+ children: "(edited)"
900
+ }
901
+ )
902
+ ]
903
+ }
904
+ ),
905
+ /* @__PURE__ */ jsx(
906
+ "div",
907
+ {
908
+ className: cn(
909
+ "flex w-full items-center gap-1",
910
+ isSelf ? "flex-row-reverse" : "flex-row"
911
+ ),
912
+ children: /* @__PURE__ */ jsx(
913
+ ChatBubble,
914
+ {
915
+ ref: bubbleRef,
916
+ "data-slot": "superchat-bubble",
917
+ variant: isSelf ? "user" : "assistant",
918
+ hasError: message.status === "error",
919
+ className: "text-sm has-[[data-slot=superchat-nitro-table]]:w-full has-[[data-slot=superchat-nitro-table]]:max-w-full",
920
+ children: isEditing ? /* @__PURE__ */ jsxs(
921
+ "div",
922
+ {
923
+ "data-slot": "superchat-message-editor",
924
+ className: "flex w-80 max-w-full flex-col gap-2",
925
+ style: editMinWidth ? { minWidth: editMinWidth } : void 0,
926
+ children: [
920
927
  /* @__PURE__ */ jsx(
921
- "button",
928
+ "textarea",
922
929
  {
923
- type: "button",
924
- onClick: cancelEdit,
925
- className: "rounded-md px-2.5 py-1 text-xs font-medium text-neutral-200 hover:bg-white/10",
926
- children: "Cancel"
930
+ value: draft,
931
+ ref: editRef,
932
+ rows: 2,
933
+ onChange: (e) => {
934
+ setDraft(e.target.value);
935
+ autosize();
936
+ },
937
+ onPaste: handleEditPaste,
938
+ onKeyDown: (e) => {
939
+ if (e.key === "Enter" && !e.shiftKey) {
940
+ e.preventDefault();
941
+ saveEdit();
942
+ } else if (e.key === "Escape") {
943
+ e.preventDefault();
944
+ cancelEdit();
945
+ }
946
+ },
947
+ "aria-label": "Edit message",
948
+ className: "focus:ring-primary-500 max-h-60 min-h-16 w-full resize-none rounded-lg border border-neutral-300 bg-white px-3 py-2 text-sm text-neutral-900 focus:ring-1 focus:outline-none dark:border-neutral-600 dark:bg-neutral-900 dark:text-white"
927
949
  }
928
950
  ),
929
- /* @__PURE__ */ jsx(
930
- "button",
931
- {
932
- type: "button",
933
- onClick: saveEdit,
934
- disabled: !draft.trim() || draft.trim() === message.text,
935
- className: "rounded-md bg-white px-2.5 py-1 text-xs font-medium text-neutral-900 hover:bg-neutral-100 disabled:opacity-40",
936
- children: "Save"
937
- }
938
- )
939
- ] })
940
- ]
941
- }
942
- ) : /* @__PURE__ */ jsxs(Fragment, { children: [
943
- message.content?.map((block, i) => {
944
- if (block.type === "tool_use" && block.toolCall) {
945
- return /* @__PURE__ */ jsx(MCPToolCallDisplay, { toolCall: block.toolCall }, i);
946
- }
947
- if ((block.type === "text" || block.type === "thinking") && block.text) {
948
- return /* @__PURE__ */ jsx(
949
- "div",
950
- {
951
- className: "prose prose-sm dark:prose-invert max-w-none **:wrap-break-word",
952
- children: renderText(block.text, {
953
- messageId: message.id,
954
- streaming,
955
- role: participant?.kind === "human" ? "user" : "assistant"
956
- })
957
- },
958
- i
959
- );
951
+ /* @__PURE__ */ jsxs("div", { className: "flex justify-end gap-2", children: [
952
+ /* @__PURE__ */ jsx(
953
+ "button",
954
+ {
955
+ type: "button",
956
+ onClick: cancelEdit,
957
+ className: "rounded-md px-2.5 py-1 text-xs font-medium text-neutral-200 hover:bg-white/10",
958
+ children: "Cancel"
959
+ }
960
+ ),
961
+ /* @__PURE__ */ jsx(
962
+ "button",
963
+ {
964
+ type: "button",
965
+ onClick: saveEdit,
966
+ disabled: !draft.trim() || draft.trim() === message.text,
967
+ className: "rounded-md bg-white px-2.5 py-1 text-xs font-medium text-neutral-900 hover:bg-neutral-100 disabled:opacity-40",
968
+ children: "Save"
969
+ }
970
+ )
971
+ ] })
972
+ ]
960
973
  }
961
- if (block.type === "code" && block.text) {
962
- const fenced = `\`\`\`${block.language ?? ""}
974
+ ) : /* @__PURE__ */ jsxs(Fragment, { children: [
975
+ message.content?.map((block, i) => {
976
+ if (block.type === "tool_use" && block.toolCall) {
977
+ return /* @__PURE__ */ jsx(MCPToolCallDisplay, { toolCall: block.toolCall }, i);
978
+ }
979
+ if ((block.type === "text" || block.type === "thinking") && block.text) {
980
+ return /* @__PURE__ */ jsx(
981
+ "div",
982
+ {
983
+ className: "prose prose-sm dark:prose-invert max-w-none **:wrap-break-word",
984
+ children: renderText(block.text, {
985
+ messageId: message.id,
986
+ streaming,
987
+ role: participant?.kind === "human" ? "user" : "assistant"
988
+ })
989
+ },
990
+ i
991
+ );
992
+ }
993
+ if (block.type === "code" && block.text) {
994
+ const fenced = `\`\`\`${block.language ?? ""}
963
995
  ${block.text}
964
996
  \`\`\``;
965
- return /* @__PURE__ */ jsx(
966
- "div",
967
- {
968
- className: "prose prose-sm dark:prose-invert max-w-none **:wrap-break-word",
969
- children: renderText(fenced, {
970
- messageId: message.id,
971
- streaming,
972
- role: participant?.kind === "human" ? "user" : "assistant"
973
- })
974
- },
975
- i
976
- );
977
- }
978
- return null;
979
- }),
980
- message.text && /* @__PURE__ */ jsx("div", { className: "prose prose-sm dark:prose-invert max-w-none **:wrap-break-word", children: renderText(message.text, {
981
- messageId: message.id,
982
- streaming,
983
- role: participant?.kind === "human" ? "user" : "assistant"
984
- }) }),
985
- streaming && !hasBody && /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ jsx(AITypingIndicator, {}) })
986
- ] })
987
- }
988
- )
989
- ]
990
- }
991
- ),
992
- hasActions && /* @__PURE__ */ jsx(
993
- MessageActionsBar,
994
- {
995
- ref: actionsBarRef,
996
- actions,
997
- isSelf
998
- }
999
- )
1000
- ] })
997
+ return /* @__PURE__ */ jsx(
998
+ "div",
999
+ {
1000
+ className: "prose prose-sm dark:prose-invert max-w-none **:wrap-break-word",
1001
+ children: renderText(fenced, {
1002
+ messageId: message.id,
1003
+ streaming,
1004
+ role: participant?.kind === "human" ? "user" : "assistant"
1005
+ })
1006
+ },
1007
+ i
1008
+ );
1009
+ }
1010
+ return null;
1011
+ }),
1012
+ message.text && /* @__PURE__ */ jsx("div", { className: "prose prose-sm dark:prose-invert max-w-none **:wrap-break-word", children: renderText(message.text, {
1013
+ messageId: message.id,
1014
+ streaming,
1015
+ role: participant?.kind === "human" ? "user" : "assistant"
1016
+ }) }),
1017
+ streaming && !hasBody && /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ jsx(AITypingIndicator, {}) })
1018
+ ] })
1019
+ }
1020
+ )
1021
+ }
1022
+ )
1023
+ ]
1024
+ }
1025
+ )
1001
1026
  ]
1002
1027
  }
1003
1028
  );
@@ -1324,6 +1349,7 @@ function SuperChat({
1324
1349
  onValueChange: handleDraftChange,
1325
1350
  onSend: handleComposerSend,
1326
1351
  disabled: readOnly,
1352
+ className: "px-4 pb-4",
1327
1353
  placeholder: readOnly ? "Read-only conversation" : "Type a message\u2026 use @ to address an agent",
1328
1354
  mentionOptions,
1329
1355
  allowAttachments: !readOnly,