@copilotkit/react-ui 0.2.0 → 0.4.0

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 (238) hide show
  1. package/.turbo/turbo-build.log +193 -16
  2. package/CHANGELOG.md +24 -0
  3. package/LICENSE +21 -0
  4. package/dist/chunk-46XC7ODX.mjs +72 -0
  5. package/dist/chunk-46XC7ODX.mjs.map +1 -0
  6. package/dist/chunk-4HK6C362.mjs +106 -0
  7. package/dist/chunk-4HK6C362.mjs.map +1 -0
  8. package/dist/chunk-6LAC5RA2.mjs +28 -0
  9. package/dist/chunk-6LAC5RA2.mjs.map +1 -0
  10. package/dist/chunk-6LRNF2VU.mjs +12 -0
  11. package/dist/chunk-6LRNF2VU.mjs.map +1 -0
  12. package/dist/chunk-7NSRDJ5C.mjs +3 -0
  13. package/dist/chunk-7NSRDJ5C.mjs.map +1 -0
  14. package/dist/chunk-BB6IP63P.mjs +29 -0
  15. package/dist/chunk-BB6IP63P.mjs.map +1 -0
  16. package/dist/chunk-BIPCPNHG.mjs +18 -0
  17. package/dist/chunk-BIPCPNHG.mjs.map +1 -0
  18. package/dist/chunk-BS6RR2DJ.mjs +25 -0
  19. package/dist/chunk-BS6RR2DJ.mjs.map +1 -0
  20. package/dist/chunk-DOMJCSI6.mjs +26 -0
  21. package/dist/chunk-DOMJCSI6.mjs.map +1 -0
  22. package/dist/chunk-E2YBQYWM.mjs +69 -0
  23. package/dist/chunk-E2YBQYWM.mjs.map +1 -0
  24. package/dist/chunk-E5BOIXYO.mjs +45 -0
  25. package/dist/chunk-E5BOIXYO.mjs.map +1 -0
  26. package/dist/chunk-H4VKQGVU.mjs +3 -0
  27. package/dist/chunk-H4VKQGVU.mjs.map +1 -0
  28. package/dist/chunk-I2AB5FK4.mjs +123 -0
  29. package/dist/chunk-I2AB5FK4.mjs.map +1 -0
  30. package/dist/chunk-IU3WTXLQ.mjs +3 -0
  31. package/dist/chunk-IU3WTXLQ.mjs.map +1 -0
  32. package/dist/chunk-KR7MH7XO.mjs +481 -0
  33. package/dist/chunk-KR7MH7XO.mjs.map +1 -0
  34. package/dist/chunk-KXJV37FS.mjs +33 -0
  35. package/dist/chunk-KXJV37FS.mjs.map +1 -0
  36. package/dist/chunk-MC6KTH4X.mjs +12 -0
  37. package/dist/chunk-MC6KTH4X.mjs.map +1 -0
  38. package/dist/chunk-MRXNTQOX.mjs +55 -0
  39. package/dist/chunk-MRXNTQOX.mjs.map +1 -0
  40. package/dist/chunk-N7KB3Z57.mjs +23 -0
  41. package/dist/chunk-N7KB3Z57.mjs.map +1 -0
  42. package/dist/chunk-QEXWZWJL.mjs +75 -0
  43. package/dist/chunk-QEXWZWJL.mjs.map +1 -0
  44. package/dist/chunk-RSONJDLO.mjs +28 -0
  45. package/dist/chunk-RSONJDLO.mjs.map +1 -0
  46. package/dist/chunk-SF56HSZW.mjs +48 -0
  47. package/dist/chunk-SF56HSZW.mjs.map +1 -0
  48. package/dist/chunk-TVTG3V4F.mjs +40 -0
  49. package/dist/chunk-TVTG3V4F.mjs.map +1 -0
  50. package/dist/chunk-U6NJWGTV.mjs +3 -0
  51. package/dist/chunk-U6NJWGTV.mjs.map +1 -0
  52. package/dist/chunk-V6QYUEJR.mjs +47 -0
  53. package/dist/chunk-V6QYUEJR.mjs.map +1 -0
  54. package/dist/chunk-VQNV2DHJ.mjs +142 -0
  55. package/dist/chunk-VQNV2DHJ.mjs.map +1 -0
  56. package/dist/chunk-VSNDSL6W.mjs +74 -0
  57. package/dist/chunk-VSNDSL6W.mjs.map +1 -0
  58. package/dist/chunk-XZFO2YEG.mjs +53 -0
  59. package/dist/chunk-XZFO2YEG.mjs.map +1 -0
  60. package/dist/components/chat-components/chat-list.d.ts +8 -0
  61. package/dist/components/chat-components/chat-list.mjs +13 -0
  62. package/dist/components/chat-components/chat-list.mjs.map +1 -0
  63. package/dist/components/chat-components/chat-message-actions.d.ts +8 -0
  64. package/dist/components/chat-components/chat-message-actions.mjs +8 -0
  65. package/dist/components/chat-components/chat-message-actions.mjs.map +1 -0
  66. package/dist/components/chat-components/chat-message.d.ts +8 -0
  67. package/dist/components/chat-components/chat-message.mjs +11 -0
  68. package/dist/components/chat-components/chat-message.mjs.map +1 -0
  69. package/dist/components/chat-components/chat-panel.d.ts +8 -0
  70. package/dist/components/chat-components/chat-panel.mjs +10 -0
  71. package/dist/components/chat-components/chat-panel.mjs.map +1 -0
  72. package/dist/components/chat-components/chat-scroll-anchor.d.ts +6 -0
  73. package/dist/components/chat-components/chat-scroll-anchor.mjs +5 -0
  74. package/dist/components/chat-components/chat-scroll-anchor.mjs.map +1 -0
  75. package/dist/components/chat-components/clear-history.d.ts +9 -0
  76. package/dist/components/chat-components/clear-history.mjs +81 -0
  77. package/dist/components/chat-components/clear-history.mjs.map +1 -0
  78. package/dist/components/chat-components/copilot-chat.d.ts +12 -0
  79. package/dist/components/chat-components/copilot-chat.mjs +22 -0
  80. package/dist/components/chat-components/copilot-chat.mjs.map +1 -0
  81. package/dist/components/chat-components/default-empty-screen.d.ts +8 -0
  82. package/dist/components/chat-components/default-empty-screen.mjs +8 -0
  83. package/dist/components/chat-components/default-empty-screen.mjs.map +1 -0
  84. package/dist/components/chat-components/external-link.d.ts +6 -0
  85. package/dist/components/chat-components/external-link.mjs +4 -0
  86. package/dist/components/chat-components/external-link.mjs.map +1 -0
  87. package/dist/components/chat-components/markdown.d.ts +6 -0
  88. package/dist/components/chat-components/markdown.mjs +4 -0
  89. package/dist/components/chat-components/markdown.mjs.map +1 -0
  90. package/dist/components/chat-components/prompt-form.d.ts +9 -0
  91. package/dist/components/chat-components/prompt-form.mjs +9 -0
  92. package/dist/components/chat-components/prompt-form.mjs.map +1 -0
  93. package/dist/components/chat-components/theme-toggle.d.ts +3 -0
  94. package/dist/components/chat-components/theme-toggle.mjs +36 -0
  95. package/dist/components/chat-components/theme-toggle.mjs.map +1 -0
  96. package/dist/components/chat-components/toaster.d.ts +1 -0
  97. package/dist/components/chat-components/toaster.mjs +4 -0
  98. package/dist/components/chat-components/toaster.mjs.map +1 -0
  99. package/dist/components/chat-components/ui/alert-dialog.d.ts +20 -0
  100. package/dist/components/chat-components/ui/alert-dialog.mjs +6 -0
  101. package/dist/components/chat-components/ui/alert-dialog.mjs.map +1 -0
  102. package/dist/components/chat-components/ui/badge.d.ts +12 -0
  103. package/dist/components/chat-components/ui/badge.mjs +31 -0
  104. package/dist/components/chat-components/ui/badge.mjs.map +1 -0
  105. package/dist/components/chat-components/ui/button.d.ts +14 -0
  106. package/dist/components/chat-components/ui/button.mjs +5 -0
  107. package/dist/components/chat-components/ui/button.mjs.map +1 -0
  108. package/dist/components/chat-components/ui/codeblock.d.ts +14 -0
  109. package/dist/components/chat-components/ui/codeblock.mjs +8 -0
  110. package/dist/components/chat-components/ui/codeblock.mjs.map +1 -0
  111. package/dist/components/chat-components/ui/dialog.d.ts +18 -0
  112. package/dist/components/chat-components/ui/dialog.mjs +119 -0
  113. package/dist/components/chat-components/ui/dialog.mjs.map +1 -0
  114. package/dist/components/chat-components/ui/dropdown-menu.d.ts +24 -0
  115. package/dist/components/chat-components/ui/dropdown-menu.mjs +84 -0
  116. package/dist/components/chat-components/ui/dropdown-menu.mjs.map +1 -0
  117. package/dist/components/chat-components/ui/icons.d.ts +33 -0
  118. package/dist/components/chat-components/ui/icons.mjs +5 -0
  119. package/dist/components/chat-components/ui/icons.mjs.map +1 -0
  120. package/dist/components/chat-components/ui/input.d.ts +7 -0
  121. package/dist/components/chat-components/ui/input.mjs +23 -0
  122. package/dist/components/chat-components/ui/input.mjs.map +1 -0
  123. package/dist/components/chat-components/ui/label.d.ts +8 -0
  124. package/dist/components/chat-components/ui/label.mjs +22 -0
  125. package/dist/components/chat-components/ui/label.mjs.map +1 -0
  126. package/dist/components/chat-components/ui/select.d.ts +13 -0
  127. package/dist/components/chat-components/ui/select.mjs +99 -0
  128. package/dist/components/chat-components/ui/select.mjs.map +1 -0
  129. package/dist/components/chat-components/ui/separator.d.ts +6 -0
  130. package/dist/components/chat-components/ui/separator.mjs +5 -0
  131. package/dist/components/chat-components/ui/separator.mjs.map +1 -0
  132. package/dist/components/chat-components/ui/sheet.d.ts +19 -0
  133. package/dist/components/chat-components/ui/sheet.mjs +109 -0
  134. package/dist/components/chat-components/ui/sheet.mjs.map +1 -0
  135. package/dist/components/chat-components/ui/switch.d.ts +6 -0
  136. package/dist/components/chat-components/ui/switch.mjs +27 -0
  137. package/dist/components/chat-components/ui/switch.mjs.map +1 -0
  138. package/dist/components/chat-components/ui/textarea.d.ts +7 -0
  139. package/dist/components/chat-components/ui/textarea.mjs +22 -0
  140. package/dist/components/chat-components/ui/textarea.mjs.map +1 -0
  141. package/dist/components/chat-components/ui/tooltip.d.ts +9 -0
  142. package/dist/components/chat-components/ui/tooltip.mjs +5 -0
  143. package/dist/components/chat-components/ui/tooltip.mjs.map +1 -0
  144. package/dist/components/index.d.ts +9 -0
  145. package/dist/components/index.mjs +26 -0
  146. package/dist/components/index.mjs.map +1 -0
  147. package/dist/components/sidebar/copilot-sidebar-ui-provider.d.ts +8 -0
  148. package/dist/components/sidebar/copilot-sidebar-ui-provider.mjs +25 -0
  149. package/dist/components/sidebar/copilot-sidebar-ui-provider.mjs.map +1 -0
  150. package/dist/components/sidebar/copilot-sidebar.d.ts +6 -0
  151. package/dist/components/sidebar/copilot-sidebar.mjs +23 -0
  152. package/dist/components/sidebar/copilot-sidebar.mjs.map +1 -0
  153. package/dist/components/sidebar/sidebar-context.d.ts +9 -0
  154. package/dist/components/sidebar/sidebar-context.mjs +4 -0
  155. package/dist/components/sidebar/sidebar-context.mjs.map +1 -0
  156. package/dist/context/index.d.ts +1 -0
  157. package/dist/context/index.mjs +3 -0
  158. package/dist/context/index.mjs.map +1 -0
  159. package/dist/hooks/index.d.ts +1 -0
  160. package/dist/hooks/index.mjs +3 -0
  161. package/dist/hooks/index.mjs.map +1 -0
  162. package/dist/hooks/use-at-bottom.d.ts +3 -0
  163. package/dist/hooks/use-at-bottom.mjs +4 -0
  164. package/dist/hooks/use-at-bottom.mjs.map +1 -0
  165. package/dist/hooks/use-copy-to-clipboard.d.ts +9 -0
  166. package/dist/hooks/use-copy-to-clipboard.mjs +4 -0
  167. package/dist/hooks/use-copy-to-clipboard.mjs.map +1 -0
  168. package/dist/hooks/use-enter-submit.d.ts +8 -0
  169. package/dist/hooks/use-enter-submit.mjs +4 -0
  170. package/dist/hooks/use-enter-submit.mjs.map +1 -0
  171. package/dist/index.css +1249 -1
  172. package/dist/index.css.map +1 -0
  173. package/dist/index.d.ts +9 -2
  174. package/dist/index.mjs +29 -0
  175. package/dist/index.mjs.map +1 -0
  176. package/dist/lib/utils.d.ts +8 -0
  177. package/dist/lib/utils.mjs +4 -0
  178. package/dist/lib/utils.mjs.map +1 -0
  179. package/dist/types/index.d.ts +1 -0
  180. package/dist/types/index.mjs +3 -0
  181. package/dist/types/index.mjs.map +1 -0
  182. package/dist/types/types.d.ts +16 -0
  183. package/dist/types/types.mjs +3 -0
  184. package/dist/types/types.mjs.map +1 -0
  185. package/package.json +39 -8
  186. package/src/components/chat-components/chat-list.tsx +32 -0
  187. package/src/components/chat-components/chat-message-actions.tsx +40 -0
  188. package/src/components/chat-components/chat-message.tsx +74 -0
  189. package/src/components/chat-components/chat-panel.tsx +77 -0
  190. package/src/components/chat-components/chat-scroll-anchor.tsx +29 -0
  191. package/src/components/chat-components/clear-history.tsx +73 -0
  192. package/src/components/chat-components/copilot-chat.tsx +56 -0
  193. package/src/components/chat-components/default-empty-screen.tsx +64 -0
  194. package/src/components/chat-components/external-link.tsx +29 -0
  195. package/src/components/chat-components/markdown.tsx +9 -0
  196. package/src/components/chat-components/prompt-form.tsx +91 -0
  197. package/src/components/chat-components/theme-toggle.tsx +31 -0
  198. package/src/components/chat-components/toaster.tsx +3 -0
  199. package/src/components/chat-components/ui/alert-dialog.tsx +150 -0
  200. package/src/components/chat-components/ui/badge.tsx +36 -0
  201. package/src/components/chat-components/ui/button.tsx +57 -0
  202. package/src/components/chat-components/ui/codeblock.tsx +142 -0
  203. package/src/components/chat-components/ui/dialog.tsx +128 -0
  204. package/src/components/chat-components/ui/dropdown-menu.tsx +128 -0
  205. package/src/components/chat-components/ui/icons.tsx +507 -0
  206. package/src/components/chat-components/ui/input.tsx +25 -0
  207. package/src/components/chat-components/ui/label.tsx +26 -0
  208. package/src/components/chat-components/ui/select.tsx +119 -0
  209. package/src/components/chat-components/ui/separator.tsx +31 -0
  210. package/src/components/chat-components/ui/sheet.tsx +122 -0
  211. package/src/components/chat-components/ui/switch.tsx +29 -0
  212. package/src/components/chat-components/ui/textarea.tsx +24 -0
  213. package/src/components/chat-components/ui/tooltip.tsx +30 -0
  214. package/src/components/index.ts +7 -0
  215. package/src/components/sidebar/copilot-sidebar-ui-provider.tsx +77 -0
  216. package/src/components/sidebar/copilot-sidebar.tsx +40 -0
  217. package/src/components/sidebar/sidebar-context.tsx +11 -0
  218. package/src/context/index.ts +1 -0
  219. package/src/hooks/index.ts +1 -0
  220. package/src/hooks/use-at-bottom.tsx +23 -0
  221. package/src/hooks/use-copy-to-clipboard.tsx +33 -0
  222. package/src/hooks/use-enter-submit.tsx +23 -0
  223. package/src/index.tsx +4 -3
  224. package/src/lib/utils.ts +43 -0
  225. package/src/types/index.ts +1 -0
  226. package/src/types/types.ts +18 -0
  227. package/tailwind.config.js +1 -1
  228. package/tsconfig.json +1 -1
  229. package/tsup.config.ts +3 -4
  230. package/dist/Button.d.ts +0 -3
  231. package/dist/Button.js +0 -10
  232. package/dist/Card.d.ts +0 -7
  233. package/dist/Card.js +0 -10
  234. package/dist/chunk-6OZR7L23.js +0 -7
  235. package/dist/chunk-FGO3LSHH.js +0 -7
  236. package/dist/index.js +0 -15
  237. package/src/Button.tsx +0 -16
  238. package/src/Card.tsx +0 -27
@@ -0,0 +1,128 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import * as DialogPrimitive from "@radix-ui/react-dialog";
5
+
6
+ import { cn } from "../../../lib/utils";
7
+ import { IconClose } from "./icons";
8
+
9
+ const Dialog = DialogPrimitive.Root;
10
+
11
+ const DialogTrigger = DialogPrimitive.Trigger;
12
+
13
+ const DialogPortal = ({
14
+ className,
15
+ children,
16
+ ...props
17
+ }: DialogPrimitive.DialogPortalProps) => (
18
+ <DialogPrimitive.Portal className={cn(className)} {...props}>
19
+ <div className="fixed inset-0 z-50 flex items-start justify-center sm:items-center">
20
+ {children}
21
+ </div>
22
+ </DialogPrimitive.Portal>
23
+ );
24
+ DialogPortal.displayName = DialogPrimitive.Portal.displayName;
25
+
26
+ const DialogOverlay = React.forwardRef<
27
+ React.ElementRef<typeof DialogPrimitive.Overlay>,
28
+ React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>
29
+ >(({ className, ...props }, ref) => (
30
+ <DialogPrimitive.Overlay
31
+ ref={ref}
32
+ className={cn(
33
+ "fixed inset-0 z-50 bg-background/80 backdrop-blur-sm transition-all duration-100 data-[state=closed]:animate-out data-[state=closed]:fade-out data-[state=open]:fade-in",
34
+ className
35
+ )}
36
+ {...props}
37
+ />
38
+ ));
39
+ DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
40
+
41
+ const DialogContent = React.forwardRef<
42
+ React.ElementRef<typeof DialogPrimitive.Content>,
43
+ React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>
44
+ >(({ className, children, ...props }, ref) => (
45
+ <DialogPortal>
46
+ <DialogOverlay />
47
+ <DialogPrimitive.Content
48
+ ref={ref}
49
+ className={cn(
50
+ "fixed z-50 grid w-full gap-4 rounded-b-lg border bg-background p-6 shadow-sm animate-in data-[state=open]:fade-in-90 data-[state=open]:slide-in-from-bottom-10 sm:max-w-lg sm:rounded-lg sm:zoom-in-90 data-[state=open]:sm:slide-in-from-bottom-0",
51
+ className
52
+ )}
53
+ {...props}
54
+ >
55
+ {children}
56
+ <DialogPrimitive.Close className="absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground">
57
+ <IconClose />
58
+ <span className="sr-only">Close</span>
59
+ </DialogPrimitive.Close>
60
+ </DialogPrimitive.Content>
61
+ </DialogPortal>
62
+ ));
63
+ DialogContent.displayName = DialogPrimitive.Content.displayName;
64
+
65
+ const DialogHeader = ({
66
+ className,
67
+ ...props
68
+ }: React.HTMLAttributes<HTMLDivElement>) => (
69
+ <div
70
+ className={cn(
71
+ "flex flex-col space-y-1.5 text-center sm:text-left",
72
+ className
73
+ )}
74
+ {...props}
75
+ />
76
+ );
77
+ DialogHeader.displayName = "DialogHeader";
78
+
79
+ const DialogFooter = ({
80
+ className,
81
+ ...props
82
+ }: React.HTMLAttributes<HTMLDivElement>) => (
83
+ <div
84
+ className={cn(
85
+ "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
86
+ className
87
+ )}
88
+ {...props}
89
+ />
90
+ );
91
+ DialogFooter.displayName = "DialogFooter";
92
+
93
+ const DialogTitle = React.forwardRef<
94
+ React.ElementRef<typeof DialogPrimitive.Title>,
95
+ React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>
96
+ >(({ className, ...props }, ref) => (
97
+ <DialogPrimitive.Title
98
+ ref={ref}
99
+ className={cn(
100
+ "text-lg font-semibold leading-none tracking-tight",
101
+ className
102
+ )}
103
+ {...props}
104
+ />
105
+ ));
106
+ DialogTitle.displayName = DialogPrimitive.Title.displayName;
107
+
108
+ const DialogDescription = React.forwardRef<
109
+ React.ElementRef<typeof DialogPrimitive.Description>,
110
+ React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>
111
+ >(({ className, ...props }, ref) => (
112
+ <DialogPrimitive.Description
113
+ ref={ref}
114
+ className={cn("text-sm text-muted-foreground", className)}
115
+ {...props}
116
+ />
117
+ ));
118
+ DialogDescription.displayName = DialogPrimitive.Description.displayName;
119
+
120
+ export {
121
+ Dialog,
122
+ DialogTrigger,
123
+ DialogContent,
124
+ DialogHeader,
125
+ DialogFooter,
126
+ DialogTitle,
127
+ DialogDescription,
128
+ };
@@ -0,0 +1,128 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
5
+
6
+ import { cn } from "../../../lib/utils";
7
+
8
+ const DropdownMenu = DropdownMenuPrimitive.Root;
9
+
10
+ const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
11
+
12
+ const DropdownMenuGroup = DropdownMenuPrimitive.Group;
13
+
14
+ const DropdownMenuPortal = DropdownMenuPrimitive.Portal;
15
+
16
+ const DropdownMenuSub = DropdownMenuPrimitive.Sub;
17
+
18
+ const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
19
+
20
+ const DropdownMenuSubContent = React.forwardRef<
21
+ React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,
22
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>
23
+ >(({ className, ...props }, ref) => (
24
+ <DropdownMenuPrimitive.SubContent
25
+ ref={ref}
26
+ className={cn(
27
+ "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md animate-in data-[side=bottom]:slide-in-from-top-1 data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1 data-[side=top]:slide-in-from-bottom-1",
28
+ className
29
+ )}
30
+ {...props}
31
+ />
32
+ ));
33
+ DropdownMenuSubContent.displayName =
34
+ DropdownMenuPrimitive.SubContent.displayName;
35
+
36
+ const DropdownMenuContent = React.forwardRef<
37
+ React.ElementRef<typeof DropdownMenuPrimitive.Content>,
38
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>
39
+ >(({ className, sideOffset = 4, ...props }, ref) => (
40
+ <DropdownMenuPrimitive.Portal>
41
+ <DropdownMenuPrimitive.Content
42
+ ref={ref}
43
+ sideOffset={sideOffset}
44
+ className={cn(
45
+ "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow animate-in 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",
46
+ className
47
+ )}
48
+ {...props}
49
+ />
50
+ </DropdownMenuPrimitive.Portal>
51
+ ));
52
+ DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
53
+
54
+ const DropdownMenuItem = React.forwardRef<
55
+ React.ElementRef<typeof DropdownMenuPrimitive.Item>,
56
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {
57
+ inset?: boolean;
58
+ }
59
+ >(({ className, inset, ...props }, ref) => (
60
+ <DropdownMenuPrimitive.Item
61
+ ref={ref}
62
+ className={cn(
63
+ "relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
64
+ inset && "pl-8",
65
+ className
66
+ )}
67
+ {...props}
68
+ />
69
+ ));
70
+ DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
71
+
72
+ const DropdownMenuLabel = React.forwardRef<
73
+ React.ElementRef<typeof DropdownMenuPrimitive.Label>,
74
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {
75
+ inset?: boolean;
76
+ }
77
+ >(({ className, inset, ...props }, ref) => (
78
+ <DropdownMenuPrimitive.Label
79
+ ref={ref}
80
+ className={cn(
81
+ "px-2 py-1.5 text-sm font-semibold",
82
+ inset && "pl-8",
83
+ className
84
+ )}
85
+ {...props}
86
+ />
87
+ ));
88
+ DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
89
+
90
+ const DropdownMenuSeparator = React.forwardRef<
91
+ React.ElementRef<typeof DropdownMenuPrimitive.Separator>,
92
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>
93
+ >(({ className, ...props }, ref) => (
94
+ <DropdownMenuPrimitive.Separator
95
+ ref={ref}
96
+ className={cn("-mx-1 my-1 h-px bg-muted", className)}
97
+ {...props}
98
+ />
99
+ ));
100
+ DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
101
+
102
+ const DropdownMenuShortcut = ({
103
+ className,
104
+ ...props
105
+ }: React.HTMLAttributes<HTMLSpanElement>) => {
106
+ return (
107
+ <span
108
+ className={cn("ml-auto text-xs tracking-widest opacity-60", className)}
109
+ {...props}
110
+ />
111
+ );
112
+ };
113
+ DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
114
+
115
+ export {
116
+ DropdownMenu,
117
+ DropdownMenuTrigger,
118
+ DropdownMenuContent,
119
+ DropdownMenuItem,
120
+ DropdownMenuLabel,
121
+ DropdownMenuSeparator,
122
+ DropdownMenuShortcut,
123
+ DropdownMenuGroup,
124
+ DropdownMenuPortal,
125
+ DropdownMenuSub,
126
+ DropdownMenuSubContent,
127
+ DropdownMenuRadioGroup,
128
+ };