+
setInputValue(e.target.value)}
+ onKeyDown={handleKeyDown}
+ placeholder={placeholder}
+ />
+ {errorMessage &&
{errorMessage}
}
+
+ {tags.map((tag, i) => (
+ removeTag(tag)}>
+ {tag}
+
+ ))}
+
+
+ );
+};
+
+export default TagsInput;
+
+const TagsInputStyle = css`
+ display: flex;
+ flex-direction: column;
+ gap: 14px;
+
+ input {
+ width: 100%;
+ }
+`;
+
+const TagListStyle = css`
+ display: flex;
+ flex-wrap: wrap;
+ gap: 12px;
+`;
+
+const errorMessageStyle = css`
+ display: block;
+ color: var(--error-color);
+`;
diff --git a/src/components/ui/Tag/index.js b/src/components/ui/Tag/index.js
new file mode 100644
index 00000000..21bb058a
--- /dev/null
+++ b/src/components/ui/Tag/index.js
@@ -0,0 +1 @@
+export { default } from "./Tag";
diff --git a/src/components/ui/Textarea/Textarea.jsx b/src/components/ui/Textarea/Textarea.jsx
new file mode 100644
index 00000000..ba772981
--- /dev/null
+++ b/src/components/ui/Textarea/Textarea.jsx
@@ -0,0 +1,32 @@
+/** @jsxImportSource @emotion/react */
+import { css } from "@emotion/react";
+
+const Textarea = ({ ...props }) => {
+ const { id, name, placeholder, onChange, onBlur } = props;
+ return (
+