refactor: replace html textarea with shadcn Textarea component
This commit is contained in:
@@ -10,6 +10,7 @@ import {
|
|||||||
SelectValue,
|
SelectValue,
|
||||||
} from '@/components/ui/select';
|
} from '@/components/ui/select';
|
||||||
import { Input } from '@/components/ui/input';
|
import { Input } from '@/components/ui/input';
|
||||||
|
import { Textarea } from '@/components/ui/textarea';
|
||||||
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
|
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
|
||||||
import { PaletteGrid } from '@/components/pastel/PaletteGrid';
|
import { PaletteGrid } from '@/components/pastel/PaletteGrid';
|
||||||
import { ExportMenu } from '@/components/pastel/ExportMenu';
|
import { ExportMenu } from '@/components/pastel/ExportMenu';
|
||||||
@@ -112,11 +113,11 @@ export default function BatchPage() {
|
|||||||
Enter colors (one per line or comma-separated). Supports hex format
|
Enter colors (one per line or comma-separated). Supports hex format
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<textarea
|
<Textarea
|
||||||
value={inputColors}
|
value={inputColors}
|
||||||
onChange={(e) => setInputColors(e.target.value)}
|
onChange={(e) => setInputColors(e.target.value)}
|
||||||
placeholder="#ff0099, #00ff99, #9900ff #ff5533 #3355ff"
|
placeholder="#ff0099, #00ff99, #9900ff #ff5533 #3355ff"
|
||||||
className="w-full h-48 p-3 border border-border rounded-xl bg-input font-mono text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50 focus-visible:border-primary/50 transition-all duration-200"
|
className="h-48 font-mono"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<p className="text-xs text-muted-foreground mt-2">
|
<p className="text-xs text-muted-foreground mt-2">
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { cn } from '@/lib/utils';
|
import { cn } from '@/lib/utils';
|
||||||
|
import { Textarea } from '@/components/ui/textarea';
|
||||||
|
|
||||||
export interface TextInputProps {
|
export interface TextInputProps {
|
||||||
value: string;
|
value: string;
|
||||||
@@ -13,16 +14,11 @@ export interface TextInputProps {
|
|||||||
export function TextInput({ value, onChange, placeholder, className }: TextInputProps) {
|
export function TextInput({ value, onChange, placeholder, className }: TextInputProps) {
|
||||||
return (
|
return (
|
||||||
<div className={cn('relative', className)}>
|
<div className={cn('relative', className)}>
|
||||||
<textarea
|
<Textarea
|
||||||
value={value}
|
value={value}
|
||||||
onChange={(e) => onChange(e.target.value)}
|
onChange={(e) => onChange(e.target.value)}
|
||||||
placeholder={placeholder || 'Type something...'}
|
placeholder={placeholder || 'Type something...'}
|
||||||
className={cn(
|
className="h-32 resize-none"
|
||||||
"placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground border-input w-full min-w-0 rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
|
|
||||||
"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
|
|
||||||
"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
|
|
||||||
"h-32 resize-none"
|
|
||||||
)}
|
|
||||||
maxLength={100}
|
maxLength={100}
|
||||||
/>
|
/>
|
||||||
<div className="absolute bottom-2 right-2 text-xs text-muted-foreground">
|
<div className="absolute bottom-2 right-2 text-xs text-muted-foreground">
|
||||||
|
|||||||
18
components/ui/textarea.tsx
Normal file
18
components/ui/textarea.tsx
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
import * as React from "react"
|
||||||
|
|
||||||
|
import { cn } from "@/lib/utils/index"
|
||||||
|
|
||||||
|
function Textarea({ className, ...props }: React.ComponentProps<"textarea">) {
|
||||||
|
return (
|
||||||
|
<textarea
|
||||||
|
data-slot="textarea"
|
||||||
|
className={cn(
|
||||||
|
"border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
|
||||||
|
className
|
||||||
|
)}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export { Textarea }
|
||||||
Reference in New Issue
Block a user