@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,332 @@
1
+ import { useControllableState } from '@radix-ui/react-use-controllable-state';
2
+ import { Button } from '@chatsdk-dev/ui/components/button';
3
+ import { Command, CommandDialog, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandShortcut, CommandSeparator } from '@chatsdk-dev/ui/components/command';
4
+ import { Dialog, DialogTrigger, DialogContent, DialogTitle } from '@chatsdk-dev/ui/components/dialog';
5
+ import { Spinner } from '@chatsdk-dev/ui/components/spinner';
6
+ import { cn } from '@chatsdk-dev/ui/lib/utils';
7
+ import { CircleSmallIcon, VenusAndMarsIcon, NonBinaryIcon, MarsStrokeIcon, TransgenderIcon, VenusIcon, MarsIcon, PlayIcon, PauseIcon } from 'lucide-react';
8
+ import { createContext, useContext, useMemo, useCallback } from 'react';
9
+ import { jsx, jsxs } from 'react/jsx-runtime';
10
+
11
+ var VoiceSelectorContext = createContext(
12
+ null
13
+ );
14
+ var useVoiceSelector = () => {
15
+ const context = useContext(VoiceSelectorContext);
16
+ if (!context) {
17
+ throw new Error(
18
+ "VoiceSelector components must be used within VoiceSelector"
19
+ );
20
+ }
21
+ return context;
22
+ };
23
+ var VoiceSelector = ({
24
+ value: valueProp,
25
+ defaultValue,
26
+ onValueChange,
27
+ open: openProp,
28
+ defaultOpen = false,
29
+ onOpenChange,
30
+ children,
31
+ ...props
32
+ }) => {
33
+ const [value, setValue] = useControllableState({
34
+ defaultProp: defaultValue,
35
+ onChange: onValueChange,
36
+ prop: valueProp
37
+ });
38
+ const [open, setOpen] = useControllableState({
39
+ defaultProp: defaultOpen,
40
+ onChange: (open2) => onOpenChange?.(open2, {}),
41
+ prop: openProp
42
+ });
43
+ const voiceSelectorContext = useMemo(
44
+ () => ({ open, setOpen, setValue, value }),
45
+ [value, setValue, open, setOpen]
46
+ );
47
+ return /* @__PURE__ */ jsx(VoiceSelectorContext.Provider, { value: voiceSelectorContext, children: /* @__PURE__ */ jsx(Dialog, { onOpenChange: setOpen, open, ...props, children }) });
48
+ };
49
+ var VoiceSelectorTrigger = (props) => /* @__PURE__ */ jsx(DialogTrigger, { ...props });
50
+ var VoiceSelectorContent = ({
51
+ className,
52
+ children,
53
+ title = "Voice Selector",
54
+ ...props
55
+ }) => /* @__PURE__ */ jsxs(
56
+ DialogContent,
57
+ {
58
+ "aria-describedby": void 0,
59
+ className: cn("p-0", className),
60
+ ...props,
61
+ children: [
62
+ /* @__PURE__ */ jsx(DialogTitle, { className: "sr-only", children: title }),
63
+ /* @__PURE__ */ jsx(Command, { className: "**:data-[slot=command-input-wrapper]:h-auto", children })
64
+ ]
65
+ }
66
+ );
67
+ var VoiceSelectorDialog = (props) => /* @__PURE__ */ jsx(CommandDialog, { ...props });
68
+ var VoiceSelectorInput = ({
69
+ className,
70
+ ...props
71
+ }) => /* @__PURE__ */ jsx(CommandInput, { className: cn("h-auto py-3.5", className), ...props });
72
+ var VoiceSelectorList = (props) => /* @__PURE__ */ jsx(CommandList, { ...props });
73
+ var VoiceSelectorEmpty = (props) => /* @__PURE__ */ jsx(CommandEmpty, { ...props });
74
+ var VoiceSelectorGroup = (props) => /* @__PURE__ */ jsx(CommandGroup, { ...props });
75
+ var VoiceSelectorItem = ({
76
+ className,
77
+ ...props
78
+ }) => /* @__PURE__ */ jsx(CommandItem, { className: cn("px-4 py-2", className), ...props });
79
+ var VoiceSelectorShortcut = (props) => /* @__PURE__ */ jsx(CommandShortcut, { ...props });
80
+ var VoiceSelectorSeparator = (props) => /* @__PURE__ */ jsx(CommandSeparator, { ...props });
81
+ var VoiceSelectorGender = ({
82
+ className,
83
+ value,
84
+ children,
85
+ ...props
86
+ }) => {
87
+ let icon = null;
88
+ switch (value) {
89
+ case "male": {
90
+ icon = /* @__PURE__ */ jsx(MarsIcon, { className: "size-4" });
91
+ break;
92
+ }
93
+ case "female": {
94
+ icon = /* @__PURE__ */ jsx(VenusIcon, { className: "size-4" });
95
+ break;
96
+ }
97
+ case "transgender": {
98
+ icon = /* @__PURE__ */ jsx(TransgenderIcon, { className: "size-4" });
99
+ break;
100
+ }
101
+ case "androgyne": {
102
+ icon = /* @__PURE__ */ jsx(MarsStrokeIcon, { className: "size-4" });
103
+ break;
104
+ }
105
+ case "non-binary": {
106
+ icon = /* @__PURE__ */ jsx(NonBinaryIcon, { className: "size-4" });
107
+ break;
108
+ }
109
+ case "intersex": {
110
+ icon = /* @__PURE__ */ jsx(VenusAndMarsIcon, { className: "size-4" });
111
+ break;
112
+ }
113
+ default: {
114
+ icon = /* @__PURE__ */ jsx(CircleSmallIcon, { className: "size-4" });
115
+ }
116
+ }
117
+ return /* @__PURE__ */ jsx("span", { className: cn("text-muted-foreground text-xs", className), ...props, children: children ?? icon });
118
+ };
119
+ var VoiceSelectorAccent = ({
120
+ className,
121
+ value,
122
+ children,
123
+ ...props
124
+ }) => {
125
+ let emoji = null;
126
+ switch (value) {
127
+ case "american": {
128
+ emoji = "\u{1F1FA}\u{1F1F8}";
129
+ break;
130
+ }
131
+ case "british": {
132
+ emoji = "\u{1F1EC}\u{1F1E7}";
133
+ break;
134
+ }
135
+ case "australian": {
136
+ emoji = "\u{1F1E6}\u{1F1FA}";
137
+ break;
138
+ }
139
+ case "canadian": {
140
+ emoji = "\u{1F1E8}\u{1F1E6}";
141
+ break;
142
+ }
143
+ case "irish": {
144
+ emoji = "\u{1F1EE}\u{1F1EA}";
145
+ break;
146
+ }
147
+ case "scottish": {
148
+ emoji = "\u{1F3F4}\u{E0067}\u{E0062}\u{E0073}\u{E0063}\u{E0074}\u{E007F}";
149
+ break;
150
+ }
151
+ case "indian": {
152
+ emoji = "\u{1F1EE}\u{1F1F3}";
153
+ break;
154
+ }
155
+ case "south-african": {
156
+ emoji = "\u{1F1FF}\u{1F1E6}";
157
+ break;
158
+ }
159
+ case "new-zealand": {
160
+ emoji = "\u{1F1F3}\u{1F1FF}";
161
+ break;
162
+ }
163
+ case "spanish": {
164
+ emoji = "\u{1F1EA}\u{1F1F8}";
165
+ break;
166
+ }
167
+ case "french": {
168
+ emoji = "\u{1F1EB}\u{1F1F7}";
169
+ break;
170
+ }
171
+ case "german": {
172
+ emoji = "\u{1F1E9}\u{1F1EA}";
173
+ break;
174
+ }
175
+ case "italian": {
176
+ emoji = "\u{1F1EE}\u{1F1F9}";
177
+ break;
178
+ }
179
+ case "portuguese": {
180
+ emoji = "\u{1F1F5}\u{1F1F9}";
181
+ break;
182
+ }
183
+ case "brazilian": {
184
+ emoji = "\u{1F1E7}\u{1F1F7}";
185
+ break;
186
+ }
187
+ case "mexican": {
188
+ emoji = "\u{1F1F2}\u{1F1FD}";
189
+ break;
190
+ }
191
+ case "argentinian": {
192
+ emoji = "\u{1F1E6}\u{1F1F7}";
193
+ break;
194
+ }
195
+ case "japanese": {
196
+ emoji = "\u{1F1EF}\u{1F1F5}";
197
+ break;
198
+ }
199
+ case "chinese": {
200
+ emoji = "\u{1F1E8}\u{1F1F3}";
201
+ break;
202
+ }
203
+ case "korean": {
204
+ emoji = "\u{1F1F0}\u{1F1F7}";
205
+ break;
206
+ }
207
+ case "russian": {
208
+ emoji = "\u{1F1F7}\u{1F1FA}";
209
+ break;
210
+ }
211
+ case "arabic": {
212
+ emoji = "\u{1F1F8}\u{1F1E6}";
213
+ break;
214
+ }
215
+ case "dutch": {
216
+ emoji = "\u{1F1F3}\u{1F1F1}";
217
+ break;
218
+ }
219
+ case "swedish": {
220
+ emoji = "\u{1F1F8}\u{1F1EA}";
221
+ break;
222
+ }
223
+ case "norwegian": {
224
+ emoji = "\u{1F1F3}\u{1F1F4}";
225
+ break;
226
+ }
227
+ case "danish": {
228
+ emoji = "\u{1F1E9}\u{1F1F0}";
229
+ break;
230
+ }
231
+ case "finnish": {
232
+ emoji = "\u{1F1EB}\u{1F1EE}";
233
+ break;
234
+ }
235
+ case "polish": {
236
+ emoji = "\u{1F1F5}\u{1F1F1}";
237
+ break;
238
+ }
239
+ case "turkish": {
240
+ emoji = "\u{1F1F9}\u{1F1F7}";
241
+ break;
242
+ }
243
+ case "greek": {
244
+ emoji = "\u{1F1EC}\u{1F1F7}";
245
+ break;
246
+ }
247
+ default: {
248
+ emoji = null;
249
+ }
250
+ }
251
+ return /* @__PURE__ */ jsx("span", { className: cn("text-muted-foreground text-xs", className), ...props, children: children ?? emoji });
252
+ };
253
+ var VoiceSelectorAge = ({
254
+ className,
255
+ ...props
256
+ }) => /* @__PURE__ */ jsx(
257
+ "span",
258
+ {
259
+ className: cn("text-muted-foreground text-xs tabular-nums", className),
260
+ ...props
261
+ }
262
+ );
263
+ var VoiceSelectorName = ({
264
+ className,
265
+ ...props
266
+ }) => /* @__PURE__ */ jsx(
267
+ "span",
268
+ {
269
+ className: cn("flex-1 truncate text-left font-medium", className),
270
+ ...props
271
+ }
272
+ );
273
+ var VoiceSelectorDescription = ({
274
+ className,
275
+ ...props
276
+ }) => /* @__PURE__ */ jsx("span", { className: cn("text-muted-foreground text-xs", className), ...props });
277
+ var VoiceSelectorAttributes = ({
278
+ className,
279
+ children,
280
+ ...props
281
+ }) => /* @__PURE__ */ jsx("div", { className: cn("flex items-center text-xs", className), ...props, children });
282
+ var VoiceSelectorBullet = ({
283
+ className,
284
+ ...props
285
+ }) => /* @__PURE__ */ jsx(
286
+ "span",
287
+ {
288
+ "aria-hidden": "true",
289
+ className: cn("select-none text-border", className),
290
+ ...props,
291
+ children: "\u2022"
292
+ }
293
+ );
294
+ var VoiceSelectorPreview = ({
295
+ className,
296
+ playing,
297
+ loading,
298
+ onPlay,
299
+ onClick,
300
+ ...props
301
+ }) => {
302
+ const handleClick = useCallback(
303
+ (event) => {
304
+ event.stopPropagation();
305
+ onClick?.(event);
306
+ onPlay?.();
307
+ },
308
+ [onClick, onPlay]
309
+ );
310
+ let icon = /* @__PURE__ */ jsx(PlayIcon, { className: "size-3" });
311
+ if (loading) {
312
+ icon = /* @__PURE__ */ jsx(Spinner, { className: "size-3" });
313
+ } else if (playing) {
314
+ icon = /* @__PURE__ */ jsx(PauseIcon, { className: "size-3" });
315
+ }
316
+ return /* @__PURE__ */ jsx(
317
+ Button,
318
+ {
319
+ "aria-label": playing ? "Pause preview" : "Play preview",
320
+ className: cn("size-6", className),
321
+ disabled: loading,
322
+ onClick: handleClick,
323
+ size: "icon",
324
+ type: "button",
325
+ variant: "outline",
326
+ ...props,
327
+ children: icon
328
+ }
329
+ );
330
+ };
331
+
332
+ export { VoiceSelector, VoiceSelectorAccent, VoiceSelectorAge, VoiceSelectorAttributes, VoiceSelectorBullet, VoiceSelectorContent, VoiceSelectorDescription, VoiceSelectorDialog, VoiceSelectorEmpty, VoiceSelectorGender, VoiceSelectorGroup, VoiceSelectorInput, VoiceSelectorItem, VoiceSelectorList, VoiceSelectorName, VoiceSelectorPreview, VoiceSelectorSeparator, VoiceSelectorShortcut, VoiceSelectorTrigger, useVoiceSelector };
@@ -0,0 +1,38 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { Button } from '@chatsdk-dev/ui/components/button';
3
+ import { Input } from '@chatsdk-dev/ui/components/input';
4
+ import { ComponentProps, ReactNode } from 'react';
5
+
6
+ interface WebPreviewContextValue {
7
+ url: string;
8
+ setUrl: (url: string) => void;
9
+ consoleOpen: boolean;
10
+ setConsoleOpen: (open: boolean) => void;
11
+ }
12
+ type WebPreviewProps = ComponentProps<"div"> & {
13
+ defaultUrl?: string;
14
+ onUrlChange?: (url: string) => void;
15
+ };
16
+ declare const WebPreview: ({ className, children, defaultUrl, onUrlChange, ...props }: WebPreviewProps) => react_jsx_runtime.JSX.Element;
17
+ type WebPreviewNavigationProps = ComponentProps<"div">;
18
+ declare const WebPreviewNavigation: ({ className, children, ...props }: WebPreviewNavigationProps) => react_jsx_runtime.JSX.Element;
19
+ type WebPreviewNavigationButtonProps = ComponentProps<typeof Button> & {
20
+ tooltip?: string;
21
+ };
22
+ declare const WebPreviewNavigationButton: ({ onClick, disabled, tooltip, children, ...props }: WebPreviewNavigationButtonProps) => react_jsx_runtime.JSX.Element;
23
+ type WebPreviewUrlProps = ComponentProps<typeof Input>;
24
+ declare const WebPreviewUrl: ({ value, onChange, onKeyDown, ...props }: WebPreviewUrlProps) => react_jsx_runtime.JSX.Element;
25
+ type WebPreviewBodyProps = ComponentProps<"iframe"> & {
26
+ loading?: ReactNode;
27
+ };
28
+ declare const WebPreviewBody: ({ className, loading, src, ...props }: WebPreviewBodyProps) => react_jsx_runtime.JSX.Element;
29
+ type WebPreviewConsoleProps = ComponentProps<"div"> & {
30
+ logs?: {
31
+ level: "log" | "warn" | "error";
32
+ message: string;
33
+ timestamp: Date;
34
+ }[];
35
+ };
36
+ declare const WebPreviewConsole: ({ className, logs, children, ...props }: WebPreviewConsoleProps) => react_jsx_runtime.JSX.Element;
37
+
38
+ export { WebPreview, WebPreviewBody, type WebPreviewBodyProps, WebPreviewConsole, type WebPreviewConsoleProps, type WebPreviewContextValue, WebPreviewNavigation, WebPreviewNavigationButton, type WebPreviewNavigationButtonProps, type WebPreviewNavigationProps, type WebPreviewProps, WebPreviewUrl, type WebPreviewUrlProps };
@@ -0,0 +1,214 @@
1
+ import { Button } from '@chatsdk-dev/ui/components/button';
2
+ import { Collapsible, CollapsibleTrigger, CollapsibleContent } from '@chatsdk-dev/ui/components/collapsible';
3
+ import { Input } from '@chatsdk-dev/ui/components/input';
4
+ import { TooltipProvider, Tooltip, TooltipTrigger, TooltipContent } from '@chatsdk-dev/ui/components/tooltip';
5
+ import { cn } from '@chatsdk-dev/ui/lib/utils';
6
+ import { createContext, useState, useCallback, useMemo, useContext } from 'react';
7
+ import { jsx, jsxs } from 'react/jsx-runtime';
8
+
9
+ var WebPreviewContext = createContext(null);
10
+ var useWebPreview = () => {
11
+ const context = useContext(WebPreviewContext);
12
+ if (!context) {
13
+ throw new Error("WebPreview components must be used within a WebPreview");
14
+ }
15
+ return context;
16
+ };
17
+ var WebPreview = ({
18
+ className,
19
+ children,
20
+ defaultUrl = "",
21
+ onUrlChange,
22
+ ...props
23
+ }) => {
24
+ const [url, setUrl] = useState(defaultUrl);
25
+ const [consoleOpen, setConsoleOpen] = useState(false);
26
+ const handleUrlChange = useCallback(
27
+ (newUrl) => {
28
+ setUrl(newUrl);
29
+ onUrlChange?.(newUrl);
30
+ },
31
+ [onUrlChange]
32
+ );
33
+ const contextValue = useMemo(
34
+ () => ({
35
+ consoleOpen,
36
+ setConsoleOpen,
37
+ setUrl: handleUrlChange,
38
+ url
39
+ }),
40
+ [consoleOpen, handleUrlChange, url]
41
+ );
42
+ return /* @__PURE__ */ jsx(WebPreviewContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(
43
+ "div",
44
+ {
45
+ className: cn(
46
+ "flex size-full flex-col rounded-lg border bg-card",
47
+ className
48
+ ),
49
+ ...props,
50
+ children
51
+ }
52
+ ) });
53
+ };
54
+ var WebPreviewNavigation = ({
55
+ className,
56
+ children,
57
+ ...props
58
+ }) => /* @__PURE__ */ jsx(
59
+ "div",
60
+ {
61
+ className: cn("flex items-center gap-1 border-b p-2", className),
62
+ ...props,
63
+ children
64
+ }
65
+ );
66
+ var WebPreviewNavigationButton = ({
67
+ onClick,
68
+ disabled,
69
+ tooltip,
70
+ children,
71
+ ...props
72
+ }) => /* @__PURE__ */ jsx(TooltipProvider, { children: /* @__PURE__ */ jsxs(Tooltip, { children: [
73
+ /* @__PURE__ */ jsx(
74
+ TooltipTrigger,
75
+ {
76
+ render: () => /* @__PURE__ */ jsx(
77
+ Button,
78
+ {
79
+ className: "h-8 w-8 p-0 hover:text-foreground",
80
+ disabled,
81
+ onClick,
82
+ size: "sm",
83
+ variant: "ghost",
84
+ ...props,
85
+ children
86
+ }
87
+ )
88
+ }
89
+ ),
90
+ /* @__PURE__ */ jsx(TooltipContent, { children: /* @__PURE__ */ jsx("p", { children: tooltip }) })
91
+ ] }) });
92
+ var WebPreviewUrl = ({
93
+ value,
94
+ onChange,
95
+ onKeyDown,
96
+ ...props
97
+ }) => {
98
+ const { url, setUrl } = useWebPreview();
99
+ const [prevUrl, setPrevUrl] = useState(url);
100
+ const [inputValue, setInputValue] = useState(url);
101
+ if (url !== prevUrl) {
102
+ setPrevUrl(url);
103
+ setInputValue(url);
104
+ }
105
+ const handleChange = (event) => {
106
+ setInputValue(event.target.value);
107
+ onChange?.(event);
108
+ };
109
+ const handleKeyDown = useCallback(
110
+ (event) => {
111
+ if (event.key === "Enter") {
112
+ const target = event.target;
113
+ setUrl(target.value);
114
+ }
115
+ onKeyDown?.(event);
116
+ },
117
+ [setUrl, onKeyDown]
118
+ );
119
+ return /* @__PURE__ */ jsx(
120
+ Input,
121
+ {
122
+ className: "h-8 flex-1 text-sm",
123
+ onChange: onChange ?? handleChange,
124
+ onKeyDown: handleKeyDown,
125
+ placeholder: "Enter URL...",
126
+ value: value ?? inputValue,
127
+ ...props
128
+ }
129
+ );
130
+ };
131
+ var WebPreviewBody = ({
132
+ className,
133
+ loading,
134
+ src,
135
+ ...props
136
+ }) => {
137
+ const { url } = useWebPreview();
138
+ return /* @__PURE__ */ jsxs("div", { className: "flex-1", children: [
139
+ /* @__PURE__ */ jsx(
140
+ "iframe",
141
+ {
142
+ className: cn("size-full", className),
143
+ sandbox: "allow-scripts allow-same-origin allow-forms allow-popups allow-presentation",
144
+ src: (src ?? url) || void 0,
145
+ title: "Preview",
146
+ ...props
147
+ }
148
+ ),
149
+ loading
150
+ ] });
151
+ };
152
+ var WebPreviewConsole = ({
153
+ className,
154
+ logs = [],
155
+ children,
156
+ ...props
157
+ }) => {
158
+ const { consoleOpen, setConsoleOpen } = useWebPreview();
159
+ return /* @__PURE__ */ jsxs(
160
+ Collapsible,
161
+ {
162
+ className: cn("border-t bg-muted/50 font-mono text-sm", className),
163
+ onOpenChange: setConsoleOpen,
164
+ open: consoleOpen,
165
+ ...props,
166
+ children: [
167
+ /* @__PURE__ */ jsx(
168
+ CollapsibleTrigger,
169
+ {
170
+ render: () => /* @__PURE__ */ jsx(
171
+ Button,
172
+ {
173
+ className: "flex w-full items-center justify-between p-4 text-left font-medium hover:bg-muted/50",
174
+ variant: "ghost",
175
+ children: "Console"
176
+ }
177
+ )
178
+ }
179
+ ),
180
+ /* @__PURE__ */ jsx(
181
+ CollapsibleContent,
182
+ {
183
+ className: cn(
184
+ "px-4 pb-4",
185
+ "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 outline-none data-[state=closed]:animate-out data-[state=open]:animate-in"
186
+ ),
187
+ children: /* @__PURE__ */ jsxs("div", { className: "max-h-48 space-y-1 overflow-y-auto", children: [
188
+ logs.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-muted-foreground", children: "No console output" }) : logs.map((log) => /* @__PURE__ */ jsxs(
189
+ "div",
190
+ {
191
+ className: cn(
192
+ "text-xs",
193
+ log.level === "error" && "text-destructive",
194
+ log.level === "warn" && "text-yellow-600",
195
+ log.level === "log" && "text-foreground"
196
+ ),
197
+ children: [
198
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: log.timestamp.toLocaleTimeString() }),
199
+ " ",
200
+ log.message
201
+ ]
202
+ },
203
+ `${log.timestamp.getTime()}-${log.level}-${log.message}`
204
+ )),
205
+ children
206
+ ] })
207
+ }
208
+ )
209
+ ]
210
+ }
211
+ );
212
+ };
213
+
214
+ export { WebPreview, WebPreviewBody, WebPreviewConsole, WebPreviewNavigation, WebPreviewNavigationButton, WebPreviewUrl };
@@ -0,0 +1,14 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as react from 'react';
3
+
4
+ interface InfoCardProps {
5
+ title: string;
6
+ description?: string;
7
+ children?: react.ReactNode;
8
+ actionLabel?: string;
9
+ onActionClick?: () => void;
10
+ className?: string;
11
+ }
12
+ declare function InfoCard({ title, description, children, actionLabel, onActionClick, className, }: InfoCardProps): react_jsx_runtime.JSX.Element;
13
+
14
+ export { InfoCard, type InfoCardProps };
@@ -0,0 +1 @@
1
+ export { InfoCard } from '../chunk-EGIUE7H2.js';
@@ -0,0 +1,19 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface ResponsiveAlertDialogProps {
4
+ open?: boolean;
5
+ onOpenChange?: (open: boolean) => void;
6
+ children?: React.ReactNode;
7
+ trigger?: React.ReactElement;
8
+ title?: React.ReactNode;
9
+ titleIcon?: React.ReactNode;
10
+ description?: React.ReactNode;
11
+ isPending?: boolean;
12
+ action?: React.ReactNode;
13
+ onAction?: (e: React.MouseEvent<HTMLButtonElement>) => void;
14
+ cancelLabel?: React.ReactNode;
15
+ onCancel?: (e: React.MouseEvent<HTMLButtonElement>) => void;
16
+ }
17
+ declare function ResponsiveAlertDialog({ open, onOpenChange, children, trigger, title, titleIcon, description, isPending, action, onAction, cancelLabel, onCancel, }: ResponsiveAlertDialogProps): react_jsx_runtime.JSX.Element;
18
+
19
+ export { ResponsiveAlertDialog, type ResponsiveAlertDialogProps };
@@ -0,0 +1 @@
1
+ export { ResponsiveAlertDialog } from '../chunk-QTRMNIG3.js';
@@ -0,0 +1,14 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface ResponsiveDialogProps {
4
+ open?: boolean;
5
+ onOpenChange?: (open: boolean) => void;
6
+ trigger?: React.ReactElement;
7
+ title?: string;
8
+ description?: string;
9
+ children: React.ReactNode;
10
+ footer?: React.ReactNode;
11
+ }
12
+ declare function ResponsiveDialog({ open, onOpenChange, trigger, children, title, description, footer, }: ResponsiveDialogProps): react_jsx_runtime.JSX.Element;
13
+
14
+ export { ResponsiveDialog, type ResponsiveDialogProps };
@@ -0,0 +1 @@
1
+ export { ResponsiveDialog } from '../chunk-YXFVHSY4.js';