@copilotkit/react-ui 0.14.0-alpha.5 → 0.14.1-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/.turbo/turbo-build.log +80 -80
  2. package/CHANGELOG.md +31 -0
  3. package/dist/chunk-2KAF7NKC.mjs +484 -0
  4. package/dist/chunk-2KAF7NKC.mjs.map +1 -0
  5. package/dist/chunk-5KEDV5VC.mjs +27 -0
  6. package/dist/chunk-5KEDV5VC.mjs.map +1 -0
  7. package/dist/chunk-6LAZQHEB.mjs +129 -0
  8. package/dist/chunk-6LAZQHEB.mjs.map +1 -0
  9. package/dist/chunk-7NSRDJ5C.mjs +3 -0
  10. package/dist/chunk-7NSRDJ5C.mjs.map +1 -0
  11. package/dist/chunk-C34L4AWW.mjs +39 -0
  12. package/dist/chunk-C34L4AWW.mjs.map +1 -0
  13. package/dist/chunk-CF3BK4OX.mjs +53 -0
  14. package/dist/chunk-CF3BK4OX.mjs.map +1 -0
  15. package/dist/chunk-CNQX2VY3.mjs +66 -0
  16. package/dist/chunk-CNQX2VY3.mjs.map +1 -0
  17. package/dist/chunk-GCOPYGHH.mjs +27 -0
  18. package/dist/chunk-GCOPYGHH.mjs.map +1 -0
  19. package/dist/chunk-H4VKQGVU.mjs +3 -0
  20. package/dist/chunk-H4VKQGVU.mjs.map +1 -0
  21. package/dist/chunk-IJLMKBSZ.mjs +25 -0
  22. package/dist/chunk-IJLMKBSZ.mjs.map +1 -0
  23. package/dist/chunk-INCNMGJ7.mjs +72 -0
  24. package/dist/chunk-INCNMGJ7.mjs.map +1 -0
  25. package/dist/chunk-IU3WTXLQ.mjs +3 -0
  26. package/dist/chunk-IU3WTXLQ.mjs.map +1 -0
  27. package/dist/chunk-M3CZWJI3.mjs +44 -0
  28. package/dist/chunk-M3CZWJI3.mjs.map +1 -0
  29. package/dist/chunk-MC6KTH4X.mjs +12 -0
  30. package/dist/chunk-MC6KTH4X.mjs.map +1 -0
  31. package/dist/chunk-MRXNTQOX.mjs +55 -0
  32. package/dist/chunk-MRXNTQOX.mjs.map +1 -0
  33. package/dist/chunk-OHWEJUCS.mjs +18 -0
  34. package/dist/chunk-OHWEJUCS.mjs.map +1 -0
  35. package/dist/chunk-OOBQC5H6.mjs +34 -0
  36. package/dist/chunk-OOBQC5H6.mjs.map +1 -0
  37. package/dist/chunk-POVINPXX.mjs +26 -0
  38. package/dist/chunk-POVINPXX.mjs.map +1 -0
  39. package/dist/chunk-Q6YO7LDK.mjs +40 -0
  40. package/dist/chunk-Q6YO7LDK.mjs.map +1 -0
  41. package/dist/chunk-RPTRCFSO.mjs +42 -0
  42. package/dist/chunk-RPTRCFSO.mjs.map +1 -0
  43. package/dist/chunk-SEH5PQVW.mjs +52 -0
  44. package/dist/chunk-SEH5PQVW.mjs.map +1 -0
  45. package/dist/chunk-SHOTWRKC.mjs +18 -0
  46. package/dist/chunk-SHOTWRKC.mjs.map +1 -0
  47. package/dist/chunk-SRBUGQTM.mjs +109 -0
  48. package/dist/chunk-SRBUGQTM.mjs.map +1 -0
  49. package/dist/chunk-TEYIQHMK.mjs +12 -0
  50. package/dist/chunk-TEYIQHMK.mjs.map +1 -0
  51. package/dist/chunk-U6NJWGTV.mjs +3 -0
  52. package/dist/chunk-U6NJWGTV.mjs.map +1 -0
  53. package/dist/chunk-VGX2W5ZB.mjs +28 -0
  54. package/dist/chunk-VGX2W5ZB.mjs.map +1 -0
  55. package/dist/chunk-XGUBRIUV.mjs +72 -0
  56. package/dist/chunk-XGUBRIUV.mjs.map +1 -0
  57. package/dist/chunk-ZYC5YVDO.mjs +21 -0
  58. package/dist/chunk-ZYC5YVDO.mjs.map +1 -0
  59. package/dist/components/chat-components/chat-list.mjs +12 -440
  60. package/dist/components/chat-components/chat-list.mjs.map +1 -1
  61. package/dist/components/chat-components/chat-message-actions.mjs +7 -168
  62. package/dist/components/chat-components/chat-message-actions.mjs.map +1 -1
  63. package/dist/components/chat-components/chat-message.mjs +10 -403
  64. package/dist/components/chat-components/chat-message.mjs.map +1 -1
  65. package/dist/components/chat-components/chat-panel.mjs +9 -301
  66. package/dist/components/chat-components/chat-panel.mjs.map +1 -1
  67. package/dist/components/chat-components/chat-scroll-anchor.mjs +4 -44
  68. package/dist/components/chat-components/chat-scroll-anchor.mjs.map +1 -1
  69. package/dist/components/chat-components/clear-history.mjs +25 -249
  70. package/dist/components/chat-components/clear-history.mjs.map +1 -1
  71. package/dist/components/chat-components/copilot-chat.mjs +21 -809
  72. package/dist/components/chat-components/copilot-chat.mjs.map +1 -1
  73. package/dist/components/chat-components/default-empty-screen.mjs +7 -175
  74. package/dist/components/chat-components/default-empty-screen.mjs.map +1 -1
  75. package/dist/components/chat-components/external-link.mjs +3 -25
  76. package/dist/components/chat-components/external-link.mjs.map +1 -1
  77. package/dist/components/chat-components/markdown.mjs +3 -10
  78. package/dist/components/chat-components/markdown.mjs.map +1 -1
  79. package/dist/components/chat-components/prompt-form.mjs +8 -227
  80. package/dist/components/chat-components/prompt-form.mjs.map +1 -1
  81. package/dist/components/chat-components/theme-toggle.mjs +14 -130
  82. package/dist/components/chat-components/theme-toggle.mjs.map +1 -1
  83. package/dist/components/chat-components/toaster.mjs +3 -7
  84. package/dist/components/chat-components/toaster.mjs.map +1 -1
  85. package/dist/components/chat-components/ui/alert-dialog.mjs +5 -199
  86. package/dist/components/chat-components/ui/alert-dialog.mjs.map +1 -1
  87. package/dist/components/chat-components/ui/badge.mjs +7 -49
  88. package/dist/components/chat-components/ui/badge.mjs.map +1 -1
  89. package/dist/components/chat-components/ui/button.mjs +4 -85
  90. package/dist/components/chat-components/ui/button.mjs.map +1 -1
  91. package/dist/components/chat-components/ui/codeblock.mjs +7 -283
  92. package/dist/components/chat-components/ui/codeblock.mjs.map +1 -1
  93. package/dist/components/chat-components/ui/dialog.mjs +25 -93
  94. package/dist/components/chat-components/ui/dialog.mjs.map +1 -1
  95. package/dist/components/chat-components/ui/dropdown-menu.mjs +8 -61
  96. package/dist/components/chat-components/ui/dropdown-menu.mjs.map +1 -1
  97. package/dist/components/chat-components/ui/icons.mjs +4 -554
  98. package/dist/components/chat-components/ui/icons.mjs.map +1 -1
  99. package/dist/components/chat-components/ui/input.mjs +7 -48
  100. package/dist/components/chat-components/ui/input.mjs.map +1 -1
  101. package/dist/components/chat-components/ui/label.mjs +9 -51
  102. package/dist/components/chat-components/ui/label.mjs.map +1 -1
  103. package/dist/components/chat-components/ui/select.mjs +23 -106
  104. package/dist/components/chat-components/ui/select.mjs.map +1 -1
  105. package/dist/components/chat-components/ui/separator.mjs +4 -68
  106. package/dist/components/chat-components/ui/separator.mjs.map +1 -1
  107. package/dist/components/chat-components/ui/sheet.mjs +23 -92
  108. package/dist/components/chat-components/ui/sheet.mjs.map +1 -1
  109. package/dist/components/chat-components/ui/switch.mjs +8 -53
  110. package/dist/components/chat-components/ui/switch.mjs.map +1 -1
  111. package/dist/components/chat-components/ui/textarea.mjs +7 -48
  112. package/dist/components/chat-components/ui/textarea.mjs.map +1 -1
  113. package/dist/components/chat-components/ui/tooltip.mjs +4 -72
  114. package/dist/components/chat-components/ui/tooltip.mjs.map +1 -1
  115. package/dist/components/index.mjs +25 -925
  116. package/dist/components/index.mjs.map +1 -1
  117. package/dist/components/sidebar/copilot-sidebar-ui-provider.mjs +24 -920
  118. package/dist/components/sidebar/copilot-sidebar-ui-provider.mjs.map +1 -1
  119. package/dist/components/sidebar/copilot-sidebar.mjs +22 -842
  120. package/dist/components/sidebar/copilot-sidebar.mjs.map +1 -1
  121. package/dist/components/sidebar/sidebar-context.mjs +3 -10
  122. package/dist/components/sidebar/sidebar-context.mjs.map +1 -1
  123. package/dist/context/index.mjs +2 -0
  124. package/dist/context/index.mjs.map +1 -1
  125. package/dist/hooks/index.mjs +2 -0
  126. package/dist/hooks/index.mjs.map +1 -1
  127. package/dist/hooks/use-at-bottom.mjs +3 -19
  128. package/dist/hooks/use-at-bottom.mjs.map +1 -1
  129. package/dist/hooks/use-copy-to-clipboard.mjs +3 -26
  130. package/dist/hooks/use-copy-to-clipboard.mjs.map +1 -1
  131. package/dist/hooks/use-enter-submit.mjs +3 -16
  132. package/dist/hooks/use-enter-submit.mjs.map +1 -1
  133. package/dist/index.mjs +28 -925
  134. package/dist/index.mjs.map +1 -1
  135. package/dist/lib/utils.mjs +3 -62
  136. package/dist/lib/utils.mjs.map +1 -1
  137. package/dist/lib/utils.test.mjs +1 -0
  138. package/dist/lib/utils.test.mjs.map +1 -1
  139. package/dist/types/index.mjs +2 -0
  140. package/dist/types/index.mjs.map +1 -1
  141. package/dist/types/types.mjs +2 -0
  142. package/dist/types/types.mjs.map +1 -1
  143. package/package.json +4 -4
@@ -0,0 +1,18 @@
1
+ import { useRef } from 'react';
2
+
3
+ // src/hooks/use-enter-submit.tsx
4
+ function useEnterSubmit() {
5
+ const formRef = useRef(null);
6
+ const handleKeyDown = (event) => {
7
+ var _a;
8
+ if (event.key === "Enter" && !event.shiftKey && !event.nativeEvent.isComposing) {
9
+ (_a = formRef.current) == null ? void 0 : _a.requestSubmit();
10
+ event.preventDefault();
11
+ }
12
+ };
13
+ return { formRef, onKeyDown: handleKeyDown };
14
+ }
15
+
16
+ export { useEnterSubmit };
17
+ //# sourceMappingURL=out.js.map
18
+ //# sourceMappingURL=chunk-OHWEJUCS.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/use-enter-submit.tsx"],"names":[],"mappings":";AAAA,SAAS,cAA8B;AAEhC,SAAS,iBAGd;AACA,QAAM,UAAU,OAAwB,IAAI;AAE5C,QAAM,gBAAgB,CAAC,UAA0D;AARnF;AASI,QAAI,MAAM,QAAQ,WAAW,CAAC,MAAM,YAAY,CAAC,MAAM,YAAY,aAAa;AAC9E,oBAAQ,YAAR,mBAAiB;AACjB,YAAM,eAAe;AAAA,IACvB;AAAA,EACF;AAEA,SAAO,EAAE,SAAS,WAAW,cAAc;AAC7C","sourcesContent":["import { useRef, type RefObject } from \"react\";\n\nexport function useEnterSubmit(): {\n formRef: RefObject<HTMLFormElement>;\n onKeyDown: (event: React.KeyboardEvent<HTMLTextAreaElement>) => void;\n} {\n const formRef = useRef<HTMLFormElement>(null);\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLTextAreaElement>): void => {\n if (event.key === \"Enter\" && !event.shiftKey && !event.nativeEvent.isComposing) {\n formRef.current?.requestSubmit();\n event.preventDefault();\n }\n };\n\n return { formRef, onKeyDown: handleKeyDown };\n}\n"]}
@@ -0,0 +1,34 @@
1
+ import { Button } from './chunk-M3CZWJI3.mjs';
2
+ import { IconCheck, IconCopy } from './chunk-2KAF7NKC.mjs';
3
+ import { cn } from './chunk-Q6YO7LDK.mjs';
4
+ import { useCopyToClipboard } from './chunk-POVINPXX.mjs';
5
+ import { __objRest, __spreadProps, __spreadValues } from './chunk-MRXNTQOX.mjs';
6
+ import { jsx, jsxs } from 'react/jsx-runtime';
7
+
8
+ function ChatMessageActions(_a) {
9
+ var _b = _a, { message, className } = _b, props = __objRest(_b, ["message", "className"]);
10
+ const { isCopied, copyToClipboard } = useCopyToClipboard({ timeout: 2e3 });
11
+ const onCopy = () => {
12
+ if (isCopied)
13
+ return;
14
+ copyToClipboard(message.content);
15
+ };
16
+ return /* @__PURE__ */ jsx(
17
+ "div",
18
+ __spreadProps(__spreadValues({
19
+ className: cn(
20
+ "flex items-center justify-end transition-opacity group-hover:opacity-100 md:absolute md:-right-10 md:-top-2 md:opacity-0",
21
+ className
22
+ )
23
+ }, props), {
24
+ children: /* @__PURE__ */ jsxs(Button, { variant: "ghost", size: "icon", onClick: onCopy, children: [
25
+ isCopied ? /* @__PURE__ */ jsx(IconCheck, {}) : /* @__PURE__ */ jsx(IconCopy, {}),
26
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Copy message" })
27
+ ] })
28
+ })
29
+ );
30
+ }
31
+
32
+ export { ChatMessageActions };
33
+ //# sourceMappingURL=out.js.map
34
+ //# sourceMappingURL=chunk-OOBQC5H6.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat-components/chat-message-actions.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AA6BM,SACc,KADd;AAhBC,SAAS,mBAAmB,IAA2D;AAA3D,eAAE,WAAS,UAb9C,IAamC,IAAyB,kBAAzB,IAAyB,CAAvB,WAAS;AAC5C,QAAM,EAAE,UAAU,gBAAgB,IAAI,mBAAmB,EAAE,SAAS,IAAK,CAAC;AAE1E,QAAM,SAAS,MAAM;AACnB,QAAI;AAAU;AACd,oBAAgB,QAAQ,OAAO;AAAA,EACjC;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI,QALL;AAAA,MAOC,+BAAC,UAAO,SAAQ,SAAQ,MAAK,QAAO,SAAS,QAC1C;AAAA,mBAAW,oBAAC,aAAU,IAAK,oBAAC,YAAS;AAAA,QACtC,oBAAC,UAAK,WAAU,WAAU,0BAAY;AAAA,SACxC;AAAA;AAAA,EACF;AAEJ","sourcesContent":["\"use client\";\n\nimport { type Message } from \"@copilotkit/react-core\";\n\nimport { Button } from \"./ui/button\";\nimport { IconCheck, IconCopy } from \"./ui/icons\";\nimport { useCopyToClipboard } from \"../../hooks/use-copy-to-clipboard\";\nimport { cn } from \"../../lib/utils\";\n\ninterface ChatMessageActionsProps extends React.ComponentProps<\"div\"> {\n message: Message;\n}\n\nexport function ChatMessageActions({ message, className, ...props }: ChatMessageActionsProps) {\n const { isCopied, copyToClipboard } = useCopyToClipboard({ timeout: 2000 });\n\n const onCopy = () => {\n if (isCopied) return;\n copyToClipboard(message.content);\n };\n\n return (\n <div\n className={cn(\n \"flex items-center justify-end transition-opacity group-hover:opacity-100 md:absolute md:-right-10 md:-top-2 md:opacity-0\",\n className,\n )}\n {...props}\n >\n <Button variant=\"ghost\" size=\"icon\" onClick={onCopy}>\n {isCopied ? <IconCheck /> : <IconCopy />}\n <span className=\"sr-only\">Copy message</span>\n </Button>\n </div>\n );\n}\n"]}
@@ -0,0 +1,26 @@
1
+ import * as React from 'react';
2
+
3
+ // src/hooks/use-copy-to-clipboard.tsx
4
+ function useCopyToClipboard({ timeout = 2e3 }) {
5
+ const [isCopied, setIsCopied] = React.useState(false);
6
+ const copyToClipboard = (value) => {
7
+ var _a;
8
+ if (typeof window === "undefined" || !((_a = navigator.clipboard) == null ? void 0 : _a.writeText)) {
9
+ return;
10
+ }
11
+ if (!value) {
12
+ return;
13
+ }
14
+ navigator.clipboard.writeText(value).then(() => {
15
+ setIsCopied(true);
16
+ setTimeout(() => {
17
+ setIsCopied(false);
18
+ }, timeout);
19
+ });
20
+ };
21
+ return { isCopied, copyToClipboard };
22
+ }
23
+
24
+ export { useCopyToClipboard };
25
+ //# sourceMappingURL=out.js.map
26
+ //# sourceMappingURL=chunk-POVINPXX.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/use-copy-to-clipboard.tsx"],"names":[],"mappings":";AAEA,YAAY,WAAW;AAMhB,SAAS,mBAAmB,EAAE,UAAU,IAAK,GAA4B;AAC9E,QAAM,CAAC,UAAU,WAAW,IAAU,eAAkB,KAAK;AAE7D,QAAM,kBAAkB,CAAC,UAAkB;AAX7C;AAYI,QAAI,OAAO,WAAW,eAAe,GAAC,eAAU,cAAV,mBAAqB,YAAW;AACpE;AAAA,IACF;AAEA,QAAI,CAAC,OAAO;AACV;AAAA,IACF;AAEA,cAAU,UAAU,UAAU,KAAK,EAAE,KAAK,MAAM;AAC9C,kBAAY,IAAI;AAEhB,iBAAW,MAAM;AACf,oBAAY,KAAK;AAAA,MACnB,GAAG,OAAO;AAAA,IACZ,CAAC;AAAA,EACH;AAEA,SAAO,EAAE,UAAU,gBAAgB;AACrC","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\n\nexport interface useCopyToClipboardProps {\n timeout?: number;\n}\n\nexport function useCopyToClipboard({ timeout = 2000 }: useCopyToClipboardProps) {\n const [isCopied, setIsCopied] = React.useState<Boolean>(false);\n\n const copyToClipboard = (value: string) => {\n if (typeof window === \"undefined\" || !navigator.clipboard?.writeText) {\n return;\n }\n\n if (!value) {\n return;\n }\n\n navigator.clipboard.writeText(value).then(() => {\n setIsCopied(true);\n\n setTimeout(() => {\n setIsCopied(false);\n }, timeout);\n });\n };\n\n return { isCopied, copyToClipboard };\n}\n"]}
@@ -0,0 +1,40 @@
1
+ import { __async } from './chunk-MRXNTQOX.mjs';
2
+ import { clsx } from 'clsx';
3
+ import { customAlphabet } from 'nanoid';
4
+ import { twMerge } from 'tailwind-merge';
5
+
6
+ function cn(...inputs) {
7
+ return twMerge(clsx(inputs));
8
+ }
9
+ var nanoid = customAlphabet(
10
+ "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
11
+ 7
12
+ );
13
+ function fetcher(input, init) {
14
+ return __async(this, null, function* () {
15
+ const res = yield fetch(input, init);
16
+ if (!res.ok) {
17
+ const json = yield res.json();
18
+ if (json.error) {
19
+ const error = new Error(json.error);
20
+ error.status = res.status;
21
+ throw error;
22
+ } else {
23
+ throw new Error("An unexpected error occurred");
24
+ }
25
+ }
26
+ return res.json();
27
+ });
28
+ }
29
+ function formatDate(input) {
30
+ const date = new Date(input);
31
+ return date.toLocaleDateString("en-US", {
32
+ month: "long",
33
+ day: "numeric",
34
+ year: "numeric"
35
+ });
36
+ }
37
+
38
+ export { cn, fetcher, formatDate, nanoid };
39
+ //# sourceMappingURL=out.js.map
40
+ //# sourceMappingURL=chunk-Q6YO7LDK.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/utils.ts"],"names":[],"mappings":";;;;;AAAA,SAAS,YAA6B;AACtC,SAAS,sBAAsB;AAC/B,SAAS,eAAe;AAEjB,SAAS,MAAM,QAAsB;AAC1C,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B;AAEO,IAAM,SAAS;AAAA,EACpB;AAAA,EACA;AACF;AAEA,SAAsB,QAAoB,OAAoB,MAAmC;AAAA;AAC/F,UAAM,MAAM,MAAM,MAAM,OAAO,IAAI;AAEnC,QAAI,CAAC,IAAI,IAAI;AACX,YAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,UAAI,KAAK,OAAO;AACd,cAAM,QAAQ,IAAI,MAAM,KAAK,KAAK;AAGlC,cAAM,SAAS,IAAI;AACnB,cAAM;AAAA,MACR,OAAO;AACL,cAAM,IAAI,MAAM,8BAA8B;AAAA,MAChD;AAAA,IACF;AAEA,WAAO,IAAI,KAAK;AAAA,EAClB;AAAA;AAEO,SAAS,WAAW,OAAuC;AAChE,QAAM,OAAO,IAAI,KAAK,KAAK;AAC3B,SAAO,KAAK,mBAAmB,SAAS;AAAA,IACtC,OAAO;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,EACR,CAAC;AACH","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { customAlphabet } from \"nanoid\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport const nanoid = customAlphabet(\n \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\",\n 7,\n); // 7-character random string\n\nexport async function fetcher<JSON = any>(input: RequestInfo, init?: RequestInit): Promise<JSON> {\n const res = await fetch(input, init);\n\n if (!res.ok) {\n const json = await res.json();\n if (json.error) {\n const error = new Error(json.error) as Error & {\n status: number;\n };\n error.status = res.status;\n throw error;\n } else {\n throw new Error(\"An unexpected error occurred\");\n }\n }\n\n return res.json();\n}\n\nexport function formatDate(input: string | number | Date): string {\n const date = new Date(input);\n return date.toLocaleDateString(\"en-US\", {\n month: \"long\",\n day: \"numeric\",\n year: \"numeric\",\n });\n}\n"]}
@@ -0,0 +1,42 @@
1
+ import { DefaultEmptyScreen } from './chunk-SEH5PQVW.mjs';
2
+ import { ChatList } from './chunk-SHOTWRKC.mjs';
3
+ import { ChatPanel } from './chunk-CF3BK4OX.mjs';
4
+ import { ChatScrollAnchor } from './chunk-IJLMKBSZ.mjs';
5
+ import { useCopilotChat } from '@copilotkit/react-core';
6
+ import { jsxs, jsx } from 'react/jsx-runtime';
7
+
8
+ function CopilotChat({
9
+ id,
10
+ initialMessages,
11
+ makeSystemMessage,
12
+ EmptyScreen = DefaultEmptyScreen
13
+ }) {
14
+ const { visibleMessages, append, reload, stop, isLoading, input, setInput } = useCopilotChat({
15
+ id,
16
+ initialMessages,
17
+ makeSystemMessage
18
+ });
19
+ return /* @__PURE__ */ jsxs("div", { className: "w-full h-full flex flex-col overflow-hidden box-border items-start", children: [
20
+ /* @__PURE__ */ jsx("div", { className: "pt-5 px-5 overflow-y-auto overflow-x-hidden w-full flex-grow", children: visibleMessages.length ? /* @__PURE__ */ jsxs("div", { className: "pl-0 pr-6", children: [
21
+ /* @__PURE__ */ jsx(ChatList, { messages: visibleMessages }),
22
+ /* @__PURE__ */ jsx(ChatScrollAnchor, { trackVisibility: isLoading })
23
+ ] }) : /* @__PURE__ */ jsx(EmptyScreen, { setInput }) }),
24
+ /* @__PURE__ */ jsx("div", { className: "flex-shrink-0 w-full", children: /* @__PURE__ */ jsx(
25
+ ChatPanel,
26
+ {
27
+ id,
28
+ isLoading,
29
+ stop,
30
+ append,
31
+ reload,
32
+ messages: visibleMessages,
33
+ input,
34
+ setInput
35
+ }
36
+ ) })
37
+ ] });
38
+ }
39
+
40
+ export { CopilotChat };
41
+ //# sourceMappingURL=out.js.map
42
+ //# sourceMappingURL=chunk-RPTRCFSO.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat-components/copilot-chat.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;AASA,SAAS,sBAAsB;AAwBrB,SACE,KADF;AAhBH,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAChB,GAAqB;AACnB,QAAM,EAAE,iBAAiB,QAAQ,QAAQ,MAAM,WAAW,OAAO,SAAS,IAAI,eAAe;AAAA,IAC3F;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SACE,qBAAC,SAAI,WAAU,sEACb;AAAA,wBAAC,SAAI,WAAU,gEACZ,0BAAgB,SACf,qBAAC,SAAI,WAAU,aACb;AAAA,0BAAC,YAAS,UAAU,iBAAiB;AAAA,MACrC,oBAAC,oBAAiB,iBAAiB,WAAW;AAAA,OAChD,IAEA,oBAAC,eAAY,UAAoB,GAErC;AAAA,IAEA,oBAAC,SAAI,WAAU,wBACb;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU;AAAA,QACV;AAAA,QACA;AAAA;AAAA,IACF,GACF;AAAA,KACF;AAEJ","sourcesContent":["\"use client\";\n\nimport React from \"react\";\n\nimport { ChatList } from \"./chat-list\";\nimport { ChatPanel } from \"./chat-panel\";\nimport { DefaultEmptyScreen, EmptyScreenProps } from \"./default-empty-screen\";\nimport { ChatScrollAnchor } from \"./chat-scroll-anchor\";\nimport { UseCopilotChatOptions } from \"@copilotkit/react-core\";\nimport { useCopilotChat } from \"@copilotkit/react-core\";\n\ninterface ChatComponentInjectionsProps {\n EmptyScreen?: React.FC<EmptyScreenProps>;\n}\n\ninterface CopilotChatProps extends UseCopilotChatOptions, ChatComponentInjectionsProps {}\n\nexport function CopilotChat({\n id,\n initialMessages,\n makeSystemMessage,\n EmptyScreen = DefaultEmptyScreen,\n}: CopilotChatProps) {\n const { visibleMessages, append, reload, stop, isLoading, input, setInput } = useCopilotChat({\n id,\n initialMessages,\n makeSystemMessage,\n });\n\n return (\n <div className=\"w-full h-full flex flex-col overflow-hidden box-border items-start\">\n <div className=\"pt-5 px-5 overflow-y-auto overflow-x-hidden w-full flex-grow\">\n {visibleMessages.length ? (\n <div className=\"pl-0 pr-6\">\n <ChatList messages={visibleMessages} />\n <ChatScrollAnchor trackVisibility={isLoading} />\n </div>\n ) : (\n <EmptyScreen setInput={setInput} />\n )}\n </div>\n\n <div className=\"flex-shrink-0 w-full\">\n <ChatPanel\n id={id}\n isLoading={isLoading}\n stop={stop}\n append={append}\n reload={reload}\n messages={visibleMessages}\n input={input}\n setInput={setInput}\n />\n </div>\n </div>\n );\n}\n"]}
@@ -0,0 +1,52 @@
1
+ import { ExternalLink } from './chunk-5KEDV5VC.mjs';
2
+ import { Button } from './chunk-M3CZWJI3.mjs';
3
+ import { IconArrowRight } from './chunk-2KAF7NKC.mjs';
4
+ import { jsx, jsxs } from 'react/jsx-runtime';
5
+
6
+ var exampleMessages = [
7
+ {
8
+ heading: "Explain technical concepts",
9
+ message: `What is a "serverless function"?`
10
+ },
11
+ {
12
+ heading: "Summarize an article",
13
+ message: "Summarize the following article for a 2nd grader: \n"
14
+ },
15
+ {
16
+ heading: "Draft an email",
17
+ message: `Draft an email to my boss about the following:
18
+ `
19
+ }
20
+ ];
21
+ var DefaultEmptyScreen = (props) => {
22
+ return /* @__PURE__ */ jsx("div", { className: "mx-auto max-w-2xl px-4", children: /* @__PURE__ */ jsxs("div", { className: "rounded-lg border bg-background p-8", children: [
23
+ /* @__PURE__ */ jsx("h1", { className: "mb-2 text-lg font-semibold", children: "Welcome to CopilotKit! \u{1F44B}" }),
24
+ /* @__PURE__ */ jsxs("p", { className: "mb-2 leading-normal text-muted-foreground", children: [
25
+ "This is a Copilot built with",
26
+ " ",
27
+ /* @__PURE__ */ jsx(ExternalLink, { href: "https://recursively.ai", children: "recursively.ai's" }),
28
+ " ",
29
+ /* @__PURE__ */ jsx(ExternalLink, { href: "https://github.com/RecursivelyAI/CopilotKit", children: "CopilotKit" }),
30
+ " ",
31
+ "."
32
+ ] }),
33
+ /* @__PURE__ */ jsx("p", { className: "leading-normal text-muted-foreground", children: "You can start a conversation here or try the following examples:" }),
34
+ /* @__PURE__ */ jsx("div", { className: "mt-4 flex flex-col items-start space-y-2", children: exampleMessages.map((message, index) => /* @__PURE__ */ jsxs(
35
+ Button,
36
+ {
37
+ variant: "link",
38
+ className: "h-auto p-0 text-base",
39
+ onClick: () => props.setInput(message.message),
40
+ children: [
41
+ /* @__PURE__ */ jsx(IconArrowRight, { className: "mr-2 text-muted-foreground" }),
42
+ message.heading
43
+ ]
44
+ },
45
+ index
46
+ )) })
47
+ ] }) });
48
+ };
49
+
50
+ export { DefaultEmptyScreen };
51
+ //# sourceMappingURL=out.js.map
52
+ //# sourceMappingURL=chunk-SEH5PQVW.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat-components/default-empty-screen.tsx"],"names":[],"mappings":";;;;;;;;;;;AA8BQ,cACA,YADA;AAvBR,IAAM,kBAAkB;AAAA,EACtB;AAAA,IACE,SAAS;AAAA,IACT,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,SAAS;AAAA,IACT,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,SAAS;AAAA,IACT,SAAS;AAAA;AAAA,EACX;AACF;AAMO,IAAM,qBAAiD,CAAC,UAAU;AACvE,SACE,oBAAC,SAAI,WAAU,0BACb,+BAAC,SAAI,WAAU,uCACb;AAAA,wBAAC,QAAG,WAAU,8BAA6B,8CAAyB;AAAA,IACpE,qBAAC,OAAE,WAAU,6CAA4C;AAAA;AAAA,MAC1B;AAAA,MAC7B,oBAAC,gBAAa,MAAK,0BAAyB,8BAAgB;AAAA,MAAgB;AAAA,MAC5E,oBAAC,gBAAa,MAAK,+CAA8C,wBAAU;AAAA,MAAgB;AAAA,MAAI;AAAA,OAEjG;AAAA,IACA,oBAAC,OAAE,WAAU,wCAAuC,8EAEpD;AAAA,IACA,oBAAC,SAAI,WAAU,4CACZ,0BAAgB,IAAI,CAAC,SAAS,UAC7B;AAAA,MAAC;AAAA;AAAA,QAEC,SAAQ;AAAA,QACR,WAAU;AAAA,QACV,SAAS,MAAM,MAAM,SAAS,QAAQ,OAAO;AAAA,QAE7C;AAAA,8BAAC,kBAAe,WAAU,8BAA6B;AAAA,UACtD,QAAQ;AAAA;AAAA;AAAA,MANJ;AAAA,IAOP,CACD,GACH;AAAA,KACF,GACF;AAEJ","sourcesContent":["\"use client\";\nimport React from \"react\";\n\nimport { Button } from \"./ui/button\";\nimport { ExternalLink } from \"./external-link\";\nimport { IconArrowRight } from \"./ui/icons\";\n\nconst exampleMessages = [\n {\n heading: \"Explain technical concepts\",\n message: `What is a \"serverless function\"?`,\n },\n {\n heading: \"Summarize an article\",\n message: \"Summarize the following article for a 2nd grader: \\n\",\n },\n {\n heading: \"Draft an email\",\n message: `Draft an email to my boss about the following: \\n`,\n },\n];\n\nexport interface EmptyScreenProps {\n setInput: React.Dispatch<React.SetStateAction<string>>;\n}\n\nexport const DefaultEmptyScreen: React.FC<EmptyScreenProps> = (props) => {\n return (\n <div className=\"mx-auto max-w-2xl px-4\">\n <div className=\"rounded-lg border bg-background p-8\">\n <h1 className=\"mb-2 text-lg font-semibold\">Welcome to CopilotKit! 👋</h1>\n <p className=\"mb-2 leading-normal text-muted-foreground\">\n This is a Copilot built with{\" \"}\n <ExternalLink href=\"https://recursively.ai\">recursively.ai's</ExternalLink>{\" \"}\n <ExternalLink href=\"https://github.com/RecursivelyAI/CopilotKit\">CopilotKit</ExternalLink>{\" \"}\n .\n </p>\n <p className=\"leading-normal text-muted-foreground\">\n You can start a conversation here or try the following examples:\n </p>\n <div className=\"mt-4 flex flex-col items-start space-y-2\">\n {exampleMessages.map((message, index) => (\n <Button\n key={index}\n variant=\"link\"\n className=\"h-auto p-0 text-base\"\n onClick={() => props.setInput(message.message)}\n >\n <IconArrowRight className=\"mr-2 text-muted-foreground\" />\n {message.heading}\n </Button>\n ))}\n </div>\n </div>\n </div>\n );\n};\n"]}
@@ -0,0 +1,18 @@
1
+ import { Separator } from './chunk-GCOPYGHH.mjs';
2
+ import { ChatMessage } from './chunk-CNQX2VY3.mjs';
3
+ import { jsx, jsxs } from 'react/jsx-runtime';
4
+
5
+ function ChatList({ messages }) {
6
+ const displayedMessages = messages.filter((message) => message.role !== "system");
7
+ if (!displayedMessages.length) {
8
+ return null;
9
+ }
10
+ return /* @__PURE__ */ jsx("div", { className: "relative mx-auto max-w-2xl px-0", children: displayedMessages.map((message, index) => /* @__PURE__ */ jsxs("div", { children: [
11
+ /* @__PURE__ */ jsx(ChatMessage, { message }),
12
+ index < displayedMessages.length - 1 && /* @__PURE__ */ jsx(Separator, { className: "my-4 md:my-4" })
13
+ ] }, index)) });
14
+ }
15
+
16
+ export { ChatList };
17
+ //# sourceMappingURL=out.js.map
18
+ //# sourceMappingURL=chunk-SHOTWRKC.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat-components/chat-list.tsx"],"names":[],"mappings":";;;;;;;;AAoBQ,SACE,KADF;AAXD,SAAS,SAAS,EAAE,SAAS,GAAa;AAE/C,QAAM,oBAAoB,SAAS,OAAO,CAAC,YAAY,QAAQ,SAAS,QAAQ;AAEhF,MAAI,CAAC,kBAAkB,QAAQ;AAC7B,WAAO;AAAA,EACT;AAEA,SACE,oBAAC,SAAI,WAAU,mCACZ,4BAAkB,IAAI,CAAC,SAAS,UAC/B,qBAAC,SACC;AAAA,wBAAC,eAAY,SAAkB;AAAA,IAC9B,QAAQ,kBAAkB,SAAS,KAAK,oBAAC,aAAU,WAAU,gBAAe;AAAA,OAFrE,KAGV,CACD,GACH;AAEJ","sourcesContent":["import { type Message } from \"@copilotkit/react-core\";\n\nimport { Separator } from \"./ui/separator\";\nimport { ChatMessage } from \"./chat-message\";\n\nexport interface ChatList {\n messages: Message[];\n}\n\nexport function ChatList({ messages }: ChatList) {\n // we don't want to display system messages\n const displayedMessages = messages.filter((message) => message.role !== \"system\");\n\n if (!displayedMessages.length) {\n return null;\n }\n\n return (\n <div className=\"relative mx-auto max-w-2xl px-0\">\n {displayedMessages.map((message, index) => (\n <div key={index}>\n <ChatMessage message={message} />\n {index < displayedMessages.length - 1 && <Separator className=\"my-4 md:my-4\" />}\n </div>\n ))}\n </div>\n );\n}\n"]}
@@ -0,0 +1,109 @@
1
+ import { buttonVariants } from './chunk-M3CZWJI3.mjs';
2
+ import { cn } from './chunk-Q6YO7LDK.mjs';
3
+ import { __objRest, __spreadProps, __spreadValues } from './chunk-MRXNTQOX.mjs';
4
+ import * as React from 'react';
5
+ import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
6
+ import { jsx, jsxs } from 'react/jsx-runtime';
7
+
8
+ var AlertDialog = AlertDialogPrimitive.Root;
9
+ var AlertDialogTrigger = AlertDialogPrimitive.Trigger;
10
+ var AlertDialogPortal = (_a) => {
11
+ var _b = _a, {
12
+ className,
13
+ children
14
+ } = _b, props = __objRest(_b, [
15
+ "className",
16
+ "children"
17
+ ]);
18
+ return /* @__PURE__ */ jsx(AlertDialogPrimitive.Portal, __spreadProps(__spreadValues({ className: cn(className) }, props), { children: /* @__PURE__ */ jsx("div", { className: "fixed inset-0 z-50 flex items-end justify-center sm:items-center", children }) }));
19
+ };
20
+ AlertDialogPortal.displayName = AlertDialogPrimitive.Portal.displayName;
21
+ var AlertDialogOverlay = React.forwardRef((_a, ref) => {
22
+ var _b = _a, { className, children } = _b, props = __objRest(_b, ["className", "children"]);
23
+ return /* @__PURE__ */ jsx(
24
+ AlertDialogPrimitive.Overlay,
25
+ __spreadProps(__spreadValues({
26
+ className: cn(
27
+ "fixed inset-0 z-50 bg-background/80 backdrop-blur-sm transition-opacity animate-in fade-in",
28
+ className
29
+ )
30
+ }, props), {
31
+ ref
32
+ })
33
+ );
34
+ });
35
+ AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;
36
+ var AlertDialogContent = React.forwardRef((_a, ref) => {
37
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
38
+ return /* @__PURE__ */ jsxs(AlertDialogPortal, { children: [
39
+ /* @__PURE__ */ jsx(AlertDialogOverlay, {}),
40
+ /* @__PURE__ */ jsx(
41
+ AlertDialogPrimitive.Content,
42
+ __spreadValues({
43
+ ref,
44
+ className: cn(
45
+ "fixed z-50 grid w-full max-w-lg scale-100 gap-4 border bg-background p-6 opacity-100 shadow-lg animate-in fade-in-90 slide-in-from-bottom-10 sm:rounded-lg sm:zoom-in-90 sm:slide-in-from-bottom-0 md:w-full",
46
+ className
47
+ )
48
+ }, props)
49
+ )
50
+ ] });
51
+ });
52
+ AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;
53
+ var AlertDialogHeader = (_a) => {
54
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
55
+ return /* @__PURE__ */ jsx("div", __spreadValues({ className: cn("flex flex-col space-y-2 text-center sm:text-left", className) }, props));
56
+ };
57
+ AlertDialogHeader.displayName = "AlertDialogHeader";
58
+ var AlertDialogFooter = (_a) => {
59
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
60
+ return /* @__PURE__ */ jsx(
61
+ "div",
62
+ __spreadValues({
63
+ className: cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", className)
64
+ }, props)
65
+ );
66
+ };
67
+ AlertDialogFooter.displayName = "AlertDialogFooter";
68
+ var AlertDialogTitle = React.forwardRef((_a, ref) => {
69
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
70
+ return /* @__PURE__ */ jsx(
71
+ AlertDialogPrimitive.Title,
72
+ __spreadValues({
73
+ ref,
74
+ className: cn("text-lg font-semibold", className)
75
+ }, props)
76
+ );
77
+ });
78
+ AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;
79
+ var AlertDialogDescription = React.forwardRef((_a, ref) => {
80
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
81
+ return /* @__PURE__ */ jsx(
82
+ AlertDialogPrimitive.Description,
83
+ __spreadValues({
84
+ ref,
85
+ className: cn("text-sm text-muted-foreground", className)
86
+ }, props)
87
+ );
88
+ });
89
+ AlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;
90
+ var AlertDialogAction = React.forwardRef((_a, ref) => {
91
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
92
+ return /* @__PURE__ */ jsx(AlertDialogPrimitive.Action, __spreadValues({ ref, className: cn(buttonVariants(), className) }, props));
93
+ });
94
+ AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;
95
+ var AlertDialogCancel = React.forwardRef((_a, ref) => {
96
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
97
+ return /* @__PURE__ */ jsx(
98
+ AlertDialogPrimitive.Cancel,
99
+ __spreadValues({
100
+ ref,
101
+ className: cn(buttonVariants({ variant: "outline" }), "mt-2 sm:mt-0", className)
102
+ }, props)
103
+ );
104
+ });
105
+ AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;
106
+
107
+ export { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger };
108
+ //# sourceMappingURL=out.js.map
109
+ //# sourceMappingURL=chunk-SRBUGQTM.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat-components/ui/alert-dialog.tsx"],"names":[],"mappings":";;;;;;;;;;;;;AAEA,YAAY,WAAW;AACvB,YAAY,0BAA0B;AAelC,cA0BF,YA1BE;AAVJ,IAAM,cAAmC;AAEzC,IAAM,qBAA0C;AAEhD,IAAM,oBAAoB,CAAC,OAIqB;AAJrB,eACzB;AAAA;AAAA,IACA;AAAA,EAdF,IAY2B,IAGtB,kBAHsB,IAGtB;AAAA,IAFH;AAAA,IACA;AAAA;AAGA,6BAAsB,6BAArB,+BAA4B,WAAW,GAAG,SAAS,KAAO,QAA1D,EACC,8BAAC,SAAI,WAAU,oEACZ,UACH,IACF;AAAA;AAEF,kBAAkB,cAAmC,4BAAO;AAE5D,IAAM,qBAA2B,iBAG/B,CAAC,IAAmC,QAAK;AAAxC,eAAE,aAAW,SA5BhB,IA4BG,IAA0B,kBAA1B,IAA0B,CAAxB,aAAW;AACd;AAAA,IAAsB;AAAA,IAArB;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI,QALL;AAAA,MAMC;AAAA;AAAA,EACF;AAAA,CACD;AACD,mBAAmB,cAAmC,6BAAQ;AAE9D,IAAM,qBAA2B,iBAG/B,CAAC,IAAyB,QAAK;AAA9B,eAAE,YA3CL,IA2CG,IAAgB,kBAAhB,IAAgB,CAAd;AACH,8BAAC,qBACC;AAAA,wBAAC,sBAAmB;AAAA,IACpB;AAAA,MAAsB;AAAA,MAArB;AAAA,QACC;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,SACI;AAAA,IACN;AAAA,KACF;AAAA,CACD;AACD,mBAAmB,cAAmC,6BAAQ;AAE9D,IAAM,oBAAoB,CAAC,OAA+D;AAA/D,eAAE,YA1D7B,IA0D2B,IAAgB,kBAAhB,IAAgB,CAAd;AAC3B,6BAAC,wBAAI,WAAW,GAAG,oDAAoD,SAAS,KAAO,MAAO;AAAA;AAEhG,kBAAkB,cAAc;AAEhC,IAAM,oBAAoB,CAAC,OAA+D;AAA/D,eAAE,YA/D7B,IA+D2B,IAAgB,kBAAhB,IAAgB,CAAd;AAC3B;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,iEAAiE,SAAS;AAAA,OACpF;AAAA,EACN;AAAA;AAEF,kBAAkB,cAAc;AAEhC,IAAM,mBAAyB,iBAG7B,CAAC,IAAyB,QAAK;AAA9B,eAAE,YA1EL,IA0EG,IAAgB,kBAAhB,IAAgB,CAAd;AACH;AAAA,IAAsB;AAAA,IAArB;AAAA,MACC;AAAA,MACA,WAAW,GAAG,yBAAyB,SAAS;AAAA,OAC5C;AAAA,EACN;AAAA,CACD;AACD,iBAAiB,cAAmC,2BAAM;AAE1D,IAAM,yBAA+B,iBAGnC,CAAC,IAAyB,QAAK;AAA9B,eAAE,YAtFL,IAsFG,IAAgB,kBAAhB,IAAgB,CAAd;AACH;AAAA,IAAsB;AAAA,IAArB;AAAA,MACC;AAAA,MACA,WAAW,GAAG,iCAAiC,SAAS;AAAA,OACpD;AAAA,EACN;AAAA,CACD;AACD,uBAAuB,cAAmC,iCAAY;AAEtE,IAAM,oBAA0B,iBAG9B,CAAC,IAAyB,QAAK;AAA9B,eAAE,YAlGL,IAkGG,IAAgB,kBAAhB,IAAgB,CAAd;AACH,6BAAsB,6BAArB,iBAA4B,KAAU,WAAW,GAAG,eAAe,GAAG,SAAS,KAAO,MAAO;AAAA,CAC/F;AACD,kBAAkB,cAAmC,4BAAO;AAE5D,IAAM,oBAA0B,iBAG9B,CAAC,IAAyB,QAAK;AAA9B,eAAE,YA1GL,IA0GG,IAAgB,kBAAhB,IAAgB,CAAd;AACH;AAAA,IAAsB;AAAA,IAArB;AAAA,MACC;AAAA,MACA,WAAW,GAAG,eAAe,EAAE,SAAS,UAAU,CAAC,GAAG,gBAAgB,SAAS;AAAA,OAC3E;AAAA,EACN;AAAA,CACD;AACD,kBAAkB,cAAmC,4BAAO","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\";\n\nimport { cn } from \"../../../lib/utils\";\nimport { buttonVariants } from \"./button\";\n\nconst AlertDialog = AlertDialogPrimitive.Root;\n\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger;\n\nconst AlertDialogPortal = ({\n className,\n children,\n ...props\n}: AlertDialogPrimitive.AlertDialogPortalProps) => (\n <AlertDialogPrimitive.Portal className={cn(className)} {...props}>\n <div className=\"fixed inset-0 z-50 flex items-end justify-center sm:items-center\">\n {children}\n </div>\n </AlertDialogPrimitive.Portal>\n);\nAlertDialogPortal.displayName = AlertDialogPrimitive.Portal.displayName;\n\nconst AlertDialogOverlay = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\n>(({ className, children, ...props }, ref) => (\n <AlertDialogPrimitive.Overlay\n className={cn(\n \"fixed inset-0 z-50 bg-background/80 backdrop-blur-sm transition-opacity animate-in fade-in\",\n className,\n )}\n {...props}\n ref={ref}\n />\n));\nAlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;\n\nconst AlertDialogContent = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed z-50 grid w-full max-w-lg scale-100 gap-4 border bg-background p-6 opacity-100 shadow-lg animate-in fade-in-90 slide-in-from-bottom-10 sm:rounded-lg sm:zoom-in-90 sm:slide-in-from-bottom-0 md:w-full\",\n className,\n )}\n {...props}\n />\n </AlertDialogPortal>\n));\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;\n\nconst AlertDialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"flex flex-col space-y-2 text-center sm:text-left\", className)} {...props} />\n);\nAlertDialogHeader.displayName = \"AlertDialogHeader\";\n\nconst AlertDialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\", className)}\n {...props}\n />\n);\nAlertDialogFooter.displayName = \"AlertDialogFooter\";\n\nconst AlertDialogTitle = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Title\n ref={ref}\n className={cn(\"text-lg font-semibold\", className)}\n {...props}\n />\n));\nAlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;\n\nconst AlertDialogDescription = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nAlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;\n\nconst AlertDialogAction = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Action ref={ref} className={cn(buttonVariants(), className)} {...props} />\n));\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;\n\nconst AlertDialogCancel = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Cancel\n ref={ref}\n className={cn(buttonVariants({ variant: \"outline\" }), \"mt-2 sm:mt-0\", className)}\n {...props}\n />\n));\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;\n\nexport {\n AlertDialog,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n};\n"]}
@@ -0,0 +1,12 @@
1
+ import { memo } from 'react';
2
+ import ReactMarkdown from 'react-markdown';
3
+
4
+ // src/components/chat-components/markdown.tsx
5
+ var MemoizedReactMarkdown = memo(
6
+ ReactMarkdown,
7
+ (prevProps, nextProps) => prevProps.children === nextProps.children && prevProps.className === nextProps.className
8
+ );
9
+
10
+ export { MemoizedReactMarkdown };
11
+ //# sourceMappingURL=out.js.map
12
+ //# sourceMappingURL=chunk-TEYIQHMK.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat-components/markdown.tsx"],"names":[],"mappings":";AAAA,SAAa,YAAY;AACzB,OAAO,mBAAgC;AAEhC,IAAM,wBAAqC;AAAA,EAChD;AAAA,EACA,CAAC,WAAW,cACV,UAAU,aAAa,UAAU,YAAY,UAAU,cAAc,UAAU;AACnF","sourcesContent":["import { FC, memo } from \"react\";\nimport ReactMarkdown, { Options } from \"react-markdown\";\n\nexport const MemoizedReactMarkdown: FC<Options> = memo(\n ReactMarkdown,\n (prevProps, nextProps) =>\n prevProps.children === nextProps.children && prevProps.className === nextProps.className,\n);\n"]}
@@ -0,0 +1,3 @@
1
+
2
+ //# sourceMappingURL=out.js.map
3
+ //# sourceMappingURL=chunk-U6NJWGTV.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ import { cn } from './chunk-Q6YO7LDK.mjs';
2
+ import { __objRest, __spreadValues } from './chunk-MRXNTQOX.mjs';
3
+ import * as React from 'react';
4
+ import * as TooltipPrimitive from '@radix-ui/react-tooltip';
5
+ import { jsx } from 'react/jsx-runtime';
6
+
7
+ var TooltipProvider = TooltipPrimitive.Provider;
8
+ var Tooltip = TooltipPrimitive.Root;
9
+ var TooltipTrigger = TooltipPrimitive.Trigger;
10
+ var TooltipContent = React.forwardRef((_a, ref) => {
11
+ var _b = _a, { className, sideOffset = 4 } = _b, props = __objRest(_b, ["className", "sideOffset"]);
12
+ return /* @__PURE__ */ jsx(
13
+ TooltipPrimitive.Content,
14
+ __spreadValues({
15
+ ref,
16
+ sideOffset,
17
+ className: cn(
18
+ "z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-xs font-medium text-popover-foreground shadow-md animate-in fade-in-50 data-[side=bottom]:slide-in-from-top-1 data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1 data-[side=top]:slide-in-from-bottom-1",
19
+ className
20
+ )
21
+ }, props)
22
+ );
23
+ });
24
+ TooltipContent.displayName = TooltipPrimitive.Content.displayName;
25
+
26
+ export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };
27
+ //# sourceMappingURL=out.js.map
28
+ //# sourceMappingURL=chunk-VGX2W5ZB.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat-components/ui/tooltip.tsx"],"names":[],"mappings":";;;;;;;;;AAEA,YAAY,WAAW;AACvB,YAAY,sBAAsB;AAchC;AAVF,IAAM,kBAAmC;AAEzC,IAAM,UAA2B;AAEjC,IAAM,iBAAkC;AAExC,IAAM,iBAAuB,iBAG3B,CAAC,IAAyC,QAAK;AAA9C,eAAE,aAAW,aAAa,EAhB7B,IAgBG,IAAgC,kBAAhC,IAAgC,CAA9B,aAAW;AACd;AAAA,IAAkB;AAAA,IAAjB;AAAA,MACC;AAAA,MACA;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAAA,CACD;AACD,eAAe,cAA+B,yBAAQ","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\n\nimport { cn } from \"../../../lib/utils\";\n\nconst TooltipProvider = TooltipPrimitive.Provider;\n\nconst Tooltip = TooltipPrimitive.Root;\n\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-xs font-medium text-popover-foreground shadow-md animate-in fade-in-50 data-[side=bottom]:slide-in-from-top-1 data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1 data-[side=top]:slide-in-from-bottom-1\",\n className,\n )}\n {...props}\n />\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n"]}
@@ -0,0 +1,72 @@
1
+ import { CopilotSidebar } from './chunk-C34L4AWW.mjs';
2
+ import { CopilotSidebarContext } from './chunk-MC6KTH4X.mjs';
3
+ import { TooltipProvider } from './chunk-VGX2W5ZB.mjs';
4
+ import { useState, useCallback } from 'react';
5
+ import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
6
+
7
+ function CopilotSidebarUIProvider({ children }) {
8
+ const [sidebarOpen, setSidebarOpen] = useState(true);
9
+ const toggleSidebar = useCallback(() => {
10
+ setSidebarOpen((prev) => !prev);
11
+ }, []);
12
+ return /* @__PURE__ */ jsx(CopilotSidebarContext.Provider, { value: { isSidebarOpen: sidebarOpen, toggleSidebar }, children: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(
13
+ "div",
14
+ {
15
+ style: {
16
+ height: "100vh",
17
+ width: "100vw",
18
+ position: "relative"
19
+ },
20
+ children: [
21
+ /* @__PURE__ */ jsx(
22
+ "div",
23
+ {
24
+ style: {
25
+ overflowY: "auto",
26
+ overflowX: "hidden",
27
+ height: "100%",
28
+ width: sidebarOpen ? "calc(100% - 450px)" : "100%",
29
+ position: "absolute",
30
+ transition: "width 0.5s ease-in-out"
31
+ // New
32
+ },
33
+ children: /* @__PURE__ */ jsx("main", { children })
34
+ }
35
+ ),
36
+ /* @__PURE__ */ jsx(
37
+ "div",
38
+ {
39
+ style: {
40
+ overflowY: "auto",
41
+ height: "100%",
42
+ width: "450px",
43
+ position: "absolute",
44
+ right: sidebarOpen ? "0" : "-450px",
45
+ transition: "right 0.5s ease-in-out"
46
+ },
47
+ children: /* @__PURE__ */ jsx(TooltipProvider, { children: /* @__PURE__ */ jsx(CopilotSidebar, { setSidebarOpen }) })
48
+ }
49
+ ),
50
+ !sidebarOpen && /* @__PURE__ */ jsx(
51
+ "button",
52
+ {
53
+ onClick: toggleSidebar,
54
+ style: {
55
+ position: "absolute",
56
+ top: "5%",
57
+ right: "20px",
58
+ transform: "translateY(-50%)",
59
+ transition: "opacity 0.5s ease-in-out"
60
+ },
61
+ className: "bg-slate-100 ring-2 ring-slate-600 font-semibold text-black p-2 rounded-lg shadow-lg",
62
+ children: "Open Copilot"
63
+ }
64
+ )
65
+ ]
66
+ }
67
+ ) }) });
68
+ }
69
+
70
+ export { CopilotSidebarUIProvider };
71
+ //# sourceMappingURL=out.js.map
72
+ //# sourceMappingURL=chunk-XGUBRIUV.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/sidebar/copilot-sidebar-ui-provider.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,SAA2B,mBAAmB;AAC9C,SAAS,gBAAgB;AAkBnB,mBAkBM,KAjBJ,YADF;AATC,SAAS,yBAAyB,EAAE,SAAS,GAAkC;AACpF,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,IAAI;AAEnD,QAAM,gBAAgB,YAAY,MAAM;AACtC,mBAAe,CAAC,SAAS,CAAC,IAAI;AAAA,EAChC,GAAG,CAAC,CAAC;AAEL,SACE,oBAAC,sBAAsB,UAAtB,EAA+B,OAAO,EAAE,eAAe,aAAa,cAAc,GACjF,0CACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,QACL,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,UAAU;AAAA,MACZ;AAAA,MAEA;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,OAAO;AAAA,cACL,WAAW;AAAA,cACX,WAAW;AAAA,cACX,QAAQ;AAAA,cACR,OAAO,cAAc,uBAAuB;AAAA,cAC5C,UAAU;AAAA,cACV,YAAY;AAAA;AAAA,YACd;AAAA,YAEA,8BAAC,UAAM,UAAS;AAAA;AAAA,QAClB;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,OAAO;AAAA,cACL,WAAW;AAAA,cACX,QAAQ;AAAA,cACR,OAAO;AAAA,cACP,UAAU;AAAA,cACV,OAAO,cAAc,MAAM;AAAA,cAC3B,YAAY;AAAA,YACd;AAAA,YAEA,8BAAC,mBACC,8BAAC,kBAAe,gBAAgC,GAClD;AAAA;AAAA,QACF;AAAA,QACC,CAAC,eACA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS;AAAA,YACT,OAAO;AAAA,cACL,UAAU;AAAA,cACV,KAAK;AAAA,cACL,OAAO;AAAA,cACP,WAAW;AAAA,cACX,YAAY;AAAA,YACd;AAAA,YACA,WAAU;AAAA,YACX;AAAA;AAAA,QAED;AAAA;AAAA;AAAA,EAEJ,GACF,GACF;AAEJ","sourcesContent":["import React, { ReactNode, useCallback } from \"react\";\nimport { useState } from \"react\";\nimport { CopilotSidebar } from \"./copilot-sidebar\";\nimport { CopilotSidebarContext } from \"./sidebar-context\";\nimport { TooltipProvider } from \"../chat-components/ui/tooltip\";\n\nexport interface CopilotSidebarUIProviderProps {\n children: ReactNode;\n}\n\nexport function CopilotSidebarUIProvider({ children }: CopilotSidebarUIProviderProps) {\n const [sidebarOpen, setSidebarOpen] = useState(true);\n\n const toggleSidebar = useCallback(() => {\n setSidebarOpen((prev) => !prev);\n }, []);\n\n return (\n <CopilotSidebarContext.Provider value={{ isSidebarOpen: sidebarOpen, toggleSidebar }}>\n <>\n <div\n style={{\n height: \"100vh\",\n width: \"100vw\",\n position: \"relative\",\n }}\n >\n <div\n style={{\n overflowY: \"auto\",\n overflowX: \"hidden\",\n height: \"100%\",\n width: sidebarOpen ? \"calc(100% - 450px)\" : \"100%\",\n position: \"absolute\",\n transition: \"width 0.5s ease-in-out\", // New\n }}\n >\n <main>{children}</main>\n </div>\n <div\n style={{\n overflowY: \"auto\",\n height: \"100%\",\n width: \"450px\",\n position: \"absolute\",\n right: sidebarOpen ? \"0\" : \"-450px\",\n transition: \"right 0.5s ease-in-out\",\n }}\n >\n <TooltipProvider>\n <CopilotSidebar setSidebarOpen={setSidebarOpen} />\n </TooltipProvider>\n </div>\n {!sidebarOpen && (\n <button\n onClick={toggleSidebar}\n style={{\n position: \"absolute\",\n top: \"5%\",\n right: \"20px\",\n transform: \"translateY(-50%)\",\n transition: \"opacity 0.5s ease-in-out\",\n }}\n className=\"bg-slate-100 ring-2 ring-slate-600 font-semibold text-black p-2 rounded-lg shadow-lg\"\n >\n Open Copilot\n </button>\n )}\n </div>\n </>\n </CopilotSidebarContext.Provider>\n );\n}\n"]}
@@ -0,0 +1,21 @@
1
+ import * as React from 'react';
2
+
3
+ // src/hooks/use-at-bottom.tsx
4
+ function useAtBottom(offset = 0) {
5
+ const [isAtBottom, setIsAtBottom] = React.useState(false);
6
+ React.useEffect(() => {
7
+ const handleScroll = () => {
8
+ setIsAtBottom(window.innerHeight + window.scrollY >= document.body.offsetHeight - offset);
9
+ };
10
+ window.addEventListener("scroll", handleScroll, { passive: true });
11
+ handleScroll();
12
+ return () => {
13
+ window.removeEventListener("scroll", handleScroll);
14
+ };
15
+ }, [offset]);
16
+ return isAtBottom;
17
+ }
18
+
19
+ export { useAtBottom };
20
+ //# sourceMappingURL=out.js.map
21
+ //# sourceMappingURL=chunk-ZYC5YVDO.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/use-at-bottom.tsx"],"names":[],"mappings":";AAAA,YAAY,WAAW;AAEhB,SAAS,YAAY,SAAS,GAAG;AACtC,QAAM,CAAC,YAAY,aAAa,IAAU,eAAS,KAAK;AAExD,EAAM,gBAAU,MAAM;AACpB,UAAM,eAAe,MAAM;AACzB,oBAAc,OAAO,cAAc,OAAO,WAAW,SAAS,KAAK,eAAe,MAAM;AAAA,IAC1F;AAEA,WAAO,iBAAiB,UAAU,cAAc,EAAE,SAAS,KAAK,CAAC;AACjE,iBAAa;AAEb,WAAO,MAAM;AACX,aAAO,oBAAoB,UAAU,YAAY;AAAA,IACnD;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,SAAO;AACT","sourcesContent":["import * as React from \"react\";\n\nexport function useAtBottom(offset = 0) {\n const [isAtBottom, setIsAtBottom] = React.useState(false);\n\n React.useEffect(() => {\n const handleScroll = () => {\n setIsAtBottom(window.innerHeight + window.scrollY >= document.body.offsetHeight - offset);\n };\n\n window.addEventListener(\"scroll\", handleScroll, { passive: true });\n handleScroll();\n\n return () => {\n window.removeEventListener(\"scroll\", handleScroll);\n };\n }, [offset]);\n\n return isAtBottom;\n}\n"]}