@gram-ai/elements 1.27.3 → 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 (278) 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 +4 -2
  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.css +1 -1
  23. package/dist/elements.js +2 -2
  24. package/dist/hooks/useDensity.d.ts +73 -73
  25. package/dist/hooks/useMCPTools.d.ts +1 -1
  26. package/dist/hooks/useRadius.d.ts +1 -1
  27. package/dist/{index-BpJstUh1.cjs → index-C4bFBGfl.cjs} +4 -4
  28. package/dist/{index-BpJstUh1.cjs.map → index-C4bFBGfl.cjs.map} +1 -1
  29. package/dist/{index-CUitXazZ.js → index-D93pV0_o.js} +55 -55
  30. package/dist/{index-CUitXazZ.js.map → index-D93pV0_o.js.map} +1 -1
  31. package/dist/{index-DBrhzauj.js → index-DuCQRbcQ.js} +6386 -6337
  32. package/dist/index-DuCQRbcQ.js.map +1 -0
  33. package/dist/{index-DxfW52oA.cjs → index-y_PNN5vK.cjs} +64 -46
  34. package/dist/index-y_PNN5vK.cjs.map +1 -0
  35. package/dist/lib/cassette.d.ts +4 -4
  36. package/dist/lib/errorTracking.d.ts +1 -1
  37. package/dist/lib/messageConverter.d.ts +1 -1
  38. package/dist/lib/models.d.ts +1 -1
  39. package/dist/plugins/chart/ui/bar-chart.d.ts +1 -1
  40. package/dist/plugins/generative-ui/ui/accordion-wrapper.d.ts +2 -2
  41. package/dist/plugins/generative-ui/ui/accordion.d.ts +1 -1
  42. package/dist/plugins/generative-ui/ui/action-button.d.ts +2 -2
  43. package/dist/plugins/generative-ui/ui/alert-wrapper.d.ts +1 -1
  44. package/dist/plugins/generative-ui/ui/alert.d.ts +4 -4
  45. package/dist/plugins/generative-ui/ui/avatar.d.ts +5 -5
  46. package/dist/plugins/generative-ui/ui/badge.d.ts +2 -2
  47. package/dist/plugins/generative-ui/ui/button-wrapper.d.ts +2 -2
  48. package/dist/plugins/generative-ui/ui/button.d.ts +2 -2
  49. package/dist/plugins/generative-ui/ui/card-wrapper.d.ts +2 -2
  50. package/dist/plugins/generative-ui/ui/card.d.ts +8 -8
  51. package/dist/plugins/generative-ui/ui/checkbox.d.ts +1 -1
  52. package/dist/plugins/generative-ui/ui/data-table.d.ts +2 -2
  53. package/dist/plugins/generative-ui/ui/dialog.d.ts +3 -3
  54. package/dist/plugins/generative-ui/ui/dropdown-menu.d.ts +3 -3
  55. package/dist/plugins/generative-ui/ui/grid.d.ts +3 -3
  56. package/dist/plugins/generative-ui/ui/input-wrapper.d.ts +1 -1
  57. package/dist/plugins/generative-ui/ui/input.d.ts +2 -2
  58. package/dist/plugins/generative-ui/ui/label.d.ts +1 -1
  59. package/dist/plugins/generative-ui/ui/metric.d.ts +3 -3
  60. package/dist/plugins/generative-ui/ui/pagination.d.ts +6 -6
  61. package/dist/plugins/generative-ui/ui/popover.d.ts +4 -4
  62. package/dist/plugins/generative-ui/ui/progress.d.ts +2 -2
  63. package/dist/plugins/generative-ui/ui/radio-group.d.ts +1 -1
  64. package/dist/plugins/generative-ui/ui/select.d.ts +2 -2
  65. package/dist/plugins/generative-ui/ui/separator.d.ts +1 -1
  66. package/dist/plugins/generative-ui/ui/skeleton.d.ts +1 -1
  67. package/dist/plugins/generative-ui/ui/stack.d.ts +6 -6
  68. package/dist/plugins/generative-ui/ui/switch.d.ts +2 -2
  69. package/dist/plugins/generative-ui/ui/table.d.ts +9 -9
  70. package/dist/plugins/generative-ui/ui/tabs-wrapper.d.ts +1 -1
  71. package/dist/plugins/generative-ui/ui/tabs.d.ts +1 -1
  72. package/dist/plugins/generative-ui/ui/text.d.ts +3 -3
  73. package/dist/plugins/generative-ui/ui/textarea.d.ts +2 -2
  74. package/dist/plugins/generative-ui/ui/tooltip.d.ts +1 -1
  75. package/dist/plugins.cjs +1 -1
  76. package/dist/plugins.js +1 -1
  77. package/dist/{profiler-D6ndqfsd.js → profiler-FpBY9eRv.js} +2 -2
  78. package/dist/{profiler-D6ndqfsd.js.map → profiler-FpBY9eRv.js.map} +1 -1
  79. package/dist/{profiler-DhnzZ34c.cjs → profiler-_mthyjvo.cjs} +2 -2
  80. package/dist/{profiler-DhnzZ34c.cjs.map → profiler-_mthyjvo.cjs.map} +1 -1
  81. package/dist/react-shim.js +1 -1
  82. package/dist/server/express.cjs.map +1 -1
  83. package/dist/server/express.js.map +1 -1
  84. package/dist/{startRecording-BwXmdmy1.cjs → startRecording-NJcpiHw-.cjs} +2 -2
  85. package/dist/{startRecording-BwXmdmy1.cjs.map → startRecording-NJcpiHw-.cjs.map} +1 -1
  86. package/dist/{startRecording-B_9CRZ_P.js → startRecording-r5MXQ2Dm.js} +2 -2
  87. package/dist/{startRecording-B_9CRZ_P.js.map → startRecording-r5MXQ2Dm.js.map} +1 -1
  88. package/dist/types/index.d.ts +2 -2
  89. package/package.json +1 -5
  90. package/src/compat-plugin.ts +14 -14
  91. package/src/compat-shims.ts +33 -31
  92. package/src/compat.test.ts +48 -48
  93. package/src/compat.ts +6 -6
  94. package/src/components/Chat/index.tsx +17 -17
  95. package/src/components/Chat/stories/Charts.stories.tsx +98 -98
  96. package/src/components/Chat/stories/Composer.stories.tsx +15 -15
  97. package/src/components/Chat/stories/ConnectionConfiguration.stories.tsx +44 -44
  98. package/src/components/Chat/stories/CustomComponents.stories.tsx +17 -17
  99. package/src/components/Chat/stories/Density.stories.tsx +20 -20
  100. package/src/components/Chat/stories/ErrorBoundary.stories.tsx +47 -47
  101. package/src/components/Chat/stories/FrontendTools.stories.tsx +39 -39
  102. package/src/components/Chat/stories/GenerativeUI.stories.tsx +48 -48
  103. package/src/components/Chat/stories/MessageFeedback.stories.tsx +52 -52
  104. package/src/components/Chat/stories/Modal.stories.tsx +28 -28
  105. package/src/components/Chat/stories/Model.stories.tsx +11 -11
  106. package/src/components/Chat/stories/Radius.stories.tsx +20 -20
  107. package/src/components/Chat/stories/Sidecar.stories.tsx +13 -13
  108. package/src/components/Chat/stories/StyleIsolation.stories.tsx +11 -11
  109. package/src/components/Chat/stories/Theme.stories.tsx +25 -25
  110. package/src/components/Chat/stories/Thread.stories.tsx +25 -25
  111. package/src/components/Chat/stories/ToolApproval.stories.tsx +55 -55
  112. package/src/components/Chat/stories/ToolMentions.stories.tsx +17 -17
  113. package/src/components/Chat/stories/Tools.stories.tsx +88 -88
  114. package/src/components/Chat/stories/Variants.stories.tsx +32 -32
  115. package/src/components/Chat/stories/Welcome.stories.tsx +14 -14
  116. package/src/components/ChatHistory.tsx +7 -7
  117. package/src/components/FrontendTools/index.tsx +5 -5
  118. package/src/components/Replay.stories.tsx +157 -157
  119. package/src/components/Replay.tsx +76 -73
  120. package/src/components/ShadowRoot.tsx +40 -40
  121. package/src/components/ShareButton/index.tsx +32 -32
  122. package/src/components/assistant-ui/assistant-modal.tsx +92 -87
  123. package/src/components/assistant-ui/assistant-sidecar.tsx +35 -35
  124. package/src/components/assistant-ui/attachment.tsx +80 -80
  125. package/src/components/assistant-ui/connection-status-indicator.tsx +33 -33
  126. package/src/components/assistant-ui/error-boundary.tsx +34 -34
  127. package/src/components/assistant-ui/follow-on-suggestions.tsx +26 -26
  128. package/src/components/assistant-ui/markdown-text.tsx +69 -69
  129. package/src/components/assistant-ui/mentioned-tools-badges.tsx +38 -38
  130. package/src/components/assistant-ui/message-feedback.tsx +74 -61
  131. package/src/components/assistant-ui/reasoning.tsx +83 -83
  132. package/src/components/assistant-ui/thread-list.tsx +45 -45
  133. package/src/components/assistant-ui/thread.tsx +278 -278
  134. package/src/components/assistant-ui/tool-fallback.tsx +37 -37
  135. package/src/components/assistant-ui/tool-group.tsx +26 -26
  136. package/src/components/assistant-ui/tool-mention-autocomplete.tsx +122 -122
  137. package/src/components/assistant-ui/tooltip-icon-button.tsx +18 -18
  138. package/src/components/ui/avatar.tsx +12 -12
  139. package/src/components/ui/button.tsx +12 -12
  140. package/src/components/ui/buttonVariants.ts +17 -17
  141. package/src/components/ui/calendar.tsx +106 -106
  142. package/src/components/ui/charts.stories.tsx +56 -56
  143. package/src/components/ui/collapsible.tsx +5 -5
  144. package/src/components/ui/dialog.tsx +30 -30
  145. package/src/components/ui/generative-ui.stories.tsx +200 -200
  146. package/src/components/ui/generative-ui.tsx +26 -26
  147. package/src/components/ui/popover.tsx +14 -14
  148. package/src/components/ui/skeleton.tsx +5 -5
  149. package/src/components/ui/time-range-picker.stories.tsx +80 -80
  150. package/src/components/ui/time-range-picker.tsx +272 -235
  151. package/src/components/ui/tool-ui.stories.tsx +37 -37
  152. package/src/components/ui/tool-ui.tsx +221 -215
  153. package/src/components/ui/tooltip.tsx +15 -15
  154. package/src/constants/tailwind.ts +1 -1
  155. package/src/contexts/ChatIdContext.tsx +7 -7
  156. package/src/contexts/ConnectionStatusContext.tsx +64 -64
  157. package/src/contexts/ElementsProvider.tsx +222 -211
  158. package/src/contexts/ReplayContext.ts +3 -3
  159. package/src/contexts/ToolApprovalContext.tsx +54 -54
  160. package/src/contexts/ToolExecutionContext.tsx +34 -34
  161. package/src/contexts/contexts.ts +7 -7
  162. package/src/contexts/portal-container-context.ts +2 -2
  163. package/src/contexts/portal-container.tsx +7 -7
  164. package/src/embedded.ts +1 -1
  165. package/src/global.css +25 -25
  166. package/src/hooks/useAuth.ts +72 -72
  167. package/src/hooks/useDensity.ts +79 -79
  168. package/src/hooks/useElements.ts +6 -6
  169. package/src/hooks/useExpanded.ts +12 -12
  170. package/src/hooks/useFollowOnSuggestions.ts +87 -82
  171. package/src/hooks/useGramThreadListAdapter.tsx +99 -99
  172. package/src/hooks/useMCPTools.ts +47 -47
  173. package/src/hooks/useModel.ts +14 -14
  174. package/src/hooks/usePluginComponents.ts +11 -11
  175. package/src/hooks/usePortalContainer.ts +5 -5
  176. package/src/hooks/useRadius.ts +23 -23
  177. package/src/hooks/useRecordCassette.ts +34 -34
  178. package/src/hooks/useSession.ts +11 -11
  179. package/src/hooks/useThemeProps.ts +13 -13
  180. package/src/hooks/useThreadId.ts +4 -4
  181. package/src/hooks/useToolApproval.ts +7 -7
  182. package/src/hooks/useToolMentions.ts +40 -40
  183. package/src/index.ts +26 -26
  184. package/src/lib/api.test.ts +61 -61
  185. package/src/lib/api.ts +4 -3
  186. package/src/lib/auth.ts +13 -13
  187. package/src/lib/cassette.ts +84 -84
  188. package/src/lib/easing.ts +1 -1
  189. package/src/lib/errorTracking.config.ts +5 -5
  190. package/src/lib/errorTracking.ts +29 -29
  191. package/src/lib/generative-ui.ts +7 -7
  192. package/src/lib/humanize.ts +3 -3
  193. package/src/lib/messageConverter.test.ts +130 -127
  194. package/src/lib/messageConverter.ts +196 -196
  195. package/src/lib/models.ts +21 -20
  196. package/src/lib/token.test.ts +56 -56
  197. package/src/lib/token.ts +14 -14
  198. package/src/lib/tool-mentions.ts +45 -45
  199. package/src/lib/tools.ts +66 -62
  200. package/src/lib/utils.ts +5 -5
  201. package/src/lib.d.ts +1 -1
  202. package/src/plugins/README.md +5 -5
  203. package/src/plugins/chart/catalog.ts +18 -18
  204. package/src/plugins/chart/chart.test.ts +31 -31
  205. package/src/plugins/chart/component.tsx +34 -34
  206. package/src/plugins/chart/index.ts +4 -4
  207. package/src/plugins/chart/ui/area-chart.tsx +42 -42
  208. package/src/plugins/chart/ui/bar-chart.tsx +46 -46
  209. package/src/plugins/chart/ui/donut-chart.tsx +48 -48
  210. package/src/plugins/chart/ui/index.ts +7 -7
  211. package/src/plugins/chart/ui/line-chart.tsx +43 -43
  212. package/src/plugins/chart/ui/pie-chart.tsx +44 -44
  213. package/src/plugins/chart/ui/radar-chart.tsx +33 -33
  214. package/src/plugins/chart/ui/scatter-chart.tsx +43 -43
  215. package/src/plugins/components/MacOSWindowFrame.tsx +15 -15
  216. package/src/plugins/components/PluginLoadingState.tsx +10 -10
  217. package/src/plugins/components/index.ts +1 -1
  218. package/src/plugins/generative-ui/catalog.ts +54 -54
  219. package/src/plugins/generative-ui/component.tsx +85 -85
  220. package/src/plugins/generative-ui/index.ts +4 -4
  221. package/src/plugins/generative-ui/ui/accordion-wrapper.tsx +16 -16
  222. package/src/plugins/generative-ui/ui/accordion.tsx +16 -16
  223. package/src/plugins/generative-ui/ui/action-button.tsx +28 -28
  224. package/src/plugins/generative-ui/ui/alert-wrapper.tsx +8 -8
  225. package/src/plugins/generative-ui/ui/alert.tsx +20 -20
  226. package/src/plugins/generative-ui/ui/avatar-wrapper.tsx +7 -7
  227. package/src/plugins/generative-ui/ui/avatar.tsx +30 -30
  228. package/src/plugins/generative-ui/ui/badge.tsx +22 -22
  229. package/src/plugins/generative-ui/ui/button-wrapper.tsx +12 -12
  230. package/src/plugins/generative-ui/ui/button.tsx +28 -28
  231. package/src/plugins/generative-ui/ui/card-wrapper.tsx +8 -8
  232. package/src/plugins/generative-ui/ui/card.tsx +27 -27
  233. package/src/plugins/generative-ui/ui/checkbox-wrapper.tsx +9 -9
  234. package/src/plugins/generative-ui/ui/checkbox.tsx +9 -9
  235. package/src/plugins/generative-ui/ui/data-table.tsx +8 -8
  236. package/src/plugins/generative-ui/ui/dialog.tsx +31 -31
  237. package/src/plugins/generative-ui/ui/dropdown-menu.tsx +44 -44
  238. package/src/plugins/generative-ui/ui/grid.tsx +12 -12
  239. package/src/plugins/generative-ui/ui/index.ts +40 -40
  240. package/src/plugins/generative-ui/ui/input-wrapper.tsx +11 -11
  241. package/src/plugins/generative-ui/ui/input.tsx +9 -9
  242. package/src/plugins/generative-ui/ui/label.tsx +8 -8
  243. package/src/plugins/generative-ui/ui/list.tsx +11 -11
  244. package/src/plugins/generative-ui/ui/metric.tsx +23 -23
  245. package/src/plugins/generative-ui/ui/pagination.tsx +28 -28
  246. package/src/plugins/generative-ui/ui/popover.tsx +21 -21
  247. package/src/plugins/generative-ui/ui/progress.tsx +13 -13
  248. package/src/plugins/generative-ui/ui/radio-group.tsx +12 -12
  249. package/src/plugins/generative-ui/ui/select-wrapper.tsx +7 -7
  250. package/src/plugins/generative-ui/ui/select.tsx +37 -37
  251. package/src/plugins/generative-ui/ui/separator.tsx +9 -9
  252. package/src/plugins/generative-ui/ui/skeleton-wrapper.tsx +10 -10
  253. package/src/plugins/generative-ui/ui/skeleton.tsx +5 -5
  254. package/src/plugins/generative-ui/ui/stack.tsx +28 -28
  255. package/src/plugins/generative-ui/ui/switch.tsx +11 -11
  256. package/src/plugins/generative-ui/ui/table.tsx +32 -32
  257. package/src/plugins/generative-ui/ui/tabs-wrapper.tsx +11 -11
  258. package/src/plugins/generative-ui/ui/tabs.tsx +26 -26
  259. package/src/plugins/generative-ui/ui/text.tsx +12 -12
  260. package/src/plugins/generative-ui/ui/textarea.tsx +7 -7
  261. package/src/plugins/generative-ui/ui/tooltip.tsx +12 -12
  262. package/src/plugins/index.ts +7 -7
  263. package/src/react-shim.ts +6 -6
  264. package/src/server/bun.ts +12 -12
  265. package/src/server/core.ts +25 -25
  266. package/src/server/express.ts +17 -15
  267. package/src/server/fastify.ts +14 -14
  268. package/src/server/hono.ts +9 -9
  269. package/src/server/nextjs.ts +12 -12
  270. package/src/server/tanstack-start.ts +12 -12
  271. package/src/server.ts +27 -27
  272. package/src/storybook.d.ts +4 -4
  273. package/src/types/index.ts +122 -122
  274. package/src/types/plugins.ts +7 -7
  275. package/src/vite-env.d.ts +12 -12
  276. package/dist/compat-shims-BPJ7Q68c.js.map +0 -1
  277. package/dist/index-DBrhzauj.js.map +0 -1
  278. package/dist/index-DxfW52oA.cjs.map +0 -1
@@ -1,36 +1,36 @@
1
- 'use client'
1
+ "use client";
2
2
 
3
- import { useElements } from '@/hooks/useElements'
4
- import { AssistantModal } from '../assistant-ui/assistant-modal'
5
- import { AssistantSidecar } from '../assistant-ui/assistant-sidecar'
6
- import { ErrorBoundary } from '../assistant-ui/error-boundary'
7
- import { Thread } from '../assistant-ui/thread'
8
- import { ShadowRoot } from '@/components/ShadowRoot'
3
+ import { useElements } from "@/hooks/useElements";
4
+ import { AssistantModal } from "../assistant-ui/assistant-modal";
5
+ import { AssistantSidecar } from "../assistant-ui/assistant-sidecar";
6
+ import { ErrorBoundary } from "../assistant-ui/error-boundary";
7
+ import { Thread } from "../assistant-ui/thread";
8
+ import { ShadowRoot } from "@/components/ShadowRoot";
9
9
 
10
10
  interface ChatProps {
11
- className?: string
11
+ className?: string;
12
12
  }
13
13
 
14
14
  export const Chat = ({ className }: ChatProps) => {
15
- const { config } = useElements()
15
+ const { config } = useElements();
16
16
 
17
17
  switch (config.variant) {
18
- case 'standalone':
18
+ case "standalone":
19
19
  // Standalone variant wraps Thread with ErrorBoundary at this level
20
20
  return (
21
21
  <ErrorBoundary>
22
- <ShadowRoot hostStyle={{ height: '100%', width: '100%' }}>
22
+ <ShadowRoot hostStyle={{ height: "100%", width: "100%" }}>
23
23
  <Thread />
24
24
  </ShadowRoot>
25
25
  </ErrorBoundary>
26
- )
27
- case 'sidecar':
26
+ );
27
+ case "sidecar":
28
28
  // Sidecar has its own internal ErrorBoundary around Thread
29
29
  return (
30
- <ShadowRoot hostStyle={{ height: 'inherit', width: 'inherit' }}>
30
+ <ShadowRoot hostStyle={{ height: "inherit", width: "inherit" }}>
31
31
  <AssistantSidecar />
32
32
  </ShadowRoot>
33
- )
33
+ );
34
34
 
35
35
  // If no variant is provided then fallback to the modal
36
36
  // Modal has its own internal ErrorBoundary around Thread
@@ -39,6 +39,6 @@ export const Chat = ({ className }: ChatProps) => {
39
39
  <ShadowRoot>
40
40
  <AssistantModal className={className} />
41
41
  </ShadowRoot>
42
- )
42
+ );
43
43
  }
44
- }
44
+ };
@@ -1,260 +1,260 @@
1
- import type { Meta, StoryFn } from '@storybook/react-vite'
2
- import { Chat } from '..'
1
+ import type { Meta, StoryFn } from "@storybook/react-vite";
2
+ import { Chat } from "..";
3
3
 
4
4
  const meta: Meta<typeof Chat> = {
5
- title: 'Chat/Plugins/Charts',
5
+ title: "Chat/Plugins/Charts",
6
6
  component: Chat,
7
7
  parameters: {
8
- layout: 'fullscreen',
8
+ layout: "fullscreen",
9
9
  },
10
- } satisfies Meta<typeof Chat>
10
+ } satisfies Meta<typeof Chat>;
11
11
 
12
- export default meta
12
+ export default meta;
13
13
 
14
- type Story = StoryFn<typeof Chat>
14
+ type Story = StoryFn<typeof Chat>;
15
15
 
16
16
  /**
17
17
  * Bar chart demo - comparing categorical data using orders summary
18
18
  */
19
- export const BarChart: Story = () => <Chat />
19
+ export const BarChart: Story = () => <Chat />;
20
20
  BarChart.parameters = {
21
21
  elements: {
22
22
  config: {
23
- variant: 'standalone',
23
+ variant: "standalone",
24
24
  welcome: {
25
- title: 'Orders Analytics',
26
- subtitle: 'Bar Chart Visualizations',
25
+ title: "Orders Analytics",
26
+ subtitle: "Bar Chart Visualizations",
27
27
  suggestions: [
28
28
  {
29
- title: 'Revenue by Category',
30
- label: 'Bar chart',
29
+ title: "Revenue by Category",
30
+ label: "Bar chart",
31
31
  prompt:
32
- 'Get the orders summary and show me a bar chart of revenue by product category',
32
+ "Get the orders summary and show me a bar chart of revenue by product category",
33
33
  },
34
34
  {
35
- title: 'Orders by Region',
36
- label: 'Regional comparison',
35
+ title: "Orders by Region",
36
+ label: "Regional comparison",
37
37
  prompt:
38
- 'Fetch the orders summary and create a horizontal bar chart comparing orders by region',
38
+ "Fetch the orders summary and create a horizontal bar chart comparing orders by region",
39
39
  },
40
40
  ],
41
41
  },
42
42
  },
43
43
  },
44
- }
44
+ };
45
45
 
46
46
  /**
47
47
  * Line chart demo - showing trends over time
48
48
  */
49
- export const LineChart: Story = () => <Chat />
49
+ export const LineChart: Story = () => <Chat />;
50
50
  LineChart.parameters = {
51
51
  elements: {
52
52
  config: {
53
- variant: 'standalone',
53
+ variant: "standalone",
54
54
  welcome: {
55
- title: 'Orders Analytics',
56
- subtitle: 'Line Chart Visualizations',
55
+ title: "Orders Analytics",
56
+ subtitle: "Line Chart Visualizations",
57
57
  suggestions: [
58
58
  {
59
- title: 'Daily Orders Trend',
60
- label: 'Line chart',
59
+ title: "Daily Orders Trend",
60
+ label: "Line chart",
61
61
  prompt:
62
- 'Get the orders summary grouped by day and show me a line chart of daily order counts',
62
+ "Get the orders summary grouped by day and show me a line chart of daily order counts",
63
63
  },
64
64
  {
65
- title: 'Revenue vs Orders',
66
- label: 'Multiple series',
65
+ title: "Revenue vs Orders",
66
+ label: "Multiple series",
67
67
  prompt:
68
- 'Fetch weekly orders data and create a line chart showing both revenue and order count trends',
68
+ "Fetch weekly orders data and create a line chart showing both revenue and order count trends",
69
69
  },
70
70
  ],
71
71
  },
72
72
  },
73
73
  },
74
- }
74
+ };
75
75
 
76
76
  /**
77
77
  * Area chart demo - showing volume over time
78
78
  */
79
- export const AreaChart: Story = () => <Chat />
79
+ export const AreaChart: Story = () => <Chat />;
80
80
  AreaChart.parameters = {
81
81
  elements: {
82
82
  config: {
83
- variant: 'standalone',
83
+ variant: "standalone",
84
84
  welcome: {
85
- title: 'Orders Analytics',
86
- subtitle: 'Area Chart Visualizations',
85
+ title: "Orders Analytics",
86
+ subtitle: "Area Chart Visualizations",
87
87
  suggestions: [
88
88
  {
89
- title: 'Monthly Revenue',
90
- label: 'Area chart',
89
+ title: "Monthly Revenue",
90
+ label: "Area chart",
91
91
  prompt:
92
- 'Get the orders summary grouped by month and show me an area chart of revenue over time',
92
+ "Get the orders summary grouped by month and show me an area chart of revenue over time",
93
93
  },
94
94
  {
95
- title: 'Order Growth',
96
- label: 'Trend visualization',
95
+ title: "Order Growth",
96
+ label: "Trend visualization",
97
97
  prompt:
98
- 'Fetch monthly orders data and create an area chart showing order volume growth',
98
+ "Fetch monthly orders data and create an area chart showing order volume growth",
99
99
  },
100
100
  ],
101
101
  },
102
102
  },
103
103
  },
104
- }
104
+ };
105
105
 
106
106
  /**
107
107
  * Pie chart demo - showing proportions
108
108
  */
109
- export const PieChart: Story = () => <Chat />
109
+ export const PieChart: Story = () => <Chat />;
110
110
  PieChart.parameters = {
111
111
  elements: {
112
112
  config: {
113
- variant: 'standalone',
113
+ variant: "standalone",
114
114
  welcome: {
115
- title: 'Orders Analytics',
116
- subtitle: 'Pie Chart Visualizations',
115
+ title: "Orders Analytics",
116
+ subtitle: "Pie Chart Visualizations",
117
117
  suggestions: [
118
118
  {
119
- title: 'Category Distribution',
120
- label: 'Pie chart',
119
+ title: "Category Distribution",
120
+ label: "Pie chart",
121
121
  prompt:
122
- 'Get the orders summary and show me a pie chart of order distribution by category',
122
+ "Get the orders summary and show me a pie chart of order distribution by category",
123
123
  },
124
124
  {
125
- title: 'Order Status',
126
- label: 'Status breakdown',
125
+ title: "Order Status",
126
+ label: "Status breakdown",
127
127
  prompt:
128
- 'Fetch the orders summary and create a pie chart showing the breakdown of order statuses',
128
+ "Fetch the orders summary and create a pie chart showing the breakdown of order statuses",
129
129
  },
130
130
  ],
131
131
  },
132
132
  },
133
133
  },
134
- }
134
+ };
135
135
 
136
136
  /**
137
137
  * Donut chart demo - proportions with center metric
138
138
  */
139
- export const DonutChart: Story = () => <Chat />
139
+ export const DonutChart: Story = () => <Chat />;
140
140
  DonutChart.parameters = {
141
141
  elements: {
142
142
  config: {
143
- variant: 'standalone',
143
+ variant: "standalone",
144
144
  welcome: {
145
- title: 'Orders Analytics',
146
- subtitle: 'Donut Chart Visualizations',
145
+ title: "Orders Analytics",
146
+ subtitle: "Donut Chart Visualizations",
147
147
  suggestions: [
148
148
  {
149
- title: 'Revenue Share',
150
- label: 'Donut with total',
149
+ title: "Revenue Share",
150
+ label: "Donut with total",
151
151
  prompt:
152
- 'Get the orders summary and show a donut chart of revenue by category with the total revenue in the center',
152
+ "Get the orders summary and show a donut chart of revenue by category with the total revenue in the center",
153
153
  },
154
154
  {
155
- title: 'Order Completion',
156
- label: 'Status donut',
155
+ title: "Order Completion",
156
+ label: "Status donut",
157
157
  prompt:
158
- 'Fetch the orders summary and create a donut chart showing order status distribution with completion rate in the center',
158
+ "Fetch the orders summary and create a donut chart showing order status distribution with completion rate in the center",
159
159
  },
160
160
  ],
161
161
  },
162
162
  },
163
163
  },
164
- }
164
+ };
165
165
 
166
166
  /**
167
167
  * Scatter chart demo - showing correlation
168
168
  */
169
- export const ScatterChart: Story = () => <Chat />
169
+ export const ScatterChart: Story = () => <Chat />;
170
170
  ScatterChart.parameters = {
171
171
  elements: {
172
172
  config: {
173
- variant: 'standalone',
173
+ variant: "standalone",
174
174
  welcome: {
175
- title: 'Orders Analytics',
176
- subtitle: 'Scatter Chart Visualizations',
175
+ title: "Orders Analytics",
176
+ subtitle: "Scatter Chart Visualizations",
177
177
  suggestions: [
178
178
  {
179
- title: 'Orders vs Revenue',
180
- label: 'Correlation',
179
+ title: "Orders vs Revenue",
180
+ label: "Correlation",
181
181
  prompt:
182
- 'Get the orders summary and create a scatter chart showing the relationship between order count and revenue by region',
182
+ "Get the orders summary and create a scatter chart showing the relationship between order count and revenue by region",
183
183
  },
184
184
  {
185
- title: 'Category Performance',
186
- label: 'Orders vs AOV',
185
+ title: "Category Performance",
186
+ label: "Orders vs AOV",
187
187
  prompt:
188
- 'Fetch the orders summary and show a scatter plot of order count vs average order value for each category',
188
+ "Fetch the orders summary and show a scatter plot of order count vs average order value for each category",
189
189
  },
190
190
  ],
191
191
  },
192
192
  },
193
193
  },
194
- }
194
+ };
195
195
 
196
196
  /**
197
197
  * Radar chart demo - multi-dimensional comparison
198
198
  */
199
- export const RadarChart: Story = () => <Chat />
199
+ export const RadarChart: Story = () => <Chat />;
200
200
  RadarChart.parameters = {
201
201
  elements: {
202
202
  config: {
203
- variant: 'standalone',
203
+ variant: "standalone",
204
204
  welcome: {
205
- title: 'Orders Analytics',
206
- subtitle: 'Radar Chart Visualizations',
205
+ title: "Orders Analytics",
206
+ subtitle: "Radar Chart Visualizations",
207
207
  suggestions: [
208
208
  {
209
- title: 'Regional Performance',
210
- label: 'Radar chart',
209
+ title: "Regional Performance",
210
+ label: "Radar chart",
211
211
  prompt:
212
- 'Get the orders summary and create a radar chart comparing regions across orders, revenue, and average order value',
212
+ "Get the orders summary and create a radar chart comparing regions across orders, revenue, and average order value",
213
213
  },
214
214
  {
215
- title: 'Category Analysis',
216
- label: 'Multi-metric',
215
+ title: "Category Analysis",
216
+ label: "Multi-metric",
217
217
  prompt:
218
- 'Fetch the orders summary and show a radar chart comparing categories by order volume, revenue share, and growth',
218
+ "Fetch the orders summary and show a radar chart comparing categories by order volume, revenue share, and growth",
219
219
  },
220
220
  ],
221
221
  },
222
222
  },
223
223
  },
224
- }
224
+ };
225
225
 
226
226
  /**
227
227
  * All chart types overview
228
228
  */
229
- export const AllCharts: Story = () => <Chat />
229
+ export const AllCharts: Story = () => <Chat />;
230
230
  AllCharts.parameters = {
231
231
  elements: {
232
232
  config: {
233
- variant: 'standalone',
233
+ variant: "standalone",
234
234
  welcome: {
235
- title: 'Orders Dashboard',
236
- subtitle: 'Explore order analytics with different chart types',
235
+ title: "Orders Dashboard",
236
+ subtitle: "Explore order analytics with different chart types",
237
237
  suggestions: [
238
238
  {
239
- title: 'Revenue Trend',
240
- label: 'Line chart',
239
+ title: "Revenue Trend",
240
+ label: "Line chart",
241
241
  prompt:
242
- 'Get the monthly orders summary and show me a line chart of revenue trends',
242
+ "Get the monthly orders summary and show me a line chart of revenue trends",
243
243
  },
244
244
  {
245
- title: 'Category Breakdown',
246
- label: 'Bar chart',
245
+ title: "Category Breakdown",
246
+ label: "Bar chart",
247
247
  prompt:
248
- 'Fetch the orders summary and create a bar chart of orders by category',
248
+ "Fetch the orders summary and create a bar chart of orders by category",
249
249
  },
250
250
  {
251
- title: 'Status Distribution',
252
- label: 'Pie chart',
251
+ title: "Status Distribution",
252
+ label: "Pie chart",
253
253
  prompt:
254
- 'Get the orders summary and show a pie chart of order status distribution',
254
+ "Get the orders summary and show a pie chart of order status distribution",
255
255
  },
256
256
  ],
257
257
  },
258
258
  },
259
259
  },
260
- }
260
+ };
@@ -1,35 +1,35 @@
1
- import React from 'react'
2
- import { Chat } from '..'
3
- import type { Meta, StoryFn } from '@storybook/react-vite'
1
+ import React from "react";
2
+ import { Chat } from "..";
3
+ import type { Meta, StoryFn } from "@storybook/react-vite";
4
4
 
5
5
  const meta: Meta<typeof Chat> = {
6
- title: 'Chat/Composer',
6
+ title: "Chat/Composer",
7
7
  component: Chat,
8
8
  parameters: {
9
- layout: 'fullscreen',
9
+ layout: "fullscreen",
10
10
  },
11
- } satisfies Meta<typeof Chat>
11
+ } satisfies Meta<typeof Chat>;
12
12
 
13
- export default meta
13
+ export default meta;
14
14
 
15
- type Story = StoryFn<typeof Chat>
15
+ type Story = StoryFn<typeof Chat>;
16
16
 
17
- export const CustomPlaceholder: Story = () => <Chat />
17
+ export const CustomPlaceholder: Story = () => <Chat />;
18
18
  CustomPlaceholder.parameters = {
19
19
  elements: {
20
20
  config: {
21
- variant: 'standalone',
22
- composer: { placeholder: 'What would you like to know?' },
21
+ variant: "standalone",
22
+ composer: { placeholder: "What would you like to know?" },
23
23
  },
24
24
  },
25
- }
25
+ };
26
26
 
27
- export const AttachmentsDisabled: Story = () => <Chat />
27
+ export const AttachmentsDisabled: Story = () => <Chat />;
28
28
  AttachmentsDisabled.parameters = {
29
29
  elements: {
30
30
  config: {
31
- variant: 'standalone',
31
+ variant: "standalone",
32
32
  composer: { attachments: false },
33
33
  },
34
34
  },
35
- }
35
+ };
@@ -1,33 +1,33 @@
1
- import { GetSessionFn } from '@/types'
2
- import { google } from '@ai-sdk/google'
3
- import type { Meta, StoryFn } from '@storybook/react-vite'
4
- import { Chat } from '..'
1
+ import { GetSessionFn } from "@/types";
2
+ import { google } from "@ai-sdk/google";
3
+ import type { Meta, StoryFn } from "@storybook/react-vite";
4
+ import { Chat } from "..";
5
5
 
6
6
  const meta: Meta<typeof Chat> = {
7
- title: 'Chat/Connection Configuration',
7
+ title: "Chat/Connection Configuration",
8
8
  component: Chat,
9
9
  parameters: {
10
- layout: 'fullscreen',
10
+ layout: "fullscreen",
11
11
  },
12
- } satisfies Meta<typeof Chat>
12
+ } satisfies Meta<typeof Chat>;
13
13
 
14
- export default meta
14
+ export default meta;
15
15
 
16
- type Story = StoryFn<typeof Chat>
16
+ type Story = StoryFn<typeof Chat>;
17
17
 
18
- export const SystemPrompt: Story = () => <Chat />
19
- SystemPrompt.storyName = 'Custom System Prompt'
18
+ export const SystemPrompt: Story = () => <Chat />;
19
+ SystemPrompt.storyName = "Custom System Prompt";
20
20
  SystemPrompt.parameters = {
21
21
  elements: {
22
22
  config: {
23
- variant: 'standalone',
24
- systemPrompt: 'Please speak like a pirate',
23
+ variant: "standalone",
24
+ systemPrompt: "Please speak like a pirate",
25
25
  },
26
26
  },
27
- }
27
+ };
28
28
 
29
- export const WithImplicitSessionAuth: Story = () => <Chat />
30
- WithImplicitSessionAuth.storyName = 'With Implicit Session Auth'
29
+ export const WithImplicitSessionAuth: Story = () => <Chat />;
30
+ WithImplicitSessionAuth.storyName = "With Implicit Session Auth";
31
31
  WithImplicitSessionAuth.parameters = {
32
32
  elements: {
33
33
  config: {
@@ -35,64 +35,64 @@ WithImplicitSessionAuth.parameters = {
35
35
  api: undefined,
36
36
  },
37
37
  },
38
- }
38
+ };
39
39
 
40
40
  const session: GetSessionFn = async () => {
41
- const response = await fetch('/chat/session', {
42
- method: 'POST',
41
+ const response = await fetch("/chat/session", {
42
+ method: "POST",
43
43
  headers: {
44
- 'Gram-Project':
45
- import.meta.env.VITE_GRAM_ELEMENTS_STORYBOOK_PROJECT_SLUG ?? '',
44
+ "Gram-Project":
45
+ import.meta.env.VITE_GRAM_ELEMENTS_STORYBOOK_PROJECT_SLUG ?? "",
46
46
  },
47
- })
48
- const data = await response.json()
49
- return data.client_token
50
- }
47
+ });
48
+ const data = await response.json();
49
+ return data.client_token;
50
+ };
51
51
 
52
- export const WithExplicitSessionAuth: Story = () => <Chat />
53
- WithExplicitSessionAuth.storyName = 'With Explicit Session Auth'
52
+ export const WithExplicitSessionAuth: Story = () => <Chat />;
53
+ WithExplicitSessionAuth.storyName = "With Explicit Session Auth";
54
54
  WithExplicitSessionAuth.parameters = {
55
55
  elements: {
56
56
  config: {
57
57
  api: { session },
58
58
  },
59
59
  },
60
- }
60
+ };
61
61
 
62
- export const WithDangerousApiKey: Story = () => <Chat />
63
- WithDangerousApiKey.storyName = 'With Dangerous API Key Warning'
62
+ export const WithDangerousApiKey: Story = () => <Chat />;
63
+ WithDangerousApiKey.storyName = "With Dangerous API Key Warning";
64
64
  WithDangerousApiKey.parameters = {
65
65
  elements: {
66
66
  config: {
67
- api: { dangerousApiKey: 'test' },
67
+ api: { dangerousApiKey: "test" },
68
68
  },
69
69
  },
70
- }
70
+ };
71
71
 
72
72
  // NOTE: add Gemini API key to .env.local with the key VITE_GOOGLE_GENERATIVE_AI_API_KEY
73
- export const LanguageModel: Story = () => <Chat />
74
- LanguageModel.storyName = 'Custom Language Model (Gemini)'
73
+ export const LanguageModel: Story = () => <Chat />;
74
+ LanguageModel.storyName = "Custom Language Model (Gemini)";
75
75
  LanguageModel.parameters = {
76
76
  elements: {
77
77
  config: {
78
- variant: 'standalone',
78
+ variant: "standalone",
79
79
  welcome: {
80
- title: 'Using Google Gemini',
81
- subtitle: 'Using Google Gemini 3 Flash Preview',
80
+ title: "Using Google Gemini",
81
+ subtitle: "Using Google Gemini 3 Flash Preview",
82
82
  suggestions: [
83
83
  {
84
- title: 'Browse Products',
84
+ title: "Browse Products",
85
85
  label: "See what's available",
86
- prompt: 'What products do you have?',
86
+ prompt: "What products do you have?",
87
87
  },
88
88
  {
89
- title: 'Sales Chart',
90
- label: 'Visualize data',
91
- prompt: 'Show me a chart of product prices',
89
+ title: "Sales Chart",
90
+ label: "Visualize data",
91
+ prompt: "Show me a chart of product prices",
92
92
  },
93
93
  ],
94
94
  },
95
- languageModel: google('gemini-3-flash-preview'),
95
+ languageModel: google("gemini-3-flash-preview"),
96
96
  },
97
97
  },
98
- }
98
+ };