@vvedantb/ui 0.1.1 → 0.1.3
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.
- package/LICENSE +21 -21
- package/package.json +3 -2
- package/src/ai-elements/artifact.tsx +99 -99
- package/src/ai-elements/attachments.tsx +366 -366
- package/src/ai-elements/chain-of-thought.tsx +212 -212
- package/src/ai-elements/code-block.tsx +478 -478
- package/src/ai-elements/conversation.tsx +157 -157
- package/src/ai-elements/image.tsx +25 -25
- package/src/ai-elements/inline-citation.tsx +252 -252
- package/src/ai-elements/message.tsx +269 -269
- package/src/ai-elements/model-selector.tsx +211 -211
- package/src/ai-elements/prompt-input.tsx +1018 -1018
- package/src/ai-elements/queue.tsx +251 -251
- package/src/ai-elements/reasoning.tsx +178 -178
- package/src/ai-elements/shimmer.tsx +56 -56
- package/src/ai-elements/sources.tsx +77 -77
- package/src/ai-elements/speech-input.tsx +290 -290
- package/src/ai-elements/suggestion.tsx +191 -191
- package/src/css.d.ts +2 -2
- package/src/index.ts +96 -96
- package/src/motion/presets.ts +35 -35
- package/src/motion/presets.vibot.ts +105 -105
- package/src/ui/_menu-classes.ts +30 -30
- package/src/ui/_menu-classes.vibot.ts +33 -33
- package/src/ui/accordion.tsx +81 -81
- package/src/ui/accordion.verve.tsx +56 -56
- package/src/ui/badge.tsx +34 -34
- package/src/ui/breadcrumb.tsx +83 -83
- package/src/ui/button-group.tsx +84 -84
- package/src/ui/button.tsx +57 -57
- package/src/ui/card.tsx +27 -27
- package/src/ui/carousel.tsx +211 -211
- package/src/ui/checkbox.tsx +27 -27
- package/src/ui/clear-input.tsx +170 -170
- package/src/ui/clear-input.vibot.tsx +76 -76
- package/src/ui/clearInputDissolve.ts +214 -214
- package/src/ui/collapsible.tsx +7 -7
- package/src/ui/command.tsx +148 -148
- package/src/ui/context-menu.tsx +173 -173
- package/src/ui/dialog.tsx +149 -149
- package/src/ui/dropdown-menu.tsx +178 -178
- package/src/ui/hover-card.tsx +31 -31
- package/src/ui/input-group.tsx +162 -162
- package/src/ui/input-group.verve.tsx +150 -150
- package/src/ui/input.tsx +21 -21
- package/src/ui/kbd.tsx +18 -18
- package/src/ui/label.tsx +20 -20
- package/src/ui/labeled-switch-row.tsx +53 -53
- package/src/ui/modalTransition.ts +85 -85
- package/src/ui/pagination.tsx +47 -47
- package/src/ui/popover.tsx +33 -33
- package/src/ui/progress.tsx +25 -25
- package/src/ui/radix-select.tsx +202 -202
- package/src/ui/scroll-area.tsx +55 -55
- package/src/ui/scroll-area.verve.tsx +43 -43
- package/src/ui/search-input.tsx +29 -29
- package/src/ui/select.tsx +163 -163
- package/src/ui/separator.tsx +28 -28
- package/src/ui/sheet.tsx +100 -87
- package/src/ui/skeleton.tsx +18 -18
- package/src/ui/sonner.css +16 -16
- package/src/ui/sonner.tsx +47 -47
- package/src/ui/spinner.tsx +27 -27
- package/src/ui/surface-classes.ts +55 -55
- package/src/ui/switch.tsx +26 -26
- package/src/ui/table.tsx +123 -123
- package/src/ui/tabs.tsx +140 -140
- package/src/ui/tabsSliding.ts +56 -56
- package/src/ui/textarea.tsx +21 -21
- package/src/ui/time-picker.tsx +170 -170
- package/src/ui/tooltip.tsx +25 -25
- package/src/ui/visually-hidden.tsx +3 -3
- package/src/utils/cn.ts +16 -16
- package/src/utils/ref.ts +10 -10
package/src/ui/hover-card.tsx
CHANGED
|
@@ -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 };
|
package/src/ui/input-group.tsx
CHANGED
|
@@ -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
|
+
};
|