ai-schadcn-chat 0.1.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 (221) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +307 -0
  3. package/dist/ChatPanel-Cyq7boWQ.js +3468 -0
  4. package/dist/ChatPanel-Cyq7boWQ.js.map +1 -0
  5. package/dist/ChatPanel-D3VL5Vdq.cjs +10 -0
  6. package/dist/ChatPanel-D3VL5Vdq.cjs.map +1 -0
  7. package/dist/ChatProvider-DcrNbVMh.cjs +2 -0
  8. package/dist/ChatProvider-DcrNbVMh.cjs.map +1 -0
  9. package/dist/ChatProvider-DoD4jj4M.js +128 -0
  10. package/dist/ChatProvider-DoD4jj4M.js.map +1 -0
  11. package/dist/chat-engine-BaFdimfx.cjs +8 -0
  12. package/dist/chat-engine-BaFdimfx.cjs.map +1 -0
  13. package/dist/chat-engine-Cja0KtWE.js +520 -0
  14. package/dist/chat-engine-Cja0KtWE.js.map +1 -0
  15. package/dist/components/chat/AgentManager.d.ts +11 -0
  16. package/dist/components/chat/AgentManager.d.ts.map +1 -0
  17. package/dist/components/chat/AgentManager.js +110 -0
  18. package/dist/components/chat/Attachment.d.ts +34 -0
  19. package/dist/components/chat/Attachment.d.ts.map +1 -0
  20. package/dist/components/chat/Attachment.js +59 -0
  21. package/dist/components/chat/AttachmentPreview.d.ts +8 -0
  22. package/dist/components/chat/AttachmentPreview.d.ts.map +1 -0
  23. package/dist/components/chat/AttachmentPreview.js +43 -0
  24. package/dist/components/chat/ChatComposer.d.ts +11 -0
  25. package/dist/components/chat/ChatComposer.d.ts.map +1 -0
  26. package/dist/components/chat/ChatComposer.js +10 -0
  27. package/dist/components/chat/ChatHeader.d.ts +5 -0
  28. package/dist/components/chat/ChatHeader.d.ts.map +1 -0
  29. package/dist/components/chat/ChatHeader.js +132 -0
  30. package/dist/components/chat/ChatPanel.d.ts +36 -0
  31. package/dist/components/chat/ChatPanel.d.ts.map +1 -0
  32. package/dist/components/chat/ChatPanel.js +55 -0
  33. package/dist/components/chat/ChatProvider.d.ts +58 -0
  34. package/dist/components/chat/ChatProvider.d.ts.map +1 -0
  35. package/dist/components/chat/ChatProvider.js +145 -0
  36. package/dist/components/chat/Chatbubble.d.ts +30 -0
  37. package/dist/components/chat/Chatbubble.d.ts.map +1 -0
  38. package/dist/components/chat/Chatbubble.js +50 -0
  39. package/dist/components/chat/Markdown.d.ts +35 -0
  40. package/dist/components/chat/Markdown.d.ts.map +1 -0
  41. package/dist/components/chat/Markdown.js +130 -0
  42. package/dist/components/chat/Message.d.ts +22 -0
  43. package/dist/components/chat/Message.d.ts.map +1 -0
  44. package/dist/components/chat/Message.js +21 -0
  45. package/dist/components/chat/MessageInput.d.ts +24 -0
  46. package/dist/components/chat/MessageInput.d.ts.map +1 -0
  47. package/dist/components/chat/MessageInput.js +255 -0
  48. package/dist/components/chat/MessageList.d.ts +9 -0
  49. package/dist/components/chat/MessageList.d.ts.map +1 -0
  50. package/dist/components/chat/MessageList.js +249 -0
  51. package/dist/components/chat/MessageMarker.d.ts +25 -0
  52. package/dist/components/chat/MessageMarker.d.ts.map +1 -0
  53. package/dist/components/chat/MessageMarker.js +31 -0
  54. package/dist/components/chat/MessageScroller.d.ts +12 -0
  55. package/dist/components/chat/MessageScroller.d.ts.map +1 -0
  56. package/dist/components/chat/MessageScroller.js +48 -0
  57. package/dist/components/chat/MessageScrollerPrimitives.d.ts +76 -0
  58. package/dist/components/chat/MessageScrollerPrimitives.d.ts.map +1 -0
  59. package/dist/components/chat/MessageScrollerPrimitives.js +438 -0
  60. package/dist/components/chat/ProviderManager.d.ts +10 -0
  61. package/dist/components/chat/ProviderManager.d.ts.map +1 -0
  62. package/dist/components/chat/ProviderManager.js +110 -0
  63. package/dist/components/chat/ReasoningPanel.d.ts +15 -0
  64. package/dist/components/chat/ReasoningPanel.d.ts.map +1 -0
  65. package/dist/components/chat/ReasoningPanel.js +40 -0
  66. package/dist/components/chat/ThemeToggle.d.ts +4 -0
  67. package/dist/components/chat/ThemeToggle.d.ts.map +1 -0
  68. package/dist/components/chat/ThemeToggle.js +59 -0
  69. package/dist/components/index.d.ts +44 -0
  70. package/dist/components/index.d.ts.map +1 -0
  71. package/dist/components/index.js +49 -0
  72. package/dist/components/ui/avatar.d.ts +11 -0
  73. package/dist/components/ui/avatar.d.ts.map +1 -0
  74. package/dist/components/ui/avatar.js +33 -0
  75. package/dist/components/ui/badge.d.ts +10 -0
  76. package/dist/components/ui/badge.d.ts.map +1 -0
  77. package/dist/components/ui/badge.js +19 -0
  78. package/dist/components/ui/button.d.ts +12 -0
  79. package/dist/components/ui/button.d.ts.map +1 -0
  80. package/dist/components/ui/button.js +34 -0
  81. package/dist/components/ui/card.d.ts +8 -0
  82. package/dist/components/ui/card.d.ts.map +1 -0
  83. package/dist/components/ui/card.js +15 -0
  84. package/dist/components/ui/checkbox.d.ts +5 -0
  85. package/dist/components/ui/checkbox.d.ts.map +1 -0
  86. package/dist/components/ui/checkbox.js +8 -0
  87. package/dist/components/ui/collapsible.d.ts +6 -0
  88. package/dist/components/ui/collapsible.d.ts.map +1 -0
  89. package/dist/components/ui/collapsible.js +5 -0
  90. package/dist/components/ui/dialog.d.ts +24 -0
  91. package/dist/components/ui/dialog.d.ts.map +1 -0
  92. package/dist/components/ui/dialog.js +30 -0
  93. package/dist/components/ui/dropdown-menu.d.ts +17 -0
  94. package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
  95. package/dist/components/ui/dropdown-menu.js +20 -0
  96. package/dist/components/ui/input.d.ts +4 -0
  97. package/dist/components/ui/input.d.ts.map +1 -0
  98. package/dist/components/ui/input.js +7 -0
  99. package/dist/components/ui/label.d.ts +6 -0
  100. package/dist/components/ui/label.d.ts.map +1 -0
  101. package/dist/components/ui/label.js +10 -0
  102. package/dist/components/ui/popover.d.ts +6 -0
  103. package/dist/components/ui/popover.d.ts.map +1 -0
  104. package/dist/components/ui/popover.js +9 -0
  105. package/dist/components/ui/scroll-area.d.ts +3 -0
  106. package/dist/components/ui/scroll-area.d.ts.map +1 -0
  107. package/dist/components/ui/scroll-area.js +8 -0
  108. package/dist/components/ui/select.d.ts +14 -0
  109. package/dist/components/ui/select.d.ts.map +1 -0
  110. package/dist/components/ui/select.js +26 -0
  111. package/dist/components/ui/separator.d.ts +3 -0
  112. package/dist/components/ui/separator.d.ts.map +1 -0
  113. package/dist/components/ui/separator.js +6 -0
  114. package/dist/components/ui/switch.d.ts +3 -0
  115. package/dist/components/ui/switch.d.ts.map +1 -0
  116. package/dist/components/ui/switch.js +6 -0
  117. package/dist/components/ui/tabs.d.ts +6 -0
  118. package/dist/components/ui/tabs.d.ts.map +1 -0
  119. package/dist/components/ui/tabs.js +11 -0
  120. package/dist/components/ui/tooltip.d.ts +6 -0
  121. package/dist/components/ui/tooltip.d.ts.map +1 -0
  122. package/dist/components/ui/tooltip.js +9 -0
  123. package/dist/components.cjs +2 -0
  124. package/dist/components.cjs.map +1 -0
  125. package/dist/components.js +129 -0
  126. package/dist/components.js.map +1 -0
  127. package/dist/hooks/index.d.ts +2 -0
  128. package/dist/hooks/index.d.ts.map +1 -0
  129. package/dist/hooks/index.js +3 -0
  130. package/dist/hooks/useChat.d.ts +6 -0
  131. package/dist/hooks/useChat.d.ts.map +1 -0
  132. package/dist/hooks/useChat.js +5 -0
  133. package/dist/hooks.cjs +2 -0
  134. package/dist/hooks.cjs.map +1 -0
  135. package/dist/hooks.js +8 -0
  136. package/dist/hooks.js.map +1 -0
  137. package/dist/index-Ci4qkGOp.cjs +20 -0
  138. package/dist/index-Ci4qkGOp.cjs.map +1 -0
  139. package/dist/index-NhYr-cEJ.js +567 -0
  140. package/dist/index-NhYr-cEJ.js.map +1 -0
  141. package/dist/index.cjs +2 -0
  142. package/dist/index.cjs.map +1 -0
  143. package/dist/index.d.ts +33 -0
  144. package/dist/index.d.ts.map +1 -0
  145. package/dist/index.js +32 -0
  146. package/dist/index.js.map +1 -0
  147. package/dist/lib/agents.d.ts +29 -0
  148. package/dist/lib/agents.d.ts.map +1 -0
  149. package/dist/lib/agents.js +145 -0
  150. package/dist/lib/attachments.d.ts +40 -0
  151. package/dist/lib/attachments.d.ts.map +1 -0
  152. package/dist/lib/attachments.js +152 -0
  153. package/dist/lib/chat-engine.d.ts +109 -0
  154. package/dist/lib/chat-engine.d.ts.map +1 -0
  155. package/dist/lib/chat-engine.js +505 -0
  156. package/dist/lib/index.d.ts +8 -0
  157. package/dist/lib/index.d.ts.map +1 -0
  158. package/dist/lib/index.js +7 -0
  159. package/dist/lib/persistence.d.ts +30 -0
  160. package/dist/lib/persistence.d.ts.map +1 -0
  161. package/dist/lib/persistence.js +104 -0
  162. package/dist/lib/providers.d.ts +40 -0
  163. package/dist/lib/providers.d.ts.map +1 -0
  164. package/dist/lib/providers.js +0 -0
  165. package/dist/lib/tw-merge.d.ts +9 -0
  166. package/dist/lib/tw-merge.d.ts.map +1 -0
  167. package/dist/lib/tw-merge.js +8 -0
  168. package/dist/lib/utils.d.ts +69 -0
  169. package/dist/lib/utils.d.ts.map +1 -0
  170. package/dist/lib/utils.js +166 -0
  171. package/dist/lib/voice.d.ts +57 -0
  172. package/dist/lib/voice.d.ts.map +1 -0
  173. package/dist/lib/voice.js +103 -0
  174. package/dist/lib.cjs +2 -0
  175. package/dist/lib.cjs.map +1 -0
  176. package/dist/lib.js +59 -0
  177. package/dist/lib.js.map +1 -0
  178. package/dist/marker.css +68 -0
  179. package/dist/package.json +6 -0
  180. package/dist/presets-BxnbImSM.cjs +2 -0
  181. package/dist/presets-BxnbImSM.cjs.map +1 -0
  182. package/dist/presets-D8VQTD8n.js +193 -0
  183. package/dist/presets-D8VQTD8n.js.map +1 -0
  184. package/dist/providers/anthropic.d.ts +30 -0
  185. package/dist/providers/anthropic.d.ts.map +1 -0
  186. package/dist/providers/anthropic.js +251 -0
  187. package/dist/providers/base.d.ts +55 -0
  188. package/dist/providers/base.d.ts.map +1 -0
  189. package/dist/providers/base.js +272 -0
  190. package/dist/providers/index.d.ts +15 -0
  191. package/dist/providers/index.d.ts.map +1 -0
  192. package/dist/providers/index.js +24 -0
  193. package/dist/providers/openai.d.ts +31 -0
  194. package/dist/providers/openai.d.ts.map +1 -0
  195. package/dist/providers/openai.js +192 -0
  196. package/dist/providers-BuaGy2tX.cjs +4 -0
  197. package/dist/providers-BuaGy2tX.cjs.map +1 -0
  198. package/dist/providers-kp-avTNl.js +324 -0
  199. package/dist/providers-kp-avTNl.js.map +1 -0
  200. package/dist/providers.cjs +2 -0
  201. package/dist/providers.cjs.map +1 -0
  202. package/dist/providers.js +14 -0
  203. package/dist/providers.js.map +1 -0
  204. package/dist/scroller.css +278 -0
  205. package/dist/style.css +1 -0
  206. package/dist/types/chat.d.ts +342 -0
  207. package/dist/types/chat.d.ts.map +1 -0
  208. package/dist/types/chat.js +4 -0
  209. package/dist/types/index.d.ts +9 -0
  210. package/dist/types/index.d.ts.map +1 -0
  211. package/dist/types/index.js +14 -0
  212. package/dist/types/presets.d.ts +25 -0
  213. package/dist/types/presets.d.ts.map +1 -0
  214. package/dist/types/presets.js +207 -0
  215. package/dist/types.cjs +2 -0
  216. package/dist/types.cjs.map +1 -0
  217. package/dist/types.js +16 -0
  218. package/dist/types.js.map +1 -0
  219. package/dist/typeset-presets.css +56 -0
  220. package/dist/typeset.css +505 -0
  221. package/package.json +158 -0
package/dist/style.css ADDED
@@ -0,0 +1 @@
1
+ @property --scroll-fade-t{syntax: "<length-percentage>"; inherits: false; initial-value: 0px;}@property --scroll-fade-b{syntax: "<length-percentage>"; inherits: false; initial-value: 0px;}@property --scroll-fade-s{syntax: "<length-percentage>"; inherits: false; initial-value: 0px;}@property --scroll-fade-e{syntax: "<length-percentage>"; inherits: false; initial-value: 0px;}@property --scroll-fade-mask{syntax: "*"; inherits: false;}@keyframes scroll-fade-reveal-t{0%{--scroll-fade-t: 0px}to{--scroll-fade-t: var( --_scroll-fade-size-t, var(--scroll-fade-size, min(12%, calc(var(--spacing, .25rem) * 10))) )}}@keyframes scroll-fade-reveal-b{0%{--scroll-fade-b: var( --_scroll-fade-size-b, var(--scroll-fade-size, min(12%, calc(var(--spacing, .25rem) * 10))) )}to{--scroll-fade-b: 0px}}@keyframes scroll-fade-reveal-s{0%{--scroll-fade-s: 0px}to{--scroll-fade-s: var( --_scroll-fade-size-s, var(--scroll-fade-size, min(12%, calc(var(--spacing, .25rem) * 10))) )}}@keyframes scroll-fade-reveal-e{0%{--scroll-fade-e: var( --_scroll-fade-size-e, var(--scroll-fade-size, min(12%, calc(var(--spacing, .25rem) * 10))) )}to{--scroll-fade-e: 0px}}.scroll-fade-y,.scroll-fade{--_scroll-fade-size-t: var( --scroll-fade-t-size, var(--scroll-fade-size, min(12%, calc(var(--spacing, .25rem) * 10))) );--_scroll-fade-size-b: var( --scroll-fade-b-size, var(--scroll-fade-size, min(12%, calc(var(--spacing, .25rem) * 10))) );--scroll-fade-block: linear-gradient( to bottom, transparent 0, #000 var(--scroll-fade-t, 0px), #000 calc(100% - var(--scroll-fade-b, 0px)), transparent 100% );-webkit-mask-image:var(--scroll-fade-mask, var(--scroll-fade-block));mask-image:var(--scroll-fade-mask, var(--scroll-fade-block));-webkit-mask-composite:source-in;mask-composite:intersect;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.scroll-fade-b{--_scroll-fade-size-b: var( --scroll-fade-b-size, var(--scroll-fade-size, min(12%, calc(var(--spacing, .25rem) * 10))) );--scroll-fade-block: linear-gradient( to bottom, transparent 0, #000 0, #000 calc(100% - var(--scroll-fade-b, 0px)), transparent 100% );-webkit-mask-image:var(--scroll-fade-mask, var(--scroll-fade-block));mask-image:var(--scroll-fade-mask, var(--scroll-fade-block));-webkit-mask-composite:source-in;mask-composite:intersect;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}@supports (animation-timeline: scroll()){.scroll-fade-y,.scroll-fade{animation:scroll-fade-reveal-t 1ms ease-in-out,scroll-fade-reveal-b 1ms ease-in-out;animation-timeline:scroll(self y),scroll(self y);animation-range:0 var(--scroll-fade-reveal, calc(var(--spacing, .25rem) * 24)),calc(100% - var(--scroll-fade-reveal, calc(var(--spacing, .25rem) * 24))) 100%;animation-fill-mode:both}.scroll-fade-b{animation:scroll-fade-reveal-b 1ms ease-in-out;animation-timeline:scroll(self y);animation-range:0 var(--scroll-fade-reveal, calc(var(--spacing, .25rem) * 24));animation-fill-mode:both}}@supports not (animation-timeline: scroll()){.scroll-fade-y,.scroll-fade{--scroll-fade-t: var(--_scroll-fade-size-t);--scroll-fade-b: var(--_scroll-fade-size-b)}.scroll-fade-b{--scroll-fade-b: var(--_scroll-fade-size-b)}}.scroll-fade-x{--_scroll-fade-size-s: var( --scroll-fade-s-size, var(--scroll-fade-size, min(12%, calc(var(--spacing, .25rem) * 10))) );--_scroll-fade-size-e: var( --scroll-fade-e-size, var(--scroll-fade-size, min(12%, calc(var(--spacing, .25rem) * 10))) );--scroll-fade-inline: linear-gradient( to right, transparent 0, #000 var(--scroll-fade-s, 0px), #000 calc(100% - var(--scroll-fade-e, 0px)), transparent 100% );-webkit-mask-image:var(--scroll-fade-mask, var(--scroll-fade-inline));mask-image:var(--scroll-fade-mask, var(--scroll-fade-inline));-webkit-mask-composite:source-in;mask-composite:intersect;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}@supports (animation-timeline: scroll()){.scroll-fade-x{animation:scroll-fade-reveal-s 1ms ease-in-out,scroll-fade-reveal-e 1ms ease-in-out;animation-timeline:scroll(self inline),scroll(self inline);animation-range:0 var(--scroll-fade-reveal, calc(var(--spacing, .25rem) * 24)),calc(100% - var(--scroll-fade-reveal, calc(var(--spacing, .25rem) * 24))) 100%;animation-fill-mode:both}}@supports not (animation-timeline: scroll()){.scroll-fade-x{--scroll-fade-s: var(--_scroll-fade-size-s);--scroll-fade-e: var(--_scroll-fade-size-e)}}.scrollbar-none,.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.scrollbar-none::-webkit-scrollbar,.no-scrollbar::-webkit-scrollbar{display:none}.scrollbar-thin{scrollbar-width:thin}.scrollbar-thin::-webkit-scrollbar{width:8px;height:8px}.scrollbar-thin::-webkit-scrollbar-thumb{background-color:hsl(var(--muted-foreground) / .35);border-radius:8px}.scrollbar-thin::-webkit-scrollbar-track{background-color:transparent}.scrollbar-gutter-stable{scrollbar-gutter:stable}@supports not (scrollbar-gutter: stable){.scrollbar-gutter-stable{overflow-y:scroll}}.overscroll-contain{overscroll-behavior:contain}.overscroll-x-contain{overscroll-behavior-x:contain}.overscroll-y-contain{overscroll-behavior-y:contain}.contain-content{contain:content}@property --shimmer-angle{syntax: "<angle>"; inherits: true; initial-value: 20deg;}@property --shimmer-image{syntax: "*"; inherits: false;}@property --shimmer-text-fill{syntax: "*"; inherits: false;}@keyframes tw-shimmer{0%{background-position:100% 0}to{background-position:0 0}}.shimmer{background-image:var( --shimmer-image, linear-gradient( var(--shimmer-angle, 20deg), hsl(var(--muted-foreground) / 0) 0%, hsl(var(--muted-foreground) / .5) 50%, hsl(var(--muted-foreground) / 0) 100% ) );background-size:200% 100%;background-repeat:no-repeat;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var( --shimmer-text-fill, hsl(var(--muted-foreground) / .5) );color:var( --shimmer-text-fill, hsl(var(--muted-foreground) / .5) );animation:tw-shimmer 1.6s linear infinite}@media (prefers-reduced-motion: reduce){.shimmer{animation:none;background-image:none;-webkit-text-fill-color:currentColor}}
@@ -0,0 +1,342 @@
1
+ export type Role = "system" | "user" | "assistant" | "tool";
2
+ export type ProviderKind =
3
+ /** Native Anthropic Messages API (https://docs.anthropic.com) */
4
+ "anthropic"
5
+ /** Native OpenAI Chat Completions API (https://platform.openai.com) */
6
+ | "openai"
7
+ /** Anything that speaks the OpenAI Chat Completions protocol (OpenRouter, MiniMax, Together, Groq, vLLM, Ollama /openai, etc.) */
8
+ | "openai-compatible";
9
+ export interface ApiCredentials {
10
+ /** Bearer token sent in the Authorization header. For MiniMax use the dedicated MINIMAX_API_KEY. */
11
+ apiKey: string;
12
+ /** Optional secondary key (some gateways accept x-api-key + Authorization). */
13
+ secondaryKey?: string;
14
+ secondaryKeyHeader?: string;
15
+ }
16
+ export interface ProviderConfig {
17
+ kind: ProviderKind;
18
+ /** Base URL of the API. The package appends the path itself (e.g. /v1/messages or /v1/chat/completions). */
19
+ baseUrl: string;
20
+ /** Defaults to Authorization: Bearer <key>. Override to use x-api-key, custom header, etc. */
21
+ authHeader?: "bearer" | "x-api-key" | {
22
+ name: string;
23
+ prefix?: string;
24
+ };
25
+ credentials: ApiCredentials;
26
+ /** Optional organization / project headers. */
27
+ organization?: string;
28
+ project?: string;
29
+ /** Optional default headers merged into every request. */
30
+ defaultHeaders?: Record<string, string>;
31
+ /** Path appended to baseUrl for chat completions. Override when proxying. */
32
+ chatPath?: string;
33
+ }
34
+ export interface ModelDescriptor {
35
+ /** Provider-specific model id (claude-sonnet-4-5, gpt-4o, MiniMax-M2, etc.) */
36
+ id: string;
37
+ /** Display label shown in the UI. Defaults to id. */
38
+ label?: string;
39
+ /** Context window in tokens (used by the UI to warn when the conversation gets close to the limit). */
40
+ contextWindow?: number;
41
+ /** True for models that can read images / pdf attachments. */
42
+ vision?: boolean;
43
+ /** True for models that accept tool / function calling. */
44
+ tools?: boolean;
45
+ /** Max tokens the model can produce in a single turn. */
46
+ maxOutput?: number;
47
+ /** Provider kind override. Defaults to the provider defined in ChatConfig.provider.kind. */
48
+ provider?: ProviderKind;
49
+ /** Extra model-specific headers (x-title etc.). */
50
+ headers?: Record<string, string>;
51
+ }
52
+ export interface PersonalityConfig {
53
+ /** Short name displayed in the UI (e.g. "Edd's coding buddy"). */
54
+ name?: string;
55
+ /** Visible avatar URL or icon name. */
56
+ avatar?: string;
57
+ /** Tone presets users can pick. */
58
+ tone?: "friendly" | "professional" | "casual" | "concise" | "playful" | "academic" | "sarcastic" | string;
59
+ /** Free-form tone override appended to the system prompt. */
60
+ customTone?: string;
61
+ /** Locale for responses ("en", "es", "fr-CA", etc.). */
62
+ locale?: string;
63
+ }
64
+ export interface PromptDocument {
65
+ /** Unique id. */
66
+ id: string;
67
+ /** Display name in the docs picker. */
68
+ name: string;
69
+ /** Description shown as tooltip / helper text. */
70
+ description?: string;
71
+ /** Whether to inject this doc on every turn. */
72
+ alwaysOn?: boolean;
73
+ /** Markdown / plain-text body. */
74
+ body: string;
75
+ }
76
+ export interface ToolDefinition {
77
+ name: string;
78
+ description: string;
79
+ /** JSON Schema for the tool parameters. */
80
+ parameters: Record<string, unknown>;
81
+ /** Optional runtime handler. Returned values become the tool message. */
82
+ handler?: (args: Record<string, unknown>, ctx: ToolCallContext) => Promise<unknown> | unknown;
83
+ }
84
+ export interface ToolCallContext {
85
+ signal?: AbortSignal;
86
+ conversationId?: string;
87
+ }
88
+ export interface ChatConfig {
89
+ provider: ProviderConfig;
90
+ model: ModelDescriptor;
91
+ /** Master system prompt. Injected before any document. */
92
+ systemPrompt: string;
93
+ /** Extra context documents the model can pull from (linked as additional system messages). */
94
+ documents?: PromptDocument[];
95
+ personality?: PersonalityConfig;
96
+ /** Hard cap on tokens we will feed back into the API. Older messages are dropped (sliding window). */
97
+ maxContextTokens?: number;
98
+ /** Sampling. */
99
+ temperature?: number;
100
+ topP?: number;
101
+ /** Anthropic extended thinking. */
102
+ thinking?: {
103
+ enabled: boolean;
104
+ budgetTokens?: number;
105
+ };
106
+ /** Stop sequences sent to the API. */
107
+ stopSequences?: string[];
108
+ /** Retry policy for transient errors (429/5xx/network). */
109
+ retry?: {
110
+ attempts?: number;
111
+ initialDelayMs?: number;
112
+ maxDelayMs?: number;
113
+ };
114
+ /** When true, persist conversations to localStorage under this key. */
115
+ persistKey?: string | false;
116
+ /** Customize UI text & behavior. Every field is optional; sensible defaults ship. */
117
+ ui?: UiConfig;
118
+ /** User-defined tools. */
119
+ tools?: ToolDefinition[];
120
+ /** Optional callback fired after each successful response. */
121
+ onResponse?: (msg: ChatMessage, ctx: {
122
+ conversationId: string;
123
+ }) => void;
124
+ /** Optional callback fired on every error (network, parse, abort, tool). */
125
+ onError?: (err: ChatError, ctx: {
126
+ conversationId: string;
127
+ }) => void;
128
+ }
129
+ export interface TypesetConfig {
130
+ /**
131
+ * Master switch. Defaults to `true` when the block is present. Set to `false`
132
+ * to opt a single chat out of typeset styling and fall back to `ai-prose`.
133
+ */
134
+ enabled?: boolean;
135
+ /**
136
+ * Which preset class to apply alongside the base `.typeset`. The CSS that
137
+ * ships with the package defines `typeset-chat`, `typeset-docs`,
138
+ * `typeset-reading`, `typeset-compact`, `typeset-large`. `"default"` means
139
+ * "no preset, just the base container".
140
+ */
141
+ preset?: TypesetPreset;
142
+ /** Override `--typeset-size` (base text size). Any CSS length. */
143
+ size?: string;
144
+ /** Override `--typeset-leading` (line-height multiplier). Unitless number. */
145
+ leading?: number;
146
+ /** Override `--typeset-flow` (space between blocks). Any CSS length. */
147
+ flow?: string;
148
+ /** Override the body font family inside markdown. Any CSS font-family value. */
149
+ fontBody?: string;
150
+ /** Override the heading font family inside markdown. */
151
+ fontHeading?: string;
152
+ /** Override the monospace font family inside code blocks. */
153
+ fontMono?: string;
154
+ }
155
+ export type TypesetPreset = "default" | "chat" | "docs" | "reading" | "compact" | "large";
156
+ export interface UiConfig {
157
+ title?: string;
158
+ subtitle?: string;
159
+ placeholder?: string;
160
+ emptyState?: ReactNodeLike;
161
+ /**
162
+ * Markdown styling preset + overrides from [shadcn/typeset](https://ui.shadcn.com/docs/typeset).
163
+ * When set, the assistant's markdown renders through `.typeset` with the chosen preset
164
+ * and any rhythm overrides you supply. When undefined or `enabled === false`, the
165
+ * package falls back to its built-in `ai-prose` styling so existing consumers see
166
+ * no change.
167
+ */
168
+ typeset?: TypesetConfig;
169
+ /** Headline shown on the welcome screen (defaults to a greeting). */
170
+ greeting?: string;
171
+ /** Quick-start prompt chips shown on the empty welcome screen. */
172
+ suggestions?: string[];
173
+ showModelSelector?: boolean;
174
+ showDocumentPicker?: boolean;
175
+ showToolCalls?: boolean;
176
+ showTokenCount?: boolean;
177
+ showTimestamps?: boolean;
178
+ enableFileUpload?: boolean;
179
+ enableVoiceInput?: boolean;
180
+ enableMarkdown?: boolean;
181
+ enableMdx?: boolean;
182
+ enableCodeHighlight?: boolean;
183
+ enableCopyButtons?: boolean;
184
+ enableMessageActions?: boolean;
185
+ enableConversationHistory?: boolean;
186
+ enableRegenerate?: boolean;
187
+ /**
188
+ * Whether each message exposes an "edit and resend" action. Defaults to true
189
+ * to match the catalog; flip off to hide the button in the per-message
190
+ * overflow menu.
191
+ */
192
+ enableEditAndResend?: boolean;
193
+ enableEdit?: boolean;
194
+ maxFileSizeMb?: number;
195
+ acceptedFileTypes?: string[];
196
+ theme?: "light" | "dark" | "system";
197
+ accentColor?: string;
198
+ fontFamily?: string;
199
+ density?: "compact" | "comfortable" | "spacious";
200
+ layout?: "panel" | "floating" | "fullpage";
201
+ height?: number | string;
202
+ width?: number | string;
203
+ position?: "bottom-right" | "bottom-left" | "top-right" | "top-left";
204
+ className?: string;
205
+ renderMessage?: (msg: ChatMessage) => ReactNodeLike;
206
+ renderHeader?: () => ReactNodeLike;
207
+ renderFooter?: () => ReactNodeLike;
208
+ }
209
+ export type ReactNodeLike = unknown;
210
+ export type MessageStatus = "pending" | "streaming" | "complete" | "error" | "aborted";
211
+ export interface AttachmentMeta {
212
+ id: string;
213
+ name: string;
214
+ mimeType: string;
215
+ /** Optional short alias for mimeType used by some components. */
216
+ mime?: string;
217
+ size: number;
218
+ /** Inline base64. Use only for small files; large files should be uploaded externally and stored as URL. */
219
+ dataUrl?: string;
220
+ url?: string;
221
+ /** Optional extracted text (for .txt/.md/.csv). */
222
+ text?: string;
223
+ }
224
+ /**
225
+ * A saved, switchable assistant configuration. Applying an agent updates the
226
+ * chat's system prompt, personality, and starter suggestions in one shot.
227
+ * Built-in agents ship with the package and are read-only; user agents are
228
+ * persisted to localStorage and fully editable.
229
+ */
230
+ export interface Agent {
231
+ id: string;
232
+ name: string;
233
+ description?: string;
234
+ /** Emoji shown as the agent's mark (e.g. "🤖"). */
235
+ icon?: string;
236
+ systemPrompt: string;
237
+ tone?: PersonalityConfig["tone"];
238
+ locale?: string;
239
+ /** Quick-start prompt chips shown on the welcome screen for this agent. */
240
+ suggestions?: string[];
241
+ /** Built-ins cannot be edited or deleted (only duplicated). */
242
+ builtIn?: boolean;
243
+ }
244
+ /**
245
+ * A saved LLM provider profile: connection details (kind, base URL, key) plus
246
+ * the list of models it exposes. Used by the provider manager to CRUD and
247
+ * switch providers/models at runtime. Persisted to localStorage.
248
+ */
249
+ export interface ProviderProfile {
250
+ id: string;
251
+ name: string;
252
+ /** Emoji mark shown in the picker. */
253
+ icon?: string;
254
+ kind: ProviderKind;
255
+ baseUrl: string;
256
+ apiKey: string;
257
+ /** Defaults to "x-api-key" for anthropic, "bearer" otherwise. */
258
+ authHeader?: ProviderConfig["authHeader"];
259
+ /** Models this provider exposes in the switcher. */
260
+ models: ModelDescriptor[];
261
+ }
262
+ /** Lightweight conversation descriptor for history menus. */
263
+ export interface ConversationMeta {
264
+ id: string;
265
+ title: string;
266
+ updatedAt: number;
267
+ messageCount: number;
268
+ }
269
+ export interface ToolCallRecord {
270
+ id: string;
271
+ name: string;
272
+ arguments: Record<string, unknown>;
273
+ result?: unknown;
274
+ error?: string;
275
+ status: "running" | "complete" | "error";
276
+ }
277
+ export interface ChatMessage {
278
+ id: string;
279
+ role: Role;
280
+ content: string;
281
+ /** Per-message attachments (only for user messages by default). */
282
+ attachments?: AttachmentMeta[];
283
+ /** Tool calls made by the assistant in this turn. */
284
+ toolCalls?: ToolCallRecord[];
285
+ createdAt: number;
286
+ status: MessageStatus;
287
+ /** Chain-of-thought / reasoning emitted before the final answer (assistant). */
288
+ reasoning?: string;
289
+ /** When the first token arrived (ms epoch) — used for tok/sec. */
290
+ startedAt?: number;
291
+ /** When generation finished (ms epoch). */
292
+ completedAt?: number;
293
+ /** Token usage reported by the API for this message (assistant only). */
294
+ usage?: {
295
+ promptTokens?: number;
296
+ completionTokens?: number;
297
+ totalTokens?: number;
298
+ };
299
+ /** Optional model id used to produce this message. */
300
+ model?: string;
301
+ /** Error payload when status === 'error'. */
302
+ error?: ChatError;
303
+ /** Optional tool-call id when role === 'tool'. */
304
+ toolCallId?: string;
305
+ /** Optional tool name when role === 'tool'. */
306
+ name?: string;
307
+ }
308
+ export interface ChatError {
309
+ code: "network" | "aborted" | "rate_limit" | "auth" | "bad_request" | "server" | "parse" | "tool" | "context_overflow" | "unknown";
310
+ message: string;
311
+ status?: number;
312
+ retryable?: boolean;
313
+ cause?: unknown;
314
+ }
315
+ export interface ChatRequest {
316
+ messages: ChatMessage[];
317
+ signal?: AbortSignal;
318
+ }
319
+ export interface ChatResponseChunk {
320
+ /** Incremental text. */
321
+ delta?: string;
322
+ /** Tool call delta. */
323
+ toolCall?: {
324
+ id: string;
325
+ name: string;
326
+ arguments: string;
327
+ };
328
+ /** Reason the stream finished. */
329
+ finishReason?: "stop" | "length" | "tool_calls" | "content_filter" | "error";
330
+ /** Final usage (anthropic emits this on the last event). */
331
+ usage?: ChatMessage["usage"];
332
+ /** Model used. */
333
+ model?: string;
334
+ /** Optional error that ended the stream. */
335
+ error?: ChatError;
336
+ }
337
+ export interface ProviderAdapter {
338
+ readonly kind: ProviderKind;
339
+ stream(req: ChatRequest, cfg: ChatConfig): AsyncIterable<ChatResponseChunk>;
340
+ abort(): void;
341
+ }
342
+ //# sourceMappingURL=chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/types/chat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ // Core types for the ai-schadcn-chat package.
2
+ // Kept framework-agnostic (no React imports here) so they can be re-used
3
+ // in any runtime: SSR, edge, test stubs, or future worker-based providers.
4
+ export {};
@@ -0,0 +1,9 @@
1
+ export type { Role, ProviderKind, ApiCredentials, ProviderConfig, ModelDescriptor, PersonalityConfig, PromptDocument, ToolDefinition, ToolCallContext, ChatConfig, UiConfig, TypesetConfig, TypesetPreset, ReactNodeLike, MessageStatus, AttachmentMeta, ToolCallRecord, ChatMessage, ChatError, ChatRequest, ChatResponseChunk, ProviderAdapter, } from "./chat.js";
2
+ export { defaultModelPresets, defaultPersonalityPresets, defaultSystemPresets } from "./presets.js";
3
+ /**
4
+ * Canonical list of available typeset presets. Re-exported from the package
5
+ * root so consumers can iterate / type-check without hardcoding the strings.
6
+ * The CSS rules for each preset live in `ai-schadcn-chat/typeset.css`.
7
+ */
8
+ export declare const TYPESET_PRESETS: readonly ["default", "chat", "docs", "reading", "compact", "large"];
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,IAAI,EACJ,YAAY,EACZ,cAAc,EACd,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,eAAe,EACf,UAAU,EACV,QAAQ,EACR,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EACb,cAAc,EACd,cAAc,EACd,WAAW,EACX,SAAS,EACT,WAAW,EACX,iBAAiB,EACjB,eAAe,GAChB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAIpG;;;;GAIG;AACH,eAAO,MAAM,eAAe,qEAOiB,CAAC"}
@@ -0,0 +1,14 @@
1
+ export { defaultModelPresets, defaultPersonalityPresets, defaultSystemPresets } from "./presets.js";
2
+ /**
3
+ * Canonical list of available typeset presets. Re-exported from the package
4
+ * root so consumers can iterate / type-check without hardcoding the strings.
5
+ * The CSS rules for each preset live in `ai-schadcn-chat/typeset.css`.
6
+ */
7
+ export const TYPESET_PRESETS = [
8
+ "default",
9
+ "chat",
10
+ "docs",
11
+ "reading",
12
+ "compact",
13
+ "large",
14
+ ];
@@ -0,0 +1,25 @@
1
+ import type { ChatConfig, ModelDescriptor, PersonalityConfig } from "./chat.js";
2
+ /**
3
+ * Built-in model presets. Add or override via `ChatConfig.model = { id: "..." }`.
4
+ * These IDs are illustrative — verify availability for your account.
5
+ */
6
+ export declare const defaultModelPresets: Record<string, ModelDescriptor>;
7
+ /**
8
+ * Built-in personalities. Override via `ChatConfig.personality`.
9
+ */
10
+ export declare const defaultPersonalityPresets: Record<string, PersonalityConfig>;
11
+ /**
12
+ * Built-in master system prompts.
13
+ */
14
+ export declare const defaultSystemPresets: Record<string, string>;
15
+ /**
16
+ * Resolve a preset by key. Returns the underlying value or a passthrough.
17
+ */
18
+ export declare function resolveModelPreset(key: string, fallback?: ModelDescriptor): ModelDescriptor;
19
+ export declare function resolvePersonalityPreset(key: string, fallback?: PersonalityConfig): PersonalityConfig;
20
+ /**
21
+ * Default ChatConfig that talks to MiniMax via the OpenAI-compatible protocol.
22
+ * Reads MINIMAX_API_KEY from process.env (or import.meta.env in the consumer).
23
+ */
24
+ export declare function buildDefaultMiniMaxConfig(overrides?: Partial<ChatConfig>): ChatConfig;
25
+ //# sourceMappingURL=presets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/types/presets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,eAAe,EACf,iBAAiB,EAClB,MAAM,WAAW,CAAC;AAEnB;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAkF/D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CA6BvE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CASvD,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,eAAe,GACzB,eAAe,CAEjB;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,iBAAiB,GAC3B,iBAAiB,CAEnB;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,GAAE,OAAO,CAAC,UAAU,CAAM,GAAG,UAAU,CAwDzF"}
@@ -0,0 +1,207 @@
1
+ /**
2
+ * Built-in model presets. Add or override via `ChatConfig.model = { id: "..." }`.
3
+ * These IDs are illustrative — verify availability for your account.
4
+ */
5
+ export const defaultModelPresets = {
6
+ "anthropic:claude-sonnet-4-5": {
7
+ id: "claude-sonnet-4-5",
8
+ label: "Claude Sonnet 4.5",
9
+ contextWindow: 200_000,
10
+ vision: true,
11
+ tools: true,
12
+ maxOutput: 8_192,
13
+ provider: "anthropic",
14
+ },
15
+ "anthropic:claude-opus-4-1": {
16
+ id: "claude-opus-4-1",
17
+ label: "Claude Opus 4.1",
18
+ contextWindow: 200_000,
19
+ vision: true,
20
+ tools: true,
21
+ maxOutput: 8_192,
22
+ provider: "anthropic",
23
+ },
24
+ "anthropic:claude-3-5-haiku-latest": {
25
+ id: "claude-3-5-haiku-latest",
26
+ label: "Claude 3.5 Haiku",
27
+ contextWindow: 200_000,
28
+ vision: false,
29
+ tools: true,
30
+ maxOutput: 8_192,
31
+ provider: "anthropic",
32
+ },
33
+ "openai:gpt-4o": {
34
+ id: "gpt-4o",
35
+ label: "GPT-4o",
36
+ contextWindow: 128_000,
37
+ vision: true,
38
+ tools: true,
39
+ maxOutput: 4_096,
40
+ provider: "openai",
41
+ },
42
+ "openai:gpt-4o-mini": {
43
+ id: "gpt-4o-mini",
44
+ label: "GPT-4o mini",
45
+ contextWindow: 128_000,
46
+ vision: true,
47
+ tools: true,
48
+ maxOutput: 4_096,
49
+ provider: "openai",
50
+ },
51
+ "openai:o1-preview": {
52
+ id: "o1-preview",
53
+ label: "o1 preview",
54
+ contextWindow: 128_000,
55
+ vision: false,
56
+ tools: false,
57
+ maxOutput: 32_768,
58
+ provider: "openai",
59
+ },
60
+ "minimax:MiniMax-M2": {
61
+ id: "MiniMax-M2",
62
+ label: "MiniMax-M2",
63
+ contextWindow: 128_000,
64
+ vision: false,
65
+ tools: true,
66
+ maxOutput: 8_192,
67
+ provider: "openai-compatible",
68
+ },
69
+ "minimax:MiniMax-M3": {
70
+ id: "MiniMax-M3",
71
+ label: "MiniMax-M3",
72
+ contextWindow: 128_000,
73
+ vision: false,
74
+ tools: true,
75
+ maxOutput: 8_192,
76
+ provider: "openai-compatible",
77
+ },
78
+ "openrouter:anthropic/claude-sonnet-4-5": {
79
+ id: "anthropic/claude-sonnet-4-5",
80
+ label: "Claude Sonnet 4.5 (OpenRouter)",
81
+ contextWindow: 200_000,
82
+ vision: true,
83
+ tools: true,
84
+ maxOutput: 8_192,
85
+ provider: "openai-compatible",
86
+ },
87
+ };
88
+ /**
89
+ * Built-in personalities. Override via `ChatConfig.personality`.
90
+ */
91
+ export const defaultPersonalityPresets = {
92
+ default: { name: "Assistant", tone: "friendly", locale: "en" },
93
+ coding: {
94
+ name: "Coding buddy",
95
+ tone: "concise",
96
+ locale: "en",
97
+ customTone: "You are a senior engineer. Prefer minimal, idiomatic solutions. Cite the file path and line when referencing code. Never apologize for asking clarifying questions.",
98
+ },
99
+ research: {
100
+ name: "Research analyst",
101
+ tone: "academic",
102
+ locale: "en",
103
+ customTone: "You cite sources and quantify uncertainty. You separate established facts from inference and flag both clearly.",
104
+ },
105
+ teacher: {
106
+ name: "Patient teacher",
107
+ tone: "friendly",
108
+ locale: "en",
109
+ customTone: "Explain step by step. After each explanation, ask one short check-for-understanding question.",
110
+ },
111
+ pirate: {
112
+ name: "Captain Chat",
113
+ tone: "playful",
114
+ locale: "en",
115
+ customTone: "Ye talk like a pirate but ye answers be accurate, aye.",
116
+ },
117
+ };
118
+ /**
119
+ * Built-in master system prompts.
120
+ */
121
+ export const defaultSystemPresets = {
122
+ default: "You are a helpful assistant. You answer concisely, format code with fenced blocks, and admit when you do not know.",
123
+ strict: "You answer only what is asked. If the question is ambiguous, you list the disambiguating questions before answering. You never invent facts or citations.",
124
+ json: "You always answer with valid JSON matching the schema the user provides. No prose outside the JSON.",
125
+ spanish: "Eres un asistente útil. Respondes en español salvo que el usuario te pida otro idioma. Eres conciso, usas bloques de código con el lenguaje correcto y admites cuando no sabes algo.",
126
+ };
127
+ /**
128
+ * Resolve a preset by key. Returns the underlying value or a passthrough.
129
+ */
130
+ export function resolveModelPreset(key, fallback) {
131
+ return defaultModelPresets[key] ?? fallback ?? { id: key };
132
+ }
133
+ export function resolvePersonalityPreset(key, fallback) {
134
+ return defaultPersonalityPresets[key] ?? fallback ?? {};
135
+ }
136
+ /**
137
+ * Default ChatConfig that talks to MiniMax via the OpenAI-compatible protocol.
138
+ * Reads MINIMAX_API_KEY from process.env (or import.meta.env in the consumer).
139
+ */
140
+ export function buildDefaultMiniMaxConfig(overrides = {}) {
141
+ const env = readEnv();
142
+ const config = {
143
+ provider: {
144
+ kind: "openai-compatible",
145
+ baseUrl: env.MINIMAX_BASE_URL || "https://api.MiniMax.chat/v1",
146
+ authHeader: "bearer",
147
+ credentials: {
148
+ apiKey: env.MINIMAX_API_KEY || "",
149
+ },
150
+ chatPath: "/chat/completions",
151
+ },
152
+ model: {
153
+ id: env.MINIMAX_MODEL || "MiniMax-M2",
154
+ label: "MiniMax",
155
+ contextWindow: 128_000,
156
+ vision: false,
157
+ tools: true,
158
+ maxOutput: 8_192,
159
+ provider: "openai-compatible",
160
+ },
161
+ systemPrompt: defaultSystemPresets.default,
162
+ temperature: 0.7,
163
+ retry: { attempts: 3, initialDelayMs: 800, maxDelayMs: 8_000 },
164
+ persistKey: "ai-schadcn-chat:default",
165
+ ui: {
166
+ title: "Chat",
167
+ placeholder: "Ask anything…",
168
+ enableFileUpload: true,
169
+ enableMarkdown: true,
170
+ enableMdx: true,
171
+ enableCodeHighlight: true,
172
+ enableCopyButtons: true,
173
+ enableMessageActions: true,
174
+ enableConversationHistory: true,
175
+ enableRegenerate: true,
176
+ enableEdit: true,
177
+ showTokenCount: true,
178
+ showTimestamps: true,
179
+ showDocumentPicker: true,
180
+ maxFileSizeMb: 10,
181
+ acceptedFileTypes: [
182
+ "image/png",
183
+ "image/jpeg",
184
+ "image/gif",
185
+ "image/webp",
186
+ "application/pdf",
187
+ "text/plain",
188
+ "text/markdown",
189
+ "text/csv",
190
+ "application/json",
191
+ ],
192
+ },
193
+ ...overrides,
194
+ };
195
+ return config;
196
+ }
197
+ function readEnv() {
198
+ if (typeof process !== "undefined" && process.env)
199
+ return process.env;
200
+ // Vite / browser consumers expose env via import.meta.env.
201
+ try {
202
+ return import.meta.env ?? {};
203
+ }
204
+ catch {
205
+ return {};
206
+ }
207
+ }
package/dist/types.cjs ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./presets-BxnbImSM.cjs"),t=["default","chat","docs","reading","compact","large"];exports.defaultModelPresets=e.defaultModelPresets;exports.defaultPersonalityPresets=e.defaultPersonalityPresets;exports.defaultSystemPresets=e.defaultSystemPresets;exports.TYPESET_PRESETS=t;
2
+ //# sourceMappingURL=types.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.cjs","sources":["../src/types/index.ts"],"sourcesContent":["export type {\n Role,\n ProviderKind,\n ApiCredentials,\n ProviderConfig,\n ModelDescriptor,\n PersonalityConfig,\n PromptDocument,\n ToolDefinition,\n ToolCallContext,\n ChatConfig,\n UiConfig,\n TypesetConfig,\n TypesetPreset,\n ReactNodeLike,\n MessageStatus,\n AttachmentMeta,\n ToolCallRecord,\n ChatMessage,\n ChatError,\n ChatRequest,\n ChatResponseChunk,\n ProviderAdapter,\n} from \"./chat.js\";\n\nexport { defaultModelPresets, defaultPersonalityPresets, defaultSystemPresets } from \"./presets.js\";\n\nimport type { TypesetPreset } from \"./chat.js\";\n\n/**\n * Canonical list of available typeset presets. Re-exported from the package\n * root so consumers can iterate / type-check without hardcoding the strings.\n * The CSS rules for each preset live in `ai-schadcn-chat/typeset.css`.\n */\nexport const TYPESET_PRESETS = [\n \"default\",\n \"chat\",\n \"docs\",\n \"reading\",\n \"compact\",\n \"large\",\n] as const satisfies readonly TypesetPreset[];"],"names":["TYPESET_PRESETS"],"mappings":"0HAkCaA,EAAkB,CAC7B,UACA,OACA,OACA,UACA,UACA,OACF"}
package/dist/types.js ADDED
@@ -0,0 +1,16 @@
1
+ import { d as s, a as r, c as d } from "./presets-D8VQTD8n.js";
2
+ const e = [
3
+ "default",
4
+ "chat",
5
+ "docs",
6
+ "reading",
7
+ "compact",
8
+ "large"
9
+ ];
10
+ export {
11
+ e as TYPESET_PRESETS,
12
+ s as defaultModelPresets,
13
+ r as defaultPersonalityPresets,
14
+ d as defaultSystemPresets
15
+ };
16
+ //# sourceMappingURL=types.js.map