@gram-ai/elements 1.27.4 → 1.27.6

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 +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.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-KSX4Qjip.cjs → index-A17b62wR.cjs} +10 -10
  28. package/dist/index-A17b62wR.cjs.map +1 -0
  29. package/dist/{index-BpJstUh1.cjs → index-C4bFBGfl.cjs} +4 -4
  30. package/dist/{index-BpJstUh1.cjs.map → index-C4bFBGfl.cjs.map} +1 -1
  31. package/dist/{index-CUitXazZ.js → index-D93pV0_o.js} +55 -55
  32. package/dist/{index-CUitXazZ.js.map → index-D93pV0_o.js.map} +1 -1
  33. package/dist/{index-D0bAYNQy.js → index-Dm2wLFTN.js} +304 -282
  34. package/dist/index-Dm2wLFTN.js.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-CyzxBxVz.cjs → profiler-Cbbf4eEX.cjs} +2 -2
  78. package/dist/{profiler-CyzxBxVz.cjs.map → profiler-Cbbf4eEX.cjs.map} +1 -1
  79. package/dist/{profiler-BFkhZRxj.js → profiler-mca4IXaY.js} +2 -2
  80. package/dist/{profiler-BFkhZRxj.js.map → profiler-mca4IXaY.js.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-C-PPAs_Z.js → startRecording-BCafdS7B.js} +2 -2
  85. package/dist/{startRecording-C-PPAs_Z.js.map → startRecording-BCafdS7B.js.map} +1 -1
  86. package/dist/{startRecording-Dq92sEHf.cjs → startRecording-Eb5f7wqP.cjs} +2 -2
  87. package/dist/{startRecording-Dq92sEHf.cjs.map → startRecording-Eb5f7wqP.cjs.map} +1 -1
  88. package/dist/types/index.d.ts +4 -4
  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 +57 -50
  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 +248 -246
  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 +214 -213
  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 +83 -83
  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 +28 -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 +124 -124
  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-D0bAYNQy.js.map +0 -1
  278. package/dist/index-KSX4Qjip.cjs.map +0 -1
@@ -1,4 +1,4 @@
1
- import { useReplayContext } from '@/contexts/ReplayContext'
1
+ import { useReplayContext } from "@/contexts/ReplayContext";
2
2
  import {
3
3
  hasExplicitSessionAuth,
4
4
  isAnyStaticSession,
@@ -6,63 +6,63 @@ import {
6
6
  isStaticSessionAuth,
7
7
  isUnifiedFunctionSession,
8
8
  isUnifiedStaticSession,
9
- } from '@/lib/auth'
10
- import { getTokenExpiry } from '@/lib/token'
11
- import { useCallback, useMemo } from 'react'
12
- import { ApiConfig, GetSessionFn } from '../types'
13
- import { getChatSessionQueryKey, useSession } from './useSession'
14
- import { useQueryClient } from '@tanstack/react-query'
9
+ } from "@/lib/auth";
10
+ import { getTokenExpiry } from "@/lib/token";
11
+ import { useCallback, useMemo } from "react";
12
+ import { ApiConfig, GetSessionFn } from "../types";
13
+ import { getChatSessionQueryKey, useSession } from "./useSession";
14
+ import { useQueryClient } from "@tanstack/react-query";
15
15
 
16
- declare const __GRAM_API_URL__: string | undefined
16
+ declare const __GRAM_API_URL__: string | undefined;
17
17
 
18
18
  export type Auth =
19
19
  | {
20
- headers: Record<string, string>
21
- isLoading: false
22
- ensureValidHeaders: () => Promise<Record<string, string>>
20
+ headers: Record<string, string>;
21
+ isLoading: false;
22
+ ensureValidHeaders: () => Promise<Record<string, string>>;
23
23
  }
24
24
  | {
25
- headers?: Record<string, string>
26
- isLoading: true
27
- ensureValidHeaders: () => Promise<Record<string, string>>
28
- }
25
+ headers?: Record<string, string>;
26
+ isLoading: true;
27
+ ensureValidHeaders: () => Promise<Record<string, string>>;
28
+ };
29
29
 
30
30
  async function defaultGetSession(init: {
31
- projectSlug: string
31
+ projectSlug: string;
32
32
  }): Promise<string> {
33
- const response = await fetch('/chat/session', {
34
- method: 'POST',
33
+ const response = await fetch("/chat/session", {
34
+ method: "POST",
35
35
  headers: {
36
- 'Gram-Project': init.projectSlug,
36
+ "Gram-Project": init.projectSlug,
37
37
  },
38
38
  body: JSON.stringify({
39
39
  embedOrigin: window.location.origin,
40
40
  }),
41
- })
42
- const data = await response.json()
43
- return data.client_token
41
+ });
42
+ const data = await response.json();
43
+ return data.client_token;
44
44
  }
45
45
 
46
46
  function createDangerousApiKeySessionFn(
47
47
  apiKey: string,
48
- apiUrl: string
48
+ apiUrl: string,
49
49
  ): GetSessionFn {
50
50
  return async ({ projectSlug }) => {
51
51
  const response = await fetch(`${apiUrl}/rpc/chatSessions.create`, {
52
- method: 'POST',
52
+ method: "POST",
53
53
  headers: {
54
- 'Content-Type': 'application/json',
55
- 'Gram-Key': apiKey,
56
- 'Gram-Project': projectSlug,
54
+ "Content-Type": "application/json",
55
+ "Gram-Key": apiKey,
56
+ "Gram-Project": projectSlug,
57
57
  },
58
58
  body: JSON.stringify({
59
59
  embed_origin: window.location.origin,
60
- user_identifier: 'elements-dev',
60
+ user_identifier: "elements-dev",
61
61
  }),
62
- })
63
- const data = await response.json()
64
- return data.client_token
65
- }
62
+ });
63
+ const data = await response.json();
64
+ return data.client_token;
65
+ };
66
66
  }
67
67
 
68
68
  /**
@@ -73,47 +73,47 @@ export const useAuth = ({
73
73
  projectSlug,
74
74
  auth,
75
75
  }: {
76
- auth?: ApiConfig
77
- projectSlug: string
76
+ auth?: ApiConfig;
77
+ projectSlug: string;
78
78
  }): Auth => {
79
- const replayCtx = useReplayContext()
80
- const isReplay = replayCtx?.isReplay ?? false
81
- const queryClient = useQueryClient()
79
+ const replayCtx = useReplayContext();
80
+ const isReplay = replayCtx?.isReplay ?? false;
81
+ const queryClient = useQueryClient();
82
82
 
83
83
  const apiUrl = useMemo(() => {
84
84
  const envUrl =
85
- typeof __GRAM_API_URL__ !== 'undefined' ? __GRAM_API_URL__ : undefined
86
- const url = auth?.url || envUrl || 'https://app.getgram.ai'
87
- return url.replace(/\/+$/, '')
88
- }, [auth?.url])
85
+ typeof __GRAM_API_URL__ !== "undefined" ? __GRAM_API_URL__ : undefined;
86
+ const url = auth?.url || envUrl || "https://app.getgram.ai";
87
+ return url.replace(/\/+$/, "");
88
+ }, [auth?.url]);
89
89
 
90
90
  const getSession = useMemo(() => {
91
91
  // In replay mode, skip session fetching entirely
92
92
  if (isReplay) {
93
- return null
93
+ return null;
94
94
  }
95
95
  // dangerousApiKey — exchange key for session via API
96
96
  if (isDangerousApiKeyAuth(auth)) {
97
- return createDangerousApiKeySessionFn(auth.dangerousApiKey, apiUrl)
97
+ return createDangerousApiKeySessionFn(auth.dangerousApiKey, apiUrl);
98
98
  }
99
99
  // Unified session: static string
100
100
  if (isUnifiedStaticSession(auth)) {
101
- return () => Promise.resolve(auth.session)
101
+ return () => Promise.resolve(auth.session);
102
102
  }
103
103
  // Unified session: function
104
104
  if (isUnifiedFunctionSession(auth)) {
105
- return auth.session
105
+ return auth.session;
106
106
  }
107
107
  // Legacy: static sessionToken (deprecated)
108
108
  if (isStaticSessionAuth(auth)) {
109
- return () => Promise.resolve(auth.sessionToken)
109
+ return () => Promise.resolve(auth.sessionToken);
110
110
  }
111
111
  // Legacy: explicit sessionFn (deprecated)
112
112
  if (hasExplicitSessionAuth(auth)) {
113
- return auth.sessionFn
113
+ return auth.sessionFn;
114
114
  }
115
- return defaultGetSession
116
- }, [auth, isReplay, apiUrl])
115
+ return defaultGetSession;
116
+ }, [auth, isReplay, apiUrl]);
117
117
 
118
118
  // The session request is only necessary if we are not using static session auth
119
119
  // configuration. If a custom session fetcher is provided, we use it,
@@ -121,46 +121,46 @@ export const useAuth = ({
121
121
  const session = useSession({
122
122
  getSession,
123
123
  projectSlug,
124
- })
124
+ });
125
125
 
126
- const shouldRefresh = !isAnyStaticSession(auth) && !isReplay
126
+ const shouldRefresh = !isAnyStaticSession(auth) && !isReplay;
127
127
 
128
128
  const ensureValidHeaders = useCallback(async (): Promise<
129
129
  Record<string, string>
130
130
  > => {
131
- const queryKey = getChatSessionQueryKey(projectSlug)
132
- const cachedToken = queryClient.getQueryData<string>(queryKey)
131
+ const queryKey = getChatSessionQueryKey(projectSlug);
132
+ const cachedToken = queryClient.getQueryData<string>(queryKey);
133
133
 
134
134
  if (!shouldRefresh || !getSession) {
135
135
  return {
136
- 'Gram-Project': projectSlug,
137
- ...(cachedToken && { 'Gram-Chat-Session': cachedToken }),
138
- }
136
+ "Gram-Project": projectSlug,
137
+ ...(cachedToken && { "Gram-Chat-Session": cachedToken }),
138
+ };
139
139
  }
140
140
 
141
141
  // Check if the cached token is expired (or within 30s of expiry).
142
142
  // staleTime=0 forces a refetch; Infinity keeps the cached value.
143
- const exp = cachedToken ? getTokenExpiry(cachedToken) : null
144
- const isExpired = exp !== null && Date.now() >= exp * 1000 - 30_000
145
- const staleTime = isExpired ? 0 : Infinity
143
+ const exp = cachedToken ? getTokenExpiry(cachedToken) : null;
144
+ const isExpired = exp !== null && Date.now() >= exp * 1000 - 30_000;
145
+ const staleTime = isExpired ? 0 : Infinity;
146
146
 
147
147
  try {
148
148
  const token = await queryClient.fetchQuery({
149
149
  queryKey,
150
150
  queryFn: () => getSession({ projectSlug }),
151
151
  staleTime,
152
- })
152
+ });
153
153
  return {
154
- 'Gram-Project': projectSlug,
155
- ...(token && { 'Gram-Chat-Session': token }),
156
- }
154
+ "Gram-Project": projectSlug,
155
+ ...(token && { "Gram-Chat-Session": token }),
156
+ };
157
157
  } catch {
158
158
  return {
159
- 'Gram-Project': projectSlug,
160
- ...(cachedToken && { 'Gram-Chat-Session': cachedToken }),
161
- }
159
+ "Gram-Project": projectSlug,
160
+ ...(cachedToken && { "Gram-Chat-Session": cachedToken }),
161
+ };
162
162
  }
163
- }, [shouldRefresh, getSession, projectSlug, queryClient])
163
+ }, [shouldRefresh, getSession, projectSlug, queryClient]);
164
164
 
165
165
  // In replay mode, return immediately without waiting for session
166
166
  if (isReplay) {
@@ -168,7 +168,7 @@ export const useAuth = ({
168
168
  headers: {},
169
169
  isLoading: false,
170
170
  ensureValidHeaders: async () => ({}),
171
- }
171
+ };
172
172
  }
173
173
 
174
174
  return !session
@@ -178,10 +178,10 @@ export const useAuth = ({
178
178
  }
179
179
  : {
180
180
  headers: {
181
- 'Gram-Project': projectSlug,
182
- 'Gram-Chat-Session': session,
181
+ "Gram-Project": projectSlug,
182
+ "Gram-Chat-Session": session,
183
183
  },
184
184
  isLoading: false,
185
185
  ensureValidHeaders,
186
- }
187
- }
186
+ };
187
+ };
@@ -1,4 +1,4 @@
1
- import { useElements } from './useElements'
1
+ import { useElements } from "./useElements";
2
2
 
3
3
  /**
4
4
  * Density class mappings for different UI elements
@@ -6,105 +6,105 @@ import { useElements } from './useElements'
6
6
  const densityClasses = {
7
7
  compact: {
8
8
  // Padding - small increments (1, 1.5, 2, 2.5, 3)
9
- 'p-xs': 'p-1',
10
- 'p-sm': 'p-1.5',
11
- 'p-md': 'p-2',
12
- 'p-lg': 'p-2.5',
13
- 'p-xl': 'p-3',
14
- 'px-xs': 'px-1',
15
- 'px-sm': 'px-1.5',
16
- 'px-md': 'px-2',
17
- 'px-lg': 'px-2.5',
18
- 'px-xl': 'px-3',
19
- 'py-xs': 'py-1',
20
- 'py-sm': 'py-1.5',
21
- 'py-md': 'py-2',
22
- 'py-lg': 'py-2.5',
23
- 'py-xl': 'py-3',
9
+ "p-xs": "p-1",
10
+ "p-sm": "p-1.5",
11
+ "p-md": "p-2",
12
+ "p-lg": "p-2.5",
13
+ "p-xl": "p-3",
14
+ "px-xs": "px-1",
15
+ "px-sm": "px-1.5",
16
+ "px-md": "px-2",
17
+ "px-lg": "px-2.5",
18
+ "px-xl": "px-3",
19
+ "py-xs": "py-1",
20
+ "py-sm": "py-1.5",
21
+ "py-md": "py-2",
22
+ "py-lg": "py-2.5",
23
+ "py-xl": "py-3",
24
24
  // Gaps - small increments
25
- 'gap-sm': 'gap-1',
26
- 'gap-md': 'gap-1.5',
27
- 'gap-lg': 'gap-2',
28
- 'gap-xl': 'gap-2.5',
25
+ "gap-sm": "gap-1",
26
+ "gap-md": "gap-1.5",
27
+ "gap-lg": "gap-2",
28
+ "gap-xl": "gap-2.5",
29
29
  // Heights
30
- 'h-header': 'h-10',
31
- 'h-input': 'min-h-10',
30
+ "h-header": "h-10",
31
+ "h-input": "min-h-10",
32
32
  // Text
33
- 'text-base': 'text-sm',
34
- 'text-title': 'text-xl',
35
- 'text-subtitle': 'text-sm',
33
+ "text-base": "text-sm",
34
+ "text-title": "text-xl",
35
+ "text-subtitle": "text-sm",
36
36
  },
37
37
  normal: {
38
38
  // Padding - medium increments (1, 2, 3, 4, 5, 6)
39
- 'p-xs': 'p-1',
40
- 'p-sm': 'p-2',
41
- 'p-md': 'p-3',
42
- 'p-lg': 'p-4',
43
- 'p-xl': 'p-6',
44
- 'px-xs': 'px-1',
45
- 'px-sm': 'px-2',
46
- 'px-md': 'px-3',
47
- 'px-lg': 'px-4',
48
- 'px-xl': 'px-6',
49
- 'py-xs': 'py-1',
50
- 'py-sm': 'py-2',
51
- 'py-md': 'py-3',
52
- 'py-lg': 'py-4',
53
- 'py-xl': 'py-6',
39
+ "p-xs": "p-1",
40
+ "p-sm": "p-2",
41
+ "p-md": "p-3",
42
+ "p-lg": "p-4",
43
+ "p-xl": "p-6",
44
+ "px-xs": "px-1",
45
+ "px-sm": "px-2",
46
+ "px-md": "px-3",
47
+ "px-lg": "px-4",
48
+ "px-xl": "px-6",
49
+ "py-xs": "py-1",
50
+ "py-sm": "py-2",
51
+ "py-md": "py-3",
52
+ "py-lg": "py-4",
53
+ "py-xl": "py-6",
54
54
  // Gaps - medium increments
55
- 'gap-sm': 'gap-1.5',
56
- 'gap-md': 'gap-2',
57
- 'gap-lg': 'gap-3',
58
- 'gap-xl': 'gap-4',
55
+ "gap-sm": "gap-1.5",
56
+ "gap-md": "gap-2",
57
+ "gap-lg": "gap-3",
58
+ "gap-xl": "gap-4",
59
59
  // Heights
60
- 'h-header': 'h-12',
61
- 'h-input': 'min-h-12',
60
+ "h-header": "h-12",
61
+ "h-input": "min-h-12",
62
62
  // Text
63
- 'text-base': 'text-base',
64
- 'text-title': 'text-2xl',
65
- 'text-subtitle': 'text-base',
63
+ "text-base": "text-base",
64
+ "text-title": "text-2xl",
65
+ "text-subtitle": "text-base",
66
66
  },
67
67
  spacious: {
68
68
  // Padding - large increments (2, 3, 4, 6, 8, 10)
69
- 'p-xs': 'p-2',
70
- 'p-sm': 'p-3',
71
- 'p-md': 'p-4',
72
- 'p-lg': 'p-6',
73
- 'p-xl': 'p-10',
74
- 'px-xs': 'px-2',
75
- 'px-sm': 'px-3',
76
- 'px-md': 'px-4',
77
- 'px-lg': 'px-6',
78
- 'px-xl': 'px-10',
79
- 'py-xs': 'py-2',
80
- 'py-sm': 'py-3',
81
- 'py-md': 'py-4',
82
- 'py-lg': 'py-6',
83
- 'py-xl': 'py-10',
69
+ "p-xs": "p-2",
70
+ "p-sm": "p-3",
71
+ "p-md": "p-4",
72
+ "p-lg": "p-6",
73
+ "p-xl": "p-10",
74
+ "px-xs": "px-2",
75
+ "px-sm": "px-3",
76
+ "px-md": "px-4",
77
+ "px-lg": "px-6",
78
+ "px-xl": "px-10",
79
+ "py-xs": "py-2",
80
+ "py-sm": "py-3",
81
+ "py-md": "py-4",
82
+ "py-lg": "py-6",
83
+ "py-xl": "py-10",
84
84
  // Gaps - large increments
85
- 'gap-sm': 'gap-2',
86
- 'gap-md': 'gap-3',
87
- 'gap-lg': 'gap-4',
88
- 'gap-xl': 'gap-6',
85
+ "gap-sm": "gap-2",
86
+ "gap-md": "gap-3",
87
+ "gap-lg": "gap-4",
88
+ "gap-xl": "gap-6",
89
89
  // Heights
90
- 'h-header': 'h-14',
91
- 'h-input': 'min-h-16',
90
+ "h-header": "h-14",
91
+ "h-input": "min-h-16",
92
92
  // Text
93
- 'text-base': 'text-lg',
94
- 'text-title': 'text-3xl',
95
- 'text-subtitle': 'text-lg',
93
+ "text-base": "text-lg",
94
+ "text-title": "text-3xl",
95
+ "text-subtitle": "text-lg",
96
96
  },
97
- } as const
97
+ } as const;
98
98
 
99
- type DensityToken = keyof (typeof densityClasses)['normal']
99
+ type DensityToken = keyof (typeof densityClasses)["normal"];
100
100
 
101
101
  /**
102
102
  * Hook to get density classes based on theme config
103
103
  * Use: const d = useDensity(); then d('p-md') returns the appropriate padding class
104
104
  */
105
105
  export const useDensity = () => {
106
- const { config } = useElements()
107
- const density = config.theme?.density ?? 'normal'
106
+ const { config } = useElements();
107
+ const density = config.theme?.density ?? "normal";
108
108
 
109
- return (token: DensityToken) => densityClasses[density][token]
110
- }
109
+ return (token: DensityToken) => densityClasses[density][token];
110
+ };
@@ -1,14 +1,14 @@
1
- import { useContext } from 'react'
2
- import { ElementsContext } from '@/contexts/contexts'
1
+ import { useContext } from "react";
2
+ import { ElementsContext } from "@/contexts/contexts";
3
3
 
4
4
  /**
5
5
  * @private Internal hook to access the ElementsContext
6
6
  *
7
7
  */
8
8
  export const useElements = () => {
9
- const context = useContext(ElementsContext)
9
+ const context = useContext(ElementsContext);
10
10
  if (!context) {
11
- throw new Error('useElements must be used within a ElementsProvider')
11
+ throw new Error("useElements must be used within a ElementsProvider");
12
12
  }
13
- return context
14
- }
13
+ return context;
14
+ };
@@ -1,27 +1,27 @@
1
- import { Dispatch, SetStateAction } from 'react'
2
- import { useElements } from './useElements'
1
+ import { Dispatch, SetStateAction } from "react";
2
+ import { useElements } from "./useElements";
3
3
 
4
4
  interface UseExpandedAPI {
5
- expandable: boolean
6
- isExpanded: boolean
7
- defaultExpanded: boolean
8
- setIsExpanded: Dispatch<SetStateAction<boolean>>
5
+ expandable: boolean;
6
+ isExpanded: boolean;
7
+ defaultExpanded: boolean;
8
+ setIsExpanded: Dispatch<SetStateAction<boolean>>;
9
9
  }
10
10
 
11
11
  export const useExpanded = (): UseExpandedAPI => {
12
- const { config, isExpanded, setIsExpanded } = useElements()
12
+ const { config, isExpanded, setIsExpanded } = useElements();
13
13
 
14
14
  // Use sidecar config for sidecar variant, modal config for widget variant
15
15
  const expandableConfig =
16
- config.variant === 'sidecar' ? config.sidecar : config.modal
16
+ config.variant === "sidecar" ? config.sidecar : config.modal;
17
17
 
18
- const expandable = expandableConfig?.expandable ?? false
19
- const defaultExpanded = expandableConfig?.defaultExpanded ?? false
18
+ const expandable = expandableConfig?.expandable ?? false;
19
+ const defaultExpanded = expandableConfig?.defaultExpanded ?? false;
20
20
 
21
21
  return {
22
22
  expandable,
23
23
  isExpanded,
24
24
  setIsExpanded,
25
25
  defaultExpanded,
26
- }
27
- }
26
+ };
27
+ };