@vvedantb/ui 0.1.0 → 0.1.2

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 (74) hide show
  1. package/LICENSE +21 -21
  2. package/package.json +3 -2
  3. package/src/ai-elements/artifact.tsx +99 -99
  4. package/src/ai-elements/attachments.tsx +366 -366
  5. package/src/ai-elements/chain-of-thought.tsx +212 -212
  6. package/src/ai-elements/code-block.tsx +478 -478
  7. package/src/ai-elements/conversation.tsx +157 -157
  8. package/src/ai-elements/image.tsx +25 -25
  9. package/src/ai-elements/inline-citation.tsx +252 -252
  10. package/src/ai-elements/message.tsx +269 -269
  11. package/src/ai-elements/model-selector.tsx +211 -211
  12. package/src/ai-elements/prompt-input.tsx +1018 -1018
  13. package/src/ai-elements/queue.tsx +251 -251
  14. package/src/ai-elements/reasoning.tsx +178 -178
  15. package/src/ai-elements/shimmer.tsx +56 -56
  16. package/src/ai-elements/sources.tsx +77 -77
  17. package/src/ai-elements/speech-input.tsx +290 -290
  18. package/src/ai-elements/suggestion.tsx +191 -191
  19. package/src/css.d.ts +2 -2
  20. package/src/index.ts +96 -96
  21. package/src/motion/presets.ts +35 -35
  22. package/src/motion/presets.vibot.ts +105 -105
  23. package/src/ui/_menu-classes.ts +30 -30
  24. package/src/ui/_menu-classes.vibot.ts +33 -33
  25. package/src/ui/accordion.tsx +81 -81
  26. package/src/ui/accordion.verve.tsx +56 -56
  27. package/src/ui/badge.tsx +34 -34
  28. package/src/ui/breadcrumb.tsx +83 -83
  29. package/src/ui/button-group.tsx +84 -84
  30. package/src/ui/button.tsx +57 -57
  31. package/src/ui/card.tsx +27 -27
  32. package/src/ui/carousel.tsx +211 -211
  33. package/src/ui/checkbox.tsx +27 -27
  34. package/src/ui/clear-input.tsx +170 -170
  35. package/src/ui/clear-input.vibot.tsx +76 -76
  36. package/src/ui/clearInputDissolve.ts +214 -214
  37. package/src/ui/collapsible.tsx +7 -7
  38. package/src/ui/command.tsx +148 -148
  39. package/src/ui/context-menu.tsx +173 -173
  40. package/src/ui/dialog.tsx +149 -149
  41. package/src/ui/dropdown-menu.tsx +178 -178
  42. package/src/ui/hover-card.tsx +31 -31
  43. package/src/ui/input-group.tsx +162 -162
  44. package/src/ui/input-group.verve.tsx +150 -150
  45. package/src/ui/input.tsx +21 -21
  46. package/src/ui/kbd.tsx +18 -18
  47. package/src/ui/label.tsx +20 -20
  48. package/src/ui/labeled-switch-row.tsx +53 -53
  49. package/src/ui/modalTransition.ts +85 -85
  50. package/src/ui/pagination.tsx +47 -47
  51. package/src/ui/popover.tsx +33 -33
  52. package/src/ui/progress.tsx +25 -25
  53. package/src/ui/radix-select.tsx +202 -202
  54. package/src/ui/scroll-area.tsx +55 -55
  55. package/src/ui/scroll-area.verve.tsx +43 -43
  56. package/src/ui/search-input.tsx +29 -29
  57. package/src/ui/select.tsx +163 -163
  58. package/src/ui/separator.tsx +28 -28
  59. package/src/ui/sheet.tsx +87 -87
  60. package/src/ui/skeleton.tsx +18 -18
  61. package/src/ui/sonner.css +16 -16
  62. package/src/ui/sonner.tsx +47 -47
  63. package/src/ui/spinner.tsx +27 -27
  64. package/src/ui/surface-classes.ts +55 -55
  65. package/src/ui/switch.tsx +26 -26
  66. package/src/ui/table.tsx +123 -123
  67. package/src/ui/tabs.tsx +140 -140
  68. package/src/ui/tabsSliding.ts +56 -56
  69. package/src/ui/textarea.tsx +21 -21
  70. package/src/ui/time-picker.tsx +170 -170
  71. package/src/ui/tooltip.tsx +25 -25
  72. package/src/ui/visually-hidden.tsx +3 -3
  73. package/src/utils/cn.ts +16 -16
  74. package/src/utils/ref.ts +10 -10
@@ -1,31 +1,31 @@
1
- import * as React from "react";
2
- import * as HoverCardPrimitive from "@radix-ui/react-hover-card";
3
- import { cn } from "../utils/cn";
4
- import {
5
- floatingSurfaceAnimateClass,
6
- floatingSurfaceClass,
7
- } from "./_menu-classes";
8
-
9
- const HoverCard = HoverCardPrimitive.Root;
10
- const HoverCardTrigger = HoverCardPrimitive.Trigger;
11
-
12
- const HoverCardContent = React.forwardRef<
13
- React.ComponentRef<typeof HoverCardPrimitive.Content>,
14
- React.ComponentPropsWithoutRef<typeof HoverCardPrimitive.Content>
15
- >(({ className, align = "center", sideOffset = 4, ...props }, ref) => (
16
- <HoverCardPrimitive.Content
17
- ref={ref}
18
- align={align}
19
- sideOffset={sideOffset}
20
- className={cn(
21
- "z-50 w-72 max-sm:max-w-[calc(100vw-2rem)] max-sm:max-h-[85dvh] max-sm:overflow-y-auto p-4 outline-none",
22
- floatingSurfaceClass,
23
- floatingSurfaceAnimateClass,
24
- className,
25
- )}
26
- {...props}
27
- />
28
- ));
29
- HoverCardContent.displayName = HoverCardPrimitive.Content.displayName;
30
-
31
- export { HoverCard, HoverCardTrigger, HoverCardContent };
1
+ import * as React from "react";
2
+ import * as HoverCardPrimitive from "@radix-ui/react-hover-card";
3
+ import { cn } from "../utils/cn";
4
+ import {
5
+ floatingSurfaceAnimateClass,
6
+ floatingSurfaceClass,
7
+ } from "./_menu-classes";
8
+
9
+ const HoverCard = HoverCardPrimitive.Root;
10
+ const HoverCardTrigger = HoverCardPrimitive.Trigger;
11
+
12
+ const HoverCardContent = React.forwardRef<
13
+ React.ComponentRef<typeof HoverCardPrimitive.Content>,
14
+ React.ComponentPropsWithoutRef<typeof HoverCardPrimitive.Content>
15
+ >(({ className, align = "center", sideOffset = 4, ...props }, ref) => (
16
+ <HoverCardPrimitive.Content
17
+ ref={ref}
18
+ align={align}
19
+ sideOffset={sideOffset}
20
+ className={cn(
21
+ "z-50 w-72 max-sm:max-w-[calc(100vw-2rem)] max-sm:max-h-[85dvh] max-sm:overflow-y-auto p-4 outline-none",
22
+ floatingSurfaceClass,
23
+ floatingSurfaceAnimateClass,
24
+ className,
25
+ )}
26
+ {...props}
27
+ />
28
+ ));
29
+ HoverCardContent.displayName = HoverCardPrimitive.Content.displayName;
30
+
31
+ export { HoverCard, HoverCardTrigger, HoverCardContent };
@@ -1,162 +1,162 @@
1
- "use client";
2
-
3
- import * as React from "react";
4
- import { cva, type VariantProps } from "class-variance-authority";
5
-
6
- import { cn } from "../utils/cn";
7
- import { Button } from "./button";
8
- import { Input } from "./input";
9
- import { Textarea } from "./textarea";
10
-
11
- function InputGroup({ className, ...props }: React.ComponentProps<"div">) {
12
- return (
13
- <div
14
- data-slot="input-group"
15
- role="group"
16
- className={cn(
17
- "group/input-group relative flex w-full flex-wrap items-center rounded-field border border-border bg-field-background text-sm transition-[border-color,box-shadow] duration-200 ease-smooth outline-hidden",
18
- "h-10 min-w-0 has-[>textarea]:h-auto",
19
- "[&>input]:has-[>[data-align=inline-start]]:pl-2",
20
- "[&>input]:has-[>[data-align=inline-end]]:pr-2",
21
- "has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col [&>input]:has-[>[data-align=block-start]]:pb-3",
22
- "has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col [&>input]:has-[>[data-align=block-end]]:pt-3",
23
- "has-[[data-slot=input-group-control]:focus-visible]:border-focus-border has-[[data-slot=input-group-control]:focus-visible]:ring-2 has-[[data-slot=input-group-control]:focus-visible]:ring-focus-ring",
24
- "has-[[data-slot][aria-invalid=true]]:border-danger-border has-[[data-slot][aria-invalid=true]]:ring-danger-ring",
25
- className,
26
- )}
27
- {...props}
28
- />
29
- );
30
- }
31
-
32
- const inputGroupAddonVariants = cva(
33
- "text-muted flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium select-none [&>svg:not([class*='size-'])]:size-4 [&>kbd]:rounded-md group-data-[disabled=true]/input-group:opacity-50",
34
- {
35
- variants: {
36
- align: {
37
- "inline-start":
38
- "order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]",
39
- "inline-end":
40
- "order-last pr-3 has-[>button]:mr-[-0.45rem] has-[>kbd]:mr-[-0.35rem]",
41
- "block-start":
42
- "order-first w-full justify-start px-3 pt-3 [.border-b]:pb-3 group-has-[>input]/input-group:pt-2.5",
43
- "block-end":
44
- "order-last w-full justify-start px-3 pb-3 [.border-t]:pt-3 group-has-[>input]/input-group:pb-2.5",
45
- },
46
- },
47
- defaultVariants: {
48
- align: "inline-start",
49
- },
50
- },
51
- );
52
-
53
- function InputGroupAddon({
54
- className,
55
- align = "inline-start",
56
- ...props
57
- }: React.ComponentProps<"div"> & VariantProps<typeof inputGroupAddonVariants>) {
58
- return (
59
- <div
60
- role="group"
61
- data-slot="input-group-addon"
62
- data-align={align}
63
- className={cn(inputGroupAddonVariants({ align }), className)}
64
- onClick={(e) => {
65
- if ((e.target as HTMLElement).closest("button")) {
66
- return;
67
- }
68
- e.currentTarget.parentElement?.querySelector("input")?.focus();
69
- }}
70
- {...props}
71
- />
72
- );
73
- }
74
-
75
- const inputGroupButtonVariants = cva(
76
- "text-sm shadow-none flex gap-2 items-center",
77
- {
78
- variants: {
79
- size: {
80
- xs: "h-7 gap-1 rounded-lg px-2 text-xs [&>svg:not([class*='size-'])]:size-3.5 has-[>svg]:px-2",
81
- sm: "h-8 rounded-lg px-2.5 gap-1.5 text-xs has-[>svg]:px-2.5",
82
- "icon-xs": "size-7 rounded-lg p-0 has-[>svg]:p-0",
83
- "icon-sm": "size-8 rounded-lg p-0 has-[>svg]:p-0",
84
- },
85
- },
86
- defaultVariants: {
87
- size: "xs",
88
- },
89
- },
90
- );
91
-
92
- function InputGroupButton({
93
- className,
94
- type = "button",
95
- variant = "ghost",
96
- size = "xs",
97
- ...props
98
- }: Omit<React.ComponentProps<typeof Button>, "size"> &
99
- VariantProps<typeof inputGroupButtonVariants>) {
100
- return (
101
- <Button
102
- type={type}
103
- data-size={size}
104
- variant={variant}
105
- className={cn(inputGroupButtonVariants({ size }), className)}
106
- {...props}
107
- />
108
- );
109
- }
110
-
111
- function InputGroupText({ className, ...props }: React.ComponentProps<"span">) {
112
- return (
113
- <span
114
- className={cn(
115
- "text-muted flex items-center gap-2 text-sm [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",
116
- className,
117
- )}
118
- {...props}
119
- />
120
- );
121
- }
122
-
123
- function InputGroupInput({
124
- className,
125
- ...props
126
- }: React.ComponentProps<"input">) {
127
- return (
128
- <Input
129
- data-slot="input-group-control"
130
- className={cn(
131
- "flex-1 rounded-none border-0 bg-transparent shadow-none focus:outline-hidden focus-visible:ring-0",
132
- className,
133
- )}
134
- {...props}
135
- />
136
- );
137
- }
138
-
139
- function InputGroupTextarea({
140
- className,
141
- ...props
142
- }: React.ComponentProps<"textarea">) {
143
- return (
144
- <Textarea
145
- data-slot="input-group-control"
146
- className={cn(
147
- "flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus:outline-hidden focus-visible:ring-0",
148
- className,
149
- )}
150
- {...props}
151
- />
152
- );
153
- }
154
-
155
- export {
156
- InputGroup,
157
- InputGroupAddon,
158
- InputGroupButton,
159
- InputGroupText,
160
- InputGroupInput,
161
- InputGroupTextarea,
162
- };
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import { cva, type VariantProps } from "class-variance-authority";
5
+
6
+ import { cn } from "../utils/cn";
7
+ import { Button } from "./button";
8
+ import { Input } from "./input";
9
+ import { Textarea } from "./textarea";
10
+
11
+ function InputGroup({ className, ...props }: React.ComponentProps<"div">) {
12
+ return (
13
+ <div
14
+ data-slot="input-group"
15
+ role="group"
16
+ className={cn(
17
+ "group/input-group relative flex w-full flex-wrap items-center rounded-field border border-border bg-field-background text-sm transition-[border-color,box-shadow] duration-200 ease-smooth outline-hidden",
18
+ "h-10 min-w-0 has-[>textarea]:h-auto",
19
+ "[&>input]:has-[>[data-align=inline-start]]:pl-2",
20
+ "[&>input]:has-[>[data-align=inline-end]]:pr-2",
21
+ "has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col [&>input]:has-[>[data-align=block-start]]:pb-3",
22
+ "has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col [&>input]:has-[>[data-align=block-end]]:pt-3",
23
+ "has-[[data-slot=input-group-control]:focus-visible]:border-focus-border has-[[data-slot=input-group-control]:focus-visible]:ring-2 has-[[data-slot=input-group-control]:focus-visible]:ring-focus-ring",
24
+ "has-[[data-slot][aria-invalid=true]]:border-danger-border has-[[data-slot][aria-invalid=true]]:ring-danger-ring",
25
+ className,
26
+ )}
27
+ {...props}
28
+ />
29
+ );
30
+ }
31
+
32
+ const inputGroupAddonVariants = cva(
33
+ "text-muted flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium select-none [&>svg:not([class*='size-'])]:size-4 [&>kbd]:rounded-md group-data-[disabled=true]/input-group:opacity-50",
34
+ {
35
+ variants: {
36
+ align: {
37
+ "inline-start":
38
+ "order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]",
39
+ "inline-end":
40
+ "order-last pr-3 has-[>button]:mr-[-0.45rem] has-[>kbd]:mr-[-0.35rem]",
41
+ "block-start":
42
+ "order-first w-full justify-start px-3 pt-3 [.border-b]:pb-3 group-has-[>input]/input-group:pt-2.5",
43
+ "block-end":
44
+ "order-last w-full justify-start px-3 pb-3 [.border-t]:pt-3 group-has-[>input]/input-group:pb-2.5",
45
+ },
46
+ },
47
+ defaultVariants: {
48
+ align: "inline-start",
49
+ },
50
+ },
51
+ );
52
+
53
+ function InputGroupAddon({
54
+ className,
55
+ align = "inline-start",
56
+ ...props
57
+ }: React.ComponentProps<"div"> & VariantProps<typeof inputGroupAddonVariants>) {
58
+ return (
59
+ <div
60
+ role="group"
61
+ data-slot="input-group-addon"
62
+ data-align={align}
63
+ className={cn(inputGroupAddonVariants({ align }), className)}
64
+ onClick={(e) => {
65
+ if ((e.target as HTMLElement).closest("button")) {
66
+ return;
67
+ }
68
+ e.currentTarget.parentElement?.querySelector("input")?.focus();
69
+ }}
70
+ {...props}
71
+ />
72
+ );
73
+ }
74
+
75
+ const inputGroupButtonVariants = cva(
76
+ "text-sm shadow-none flex gap-2 items-center",
77
+ {
78
+ variants: {
79
+ size: {
80
+ xs: "h-7 gap-1 rounded-lg px-2 text-xs [&>svg:not([class*='size-'])]:size-3.5 has-[>svg]:px-2",
81
+ sm: "h-8 rounded-lg px-2.5 gap-1.5 text-xs has-[>svg]:px-2.5",
82
+ "icon-xs": "size-7 rounded-lg p-0 has-[>svg]:p-0",
83
+ "icon-sm": "size-8 rounded-lg p-0 has-[>svg]:p-0",
84
+ },
85
+ },
86
+ defaultVariants: {
87
+ size: "xs",
88
+ },
89
+ },
90
+ );
91
+
92
+ function InputGroupButton({
93
+ className,
94
+ type = "button",
95
+ variant = "ghost",
96
+ size = "xs",
97
+ ...props
98
+ }: Omit<React.ComponentProps<typeof Button>, "size"> &
99
+ VariantProps<typeof inputGroupButtonVariants>) {
100
+ return (
101
+ <Button
102
+ type={type}
103
+ data-size={size}
104
+ variant={variant}
105
+ className={cn(inputGroupButtonVariants({ size }), className)}
106
+ {...props}
107
+ />
108
+ );
109
+ }
110
+
111
+ function InputGroupText({ className, ...props }: React.ComponentProps<"span">) {
112
+ return (
113
+ <span
114
+ className={cn(
115
+ "text-muted flex items-center gap-2 text-sm [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",
116
+ className,
117
+ )}
118
+ {...props}
119
+ />
120
+ );
121
+ }
122
+
123
+ function InputGroupInput({
124
+ className,
125
+ ...props
126
+ }: React.ComponentProps<"input">) {
127
+ return (
128
+ <Input
129
+ data-slot="input-group-control"
130
+ className={cn(
131
+ "flex-1 rounded-none border-0 bg-transparent shadow-none focus:outline-hidden focus-visible:ring-0",
132
+ className,
133
+ )}
134
+ {...props}
135
+ />
136
+ );
137
+ }
138
+
139
+ function InputGroupTextarea({
140
+ className,
141
+ ...props
142
+ }: React.ComponentProps<"textarea">) {
143
+ return (
144
+ <Textarea
145
+ data-slot="input-group-control"
146
+ className={cn(
147
+ "flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus:outline-hidden focus-visible:ring-0",
148
+ className,
149
+ )}
150
+ {...props}
151
+ />
152
+ );
153
+ }
154
+
155
+ export {
156
+ InputGroup,
157
+ InputGroupAddon,
158
+ InputGroupButton,
159
+ InputGroupText,
160
+ InputGroupInput,
161
+ InputGroupTextarea,
162
+ };