@chatsdk-dev/elements 0.0.1

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 (218) hide show
  1. package/README.md +43 -0
  2. package/dist/chunk-2LHKM7RD.js +14 -0
  3. package/dist/chunk-5UMYP6MD.js +10 -0
  4. package/dist/chunk-AP4MG32M.js +36 -0
  5. package/dist/chunk-CFM57HOS.js +358 -0
  6. package/dist/chunk-EGIUE7H2.js +37 -0
  7. package/dist/chunk-M5OONVIO.js +90 -0
  8. package/dist/chunk-MXTBCHYC.js +31 -0
  9. package/dist/chunk-NIC3MOMY.js +55 -0
  10. package/dist/chunk-QTRMNIG3.js +83 -0
  11. package/dist/chunk-R7G3RQLU.js +36 -0
  12. package/dist/chunk-RJG5D2TM.js +113 -0
  13. package/dist/chunk-SLJNKQ2G.js +125 -0
  14. package/dist/chunk-TDEFIW2L.js +9 -0
  15. package/dist/chunk-TDP6D7U7.js +551 -0
  16. package/dist/chunk-V2ITXC65.js +24 -0
  17. package/dist/chunk-VS55HRUS.js +16 -0
  18. package/dist/chunk-VYDYCGJL.js +25 -0
  19. package/dist/chunk-X5YUF2YM.js +113 -0
  20. package/dist/chunk-YX46JVQN.js +78 -0
  21. package/dist/chunk-YXAMLTTT.js +16 -0
  22. package/dist/chunk-YXFVHSY4.js +51 -0
  23. package/dist/chunk-ZCSZX3OI.js +4 -0
  24. package/dist/common/use-copy-to-clipboard.d.ts +3 -0
  25. package/dist/common/use-copy-to-clipboard.js +33 -0
  26. package/dist/common/utilts.d.ts +8 -0
  27. package/dist/common/utilts.js +28 -0
  28. package/dist/components/ai-elements/actions.d.ts +13 -0
  29. package/dist/components/ai-elements/actions.js +42 -0
  30. package/dist/components/ai-elements/agent.d.ts +31 -0
  31. package/dist/components/ai-elements/agent.js +77 -0
  32. package/dist/components/ai-elements/artifact.d.ts +27 -0
  33. package/dist/components/ai-elements/artifact.js +108 -0
  34. package/dist/components/ai-elements/attachments.d.ts +57 -0
  35. package/dist/components/ai-elements/attachments.js +258 -0
  36. package/dist/components/ai-elements/audio-player.d.ts +33 -0
  37. package/dist/components/ai-elements/audio-player.js +199 -0
  38. package/dist/components/ai-elements/canvas.d.ts +10 -0
  39. package/dist/components/ai-elements/canvas.js +24 -0
  40. package/dist/components/ai-elements/chain-of-thought.d.ts +34 -0
  41. package/dist/components/ai-elements/chain-of-thought.js +159 -0
  42. package/dist/components/ai-elements/checkpoint.d.ts +16 -0
  43. package/dist/components/ai-elements/checkpoint.js +47 -0
  44. package/dist/components/ai-elements/code-block.d.ts +48 -0
  45. package/dist/components/ai-elements/code-block.js +1 -0
  46. package/dist/components/ai-elements/commit.d.ts +68 -0
  47. package/dist/components/ai-elements/commit.js +314 -0
  48. package/dist/components/ai-elements/confirmation.d.ts +52 -0
  49. package/dist/components/ai-elements/confirmation.js +76 -0
  50. package/dist/components/ai-elements/connection.d.ts +5 -0
  51. package/dist/components/ai-elements/connection.js +34 -0
  52. package/dist/components/ai-elements/context.d.ts +36 -0
  53. package/dist/components/ai-elements/context.js +320 -0
  54. package/dist/components/ai-elements/controls.d.ts +8 -0
  55. package/dist/components/ai-elements/controls.js +17 -0
  56. package/dist/components/ai-elements/conversation.d.ts +27 -0
  57. package/dist/components/ai-elements/conversation.js +119 -0
  58. package/dist/components/ai-elements/edge.d.ts +9 -0
  59. package/dist/components/ai-elements/edge.js +111 -0
  60. package/dist/components/ai-elements/environment-variables.d.ts +42 -0
  61. package/dist/components/ai-elements/environment-variables.js +208 -0
  62. package/dist/components/ai-elements/file-tree.d.ts +30 -0
  63. package/dist/components/ai-elements/file-tree.js +212 -0
  64. package/dist/components/ai-elements/image.d.ts +10 -0
  65. package/dist/components/ai-elements/image.js +23 -0
  66. package/dist/components/ai-elements/inline-citation.d.ts +42 -0
  67. package/dist/components/ai-elements/inline-citation.js +203 -0
  68. package/dist/components/ai-elements/jsx-preview.d.ts +33 -0
  69. package/dist/components/ai-elements/jsx-preview.js +206 -0
  70. package/dist/components/ai-elements/loader.d.ts +9 -0
  71. package/dist/components/ai-elements/loader.js +115 -0
  72. package/dist/components/ai-elements/message.d.ts +42 -0
  73. package/dist/components/ai-elements/message.js +259 -0
  74. package/dist/components/ai-elements/mic-selector.d.ts +49 -0
  75. package/dist/components/ai-elements/mic-selector.js +252 -0
  76. package/dist/components/ai-elements/model-selector.d.ts +39 -0
  77. package/dist/components/ai-elements/model-selector.js +73 -0
  78. package/dist/components/ai-elements/node.d.ts +25 -0
  79. package/dist/components/ai-elements/node.js +41 -0
  80. package/dist/components/ai-elements/open-in-chat.d.ts +32 -0
  81. package/dist/components/ai-elements/open-in-chat.js +366 -0
  82. package/dist/components/ai-elements/package-info.d.ts +32 -0
  83. package/dist/components/ai-elements/package-info.js +162 -0
  84. package/dist/components/ai-elements/panel.d.ts +8 -0
  85. package/dist/components/ai-elements/panel.js +17 -0
  86. package/dist/components/ai-elements/persona.d.ts +50 -0
  87. package/dist/components/ai-elements/persona.js +209 -0
  88. package/dist/components/ai-elements/plan.d.ts +29 -0
  89. package/dist/components/ai-elements/plan.js +95 -0
  90. package/dist/components/ai-elements/prompt-input.d.ts +153 -0
  91. package/dist/components/ai-elements/prompt-input.js +939 -0
  92. package/dist/components/ai-elements/queue.d.ts +65 -0
  93. package/dist/components/ai-elements/queue.js +179 -0
  94. package/dist/components/ai-elements/reasoning.d.ts +30 -0
  95. package/dist/components/ai-elements/reasoning.js +161 -0
  96. package/dist/components/ai-elements/response.d.ts +9 -0
  97. package/dist/components/ai-elements/response.js +33 -0
  98. package/dist/components/ai-elements/sandbox.d.ts +28 -0
  99. package/dist/components/ai-elements/sandbox.js +98 -0
  100. package/dist/components/ai-elements/schema-display.d.ts +58 -0
  101. package/dist/components/ai-elements/schema-display.js +313 -0
  102. package/dist/components/ai-elements/shimmer.d.ts +14 -0
  103. package/dist/components/ai-elements/shimmer.js +1 -0
  104. package/dist/components/ai-elements/snippet.d.ts +22 -0
  105. package/dist/components/ai-elements/snippet.js +90 -0
  106. package/dist/components/ai-elements/sources.d.ts +16 -0
  107. package/dist/components/ai-elements/sources.js +62 -0
  108. package/dist/components/ai-elements/speech-input.d.ts +57 -0
  109. package/dist/components/ai-elements/speech-input.js +206 -0
  110. package/dist/components/ai-elements/stack-trace.d.ts +42 -0
  111. package/dist/components/ai-elements/stack-trace.js +377 -0
  112. package/dist/components/ai-elements/suggestion.d.ts +14 -0
  113. package/dist/components/ai-elements/suggestion.js +41 -0
  114. package/dist/components/ai-elements/task.d.ts +18 -0
  115. package/dist/components/ai-elements/task.js +60 -0
  116. package/dist/components/ai-elements/terminal.d.ts +31 -0
  117. package/dist/components/ai-elements/terminal.js +203 -0
  118. package/dist/components/ai-elements/test-results.d.ts +61 -0
  119. package/dist/components/ai-elements/test-results.js +349 -0
  120. package/dist/components/ai-elements/tool.d.ts +35 -0
  121. package/dist/components/ai-elements/tool.js +2 -0
  122. package/dist/components/ai-elements/toolbar.d.ts +8 -0
  123. package/dist/components/ai-elements/toolbar.js +18 -0
  124. package/dist/components/ai-elements/transcription.d.ts +19 -0
  125. package/dist/components/ai-elements/transcription.js +90 -0
  126. package/dist/components/ai-elements/voice-selector.d.ts +66 -0
  127. package/dist/components/ai-elements/voice-selector.js +332 -0
  128. package/dist/components/ai-elements/web-preview.d.ts +38 -0
  129. package/dist/components/ai-elements/web-preview.js +214 -0
  130. package/dist/components/info-card.d.ts +14 -0
  131. package/dist/components/info-card.js +1 -0
  132. package/dist/components/responsive-alert-dialog.d.ts +19 -0
  133. package/dist/components/responsive-alert-dialog.js +1 -0
  134. package/dist/components/responsive-dialog.d.ts +14 -0
  135. package/dist/components/responsive-dialog.js +1 -0
  136. package/dist/config-IcWUmjwj.d.ts +239 -0
  137. package/dist/features/chat/chat-card.d.ts +5 -0
  138. package/dist/features/chat/chat-card.js +14 -0
  139. package/dist/features/chat/chat-element/chat-element.d.ts +8 -0
  140. package/dist/features/chat/chat-element/chat-element.js +14 -0
  141. package/dist/features/chat/chat-element/use-chat.d.ts +21 -0
  142. package/dist/features/chat/chat-element/use-chat.js +14 -0
  143. package/dist/features/chat/chat-element/use-initial-messages.d.ts +20 -0
  144. package/dist/features/chat/chat-element/use-initial-messages.js +14 -0
  145. package/dist/features/chat/chat-header/chat-header.d.ts +8 -0
  146. package/dist/features/chat/chat-header/chat-header.js +14 -0
  147. package/dist/features/chat/chat-header/chat-menu.d.ts +5 -0
  148. package/dist/features/chat/chat-header/chat-menu.js +2 -0
  149. package/dist/features/chat/chat-history/chat-history-empty.d.ts +5 -0
  150. package/dist/features/chat/chat-history/chat-history-empty.js +1 -0
  151. package/dist/features/chat/chat-history/chat-history.d.ts +5 -0
  152. package/dist/features/chat/chat-history/chat-history.js +14 -0
  153. package/dist/features/chat/chat-message.d.ts +10 -0
  154. package/dist/features/chat/chat-message.js +1 -0
  155. package/dist/features/chat/chat-molecule.d.ts +35 -0
  156. package/dist/features/chat/chat-molecule.js +14 -0
  157. package/dist/features/chat/chat-prompt-input.d.ts +16 -0
  158. package/dist/features/chat/chat-prompt-input.js +14 -0
  159. package/dist/features/chat/chat.context.d.ts +26 -0
  160. package/dist/features/chat/chat.context.js +13 -0
  161. package/dist/features/chat/index.d.ts +14 -0
  162. package/dist/features/chat/index.js +14 -0
  163. package/dist/features/chat/queries/query-keys.d.ts +8 -0
  164. package/dist/features/chat/queries/query-keys.js +1 -0
  165. package/dist/features/chat/queries/use-create-conversation-mutation.d.ts +29 -0
  166. package/dist/features/chat/queries/use-create-conversation-mutation.js +38 -0
  167. package/dist/features/chat/queries/use-get-chat-query.d.ts +9 -0
  168. package/dist/features/chat/queries/use-get-chat-query.js +14 -0
  169. package/dist/features/chat/queries/use-get-conversation-query.d.ts +62 -0
  170. package/dist/features/chat/queries/use-get-conversation-query.js +14 -0
  171. package/dist/features/chat/queries/use-list-conversations-query.d.ts +29 -0
  172. package/dist/features/chat/queries/use-list-conversations-query.js +14 -0
  173. package/dist/features/chat/store.d.ts +13 -0
  174. package/dist/features/chat/store.js +1 -0
  175. package/dist/features/chat/utils.d.ts +5 -0
  176. package/dist/features/chat/utils.js +1 -0
  177. package/dist/features/data-fetching/use-api-client.d.ts +5 -0
  178. package/dist/features/data-fetching/use-api-client.js +14 -0
  179. package/dist/features/logger/logger.d.ts +9 -0
  180. package/dist/features/logger/logger.js +1 -0
  181. package/dist/features/molecule/chatsdk-provider.d.ts +19 -0
  182. package/dist/features/molecule/chatsdk-provider.js +26 -0
  183. package/dist/features/molecule/constants.d.ts +3 -0
  184. package/dist/features/molecule/constants.js +1 -0
  185. package/dist/features/molecule/molecule-provider.d.ts +39 -0
  186. package/dist/features/molecule/molecule-provider.js +1 -0
  187. package/dist/features/molecule/store.d.ts +53 -0
  188. package/dist/features/molecule/store.js +3 -0
  189. package/dist/features/molecule/types/api.d.ts +8 -0
  190. package/dist/features/molecule/types/api.js +1 -0
  191. package/dist/features/molecule/types/callbacks.d.ts +22 -0
  192. package/dist/features/molecule/types/callbacks.js +1 -0
  193. package/dist/features/molecule/types/config.d.ts +10 -0
  194. package/dist/features/molecule/types/config.js +1 -0
  195. package/dist/features/molecule/types/context.d.ts +11 -0
  196. package/dist/features/molecule/types/context.js +1 -0
  197. package/dist/features/molecule/types/locale.d.ts +9 -0
  198. package/dist/features/molecule/types/locale.js +1 -0
  199. package/dist/features/molecule/types/theme.d.ts +38 -0
  200. package/dist/features/molecule/types/theme.js +1 -0
  201. package/dist/features/molecule/types/translations.d.ts +10 -0
  202. package/dist/features/molecule/types/translations.js +1 -0
  203. package/dist/features/molecule/use-merge-global-config.d.ts +22 -0
  204. package/dist/features/molecule/use-merge-global-config.js +5 -0
  205. package/dist/features/molecule/use-molecule-config.d.ts +41 -0
  206. package/dist/features/molecule/use-molecule-config.js +6 -0
  207. package/dist/features/molecule/utils.d.ts +10 -0
  208. package/dist/features/molecule/utils.js +1 -0
  209. package/dist/i18n/config.d.ts +61 -0
  210. package/dist/i18n/config.js +1 -0
  211. package/dist/i18n/i18next.d.ts +11 -0
  212. package/dist/i18n/i18next.js +2 -0
  213. package/dist/i18n/utils.d.ts +11 -0
  214. package/dist/i18n/utils.js +6 -0
  215. package/dist/index.d.ts +20 -0
  216. package/dist/index.js +20 -0
  217. package/dist/styles.css +6811 -0
  218. package/package.json +123 -0
@@ -0,0 +1,18 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@chatsdk-dev/ui/components/collapsible';
3
+ import { ComponentProps } from 'react';
4
+
5
+ type TaskItemFileProps = ComponentProps<"div">;
6
+ declare const TaskItemFile: ({ children, className, ...props }: TaskItemFileProps) => react_jsx_runtime.JSX.Element;
7
+ type TaskItemProps = ComponentProps<"div">;
8
+ declare const TaskItem: ({ children, className, ...props }: TaskItemProps) => react_jsx_runtime.JSX.Element;
9
+ type TaskProps = ComponentProps<typeof Collapsible>;
10
+ declare const Task: ({ defaultOpen, className, ...props }: TaskProps) => react_jsx_runtime.JSX.Element;
11
+ type TaskTriggerProps = ComponentProps<typeof CollapsibleTrigger> & {
12
+ title: string;
13
+ };
14
+ declare const TaskTrigger: ({ children, className, title, ...props }: TaskTriggerProps) => react_jsx_runtime.JSX.Element;
15
+ type TaskContentProps = ComponentProps<typeof CollapsibleContent>;
16
+ declare const TaskContent: ({ children, className, ...props }: TaskContentProps) => react_jsx_runtime.JSX.Element;
17
+
18
+ export { Task, TaskContent, type TaskContentProps, TaskItem, TaskItemFile, type TaskItemFileProps, type TaskItemProps, type TaskProps, TaskTrigger, type TaskTriggerProps };
@@ -0,0 +1,60 @@
1
+ import { Collapsible, CollapsibleTrigger, CollapsibleContent } from '@chatsdk-dev/ui/components/collapsible';
2
+ import { cn } from '@chatsdk-dev/ui/lib/utils';
3
+ import { SearchIcon, ChevronDownIcon } from 'lucide-react';
4
+ import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
5
+
6
+ var TaskItemFile = ({
7
+ children,
8
+ className,
9
+ ...props
10
+ }) => /* @__PURE__ */ jsx(
11
+ "div",
12
+ {
13
+ className: cn(
14
+ "inline-flex items-center gap-1 rounded-md border bg-secondary px-1.5 py-0.5 text-foreground text-xs",
15
+ className
16
+ ),
17
+ ...props,
18
+ children
19
+ }
20
+ );
21
+ var TaskItem = ({ children, className, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("text-muted-foreground text-sm", className), ...props, children });
22
+ var Task = ({
23
+ defaultOpen = true,
24
+ className,
25
+ ...props
26
+ }) => /* @__PURE__ */ jsx(Collapsible, { className: cn(className), defaultOpen, ...props });
27
+ var TaskTrigger = ({
28
+ children,
29
+ className,
30
+ title,
31
+ ...props
32
+ }) => /* @__PURE__ */ jsx(
33
+ CollapsibleTrigger,
34
+ {
35
+ className: cn("group", className),
36
+ ...props,
37
+ render: () => children ? /* @__PURE__ */ jsx(Fragment, { children }) : /* @__PURE__ */ jsxs("div", { className: "flex w-full cursor-pointer items-center gap-2 text-muted-foreground text-sm transition-colors hover:text-foreground", children: [
38
+ /* @__PURE__ */ jsx(SearchIcon, { className: "size-4" }),
39
+ /* @__PURE__ */ jsx("p", { className: "text-sm", children: title }),
40
+ /* @__PURE__ */ jsx(ChevronDownIcon, { className: "size-4 transition-transform group-data-[state=open]:rotate-180" })
41
+ ] })
42
+ }
43
+ );
44
+ var TaskContent = ({
45
+ children,
46
+ className,
47
+ ...props
48
+ }) => /* @__PURE__ */ jsx(
49
+ CollapsibleContent,
50
+ {
51
+ className: cn(
52
+ "data-[state=closed]:fade-out-0 data-[state=closed]:slide-out-to-top-2 data-[state=open]:slide-in-from-top-2 text-popover-foreground outline-none data-[state=closed]:animate-out data-[state=open]:animate-in",
53
+ className
54
+ ),
55
+ ...props,
56
+ children: /* @__PURE__ */ jsx("div", { className: "mt-4 space-y-2 border-muted border-l-2 pl-4", children })
57
+ }
58
+ );
59
+
60
+ export { Task, TaskContent, TaskItem, TaskItemFile, TaskTrigger };
@@ -0,0 +1,31 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { Button } from '@chatsdk-dev/ui/components/button';
3
+ import { HTMLAttributes, ComponentProps } from 'react';
4
+
5
+ type TerminalHeaderProps = HTMLAttributes<HTMLDivElement>;
6
+ declare const TerminalHeader: ({ className, children, ...props }: TerminalHeaderProps) => react_jsx_runtime.JSX.Element;
7
+ type TerminalTitleProps = HTMLAttributes<HTMLDivElement>;
8
+ declare const TerminalTitle: ({ className, children, ...props }: TerminalTitleProps) => react_jsx_runtime.JSX.Element;
9
+ type TerminalStatusProps = HTMLAttributes<HTMLDivElement>;
10
+ declare const TerminalStatus: ({ className, children, ...props }: TerminalStatusProps) => react_jsx_runtime.JSX.Element | null;
11
+ type TerminalActionsProps = HTMLAttributes<HTMLDivElement>;
12
+ declare const TerminalActions: ({ className, children, ...props }: TerminalActionsProps) => react_jsx_runtime.JSX.Element;
13
+ type TerminalCopyButtonProps = ComponentProps<typeof Button> & {
14
+ onCopy?: () => void;
15
+ onError?: (error: Error) => void;
16
+ timeout?: number;
17
+ };
18
+ declare const TerminalCopyButton: ({ onCopy, onError, timeout, children, className, ...props }: TerminalCopyButtonProps) => react_jsx_runtime.JSX.Element;
19
+ type TerminalClearButtonProps = ComponentProps<typeof Button>;
20
+ declare const TerminalClearButton: ({ children, className, ...props }: TerminalClearButtonProps) => react_jsx_runtime.JSX.Element | null;
21
+ type TerminalContentProps = HTMLAttributes<HTMLDivElement>;
22
+ declare const TerminalContent: ({ className, children, ...props }: TerminalContentProps) => react_jsx_runtime.JSX.Element;
23
+ type TerminalProps = HTMLAttributes<HTMLDivElement> & {
24
+ output: string;
25
+ isStreaming?: boolean;
26
+ autoScroll?: boolean;
27
+ onClear?: () => void;
28
+ };
29
+ declare const Terminal: ({ output, isStreaming, autoScroll, onClear, className, children, ...props }: TerminalProps) => react_jsx_runtime.JSX.Element;
30
+
31
+ export { Terminal, TerminalActions, type TerminalActionsProps, TerminalClearButton, type TerminalClearButtonProps, TerminalContent, type TerminalContentProps, TerminalCopyButton, type TerminalCopyButtonProps, TerminalHeader, type TerminalHeaderProps, type TerminalProps, TerminalStatus, type TerminalStatusProps, TerminalTitle, type TerminalTitleProps };
@@ -0,0 +1,203 @@
1
+ import { Button } from '@chatsdk-dev/ui/components/button';
2
+ import { cn } from '@chatsdk-dev/ui/lib/utils';
3
+ import Ansi from 'ansi-to-react';
4
+ import { TerminalIcon, CheckIcon, CopyIcon, Trash2Icon } from 'lucide-react';
5
+ import { createContext, useContext, useState, useRef, useCallback, useEffect, useMemo } from 'react';
6
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
7
+
8
+ var TerminalContext = createContext({
9
+ autoScroll: true,
10
+ isStreaming: false,
11
+ output: ""
12
+ });
13
+ var TerminalHeader = ({
14
+ className,
15
+ children,
16
+ ...props
17
+ }) => /* @__PURE__ */ jsx(
18
+ "div",
19
+ {
20
+ className: cn(
21
+ "flex items-center justify-between border-zinc-800 border-b px-4 py-2",
22
+ className
23
+ ),
24
+ ...props,
25
+ children
26
+ }
27
+ );
28
+ var TerminalTitle = ({
29
+ className,
30
+ children,
31
+ ...props
32
+ }) => /* @__PURE__ */ jsxs(
33
+ "div",
34
+ {
35
+ className: cn("flex items-center gap-2 text-sm text-zinc-400", className),
36
+ ...props,
37
+ children: [
38
+ /* @__PURE__ */ jsx(TerminalIcon, { className: "size-4" }),
39
+ children ?? "Terminal"
40
+ ]
41
+ }
42
+ );
43
+ var TerminalStatus = ({
44
+ className,
45
+ children,
46
+ ...props
47
+ }) => {
48
+ const { isStreaming } = useContext(TerminalContext);
49
+ if (!isStreaming) {
50
+ return null;
51
+ }
52
+ return /* @__PURE__ */ jsx(
53
+ "div",
54
+ {
55
+ className: cn("flex items-center gap-2 text-xs text-zinc-400", className),
56
+ ...props,
57
+ children
58
+ }
59
+ );
60
+ };
61
+ var TerminalActions = ({
62
+ className,
63
+ children,
64
+ ...props
65
+ }) => /* @__PURE__ */ jsx("div", { className: cn("flex items-center gap-1", className), ...props, children });
66
+ var TerminalCopyButton = ({
67
+ onCopy,
68
+ onError,
69
+ timeout = 2e3,
70
+ children,
71
+ className,
72
+ ...props
73
+ }) => {
74
+ const [isCopied, setIsCopied] = useState(false);
75
+ const timeoutRef = useRef(0);
76
+ const { output } = useContext(TerminalContext);
77
+ const copyToClipboard = useCallback(async () => {
78
+ if (typeof window === "undefined" || !navigator?.clipboard?.writeText) {
79
+ onError?.(new Error("Clipboard API not available"));
80
+ return;
81
+ }
82
+ try {
83
+ await navigator.clipboard.writeText(output);
84
+ setIsCopied(true);
85
+ onCopy?.();
86
+ timeoutRef.current = window.setTimeout(() => setIsCopied(false), timeout);
87
+ } catch (error) {
88
+ onError?.(error);
89
+ }
90
+ }, [output, onCopy, onError, timeout]);
91
+ useEffect(
92
+ () => () => {
93
+ window.clearTimeout(timeoutRef.current);
94
+ },
95
+ []
96
+ );
97
+ const Icon = isCopied ? CheckIcon : CopyIcon;
98
+ return /* @__PURE__ */ jsx(
99
+ Button,
100
+ {
101
+ className: cn(
102
+ "size-7 shrink-0 text-zinc-400 hover:bg-zinc-800 hover:text-zinc-100",
103
+ className
104
+ ),
105
+ onClick: copyToClipboard,
106
+ size: "icon",
107
+ variant: "ghost",
108
+ ...props,
109
+ children: children ?? /* @__PURE__ */ jsx(Icon, { size: 14 })
110
+ }
111
+ );
112
+ };
113
+ var TerminalClearButton = ({
114
+ children,
115
+ className,
116
+ ...props
117
+ }) => {
118
+ const { onClear } = useContext(TerminalContext);
119
+ if (!onClear) {
120
+ return null;
121
+ }
122
+ return /* @__PURE__ */ jsx(
123
+ Button,
124
+ {
125
+ className: cn(
126
+ "size-7 shrink-0 text-zinc-400 hover:bg-zinc-800 hover:text-zinc-100",
127
+ className
128
+ ),
129
+ onClick: onClear,
130
+ size: "icon",
131
+ variant: "ghost",
132
+ ...props,
133
+ children: children ?? /* @__PURE__ */ jsx(Trash2Icon, { size: 14 })
134
+ }
135
+ );
136
+ };
137
+ var TerminalContent = ({
138
+ className,
139
+ children,
140
+ ...props
141
+ }) => {
142
+ const { output, isStreaming, autoScroll } = useContext(TerminalContext);
143
+ const containerRef = useRef(null);
144
+ useEffect(() => {
145
+ if (autoScroll && containerRef.current) {
146
+ containerRef.current.scrollTop = containerRef.current.scrollHeight;
147
+ }
148
+ }, [output, autoScroll]);
149
+ return /* @__PURE__ */ jsx(
150
+ "div",
151
+ {
152
+ className: cn(
153
+ "max-h-96 overflow-auto p-4 font-mono text-sm leading-relaxed",
154
+ className
155
+ ),
156
+ ref: containerRef,
157
+ ...props,
158
+ children: children ?? /* @__PURE__ */ jsxs("pre", { className: "whitespace-pre-wrap break-words", children: [
159
+ /* @__PURE__ */ jsx(Ansi, { children: output }),
160
+ isStreaming && /* @__PURE__ */ jsx("span", { className: "ml-0.5 inline-block h-4 w-2 animate-pulse bg-zinc-100" })
161
+ ] })
162
+ }
163
+ );
164
+ };
165
+ var Terminal = ({
166
+ output,
167
+ isStreaming = false,
168
+ autoScroll = true,
169
+ onClear,
170
+ className,
171
+ children,
172
+ ...props
173
+ }) => {
174
+ const contextValue = useMemo(
175
+ () => ({ autoScroll, isStreaming, onClear, output }),
176
+ [autoScroll, isStreaming, onClear, output]
177
+ );
178
+ return /* @__PURE__ */ jsx(TerminalContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(
179
+ "div",
180
+ {
181
+ className: cn(
182
+ "flex flex-col overflow-hidden rounded-lg border bg-zinc-950 text-zinc-100",
183
+ className
184
+ ),
185
+ ...props,
186
+ children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
187
+ /* @__PURE__ */ jsxs(TerminalHeader, { children: [
188
+ /* @__PURE__ */ jsx(TerminalTitle, {}),
189
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
190
+ /* @__PURE__ */ jsx(TerminalStatus, {}),
191
+ /* @__PURE__ */ jsxs(TerminalActions, { children: [
192
+ /* @__PURE__ */ jsx(TerminalCopyButton, {}),
193
+ onClear && /* @__PURE__ */ jsx(TerminalClearButton, {})
194
+ ] })
195
+ ] })
196
+ ] }),
197
+ /* @__PURE__ */ jsx(TerminalContent, {})
198
+ ] })
199
+ }
200
+ ) });
201
+ };
202
+
203
+ export { Terminal, TerminalActions, TerminalClearButton, TerminalContent, TerminalCopyButton, TerminalHeader, TerminalStatus, TerminalTitle };
@@ -0,0 +1,61 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@chatsdk-dev/ui/components/collapsible';
3
+ import { HTMLAttributes, ComponentProps } from 'react';
4
+
5
+ type TestResultsHeaderProps = HTMLAttributes<HTMLDivElement>;
6
+ declare const TestResultsHeader: ({ className, children, ...props }: TestResultsHeaderProps) => react_jsx_runtime.JSX.Element;
7
+ type TestResultsDurationProps = HTMLAttributes<HTMLSpanElement>;
8
+ declare const TestResultsDuration: ({ className, children, ...props }: TestResultsDurationProps) => react_jsx_runtime.JSX.Element | null;
9
+ type TestResultsSummaryProps = HTMLAttributes<HTMLDivElement>;
10
+ interface TestResultsSummary {
11
+ passed: number;
12
+ failed: number;
13
+ skipped: number;
14
+ total: number;
15
+ duration?: number;
16
+ }
17
+ declare const TestResultsSummary: ({ className, children, ...props }: TestResultsSummaryProps) => react_jsx_runtime.JSX.Element | null;
18
+ type TestResultsProps = HTMLAttributes<HTMLDivElement> & {
19
+ summary?: TestResultsSummary;
20
+ };
21
+ declare const TestResults: ({ summary, className, children, ...props }: TestResultsProps) => react_jsx_runtime.JSX.Element;
22
+ type TestResultsProgressProps = HTMLAttributes<HTMLDivElement>;
23
+ declare const TestResultsProgress: ({ className, children, ...props }: TestResultsProgressProps) => react_jsx_runtime.JSX.Element | null;
24
+ type TestResultsContentProps = HTMLAttributes<HTMLDivElement>;
25
+ declare const TestResultsContent: ({ className, children, ...props }: TestResultsContentProps) => react_jsx_runtime.JSX.Element;
26
+ type TestSuiteProps = ComponentProps<typeof Collapsible> & {
27
+ name: string;
28
+ status: TestStatus;
29
+ };
30
+ declare const TestSuite: ({ name, status, className, children, ...props }: TestSuiteProps) => react_jsx_runtime.JSX.Element;
31
+ type TestSuiteNameProps = ComponentProps<typeof CollapsibleTrigger>;
32
+ declare const TestSuiteName: ({ className, children, ...props }: TestSuiteNameProps) => react_jsx_runtime.JSX.Element;
33
+ type TestSuiteStatsProps = HTMLAttributes<HTMLDivElement> & {
34
+ passed?: number;
35
+ failed?: number;
36
+ skipped?: number;
37
+ };
38
+ declare const TestSuiteStats: ({ passed, failed, skipped, className, children, ...props }: TestSuiteStatsProps) => react_jsx_runtime.JSX.Element;
39
+ type TestSuiteContentProps = ComponentProps<typeof CollapsibleContent>;
40
+ declare const TestSuiteContent: ({ className, children, ...props }: TestSuiteContentProps) => react_jsx_runtime.JSX.Element;
41
+ type TestNameProps = HTMLAttributes<HTMLSpanElement>;
42
+ declare const TestName: ({ className, children, ...props }: TestNameProps) => react_jsx_runtime.JSX.Element;
43
+ type TestDurationProps = HTMLAttributes<HTMLSpanElement>;
44
+ declare const TestDuration: ({ className, children, ...props }: TestDurationProps) => react_jsx_runtime.JSX.Element | null;
45
+ type TestStatusProps = HTMLAttributes<HTMLSpanElement>;
46
+ type TestStatus = "passed" | "failed" | "skipped" | "running";
47
+ declare const TestStatus: ({ className, children, ...props }: TestStatusProps) => react_jsx_runtime.JSX.Element;
48
+ type TestProps = HTMLAttributes<HTMLDivElement> & {
49
+ name: string;
50
+ status: TestStatus;
51
+ duration?: number;
52
+ };
53
+ declare const Test: ({ name, status, duration, className, children, ...props }: TestProps) => react_jsx_runtime.JSX.Element;
54
+ type TestErrorProps = HTMLAttributes<HTMLDivElement>;
55
+ declare const TestError: ({ className, children, ...props }: TestErrorProps) => react_jsx_runtime.JSX.Element;
56
+ type TestErrorMessageProps = HTMLAttributes<HTMLParagraphElement>;
57
+ declare const TestErrorMessage: ({ className, children, ...props }: TestErrorMessageProps) => react_jsx_runtime.JSX.Element;
58
+ type TestErrorStackProps = HTMLAttributes<HTMLPreElement>;
59
+ declare const TestErrorStack: ({ className, children, ...props }: TestErrorStackProps) => react_jsx_runtime.JSX.Element;
60
+
61
+ export { Test, TestDuration, type TestDurationProps, TestError, TestErrorMessage, type TestErrorMessageProps, type TestErrorProps, TestErrorStack, type TestErrorStackProps, TestName, type TestNameProps, type TestProps, TestResults, TestResultsContent, type TestResultsContentProps, TestResultsDuration, type TestResultsDurationProps, TestResultsHeader, type TestResultsHeaderProps, TestResultsProgress, type TestResultsProgressProps, type TestResultsProps, TestResultsSummary, type TestResultsSummaryProps, TestStatus, type TestStatusProps, TestSuite, TestSuiteContent, type TestSuiteContentProps, TestSuiteName, type TestSuiteNameProps, type TestSuiteProps, TestSuiteStats, type TestSuiteStatsProps };