+ {/* Label atas */}
+ {label && (
+
+ )}
+
+ {/* Daftar opsi radio */}
+
+ {options.map((option) => (
+
+ ))}
+
+
+ {/* Label bawah */}
+ {!isError && bottomLabel && (
+
{bottomLabel}
+ )}
+
+ {/* Pesan error */}
+ {isError && errorMessage && (
+
{errorMessage}
+ )}
+
+ );
+};
+
+export default RadioInput;
diff --git a/src/components/input/TextArea.tsx b/src/components/input/TextArea.tsx
new file mode 100644
index 00000000..b4a6c9f5
--- /dev/null
+++ b/src/components/input/TextArea.tsx
@@ -0,0 +1,124 @@
+'use client';
+
+import {
+ ChangeEventHandler,
+ FocusEventHandler,
+ ReactNode,
+} from 'react';
+
+import { cn } from '@/lib/helper';
+
+export interface TextAreaProps {
+ label?: string;
+ bottomLabel?: string;
+ name: string;
+ value?: string | number;
+ placeholder?: string;
+ className?: {
+ wrapper?: string;
+ label?: string;
+ inputWrapper?: string;
+ input?: string;
+ };
+ isError?: boolean;
+ isValid?: boolean;
+ disabled?: boolean;
+ readOnly?: boolean;
+ required?: boolean;
+ isLoading?: boolean;
+ errorMessage?: string;
+ startAdornment?: ReactNode;
+ endAdornment?: ReactNode;
+ onChange?: ChangeEventHandler