@copilotkit/react-ui 1.7.2-next.0 → 1.7.2-next.2

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 (67) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/{chunk-AZU4QOV5.mjs → chunk-AELKLZSG.mjs} +5 -5
  3. package/dist/{chunk-3PJA5MFR.mjs → chunk-DLG7BZTA.mjs} +2 -2
  4. package/dist/chunk-EJG6RRSX.mjs +138 -0
  5. package/dist/chunk-EJG6RRSX.mjs.map +1 -0
  6. package/dist/chunk-MCO235PS.mjs +164 -0
  7. package/dist/chunk-MCO235PS.mjs.map +1 -0
  8. package/dist/chunk-MWC5OV7Z.mjs +1 -0
  9. package/dist/chunk-N7LTE54T.mjs +1 -0
  10. package/dist/chunk-N7LTE54T.mjs.map +1 -0
  11. package/dist/{chunk-2C3ANQCY.mjs → chunk-QXQDIFOC.mjs} +9 -9
  12. package/dist/{chunk-ADTTDBLB.mjs → chunk-R2O33F44.mjs} +2 -2
  13. package/dist/chunk-UCVCAGU7.mjs +1 -0
  14. package/dist/chunk-UCVCAGU7.mjs.map +1 -0
  15. package/dist/{chunk-22K5DDPF.mjs → chunk-ZIF5JJCH.mjs} +8 -8
  16. package/dist/components/chat/Chat.mjs +7 -7
  17. package/dist/components/chat/Modal.mjs +8 -8
  18. package/dist/components/chat/Popup.mjs +9 -9
  19. package/dist/components/chat/Sidebar.mjs +9 -9
  20. package/dist/components/chat/index.mjs +12 -12
  21. package/dist/components/crew/DefaultResponseRenderer.d.ts +110 -0
  22. package/dist/components/crew/DefaultResponseRenderer.js +175 -0
  23. package/dist/components/crew/DefaultResponseRenderer.js.map +1 -0
  24. package/dist/components/crew/DefaultResponseRenderer.mjs +10 -0
  25. package/dist/components/crew/DefaultResponseRenderer.mjs.map +1 -0
  26. package/dist/components/crew/DefaultStateRenderer.d.ts +88 -0
  27. package/dist/components/crew/DefaultStateRenderer.js +198 -0
  28. package/dist/components/crew/DefaultStateRenderer.js.map +1 -0
  29. package/dist/components/crew/DefaultStateRenderer.mjs +8 -0
  30. package/dist/components/crew/DefaultStateRenderer.mjs.map +1 -0
  31. package/dist/components/crew/index.d.ts +4 -0
  32. package/dist/components/crew/index.js +335 -0
  33. package/dist/components/crew/index.js.map +1 -0
  34. package/dist/components/crew/index.mjs +16 -0
  35. package/dist/components/crew/index.mjs.map +1 -0
  36. package/dist/components/crew/types.d.ts +340 -0
  37. package/dist/components/crew/types.js +19 -0
  38. package/dist/components/crew/types.js.map +1 -0
  39. package/dist/components/crew/types.mjs +2 -0
  40. package/dist/components/crew/types.mjs.map +1 -0
  41. package/dist/components/dev-console/console.mjs +3 -3
  42. package/dist/components/dev-console/index.mjs +4 -4
  43. package/dist/components/index.d.ts +3 -0
  44. package/dist/components/index.js +290 -0
  45. package/dist/components/index.js.map +1 -1
  46. package/dist/components/index.mjs +26 -14
  47. package/dist/index.css +227 -0
  48. package/dist/index.css.map +1 -1
  49. package/dist/index.d.ts +3 -0
  50. package/dist/index.js +292 -2
  51. package/dist/index.js.map +1 -1
  52. package/dist/index.mjs +26 -14
  53. package/package.json +4 -4
  54. package/src/components/crew/DefaultResponseRenderer.tsx +298 -0
  55. package/src/components/crew/DefaultStateRenderer.tsx +326 -0
  56. package/src/components/crew/index.ts +3 -0
  57. package/src/components/crew/types.ts +398 -0
  58. package/src/components/index.ts +1 -0
  59. package/src/css/crew.css +277 -0
  60. package/src/styles.css +1 -0
  61. package/dist/chunk-MMVDU6DF.mjs +0 -1
  62. /package/dist/{chunk-AZU4QOV5.mjs.map → chunk-AELKLZSG.mjs.map} +0 -0
  63. /package/dist/{chunk-3PJA5MFR.mjs.map → chunk-DLG7BZTA.mjs.map} +0 -0
  64. /package/dist/{chunk-MMVDU6DF.mjs.map → chunk-MWC5OV7Z.mjs.map} +0 -0
  65. /package/dist/{chunk-2C3ANQCY.mjs.map → chunk-QXQDIFOC.mjs.map} +0 -0
  66. /package/dist/{chunk-ADTTDBLB.mjs.map → chunk-R2O33F44.mjs.map} +0 -0
  67. /package/dist/{chunk-22K5DDPF.mjs.map → chunk-ZIF5JJCH.mjs.map} +0 -0
@@ -84,8 +84,11 @@ __export(components_exports, {
84
84
  CopilotDevConsole: () => CopilotDevConsole,
85
85
  CopilotPopup: () => CopilotPopup,
86
86
  CopilotSidebar: () => CopilotSidebar,
87
+ DefaultResponseRenderer: () => DefaultResponseRenderer,
88
+ DefaultStateRenderer: () => DefaultStateRenderer,
87
89
  Markdown: () => Markdown,
88
90
  UserMessage: () => UserMessage,
91
+ createResponseCache: () => createResponseCache,
89
92
  shouldShowDevConsole: () => shouldShowDevConsole,
90
93
  useChatContext: () => useChatContext
91
94
  });
@@ -2793,6 +2796,290 @@ function CopilotSidebar(props) {
2793
2796
  };
2794
2797
  return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: `copilotKitSidebarContentWrapper ${expandedClassName}`, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(CopilotModal, __spreadProps(__spreadValues(__spreadValues({}, props), { onSetOpen }), { children: props.children })) });
2795
2798
  }
2799
+
2800
+ // src/components/crew/DefaultResponseRenderer.tsx
2801
+ var import_react15 = require("react");
2802
+ var import_jsx_runtime27 = require("react/jsx-runtime");
2803
+ var createResponseCache = () => {
2804
+ const responseCache = /* @__PURE__ */ new Map();
2805
+ return {
2806
+ getResponse: (id) => responseCache.get(id),
2807
+ setResponse: (id, response) => responseCache.set(id, response)
2808
+ };
2809
+ };
2810
+ var useResponseCache = createResponseCache();
2811
+ var DefaultExpandIcon = ({ className }) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2812
+ "svg",
2813
+ {
2814
+ className,
2815
+ width: "12",
2816
+ height: "12",
2817
+ viewBox: "0 0 24 24",
2818
+ fill: "none",
2819
+ stroke: "currentColor",
2820
+ strokeWidth: "2",
2821
+ strokeLinecap: "round",
2822
+ strokeLinejoin: "round",
2823
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("polyline", { points: "6 9 12 15 18 9" })
2824
+ }
2825
+ );
2826
+ var DefaultCollapseIcon = ({ className }) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2827
+ "svg",
2828
+ {
2829
+ className,
2830
+ width: "12",
2831
+ height: "12",
2832
+ viewBox: "0 0 24 24",
2833
+ fill: "none",
2834
+ stroke: "currentColor",
2835
+ strokeWidth: "2",
2836
+ strokeLinecap: "round",
2837
+ strokeLinejoin: "round",
2838
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("polyline", { points: "18 15 12 9 6 15" })
2839
+ }
2840
+ );
2841
+ var DefaultContentRenderer = ({ content, className }) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className, children: content });
2842
+ var DefaultFeedbackButton = ({ label, onClick, className }) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("button", { onClick, className, children: label });
2843
+ var DefaultCompletedFeedback = ({ message, className }) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { children: message }) });
2844
+ var DefaultResponseRenderer = ({
2845
+ response,
2846
+ status,
2847
+ onRespond,
2848
+ icons,
2849
+ labels,
2850
+ ContentRenderer = DefaultContentRenderer,
2851
+ FeedbackButton = DefaultFeedbackButton,
2852
+ CompletedFeedback = DefaultCompletedFeedback,
2853
+ className = "copilotkit-response",
2854
+ contentClassName = "copilotkit-response-content",
2855
+ actionsClassName = "copilotkit-response-actions",
2856
+ buttonClassName = "copilotkit-response-button",
2857
+ completedFeedbackClassName = "copilotkit-response-completed-feedback"
2858
+ }) => {
2859
+ const [isExpanded, setIsExpanded] = (0, import_react15.useState)(true);
2860
+ const defaultLabels = {
2861
+ responseLabel: "Response",
2862
+ approveLabel: "Approve",
2863
+ rejectLabel: "Reject",
2864
+ approvedMessage: "Approved",
2865
+ rejectedMessage: "Rejected",
2866
+ feedbackSubmittedMessage: "Feedback submitted"
2867
+ };
2868
+ const mergedLabels = __spreadValues(__spreadValues({}, defaultLabels), labels);
2869
+ const renderFeedback = () => {
2870
+ if (status === "complete") {
2871
+ const cachedResponse = useResponseCache.getResponse(response.id);
2872
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2873
+ CompletedFeedback,
2874
+ {
2875
+ message: (cachedResponse == null ? void 0 : cachedResponse.__feedback__) ? cachedResponse.__feedback__ === mergedLabels.approvedMessage ? mergedLabels.approvedMessage : mergedLabels.rejectedMessage : mergedLabels.feedbackSubmittedMessage,
2876
+ className: completedFeedbackClassName
2877
+ }
2878
+ );
2879
+ }
2880
+ if (status === "inProgress" || status === "executing") {
2881
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
2882
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2883
+ FeedbackButton,
2884
+ {
2885
+ label: mergedLabels.approveLabel,
2886
+ onClick: () => {
2887
+ setIsExpanded(false);
2888
+ onRespond == null ? void 0 : onRespond(mergedLabels.approveLabel);
2889
+ useResponseCache.setResponse(response.id, __spreadProps(__spreadValues({}, response), {
2890
+ __feedback__: mergedLabels.approvedMessage
2891
+ }));
2892
+ },
2893
+ className: buttonClassName
2894
+ }
2895
+ ),
2896
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2897
+ FeedbackButton,
2898
+ {
2899
+ label: mergedLabels.rejectLabel,
2900
+ onClick: () => {
2901
+ setIsExpanded(false);
2902
+ useResponseCache.setResponse(response.id, __spreadProps(__spreadValues({}, response), {
2903
+ __feedback__: mergedLabels.rejectedMessage
2904
+ }));
2905
+ onRespond == null ? void 0 : onRespond(mergedLabels.rejectLabel);
2906
+ },
2907
+ className: buttonClassName
2908
+ }
2909
+ )
2910
+ ] });
2911
+ }
2912
+ return null;
2913
+ };
2914
+ const ExpandIcon = (icons == null ? void 0 : icons.expand) || DefaultExpandIcon;
2915
+ const CollapseIcon = (icons == null ? void 0 : icons.collapse) || DefaultCollapseIcon;
2916
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className, children: [
2917
+ isExpanded && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(ContentRenderer, { content: response.content, className: contentClassName }),
2918
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: actionsClassName, children: [
2919
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "copilotkit-response-label", children: [
2920
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("button", { onClick: () => setIsExpanded(!isExpanded), className: "copilotkit-toggle-button", children: isExpanded ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(CollapseIcon, { className: "copilotkit-icon" }) : /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(ExpandIcon, { className: "copilotkit-icon" }) }),
2921
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { children: mergedLabels.responseLabel })
2922
+ ] }),
2923
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "copilotkit-response-buttons", children: renderFeedback() })
2924
+ ] })
2925
+ ] });
2926
+ };
2927
+
2928
+ // src/components/crew/DefaultStateRenderer.tsx
2929
+ var import_react16 = require("react");
2930
+ var import_jsx_runtime28 = require("react/jsx-runtime");
2931
+ var DefaultExpandIcon2 = ({ className }) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2932
+ "svg",
2933
+ {
2934
+ className,
2935
+ width: "16",
2936
+ height: "16",
2937
+ viewBox: "0 0 24 24",
2938
+ fill: "none",
2939
+ stroke: "currentColor",
2940
+ strokeWidth: "2",
2941
+ strokeLinecap: "round",
2942
+ strokeLinejoin: "round",
2943
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("polyline", { points: "6 9 12 15 18 9" })
2944
+ }
2945
+ );
2946
+ var DefaultCollapseIcon2 = ({ className }) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2947
+ "svg",
2948
+ {
2949
+ className,
2950
+ width: "16",
2951
+ height: "16",
2952
+ viewBox: "0 0 24 24",
2953
+ fill: "none",
2954
+ stroke: "currentColor",
2955
+ strokeWidth: "2",
2956
+ strokeLinecap: "round",
2957
+ strokeLinejoin: "round",
2958
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("polyline", { points: "18 15 12 9 6 15" })
2959
+ }
2960
+ );
2961
+ var DefaultLoaderIcon = ({ className }) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2962
+ "svg",
2963
+ {
2964
+ className: `${className} copilotkit-spinner`,
2965
+ width: "16",
2966
+ height: "16",
2967
+ viewBox: "0 0 24 24",
2968
+ fill: "none",
2969
+ stroke: "currentColor",
2970
+ strokeWidth: "2",
2971
+ strokeLinecap: "round",
2972
+ strokeLinejoin: "round",
2973
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("path", { d: "M21 12a9 9 0 1 1-6.219-8.56" })
2974
+ }
2975
+ );
2976
+ var formatContent = (result) => {
2977
+ if (result === null || result === void 0)
2978
+ return "";
2979
+ return typeof result === "string" ? result : JSON.stringify(result, null, 2);
2980
+ };
2981
+ var DefaultSkeletonLoader = ({ className }) => /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: className || "copilotkit-skeleton", children: [
2982
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "copilotkit-skeleton-header", children: [
2983
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "copilotkit-skeleton-title" }),
2984
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "copilotkit-skeleton-subtitle" })
2985
+ ] }),
2986
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "copilotkit-skeleton-content" })
2987
+ ] });
2988
+ var DefaultStateItemRenderer = ({
2989
+ item,
2990
+ isNewest,
2991
+ className
2992
+ }) => /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
2993
+ "div",
2994
+ {
2995
+ className: `${className || "copilotkit-state-item"} ${isNewest ? "copilotkit-state-item-newest" : ""}`,
2996
+ children: [
2997
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "copilotkit-state-item-header", children: "tool" in item ? item.tool : item.name }),
2998
+ "thought" in item && item.thought && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "copilotkit-state-item-thought", children: item.thought }),
2999
+ "result" in item && item.result !== void 0 && item.result !== null && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "copilotkit-state-item-result", children: formatContent(item.result) }),
3000
+ "description" in item && item.description && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "copilotkit-state-item-description", children: item.description })
3001
+ ]
3002
+ }
3003
+ );
3004
+ var DefaultStateRenderer = ({
3005
+ state,
3006
+ status,
3007
+ StateItemRenderer = DefaultStateItemRenderer,
3008
+ SkeletonLoader = DefaultSkeletonLoader,
3009
+ labels,
3010
+ icons,
3011
+ className = "copilotkit-state",
3012
+ contentClassName = "copilotkit-state-content",
3013
+ itemClassName = "copilotkit-state-item",
3014
+ maxHeight = "250px",
3015
+ defaultCollapsed = true
3016
+ }) => {
3017
+ const [isCollapsed, setIsCollapsed] = (0, import_react16.useState)(defaultCollapsed);
3018
+ const contentRef = (0, import_react16.useRef)(null);
3019
+ const prevItemsLengthRef = (0, import_react16.useRef)(0);
3020
+ const [newestItemId, setNewestItemId] = (0, import_react16.useState)(null);
3021
+ const defaultLabels = {
3022
+ inProgressLabel: "Analyzing",
3023
+ completeLabel: "Analyzed",
3024
+ emptyLabel: "No activity"
3025
+ };
3026
+ const mergedLabels = __spreadValues(__spreadValues({}, defaultLabels), labels);
3027
+ const ExpandIcon = (icons == null ? void 0 : icons.expand) || DefaultExpandIcon2;
3028
+ const CollapseIcon = (icons == null ? void 0 : icons.collapse) || DefaultCollapseIcon2;
3029
+ const items = (0, import_react16.useMemo)(() => {
3030
+ var _a;
3031
+ return state ? [...((_a = state.steps) == null ? void 0 : _a.filter((s) => s.tool)) || [], ...state.tasks || []].sort(
3032
+ (a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime()
3033
+ ) : [];
3034
+ }, [state]);
3035
+ const isThinking = status === "inProgress" && items.length === 0;
3036
+ (0, import_react16.useEffect)(() => {
3037
+ if (!state)
3038
+ return;
3039
+ if (items.length > prevItemsLengthRef.current) {
3040
+ if (items.length > 0) {
3041
+ const newest = items[items.length - 1];
3042
+ setNewestItemId(newest.id);
3043
+ setTimeout(() => {
3044
+ setNewestItemId(null);
3045
+ }, 1500);
3046
+ }
3047
+ if (contentRef.current && !isCollapsed) {
3048
+ contentRef.current.scrollTop = contentRef.current.scrollHeight;
3049
+ }
3050
+ }
3051
+ prevItemsLengthRef.current = items.length;
3052
+ }, [items, isCollapsed, state]);
3053
+ if (!state) {
3054
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(DefaultLoaderIcon, { className: "copilotkit-loader" }) });
3055
+ }
3056
+ if (isCollapsed && items.length === 0 && !isThinking)
3057
+ return null;
3058
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className, children: [
3059
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "copilotkit-state-header", onClick: () => setIsCollapsed(!isCollapsed), children: [
3060
+ isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(ExpandIcon, { className: "copilotkit-icon" }) : /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(CollapseIcon, { className: "copilotkit-icon" }),
3061
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "copilotkit-state-label", children: status === "inProgress" ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "copilotkit-state-label-loading", children: mergedLabels.inProgressLabel }) : mergedLabels.completeLabel })
3062
+ ] }),
3063
+ !isCollapsed && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { ref: contentRef, className: contentClassName, style: { maxHeight }, children: items.length > 0 ? items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
3064
+ StateItemRenderer,
3065
+ {
3066
+ item,
3067
+ isNewest: item.id === newestItemId,
3068
+ className: itemClassName
3069
+ },
3070
+ item.id
3071
+ )) : isThinking ? (
3072
+ // Show skeleton loader while thinking
3073
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_jsx_runtime28.Fragment, { children: [
3074
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(SkeletonLoader, {}),
3075
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(SkeletonLoader, {})
3076
+ ] })
3077
+ ) : (
3078
+ // Empty state
3079
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "copilotkit-state-empty", children: mergedLabels.emptyLabel })
3080
+ ) })
3081
+ ] });
3082
+ };
2796
3083
  // Annotate the CommonJS export names for ESM import in node:
2797
3084
  0 && (module.exports = {
2798
3085
  AssistantMessage,
@@ -2800,8 +3087,11 @@ function CopilotSidebar(props) {
2800
3087
  CopilotDevConsole,
2801
3088
  CopilotPopup,
2802
3089
  CopilotSidebar,
3090
+ DefaultResponseRenderer,
3091
+ DefaultStateRenderer,
2803
3092
  Markdown,
2804
3093
  UserMessage,
3094
+ createResponseCache,
2805
3095
  shouldShowDevConsole,
2806
3096
  useChatContext
2807
3097
  });