@agentiffai/design 1.3.18 → 1.3.19

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.
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
3
  var button = require('@react-aria/button');
4
- var react = require('react');
5
- var styled8 = require('styled-components');
4
+ var React = require('react');
5
+ var styled9 = require('styled-components');
6
6
  var jsxRuntime = require('react/jsx-runtime');
7
7
  var reactCore = require('@copilotkit/react-core');
8
8
  var reactUi = require('@copilotkit/react-ui');
@@ -10,7 +10,8 @@ var textfield = require('@react-aria/textfield');
10
10
 
11
11
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
12
12
 
13
- var styled8__default = /*#__PURE__*/_interopDefault(styled8);
13
+ var React__default = /*#__PURE__*/_interopDefault(React);
14
+ var styled9__default = /*#__PURE__*/_interopDefault(styled9);
14
15
 
15
16
  // src/components/copilotkit/Button/Button.tsx
16
17
 
@@ -173,7 +174,7 @@ var tokens = {
173
174
 
174
175
  // src/components/copilotkit/Button/Button.styles.ts
175
176
  var variantStyles = {
176
- primary: styled8.css`
177
+ primary: styled9.css`
177
178
  background-color: ${tokens.colors.primary};
178
179
  color: ${tokens.colors.text.primary};
179
180
  border: none;
@@ -193,7 +194,7 @@ var variantStyles = {
193
194
  outline-offset: 2px;
194
195
  }
195
196
  `,
196
- secondary: styled8.css`
197
+ secondary: styled9.css`
197
198
  background-color: transparent;
198
199
  color: ${tokens.colors.text.primary};
199
200
  border: 1px solid ${tokens.colors.border.default};
@@ -212,7 +213,7 @@ var variantStyles = {
212
213
  outline-offset: 2px;
213
214
  }
214
215
  `,
215
- icon: styled8.css`
216
+ icon: styled9.css`
216
217
  background-color: transparent;
217
218
  color: ${tokens.colors.text.primary};
218
219
  border: none;
@@ -235,26 +236,26 @@ var variantStyles = {
235
236
  `
236
237
  };
237
238
  var sizeStyles = {
238
- small: styled8.css`
239
+ small: styled9.css`
239
240
  padding: ${tokens.spacing.xs} ${tokens.spacing.sm};
240
241
  font-size: ${tokens.typography.fontSize.sm};
241
242
  min-width: 60px;
242
243
  height: 28px;
243
244
  `,
244
- medium: styled8.css`
245
+ medium: styled9.css`
245
246
  padding: ${tokens.spacing.sm} ${tokens.spacing.md};
246
247
  font-size: ${tokens.typography.fontSize.base};
247
248
  min-width: 80px;
248
249
  height: 36px;
249
250
  `,
250
- large: styled8.css`
251
+ large: styled9.css`
251
252
  padding: ${tokens.spacing.md} ${tokens.spacing.lg};
252
253
  font-size: ${tokens.typography.fontSize.lg};
253
254
  min-width: 100px;
254
255
  height: 44px;
255
256
  `
256
257
  };
257
- var StyledButton = styled8__default.default.button`
258
+ var StyledButton = styled9__default.default.button`
258
259
  /* Base styles */
259
260
  display: inline-flex;
260
261
  align-items: center;
@@ -275,19 +276,19 @@ var StyledButton = styled8__default.default.button`
275
276
  ${({ $size, $variant }) => $variant !== "icon" && sizeStyles[$size]}
276
277
 
277
278
  /* Icon variant size overrides */
278
- ${({ $variant, $size }) => $variant === "icon" && styled8.css`
279
+ ${({ $variant, $size }) => $variant === "icon" && styled9.css`
279
280
  width: ${$size === "small" ? "28px" : $size === "large" ? "44px" : "36px"};
280
281
  height: ${$size === "small" ? "28px" : $size === "large" ? "44px" : "36px"};
281
282
  border-radius: ${tokens.borderRadius.sm};
282
283
  `}
283
284
 
284
285
  /* Pressed state */
285
- ${({ $isPressed }) => $isPressed && styled8.css`
286
+ ${({ $isPressed }) => $isPressed && styled9.css`
286
287
  transform: scale(0.98);
287
288
  `}
288
289
 
289
290
  /* Loading state */
290
- ${({ $isLoading }) => $isLoading && styled8.css`
291
+ ${({ $isLoading }) => $isLoading && styled9.css`
291
292
  cursor: wait;
292
293
  opacity: 0.7;
293
294
  `}
@@ -313,7 +314,7 @@ function Button({
313
314
  isLoading = false,
314
315
  ...ariaProps
315
316
  }) {
316
- const ref = react.useRef(null);
317
+ const ref = React.useRef(null);
317
318
  const { buttonProps, isPressed } = button.useButton(
318
319
  {
319
320
  ...ariaProps,
@@ -337,15 +338,15 @@ function Button({
337
338
  );
338
339
  }
339
340
  Button.displayName = "Button";
340
- var ActionsContainer = styled8__default.default.div`
341
+ var ActionsContainer = styled9__default.default.div`
341
342
  display: flex;
342
343
  gap: ${tokens.spacing.sm};
343
344
  align-items: center;
344
345
 
345
- ${({ $layout }) => $layout === "horizontal" ? styled8.css`
346
+ ${({ $layout }) => $layout === "horizontal" ? styled9.css`
346
347
  flex-direction: row;
347
348
  flex-wrap: wrap;
348
- ` : styled8.css`
349
+ ` : styled9.css`
349
350
  flex-direction: column;
350
351
  align-items: stretch;
351
352
 
@@ -371,7 +372,7 @@ function Actions({ actions, layout = "horizontal", className }) {
371
372
  )) });
372
373
  }
373
374
  Actions.displayName = "Actions";
374
- var dotPulse = styled8.keyframes`
375
+ var dotPulse = styled9.keyframes`
375
376
  0%, 100% {
376
377
  opacity: 0.3;
377
378
  transform: scale(0.8);
@@ -381,7 +382,7 @@ var dotPulse = styled8.keyframes`
381
382
  transform: scale(1);
382
383
  }
383
384
  `;
384
- var fadeIn = styled8.keyframes`
385
+ var fadeIn = styled9.keyframes`
385
386
  from {
386
387
  opacity: 0;
387
388
  }
@@ -389,7 +390,7 @@ var fadeIn = styled8.keyframes`
389
390
  opacity: 1;
390
391
  }
391
392
  `;
392
- var blink = styled8.keyframes`
393
+ var blink = styled9.keyframes`
393
394
  0%, 49% {
394
395
  opacity: 1;
395
396
  }
@@ -397,7 +398,7 @@ var blink = styled8.keyframes`
397
398
  opacity: 0;
398
399
  }
399
400
  `;
400
- var ResponseContainer = styled8__default.default.div`
401
+ var ResponseContainer = styled9__default.default.div`
401
402
  display: inline-flex;
402
403
  align-items: center;
403
404
  gap: ${tokens.spacing.sm};
@@ -409,13 +410,13 @@ var ResponseContainer = styled8__default.default.div`
409
410
  max-width: fit-content;
410
411
  margin: 0 auto;
411
412
  `;
412
- var LoadingDots = styled8__default.default.div`
413
+ var LoadingDots = styled9__default.default.div`
413
414
  display: flex;
414
415
  align-items: center;
415
416
  gap: ${tokens.spacing.xs};
416
417
  padding: 0 ${tokens.spacing.xs};
417
418
  `;
418
- var Dot = styled8__default.default.span`
419
+ var Dot = styled9__default.default.span`
419
420
  width: ${tokens.spacing.xs};
420
421
  height: ${tokens.spacing.xs};
421
422
  border-radius: ${tokens.borderRadius.full};
@@ -423,7 +424,7 @@ var Dot = styled8__default.default.span`
423
424
  animation: ${dotPulse} 1.4s ease-in-out infinite;
424
425
  animation-delay: ${(props) => props.delay}s;
425
426
  `;
426
- var TypingIndicator = styled8__default.default.div`
427
+ var TypingIndicator = styled9__default.default.div`
427
428
  display: flex;
428
429
  align-items: center;
429
430
  gap: ${tokens.spacing.xs};
@@ -436,14 +437,14 @@ var TypingIndicator = styled8__default.default.div`
436
437
  animation: ${dotPulse} 1.4s ease-in-out infinite;
437
438
  }
438
439
  `;
439
- var Message = styled8__default.default.span`
440
+ var Message = styled9__default.default.span`
440
441
  font-size: ${tokens.typography.fontSize.sm};
441
442
  color: ${tokens.colors.text.primary};
442
443
  font-weight: ${tokens.typography.fontWeight.regular};
443
444
  line-height: ${tokens.typography.lineHeight.normal};
444
445
  white-space: nowrap;
445
446
  `;
446
- var StreamingText = styled8__default.default.div`
447
+ var StreamingText = styled9__default.default.div`
447
448
  font-size: ${tokens.typography.fontSize.sm};
448
449
  line-height: ${tokens.typography.lineHeight.normal};
449
450
  color: ${tokens.colors.text.primary};
@@ -494,7 +495,7 @@ var Response = ({
494
495
  }
495
496
  return null;
496
497
  };
497
- var dotPulse2 = styled8.keyframes`
498
+ var dotPulse2 = styled9.keyframes`
498
499
  0%, 100% {
499
500
  opacity: 0.3;
500
501
  transform: scale(0.8);
@@ -504,7 +505,7 @@ var dotPulse2 = styled8.keyframes`
504
505
  transform: scale(1);
505
506
  }
506
507
  `;
507
- var shake = styled8.keyframes`
508
+ var shake = styled9.keyframes`
508
509
  0%, 100% {
509
510
  transform: translateX(0);
510
511
  }
@@ -515,7 +516,7 @@ var shake = styled8.keyframes`
515
516
  transform: translateX(5px);
516
517
  }
517
518
  `;
518
- var AgentStateContainer = styled8__default.default.div`
519
+ var AgentStateContainer = styled9__default.default.div`
519
520
  display: inline-flex;
520
521
  flex-direction: column;
521
522
  align-items: center;
@@ -529,35 +530,35 @@ var AgentStateContainer = styled8__default.default.div`
529
530
  max-width: fit-content;
530
531
  margin: 0 auto;
531
532
  `;
532
- var StateContent = styled8__default.default.div`
533
+ var StateContent = styled9__default.default.div`
533
534
  display: flex;
534
535
  flex-direction: column;
535
536
  gap: ${tokens.spacing.sm};
536
537
  align-items: center;
537
538
  width: 100%;
538
539
  `;
539
- var IdleIndicator = styled8__default.default.div`
540
+ var IdleIndicator = styled9__default.default.div`
540
541
  width: ${tokens.spacing.xs};
541
542
  height: ${tokens.spacing.xs};
542
543
  background-color: ${tokens.colors.status.idle};
543
544
  border-radius: ${tokens.borderRadius.full};
544
545
  animation: ${dotPulse2} 2s infinite ease-in-out;
545
546
  `;
546
- var ErrorIndicator = styled8__default.default.div`
547
+ var ErrorIndicator = styled9__default.default.div`
547
548
  width: ${tokens.spacing.xs};
548
549
  height: ${tokens.spacing.xs};
549
550
  background-color: ${tokens.colors.error};
550
551
  border-radius: ${tokens.borderRadius.full};
551
552
  animation: ${shake} 0.5s ease-in-out;
552
553
  `;
553
- var StateLabel = styled8__default.default.span`
554
+ var StateLabel = styled9__default.default.span`
554
555
  font-size: ${tokens.typography.fontSize.sm};
555
556
  font-weight: ${tokens.typography.fontWeight.regular};
556
557
  color: ${tokens.colors.text.primary};
557
558
  line-height: ${tokens.typography.lineHeight.normal};
558
559
  white-space: nowrap;
559
560
  `;
560
- styled8__default.default.p`
561
+ styled9__default.default.p`
561
562
  font-size: ${tokens.typography.fontSize.sm};
562
563
  color: ${tokens.colors.text.tertiary};
563
564
  line-height: ${tokens.typography.lineHeight.normal};
@@ -565,7 +566,7 @@ styled8__default.default.p`
565
566
  text-align: center;
566
567
  white-space: nowrap;
567
568
  `;
568
- var ProgressBar = styled8__default.default.div`
569
+ var ProgressBar = styled9__default.default.div`
569
570
  width: 100%;
570
571
  height: ${tokens.spacing.xs};
571
572
  background-color: ${tokens.colors.surface.elevated};
@@ -573,7 +574,7 @@ var ProgressBar = styled8__default.default.div`
573
574
  overflow: hidden;
574
575
  margin-top: ${tokens.spacing.xs};
575
576
  `;
576
- var ProgressBarFill = styled8__default.default.div`
577
+ var ProgressBarFill = styled9__default.default.div`
577
578
  height: 100%;
578
579
  width: ${(props) => Math.min(Math.max(props.progress, 0), 100)}%;
579
580
  background: linear-gradient(135deg, ${tokens.colors.accent} 0%, ${tokens.colors.primary} 100%);
@@ -602,11 +603,11 @@ var AgentState = ({ state, message, progress, className }) => {
602
603
  }
603
604
  return null;
604
605
  };
605
- var Container = styled8__default.default.div`
606
+ var Container = styled9__default.default.div`
606
607
  margin: ${tokens.spacing.sm} 0;
607
608
  padding: 0 ${tokens.spacing.sm};
608
609
  `;
609
- var ToolName = styled8__default.default.div`
610
+ var ToolName = styled9__default.default.div`
610
611
  font-size: ${tokens.typography.fontSize.xs};
611
612
  color: ${tokens.colors.text.tertiary};
612
613
  margin-bottom: ${tokens.spacing.xs};
@@ -656,7 +657,7 @@ var ActionExecutionAdapter = ({ message, inProgress }) => {
656
657
  ] });
657
658
  };
658
659
  ActionExecutionAdapter.displayName = "ActionExecutionAdapter";
659
- var dotPulse3 = styled8.keyframes`
660
+ var dotPulse3 = styled9.keyframes`
660
661
  0%, 100% {
661
662
  opacity: 0.3;
662
663
  transform: scale(0.8);
@@ -666,7 +667,7 @@ var dotPulse3 = styled8.keyframes`
666
667
  transform: scale(1);
667
668
  }
668
669
  `;
669
- var pulse = styled8.keyframes`
670
+ var pulse = styled9.keyframes`
670
671
  0%, 100% {
671
672
  opacity: 0.5;
672
673
  transform: scale(1);
@@ -676,7 +677,7 @@ var pulse = styled8.keyframes`
676
677
  transform: scale(1.2);
677
678
  }
678
679
  `;
679
- var wave = styled8.keyframes`
680
+ var wave = styled9.keyframes`
680
681
  0%, 40%, 100% {
681
682
  transform: translateY(0);
682
683
  }
@@ -713,7 +714,7 @@ var getSizeValue = (size = "md") => {
713
714
  };
714
715
  }
715
716
  };
716
- var Container2 = styled8__default.default.div`
717
+ var Container2 = styled9__default.default.div`
717
718
  display: inline-flex;
718
719
  align-items: center;
719
720
  gap: ${tokens.spacing.md};
@@ -725,7 +726,7 @@ var Container2 = styled8__default.default.div`
725
726
  max-width: fit-content;
726
727
  margin: 0 auto;
727
728
  `;
728
- var Avatar = styled8__default.default.div`
729
+ var Avatar = styled9__default.default.div`
729
730
  width: ${(props) => getSizeValue(props.size).avatar};
730
731
  height: ${(props) => getSizeValue(props.size).avatar};
731
732
  border-radius: ${tokens.borderRadius.full};
@@ -736,23 +737,23 @@ var Avatar = styled8__default.default.div`
736
737
  flex-shrink: 0;
737
738
  box-shadow: ${tokens.shadows.glow.primary};
738
739
  `;
739
- var HeadphonesIcon = styled8__default.default.svg`
740
+ var HeadphonesIcon = styled9__default.default.svg`
740
741
  width: ${(props) => getSizeValue(props.size).icon};
741
742
  height: ${(props) => getSizeValue(props.size).icon};
742
743
  color: ${tokens.colors.text.primary};
743
744
  `;
744
- var Content = styled8__default.default.div`
745
+ var Content = styled9__default.default.div`
745
746
  display: flex;
746
747
  align-items: center;
747
748
  gap: ${tokens.spacing.sm};
748
749
  `;
749
- var LoadingDots2 = styled8__default.default.div`
750
+ var LoadingDots2 = styled9__default.default.div`
750
751
  display: flex;
751
752
  align-items: center;
752
753
  gap: ${(props) => props.variant === "wave" ? "2px" : `${tokens.spacing.xs}`};
753
754
  padding: 0 ${tokens.spacing.xs};
754
755
  `;
755
- var Dot2 = styled8__default.default.span`
756
+ var Dot2 = styled9__default.default.span`
756
757
  width: ${(props) => getSizeValue(props.size).dotSize};
757
758
  height: ${(props) => getSizeValue(props.size).dotSize};
758
759
  border-radius: ${tokens.borderRadius.full};
@@ -770,7 +771,7 @@ var Dot2 = styled8__default.default.span`
770
771
  }}
771
772
  1.4s ease-in-out infinite;
772
773
  `;
773
- var Message2 = styled8__default.default.span`
774
+ var Message2 = styled9__default.default.span`
774
775
  font-size: ${(props) => getSizeValue(props.size).fontSize};
775
776
  color: ${tokens.colors.text.secondary};
776
777
  font-weight: ${tokens.typography.fontWeight.regular};
@@ -784,7 +785,7 @@ function AssistantThinking({
784
785
  variant = "dots",
785
786
  size = "md"
786
787
  }) {
787
- const containerRef = react.useRef(null);
788
+ const containerRef = React.useRef(null);
788
789
  const renderLoadingIndicator = () => {
789
790
  switch (variant) {
790
791
  case "dots":
@@ -830,11 +831,114 @@ function AssistantThinking({
830
831
  );
831
832
  }
832
833
  AssistantThinking.displayName = "AssistantThinking";
834
+ var IconWrapper = styled9__default.default.span`
835
+ display: inline-flex;
836
+ align-items: center;
837
+ justify-content: center;
838
+ width: ${({ $size }) => $size}px;
839
+ height: ${({ $size }) => $size}px;
840
+ color: ${({ $color }) => $color};
841
+ line-height: 1;
842
+
843
+ img {
844
+ width: 100%;
845
+ height: 100%;
846
+ filter: ${({ $color }) => {
847
+ if ($color === "currentColor" || !$color) return "inherit";
848
+ if ($color === "white" || $color === tokens.colors.text.primary || $color === "#fff") {
849
+ return "brightness(0) saturate(100%) invert(100%)";
850
+ }
851
+ if ($color === tokens.colors.text.secondary || $color === "#b9bbbe") {
852
+ return "brightness(0) saturate(100%) invert(75%) sepia(8%) saturate(223%) hue-rotate(180deg) brightness(94%) contrast(86%)";
853
+ }
854
+ if ($color === tokens.colors.error || $color === "#ed4245" || $color === "#f04747") {
855
+ return "brightness(0) saturate(100%) invert(38%) sepia(97%) saturate(1459%) hue-rotate(334deg) brightness(95%) contrast(93%)";
856
+ }
857
+ return "none";
858
+ }};
859
+ }
860
+ `;
861
+
862
+ // src/components/layout/Icon/icons.ts
863
+ var ICON_BASE_PATH = "/assets/icon-set";
864
+ var iconFiles = {
865
+ "mic-fill": "Icon-mic-fill.svg",
866
+ "mic-off-fill": "Icon-mic-off-fill.svg",
867
+ "headphone-fill": "Icon-headphone-fill.svg",
868
+ "volume-mute-fill": "Icon-volume-mute-fill.svg",
869
+ "settings-3-line": "Icon-settings-3-line.svg",
870
+ "home-fill": "Icon-home-fill.svg",
871
+ "add-circle-fill": "Icon-add-circle-fill.svg",
872
+ "compass-discover-fill": "Icon-compass-discover-fill.svg",
873
+ "download-2-fill": "Icon-download-2-fill.svg",
874
+ "arrow-left-fill": "Icon-arrow-left-fill.svg",
875
+ "calendar-fill": "Icon-calendar-fill.svg",
876
+ "chat-1-fill": "Icon-chat-1-fill.svg",
877
+ "flow-chart": "Icon-flow-chart.svg",
878
+ "logout-circle-r-fill": "Icon-logout-circle-r-fill.svg",
879
+ "logout-circle-r-line": "Icon-logout-circle-r-line.svg",
880
+ "side-bar-fill": "Icon-side-bar-fill.svg",
881
+ "check-fill": "Icon-check-fill.svg",
882
+ "checkbox-circle-fill": "Icon-checkbox-circle-fill.svg",
883
+ "close-circle-fill": "Icon-close-circle-fill.svg",
884
+ "error-warning-fill": "Icon-error-warning-fill.svg",
885
+ "hammer-fill": "Icon-hammer-fill.svg",
886
+ "rocket-fill": "Icon-rocket-fill.svg",
887
+ "coupon-2-fill": "Icon-coupon-2-fill.svg",
888
+ "clipboard-fill": "Icon-clipboard-fill.svg"
889
+ };
890
+ function getIconPath(name) {
891
+ return `${ICON_BASE_PATH}/${iconFiles[name]}`;
892
+ }
893
+ function Icon({
894
+ name,
895
+ size = 20,
896
+ color = "currentColor",
897
+ className,
898
+ ...imgProps
899
+ }) {
900
+ const iconPath = getIconPath(name);
901
+ return /* @__PURE__ */ jsxRuntime.jsx(IconWrapper, { $size: size, $color: color, className, "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: iconPath, alt: "", width: size, height: size, ...imgProps }) });
902
+ }
903
+ Icon.displayName = "Icon";
833
904
  function parseMarkdown(text) {
834
905
  if (!text) return [];
835
906
  text = text.replace(/<!--TOOL_CALL:[^:]+:[\s\S]+?-->/g, "").replace(/__TOOL_CALL__:[^:]+:\{[^}]*(?:\{[^}]*\}[^}]*)*\}/g, "").replace(/<!--TOOL_CALL:[\s\S]*$/g, "").replace(/__TOOL_CALL__:[\s\S]*$/g, "");
836
907
  const elements = [];
837
908
  let key = 0;
909
+ const codeBlockRegex = /```(?:\w*)\n?([\s\S]*?)```/g;
910
+ let lastCodeEnd = 0;
911
+ let codeMatch;
912
+ while ((codeMatch = codeBlockRegex.exec(text)) !== null) {
913
+ if (codeMatch.index > lastCodeEnd) {
914
+ const beforeCode = text.slice(lastCodeEnd, codeMatch.index);
915
+ const parsed = parseMarkdownParagraphs(beforeCode, key);
916
+ elements.push(...parsed.elements);
917
+ key = parsed.nextKey;
918
+ }
919
+ const codeContent = (codeMatch[1] ?? "").replace(/\n$/, "");
920
+ elements.push(
921
+ /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "code-block", children: /* @__PURE__ */ jsxRuntime.jsx("code", { children: codeContent }) }, key++)
922
+ );
923
+ lastCodeEnd = codeMatch.index + codeMatch[0].length;
924
+ }
925
+ const remaining = text.slice(lastCodeEnd);
926
+ if (remaining) {
927
+ const parsed = parseMarkdownParagraphs(remaining, key);
928
+ elements.push(...parsed.elements);
929
+ key = parsed.nextKey;
930
+ }
931
+ return elements;
932
+ }
933
+ function isMarkdownTable(lines) {
934
+ if (lines.length < 2) return false;
935
+ const firstLine = (lines[0] ?? "").trim();
936
+ const secondLine = (lines[1] ?? "").trim();
937
+ return firstLine.startsWith("|") && secondLine.startsWith("|") && /^\|[\s-:|]+\|$/.test(secondLine);
938
+ }
939
+ function parseMarkdownParagraphs(text, startKey) {
940
+ const elements = [];
941
+ let key = startKey;
838
942
  const paragraphs = text.split(/\n\n+/);
839
943
  paragraphs.forEach((paragraph, pIndex) => {
840
944
  if (pIndex > 0) {
@@ -842,16 +946,30 @@ function parseMarkdown(text) {
842
946
  elements.push(/* @__PURE__ */ jsxRuntime.jsx("br", {}, key++));
843
947
  }
844
948
  const lines = paragraph.split("\n");
949
+ if (isMarkdownTable(lines)) {
950
+ elements.push(
951
+ /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "code-block", children: /* @__PURE__ */ jsxRuntime.jsx("code", { children: paragraph }) }, key++)
952
+ );
953
+ return;
954
+ }
845
955
  lines.forEach((line, lineIndex) => {
846
956
  if (lineIndex > 0) {
847
957
  elements.push(/* @__PURE__ */ jsxRuntime.jsx("br", {}, key++));
848
958
  }
959
+ const headingMatch = line.match(/^(#{1,4})\s+(.+)$/);
960
+ if (headingMatch && headingMatch[1] && headingMatch[2]) {
961
+ const level = headingMatch[1].length;
962
+ const parsed2 = parseInlineMarkdown(headingMatch[2], key);
963
+ key = parsed2.nextKey;
964
+ elements.push(React__default.default.createElement(`h${level}`, { key: key++ }, ...parsed2.elements));
965
+ return;
966
+ }
849
967
  const parsed = parseInlineMarkdown(line, key);
850
968
  elements.push(...parsed.elements);
851
969
  key = parsed.nextKey;
852
970
  });
853
971
  });
854
- return elements;
972
+ return { elements, nextKey: key };
855
973
  }
856
974
  function parseInlineMarkdown(text, startKey) {
857
975
  const elements = [];
@@ -884,7 +1002,7 @@ function parseInlineMarkdown(text, startKey) {
884
1002
  }
885
1003
  return { elements, nextKey: key };
886
1004
  }
887
- var Container3 = styled8__default.default.div`
1005
+ var Container3 = styled9__default.default.div`
888
1006
  font-family: ${(props) => props.$variant === "code" ? tokens.typography.fontFamily.monospace : tokens.typography.fontFamily.primary};
889
1007
  white-space: pre-wrap;
890
1008
  word-break: break-word;
@@ -911,6 +1029,24 @@ var Container3 = styled8__default.default.div`
911
1029
  font-size: 0.9em;
912
1030
  }
913
1031
 
1032
+ pre.code-block {
1033
+ background: ${tokens.colors.surface.overlay};
1034
+ border-radius: ${tokens.borderRadius.md};
1035
+ padding: ${tokens.spacing.md};
1036
+ margin: ${tokens.spacing.sm} 0;
1037
+ overflow-x: auto;
1038
+ white-space: pre;
1039
+ -webkit-overflow-scrolling: touch;
1040
+
1041
+ code {
1042
+ background: none;
1043
+ padding: 0;
1044
+ border-radius: 0;
1045
+ font-size: 0.85em;
1046
+ line-height: 1.5;
1047
+ }
1048
+ }
1049
+
914
1050
  a {
915
1051
  color: ${tokens.colors.primary};
916
1052
  text-decoration: none;
@@ -919,8 +1055,19 @@ var Container3 = styled8__default.default.div`
919
1055
  text-decoration: underline;
920
1056
  }
921
1057
  }
1058
+
1059
+ h1, h2, h3, h4 {
1060
+ margin: ${tokens.spacing.sm} 0 ${tokens.spacing.xs} 0;
1061
+ color: ${tokens.colors.text.primary};
1062
+ line-height: 1.3;
1063
+ }
1064
+
1065
+ h1 { font-size: 1.4em; font-weight: ${tokens.typography.fontWeight.bold}; }
1066
+ h2 { font-size: 1.2em; font-weight: ${tokens.typography.fontWeight.bold}; }
1067
+ h3 { font-size: 1.05em; font-weight: ${tokens.typography.fontWeight.semibold}; }
1068
+ h4 { font-size: 1em; font-weight: ${tokens.typography.fontWeight.semibold}; }
922
1069
  `;
923
- var Cursor = styled8__default.default.span`
1070
+ var Cursor = styled9__default.default.span`
924
1071
  display: inline-block;
925
1072
  width: 2px;
926
1073
  height: 1em;
@@ -950,9 +1097,9 @@ var StreamingTextBase = ({
950
1097
  onStreamComplete,
951
1098
  className
952
1099
  }) => {
953
- const wasStreamingRef = react.useRef(isStreaming);
954
- const completionCalledRef = react.useRef(false);
955
- react.useEffect(() => {
1100
+ const wasStreamingRef = React.useRef(isStreaming);
1101
+ const completionCalledRef = React.useRef(false);
1102
+ React.useEffect(() => {
956
1103
  if (wasStreamingRef.current && !isStreaming && !completionCalledRef.current) {
957
1104
  completionCalledRef.current = true;
958
1105
  onStreamComplete?.();
@@ -963,7 +1110,7 @@ var StreamingTextBase = ({
963
1110
  wasStreamingRef.current = isStreaming;
964
1111
  }, [isStreaming, onStreamComplete]);
965
1112
  const showCursor = isStreaming && cursor;
966
- const renderedContent = react.useMemo(() => {
1113
+ const renderedContent = React.useMemo(() => {
967
1114
  if (variant === "markdown") {
968
1115
  return parseMarkdown(content);
969
1116
  }
@@ -974,9 +1121,9 @@ var StreamingTextBase = ({
974
1121
  showCursor && /* @__PURE__ */ jsxRuntime.jsx(Cursor, {})
975
1122
  ] });
976
1123
  };
977
- var StreamingText2 = react.memo(StreamingTextBase);
1124
+ var StreamingText2 = React.memo(StreamingTextBase);
978
1125
  StreamingText2.displayName = "StreamingText";
979
- var MessageContainer = styled8__default.default.div`
1126
+ var MessageContainer = styled9__default.default.div`
980
1127
  display: flex;
981
1128
  flex-direction: column;
982
1129
  gap: ${tokens.spacing.xs};
@@ -986,20 +1133,20 @@ var MessageContainer = styled8__default.default.div`
986
1133
  will-change: contents;
987
1134
  contain: content;
988
1135
  `;
989
- var AvatarContainer = styled8__default.default.div`
1136
+ var AvatarContainer = styled9__default.default.div`
990
1137
  display: flex;
991
1138
  align-items: center;
992
1139
  gap: ${tokens.spacing.xs};
993
1140
  flex-shrink: 0;
994
1141
  `;
995
- var Avatar2 = styled8__default.default.img`
1142
+ var Avatar2 = styled9__default.default.img`
996
1143
  width: 20px;
997
1144
  height: 20px;
998
1145
  border-radius: ${tokens.borderRadius.full};
999
1146
  object-fit: cover;
1000
1147
  background-color: transparent;
1001
1148
  `;
1002
- var AvatarInitials = styled8__default.default.div`
1149
+ var AvatarInitials = styled9__default.default.div`
1003
1150
  width: 20px;
1004
1151
  height: 20px;
1005
1152
  border-radius: ${tokens.borderRadius.full};
@@ -1017,16 +1164,16 @@ var AvatarInitials = styled8__default.default.div`
1017
1164
  object-fit: contain;
1018
1165
  }
1019
1166
  `;
1020
- var AvatarLabel = styled8__default.default.span`
1167
+ var AvatarLabel = styled9__default.default.span`
1021
1168
  font-size: ${tokens.typography.fontSize.xs};
1022
1169
  font-weight: ${tokens.typography.fontWeight.medium};
1023
1170
  color: ${tokens.colors.text.secondary};
1024
1171
  `;
1025
- var ContentContainer = styled8__default.default.div`
1172
+ var ContentContainer = styled9__default.default.div`
1026
1173
  width: 100%;
1027
1174
  min-width: 0;
1028
1175
  `;
1029
- var MessageContent = styled8__default.default.div`
1176
+ var MessageContent = styled9__default.default.div`
1030
1177
  /* Use solid color instead of backdrop-filter for performance during streaming */
1031
1178
  background-color: ${tokens.colors.surface.elevated};
1032
1179
  padding: ${tokens.spacing.sm};
@@ -1040,7 +1187,7 @@ var MessageContent = styled8__default.default.div`
1040
1187
  /* Optimize text rendering */
1041
1188
  text-rendering: optimizeSpeed;
1042
1189
  `;
1043
- var LoadingDots3 = styled8__default.default.div`
1190
+ var LoadingDots3 = styled9__default.default.div`
1044
1191
  display: flex;
1045
1192
  gap: ${tokens.spacing.xs};
1046
1193
  padding: ${tokens.spacing.sm};
@@ -1049,7 +1196,7 @@ var LoadingDots3 = styled8__default.default.div`
1049
1196
  border-radius: ${tokens.borderRadius.lg};
1050
1197
  width: fit-content;
1051
1198
  `;
1052
- var pulse2 = styled8.keyframes`
1199
+ var pulse2 = styled9.keyframes`
1053
1200
  0%, 100% {
1054
1201
  opacity: 0.4;
1055
1202
  }
@@ -1057,7 +1204,7 @@ var pulse2 = styled8.keyframes`
1057
1204
  opacity: 1;
1058
1205
  }
1059
1206
  `;
1060
- var LoadingDot = styled8__default.default.div`
1207
+ var LoadingDot = styled9__default.default.div`
1061
1208
  width: ${tokens.spacing.sm};
1062
1209
  height: ${tokens.spacing.sm};
1063
1210
  border-radius: ${tokens.borderRadius.full};
@@ -1066,7 +1213,7 @@ var LoadingDot = styled8__default.default.div`
1066
1213
  animation: ${pulse2} 1.4s ease-in-out infinite;
1067
1214
  animation-delay: ${(props) => props.delay}s;
1068
1215
  `;
1069
- var FileAttachmentContainer = styled8__default.default.div`
1216
+ var FileAttachmentContainer = styled9__default.default.div`
1070
1217
  display: flex;
1071
1218
  align-items: center;
1072
1219
  gap: ${tokens.spacing.sm};
@@ -1102,7 +1249,7 @@ var FileAttachmentContainer = styled8__default.default.div`
1102
1249
  }
1103
1250
  `}
1104
1251
  `;
1105
- var FileIconContainer = styled8__default.default.div`
1252
+ var FileIconContainer = styled9__default.default.div`
1106
1253
  flex-shrink: 0;
1107
1254
  width: ${tokens.spacing.xl};
1108
1255
  height: ${tokens.spacing.xl};
@@ -1112,14 +1259,14 @@ var FileIconContainer = styled8__default.default.div`
1112
1259
  font-size: ${tokens.typography.fontSize["2xl"]};
1113
1260
  line-height: 1;
1114
1261
  `;
1115
- var FileInfo = styled8__default.default.div`
1262
+ var FileInfo = styled9__default.default.div`
1116
1263
  flex: 1;
1117
1264
  min-width: 0;
1118
1265
  display: flex;
1119
1266
  flex-direction: column;
1120
1267
  gap: 2px;
1121
1268
  `;
1122
- var FileTitle = styled8__default.default.div`
1269
+ var FileTitle = styled9__default.default.div`
1123
1270
  font-size: ${tokens.typography.fontSize.sm};
1124
1271
  font-weight: ${tokens.typography.fontWeight.medium};
1125
1272
  color: ${tokens.colors.text.primary};
@@ -1129,7 +1276,7 @@ var FileTitle = styled8__default.default.div`
1129
1276
  text-overflow: ellipsis;
1130
1277
  white-space: nowrap;
1131
1278
  `;
1132
- var FileMetadata = styled8__default.default.div`
1279
+ var FileMetadata = styled9__default.default.div`
1133
1280
  display: flex;
1134
1281
  align-items: center;
1135
1282
  gap: ${tokens.spacing.xs};
@@ -1139,7 +1286,7 @@ var FileMetadata = styled8__default.default.div`
1139
1286
  line-height: ${tokens.typography.lineHeight.tight};
1140
1287
  overflow: hidden;
1141
1288
  `;
1142
- var FileSubtitle = styled8__default.default.span`
1289
+ var FileSubtitle = styled9__default.default.span`
1143
1290
  color: ${tokens.colors.text.tertiary};
1144
1291
  white-space: nowrap;
1145
1292
  overflow: hidden;
@@ -1159,7 +1306,7 @@ var FileAttachment = ({
1159
1306
  className,
1160
1307
  ...ariaProps
1161
1308
  }) => {
1162
- const ref = react.useRef(null);
1309
+ const ref = React.useRef(null);
1163
1310
  const isInteractive = !!(onClick || onPress);
1164
1311
  const handlePress = (e) => {
1165
1312
  if (onClick) onClick();
@@ -1195,13 +1342,13 @@ var FileAttachment = ({
1195
1342
  }
1196
1343
  );
1197
1344
  };
1198
- var AttachmentsContainer = styled8__default.default.div`
1345
+ var AttachmentsContainer = styled9__default.default.div`
1199
1346
  display: flex;
1200
1347
  flex-direction: column;
1201
1348
  gap: ${tokens.spacing.sm};
1202
1349
  margin-top: ${tokens.spacing.sm};
1203
1350
  `;
1204
- var ActionButton = styled8__default.default.button`
1351
+ var ActionButton = styled9__default.default.button`
1205
1352
  display: inline-flex;
1206
1353
  align-items: center;
1207
1354
  gap: ${tokens.spacing.xs};
@@ -1225,19 +1372,19 @@ var ActionButton = styled8__default.default.button`
1225
1372
  transform: scale(0.98);
1226
1373
  }
1227
1374
  `;
1228
- var ActionsContainer2 = styled8__default.default.div`
1375
+ var ActionsContainer2 = styled9__default.default.div`
1229
1376
  display: flex;
1230
1377
  gap: ${tokens.spacing.xs};
1231
1378
  flex-wrap: wrap;
1232
1379
  margin-top: ${tokens.spacing.sm};
1233
1380
  `;
1234
- var MessageTime = styled8__default.default.time`
1381
+ var MessageTime = styled9__default.default.time`
1235
1382
  font-size: ${tokens.typography.fontSize.xs};
1236
1383
  color: ${tokens.colors.text.tertiary};
1237
1384
  margin-top: ${tokens.spacing.xs};
1238
1385
  display: block;
1239
1386
  `;
1240
- var StreamingIndicator = styled8__default.default.span`
1387
+ var StreamingIndicator = styled9__default.default.span`
1241
1388
  display: inline-block;
1242
1389
  width: ${tokens.spacing.xs};
1243
1390
  height: ${tokens.spacing.xs};
@@ -1308,8 +1455,36 @@ var AssistantMessageBase = ({
1308
1455
  /* @__PURE__ */ jsxRuntime.jsx(ContentContainer, { children: renderContent() })
1309
1456
  ] });
1310
1457
  };
1311
- var AssistantMessage = react.memo(AssistantMessageBase);
1458
+ var AssistantMessage = React.memo(AssistantMessageBase);
1312
1459
  AssistantMessage.displayName = "AssistantMessage";
1460
+ var REGISTRY_KEY = "__agentiffai_tool_call_registry__";
1461
+ var TOOL_CALL_TTL_MS = 5 * 60 * 1e3;
1462
+ function getRegistryMap() {
1463
+ const g = globalThis;
1464
+ if (!g[REGISTRY_KEY]) {
1465
+ g[REGISTRY_KEY] = /* @__PURE__ */ new Map();
1466
+ }
1467
+ return g[REGISTRY_KEY];
1468
+ }
1469
+ function registerToolCall(name) {
1470
+ getRegistryMap().set(name, Date.now());
1471
+ }
1472
+ function clearToolCalls() {
1473
+ getRegistryMap().clear();
1474
+ }
1475
+ function getActiveToolCalls() {
1476
+ const map = getRegistryMap();
1477
+ const now = Date.now();
1478
+ const active = [];
1479
+ for (const [name, timestamp] of map) {
1480
+ if (now - timestamp < TOOL_CALL_TTL_MS) {
1481
+ active.push(name);
1482
+ } else {
1483
+ map.delete(name);
1484
+ }
1485
+ }
1486
+ return active;
1487
+ }
1313
1488
  function stripToolCallMarkers(content) {
1314
1489
  let stripped = content;
1315
1490
  stripped = stripped.replace(/<!--TOOL_CALL:[^:]+:[\s\S]+?-->/g, "");
@@ -1318,6 +1493,25 @@ function stripToolCallMarkers(content) {
1318
1493
  stripped = stripped.replace(/__TOOL_CALL__:[\s\S]*$/g, "");
1319
1494
  return stripped.trim();
1320
1495
  }
1496
+ function extractToolCallNames(content) {
1497
+ if (!content.includes("TOOL_CALL")) return [];
1498
+ const names = /* @__PURE__ */ new Set();
1499
+ const patterns = [
1500
+ /<!--TOOL_CALL:([^:]+):/g,
1501
+ /__TOOL_CALL__:([^:]+):/g
1502
+ ];
1503
+ for (const pattern of patterns) {
1504
+ let match;
1505
+ while ((match = pattern.exec(content)) !== null) {
1506
+ if (match[1]) names.add(match[1]);
1507
+ }
1508
+ }
1509
+ return Array.from(names);
1510
+ }
1511
+ function formatToolName2(name) {
1512
+ if (name === "update-workflow") return "Workflow";
1513
+ return name.split(/[-_]/).map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
1514
+ }
1321
1515
  var ERROR_PATTERNS = [
1322
1516
  /\bfailed\b/i,
1323
1517
  /\berror\b/i,
@@ -1389,10 +1583,31 @@ function buildChatSnippet(messages, errorMessageContent, maxMessages = 5, maxLen
1389
1583
  }
1390
1584
  return result;
1391
1585
  }
1392
- var GenerativeUIContainer = styled8__default.default.div`
1586
+ var GenerativeUIContainer = styled9__default.default.div`
1393
1587
  margin-top: ${tokens.spacing.sm};
1394
1588
  margin-bottom: ${tokens.spacing.sm};
1395
1589
  `;
1590
+ var ToolCallIndicator = styled9__default.default.div`
1591
+ display: flex;
1592
+ align-items: center;
1593
+ gap: ${tokens.spacing.sm};
1594
+ padding: ${tokens.spacing.xs} ${tokens.spacing.sm};
1595
+ margin-bottom: ${tokens.spacing.sm};
1596
+ border-radius: ${tokens.borderRadius.md};
1597
+ background: ${tokens.colors.text.primary}08;
1598
+ border: 1px solid ${tokens.colors.border.default};
1599
+ font-size: ${tokens.typography.fontSize.xs};
1600
+ color: ${tokens.colors.text.secondary};
1601
+ `;
1602
+ var ToolCallIcon = styled9__default.default.span`
1603
+ display: flex;
1604
+ align-items: center;
1605
+ color: ${tokens.colors.primary};
1606
+ `;
1607
+ var ToolCallName = styled9__default.default.span`
1608
+ font-weight: ${tokens.typography.fontWeight.medium};
1609
+ color: ${tokens.colors.text.primary};
1610
+ `;
1396
1611
  var AssistantMessageAdapterBase = ({
1397
1612
  message,
1398
1613
  isLoading,
@@ -1406,8 +1621,8 @@ var AssistantMessageAdapterBase = ({
1406
1621
  // markdownTagRenderers,
1407
1622
  // ImageRenderer,
1408
1623
  }) => {
1409
- const lastGenerativeUIRef = react.useRef(null);
1410
- const rawContent = message?.content || "";
1624
+ const lastGenerativeUIRef = React.useRef(null);
1625
+ const rawContent = Array.isArray(message?.content) ? message.content.join("") : message?.content || "";
1411
1626
  const content = stripToolCallMarkers(rawContent);
1412
1627
  let generativeUIOutput = null;
1413
1628
  const msgWithUI = message;
@@ -1446,18 +1661,23 @@ var AssistantMessageAdapterBase = ({
1446
1661
  )
1447
1662
  ] });
1448
1663
  };
1449
- var AssistantMessageAdapter = react.memo(AssistantMessageAdapterBase);
1664
+ var AssistantMessageAdapter = React.memo(AssistantMessageAdapterBase);
1450
1665
  AssistantMessageAdapter.displayName = "AssistantMessageAdapter";
1451
1666
  function createAssistantMessageAdapter(ThinkingIndicator, _ToolCallsComponent) {
1452
1667
  const CustomAssistantMessageAdapter = ({
1453
1668
  message,
1454
1669
  isLoading,
1455
1670
  isGenerating
1456
- // isCurrentMessage and ToolCallsComponent are no longer used but kept for backwards compat
1457
1671
  }) => {
1458
- const lastGenerativeUIRef = react.useRef(null);
1459
- const rawContent = message?.content || "";
1672
+ const lastGenerativeUIRef = React.useRef(null);
1673
+ const rawContent = Array.isArray(message?.content) ? message.content.join("") : message?.content || "";
1460
1674
  const content = stripToolCallMarkers(rawContent);
1675
+ const toolCallNames = React.useMemo(() => {
1676
+ const fromContent = extractToolCallNames(rawContent);
1677
+ if (fromContent.length > 0) return fromContent;
1678
+ if (isLoading || isGenerating || rawContent.length > 80) return getActiveToolCalls();
1679
+ return [];
1680
+ }, [rawContent, isLoading, isGenerating]);
1461
1681
  let generativeUIOutput = null;
1462
1682
  const msgWithUI = message;
1463
1683
  if (msgWithUI && typeof msgWithUI.generativeUI === "function") {
@@ -1477,10 +1697,18 @@ function createAssistantMessageAdapter(ThinkingIndicator, _ToolCallsComponent) {
1477
1697
  const attachments = [];
1478
1698
  const hasGenerativeUI = generativeUIOutput !== null;
1479
1699
  const showThinking = (isLoading || isGenerating && !content) && !hasGenerativeUI;
1700
+ const toolCallIndicators = toolCallNames.map((name) => /* @__PURE__ */ jsxRuntime.jsxs(ToolCallIndicator, { children: [
1701
+ /* @__PURE__ */ jsxRuntime.jsx(ToolCallIcon, { children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "hammer-fill", size: 14 }) }),
1702
+ /* @__PURE__ */ jsxRuntime.jsx(ToolCallName, { children: formatToolName2(name) })
1703
+ ] }, name));
1480
1704
  if (showThinking) {
1481
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: ThinkingIndicator ? /* @__PURE__ */ jsxRuntime.jsx(ThinkingIndicator, { isLoading, isGenerating }) : /* @__PURE__ */ jsxRuntime.jsx(AssistantThinking, { message: "Thinking..." }) });
1705
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1706
+ toolCallIndicators,
1707
+ ThinkingIndicator ? /* @__PURE__ */ jsxRuntime.jsx(ThinkingIndicator, { isLoading, isGenerating }) : /* @__PURE__ */ jsxRuntime.jsx(AssistantThinking, { message: "Thinking..." })
1708
+ ] });
1482
1709
  }
1483
1710
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1711
+ toolCallIndicators,
1484
1712
  generativeUIOutput && /* @__PURE__ */ jsxRuntime.jsx(GenerativeUIContainer, { children: generativeUIOutput }),
1485
1713
  content && /* @__PURE__ */ jsxRuntime.jsx(
1486
1714
  AssistantMessage,
@@ -1496,25 +1724,30 @@ function createAssistantMessageAdapter(ThinkingIndicator, _ToolCallsComponent) {
1496
1724
  ] });
1497
1725
  };
1498
1726
  CustomAssistantMessageAdapter.displayName = "CustomAssistantMessageAdapter";
1499
- return react.memo(CustomAssistantMessageAdapter);
1727
+ return React.memo(CustomAssistantMessageAdapter);
1500
1728
  }
1501
1729
  function createAssistantMessageAdapterWithErrorReporting(onReportIssue, ThinkingIndicator, _ToolCallsComponent) {
1502
1730
  const ErrorReportingAssistantMessageAdapter = ({
1503
1731
  message,
1504
1732
  isLoading,
1505
1733
  isGenerating
1506
- // isCurrentMessage and ToolCallsComponent are no longer used but kept for backwards compat
1507
1734
  }) => {
1508
- const lastGenerativeUIRef = react.useRef(null);
1735
+ const lastGenerativeUIRef = React.useRef(null);
1509
1736
  const { visibleMessages } = reactCore.useCopilotChat();
1510
- const rawContent = message?.content || "";
1737
+ const rawContent = Array.isArray(message?.content) ? message.content.join("") : message?.content || "";
1511
1738
  const content = stripToolCallMarkers(rawContent);
1512
- const errorContext = react.useMemo(() => detectErrorInMessage(content), [content]);
1513
- const chatSnippet = react.useMemo(() => {
1739
+ const toolCallNames = React.useMemo(() => {
1740
+ const fromContent = extractToolCallNames(rawContent);
1741
+ if (fromContent.length > 0) return fromContent;
1742
+ if (isLoading || isGenerating || rawContent.length > 80) return getActiveToolCalls();
1743
+ return [];
1744
+ }, [rawContent, isLoading, isGenerating]);
1745
+ const errorContext = React.useMemo(() => detectErrorInMessage(content), [content]);
1746
+ const chatSnippet = React.useMemo(() => {
1514
1747
  if (!errorContext.hasError) return "";
1515
1748
  return buildChatSnippet(visibleMessages, content);
1516
1749
  }, [visibleMessages, content, errorContext.hasError]);
1517
- const actions = react.useMemo(() => {
1750
+ const actions = React.useMemo(() => {
1518
1751
  if (!errorContext.hasError || !onReportIssue || isGenerating) {
1519
1752
  return [];
1520
1753
  }
@@ -1570,9 +1803,19 @@ function createAssistantMessageAdapterWithErrorReporting(onReportIssue, Thinking
1570
1803
  const hasGenerativeUI = generativeUIOutput !== null;
1571
1804
  const showThinking = (isLoading || isGenerating && !content) && !hasGenerativeUI;
1572
1805
  if (showThinking) {
1573
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: ThinkingIndicator ? /* @__PURE__ */ jsxRuntime.jsx(ThinkingIndicator, { isLoading, isGenerating }) : /* @__PURE__ */ jsxRuntime.jsx(AssistantThinking, { message: "Thinking..." }) });
1806
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1807
+ toolCallNames.map((name) => /* @__PURE__ */ jsxRuntime.jsxs(ToolCallIndicator, { children: [
1808
+ /* @__PURE__ */ jsxRuntime.jsx(ToolCallIcon, { children: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z" }) }) }),
1809
+ /* @__PURE__ */ jsxRuntime.jsx(ToolCallName, { children: formatToolName2(name) })
1810
+ ] }, name)),
1811
+ ThinkingIndicator ? /* @__PURE__ */ jsxRuntime.jsx(ThinkingIndicator, { isLoading, isGenerating }) : /* @__PURE__ */ jsxRuntime.jsx(AssistantThinking, { message: "Thinking..." })
1812
+ ] });
1574
1813
  }
1575
1814
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1815
+ toolCallNames.map((name) => /* @__PURE__ */ jsxRuntime.jsxs(ToolCallIndicator, { children: [
1816
+ /* @__PURE__ */ jsxRuntime.jsx(ToolCallIcon, { children: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z" }) }) }),
1817
+ /* @__PURE__ */ jsxRuntime.jsx(ToolCallName, { children: formatToolName2(name) })
1818
+ ] }, name)),
1576
1819
  generativeUIOutput && /* @__PURE__ */ jsxRuntime.jsx(GenerativeUIContainer, { children: generativeUIOutput }),
1577
1820
  content && /* @__PURE__ */ jsxRuntime.jsx(
1578
1821
  AssistantMessage,
@@ -1589,9 +1832,9 @@ function createAssistantMessageAdapterWithErrorReporting(onReportIssue, Thinking
1589
1832
  ] });
1590
1833
  };
1591
1834
  ErrorReportingAssistantMessageAdapter.displayName = "ErrorReportingAssistantMessageAdapter";
1592
- return react.memo(ErrorReportingAssistantMessageAdapter);
1835
+ return React.memo(ErrorReportingAssistantMessageAdapter);
1593
1836
  }
1594
- var ChatInputContainer = styled8__default.default.div`
1837
+ var ChatInputContainer = styled9__default.default.div`
1595
1838
  display: flex;
1596
1839
  flex-direction: column;
1597
1840
  width: 100%;
@@ -1607,7 +1850,7 @@ var ChatInputContainer = styled8__default.default.div`
1607
1850
  padding: ${tokens.spacing.md};
1608
1851
  }
1609
1852
  `;
1610
- var SuggestionsWrapper = styled8__default.default.div`
1853
+ var SuggestionsWrapper = styled9__default.default.div`
1611
1854
  display: flex;
1612
1855
  flex-direction: row;
1613
1856
  flex-wrap: wrap;
@@ -1616,7 +1859,7 @@ var SuggestionsWrapper = styled8__default.default.div`
1616
1859
  width: 100%;
1617
1860
  box-sizing: border-box;
1618
1861
  `;
1619
- var SuggestionButton = styled8__default.default.button`
1862
+ var SuggestionButton = styled9__default.default.button`
1620
1863
  padding: ${tokens.spacing.sm} ${tokens.spacing.md};
1621
1864
  font-family: ${tokens.typography.fontFamily.primary};
1622
1865
  font-size: 13px;
@@ -1655,7 +1898,7 @@ var SuggestionButton = styled8__default.default.button`
1655
1898
  opacity: 0.4;
1656
1899
  }
1657
1900
  `;
1658
- var InputWrapper = styled8__default.default.div`
1901
+ var InputWrapper = styled9__default.default.div`
1659
1902
  display: flex;
1660
1903
  align-items: flex-end; /* Align button to bottom when textarea expands */
1661
1904
  gap: ${tokens.spacing.sm};
@@ -1673,7 +1916,7 @@ var InputWrapper = styled8__default.default.div`
1673
1916
  background-color: rgba(50, 50, 52, 0.6);
1674
1917
  }
1675
1918
  `;
1676
- var InputField = styled8__default.default.textarea`
1919
+ var InputField = styled9__default.default.textarea`
1677
1920
  flex: 1;
1678
1921
  border: none;
1679
1922
  outline: none;
@@ -1698,7 +1941,7 @@ var InputField = styled8__default.default.textarea`
1698
1941
  cursor: not-allowed;
1699
1942
  }
1700
1943
  `;
1701
- var SubmitButton = styled8__default.default.button`
1944
+ var SubmitButton = styled9__default.default.button`
1702
1945
  display: flex;
1703
1946
  align-items: center;
1704
1947
  justify-content: center;
@@ -1747,18 +1990,18 @@ var ChatInput = ({
1747
1990
  // Note: Additional AriaTextFieldProps are accepted but not spread to textarea
1748
1991
  // since useTextField is not compatible with textarea elements
1749
1992
  }) => {
1750
- const [internalValue, setInternalValue] = react.useState(value);
1751
- const inputRef = react.useRef(null);
1993
+ const [internalValue, setInternalValue] = React.useState(value);
1994
+ const inputRef = React.useRef(null);
1752
1995
  const currentValue = value !== void 0 ? value : internalValue;
1753
1996
  const setValue = onChange || setInternalValue;
1754
- const autoResize = react.useCallback(() => {
1997
+ const autoResize = React.useCallback(() => {
1755
1998
  const textarea = inputRef.current;
1756
1999
  if (textarea) {
1757
2000
  textarea.style.height = "auto";
1758
2001
  textarea.style.height = `${textarea.scrollHeight}px`;
1759
2002
  }
1760
2003
  }, []);
1761
- react.useEffect(() => {
2004
+ React.useEffect(() => {
1762
2005
  autoResize();
1763
2006
  }, [currentValue, autoResize]);
1764
2007
  const handleDirectChange = (e) => {
@@ -1827,7 +2070,7 @@ var SuggestionButtonComponent = ({
1827
2070
  onSelect,
1828
2071
  isDisabled = false
1829
2072
  }) => {
1830
- const ref = react.useRef(null);
2073
+ const ref = React.useRef(null);
1831
2074
  const { buttonProps } = button.useButton(
1832
2075
  {
1833
2076
  onPress: () => onSelect(suggestion.text),
@@ -1843,7 +2086,7 @@ var SubmitButtonComponent = ({
1843
2086
  isDisabled = false,
1844
2087
  ariaLabel = "Send message"
1845
2088
  }) => {
1846
- const ref = react.useRef(null);
2089
+ const ref = React.useRef(null);
1847
2090
  const { buttonProps } = button.useButton(
1848
2091
  {
1849
2092
  onPress,
@@ -1884,8 +2127,8 @@ var InputAdapter = ({
1884
2127
  onSend,
1885
2128
  isVisible: _isVisible = true
1886
2129
  }) => {
1887
- const [value, setValue] = react.useState("");
1888
- const [isSubmitting, setIsSubmitting] = react.useState(false);
2130
+ const [value, setValue] = React.useState("");
2131
+ const [isSubmitting, setIsSubmitting] = React.useState(false);
1889
2132
  const handleSubmit = async (message) => {
1890
2133
  if (!message.trim()) {
1891
2134
  console.log("[InputAdapter] handleSubmit: empty message, ignoring");
@@ -1934,7 +2177,7 @@ var InputAdapter = ({
1934
2177
  );
1935
2178
  };
1936
2179
  InputAdapter.displayName = "InputAdapter";
1937
- var StyledUserMessage = styled8__default.default.button`
2180
+ var StyledUserMessage = styled9__default.default.button`
1938
2181
  /* Base styles */
1939
2182
  display: inline-flex;
1940
2183
  align-items: center;
@@ -2004,7 +2247,7 @@ var StyledUserMessage = styled8__default.default.button`
2004
2247
  }
2005
2248
  }
2006
2249
 
2007
- ${({ $isPressed }) => $isPressed && styled8.css`
2250
+ ${({ $isPressed }) => $isPressed && styled9.css`
2008
2251
  transform: translateY(0) scale(0.98);
2009
2252
  box-shadow: ${tokens.shadows.sm};
2010
2253
 
@@ -2044,7 +2287,7 @@ function UserMessageBase({
2044
2287
  onPress,
2045
2288
  ...ariaProps
2046
2289
  }) {
2047
- const ref = react.useRef(null);
2290
+ const ref = React.useRef(null);
2048
2291
  if (!onPress) {
2049
2292
  return /* @__PURE__ */ jsxRuntime.jsx(StyledUserMessage, { as: "div", className, $isPressed: isPressed, role: "presentation", children });
2050
2293
  }
@@ -2068,9 +2311,9 @@ function UserMessageBase({
2068
2311
  }
2069
2312
  );
2070
2313
  }
2071
- var UserMessage = react.memo(UserMessageBase);
2314
+ var UserMessage = React.memo(UserMessageBase);
2072
2315
  UserMessage.displayName = "UserMessage";
2073
- var UserMessageWrapper = styled8__default.default.div`
2316
+ var UserMessageWrapper = styled9__default.default.div`
2074
2317
  display: flex;
2075
2318
  justify-content: flex-end;
2076
2319
  width: 100%;
@@ -2088,9 +2331,9 @@ var UserMessageAdapterBase = ({
2088
2331
  const content = message?.content || "";
2089
2332
  return /* @__PURE__ */ jsxRuntime.jsx(UserMessageWrapper, { children: /* @__PURE__ */ jsxRuntime.jsx(UserMessage, { children: content }) });
2090
2333
  };
2091
- var UserMessageAdapter = react.memo(UserMessageAdapterBase);
2334
+ var UserMessageAdapter = React.memo(UserMessageAdapterBase);
2092
2335
  UserMessageAdapter.displayName = "UserMessageAdapter";
2093
- var pulse3 = styled8.keyframes`
2336
+ var pulse3 = styled9.keyframes`
2094
2337
  0%, 100% {
2095
2338
  opacity: 1;
2096
2339
  transform: scale(1);
@@ -2100,7 +2343,7 @@ var pulse3 = styled8.keyframes`
2100
2343
  transform: scale(1.1);
2101
2344
  }
2102
2345
  `;
2103
- var Container4 = styled8__default.default.div`
2346
+ var Container4 = styled9__default.default.div`
2104
2347
  display: inline-flex;
2105
2348
  align-items: center;
2106
2349
  gap: ${(props) => {
@@ -2116,7 +2359,7 @@ var Container4 = styled8__default.default.div`
2116
2359
  }};
2117
2360
  font-family: ${tokens.typography.fontFamily.primary};
2118
2361
  `;
2119
- var StatusDot = styled8__default.default.div`
2362
+ var StatusDot = styled9__default.default.div`
2120
2363
  width: ${(props) => {
2121
2364
  if (props.variant === "badge") {
2122
2365
  switch (props.size) {
@@ -2177,7 +2420,7 @@ var StatusDot = styled8__default.default.div`
2177
2420
  animation: ${(props) => props.status === "streaming" ? pulse3 : "none"} 2s ease-in-out infinite;
2178
2421
  flex-shrink: 0;
2179
2422
  `;
2180
- var Label = styled8__default.default.span`
2423
+ var Label = styled9__default.default.span`
2181
2424
  font-size: ${(props) => {
2182
2425
  if (props.variant === "badge") {
2183
2426
  switch (props.size) {
@@ -2204,7 +2447,7 @@ var Label = styled8__default.default.span`
2204
2447
  color: ${tokens.colors.text.secondary};
2205
2448
  line-height: ${tokens.typography.lineHeight.tight};
2206
2449
  `;
2207
- var BadgeContainer = styled8__default.default.div`
2450
+ var BadgeContainer = styled9__default.default.div`
2208
2451
  display: inline-flex;
2209
2452
  align-items: center;
2210
2453
  gap: ${(props) => {
@@ -2281,7 +2524,7 @@ var StreamStatusIndicator = ({
2281
2524
  return /* @__PURE__ */ jsxRuntime.jsx(Container4, { size, className, role: "status", "aria-label": getStatusLabel(status), children: content });
2282
2525
  };
2283
2526
  StreamStatusIndicator.displayName = "StreamStatusIndicator";
2284
- var HeaderContainer = styled8__default.default.header`
2527
+ var HeaderContainer = styled9__default.default.header`
2285
2528
  display: flex;
2286
2529
  align-items: center;
2287
2530
  justify-content: space-between;
@@ -2297,14 +2540,14 @@ var HeaderContainer = styled8__default.default.header`
2297
2540
  padding: ${tokens.spacing.sm} ${tokens.spacing.md};
2298
2541
  }
2299
2542
  `;
2300
- var HeaderContent = styled8__default.default.div`
2543
+ var HeaderContent = styled9__default.default.div`
2301
2544
  display: flex;
2302
2545
  flex-direction: column;
2303
2546
  gap: ${tokens.spacing.xs};
2304
2547
  flex: 1;
2305
2548
  min-width: 0;
2306
2549
  `;
2307
- var HeaderTitle = styled8__default.default.h1`
2550
+ var HeaderTitle = styled9__default.default.h1`
2308
2551
  margin: 0;
2309
2552
  font-size: ${tokens.typography.fontSize.base};
2310
2553
  font-weight: ${tokens.typography.fontWeight.semibold};
@@ -2315,7 +2558,7 @@ var HeaderTitle = styled8__default.default.h1`
2315
2558
  text-overflow: ellipsis;
2316
2559
  white-space: nowrap;
2317
2560
  `;
2318
- var HeaderSubtitle = styled8__default.default.p`
2561
+ var HeaderSubtitle = styled9__default.default.p`
2319
2562
  margin: 0;
2320
2563
  font-size: ${tokens.typography.fontSize.sm};
2321
2564
  color: ${tokens.colors.text.secondary};
@@ -2325,13 +2568,13 @@ var HeaderSubtitle = styled8__default.default.p`
2325
2568
  text-overflow: ellipsis;
2326
2569
  white-space: nowrap;
2327
2570
  `;
2328
- var HeaderActions = styled8__default.default.div`
2571
+ var HeaderActions = styled9__default.default.div`
2329
2572
  display: flex;
2330
2573
  align-items: center;
2331
2574
  gap: ${tokens.spacing.xs};
2332
2575
  margin-left: ${tokens.spacing.md};
2333
2576
  `;
2334
- var ActionButton2 = styled8__default.default.button`
2577
+ var ActionButton2 = styled9__default.default.button`
2335
2578
  display: inline-flex;
2336
2579
  align-items: center;
2337
2580
  justify-content: center;
@@ -2378,8 +2621,8 @@ var Header = ({
2378
2621
  onMinimize,
2379
2622
  className
2380
2623
  }) => {
2381
- const minimizeRef = react.useRef(null);
2382
- const closeRef = react.useRef(null);
2624
+ const minimizeRef = React.useRef(null);
2625
+ const closeRef = React.useRef(null);
2383
2626
  const { buttonProps: minimizeProps } = button.useButton(
2384
2627
  {
2385
2628
  onPress: onMinimize,
@@ -2448,7 +2691,7 @@ var Header = ({
2448
2691
  ] });
2449
2692
  };
2450
2693
  Header.displayName = "Header";
2451
- var MessagesContainer = styled8__default.default.div`
2694
+ var MessagesContainer = styled9__default.default.div`
2452
2695
  display: flex;
2453
2696
  flex-direction: column;
2454
2697
  flex: 1;
@@ -2477,7 +2720,7 @@ var Messages = ({
2477
2720
  return /* @__PURE__ */ jsxRuntime.jsx(MessagesContainer, { className, role: "region", "aria-label": ariaLabel, children });
2478
2721
  };
2479
2722
  Messages.displayName = "Messages";
2480
- var WindowContainer = styled8__default.default.div`
2723
+ var WindowContainer = styled9__default.default.div`
2481
2724
  display: flex;
2482
2725
  flex-direction: column;
2483
2726
  /* Glassmorphism effect */
@@ -2496,7 +2739,7 @@ var WindowContainer = styled8__default.default.div`
2496
2739
  height: ${({ $height }) => $height};
2497
2740
 
2498
2741
  /* Fullscreen state */
2499
- ${({ $isFullscreen }) => $isFullscreen && styled8.css`
2742
+ ${({ $isFullscreen }) => $isFullscreen && styled9.css`
2500
2743
  width: 100vw;
2501
2744
  height: 100vh;
2502
2745
  border-radius: 0;
@@ -2508,7 +2751,7 @@ var WindowContainer = styled8__default.default.div`
2508
2751
  `}
2509
2752
 
2510
2753
  /* Minimized state */
2511
- ${({ $isMinimized }) => $isMinimized && styled8.css`
2754
+ ${({ $isMinimized }) => $isMinimized && styled9.css`
2512
2755
  height: 60px;
2513
2756
  width: 300px;
2514
2757
  box-shadow: ${tokens.shadows.sm};
@@ -2527,7 +2770,7 @@ var WindowContainer = styled8__default.default.div`
2527
2770
 
2528
2771
  /* Responsive behavior for smaller screens */
2529
2772
  @media (max-width: ${tokens.breakpoints.tablet}px) {
2530
- ${({ $isFullscreen, $isMinimized }) => !$isFullscreen && !$isMinimized && styled8.css`
2773
+ ${({ $isFullscreen, $isMinimized }) => !$isFullscreen && !$isMinimized && styled9.css`
2531
2774
  width: 100vw;
2532
2775
  height: 100vh;
2533
2776
  border-radius: 0;
@@ -2570,7 +2813,7 @@ var Window = ({
2570
2813
  );
2571
2814
  };
2572
2815
  Window.displayName = "Window";
2573
- var GlobalSidebarStyles = styled8.createGlobalStyle`
2816
+ var GlobalSidebarStyles = styled9.createGlobalStyle`
2574
2817
  /* Override CopilotKit's default positioning - start off-screen */
2575
2818
  .copilotKitSidebar {
2576
2819
  position: fixed !important;
@@ -2678,7 +2921,7 @@ var GlobalSidebarStyles = styled8.createGlobalStyle`
2678
2921
  }
2679
2922
  }
2680
2923
  `;
2681
- var StyledChatButton = styled8__default.default.button`
2924
+ var StyledChatButton = styled9__default.default.button`
2682
2925
  position: fixed;
2683
2926
  bottom: 8px;
2684
2927
  right: 8px;
@@ -2808,7 +3051,7 @@ var CustomCopilotSidebar = ({
2808
3051
  ] });
2809
3052
  };
2810
3053
  CustomCopilotSidebar.displayName = "CustomCopilotSidebar";
2811
- var GlobalSidebarStyles2 = styled8.createGlobalStyle`
3054
+ var GlobalSidebarStyles2 = styled9.createGlobalStyle`
2812
3055
  /* Override CopilotKit's content wrapper to respect safe areas in landscape */
2813
3056
  @media (orientation: landscape) {
2814
3057
  .copilotKitSidebarContentWrapper {
@@ -3088,7 +3331,7 @@ var GlobalSidebarStyles2 = styled8.createGlobalStyle`
3088
3331
  box-shadow: none !important;
3089
3332
  }
3090
3333
  `;
3091
- var StyledChatButton2 = styled8__default.default.button`
3334
+ var StyledChatButton2 = styled9__default.default.button`
3092
3335
  position: fixed;
3093
3336
  bottom: calc(${tokens.spacing.sm} + var(--safe-area-bottom, 0px));
3094
3337
  right: calc(${tokens.spacing.sm} + var(--safe-area-right, 0px));
@@ -3192,15 +3435,15 @@ function CustomCopilotSidebar2({
3192
3435
  ToolCallsComponent,
3193
3436
  onReportIssue
3194
3437
  }) {
3195
- const HeaderAdapterWithClose = react.useMemo(
3438
+ const HeaderAdapterWithClose = React.useMemo(
3196
3439
  () => createHeaderAdapter(onSetOpen),
3197
3440
  [onSetOpen]
3198
3441
  );
3199
- const CustomButton = react.useMemo(
3442
+ const CustomButton = React.useMemo(
3200
3443
  () => createButtonAdapter(disabled, disabledReason, onSetOpen),
3201
3444
  [disabled, disabledReason, onSetOpen]
3202
3445
  );
3203
- const AssistantMessageAdapterMemo = react.useMemo(
3446
+ const AssistantMessageAdapterMemo = React.useMemo(
3204
3447
  () => onReportIssue ? createAssistantMessageAdapterWithErrorReporting(onReportIssue, ThinkingIndicator) : ThinkingIndicator || ToolCallsComponent ? createAssistantMessageAdapter(ThinkingIndicator) : AssistantMessageAdapter,
3205
3448
  [ThinkingIndicator, ToolCallsComponent, onReportIssue]
3206
3449
  );
@@ -3234,7 +3477,7 @@ function CustomCopilotSidebar2({
3234
3477
  ] });
3235
3478
  }
3236
3479
  CustomCopilotSidebar2.displayName = "CustomCopilotSidebar";
3237
- var FooterContainer = styled8__default.default.footer`
3480
+ var FooterContainer = styled9__default.default.footer`
3238
3481
  display: flex;
3239
3482
  align-items: center;
3240
3483
  justify-content: center;
@@ -3243,7 +3486,7 @@ var FooterContainer = styled8__default.default.footer`
3243
3486
  border-top: 1px solid ${tokens.colors.border.default};
3244
3487
  min-height: 44px;
3245
3488
  `;
3246
- var FooterContent = styled8__default.default.div`
3489
+ var FooterContent = styled9__default.default.div`
3247
3490
  display: flex;
3248
3491
  align-items: center;
3249
3492
  justify-content: space-between;
@@ -3256,13 +3499,13 @@ var FooterContent = styled8__default.default.div`
3256
3499
  font-family: ${tokens.typography.fontFamily.primary};
3257
3500
  line-height: ${tokens.typography.lineHeight.tight};
3258
3501
  `;
3259
- var FooterBranding = styled8__default.default.div`
3502
+ var FooterBranding = styled9__default.default.div`
3260
3503
  display: flex;
3261
3504
  align-items: center;
3262
3505
  gap: ${tokens.spacing.xs};
3263
3506
  flex-shrink: 0;
3264
3507
  `;
3265
- var FooterStatus = styled8__default.default.div`
3508
+ var FooterStatus = styled9__default.default.div`
3266
3509
  display: flex;
3267
3510
  align-items: center;
3268
3511
  gap: ${tokens.spacing.xs};
@@ -3272,7 +3515,7 @@ var FooterStatus = styled8__default.default.div`
3272
3515
  font-size: ${tokens.typography.fontSize.xs};
3273
3516
  opacity: 0.8;
3274
3517
  `;
3275
- var FooterLink = styled8__default.default.a`
3518
+ var FooterLink = styled9__default.default.a`
3276
3519
  color: ${tokens.colors.primary};
3277
3520
  text-decoration: none;
3278
3521
  transition: opacity ${tokens.transitions.fast};
@@ -3320,13 +3563,13 @@ var Footer = ({
3320
3563
  ] }) });
3321
3564
  };
3322
3565
  Footer.displayName = "Footer";
3323
- var InputContainer = styled8__default.default.div`
3566
+ var InputContainer = styled9__default.default.div`
3324
3567
  display: flex;
3325
3568
  flex-direction: column;
3326
3569
  width: 100%;
3327
3570
  position: relative;
3328
3571
  `;
3329
- var InputWrapper2 = styled8__default.default.div`
3572
+ var InputWrapper2 = styled9__default.default.div`
3330
3573
  display: flex;
3331
3574
  align-items: flex-end;
3332
3575
  gap: ${tokens.spacing.sm};
@@ -3346,7 +3589,7 @@ var InputWrapper2 = styled8__default.default.div`
3346
3589
  border-color: ${tokens.colors.border.subtle};
3347
3590
  }
3348
3591
  `;
3349
- var TextArea = styled8__default.default.textarea`
3592
+ var TextArea = styled9__default.default.textarea`
3350
3593
  flex: 1;
3351
3594
  min-height: ${tokens.spacing.lg};
3352
3595
  max-height: ${(props) => `${(props.$maxRows || 5) * 24}px`};
@@ -3392,7 +3635,7 @@ var TextArea = styled8__default.default.textarea`
3392
3635
  background: ${tokens.colors.scrollbar.thumbHover};
3393
3636
  }
3394
3637
  `;
3395
- var SendButton = styled8__default.default.button`
3638
+ var SendButton = styled9__default.default.button`
3396
3639
  display: flex;
3397
3640
  align-items: center;
3398
3641
  justify-content: center;
@@ -3439,7 +3682,7 @@ var Input = ({
3439
3682
  "aria-label": ariaLabel = "Message input",
3440
3683
  ...ariaProps
3441
3684
  }) => {
3442
- const textareaRef = react.useRef(null);
3685
+ const textareaRef = React.useRef(null);
3443
3686
  const { inputProps } = textfield.useTextField(
3444
3687
  {
3445
3688
  ...ariaProps,
@@ -3522,7 +3765,7 @@ var Input = ({
3522
3765
  )
3523
3766
  ] }) });
3524
3767
  };
3525
- var MessagesListContainer = styled8__default.default.div`
3768
+ var MessagesListContainer = styled9__default.default.div`
3526
3769
  display: flex;
3527
3770
  flex-direction: column;
3528
3771
  width: 100%;
@@ -3562,7 +3805,7 @@ var MessagesListContainer = styled8__default.default.div`
3562
3805
  /* Ensure proper rendering on mobile */
3563
3806
  -webkit-overflow-scrolling: touch;
3564
3807
  `;
3565
- var MessagesListContent = styled8__default.default.div`
3808
+ var MessagesListContent = styled9__default.default.div`
3566
3809
  display: flex;
3567
3810
  flex-direction: column;
3568
3811
  gap: ${tokens.spacing.sm};
@@ -3625,11 +3868,11 @@ var MessagesList = ({
3625
3868
  onScrollTop,
3626
3869
  maxHeight = "600px"
3627
3870
  }) => {
3628
- const containerRef = react.useRef(null);
3629
- const contentRef = react.useRef(null);
3630
- const isUserScrollingRef = react.useRef(false);
3631
- const scrollTimeoutRef = react.useRef(null);
3632
- react.useEffect(() => {
3871
+ const containerRef = React.useRef(null);
3872
+ const contentRef = React.useRef(null);
3873
+ const isUserScrollingRef = React.useRef(false);
3874
+ const scrollTimeoutRef = React.useRef(null);
3875
+ React.useEffect(() => {
3633
3876
  if (autoScroll && !isUserScrollingRef.current && containerRef.current) {
3634
3877
  const container = containerRef.current;
3635
3878
  container.scrollTop = container.scrollHeight;
@@ -3650,7 +3893,7 @@ var MessagesList = ({
3650
3893
  onScrollTop();
3651
3894
  }
3652
3895
  };
3653
- react.useEffect(() => {
3896
+ React.useEffect(() => {
3654
3897
  return () => {
3655
3898
  if (scrollTimeoutRef.current) {
3656
3899
  clearTimeout(scrollTimeoutRef.current);
@@ -3678,7 +3921,7 @@ var MessagesList = ({
3678
3921
  }
3679
3922
  );
3680
3923
  };
3681
- var StyledUserMessage2 = styled8__default.default.div`
3924
+ var StyledUserMessage2 = styled9__default.default.div`
3682
3925
  display: flex;
3683
3926
  justify-content: flex-end;
3684
3927
  align-items: flex-start;
@@ -3686,7 +3929,7 @@ var StyledUserMessage2 = styled8__default.default.div`
3686
3929
  padding: 0;
3687
3930
  width: 100%;
3688
3931
  `;
3689
- var MessageBubble = styled8__default.default.div`
3932
+ var MessageBubble = styled9__default.default.div`
3690
3933
  display: flex;
3691
3934
  flex-direction: column;
3692
3935
  max-width: 85%;
@@ -3713,7 +3956,7 @@ var MessageBubble = styled8__default.default.div`
3713
3956
  opacity: 0.9;
3714
3957
  }
3715
3958
  `;
3716
- var MessageContent2 = styled8__default.default.p`
3959
+ var MessageContent2 = styled9__default.default.p`
3717
3960
  margin: 0;
3718
3961
  font-size: ${tokens.typography.fontSize.sm};
3719
3962
  line-height: ${tokens.typography.lineHeight.normal};
@@ -3722,13 +3965,13 @@ var MessageContent2 = styled8__default.default.p`
3722
3965
  word-break: break-word;
3723
3966
  white-space: pre-wrap;
3724
3967
  `;
3725
- var MessageTime2 = styled8__default.default.time`
3968
+ var MessageTime2 = styled9__default.default.time`
3726
3969
  font-size: ${tokens.typography.fontSize.xs};
3727
3970
  opacity: 0.7;
3728
3971
  margin-top: ${tokens.spacing.xs};
3729
3972
  text-align: right;
3730
3973
  `;
3731
- var ActionButton3 = styled8__default.default.button`
3974
+ var ActionButton3 = styled9__default.default.button`
3732
3975
  display: inline-flex;
3733
3976
  align-items: center;
3734
3977
  gap: ${tokens.spacing.xs};
@@ -3752,12 +3995,12 @@ var ActionButton3 = styled8__default.default.button`
3752
3995
  transform: scale(0.98);
3753
3996
  }
3754
3997
  `;
3755
- var ActionsContainer3 = styled8__default.default.div`
3998
+ var ActionsContainer3 = styled9__default.default.div`
3756
3999
  display: flex;
3757
4000
  gap: ${tokens.spacing.xs};
3758
4001
  flex-wrap: wrap;
3759
4002
  `;
3760
- var Avatar3 = styled8__default.default.img`
4003
+ var Avatar3 = styled9__default.default.img`
3761
4004
  width: ${tokens.spacing.xl};
3762
4005
  height: ${tokens.spacing.xl};
3763
4006
  border-radius: ${tokens.borderRadius.full};
@@ -3796,7 +4039,7 @@ var UserMessage2 = ({
3796
4039
  avatarUrl && /* @__PURE__ */ jsxRuntime.jsx(Avatar3, { src: avatarUrl, alt: username || "User" })
3797
4040
  ] });
3798
4041
  };
3799
- var ErrorContainer = styled8__default.default.div`
4042
+ var ErrorContainer = styled9__default.default.div`
3800
4043
  display: flex;
3801
4044
  align-items: flex-start;
3802
4045
  gap: ${tokens.spacing.sm};
@@ -3810,7 +4053,7 @@ var ErrorContainer = styled8__default.default.div`
3810
4053
  width: ${(props) => props.variant === "banner" ? "100%" : "auto"};
3811
4054
  max-width: ${(props) => props.variant === "banner" ? "100%" : "600px"};
3812
4055
  `;
3813
- var IconContainer = styled8__default.default.div`
4056
+ var IconContainer = styled9__default.default.div`
3814
4057
  flex-shrink: 0;
3815
4058
  width: 20px;
3816
4059
  height: 20px;
@@ -3827,29 +4070,29 @@ var ErrorIcon = () => /* @__PURE__ */ jsxRuntime.jsx(
3827
4070
  children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z" })
3828
4071
  }
3829
4072
  );
3830
- var Content2 = styled8__default.default.div`
4073
+ var Content2 = styled9__default.default.div`
3831
4074
  flex: 1;
3832
4075
  display: flex;
3833
4076
  flex-direction: column;
3834
4077
  gap: ${tokens.spacing.sm};
3835
4078
  `;
3836
- var ErrorMessage = styled8__default.default.div`
4079
+ var ErrorMessage = styled9__default.default.div`
3837
4080
  font-size: ${tokens.typography.fontSize.sm};
3838
4081
  line-height: ${tokens.typography.lineHeight.normal};
3839
4082
  color: ${tokens.colors.text.primary};
3840
4083
  `;
3841
- var ErrorDetails = styled8__default.default.div`
4084
+ var ErrorDetails = styled9__default.default.div`
3842
4085
  font-size: ${tokens.typography.fontSize.xs};
3843
4086
  line-height: 1.4;
3844
4087
  color: ${tokens.colors.text.secondary};
3845
4088
  margin-top: ${tokens.spacing.xs};
3846
4089
  `;
3847
- var Actions2 = styled8__default.default.div`
4090
+ var Actions2 = styled9__default.default.div`
3848
4091
  display: flex;
3849
4092
  gap: ${tokens.spacing.sm};
3850
4093
  margin-top: ${tokens.spacing.sm};
3851
4094
  `;
3852
- var Button2 = styled8__default.default.button`
4095
+ var Button2 = styled9__default.default.button`
3853
4096
  display: inline-flex;
3854
4097
  align-items: center;
3855
4098
  gap: ${tokens.spacing.xs};
@@ -3878,7 +4121,7 @@ var Button2 = styled8__default.default.button`
3878
4121
  cursor: not-allowed;
3879
4122
  }
3880
4123
  `;
3881
- var CloseButton = styled8__default.default.button`
4124
+ var CloseButton = styled9__default.default.button`
3882
4125
  flex-shrink: 0;
3883
4126
  width: 24px;
3884
4127
  height: 24px;
@@ -3937,7 +4180,7 @@ var StreamErrorMessage = ({
3937
4180
  ] });
3938
4181
  };
3939
4182
  StreamErrorMessage.displayName = "StreamErrorMessage";
3940
- var SuggestionsContainer = styled8__default.default.div`
4183
+ var SuggestionsContainer = styled9__default.default.div`
3941
4184
  display: flex;
3942
4185
  flex-wrap: nowrap; /* Single row */
3943
4186
  gap: ${tokens.spacing.sm};
@@ -3970,7 +4213,7 @@ var SuggestionsContainer = styled8__default.default.div`
3970
4213
  display: none; /* Chrome/Safari/Opera */
3971
4214
  }
3972
4215
  `;
3973
- var StyledSuggestion = styled8__default.default.button`
4216
+ var StyledSuggestion = styled9__default.default.button`
3974
4217
  /* Base styles */
3975
4218
  display: inline-flex;
3976
4219
  align-items: center;
@@ -4003,7 +4246,7 @@ var StyledSuggestion = styled8__default.default.button`
4003
4246
  box-shadow: none;
4004
4247
  }
4005
4248
 
4006
- ${({ $isPressed }) => $isPressed && styled8.css`
4249
+ ${({ $isPressed }) => $isPressed && styled9.css`
4007
4250
  transform: scale(0.98);
4008
4251
  `}
4009
4252
 
@@ -4032,7 +4275,7 @@ function Suggestions({ suggestions, onSelect, className }) {
4032
4275
  return /* @__PURE__ */ jsxRuntime.jsx(SuggestionsContainer, { className, role: "list", "aria-label": "Suggested prompts", children: suggestions.map((suggestion) => /* @__PURE__ */ jsxRuntime.jsx(SuggestionChip, { suggestion, onSelect }, suggestion)) });
4033
4276
  }
4034
4277
  function SuggestionChip({ suggestion, onSelect }) {
4035
- const ref = react.useRef(null);
4278
+ const ref = React.useRef(null);
4036
4279
  const { buttonProps, isPressed } = button.useButton(
4037
4280
  {
4038
4281
  onPress: () => onSelect(suggestion),
@@ -4069,5 +4312,7 @@ exports.Suggestions = Suggestions;
4069
4312
  exports.UserMessage = UserMessage2;
4070
4313
  exports.UserMessageAdapter = UserMessageAdapter;
4071
4314
  exports.Window = Window;
4315
+ exports.clearToolCalls = clearToolCalls;
4316
+ exports.registerToolCall = registerToolCall;
4072
4317
  //# sourceMappingURL=index.cjs.map
4073
4318
  //# sourceMappingURL=index.cjs.map