@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,15 +1,15 @@
1
- 'use client'
1
+ "use client";
2
2
 
3
- import * as React from 'react'
4
- import { CheckIcon, ChevronRightIcon, CircleIcon } from 'lucide-react'
5
- import { DropdownMenu as DropdownMenuPrimitive } from 'radix-ui'
3
+ import * as React from "react";
4
+ import { CheckIcon, ChevronRightIcon, CircleIcon } from "lucide-react";
5
+ import { DropdownMenu as DropdownMenuPrimitive } from "radix-ui";
6
6
 
7
- import { cn } from '@/lib/utils'
7
+ import { cn } from "@/lib/utils";
8
8
 
9
9
  function DropdownMenu({
10
10
  ...props
11
11
  }: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {
12
- return <DropdownMenuPrimitive.Root data-slot="dropdown-menu" {...props} />
12
+ return <DropdownMenuPrimitive.Root data-slot="dropdown-menu" {...props} />;
13
13
  }
14
14
 
15
15
  function DropdownMenuPortal({
@@ -17,7 +17,7 @@ function DropdownMenuPortal({
17
17
  }: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {
18
18
  return (
19
19
  <DropdownMenuPrimitive.Portal data-slot="dropdown-menu-portal" {...props} />
20
- )
20
+ );
21
21
  }
22
22
 
23
23
  function DropdownMenuTrigger({
@@ -28,7 +28,7 @@ function DropdownMenuTrigger({
28
28
  data-slot="dropdown-menu-trigger"
29
29
  {...props}
30
30
  />
31
- )
31
+ );
32
32
  }
33
33
 
34
34
  function DropdownMenuContent({
@@ -42,13 +42,13 @@ function DropdownMenuContent({
42
42
  data-slot="dropdown-menu-content"
43
43
  sideOffset={sideOffset}
44
44
  className={cn(
45
- '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 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md',
46
- className
45
+ "z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover p-1 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",
46
+ className,
47
47
  )}
48
48
  {...props}
49
49
  />
50
50
  </DropdownMenuPrimitive.Portal>
51
- )
51
+ );
52
52
  }
53
53
 
54
54
  function DropdownMenuGroup({
@@ -56,17 +56,17 @@ function DropdownMenuGroup({
56
56
  }: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {
57
57
  return (
58
58
  <DropdownMenuPrimitive.Group data-slot="dropdown-menu-group" {...props} />
59
- )
59
+ );
60
60
  }
61
61
 
62
62
  function DropdownMenuItem({
63
63
  className,
64
64
  inset,
65
- variant = 'default',
65
+ variant = "default",
66
66
  ...props
67
67
  }: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {
68
- inset?: boolean
69
- variant?: 'default' | 'destructive'
68
+ inset?: boolean;
69
+ variant?: "default" | "destructive";
70
70
  }) {
71
71
  return (
72
72
  <DropdownMenuPrimitive.Item
@@ -74,12 +74,12 @@ function DropdownMenuItem({
74
74
  data-inset={inset}
75
75
  data-variant={variant}
76
76
  className={cn(
77
- "focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
78
- className
77
+ "relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:!text-destructive",
78
+ className,
79
79
  )}
80
80
  {...props}
81
81
  />
82
- )
82
+ );
83
83
  }
84
84
 
85
85
  function DropdownMenuCheckboxItem({
@@ -92,8 +92,8 @@ function DropdownMenuCheckboxItem({
92
92
  <DropdownMenuPrimitive.CheckboxItem
93
93
  data-slot="dropdown-menu-checkbox-item"
94
94
  className={cn(
95
- "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 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",
96
- className
95
+ "relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 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",
96
+ className,
97
97
  )}
98
98
  checked={checked}
99
99
  {...props}
@@ -105,7 +105,7 @@ function DropdownMenuCheckboxItem({
105
105
  </span>
106
106
  {children}
107
107
  </DropdownMenuPrimitive.CheckboxItem>
108
- )
108
+ );
109
109
  }
110
110
 
111
111
  function DropdownMenuRadioGroup({
@@ -116,7 +116,7 @@ function DropdownMenuRadioGroup({
116
116
  data-slot="dropdown-menu-radio-group"
117
117
  {...props}
118
118
  />
119
- )
119
+ );
120
120
  }
121
121
 
122
122
  function DropdownMenuRadioItem({
@@ -128,8 +128,8 @@ function DropdownMenuRadioItem({
128
128
  <DropdownMenuPrimitive.RadioItem
129
129
  data-slot="dropdown-menu-radio-item"
130
130
  className={cn(
131
- "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 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",
132
- className
131
+ "relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 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",
132
+ className,
133
133
  )}
134
134
  {...props}
135
135
  >
@@ -140,7 +140,7 @@ function DropdownMenuRadioItem({
140
140
  </span>
141
141
  {children}
142
142
  </DropdownMenuPrimitive.RadioItem>
143
- )
143
+ );
144
144
  }
145
145
 
146
146
  function DropdownMenuLabel({
@@ -148,19 +148,19 @@ function DropdownMenuLabel({
148
148
  inset,
149
149
  ...props
150
150
  }: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {
151
- inset?: boolean
151
+ inset?: boolean;
152
152
  }) {
153
153
  return (
154
154
  <DropdownMenuPrimitive.Label
155
155
  data-slot="dropdown-menu-label"
156
156
  data-inset={inset}
157
157
  className={cn(
158
- 'px-2 py-1.5 text-sm font-medium data-[inset]:pl-8',
159
- className
158
+ "px-2 py-1.5 text-sm font-medium data-[inset]:pl-8",
159
+ className,
160
160
  )}
161
161
  {...props}
162
162
  />
163
- )
163
+ );
164
164
  }
165
165
 
166
166
  function DropdownMenuSeparator({
@@ -170,32 +170,32 @@ function DropdownMenuSeparator({
170
170
  return (
171
171
  <DropdownMenuPrimitive.Separator
172
172
  data-slot="dropdown-menu-separator"
173
- className={cn('bg-border -mx-1 my-1 h-px', className)}
173
+ className={cn("-mx-1 my-1 h-px bg-border", className)}
174
174
  {...props}
175
175
  />
176
- )
176
+ );
177
177
  }
178
178
 
179
179
  function DropdownMenuShortcut({
180
180
  className,
181
181
  ...props
182
- }: React.ComponentProps<'span'>) {
182
+ }: React.ComponentProps<"span">) {
183
183
  return (
184
184
  <span
185
185
  data-slot="dropdown-menu-shortcut"
186
186
  className={cn(
187
- 'text-muted-foreground ml-auto text-xs tracking-widest',
188
- className
187
+ "ml-auto text-xs tracking-widest text-muted-foreground",
188
+ className,
189
189
  )}
190
190
  {...props}
191
191
  />
192
- )
192
+ );
193
193
  }
194
194
 
195
195
  function DropdownMenuSub({
196
196
  ...props
197
197
  }: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {
198
- return <DropdownMenuPrimitive.Sub data-slot="dropdown-menu-sub" {...props} />
198
+ return <DropdownMenuPrimitive.Sub data-slot="dropdown-menu-sub" {...props} />;
199
199
  }
200
200
 
201
201
  function DropdownMenuSubTrigger({
@@ -204,22 +204,22 @@ function DropdownMenuSubTrigger({
204
204
  children,
205
205
  ...props
206
206
  }: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {
207
- inset?: boolean
207
+ inset?: boolean;
208
208
  }) {
209
209
  return (
210
210
  <DropdownMenuPrimitive.SubTrigger
211
211
  data-slot="dropdown-menu-sub-trigger"
212
212
  data-inset={inset}
213
213
  className={cn(
214
- "focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
215
- className
214
+ "flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset]:pl-8 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground",
215
+ className,
216
216
  )}
217
217
  {...props}
218
218
  >
219
219
  {children}
220
220
  <ChevronRightIcon className="ml-auto size-4" />
221
221
  </DropdownMenuPrimitive.SubTrigger>
222
- )
222
+ );
223
223
  }
224
224
 
225
225
  function DropdownMenuSubContent({
@@ -230,12 +230,12 @@ function DropdownMenuSubContent({
230
230
  <DropdownMenuPrimitive.SubContent
231
231
  data-slot="dropdown-menu-sub-content"
232
232
  className={cn(
233
- '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 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg',
234
- className
233
+ "z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg 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",
234
+ className,
235
235
  )}
236
236
  {...props}
237
237
  />
238
- )
238
+ );
239
239
  }
240
240
 
241
241
  export {
@@ -254,4 +254,4 @@ export {
254
254
  DropdownMenuSub,
255
255
  DropdownMenuSubTrigger,
256
256
  DropdownMenuSubContent,
257
- }
257
+ };
@@ -1,29 +1,29 @@
1
- import * as React from 'react'
2
- import { cn } from '@/lib/utils'
1
+ import * as React from "react";
2
+ import { cn } from "@/lib/utils";
3
3
 
4
- export interface GridProps extends React.ComponentProps<'div'> {
5
- columns?: number
6
- gap?: 'sm' | 'md' | 'lg'
4
+ export interface GridProps extends React.ComponentProps<"div"> {
5
+ columns?: number;
6
+ gap?: "sm" | "md" | "lg";
7
7
  }
8
8
 
9
9
  const gapClasses = {
10
- sm: 'gap-2',
11
- md: 'gap-4',
12
- lg: 'gap-6',
13
- }
10
+ sm: "gap-2",
11
+ md: "gap-4",
12
+ lg: "gap-6",
13
+ };
14
14
 
15
15
  export function Grid({
16
16
  columns = 2,
17
- gap = 'md',
17
+ gap = "md",
18
18
  className,
19
19
  ...props
20
20
  }: GridProps) {
21
21
  return (
22
22
  <div
23
23
  data-slot="grid"
24
- className={cn('grid', gapClasses[gap], className)}
24
+ className={cn("grid", gapClasses[gap], className)}
25
25
  style={{ gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))` }}
26
26
  {...props}
27
27
  />
28
- )
28
+ );
29
29
  }
@@ -1,43 +1,43 @@
1
1
  // Vercel shadcn primitives
2
- export * from './accordion'
3
- export * from './alert'
4
- export * from './avatar'
5
- export * from './badge'
6
- export * from './button'
7
- export * from './card'
8
- export * from './checkbox'
9
- export * from './dialog'
10
- export * from './dropdown-menu'
11
- export * from './input'
12
- export * from './label'
13
- export * from './pagination'
14
- export * from './popover'
15
- export * from './progress'
16
- export * from './radio-group'
17
- export * from './select'
18
- export * from './separator'
19
- export * from './skeleton'
20
- export * from './switch'
21
- export * from './table'
22
- export * from './tabs'
23
- export * from './textarea'
24
- export * from './tooltip'
2
+ export * from "./accordion";
3
+ export * from "./alert";
4
+ export * from "./avatar";
5
+ export * from "./badge";
6
+ export * from "./button";
7
+ export * from "./card";
8
+ export * from "./checkbox";
9
+ export * from "./dialog";
10
+ export * from "./dropdown-menu";
11
+ export * from "./input";
12
+ export * from "./label";
13
+ export * from "./pagination";
14
+ export * from "./popover";
15
+ export * from "./progress";
16
+ export * from "./radio-group";
17
+ export * from "./select";
18
+ export * from "./separator";
19
+ export * from "./skeleton";
20
+ export * from "./switch";
21
+ export * from "./table";
22
+ export * from "./tabs";
23
+ export * from "./textarea";
24
+ export * from "./tooltip";
25
25
 
26
26
  // json-render catalog wrappers
27
- export * from './accordion-wrapper'
28
- export * from './action-button'
29
- export * from './alert-wrapper'
30
- export * from './avatar-wrapper'
31
- export * from './button-wrapper'
32
- export * from './card-wrapper'
33
- export * from './checkbox-wrapper'
34
- export * from './data-table'
35
- export * from './grid'
36
- export * from './input-wrapper'
37
- export * from './list'
38
- export * from './metric'
39
- export * from './select-wrapper'
40
- export * from './skeleton-wrapper'
41
- export * from './stack'
42
- export * from './tabs-wrapper'
43
- export * from './text'
27
+ export * from "./accordion-wrapper";
28
+ export * from "./action-button";
29
+ export * from "./alert-wrapper";
30
+ export * from "./avatar-wrapper";
31
+ export * from "./button-wrapper";
32
+ export * from "./card-wrapper";
33
+ export * from "./checkbox-wrapper";
34
+ export * from "./data-table";
35
+ export * from "./grid";
36
+ export * from "./input-wrapper";
37
+ export * from "./list";
38
+ export * from "./metric";
39
+ export * from "./select-wrapper";
40
+ export * from "./skeleton-wrapper";
41
+ export * from "./stack";
42
+ export * from "./tabs-wrapper";
43
+ export * from "./text";
@@ -1,15 +1,15 @@
1
- 'use client'
1
+ "use client";
2
2
 
3
- import * as React from 'react'
4
- import { Input } from './input'
5
- import { Label } from './label'
3
+ import * as React from "react";
4
+ import { Input } from "./input";
5
+ import { Label } from "./label";
6
6
 
7
7
  export interface InputWrapperProps {
8
- label?: string
9
- placeholder?: string
10
- type?: 'text' | 'email' | 'password' | 'number' | 'tel'
8
+ label?: string;
9
+ placeholder?: string;
10
+ type?: "text" | "email" | "password" | "number" | "tel";
11
11
  /** Path for form state management (future use) */
12
- valuePath: string
12
+ valuePath: string;
13
13
  }
14
14
 
15
15
  /**
@@ -18,10 +18,10 @@ export interface InputWrapperProps {
18
18
  export function InputWrapper({
19
19
  label,
20
20
  placeholder,
21
- type = 'text',
21
+ type = "text",
22
22
  valuePath,
23
23
  }: InputWrapperProps) {
24
- const id = React.useId()
24
+ const id = React.useId();
25
25
 
26
26
  return (
27
27
  <div className="flex flex-col gap-1.5">
@@ -34,5 +34,5 @@ export function InputWrapper({
34
34
  data-value-path={valuePath}
35
35
  />
36
36
  </div>
37
- )
37
+ );
38
38
  }
@@ -1,21 +1,21 @@
1
- import * as React from 'react'
1
+ import * as React from "react";
2
2
 
3
- import { cn } from '@/lib/utils'
3
+ import { cn } from "@/lib/utils";
4
4
 
5
- function Input({ className, type, ...props }: React.ComponentProps<'input'>) {
5
+ function Input({ className, type, ...props }: React.ComponentProps<"input">) {
6
6
  return (
7
7
  <input
8
8
  type={type}
9
9
  data-slot="input"
10
10
  className={cn(
11
- 'file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',
12
- 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',
13
- 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',
14
- className
11
+ "h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none selection:bg-primary selection:text-primary-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm dark:bg-input/30",
12
+ "focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50",
13
+ "aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40",
14
+ className,
15
15
  )}
16
16
  {...props}
17
17
  />
18
- )
18
+ );
19
19
  }
20
20
 
21
- export { Input }
21
+ export { Input };
@@ -1,9 +1,9 @@
1
- 'use client'
1
+ "use client";
2
2
 
3
- import * as React from 'react'
4
- import { Label as LabelPrimitive } from 'radix-ui'
3
+ import * as React from "react";
4
+ import { Label as LabelPrimitive } from "radix-ui";
5
5
 
6
- import { cn } from '@/lib/utils'
6
+ import { cn } from "@/lib/utils";
7
7
 
8
8
  function Label({
9
9
  className,
@@ -13,12 +13,12 @@ function Label({
13
13
  <LabelPrimitive.Root
14
14
  data-slot="label"
15
15
  className={cn(
16
- 'flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50',
17
- className
16
+ "flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
17
+ className,
18
18
  )}
19
19
  {...props}
20
20
  />
21
- )
21
+ );
22
22
  }
23
23
 
24
- export { Label }
24
+ export { Label };
@@ -1,18 +1,18 @@
1
- import * as React from 'react'
2
- import { cn } from '@/lib/utils'
1
+ import * as React from "react";
2
+ import { cn } from "@/lib/utils";
3
3
 
4
4
  export interface ListProps {
5
- items: string[]
6
- ordered?: boolean
7
- className?: string
5
+ items: string[];
6
+ ordered?: boolean;
7
+ className?: string;
8
8
  }
9
9
 
10
10
  export function List({ items, ordered = false, className }: ListProps) {
11
11
  const listClasses = cn(
12
- 'text-foreground space-y-1 pl-4',
13
- ordered ? 'list-decimal' : 'list-disc',
14
- className
15
- )
12
+ "space-y-1 pl-4 text-foreground",
13
+ ordered ? "list-decimal" : "list-disc",
14
+ className,
15
+ );
16
16
 
17
17
  if (ordered) {
18
18
  return (
@@ -21,7 +21,7 @@ export function List({ items, ordered = false, className }: ListProps) {
21
21
  <li key={index}>{item}</li>
22
22
  ))}
23
23
  </ol>
24
- )
24
+ );
25
25
  }
26
26
 
27
27
  return (
@@ -30,5 +30,5 @@ export function List({ items, ordered = false, className }: ListProps) {
30
30
  <li key={index}>{item}</li>
31
31
  ))}
32
32
  </ul>
33
- )
33
+ );
34
34
  }
@@ -1,33 +1,33 @@
1
- import * as React from 'react'
2
- import { cn } from '@/lib/utils'
1
+ import * as React from "react";
2
+ import { cn } from "@/lib/utils";
3
3
 
4
- export interface MetricProps extends React.ComponentProps<'div'> {
5
- label: string
6
- value: string | number
7
- format?: 'number' | 'currency' | 'percent'
4
+ export interface MetricProps extends React.ComponentProps<"div"> {
5
+ label: string;
6
+ value: string | number;
7
+ format?: "number" | "currency" | "percent";
8
8
  }
9
9
 
10
10
  function formatValue(
11
11
  value: string | number,
12
- format?: 'number' | 'currency' | 'percent'
12
+ format?: "number" | "currency" | "percent",
13
13
  ): string {
14
- if (typeof value === 'string') return value
14
+ if (typeof value === "string") return value;
15
15
 
16
16
  switch (format) {
17
- case 'currency':
18
- return new Intl.NumberFormat('en-US', {
19
- style: 'currency',
20
- currency: 'USD',
21
- }).format(value)
22
- case 'percent':
23
- return new Intl.NumberFormat('en-US', {
24
- style: 'percent',
17
+ case "currency":
18
+ return new Intl.NumberFormat("en-US", {
19
+ style: "currency",
20
+ currency: "USD",
21
+ }).format(value);
22
+ case "percent":
23
+ return new Intl.NumberFormat("en-US", {
24
+ style: "percent",
25
25
  minimumFractionDigits: 0,
26
26
  maximumFractionDigits: 1,
27
- }).format(value)
28
- case 'number':
27
+ }).format(value);
28
+ case "number":
29
29
  default:
30
- return new Intl.NumberFormat('en-US').format(value)
30
+ return new Intl.NumberFormat("en-US").format(value);
31
31
  }
32
32
  }
33
33
 
@@ -41,13 +41,13 @@ export function Metric({
41
41
  return (
42
42
  <div
43
43
  data-slot="metric"
44
- className={cn('flex flex-col', className)}
44
+ className={cn("flex flex-col", className)}
45
45
  {...props}
46
46
  >
47
- <span className="text-muted-foreground text-sm">{label}</span>
48
- <span className="text-foreground text-2xl font-semibold">
47
+ <span className="text-sm text-muted-foreground">{label}</span>
48
+ <span className="text-2xl font-semibold text-foreground">
49
49
  {formatValue(value, format)}
50
50
  </span>
51
51
  </div>
52
- )
52
+ );
53
53
  }