@gram-ai/elements 1.27.4 → 1.27.5

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 (277) hide show
  1. package/README.md +72 -60
  2. package/README.typedoc.md +6 -6
  3. package/bin/cli.js +74 -74
  4. package/dist/compat-shims-CO9JXXV4.cjs.map +1 -1
  5. package/dist/{compat-shims-BPJ7Q68c.js → compat-shims-DxtUrORi.js} +4 -2
  6. package/dist/compat-shims-DxtUrORi.js.map +1 -0
  7. package/dist/components/ShareButton/index.d.ts +2 -2
  8. package/dist/components/assistant-ui/message-feedback.d.ts +1 -1
  9. package/dist/components/assistant-ui/tooltip-icon-button.d.ts +2 -2
  10. package/dist/components/ui/avatar.d.ts +2 -2
  11. package/dist/components/ui/button.d.ts +1 -1
  12. package/dist/components/ui/calendar.d.ts +1 -1
  13. package/dist/components/ui/collapsible.d.ts +1 -1
  14. package/dist/components/ui/dialog.d.ts +4 -4
  15. package/dist/components/ui/popover.d.ts +2 -2
  16. package/dist/components/ui/skeleton.d.ts +1 -1
  17. package/dist/components/ui/time-range-picker.d.ts +1 -1
  18. package/dist/components/ui/tool-ui.d.ts +7 -7
  19. package/dist/components/ui/tooltip.d.ts +2 -2
  20. package/dist/contexts/ConnectionStatusContext.d.ts +1 -1
  21. package/dist/elements.cjs +1 -1
  22. package/dist/elements.js +2 -2
  23. package/dist/hooks/useDensity.d.ts +73 -73
  24. package/dist/hooks/useMCPTools.d.ts +1 -1
  25. package/dist/hooks/useRadius.d.ts +1 -1
  26. package/dist/{index-BpJstUh1.cjs → index-C4bFBGfl.cjs} +4 -4
  27. package/dist/{index-BpJstUh1.cjs.map → index-C4bFBGfl.cjs.map} +1 -1
  28. package/dist/{index-CUitXazZ.js → index-D93pV0_o.js} +55 -55
  29. package/dist/{index-CUitXazZ.js.map → index-D93pV0_o.js.map} +1 -1
  30. package/dist/{index-D0bAYNQy.js → index-DuCQRbcQ.js} +279 -265
  31. package/dist/index-DuCQRbcQ.js.map +1 -0
  32. package/dist/{index-KSX4Qjip.cjs → index-y_PNN5vK.cjs} +10 -10
  33. package/dist/index-y_PNN5vK.cjs.map +1 -0
  34. package/dist/lib/cassette.d.ts +4 -4
  35. package/dist/lib/errorTracking.d.ts +1 -1
  36. package/dist/lib/messageConverter.d.ts +1 -1
  37. package/dist/lib/models.d.ts +1 -1
  38. package/dist/plugins/chart/ui/bar-chart.d.ts +1 -1
  39. package/dist/plugins/generative-ui/ui/accordion-wrapper.d.ts +2 -2
  40. package/dist/plugins/generative-ui/ui/accordion.d.ts +1 -1
  41. package/dist/plugins/generative-ui/ui/action-button.d.ts +2 -2
  42. package/dist/plugins/generative-ui/ui/alert-wrapper.d.ts +1 -1
  43. package/dist/plugins/generative-ui/ui/alert.d.ts +4 -4
  44. package/dist/plugins/generative-ui/ui/avatar.d.ts +5 -5
  45. package/dist/plugins/generative-ui/ui/badge.d.ts +2 -2
  46. package/dist/plugins/generative-ui/ui/button-wrapper.d.ts +2 -2
  47. package/dist/plugins/generative-ui/ui/button.d.ts +2 -2
  48. package/dist/plugins/generative-ui/ui/card-wrapper.d.ts +2 -2
  49. package/dist/plugins/generative-ui/ui/card.d.ts +8 -8
  50. package/dist/plugins/generative-ui/ui/checkbox.d.ts +1 -1
  51. package/dist/plugins/generative-ui/ui/data-table.d.ts +2 -2
  52. package/dist/plugins/generative-ui/ui/dialog.d.ts +3 -3
  53. package/dist/plugins/generative-ui/ui/dropdown-menu.d.ts +3 -3
  54. package/dist/plugins/generative-ui/ui/grid.d.ts +3 -3
  55. package/dist/plugins/generative-ui/ui/input-wrapper.d.ts +1 -1
  56. package/dist/plugins/generative-ui/ui/input.d.ts +2 -2
  57. package/dist/plugins/generative-ui/ui/label.d.ts +1 -1
  58. package/dist/plugins/generative-ui/ui/metric.d.ts +3 -3
  59. package/dist/plugins/generative-ui/ui/pagination.d.ts +6 -6
  60. package/dist/plugins/generative-ui/ui/popover.d.ts +4 -4
  61. package/dist/plugins/generative-ui/ui/progress.d.ts +2 -2
  62. package/dist/plugins/generative-ui/ui/radio-group.d.ts +1 -1
  63. package/dist/plugins/generative-ui/ui/select.d.ts +2 -2
  64. package/dist/plugins/generative-ui/ui/separator.d.ts +1 -1
  65. package/dist/plugins/generative-ui/ui/skeleton.d.ts +1 -1
  66. package/dist/plugins/generative-ui/ui/stack.d.ts +6 -6
  67. package/dist/plugins/generative-ui/ui/switch.d.ts +2 -2
  68. package/dist/plugins/generative-ui/ui/table.d.ts +9 -9
  69. package/dist/plugins/generative-ui/ui/tabs-wrapper.d.ts +1 -1
  70. package/dist/plugins/generative-ui/ui/tabs.d.ts +1 -1
  71. package/dist/plugins/generative-ui/ui/text.d.ts +3 -3
  72. package/dist/plugins/generative-ui/ui/textarea.d.ts +2 -2
  73. package/dist/plugins/generative-ui/ui/tooltip.d.ts +1 -1
  74. package/dist/plugins.cjs +1 -1
  75. package/dist/plugins.js +1 -1
  76. package/dist/{profiler-BFkhZRxj.js → profiler-FpBY9eRv.js} +2 -2
  77. package/dist/{profiler-BFkhZRxj.js.map → profiler-FpBY9eRv.js.map} +1 -1
  78. package/dist/{profiler-CyzxBxVz.cjs → profiler-_mthyjvo.cjs} +2 -2
  79. package/dist/{profiler-CyzxBxVz.cjs.map → profiler-_mthyjvo.cjs.map} +1 -1
  80. package/dist/react-shim.js +1 -1
  81. package/dist/server/express.cjs.map +1 -1
  82. package/dist/server/express.js.map +1 -1
  83. package/dist/{startRecording-Dq92sEHf.cjs → startRecording-NJcpiHw-.cjs} +2 -2
  84. package/dist/{startRecording-Dq92sEHf.cjs.map → startRecording-NJcpiHw-.cjs.map} +1 -1
  85. package/dist/{startRecording-C-PPAs_Z.js → startRecording-r5MXQ2Dm.js} +2 -2
  86. package/dist/{startRecording-C-PPAs_Z.js.map → startRecording-r5MXQ2Dm.js.map} +1 -1
  87. package/dist/types/index.d.ts +2 -2
  88. package/package.json +1 -5
  89. package/src/compat-plugin.ts +14 -14
  90. package/src/compat-shims.ts +33 -31
  91. package/src/compat.test.ts +48 -48
  92. package/src/compat.ts +6 -6
  93. package/src/components/Chat/index.tsx +17 -17
  94. package/src/components/Chat/stories/Charts.stories.tsx +98 -98
  95. package/src/components/Chat/stories/Composer.stories.tsx +15 -15
  96. package/src/components/Chat/stories/ConnectionConfiguration.stories.tsx +44 -44
  97. package/src/components/Chat/stories/CustomComponents.stories.tsx +17 -17
  98. package/src/components/Chat/stories/Density.stories.tsx +20 -20
  99. package/src/components/Chat/stories/ErrorBoundary.stories.tsx +47 -47
  100. package/src/components/Chat/stories/FrontendTools.stories.tsx +39 -39
  101. package/src/components/Chat/stories/GenerativeUI.stories.tsx +48 -48
  102. package/src/components/Chat/stories/MessageFeedback.stories.tsx +52 -52
  103. package/src/components/Chat/stories/Modal.stories.tsx +28 -28
  104. package/src/components/Chat/stories/Model.stories.tsx +11 -11
  105. package/src/components/Chat/stories/Radius.stories.tsx +20 -20
  106. package/src/components/Chat/stories/Sidecar.stories.tsx +13 -13
  107. package/src/components/Chat/stories/StyleIsolation.stories.tsx +11 -11
  108. package/src/components/Chat/stories/Theme.stories.tsx +25 -25
  109. package/src/components/Chat/stories/Thread.stories.tsx +25 -25
  110. package/src/components/Chat/stories/ToolApproval.stories.tsx +55 -55
  111. package/src/components/Chat/stories/ToolMentions.stories.tsx +17 -17
  112. package/src/components/Chat/stories/Tools.stories.tsx +88 -88
  113. package/src/components/Chat/stories/Variants.stories.tsx +32 -32
  114. package/src/components/Chat/stories/Welcome.stories.tsx +14 -14
  115. package/src/components/ChatHistory.tsx +7 -7
  116. package/src/components/FrontendTools/index.tsx +5 -5
  117. package/src/components/Replay.stories.tsx +157 -157
  118. package/src/components/Replay.tsx +76 -73
  119. package/src/components/ShadowRoot.tsx +40 -40
  120. package/src/components/ShareButton/index.tsx +32 -32
  121. package/src/components/assistant-ui/assistant-modal.tsx +92 -87
  122. package/src/components/assistant-ui/assistant-sidecar.tsx +35 -35
  123. package/src/components/assistant-ui/attachment.tsx +80 -80
  124. package/src/components/assistant-ui/connection-status-indicator.tsx +33 -33
  125. package/src/components/assistant-ui/error-boundary.tsx +34 -34
  126. package/src/components/assistant-ui/follow-on-suggestions.tsx +26 -26
  127. package/src/components/assistant-ui/markdown-text.tsx +69 -69
  128. package/src/components/assistant-ui/mentioned-tools-badges.tsx +38 -38
  129. package/src/components/assistant-ui/message-feedback.tsx +57 -50
  130. package/src/components/assistant-ui/reasoning.tsx +83 -83
  131. package/src/components/assistant-ui/thread-list.tsx +45 -45
  132. package/src/components/assistant-ui/thread.tsx +278 -278
  133. package/src/components/assistant-ui/tool-fallback.tsx +37 -37
  134. package/src/components/assistant-ui/tool-group.tsx +26 -26
  135. package/src/components/assistant-ui/tool-mention-autocomplete.tsx +122 -122
  136. package/src/components/assistant-ui/tooltip-icon-button.tsx +18 -18
  137. package/src/components/ui/avatar.tsx +12 -12
  138. package/src/components/ui/button.tsx +12 -12
  139. package/src/components/ui/buttonVariants.ts +17 -17
  140. package/src/components/ui/calendar.tsx +106 -106
  141. package/src/components/ui/charts.stories.tsx +56 -56
  142. package/src/components/ui/collapsible.tsx +5 -5
  143. package/src/components/ui/dialog.tsx +30 -30
  144. package/src/components/ui/generative-ui.stories.tsx +200 -200
  145. package/src/components/ui/generative-ui.tsx +26 -26
  146. package/src/components/ui/popover.tsx +14 -14
  147. package/src/components/ui/skeleton.tsx +5 -5
  148. package/src/components/ui/time-range-picker.stories.tsx +80 -80
  149. package/src/components/ui/time-range-picker.tsx +245 -244
  150. package/src/components/ui/tool-ui.stories.tsx +37 -37
  151. package/src/components/ui/tool-ui.tsx +221 -215
  152. package/src/components/ui/tooltip.tsx +15 -15
  153. package/src/constants/tailwind.ts +1 -1
  154. package/src/contexts/ChatIdContext.tsx +7 -7
  155. package/src/contexts/ConnectionStatusContext.tsx +64 -64
  156. package/src/contexts/ElementsProvider.tsx +214 -213
  157. package/src/contexts/ReplayContext.ts +3 -3
  158. package/src/contexts/ToolApprovalContext.tsx +54 -54
  159. package/src/contexts/ToolExecutionContext.tsx +34 -34
  160. package/src/contexts/contexts.ts +7 -7
  161. package/src/contexts/portal-container-context.ts +2 -2
  162. package/src/contexts/portal-container.tsx +7 -7
  163. package/src/embedded.ts +1 -1
  164. package/src/global.css +25 -25
  165. package/src/hooks/useAuth.ts +72 -72
  166. package/src/hooks/useDensity.ts +79 -79
  167. package/src/hooks/useElements.ts +6 -6
  168. package/src/hooks/useExpanded.ts +12 -12
  169. package/src/hooks/useFollowOnSuggestions.ts +83 -83
  170. package/src/hooks/useGramThreadListAdapter.tsx +99 -99
  171. package/src/hooks/useMCPTools.ts +47 -47
  172. package/src/hooks/useModel.ts +14 -14
  173. package/src/hooks/usePluginComponents.ts +11 -11
  174. package/src/hooks/usePortalContainer.ts +5 -5
  175. package/src/hooks/useRadius.ts +23 -23
  176. package/src/hooks/useRecordCassette.ts +34 -34
  177. package/src/hooks/useSession.ts +11 -11
  178. package/src/hooks/useThemeProps.ts +13 -13
  179. package/src/hooks/useThreadId.ts +4 -4
  180. package/src/hooks/useToolApproval.ts +7 -7
  181. package/src/hooks/useToolMentions.ts +40 -40
  182. package/src/index.ts +26 -26
  183. package/src/lib/api.test.ts +61 -61
  184. package/src/lib/api.ts +4 -3
  185. package/src/lib/auth.ts +13 -13
  186. package/src/lib/cassette.ts +84 -84
  187. package/src/lib/easing.ts +1 -1
  188. package/src/lib/errorTracking.config.ts +5 -5
  189. package/src/lib/errorTracking.ts +29 -29
  190. package/src/lib/generative-ui.ts +7 -7
  191. package/src/lib/humanize.ts +3 -3
  192. package/src/lib/messageConverter.test.ts +130 -127
  193. package/src/lib/messageConverter.ts +196 -196
  194. package/src/lib/models.ts +21 -20
  195. package/src/lib/token.test.ts +56 -56
  196. package/src/lib/token.ts +14 -14
  197. package/src/lib/tool-mentions.ts +45 -45
  198. package/src/lib/tools.ts +66 -62
  199. package/src/lib/utils.ts +5 -5
  200. package/src/lib.d.ts +1 -1
  201. package/src/plugins/README.md +5 -5
  202. package/src/plugins/chart/catalog.ts +18 -18
  203. package/src/plugins/chart/chart.test.ts +31 -31
  204. package/src/plugins/chart/component.tsx +34 -34
  205. package/src/plugins/chart/index.ts +4 -4
  206. package/src/plugins/chart/ui/area-chart.tsx +42 -42
  207. package/src/plugins/chart/ui/bar-chart.tsx +46 -46
  208. package/src/plugins/chart/ui/donut-chart.tsx +48 -48
  209. package/src/plugins/chart/ui/index.ts +7 -7
  210. package/src/plugins/chart/ui/line-chart.tsx +43 -43
  211. package/src/plugins/chart/ui/pie-chart.tsx +44 -44
  212. package/src/plugins/chart/ui/radar-chart.tsx +33 -33
  213. package/src/plugins/chart/ui/scatter-chart.tsx +43 -43
  214. package/src/plugins/components/MacOSWindowFrame.tsx +15 -15
  215. package/src/plugins/components/PluginLoadingState.tsx +10 -10
  216. package/src/plugins/components/index.ts +1 -1
  217. package/src/plugins/generative-ui/catalog.ts +54 -54
  218. package/src/plugins/generative-ui/component.tsx +85 -85
  219. package/src/plugins/generative-ui/index.ts +4 -4
  220. package/src/plugins/generative-ui/ui/accordion-wrapper.tsx +16 -16
  221. package/src/plugins/generative-ui/ui/accordion.tsx +16 -16
  222. package/src/plugins/generative-ui/ui/action-button.tsx +28 -28
  223. package/src/plugins/generative-ui/ui/alert-wrapper.tsx +8 -8
  224. package/src/plugins/generative-ui/ui/alert.tsx +20 -20
  225. package/src/plugins/generative-ui/ui/avatar-wrapper.tsx +7 -7
  226. package/src/plugins/generative-ui/ui/avatar.tsx +30 -30
  227. package/src/plugins/generative-ui/ui/badge.tsx +22 -22
  228. package/src/plugins/generative-ui/ui/button-wrapper.tsx +12 -12
  229. package/src/plugins/generative-ui/ui/button.tsx +28 -28
  230. package/src/plugins/generative-ui/ui/card-wrapper.tsx +8 -8
  231. package/src/plugins/generative-ui/ui/card.tsx +27 -27
  232. package/src/plugins/generative-ui/ui/checkbox-wrapper.tsx +9 -9
  233. package/src/plugins/generative-ui/ui/checkbox.tsx +9 -9
  234. package/src/plugins/generative-ui/ui/data-table.tsx +8 -8
  235. package/src/plugins/generative-ui/ui/dialog.tsx +31 -31
  236. package/src/plugins/generative-ui/ui/dropdown-menu.tsx +44 -44
  237. package/src/plugins/generative-ui/ui/grid.tsx +12 -12
  238. package/src/plugins/generative-ui/ui/index.ts +40 -40
  239. package/src/plugins/generative-ui/ui/input-wrapper.tsx +11 -11
  240. package/src/plugins/generative-ui/ui/input.tsx +9 -9
  241. package/src/plugins/generative-ui/ui/label.tsx +8 -8
  242. package/src/plugins/generative-ui/ui/list.tsx +11 -11
  243. package/src/plugins/generative-ui/ui/metric.tsx +23 -23
  244. package/src/plugins/generative-ui/ui/pagination.tsx +28 -28
  245. package/src/plugins/generative-ui/ui/popover.tsx +21 -21
  246. package/src/plugins/generative-ui/ui/progress.tsx +13 -13
  247. package/src/plugins/generative-ui/ui/radio-group.tsx +12 -12
  248. package/src/plugins/generative-ui/ui/select-wrapper.tsx +7 -7
  249. package/src/plugins/generative-ui/ui/select.tsx +37 -37
  250. package/src/plugins/generative-ui/ui/separator.tsx +9 -9
  251. package/src/plugins/generative-ui/ui/skeleton-wrapper.tsx +10 -10
  252. package/src/plugins/generative-ui/ui/skeleton.tsx +5 -5
  253. package/src/plugins/generative-ui/ui/stack.tsx +28 -28
  254. package/src/plugins/generative-ui/ui/switch.tsx +11 -11
  255. package/src/plugins/generative-ui/ui/table.tsx +32 -32
  256. package/src/plugins/generative-ui/ui/tabs-wrapper.tsx +11 -11
  257. package/src/plugins/generative-ui/ui/tabs.tsx +26 -26
  258. package/src/plugins/generative-ui/ui/text.tsx +12 -12
  259. package/src/plugins/generative-ui/ui/textarea.tsx +7 -7
  260. package/src/plugins/generative-ui/ui/tooltip.tsx +12 -12
  261. package/src/plugins/index.ts +7 -7
  262. package/src/react-shim.ts +6 -6
  263. package/src/server/bun.ts +12 -12
  264. package/src/server/core.ts +25 -25
  265. package/src/server/express.ts +17 -15
  266. package/src/server/fastify.ts +14 -14
  267. package/src/server/hono.ts +9 -9
  268. package/src/server/nextjs.ts +12 -12
  269. package/src/server/tanstack-start.ts +12 -12
  270. package/src/server.ts +27 -27
  271. package/src/storybook.d.ts +4 -4
  272. package/src/types/index.ts +122 -122
  273. package/src/types/plugins.ts +7 -7
  274. package/src/vite-env.d.ts +12 -12
  275. package/dist/compat-shims-BPJ7Q68c.js.map +0 -1
  276. package/dist/index-D0bAYNQy.js.map +0 -1
  277. package/dist/index-KSX4Qjip.cjs.map +0 -1
@@ -1,92 +1,97 @@
1
- 'use client'
1
+ "use client";
2
2
 
3
- import { useMemo, useState, type FC } from 'react'
3
+ import { useMemo, useState, type FC } from "react";
4
4
  import {
5
5
  Loader,
6
6
  Maximize,
7
7
  MessageCircleIcon,
8
8
  Minimize,
9
9
  XIcon,
10
- } from 'lucide-react'
11
- import { LazyMotion, domMax, AnimatePresence, MotionConfig } from 'motion/react'
12
- import * as m from 'motion/react-m'
10
+ } from "lucide-react";
11
+ import {
12
+ LazyMotion,
13
+ domMax,
14
+ AnimatePresence,
15
+ MotionConfig,
16
+ } from "motion/react";
17
+ import * as m from "motion/react-m";
13
18
 
14
- import { ErrorBoundary } from '@/components/assistant-ui/error-boundary'
15
- import { Thread } from '@/components/assistant-ui/thread'
16
- import { ThreadList } from '@/components/assistant-ui/thread-list'
17
- import { useThemeProps } from '@/hooks/useThemeProps'
18
- import { useRadius } from '@/hooks/useRadius'
19
- import { useDensity } from '@/hooks/useDensity'
20
- import { assertNever, cn } from '@/lib/utils'
21
- import { useElements } from '@/hooks/useElements'
22
- import { useExpanded } from '@/hooks/useExpanded'
23
- import { EASE_OUT_QUINT } from '@/lib/easing'
24
- import { useAssistantState } from '@assistant-ui/react'
19
+ import { ErrorBoundary } from "@/components/assistant-ui/error-boundary";
20
+ import { Thread } from "@/components/assistant-ui/thread";
21
+ import { ThreadList } from "@/components/assistant-ui/thread-list";
22
+ import { useThemeProps } from "@/hooks/useThemeProps";
23
+ import { useRadius } from "@/hooks/useRadius";
24
+ import { useDensity } from "@/hooks/useDensity";
25
+ import { assertNever, cn } from "@/lib/utils";
26
+ import { useElements } from "@/hooks/useElements";
27
+ import { useExpanded } from "@/hooks/useExpanded";
28
+ import { EASE_OUT_QUINT } from "@/lib/easing";
29
+ import { useAssistantState } from "@assistant-ui/react";
25
30
 
26
31
  const LAYOUT_TRANSITION = {
27
32
  layout: {
28
33
  duration: 0.25,
29
34
  ease: EASE_OUT_QUINT,
30
35
  },
31
- } as const
36
+ } as const;
32
37
 
33
38
  type Dimensions = {
34
- width?: string | number | `${number}%`
35
- height?: string | number | `${number}%`
36
- maxHeight?: string | number | `${number}%`
37
- }
39
+ width?: string | number | `${number}%`;
40
+ height?: string | number | `${number}%`;
41
+ maxHeight?: string | number | `${number}%`;
42
+ };
38
43
 
39
44
  interface AssistantModalProps {
40
- className?: string
45
+ className?: string;
41
46
  }
42
47
 
43
48
  export const AssistantModal: FC<AssistantModalProps> = ({ className }) => {
44
- const { config } = useElements()
45
- const themeProps = useThemeProps()
46
- const r = useRadius()
47
- const d = useDensity()
48
- const [isOpen, setIsOpen] = useState(config.modal?.defaultOpen ?? false)
49
- const { expandable, isExpanded, setIsExpanded } = useExpanded()
50
- const title = config.modal?.title
51
- const customIcon = config.modal?.icon
49
+ const { config } = useElements();
50
+ const themeProps = useThemeProps();
51
+ const r = useRadius();
52
+ const d = useDensity();
53
+ const [isOpen, setIsOpen] = useState(config.modal?.defaultOpen ?? false);
54
+ const { expandable, isExpanded, setIsExpanded } = useExpanded();
55
+ const title = config.modal?.title;
56
+ const customIcon = config.modal?.icon;
52
57
 
53
58
  // Check if thread list should be shown
54
59
  const showThreadList =
55
- config.history?.enabled && config.history?.showThreadList !== false
60
+ config.history?.enabled && config.history?.showThreadList !== false;
56
61
 
57
- const position = config.modal?.position ?? 'bottom-right'
58
- const anchorPositionClass = positionClassname(position)
62
+ const position = config.modal?.position ?? "bottom-right";
63
+ const anchorPositionClass = positionClassname(position);
59
64
 
60
65
  const defaultDimensions: Dimensions = useMemo(
61
66
  () =>
62
67
  config.modal?.dimensions?.default ?? {
63
- width: '500px',
64
- height: '600px',
65
- maxHeight: '95vh',
68
+ width: "500px",
69
+ height: "600px",
70
+ maxHeight: "95vh",
66
71
  },
67
- [config.modal?.dimensions?.default]
68
- )
72
+ [config.modal?.dimensions?.default],
73
+ );
69
74
 
70
75
  const expandedDimensions: Dimensions = useMemo(
71
76
  () =>
72
77
  config.modal?.dimensions?.expanded ?? {
73
- width: '70vw',
74
- height: '90vh',
78
+ width: "70vw",
79
+ height: "90vh",
75
80
  },
76
- [config.modal?.dimensions?.expanded]
77
- )
78
- const thread = useAssistantState(({ thread }) => thread)
81
+ [config.modal?.dimensions?.expanded],
82
+ );
83
+ const thread = useAssistantState(({ thread }) => thread);
79
84
  const isGenerating =
80
- thread?.messages?.some((message) => message.status?.type === 'running') ??
81
- false
85
+ thread?.messages?.some((message) => message.status?.type === "running") ??
86
+ false;
82
87
 
83
88
  const effectiveWidth = isExpanded
84
89
  ? expandedDimensions.width
85
- : defaultDimensions.width
90
+ : defaultDimensions.width;
86
91
  const effectiveHeight = isExpanded
87
92
  ? expandedDimensions.height
88
- : defaultDimensions.height
89
- const effectiveMaxHeight = defaultDimensions.maxHeight
93
+ : defaultDimensions.height;
94
+ const effectiveMaxHeight = defaultDimensions.maxHeight;
90
95
 
91
96
  return (
92
97
  <LazyMotion features={domMax}>
@@ -94,12 +99,12 @@ export const AssistantModal: FC<AssistantModalProps> = ({ className }) => {
94
99
  <MotionConfig reducedMotion="user" transition={LAYOUT_TRANSITION}>
95
100
  <div
96
101
  className={cn(
97
- 'aui-root aui-modal-anchor fixed z-10',
102
+ "aui-root aui-modal-anchor fixed z-10",
98
103
  anchorPositionClass,
99
104
  themeProps.className,
100
- r('lg'),
101
- isOpen && 'shadow-xl',
102
- className
105
+ r("lg"),
106
+ isOpen && "shadow-xl",
107
+ className,
103
108
  )}
104
109
  >
105
110
  <AnimatePresence mode="wait">
@@ -110,8 +115,8 @@ export const AssistantModal: FC<AssistantModalProps> = ({ className }) => {
110
115
  layoutId="chat-container"
111
116
  onClick={() => setIsOpen(true)}
112
117
  className={cn(
113
- 'aui-modal-button bg-primary text-primary-foreground flex size-12 cursor-pointer items-center justify-center border shadow-lg transition-shadow hover:shadow-xl',
114
- r('full')
118
+ "aui-modal-button flex size-12 cursor-pointer items-center justify-center border bg-primary text-primary-foreground shadow-lg transition-shadow hover:shadow-xl",
119
+ r("full"),
115
120
  )}
116
121
  initial={false}
117
122
  aria-label={`Open ${title}`}
@@ -125,7 +130,7 @@ export const AssistantModal: FC<AssistantModalProps> = ({ className }) => {
125
130
  className="flex size-full items-center justify-center"
126
131
  >
127
132
  {customIcon ? (
128
- customIcon('closed')
133
+ customIcon("closed")
129
134
  ) : (
130
135
  <MessageCircleIcon className="size-6" />
131
136
  )}
@@ -137,13 +142,13 @@ export const AssistantModal: FC<AssistantModalProps> = ({ className }) => {
137
142
  layout
138
143
  layoutId="chat-container"
139
144
  className={cn(
140
- 'aui-modal-content bg-popover text-popover-foreground flex flex-col overflow-hidden border [&>.aui-thread-root]:bg-inherit',
141
- r('lg')
145
+ "aui-modal-content flex flex-col overflow-hidden border bg-popover text-popover-foreground [&>.aui-thread-root]:bg-inherit",
146
+ r("lg"),
142
147
  )}
143
148
  initial={false}
144
149
  style={{
145
- originX: position.includes('left') ? 0 : 1,
146
- originY: position.includes('top') ? 0 : 1,
150
+ originX: position.includes("left") ? 0 : 1,
151
+ originY: position.includes("top") ? 0 : 1,
147
152
  width: effectiveWidth,
148
153
  height: effectiveHeight,
149
154
  maxHeight: effectiveMaxHeight,
@@ -151,9 +156,9 @@ export const AssistantModal: FC<AssistantModalProps> = ({ className }) => {
151
156
  >
152
157
  <m.div
153
158
  className={cn(
154
- 'aui-modal-header flex shrink-0 items-center justify-between border-b',
155
- d('h-header'),
156
- d('px-lg')
159
+ "aui-modal-header flex shrink-0 items-center justify-between border-b",
160
+ d("h-header"),
161
+ d("px-lg"),
157
162
  )}
158
163
  initial={{ opacity: 0 }}
159
164
  animate={{ opacity: 1 }}
@@ -163,18 +168,18 @@ export const AssistantModal: FC<AssistantModalProps> = ({ className }) => {
163
168
  ease: EASE_OUT_QUINT,
164
169
  }}
165
170
  >
166
- <div className={cn('flex min-w-0 items-center')}>
171
+ <div className={cn("flex min-w-0 items-center")}>
167
172
  <span
168
173
  className={cn(
169
- 'text-foreground text-md flex items-center gap-2 truncate font-medium',
170
- isGenerating && 'title-shimmer'
174
+ "text-md flex items-center gap-2 truncate font-medium text-foreground",
175
+ isGenerating && "title-shimmer",
171
176
  )}
172
177
  >
173
178
  <span className="truncate">{title}</span>
174
179
 
175
180
  {isGenerating && (
176
181
  <Loader
177
- className="text-muted-foreground size-4.5 animate-spin"
182
+ className="size-4.5 animate-spin text-muted-foreground"
178
183
  strokeWidth={1.25}
179
184
  />
180
185
  )}
@@ -187,11 +192,11 @@ export const AssistantModal: FC<AssistantModalProps> = ({ className }) => {
187
192
  type="button"
188
193
  onClick={() => setIsExpanded((v) => !v)}
189
194
  className={cn(
190
- 'text-muted-foreground hover:text-foreground hover:bg-accent flex h-8 cursor-pointer items-center rounded-md px-2 text-xs transition-colors'
195
+ "flex h-8 cursor-pointer items-center rounded-md px-2 text-xs text-muted-foreground transition-colors hover:bg-accent hover:text-foreground",
191
196
  )}
192
197
  aria-pressed={isExpanded}
193
198
  aria-label={
194
- isExpanded ? 'Collapse assistant' : 'Expand assistant'
199
+ isExpanded ? "Collapse assistant" : "Expand assistant"
195
200
  }
196
201
  >
197
202
  {isExpanded ? (
@@ -209,11 +214,11 @@ export const AssistantModal: FC<AssistantModalProps> = ({ className }) => {
209
214
  ) : null}
210
215
  <button
211
216
  onClick={() => {
212
- setIsOpen(false)
217
+ setIsOpen(false);
213
218
  // Optional: reset expansion when closing
214
- setIsExpanded(false)
219
+ setIsExpanded(false);
215
220
  }}
216
- className="text-muted-foreground hover:text-foreground hover:bg-accent -mr-1 flex size-8 cursor-pointer items-center justify-center rounded-md transition-colors"
221
+ className="-mr-1 flex size-8 cursor-pointer items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground"
217
222
  aria-label={`Close ${title}`}
218
223
  >
219
224
  <XIcon className="size-4.5" />
@@ -252,27 +257,27 @@ export const AssistantModal: FC<AssistantModalProps> = ({ className }) => {
252
257
  </div>
253
258
  </MotionConfig>
254
259
  </LazyMotion>
255
- )
256
- }
260
+ );
261
+ };
257
262
 
258
263
  function positionClassname(
259
264
  position:
260
- | 'bottom-right'
261
- | 'bottom-left'
262
- | 'top-right'
263
- | 'top-left'
264
- | undefined
265
+ | "bottom-right"
266
+ | "bottom-left"
267
+ | "top-right"
268
+ | "top-left"
269
+ | undefined,
265
270
  ): string {
266
271
  switch (position) {
267
- case 'bottom-left':
268
- return 'left-4 bottom-4'
269
- case 'top-right':
270
- return 'right-4 top-4'
271
- case 'top-left':
272
- return 'left-4 top-4'
273
- case 'bottom-right':
274
- return 'right-4 bottom-4'
272
+ case "bottom-left":
273
+ return "left-4 bottom-4";
274
+ case "top-right":
275
+ return "right-4 top-4";
276
+ case "top-left":
277
+ return "left-4 top-4";
278
+ case "bottom-right":
279
+ return "right-4 bottom-4";
275
280
  default:
276
- assertNever(position)
281
+ assertNever(position);
277
282
  }
278
283
  }
@@ -1,38 +1,38 @@
1
- 'use client'
1
+ "use client";
2
2
 
3
- import { type FC } from 'react'
4
- import { Loader, PanelRightClose, PanelRightOpen } from 'lucide-react'
5
- import { ErrorBoundary } from '@/components/assistant-ui/error-boundary'
6
- import { Thread } from '@/components/assistant-ui/thread'
7
- import { ThreadList } from '@/components/assistant-ui/thread-list'
8
- import { TooltipIconButton } from '@/components/assistant-ui/tooltip-icon-button'
9
- import { useThemeProps } from '@/hooks/useThemeProps'
10
- import { useElements } from '@/hooks/useElements'
11
- import { cn } from '@/lib/utils'
12
- import { useExpanded } from '@/hooks/useExpanded'
13
- import { LazyMotion, domMax } from 'motion/react'
14
- import * as m from 'motion/react-m'
15
- import { EASE_OUT_QUINT } from '@/lib/easing'
16
- import { useAssistantState } from '@assistant-ui/react'
3
+ import { type FC } from "react";
4
+ import { Loader, PanelRightClose, PanelRightOpen } from "lucide-react";
5
+ import { ErrorBoundary } from "@/components/assistant-ui/error-boundary";
6
+ import { Thread } from "@/components/assistant-ui/thread";
7
+ import { ThreadList } from "@/components/assistant-ui/thread-list";
8
+ import { TooltipIconButton } from "@/components/assistant-ui/tooltip-icon-button";
9
+ import { useThemeProps } from "@/hooks/useThemeProps";
10
+ import { useElements } from "@/hooks/useElements";
11
+ import { cn } from "@/lib/utils";
12
+ import { useExpanded } from "@/hooks/useExpanded";
13
+ import { LazyMotion, domMax } from "motion/react";
14
+ import * as m from "motion/react-m";
15
+ import { EASE_OUT_QUINT } from "@/lib/easing";
16
+ import { useAssistantState } from "@assistant-ui/react";
17
17
 
18
18
  interface AssistantSidecarProps {
19
- className?: string
19
+ className?: string;
20
20
  }
21
21
 
22
22
  export const AssistantSidecar: FC<AssistantSidecarProps> = ({ className }) => {
23
- const { config } = useElements()
24
- const themeProps = useThemeProps()
25
- const sidecarConfig = config.sidecar ?? {}
26
- const { title, dimensions } = sidecarConfig
27
- const { expandable, isExpanded, setIsExpanded } = useExpanded()
28
- const thread = useAssistantState(({ thread }) => thread)
23
+ const { config } = useElements();
24
+ const themeProps = useThemeProps();
25
+ const sidecarConfig = config.sidecar ?? {};
26
+ const { title, dimensions } = sidecarConfig;
27
+ const { expandable, isExpanded, setIsExpanded } = useExpanded();
28
+ const thread = useAssistantState(({ thread }) => thread);
29
29
  const isGenerating = thread.messages.some(
30
- (message) => message.status?.type === 'running'
31
- )
30
+ (message) => message.status?.type === "running",
31
+ );
32
32
 
33
33
  // Check if thread list should be shown
34
34
  const showThreadList =
35
- config.history?.enabled && config.history?.showThreadList !== false
35
+ config.history?.enabled && config.history?.showThreadList !== false;
36
36
 
37
37
  return (
38
38
  <LazyMotion features={domMax}>
@@ -40,29 +40,29 @@ export const AssistantSidecar: FC<AssistantSidecarProps> = ({ className }) => {
40
40
  initial={false}
41
41
  animate={{
42
42
  width: isExpanded
43
- ? (dimensions?.expanded?.width ?? '800px')
44
- : (dimensions?.default?.width ?? '400px'),
43
+ ? (dimensions?.expanded?.width ?? "800px")
44
+ : (dimensions?.default?.width ?? "400px"),
45
45
  }}
46
46
  transition={{ duration: 0.3, ease: EASE_OUT_QUINT }}
47
47
  className={cn(
48
- 'aui-root aui-sidecar bg-popover text-popover-foreground fixed top-0 right-0 bottom-0 flex flex-col border-l',
48
+ "aui-root aui-sidecar fixed top-0 right-0 bottom-0 flex flex-col border-l bg-popover text-popover-foreground",
49
49
  themeProps.className,
50
- className
50
+ className,
51
51
  )}
52
52
  >
53
53
  {/* Header */}
54
54
  <div className="aui-sidecar-header flex h-14 shrink-0 items-center justify-between border-b px-4">
55
55
  <span
56
56
  className={cn(
57
- 'text-foreground text-md flex items-center gap-2 font-medium',
58
- isGenerating && 'title-shimmer'
57
+ "text-md flex items-center gap-2 font-medium text-foreground",
58
+ isGenerating && "title-shimmer",
59
59
  )}
60
60
  >
61
61
  {title}
62
62
 
63
63
  {isGenerating && (
64
64
  <Loader
65
- className="text-muted-foreground size-4.5 animate-spin"
65
+ className="size-4.5 animate-spin text-muted-foreground"
66
66
  strokeWidth={1.25}
67
67
  />
68
68
  )}
@@ -70,7 +70,7 @@ export const AssistantSidecar: FC<AssistantSidecarProps> = ({ className }) => {
70
70
  {expandable && (
71
71
  <div className="aui-sidecar-header-actions flex items-center gap-1">
72
72
  <TooltipIconButton
73
- tooltip={isExpanded ? 'Collapse' : 'Pop out'}
73
+ tooltip={isExpanded ? "Collapse" : "Pop out"}
74
74
  variant="ghost"
75
75
  className="aui-sidecar-popout size-8"
76
76
  onClick={() => setIsExpanded((v) => !v)}
@@ -103,5 +103,5 @@ export const AssistantSidecar: FC<AssistantSidecarProps> = ({ className }) => {
103
103
  </div>
104
104
  </m.div>
105
105
  </LazyMotion>
106
- )
107
- }
106
+ );
107
+ };