@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,7 +1,7 @@
1
- 'use client'
1
+ "use client";
2
2
 
3
- import { cn } from '@/lib/utils'
4
- import { FC, useMemo } from 'react'
3
+ import { cn } from "@/lib/utils";
4
+ import { FC, useMemo } from "react";
5
5
  import {
6
6
  LineChart as RechartsLineChart,
7
7
  Line,
@@ -12,12 +12,12 @@ import {
12
12
  Legend,
13
13
  ResponsiveContainer,
14
14
  TooltipProps,
15
- } from 'recharts'
15
+ } from "recharts";
16
16
 
17
17
  const CustomTooltip = ({ active, payload }: TooltipProps<number, string>) => {
18
- if (!active || !payload || payload.length === 0) return null
18
+ if (!active || !payload || payload.length === 0) return null;
19
19
  return (
20
- <div className="bg-background text-foreground border-border rounded-md border px-2 py-1.5 text-xs shadow-sm">
20
+ <div className="rounded-md border border-border bg-background px-2 py-1.5 text-xs text-foreground shadow-sm">
21
21
  {payload.map((entry, index) => (
22
22
  <div key={index} className="flex items-center gap-2">
23
23
  <span
@@ -26,38 +26,38 @@ const CustomTooltip = ({ active, payload }: TooltipProps<number, string>) => {
26
26
  />
27
27
  <span>{entry.name}:</span>
28
28
  <span className="font-medium">
29
- {typeof entry.value === 'number'
29
+ {typeof entry.value === "number"
30
30
  ? entry.value.toLocaleString()
31
31
  : entry.value}
32
32
  </span>
33
33
  </div>
34
34
  ))}
35
35
  </div>
36
- )
37
- }
36
+ );
37
+ };
38
38
 
39
39
  const COLORS = [
40
- 'var(--chart-1)',
41
- 'var(--chart-2)',
42
- 'var(--chart-3)',
43
- 'var(--chart-4)',
44
- 'var(--chart-5)',
45
- ]
40
+ "var(--chart-1)",
41
+ "var(--chart-2)",
42
+ "var(--chart-3)",
43
+ "var(--chart-4)",
44
+ "var(--chart-5)",
45
+ ];
46
46
 
47
47
  interface SeriesDataPoint {
48
- label: string
49
- [key: string]: string | number
48
+ label: string;
49
+ [key: string]: string | number;
50
50
  }
51
51
 
52
52
  export interface LineChartProps {
53
- title?: string
54
- data: SeriesDataPoint[]
55
- series?: string[]
56
- showGrid?: boolean
57
- showLegend?: boolean
58
- showDots?: boolean
59
- curved?: boolean
60
- className?: string
53
+ title?: string;
54
+ data: SeriesDataPoint[];
55
+ series?: string[];
56
+ showGrid?: boolean;
57
+ showLegend?: boolean;
58
+ showDots?: boolean;
59
+ curved?: boolean;
60
+ className?: string;
61
61
  }
62
62
 
63
63
  export const LineChart: FC<LineChartProps> = ({
@@ -72,16 +72,16 @@ export const LineChart: FC<LineChartProps> = ({
72
72
  }) => {
73
73
  // Auto-detect series from data keys if not provided
74
74
  const seriesKeys = useMemo(() => {
75
- if (series && series.length > 0) return series
76
- if (data.length === 0) return []
77
- const keys = Object.keys(data[0]).filter((k) => k !== 'label')
78
- return keys
79
- }, [data, series])
75
+ if (series && series.length > 0) return series;
76
+ if (data.length === 0) return [];
77
+ const keys = Object.keys(data[0]).filter((k) => k !== "label");
78
+ return keys;
79
+ }, [data, series]);
80
80
 
81
81
  return (
82
- <div className={cn('flex flex-col gap-2', className)}>
82
+ <div className={cn("flex flex-col gap-2", className)}>
83
83
  {title && (
84
- <h3 className="text-foreground text-sm font-medium">{title}</h3>
84
+ <h3 className="text-sm font-medium text-foreground">{title}</h3>
85
85
  )}
86
86
  <div className="h-[250px] w-full">
87
87
  <ResponsiveContainer width="100%" height="100%">
@@ -97,28 +97,28 @@ export const LineChart: FC<LineChartProps> = ({
97
97
  )}
98
98
  <XAxis
99
99
  dataKey="label"
100
- tick={{ fill: 'var(--foreground)', fontSize: 12 }}
101
- axisLine={{ stroke: 'var(--border)' }}
102
- tickLine={{ stroke: 'var(--border)' }}
100
+ tick={{ fill: "var(--foreground)", fontSize: 12 }}
101
+ axisLine={{ stroke: "var(--border)" }}
102
+ tickLine={{ stroke: "var(--border)" }}
103
103
  />
104
104
  <YAxis
105
- tick={{ fill: 'var(--foreground)', fontSize: 12 }}
106
- axisLine={{ stroke: 'var(--border)' }}
107
- tickLine={{ stroke: 'var(--border)' }}
105
+ tick={{ fill: "var(--foreground)", fontSize: 12 }}
106
+ axisLine={{ stroke: "var(--border)" }}
107
+ tickLine={{ stroke: "var(--border)" }}
108
108
  />
109
109
  <Tooltip content={<CustomTooltip />} />
110
110
  {showLegend && seriesKeys.length > 1 && (
111
111
  <Legend
112
- wrapperStyle={{ color: 'var(--foreground)' }}
112
+ wrapperStyle={{ color: "var(--foreground)" }}
113
113
  formatter={(value) => (
114
- <span style={{ color: 'var(--foreground)' }}>{value}</span>
114
+ <span style={{ color: "var(--foreground)" }}>{value}</span>
115
115
  )}
116
116
  />
117
117
  )}
118
118
  {seriesKeys.map((key, index) => (
119
119
  <Line
120
120
  key={key}
121
- type={curved ? 'monotone' : 'linear'}
121
+ type={curved ? "monotone" : "linear"}
122
122
  dataKey={key}
123
123
  stroke={COLORS[index % COLORS.length]}
124
124
  strokeWidth={2}
@@ -131,5 +131,5 @@ export const LineChart: FC<LineChartProps> = ({
131
131
  </ResponsiveContainer>
132
132
  </div>
133
133
  </div>
134
- )
135
- }
134
+ );
135
+ };
@@ -1,7 +1,7 @@
1
- 'use client'
1
+ "use client";
2
2
 
3
- import { cn } from '@/lib/utils'
4
- import { FC } from 'react'
3
+ import { cn } from "@/lib/utils";
4
+ import { FC } from "react";
5
5
  import {
6
6
  PieChart as RechartsPieChart,
7
7
  Pie,
@@ -10,42 +10,42 @@ import {
10
10
  Legend,
11
11
  ResponsiveContainer,
12
12
  TooltipProps,
13
- } from 'recharts'
13
+ } from "recharts";
14
14
 
15
15
  const CustomTooltip = ({ active, payload }: TooltipProps<number, string>) => {
16
- if (!active || !payload || payload.length === 0) return null
17
- const entry = payload[0]
16
+ if (!active || !payload || payload.length === 0) return null;
17
+ const entry = payload[0];
18
18
  return (
19
- <div className="bg-background text-foreground border-border rounded-md border px-2 py-1 text-xs shadow-sm">
19
+ <div className="rounded-md border border-border bg-background px-2 py-1 text-xs text-foreground shadow-sm">
20
20
  <span className="font-medium">
21
- {typeof entry?.value === 'number'
21
+ {typeof entry?.value === "number"
22
22
  ? entry.value.toLocaleString()
23
23
  : entry?.value}
24
24
  </span>
25
25
  </div>
26
- )
27
- }
26
+ );
27
+ };
28
28
 
29
29
  const COLORS = [
30
- 'var(--chart-1)',
31
- 'var(--chart-2)',
32
- 'var(--chart-3)',
33
- 'var(--chart-4)',
34
- 'var(--chart-5)',
35
- ]
30
+ "var(--chart-1)",
31
+ "var(--chart-2)",
32
+ "var(--chart-3)",
33
+ "var(--chart-4)",
34
+ "var(--chart-5)",
35
+ ];
36
36
 
37
37
  interface DataPoint {
38
- label: string
39
- value: number
40
- color?: string
38
+ label: string;
39
+ value: number;
40
+ color?: string;
41
41
  }
42
42
 
43
43
  export interface PieChartProps {
44
- title?: string
45
- data: DataPoint[]
46
- showLabels?: boolean
47
- showLegend?: boolean
48
- className?: string
44
+ title?: string;
45
+ data: DataPoint[];
46
+ showLabels?: boolean;
47
+ showLegend?: boolean;
48
+ className?: string;
49
49
  }
50
50
 
51
51
  export const PieChart: FC<PieChartProps> = ({
@@ -60,12 +60,12 @@ export const PieChart: FC<PieChartProps> = ({
60
60
  name: d.label,
61
61
  value: d.value,
62
62
  color: d.color,
63
- }))
63
+ }));
64
64
 
65
65
  return (
66
- <div className={cn('flex flex-col gap-2', className)}>
66
+ <div className={cn("flex flex-col gap-2", className)}>
67
67
  {title && (
68
- <h3 className="text-foreground text-sm font-medium">{title}</h3>
68
+ <h3 className="text-sm font-medium text-foreground">{title}</h3>
69
69
  )}
70
70
  <div className="h-[320px] w-full">
71
71
  <ResponsiveContainer width="100%" height="100%">
@@ -90,33 +90,33 @@ export const PieChart: FC<PieChartProps> = ({
90
90
  midAngle,
91
91
  outerRadius,
92
92
  }: {
93
- name?: string
94
- percent?: number
95
- cx?: number
96
- cy?: number
97
- midAngle?: number
98
- outerRadius?: number
93
+ name?: string;
94
+ percent?: number;
95
+ cx?: number;
96
+ cy?: number;
97
+ midAngle?: number;
98
+ outerRadius?: number;
99
99
  }) => {
100
- const RADIAN = Math.PI / 180
101
- const radius = (outerRadius ?? 80) + 25
100
+ const RADIAN = Math.PI / 180;
101
+ const radius = (outerRadius ?? 80) + 25;
102
102
  const x =
103
103
  (cx ?? 0) +
104
- radius * Math.cos(-((midAngle ?? 0) * RADIAN))
104
+ radius * Math.cos(-((midAngle ?? 0) * RADIAN));
105
105
  const y =
106
106
  (cy ?? 0) +
107
- radius * Math.sin(-((midAngle ?? 0) * RADIAN))
107
+ radius * Math.sin(-((midAngle ?? 0) * RADIAN));
108
108
  return (
109
109
  <text
110
110
  x={x}
111
111
  y={y}
112
112
  fill="var(--foreground)"
113
- textAnchor={x > (cx ?? 0) ? 'start' : 'end'}
113
+ textAnchor={x > (cx ?? 0) ? "start" : "end"}
114
114
  dominantBaseline="central"
115
115
  fontSize={12}
116
116
  >
117
- {`${name ?? ''} (${((percent ?? 0) * 100).toFixed(0)}%)`}
117
+ {`${name ?? ""} (${((percent ?? 0) * 100).toFixed(0)}%)`}
118
118
  </text>
119
- )
119
+ );
120
120
  }
121
121
  : undefined
122
122
  }
@@ -134,9 +134,9 @@ export const PieChart: FC<PieChartProps> = ({
134
134
  {showLegend && (
135
135
  <Legend
136
136
  verticalAlign="bottom"
137
- wrapperStyle={{ color: 'var(--foreground)', paddingTop: 20 }}
137
+ wrapperStyle={{ color: "var(--foreground)", paddingTop: 20 }}
138
138
  formatter={(value) => (
139
- <span style={{ color: 'var(--foreground)' }}>{value}</span>
139
+ <span style={{ color: "var(--foreground)" }}>{value}</span>
140
140
  )}
141
141
  />
142
142
  )}
@@ -144,5 +144,5 @@ export const PieChart: FC<PieChartProps> = ({
144
144
  </ResponsiveContainer>
145
145
  </div>
146
146
  </div>
147
- )
148
- }
147
+ );
148
+ };
@@ -1,7 +1,7 @@
1
- 'use client'
1
+ "use client";
2
2
 
3
- import { cn } from '@/lib/utils'
4
- import { FC } from 'react'
3
+ import { cn } from "@/lib/utils";
4
+ import { FC } from "react";
5
5
  import {
6
6
  RadarChart as RechartsRadarChart,
7
7
  Radar,
@@ -12,41 +12,41 @@ import {
12
12
  Legend,
13
13
  ResponsiveContainer,
14
14
  TooltipProps,
15
- } from 'recharts'
15
+ } from "recharts";
16
16
 
17
17
  const CustomTooltip = ({ active, payload }: TooltipProps<number, string>) => {
18
- if (!active || !payload || payload.length === 0) return null
19
- const entry = payload[0]
18
+ if (!active || !payload || payload.length === 0) return null;
19
+ const entry = payload[0];
20
20
  return (
21
- <div className="bg-background text-foreground border-border rounded-md border px-2 py-1 text-xs shadow-sm">
21
+ <div className="rounded-md border border-border bg-background px-2 py-1 text-xs text-foreground shadow-sm">
22
22
  <span className="font-medium">
23
- {typeof entry?.value === 'number'
23
+ {typeof entry?.value === "number"
24
24
  ? entry.value.toLocaleString()
25
25
  : entry?.value}
26
26
  </span>
27
27
  </div>
28
- )
29
- }
28
+ );
29
+ };
30
30
 
31
31
  const COLORS = [
32
- 'var(--chart-1)',
33
- 'var(--chart-2)',
34
- 'var(--chart-3)',
35
- 'var(--chart-4)',
36
- 'var(--chart-5)',
37
- ]
32
+ "var(--chart-1)",
33
+ "var(--chart-2)",
34
+ "var(--chart-3)",
35
+ "var(--chart-4)",
36
+ "var(--chart-5)",
37
+ ];
38
38
 
39
39
  interface DataPoint {
40
- label: string
41
- value: number
42
- color?: string
40
+ label: string;
41
+ value: number;
42
+ color?: string;
43
43
  }
44
44
 
45
45
  export interface RadarChartProps {
46
- title?: string
47
- data: DataPoint[]
48
- showLegend?: boolean
49
- className?: string
46
+ title?: string;
47
+ data: DataPoint[];
48
+ showLegend?: boolean;
49
+ className?: string;
50
50
  }
51
51
 
52
52
  export const RadarChart: FC<RadarChartProps> = ({
@@ -56,12 +56,12 @@ export const RadarChart: FC<RadarChartProps> = ({
56
56
  className,
57
57
  }) => {
58
58
  // Transform data for Recharts (uses 'subject' for labels)
59
- const chartData = data.map((d) => ({ subject: d.label, value: d.value }))
59
+ const chartData = data.map((d) => ({ subject: d.label, value: d.value }));
60
60
 
61
61
  return (
62
- <div className={cn('flex flex-col gap-2', className)}>
62
+ <div className={cn("flex flex-col gap-2", className)}>
63
63
  {title && (
64
- <h3 className="text-foreground text-sm font-medium">{title}</h3>
64
+ <h3 className="text-sm font-medium text-foreground">{title}</h3>
65
65
  )}
66
66
  <div className="h-[250px] w-full">
67
67
  <ResponsiveContainer width="100%" height="100%">
@@ -74,18 +74,18 @@ export const RadarChart: FC<RadarChartProps> = ({
74
74
  <PolarGrid stroke="var(--border)" />
75
75
  <PolarAngleAxis
76
76
  dataKey="subject"
77
- tick={{ fill: 'var(--foreground)', fontSize: 12 }}
77
+ tick={{ fill: "var(--foreground)", fontSize: 12 }}
78
78
  />
79
79
  <PolarRadiusAxis
80
- tick={{ fill: 'var(--foreground)', fontSize: 10 }}
81
- axisLine={{ stroke: 'var(--border)' }}
80
+ tick={{ fill: "var(--foreground)", fontSize: 10 }}
81
+ axisLine={{ stroke: "var(--border)" }}
82
82
  />
83
83
  <Tooltip content={<CustomTooltip />} />
84
84
  {showLegend && (
85
85
  <Legend
86
- wrapperStyle={{ color: 'var(--foreground)' }}
86
+ wrapperStyle={{ color: "var(--foreground)" }}
87
87
  formatter={(value) => (
88
- <span style={{ color: 'var(--foreground)' }}>{value}</span>
88
+ <span style={{ color: "var(--foreground)" }}>{value}</span>
89
89
  )}
90
90
  />
91
91
  )}
@@ -101,5 +101,5 @@ export const RadarChart: FC<RadarChartProps> = ({
101
101
  </ResponsiveContainer>
102
102
  </div>
103
103
  </div>
104
- )
105
- }
104
+ );
105
+ };
@@ -1,7 +1,7 @@
1
- 'use client'
1
+ "use client";
2
2
 
3
- import { cn } from '@/lib/utils'
4
- import { FC } from 'react'
3
+ import { cn } from "@/lib/utils";
4
+ import { FC } from "react";
5
5
  import {
6
6
  ScatterChart as RechartsScatterChart,
7
7
  Scatter,
@@ -13,43 +13,43 @@ import {
13
13
  ZAxis,
14
14
  Cell,
15
15
  TooltipProps,
16
- } from 'recharts'
16
+ } from "recharts";
17
17
 
18
18
  interface ScatterDataPoint {
19
- x: number
20
- y: number
21
- label?: string
22
- size?: number
23
- color?: string
19
+ x: number;
20
+ y: number;
21
+ label?: string;
22
+ size?: number;
23
+ color?: string;
24
24
  }
25
25
 
26
26
  const CustomTooltip = ({ active, payload }: TooltipProps<number, string>) => {
27
- if (!active || !payload || payload.length === 0) return null
28
- const point = payload[0]?.payload as ScatterDataPoint | undefined
27
+ if (!active || !payload || payload.length === 0) return null;
28
+ const point = payload[0]?.payload as ScatterDataPoint | undefined;
29
29
  return (
30
- <div className="bg-background text-foreground border-border rounded-md border px-2 py-1.5 text-xs shadow-sm">
30
+ <div className="rounded-md border border-border bg-background px-2 py-1.5 text-xs text-foreground shadow-sm">
31
31
  {point?.label && <div className="font-medium">{point.label}</div>}
32
32
  <div>x: {point?.x?.toLocaleString()}</div>
33
33
  <div>y: {point?.y?.toLocaleString()}</div>
34
34
  </div>
35
- )
36
- }
35
+ );
36
+ };
37
37
 
38
38
  const COLORS = [
39
- 'var(--chart-1)',
40
- 'var(--chart-2)',
41
- 'var(--chart-3)',
42
- 'var(--chart-4)',
43
- 'var(--chart-5)',
44
- ]
39
+ "var(--chart-1)",
40
+ "var(--chart-2)",
41
+ "var(--chart-3)",
42
+ "var(--chart-4)",
43
+ "var(--chart-5)",
44
+ ];
45
45
 
46
46
  export interface ScatterChartProps {
47
- title?: string
48
- data: ScatterDataPoint[]
49
- xLabel?: string
50
- yLabel?: string
51
- showGrid?: boolean
52
- className?: string
47
+ title?: string;
48
+ data: ScatterDataPoint[];
49
+ xLabel?: string;
50
+ yLabel?: string;
51
+ showGrid?: boolean;
52
+ className?: string;
53
53
  }
54
54
 
55
55
  export const ScatterChart: FC<ScatterChartProps> = ({
@@ -61,12 +61,12 @@ export const ScatterChart: FC<ScatterChartProps> = ({
61
61
  className,
62
62
  }) => {
63
63
  // Check if we have size data for bubble chart effect
64
- const hasSizeData = data.some((d) => d.size !== undefined)
64
+ const hasSizeData = data.some((d) => d.size !== undefined);
65
65
 
66
66
  return (
67
- <div className={cn('flex flex-col gap-2', className)}>
67
+ <div className={cn("flex flex-col gap-2", className)}>
68
68
  {title && (
69
- <h3 className="text-foreground text-sm font-medium">{title}</h3>
69
+ <h3 className="text-sm font-medium text-foreground">{title}</h3>
70
70
  )}
71
71
  <div className="h-[250px] w-full">
72
72
  <ResponsiveContainer width="100%" height="100%">
@@ -82,17 +82,17 @@ export const ScatterChart: FC<ScatterChartProps> = ({
82
82
  <XAxis
83
83
  type="number"
84
84
  dataKey="x"
85
- name={xLabel || 'x'}
86
- tick={{ fill: 'var(--foreground)', fontSize: 12 }}
87
- axisLine={{ stroke: 'var(--border)' }}
88
- tickLine={{ stroke: 'var(--border)' }}
85
+ name={xLabel || "x"}
86
+ tick={{ fill: "var(--foreground)", fontSize: 12 }}
87
+ axisLine={{ stroke: "var(--border)" }}
88
+ tickLine={{ stroke: "var(--border)" }}
89
89
  label={
90
90
  xLabel
91
91
  ? {
92
92
  value: xLabel,
93
- position: 'bottom',
93
+ position: "bottom",
94
94
  offset: -5,
95
- fill: 'var(--foreground)',
95
+ fill: "var(--foreground)",
96
96
  }
97
97
  : undefined
98
98
  }
@@ -100,17 +100,17 @@ export const ScatterChart: FC<ScatterChartProps> = ({
100
100
  <YAxis
101
101
  type="number"
102
102
  dataKey="y"
103
- name={yLabel || 'y'}
104
- tick={{ fill: 'var(--foreground)', fontSize: 12 }}
105
- axisLine={{ stroke: 'var(--border)' }}
106
- tickLine={{ stroke: 'var(--border)' }}
103
+ name={yLabel || "y"}
104
+ tick={{ fill: "var(--foreground)", fontSize: 12 }}
105
+ axisLine={{ stroke: "var(--border)" }}
106
+ tickLine={{ stroke: "var(--border)" }}
107
107
  label={
108
108
  yLabel
109
109
  ? {
110
110
  value: yLabel,
111
111
  angle: -90,
112
- position: 'left',
113
- fill: 'var(--foreground)',
112
+ position: "left",
113
+ fill: "var(--foreground)",
114
114
  }
115
115
  : undefined
116
116
  }
@@ -128,5 +128,5 @@ export const ScatterChart: FC<ScatterChartProps> = ({
128
128
  </ResponsiveContainer>
129
129
  </div>
130
130
  </div>
131
- )
132
- }
131
+ );
132
+ };
@@ -1,14 +1,14 @@
1
- 'use client'
1
+ "use client";
2
2
 
3
- import { useRadius } from '@/hooks/useRadius'
4
- import { cn } from '@/lib/utils'
5
- import { FC, ReactNode } from 'react'
3
+ import { useRadius } from "@/hooks/useRadius";
4
+ import { cn } from "@/lib/utils";
5
+ import { FC, ReactNode } from "react";
6
6
 
7
7
  interface MacOSWindowFrameProps {
8
- children: ReactNode
9
- className?: string
8
+ children: ReactNode;
9
+ className?: string;
10
10
  /** Optional title to display in the title bar */
11
- title?: string
11
+ title?: string;
12
12
  }
13
13
 
14
14
  /**
@@ -20,20 +20,20 @@ export const MacOSWindowFrame: FC<MacOSWindowFrameProps> = ({
20
20
  className,
21
21
  title,
22
22
  }) => {
23
- const r = useRadius()
23
+ const r = useRadius();
24
24
 
25
25
  return (
26
26
  <div className="@container my-4 w-full first:mt-0">
27
27
  <div
28
28
  className={cn(
29
29
  // after:hidden prevents assistant-ui from showing its default code block loading indicator
30
- 'border-border w-full overflow-hidden border after:hidden @sm:max-w-md @md:max-w-lg @lg:max-w-xl @xl:max-w-2xl',
31
- r('lg'),
32
- className
30
+ "w-full overflow-hidden border border-border after:hidden @sm:max-w-md @md:max-w-lg @lg:max-w-xl @xl:max-w-2xl",
31
+ r("lg"),
32
+ className,
33
33
  )}
34
34
  >
35
35
  {/* Title bar */}
36
- <div className="border-border bg-muted/50 flex h-8 items-center gap-2 border-b px-3">
36
+ <div className="flex h-8 items-center gap-2 border-b border-border bg-muted/50 px-3">
37
37
  {/* Traffic lights */}
38
38
  <div className="flex items-center gap-1.5">
39
39
  <div className="size-3 rounded-full bg-[#FF5F57]" />
@@ -42,7 +42,7 @@ export const MacOSWindowFrame: FC<MacOSWindowFrameProps> = ({
42
42
  </div>
43
43
  {/* Title */}
44
44
  {title && (
45
- <span className="text-muted-foreground flex-1 text-center text-xs font-medium">
45
+ <span className="flex-1 text-center text-xs font-medium text-muted-foreground">
46
46
  {title}
47
47
  </span>
48
48
  )}
@@ -51,5 +51,5 @@ export const MacOSWindowFrame: FC<MacOSWindowFrameProps> = ({
51
51
  {children}
52
52
  </div>
53
53
  </div>
54
- )
55
- }
54
+ );
55
+ };