@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,10 +1,10 @@
1
- 'use client'
1
+ "use client";
2
2
 
3
- import * as React from 'react'
4
- import * as TooltipPrimitive from '@radix-ui/react-tooltip'
3
+ import * as React from "react";
4
+ import * as TooltipPrimitive from "@radix-ui/react-tooltip";
5
5
 
6
- import { cn } from '@/lib/utils'
7
- import { usePortalContainer } from '@/hooks/usePortalContainer'
6
+ import { cn } from "@/lib/utils";
7
+ import { usePortalContainer } from "@/hooks/usePortalContainer";
8
8
 
9
9
  function TooltipProvider({
10
10
  delayDuration = 0,
@@ -16,7 +16,7 @@ function TooltipProvider({
16
16
  delayDuration={delayDuration}
17
17
  {...props}
18
18
  />
19
- )
19
+ );
20
20
  }
21
21
 
22
22
  function Tooltip({
@@ -26,13 +26,13 @@ function Tooltip({
26
26
  <TooltipProvider>
27
27
  <TooltipPrimitive.Root data-slot="tooltip" {...props} />
28
28
  </TooltipProvider>
29
- )
29
+ );
30
30
  }
31
31
 
32
32
  function TooltipTrigger({
33
33
  ...props
34
34
  }: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {
35
- return <TooltipPrimitive.Trigger data-slot="tooltip-trigger" {...props} />
35
+ return <TooltipPrimitive.Trigger data-slot="tooltip-trigger" {...props} />;
36
36
  }
37
37
 
38
38
  function TooltipContent({
@@ -42,25 +42,25 @@ function TooltipContent({
42
42
  container,
43
43
  ...props
44
44
  }: React.ComponentProps<typeof TooltipPrimitive.Content> & {
45
- container?: HTMLElement | null
45
+ container?: HTMLElement | null;
46
46
  }) {
47
- const portalContainer = usePortalContainer()
47
+ const portalContainer = usePortalContainer();
48
48
  return (
49
49
  <TooltipPrimitive.Portal container={container ?? portalContainer}>
50
50
  <TooltipPrimitive.Content
51
51
  data-slot="tooltip-content"
52
52
  sideOffset={sideOffset}
53
53
  className={cn(
54
- 'bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-[70] w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance',
55
- className
54
+ "z-[70] w-fit origin-(--radix-tooltip-content-transform-origin) animate-in rounded-md bg-foreground px-3 py-1.5 text-xs text-balance text-background fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95",
55
+ className,
56
56
  )}
57
57
  {...props}
58
58
  >
59
59
  {children}
60
- <TooltipPrimitive.Arrow className="bg-foreground fill-foreground z-[70] size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px]" />
60
+ <TooltipPrimitive.Arrow className="z-[70] size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground" />
61
61
  </TooltipPrimitive.Content>
62
62
  </TooltipPrimitive.Portal>
63
- )
63
+ );
64
64
  }
65
65
 
66
- export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }
66
+ export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };
@@ -1,2 +1,2 @@
1
1
  // Used to scope elements styles to the Elements library
2
- export const ROOT_SELECTOR = 'gram-elements'
2
+ export const ROOT_SELECTOR = "gram-elements";
@@ -1,10 +1,10 @@
1
- import { createContext, useContext } from 'react'
1
+ import { createContext, useContext } from "react";
2
2
 
3
3
  export interface ChatIdContextValue {
4
- chatId: string | null
4
+ chatId: string | null;
5
5
  }
6
6
 
7
- export const ChatIdContext = createContext<ChatIdContextValue | null>(null)
7
+ export const ChatIdContext = createContext<ChatIdContextValue | null>(null);
8
8
 
9
9
  /**
10
10
  * Hook to access the current chat ID from the Elements context.
@@ -13,9 +13,9 @@ export const ChatIdContext = createContext<ChatIdContextValue | null>(null)
13
13
  * @returns The current chat ID, or null if not yet initialized
14
14
  */
15
15
  export const useChatId = () => {
16
- const context = useContext(ChatIdContext)
16
+ const context = useContext(ChatIdContext);
17
17
  if (!context) {
18
- throw new Error('useChatId must be used within ElementsProvider')
18
+ throw new Error("useChatId must be used within ElementsProvider");
19
19
  }
20
- return context.chatId
21
- }
20
+ return context.chatId;
21
+ };
@@ -1,4 +1,4 @@
1
- 'use client'
1
+ "use client";
2
2
 
3
3
  import {
4
4
  createContext,
@@ -8,119 +8,119 @@ import {
8
8
  useRef,
9
9
  useEffect,
10
10
  type ReactNode,
11
- } from 'react'
11
+ } from "react";
12
12
 
13
- export type ConnectionState = 'connected' | 'reconnecting' | 'disconnected'
13
+ export type ConnectionState = "connected" | "reconnecting" | "disconnected";
14
14
 
15
15
  interface ConnectionStatusContextValue {
16
16
  /** Current connection state */
17
- state: ConnectionState
17
+ state: ConnectionState;
18
18
  /** Number of reconnection attempts */
19
- retryCount: number
19
+ retryCount: number;
20
20
  /** Whether the browser reports being online */
21
- isOnline: boolean
21
+ isOnline: boolean;
22
22
  /** Mark connection as failed - will trigger reconnecting state */
23
- markDisconnected: () => void
23
+ markDisconnected: () => void;
24
24
  /** Mark connection as restored */
25
- markConnected: () => void
25
+ markConnected: () => void;
26
26
  /** Reset the connection state */
27
- reset: () => void
27
+ reset: () => void;
28
28
  }
29
29
 
30
30
  const ConnectionStatusContext =
31
- createContext<ConnectionStatusContextValue | null>(null)
31
+ createContext<ConnectionStatusContextValue | null>(null);
32
32
 
33
33
  interface ConnectionStatusProviderProps {
34
- children: ReactNode
34
+ children: ReactNode;
35
35
  }
36
36
 
37
37
  export const ConnectionStatusProvider = ({
38
38
  children,
39
39
  }: ConnectionStatusProviderProps) => {
40
- const [state, setState] = useState<ConnectionState>('connected')
41
- const [retryCount, setRetryCount] = useState(0)
40
+ const [state, setState] = useState<ConnectionState>("connected");
41
+ const [retryCount, setRetryCount] = useState(0);
42
42
  const [isOnline, setIsOnline] = useState(
43
- typeof navigator !== 'undefined' ? navigator.onLine : true
44
- )
45
- const reconnectTimeoutRef = useRef<NodeJS.Timeout | null>(null)
43
+ typeof navigator !== "undefined" ? navigator.onLine : true,
44
+ );
45
+ const reconnectTimeoutRef = useRef<NodeJS.Timeout | null>(null);
46
46
 
47
47
  // Monitor browser online/offline status
48
48
  useEffect(() => {
49
- if (typeof window === 'undefined') return
49
+ if (typeof window === "undefined") return;
50
50
 
51
51
  const handleOnline = () => {
52
- setIsOnline(true)
52
+ setIsOnline(true);
53
53
 
54
54
  // Clear any existing timeout
55
55
  if (reconnectTimeoutRef.current) {
56
- clearTimeout(reconnectTimeoutRef.current)
57
- reconnectTimeoutRef.current = null
56
+ clearTimeout(reconnectTimeoutRef.current);
57
+ reconnectTimeoutRef.current = null;
58
58
  }
59
59
 
60
60
  // Show "Reconnecting..." briefly, then mark as connected
61
- setState('reconnecting')
61
+ setState("reconnecting");
62
62
  reconnectTimeoutRef.current = setTimeout(() => {
63
- setState('connected')
64
- setRetryCount(0)
65
- }, 1500) // Show reconnecting for 1.5s before clearing
66
- }
63
+ setState("connected");
64
+ setRetryCount(0);
65
+ }, 1500); // Show reconnecting for 1.5s before clearing
66
+ };
67
67
 
68
68
  const handleOffline = () => {
69
- setIsOnline(false)
69
+ setIsOnline(false);
70
70
  // Immediately mark as disconnected when browser goes offline
71
- setState('disconnected')
71
+ setState("disconnected");
72
72
  if (reconnectTimeoutRef.current) {
73
- clearTimeout(reconnectTimeoutRef.current)
74
- reconnectTimeoutRef.current = null
73
+ clearTimeout(reconnectTimeoutRef.current);
74
+ reconnectTimeoutRef.current = null;
75
75
  }
76
- }
76
+ };
77
77
 
78
- window.addEventListener('online', handleOnline)
79
- window.addEventListener('offline', handleOffline)
78
+ window.addEventListener("online", handleOnline);
79
+ window.addEventListener("offline", handleOffline);
80
80
 
81
81
  return () => {
82
- window.removeEventListener('online', handleOnline)
83
- window.removeEventListener('offline', handleOffline)
82
+ window.removeEventListener("online", handleOnline);
83
+ window.removeEventListener("offline", handleOffline);
84
84
  // Clear any pending timeout to prevent memory leak
85
85
  if (reconnectTimeoutRef.current) {
86
- clearTimeout(reconnectTimeoutRef.current)
87
- reconnectTimeoutRef.current = null
86
+ clearTimeout(reconnectTimeoutRef.current);
87
+ reconnectTimeoutRef.current = null;
88
88
  }
89
- }
90
- }, [])
89
+ };
90
+ }, []);
91
91
 
92
92
  const markDisconnected = useCallback(() => {
93
- setState('reconnecting')
94
- setRetryCount((prev) => prev + 1)
93
+ setState("reconnecting");
94
+ setRetryCount((prev) => prev + 1);
95
95
 
96
96
  // After 10 seconds of reconnecting, mark as fully disconnected
97
97
  if (reconnectTimeoutRef.current) {
98
- clearTimeout(reconnectTimeoutRef.current)
98
+ clearTimeout(reconnectTimeoutRef.current);
99
99
  }
100
100
  reconnectTimeoutRef.current = setTimeout(() => {
101
101
  setState((current) =>
102
- current === 'reconnecting' ? 'disconnected' : current
103
- )
104
- }, 10000)
105
- }, [])
102
+ current === "reconnecting" ? "disconnected" : current,
103
+ );
104
+ }, 10000);
105
+ }, []);
106
106
 
107
107
  const markConnected = useCallback(() => {
108
108
  if (reconnectTimeoutRef.current) {
109
- clearTimeout(reconnectTimeoutRef.current)
110
- reconnectTimeoutRef.current = null
109
+ clearTimeout(reconnectTimeoutRef.current);
110
+ reconnectTimeoutRef.current = null;
111
111
  }
112
- setState('connected')
113
- setRetryCount(0)
114
- }, [])
112
+ setState("connected");
113
+ setRetryCount(0);
114
+ }, []);
115
115
 
116
116
  const reset = useCallback(() => {
117
117
  if (reconnectTimeoutRef.current) {
118
- clearTimeout(reconnectTimeoutRef.current)
119
- reconnectTimeoutRef.current = null
118
+ clearTimeout(reconnectTimeoutRef.current);
119
+ reconnectTimeoutRef.current = null;
120
120
  }
121
- setState('connected')
122
- setRetryCount(0)
123
- }, [])
121
+ setState("connected");
122
+ setRetryCount(0);
123
+ }, []);
124
124
 
125
125
  return (
126
126
  <ConnectionStatusContext.Provider
@@ -135,18 +135,18 @@ export const ConnectionStatusProvider = ({
135
135
  >
136
136
  {children}
137
137
  </ConnectionStatusContext.Provider>
138
- )
139
- }
138
+ );
139
+ };
140
140
 
141
141
  export const useConnectionStatus = () => {
142
- const context = useContext(ConnectionStatusContext)
142
+ const context = useContext(ConnectionStatusContext);
143
143
  if (!context) {
144
144
  throw new Error(
145
- 'useConnectionStatus must be used within a ConnectionStatusProvider'
146
- )
145
+ "useConnectionStatus must be used within a ConnectionStatusProvider",
146
+ );
147
147
  }
148
- return context
149
- }
148
+ return context;
149
+ };
150
150
 
151
151
  /**
152
152
  * Hook that returns connection status helpers for use in sendMessages.
@@ -154,5 +154,5 @@ export const useConnectionStatus = () => {
154
154
  */
155
155
 
156
156
  export const useConnectionStatusOptional = () => {
157
- return useContext(ConnectionStatusContext)
158
- }
157
+ return useContext(ConnectionStatusContext);
158
+ };