@gram-ai/elements 1.27.3 → 1.27.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (278) hide show
  1. package/README.md +72 -60
  2. package/README.typedoc.md +6 -6
  3. package/bin/cli.js +74 -74
  4. package/dist/compat-shims-CO9JXXV4.cjs.map +1 -1
  5. package/dist/{compat-shims-BPJ7Q68c.js → compat-shims-DxtUrORi.js} +4 -2
  6. package/dist/compat-shims-DxtUrORi.js.map +1 -0
  7. package/dist/components/ShareButton/index.d.ts +2 -2
  8. package/dist/components/assistant-ui/message-feedback.d.ts +1 -1
  9. package/dist/components/assistant-ui/tooltip-icon-button.d.ts +2 -2
  10. package/dist/components/ui/avatar.d.ts +2 -2
  11. package/dist/components/ui/button.d.ts +1 -1
  12. package/dist/components/ui/calendar.d.ts +1 -1
  13. package/dist/components/ui/collapsible.d.ts +1 -1
  14. package/dist/components/ui/dialog.d.ts +4 -4
  15. package/dist/components/ui/popover.d.ts +2 -2
  16. package/dist/components/ui/skeleton.d.ts +1 -1
  17. package/dist/components/ui/time-range-picker.d.ts +4 -2
  18. package/dist/components/ui/tool-ui.d.ts +7 -7
  19. package/dist/components/ui/tooltip.d.ts +2 -2
  20. package/dist/contexts/ConnectionStatusContext.d.ts +1 -1
  21. package/dist/elements.cjs +1 -1
  22. package/dist/elements.css +1 -1
  23. package/dist/elements.js +2 -2
  24. package/dist/hooks/useDensity.d.ts +73 -73
  25. package/dist/hooks/useMCPTools.d.ts +1 -1
  26. package/dist/hooks/useRadius.d.ts +1 -1
  27. package/dist/{index-BpJstUh1.cjs → index-C4bFBGfl.cjs} +4 -4
  28. package/dist/{index-BpJstUh1.cjs.map → index-C4bFBGfl.cjs.map} +1 -1
  29. package/dist/{index-CUitXazZ.js → index-D93pV0_o.js} +55 -55
  30. package/dist/{index-CUitXazZ.js.map → index-D93pV0_o.js.map} +1 -1
  31. package/dist/{index-DBrhzauj.js → index-DuCQRbcQ.js} +6386 -6337
  32. package/dist/index-DuCQRbcQ.js.map +1 -0
  33. package/dist/{index-DxfW52oA.cjs → index-y_PNN5vK.cjs} +64 -46
  34. package/dist/index-y_PNN5vK.cjs.map +1 -0
  35. package/dist/lib/cassette.d.ts +4 -4
  36. package/dist/lib/errorTracking.d.ts +1 -1
  37. package/dist/lib/messageConverter.d.ts +1 -1
  38. package/dist/lib/models.d.ts +1 -1
  39. package/dist/plugins/chart/ui/bar-chart.d.ts +1 -1
  40. package/dist/plugins/generative-ui/ui/accordion-wrapper.d.ts +2 -2
  41. package/dist/plugins/generative-ui/ui/accordion.d.ts +1 -1
  42. package/dist/plugins/generative-ui/ui/action-button.d.ts +2 -2
  43. package/dist/plugins/generative-ui/ui/alert-wrapper.d.ts +1 -1
  44. package/dist/plugins/generative-ui/ui/alert.d.ts +4 -4
  45. package/dist/plugins/generative-ui/ui/avatar.d.ts +5 -5
  46. package/dist/plugins/generative-ui/ui/badge.d.ts +2 -2
  47. package/dist/plugins/generative-ui/ui/button-wrapper.d.ts +2 -2
  48. package/dist/plugins/generative-ui/ui/button.d.ts +2 -2
  49. package/dist/plugins/generative-ui/ui/card-wrapper.d.ts +2 -2
  50. package/dist/plugins/generative-ui/ui/card.d.ts +8 -8
  51. package/dist/plugins/generative-ui/ui/checkbox.d.ts +1 -1
  52. package/dist/plugins/generative-ui/ui/data-table.d.ts +2 -2
  53. package/dist/plugins/generative-ui/ui/dialog.d.ts +3 -3
  54. package/dist/plugins/generative-ui/ui/dropdown-menu.d.ts +3 -3
  55. package/dist/plugins/generative-ui/ui/grid.d.ts +3 -3
  56. package/dist/plugins/generative-ui/ui/input-wrapper.d.ts +1 -1
  57. package/dist/plugins/generative-ui/ui/input.d.ts +2 -2
  58. package/dist/plugins/generative-ui/ui/label.d.ts +1 -1
  59. package/dist/plugins/generative-ui/ui/metric.d.ts +3 -3
  60. package/dist/plugins/generative-ui/ui/pagination.d.ts +6 -6
  61. package/dist/plugins/generative-ui/ui/popover.d.ts +4 -4
  62. package/dist/plugins/generative-ui/ui/progress.d.ts +2 -2
  63. package/dist/plugins/generative-ui/ui/radio-group.d.ts +1 -1
  64. package/dist/plugins/generative-ui/ui/select.d.ts +2 -2
  65. package/dist/plugins/generative-ui/ui/separator.d.ts +1 -1
  66. package/dist/plugins/generative-ui/ui/skeleton.d.ts +1 -1
  67. package/dist/plugins/generative-ui/ui/stack.d.ts +6 -6
  68. package/dist/plugins/generative-ui/ui/switch.d.ts +2 -2
  69. package/dist/plugins/generative-ui/ui/table.d.ts +9 -9
  70. package/dist/plugins/generative-ui/ui/tabs-wrapper.d.ts +1 -1
  71. package/dist/plugins/generative-ui/ui/tabs.d.ts +1 -1
  72. package/dist/plugins/generative-ui/ui/text.d.ts +3 -3
  73. package/dist/plugins/generative-ui/ui/textarea.d.ts +2 -2
  74. package/dist/plugins/generative-ui/ui/tooltip.d.ts +1 -1
  75. package/dist/plugins.cjs +1 -1
  76. package/dist/plugins.js +1 -1
  77. package/dist/{profiler-D6ndqfsd.js → profiler-FpBY9eRv.js} +2 -2
  78. package/dist/{profiler-D6ndqfsd.js.map → profiler-FpBY9eRv.js.map} +1 -1
  79. package/dist/{profiler-DhnzZ34c.cjs → profiler-_mthyjvo.cjs} +2 -2
  80. package/dist/{profiler-DhnzZ34c.cjs.map → profiler-_mthyjvo.cjs.map} +1 -1
  81. package/dist/react-shim.js +1 -1
  82. package/dist/server/express.cjs.map +1 -1
  83. package/dist/server/express.js.map +1 -1
  84. package/dist/{startRecording-BwXmdmy1.cjs → startRecording-NJcpiHw-.cjs} +2 -2
  85. package/dist/{startRecording-BwXmdmy1.cjs.map → startRecording-NJcpiHw-.cjs.map} +1 -1
  86. package/dist/{startRecording-B_9CRZ_P.js → startRecording-r5MXQ2Dm.js} +2 -2
  87. package/dist/{startRecording-B_9CRZ_P.js.map → startRecording-r5MXQ2Dm.js.map} +1 -1
  88. package/dist/types/index.d.ts +2 -2
  89. package/package.json +1 -5
  90. package/src/compat-plugin.ts +14 -14
  91. package/src/compat-shims.ts +33 -31
  92. package/src/compat.test.ts +48 -48
  93. package/src/compat.ts +6 -6
  94. package/src/components/Chat/index.tsx +17 -17
  95. package/src/components/Chat/stories/Charts.stories.tsx +98 -98
  96. package/src/components/Chat/stories/Composer.stories.tsx +15 -15
  97. package/src/components/Chat/stories/ConnectionConfiguration.stories.tsx +44 -44
  98. package/src/components/Chat/stories/CustomComponents.stories.tsx +17 -17
  99. package/src/components/Chat/stories/Density.stories.tsx +20 -20
  100. package/src/components/Chat/stories/ErrorBoundary.stories.tsx +47 -47
  101. package/src/components/Chat/stories/FrontendTools.stories.tsx +39 -39
  102. package/src/components/Chat/stories/GenerativeUI.stories.tsx +48 -48
  103. package/src/components/Chat/stories/MessageFeedback.stories.tsx +52 -52
  104. package/src/components/Chat/stories/Modal.stories.tsx +28 -28
  105. package/src/components/Chat/stories/Model.stories.tsx +11 -11
  106. package/src/components/Chat/stories/Radius.stories.tsx +20 -20
  107. package/src/components/Chat/stories/Sidecar.stories.tsx +13 -13
  108. package/src/components/Chat/stories/StyleIsolation.stories.tsx +11 -11
  109. package/src/components/Chat/stories/Theme.stories.tsx +25 -25
  110. package/src/components/Chat/stories/Thread.stories.tsx +25 -25
  111. package/src/components/Chat/stories/ToolApproval.stories.tsx +55 -55
  112. package/src/components/Chat/stories/ToolMentions.stories.tsx +17 -17
  113. package/src/components/Chat/stories/Tools.stories.tsx +88 -88
  114. package/src/components/Chat/stories/Variants.stories.tsx +32 -32
  115. package/src/components/Chat/stories/Welcome.stories.tsx +14 -14
  116. package/src/components/ChatHistory.tsx +7 -7
  117. package/src/components/FrontendTools/index.tsx +5 -5
  118. package/src/components/Replay.stories.tsx +157 -157
  119. package/src/components/Replay.tsx +76 -73
  120. package/src/components/ShadowRoot.tsx +40 -40
  121. package/src/components/ShareButton/index.tsx +32 -32
  122. package/src/components/assistant-ui/assistant-modal.tsx +92 -87
  123. package/src/components/assistant-ui/assistant-sidecar.tsx +35 -35
  124. package/src/components/assistant-ui/attachment.tsx +80 -80
  125. package/src/components/assistant-ui/connection-status-indicator.tsx +33 -33
  126. package/src/components/assistant-ui/error-boundary.tsx +34 -34
  127. package/src/components/assistant-ui/follow-on-suggestions.tsx +26 -26
  128. package/src/components/assistant-ui/markdown-text.tsx +69 -69
  129. package/src/components/assistant-ui/mentioned-tools-badges.tsx +38 -38
  130. package/src/components/assistant-ui/message-feedback.tsx +74 -61
  131. package/src/components/assistant-ui/reasoning.tsx +83 -83
  132. package/src/components/assistant-ui/thread-list.tsx +45 -45
  133. package/src/components/assistant-ui/thread.tsx +278 -278
  134. package/src/components/assistant-ui/tool-fallback.tsx +37 -37
  135. package/src/components/assistant-ui/tool-group.tsx +26 -26
  136. package/src/components/assistant-ui/tool-mention-autocomplete.tsx +122 -122
  137. package/src/components/assistant-ui/tooltip-icon-button.tsx +18 -18
  138. package/src/components/ui/avatar.tsx +12 -12
  139. package/src/components/ui/button.tsx +12 -12
  140. package/src/components/ui/buttonVariants.ts +17 -17
  141. package/src/components/ui/calendar.tsx +106 -106
  142. package/src/components/ui/charts.stories.tsx +56 -56
  143. package/src/components/ui/collapsible.tsx +5 -5
  144. package/src/components/ui/dialog.tsx +30 -30
  145. package/src/components/ui/generative-ui.stories.tsx +200 -200
  146. package/src/components/ui/generative-ui.tsx +26 -26
  147. package/src/components/ui/popover.tsx +14 -14
  148. package/src/components/ui/skeleton.tsx +5 -5
  149. package/src/components/ui/time-range-picker.stories.tsx +80 -80
  150. package/src/components/ui/time-range-picker.tsx +272 -235
  151. package/src/components/ui/tool-ui.stories.tsx +37 -37
  152. package/src/components/ui/tool-ui.tsx +221 -215
  153. package/src/components/ui/tooltip.tsx +15 -15
  154. package/src/constants/tailwind.ts +1 -1
  155. package/src/contexts/ChatIdContext.tsx +7 -7
  156. package/src/contexts/ConnectionStatusContext.tsx +64 -64
  157. package/src/contexts/ElementsProvider.tsx +222 -211
  158. package/src/contexts/ReplayContext.ts +3 -3
  159. package/src/contexts/ToolApprovalContext.tsx +54 -54
  160. package/src/contexts/ToolExecutionContext.tsx +34 -34
  161. package/src/contexts/contexts.ts +7 -7
  162. package/src/contexts/portal-container-context.ts +2 -2
  163. package/src/contexts/portal-container.tsx +7 -7
  164. package/src/embedded.ts +1 -1
  165. package/src/global.css +25 -25
  166. package/src/hooks/useAuth.ts +72 -72
  167. package/src/hooks/useDensity.ts +79 -79
  168. package/src/hooks/useElements.ts +6 -6
  169. package/src/hooks/useExpanded.ts +12 -12
  170. package/src/hooks/useFollowOnSuggestions.ts +87 -82
  171. package/src/hooks/useGramThreadListAdapter.tsx +99 -99
  172. package/src/hooks/useMCPTools.ts +47 -47
  173. package/src/hooks/useModel.ts +14 -14
  174. package/src/hooks/usePluginComponents.ts +11 -11
  175. package/src/hooks/usePortalContainer.ts +5 -5
  176. package/src/hooks/useRadius.ts +23 -23
  177. package/src/hooks/useRecordCassette.ts +34 -34
  178. package/src/hooks/useSession.ts +11 -11
  179. package/src/hooks/useThemeProps.ts +13 -13
  180. package/src/hooks/useThreadId.ts +4 -4
  181. package/src/hooks/useToolApproval.ts +7 -7
  182. package/src/hooks/useToolMentions.ts +40 -40
  183. package/src/index.ts +26 -26
  184. package/src/lib/api.test.ts +61 -61
  185. package/src/lib/api.ts +4 -3
  186. package/src/lib/auth.ts +13 -13
  187. package/src/lib/cassette.ts +84 -84
  188. package/src/lib/easing.ts +1 -1
  189. package/src/lib/errorTracking.config.ts +5 -5
  190. package/src/lib/errorTracking.ts +29 -29
  191. package/src/lib/generative-ui.ts +7 -7
  192. package/src/lib/humanize.ts +3 -3
  193. package/src/lib/messageConverter.test.ts +130 -127
  194. package/src/lib/messageConverter.ts +196 -196
  195. package/src/lib/models.ts +21 -20
  196. package/src/lib/token.test.ts +56 -56
  197. package/src/lib/token.ts +14 -14
  198. package/src/lib/tool-mentions.ts +45 -45
  199. package/src/lib/tools.ts +66 -62
  200. package/src/lib/utils.ts +5 -5
  201. package/src/lib.d.ts +1 -1
  202. package/src/plugins/README.md +5 -5
  203. package/src/plugins/chart/catalog.ts +18 -18
  204. package/src/plugins/chart/chart.test.ts +31 -31
  205. package/src/plugins/chart/component.tsx +34 -34
  206. package/src/plugins/chart/index.ts +4 -4
  207. package/src/plugins/chart/ui/area-chart.tsx +42 -42
  208. package/src/plugins/chart/ui/bar-chart.tsx +46 -46
  209. package/src/plugins/chart/ui/donut-chart.tsx +48 -48
  210. package/src/plugins/chart/ui/index.ts +7 -7
  211. package/src/plugins/chart/ui/line-chart.tsx +43 -43
  212. package/src/plugins/chart/ui/pie-chart.tsx +44 -44
  213. package/src/plugins/chart/ui/radar-chart.tsx +33 -33
  214. package/src/plugins/chart/ui/scatter-chart.tsx +43 -43
  215. package/src/plugins/components/MacOSWindowFrame.tsx +15 -15
  216. package/src/plugins/components/PluginLoadingState.tsx +10 -10
  217. package/src/plugins/components/index.ts +1 -1
  218. package/src/plugins/generative-ui/catalog.ts +54 -54
  219. package/src/plugins/generative-ui/component.tsx +85 -85
  220. package/src/plugins/generative-ui/index.ts +4 -4
  221. package/src/plugins/generative-ui/ui/accordion-wrapper.tsx +16 -16
  222. package/src/plugins/generative-ui/ui/accordion.tsx +16 -16
  223. package/src/plugins/generative-ui/ui/action-button.tsx +28 -28
  224. package/src/plugins/generative-ui/ui/alert-wrapper.tsx +8 -8
  225. package/src/plugins/generative-ui/ui/alert.tsx +20 -20
  226. package/src/plugins/generative-ui/ui/avatar-wrapper.tsx +7 -7
  227. package/src/plugins/generative-ui/ui/avatar.tsx +30 -30
  228. package/src/plugins/generative-ui/ui/badge.tsx +22 -22
  229. package/src/plugins/generative-ui/ui/button-wrapper.tsx +12 -12
  230. package/src/plugins/generative-ui/ui/button.tsx +28 -28
  231. package/src/plugins/generative-ui/ui/card-wrapper.tsx +8 -8
  232. package/src/plugins/generative-ui/ui/card.tsx +27 -27
  233. package/src/plugins/generative-ui/ui/checkbox-wrapper.tsx +9 -9
  234. package/src/plugins/generative-ui/ui/checkbox.tsx +9 -9
  235. package/src/plugins/generative-ui/ui/data-table.tsx +8 -8
  236. package/src/plugins/generative-ui/ui/dialog.tsx +31 -31
  237. package/src/plugins/generative-ui/ui/dropdown-menu.tsx +44 -44
  238. package/src/plugins/generative-ui/ui/grid.tsx +12 -12
  239. package/src/plugins/generative-ui/ui/index.ts +40 -40
  240. package/src/plugins/generative-ui/ui/input-wrapper.tsx +11 -11
  241. package/src/plugins/generative-ui/ui/input.tsx +9 -9
  242. package/src/plugins/generative-ui/ui/label.tsx +8 -8
  243. package/src/plugins/generative-ui/ui/list.tsx +11 -11
  244. package/src/plugins/generative-ui/ui/metric.tsx +23 -23
  245. package/src/plugins/generative-ui/ui/pagination.tsx +28 -28
  246. package/src/plugins/generative-ui/ui/popover.tsx +21 -21
  247. package/src/plugins/generative-ui/ui/progress.tsx +13 -13
  248. package/src/plugins/generative-ui/ui/radio-group.tsx +12 -12
  249. package/src/plugins/generative-ui/ui/select-wrapper.tsx +7 -7
  250. package/src/plugins/generative-ui/ui/select.tsx +37 -37
  251. package/src/plugins/generative-ui/ui/separator.tsx +9 -9
  252. package/src/plugins/generative-ui/ui/skeleton-wrapper.tsx +10 -10
  253. package/src/plugins/generative-ui/ui/skeleton.tsx +5 -5
  254. package/src/plugins/generative-ui/ui/stack.tsx +28 -28
  255. package/src/plugins/generative-ui/ui/switch.tsx +11 -11
  256. package/src/plugins/generative-ui/ui/table.tsx +32 -32
  257. package/src/plugins/generative-ui/ui/tabs-wrapper.tsx +11 -11
  258. package/src/plugins/generative-ui/ui/tabs.tsx +26 -26
  259. package/src/plugins/generative-ui/ui/text.tsx +12 -12
  260. package/src/plugins/generative-ui/ui/textarea.tsx +7 -7
  261. package/src/plugins/generative-ui/ui/tooltip.tsx +12 -12
  262. package/src/plugins/index.ts +7 -7
  263. package/src/react-shim.ts +6 -6
  264. package/src/server/bun.ts +12 -12
  265. package/src/server/core.ts +25 -25
  266. package/src/server/express.ts +17 -15
  267. package/src/server/fastify.ts +14 -14
  268. package/src/server/hono.ts +9 -9
  269. package/src/server/nextjs.ts +12 -12
  270. package/src/server/tanstack-start.ts +12 -12
  271. package/src/server.ts +27 -27
  272. package/src/storybook.d.ts +4 -4
  273. package/src/types/index.ts +122 -122
  274. package/src/types/plugins.ts +7 -7
  275. package/src/vite-env.d.ts +12 -12
  276. package/dist/compat-shims-BPJ7Q68c.js.map +0 -1
  277. package/dist/index-DBrhzauj.js.map +0 -1
  278. package/dist/index-DxfW52oA.cjs.map +0 -1
@@ -1,68 +1,68 @@
1
- import * as React from 'react'
1
+ import * as React from "react";
2
2
  import {
3
3
  ChevronLeftIcon,
4
4
  ChevronRightIcon,
5
5
  MoreHorizontalIcon,
6
- } from 'lucide-react'
6
+ } from "lucide-react";
7
7
 
8
- import { cn } from '@/lib/utils'
9
- import { buttonVariants, Button } from './button'
8
+ import { cn } from "@/lib/utils";
9
+ import { buttonVariants, Button } from "./button";
10
10
 
11
- function Pagination({ className, ...props }: React.ComponentProps<'nav'>) {
11
+ function Pagination({ className, ...props }: React.ComponentProps<"nav">) {
12
12
  return (
13
13
  <nav
14
14
  role="navigation"
15
15
  aria-label="pagination"
16
16
  data-slot="pagination"
17
- className={cn('mx-auto flex w-full justify-center', className)}
17
+ className={cn("mx-auto flex w-full justify-center", className)}
18
18
  {...props}
19
19
  />
20
- )
20
+ );
21
21
  }
22
22
 
23
23
  function PaginationContent({
24
24
  className,
25
25
  ...props
26
- }: React.ComponentProps<'ul'>) {
26
+ }: React.ComponentProps<"ul">) {
27
27
  return (
28
28
  <ul
29
29
  data-slot="pagination-content"
30
- className={cn('flex flex-row items-center gap-1', className)}
30
+ className={cn("flex flex-row items-center gap-1", className)}
31
31
  {...props}
32
32
  />
33
- )
33
+ );
34
34
  }
35
35
 
36
- function PaginationItem({ ...props }: React.ComponentProps<'li'>) {
37
- return <li data-slot="pagination-item" {...props} />
36
+ function PaginationItem({ ...props }: React.ComponentProps<"li">) {
37
+ return <li data-slot="pagination-item" {...props} />;
38
38
  }
39
39
 
40
40
  type PaginationLinkProps = {
41
- isActive?: boolean
42
- } & Pick<React.ComponentProps<typeof Button>, 'size'> &
43
- React.ComponentProps<'a'>
41
+ isActive?: boolean;
42
+ } & Pick<React.ComponentProps<typeof Button>, "size"> &
43
+ React.ComponentProps<"a">;
44
44
 
45
45
  function PaginationLink({
46
46
  className,
47
47
  isActive,
48
- size = 'icon',
48
+ size = "icon",
49
49
  ...props
50
50
  }: PaginationLinkProps) {
51
51
  return (
52
52
  <a
53
- aria-current={isActive ? 'page' : undefined}
53
+ aria-current={isActive ? "page" : undefined}
54
54
  data-slot="pagination-link"
55
55
  data-active={isActive}
56
56
  className={cn(
57
57
  buttonVariants({
58
- variant: isActive ? 'outline' : 'ghost',
58
+ variant: isActive ? "outline" : "ghost",
59
59
  size,
60
60
  }),
61
- className
61
+ className,
62
62
  )}
63
63
  {...props}
64
64
  />
65
- )
65
+ );
66
66
  }
67
67
 
68
68
  function PaginationPrevious({
@@ -73,13 +73,13 @@ function PaginationPrevious({
73
73
  <PaginationLink
74
74
  aria-label="Go to previous page"
75
75
  size="default"
76
- className={cn('gap-1 px-2.5 sm:pl-2.5', className)}
76
+ className={cn("gap-1 px-2.5 sm:pl-2.5", className)}
77
77
  {...props}
78
78
  >
79
79
  <ChevronLeftIcon />
80
80
  <span className="hidden sm:block">Previous</span>
81
81
  </PaginationLink>
82
- )
82
+ );
83
83
  }
84
84
 
85
85
  function PaginationNext({
@@ -90,30 +90,30 @@ function PaginationNext({
90
90
  <PaginationLink
91
91
  aria-label="Go to next page"
92
92
  size="default"
93
- className={cn('gap-1 px-2.5 sm:pr-2.5', className)}
93
+ className={cn("gap-1 px-2.5 sm:pr-2.5", className)}
94
94
  {...props}
95
95
  >
96
96
  <span className="hidden sm:block">Next</span>
97
97
  <ChevronRightIcon />
98
98
  </PaginationLink>
99
- )
99
+ );
100
100
  }
101
101
 
102
102
  function PaginationEllipsis({
103
103
  className,
104
104
  ...props
105
- }: React.ComponentProps<'span'>) {
105
+ }: React.ComponentProps<"span">) {
106
106
  return (
107
107
  <span
108
108
  aria-hidden
109
109
  data-slot="pagination-ellipsis"
110
- className={cn('flex size-9 items-center justify-center', className)}
110
+ className={cn("flex size-9 items-center justify-center", className)}
111
111
  {...props}
112
112
  >
113
113
  <MoreHorizontalIcon className="size-4" />
114
114
  <span className="sr-only">More pages</span>
115
115
  </span>
116
- )
116
+ );
117
117
  }
118
118
 
119
119
  export {
@@ -124,4 +124,4 @@ export {
124
124
  PaginationPrevious,
125
125
  PaginationNext,
126
126
  PaginationEllipsis,
127
- }
127
+ };
@@ -1,25 +1,25 @@
1
- 'use client'
1
+ "use client";
2
2
 
3
- import * as React from 'react'
4
- import { Popover as PopoverPrimitive } from 'radix-ui'
3
+ import * as React from "react";
4
+ import { Popover as PopoverPrimitive } from "radix-ui";
5
5
 
6
- import { cn } from '@/lib/utils'
6
+ import { cn } from "@/lib/utils";
7
7
 
8
8
  function Popover({
9
9
  ...props
10
10
  }: React.ComponentProps<typeof PopoverPrimitive.Root>) {
11
- return <PopoverPrimitive.Root data-slot="popover" {...props} />
11
+ return <PopoverPrimitive.Root data-slot="popover" {...props} />;
12
12
  }
13
13
 
14
14
  function PopoverTrigger({
15
15
  ...props
16
16
  }: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {
17
- return <PopoverPrimitive.Trigger data-slot="popover-trigger" {...props} />
17
+ return <PopoverPrimitive.Trigger data-slot="popover-trigger" {...props} />;
18
18
  }
19
19
 
20
20
  function PopoverContent({
21
21
  className,
22
- align = 'center',
22
+ align = "center",
23
23
  sideOffset = 4,
24
24
  ...props
25
25
  }: React.ComponentProps<typeof PopoverPrimitive.Content>) {
@@ -30,52 +30,52 @@ function PopoverContent({
30
30
  align={align}
31
31
  sideOffset={sideOffset}
32
32
  className={cn(
33
- 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]: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 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden',
34
- className
33
+ "z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden 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 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
34
+ className,
35
35
  )}
36
36
  {...props}
37
37
  />
38
38
  </PopoverPrimitive.Portal>
39
- )
39
+ );
40
40
  }
41
41
 
42
42
  function PopoverAnchor({
43
43
  ...props
44
44
  }: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {
45
- return <PopoverPrimitive.Anchor data-slot="popover-anchor" {...props} />
45
+ return <PopoverPrimitive.Anchor data-slot="popover-anchor" {...props} />;
46
46
  }
47
47
 
48
- function PopoverHeader({ className, ...props }: React.ComponentProps<'div'>) {
48
+ function PopoverHeader({ className, ...props }: React.ComponentProps<"div">) {
49
49
  return (
50
50
  <div
51
51
  data-slot="popover-header"
52
- className={cn('flex flex-col gap-1 text-sm', className)}
52
+ className={cn("flex flex-col gap-1 text-sm", className)}
53
53
  {...props}
54
54
  />
55
- )
55
+ );
56
56
  }
57
57
 
58
- function PopoverTitle({ className, ...props }: React.ComponentProps<'h2'>) {
58
+ function PopoverTitle({ className, ...props }: React.ComponentProps<"h2">) {
59
59
  return (
60
60
  <div
61
61
  data-slot="popover-title"
62
- className={cn('font-medium', className)}
62
+ className={cn("font-medium", className)}
63
63
  {...props}
64
64
  />
65
- )
65
+ );
66
66
  }
67
67
 
68
68
  function PopoverDescription({
69
69
  className,
70
70
  ...props
71
- }: React.ComponentProps<'p'>) {
71
+ }: React.ComponentProps<"p">) {
72
72
  return (
73
73
  <p
74
74
  data-slot="popover-description"
75
- className={cn('text-muted-foreground', className)}
75
+ className={cn("text-muted-foreground", className)}
76
76
  {...props}
77
77
  />
78
- )
78
+ );
79
79
  }
80
80
 
81
81
  export {
@@ -86,4 +86,4 @@ export {
86
86
  PopoverHeader,
87
87
  PopoverTitle,
88
88
  PopoverDescription,
89
- }
89
+ };
@@ -1,18 +1,18 @@
1
- 'use client'
1
+ "use client";
2
2
 
3
- import * as React from 'react'
4
- import { Progress as ProgressPrimitive } from 'radix-ui'
3
+ import * as React from "react";
4
+ import { Progress as ProgressPrimitive } from "radix-ui";
5
5
 
6
- import { cn } from '@/lib/utils'
6
+ import { cn } from "@/lib/utils";
7
7
 
8
8
  interface ProgressProps extends Omit<
9
9
  React.ComponentProps<typeof ProgressPrimitive.Root>,
10
- 'max'
10
+ "max"
11
11
  > {
12
12
  /** Label to display above the progress bar (matches LLM prompt) */
13
- label?: string
13
+ label?: string;
14
14
  /** Maximum value (matches LLM prompt) */
15
- max?: number
15
+ max?: number;
16
16
  }
17
17
 
18
18
  function Progress({
@@ -25,10 +25,10 @@ function Progress({
25
25
  const percentage =
26
26
  value != null && max > 0
27
27
  ? Math.min(100, Math.max(0, (value / max) * 100))
28
- : 0
28
+ : 0;
29
29
 
30
30
  return (
31
- <div className={cn('w-full space-y-2', className)}>
31
+ <div className={cn("w-full space-y-2", className)}>
32
32
  {label && (
33
33
  <div className="flex justify-between text-sm">
34
34
  <span>{label}</span>
@@ -39,19 +39,19 @@ function Progress({
39
39
  )}
40
40
  <ProgressPrimitive.Root
41
41
  data-slot="progress"
42
- className="bg-primary/20 relative h-2 w-full overflow-hidden rounded-full"
42
+ className="relative h-2 w-full overflow-hidden rounded-full bg-primary/20"
43
43
  value={value}
44
44
  max={max}
45
45
  {...props}
46
46
  >
47
47
  <ProgressPrimitive.Indicator
48
48
  data-slot="progress-indicator"
49
- className="bg-primary h-full w-full flex-1 transition-all"
49
+ className="h-full w-full flex-1 bg-primary transition-all"
50
50
  style={{ transform: `translateX(-${100 - percentage}%)` }}
51
51
  />
52
52
  </ProgressPrimitive.Root>
53
53
  </div>
54
- )
54
+ );
55
55
  }
56
56
 
57
- export { Progress }
57
+ export { Progress };
@@ -1,10 +1,10 @@
1
- 'use client'
1
+ "use client";
2
2
 
3
- import * as React from 'react'
4
- import { CircleIcon } from 'lucide-react'
5
- import { RadioGroup as RadioGroupPrimitive } from 'radix-ui'
3
+ import * as React from "react";
4
+ import { CircleIcon } from "lucide-react";
5
+ import { RadioGroup as RadioGroupPrimitive } from "radix-ui";
6
6
 
7
- import { cn } from '@/lib/utils'
7
+ import { cn } from "@/lib/utils";
8
8
 
9
9
  function RadioGroup({
10
10
  className,
@@ -13,10 +13,10 @@ function RadioGroup({
13
13
  return (
14
14
  <RadioGroupPrimitive.Root
15
15
  data-slot="radio-group"
16
- className={cn('grid gap-3', className)}
16
+ className={cn("grid gap-3", className)}
17
17
  {...props}
18
18
  />
19
- )
19
+ );
20
20
  }
21
21
 
22
22
  function RadioGroupItem({
@@ -27,8 +27,8 @@ function RadioGroupItem({
27
27
  <RadioGroupPrimitive.Item
28
28
  data-slot="radio-group-item"
29
29
  className={cn(
30
- 'border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50',
31
- className
30
+ "aspect-square size-4 shrink-0 rounded-full border border-input text-primary shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:bg-input/30 dark:aria-invalid:ring-destructive/40",
31
+ className,
32
32
  )}
33
33
  {...props}
34
34
  >
@@ -36,10 +36,10 @@ function RadioGroupItem({
36
36
  data-slot="radio-group-indicator"
37
37
  className="relative flex items-center justify-center"
38
38
  >
39
- <CircleIcon className="fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2" />
39
+ <CircleIcon className="absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 fill-primary" />
40
40
  </RadioGroupPrimitive.Indicator>
41
41
  </RadioGroupPrimitive.Item>
42
- )
42
+ );
43
43
  }
44
44
 
45
- export { RadioGroup, RadioGroupItem }
45
+ export { RadioGroup, RadioGroupItem };
@@ -1,19 +1,19 @@
1
- 'use client'
1
+ "use client";
2
2
 
3
- import * as React from 'react'
3
+ import * as React from "react";
4
4
  import {
5
5
  Select,
6
6
  SelectTrigger,
7
7
  SelectValue,
8
8
  SelectContent,
9
9
  SelectItem,
10
- } from './select'
10
+ } from "./select";
11
11
 
12
12
  export interface SelectWrapperProps {
13
- placeholder?: string
13
+ placeholder?: string;
14
14
  /** Path for form state management (future use) */
15
- valuePath: string
16
- options: Array<{ value: string; label: string }>
15
+ valuePath: string;
16
+ options: Array<{ value: string; label: string }>;
17
17
  }
18
18
 
19
19
  /**
@@ -37,5 +37,5 @@ export function SelectWrapper({
37
37
  ))}
38
38
  </SelectContent>
39
39
  </Select>
40
- )
40
+ );
41
41
  }
@@ -1,44 +1,44 @@
1
- 'use client'
1
+ "use client";
2
2
 
3
- import * as React from 'react'
4
- import { CheckIcon, ChevronDownIcon, ChevronUpIcon } from 'lucide-react'
5
- import { Select as SelectPrimitive } from 'radix-ui'
3
+ import * as React from "react";
4
+ import { CheckIcon, ChevronDownIcon, ChevronUpIcon } from "lucide-react";
5
+ import { Select as SelectPrimitive } from "radix-ui";
6
6
 
7
- import { cn } from '@/lib/utils'
7
+ import { cn } from "@/lib/utils";
8
8
 
9
9
  function Select({
10
10
  ...props
11
11
  }: React.ComponentProps<typeof SelectPrimitive.Root>) {
12
- return <SelectPrimitive.Root data-slot="select" {...props} />
12
+ return <SelectPrimitive.Root data-slot="select" {...props} />;
13
13
  }
14
14
 
15
15
  function SelectGroup({
16
16
  ...props
17
17
  }: React.ComponentProps<typeof SelectPrimitive.Group>) {
18
- return <SelectPrimitive.Group data-slot="select-group" {...props} />
18
+ return <SelectPrimitive.Group data-slot="select-group" {...props} />;
19
19
  }
20
20
 
21
21
  function SelectValue({
22
22
  ...props
23
23
  }: React.ComponentProps<typeof SelectPrimitive.Value>) {
24
- return <SelectPrimitive.Value data-slot="select-value" {...props} />
24
+ return <SelectPrimitive.Value data-slot="select-value" {...props} />;
25
25
  }
26
26
 
27
27
  function SelectTrigger({
28
28
  className,
29
- size = 'default',
29
+ size = "default",
30
30
  children,
31
31
  ...props
32
32
  }: React.ComponentProps<typeof SelectPrimitive.Trigger> & {
33
- size?: 'sm' | 'default'
33
+ size?: "sm" | "default";
34
34
  }) {
35
35
  return (
36
36
  <SelectPrimitive.Trigger
37
37
  data-slot="select-trigger"
38
38
  data-size={size}
39
39
  className={cn(
40
- "border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
41
- className
40
+ "flex w-fit items-center justify-between gap-2 rounded-md border border-input bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[placeholder]:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground",
41
+ className,
42
42
  )}
43
43
  {...props}
44
44
  >
@@ -47,14 +47,14 @@ function SelectTrigger({
47
47
  <ChevronDownIcon className="size-4 opacity-50" />
48
48
  </SelectPrimitive.Icon>
49
49
  </SelectPrimitive.Trigger>
50
- )
50
+ );
51
51
  }
52
52
 
53
53
  function SelectContent({
54
54
  className,
55
55
  children,
56
- position = 'item-aligned',
57
- align = 'center',
56
+ position = "item-aligned",
57
+ align = "center",
58
58
  ...props
59
59
  }: React.ComponentProps<typeof SelectPrimitive.Content>) {
60
60
  return (
@@ -62,10 +62,10 @@ function SelectContent({
62
62
  <SelectPrimitive.Content
63
63
  data-slot="select-content"
64
64
  className={cn(
65
- 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]: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 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md',
66
- position === 'popper' &&
67
- 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',
68
- className
65
+ "relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover text-popover-foreground shadow-md 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 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
66
+ position === "popper" &&
67
+ "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
68
+ className,
69
69
  )}
70
70
  position={position}
71
71
  align={align}
@@ -74,9 +74,9 @@ function SelectContent({
74
74
  <SelectScrollUpButton />
75
75
  <SelectPrimitive.Viewport
76
76
  className={cn(
77
- 'p-1',
78
- position === 'popper' &&
79
- 'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1'
77
+ "p-1",
78
+ position === "popper" &&
79
+ "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1",
80
80
  )}
81
81
  >
82
82
  {children}
@@ -84,7 +84,7 @@ function SelectContent({
84
84
  <SelectScrollDownButton />
85
85
  </SelectPrimitive.Content>
86
86
  </SelectPrimitive.Portal>
87
- )
87
+ );
88
88
  }
89
89
 
90
90
  function SelectLabel({
@@ -94,10 +94,10 @@ function SelectLabel({
94
94
  return (
95
95
  <SelectPrimitive.Label
96
96
  data-slot="select-label"
97
- className={cn('text-muted-foreground px-2 py-1.5 text-xs', className)}
97
+ className={cn("px-2 py-1.5 text-xs text-muted-foreground", className)}
98
98
  {...props}
99
99
  />
100
- )
100
+ );
101
101
  }
102
102
 
103
103
  function SelectItem({
@@ -109,8 +109,8 @@ function SelectItem({
109
109
  <SelectPrimitive.Item
110
110
  data-slot="select-item"
111
111
  className={cn(
112
- "focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
113
- className
112
+ "relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
113
+ className,
114
114
  )}
115
115
  {...props}
116
116
  >
@@ -124,7 +124,7 @@ function SelectItem({
124
124
  </span>
125
125
  <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>
126
126
  </SelectPrimitive.Item>
127
- )
127
+ );
128
128
  }
129
129
 
130
130
  function SelectSeparator({
@@ -134,10 +134,10 @@ function SelectSeparator({
134
134
  return (
135
135
  <SelectPrimitive.Separator
136
136
  data-slot="select-separator"
137
- className={cn('bg-border pointer-events-none -mx-1 my-1 h-px', className)}
137
+ className={cn("pointer-events-none -mx-1 my-1 h-px bg-border", className)}
138
138
  {...props}
139
139
  />
140
- )
140
+ );
141
141
  }
142
142
 
143
143
  function SelectScrollUpButton({
@@ -148,14 +148,14 @@ function SelectScrollUpButton({
148
148
  <SelectPrimitive.ScrollUpButton
149
149
  data-slot="select-scroll-up-button"
150
150
  className={cn(
151
- 'flex cursor-default items-center justify-center py-1',
152
- className
151
+ "flex cursor-default items-center justify-center py-1",
152
+ className,
153
153
  )}
154
154
  {...props}
155
155
  >
156
156
  <ChevronUpIcon className="size-4" />
157
157
  </SelectPrimitive.ScrollUpButton>
158
- )
158
+ );
159
159
  }
160
160
 
161
161
  function SelectScrollDownButton({
@@ -166,14 +166,14 @@ function SelectScrollDownButton({
166
166
  <SelectPrimitive.ScrollDownButton
167
167
  data-slot="select-scroll-down-button"
168
168
  className={cn(
169
- 'flex cursor-default items-center justify-center py-1',
170
- className
169
+ "flex cursor-default items-center justify-center py-1",
170
+ className,
171
171
  )}
172
172
  {...props}
173
173
  >
174
174
  <ChevronDownIcon className="size-4" />
175
175
  </SelectPrimitive.ScrollDownButton>
176
- )
176
+ );
177
177
  }
178
178
 
179
179
  export {
@@ -187,4 +187,4 @@ export {
187
187
  SelectSeparator,
188
188
  SelectTrigger,
189
189
  SelectValue,
190
- }
190
+ };
@@ -1,13 +1,13 @@
1
- 'use client'
1
+ "use client";
2
2
 
3
- import * as React from 'react'
4
- import { Separator as SeparatorPrimitive } from 'radix-ui'
3
+ import * as React from "react";
4
+ import { Separator as SeparatorPrimitive } from "radix-ui";
5
5
 
6
- import { cn } from '@/lib/utils'
6
+ import { cn } from "@/lib/utils";
7
7
 
8
8
  function Separator({
9
9
  className,
10
- orientation = 'horizontal',
10
+ orientation = "horizontal",
11
11
  decorative = true,
12
12
  ...props
13
13
  }: React.ComponentProps<typeof SeparatorPrimitive.Root>) {
@@ -17,12 +17,12 @@ function Separator({
17
17
  decorative={decorative}
18
18
  orientation={orientation}
19
19
  className={cn(
20
- 'bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px',
21
- className
20
+ "shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",
21
+ className,
22
22
  )}
23
23
  {...props}
24
24
  />
25
- )
25
+ );
26
26
  }
27
27
 
28
- export { Separator }
28
+ export { Separator };