aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/client/components/CreateDeckModal.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/components/CreateDeckModal.tsx')
-rw-r--r--src/client/components/CreateDeckModal.tsx160
1 files changed, 75 insertions, 85 deletions
diff --git a/src/client/components/CreateDeckModal.tsx b/src/client/components/CreateDeckModal.tsx
index 85afb0c..4541a68 100644
--- a/src/client/components/CreateDeckModal.tsx
+++ b/src/client/components/CreateDeckModal.tsx
@@ -78,18 +78,7 @@ export function CreateDeckModal({
role="dialog"
aria-modal="true"
aria-labelledby="create-deck-title"
- style={{
- position: "fixed",
- top: 0,
- left: 0,
- right: 0,
- bottom: 0,
- backgroundColor: "rgba(0, 0, 0, 0.5)",
- display: "flex",
- alignItems: "center",
- justifyContent: "center",
- zIndex: 1000,
- }}
+ className="fixed inset-0 bg-ink/40 backdrop-blur-sm flex items-center justify-center z-50 p-4 animate-fade-in"
onClick={(e) => {
if (e.target === e.currentTarget) {
handleClose();
@@ -101,83 +90,84 @@ export function CreateDeckModal({
}
}}
>
- <div
- style={{
- backgroundColor: "white",
- padding: "1.5rem",
- borderRadius: "8px",
- width: "100%",
- maxWidth: "400px",
- margin: "1rem",
- }}
- >
- <h2 id="create-deck-title" style={{ marginTop: 0 }}>
- Create New Deck
- </h2>
+ <div className="bg-white rounded-2xl shadow-xl w-full max-w-md animate-scale-in">
+ <div className="p-6">
+ <h2
+ id="create-deck-title"
+ className="font-display text-xl font-medium text-ink mb-6"
+ >
+ Create New Deck
+ </h2>
- <form onSubmit={handleSubmit}>
- {error && (
- <div role="alert" style={{ color: "red", marginBottom: "1rem" }}>
- {error}
- </div>
- )}
+ <form onSubmit={handleSubmit} className="space-y-4">
+ {error && (
+ <div
+ role="alert"
+ className="bg-error/5 text-error text-sm px-4 py-3 rounded-lg border border-error/20"
+ >
+ {error}
+ </div>
+ )}
- <div style={{ marginBottom: "1rem" }}>
- <label
- htmlFor="deck-name"
- style={{ display: "block", marginBottom: "0.25rem" }}
- >
- Name
- </label>
- <input
- id="deck-name"
- type="text"
- value={name}
- onChange={(e) => setName(e.target.value)}
- required
- maxLength={255}
- disabled={isSubmitting}
- style={{ width: "100%", boxSizing: "border-box" }}
- />
- </div>
+ <div>
+ <label
+ htmlFor="deck-name"
+ className="block text-sm font-medium text-slate mb-1.5"
+ >
+ Name
+ </label>
+ <input
+ id="deck-name"
+ type="text"
+ value={name}
+ onChange={(e) => setName(e.target.value)}
+ required
+ maxLength={255}
+ disabled={isSubmitting}
+ className="w-full px-4 py-2.5 bg-ivory border border-border rounded-lg text-slate placeholder-muted transition-all duration-200 hover:border-muted focus:border-primary focus:ring-2 focus:ring-primary/10 disabled:opacity-50 disabled:cursor-not-allowed"
+ placeholder="My New Deck"
+ />
+ </div>
- <div style={{ marginBottom: "1rem" }}>
- <label
- htmlFor="deck-description"
- style={{ display: "block", marginBottom: "0.25rem" }}
- >
- Description (optional)
- </label>
- <textarea
- id="deck-description"
- value={description}
- onChange={(e) => setDescription(e.target.value)}
- maxLength={1000}
- disabled={isSubmitting}
- rows={3}
- style={{
- width: "100%",
- boxSizing: "border-box",
- resize: "vertical",
- }}
- />
- </div>
+ <div>
+ <label
+ htmlFor="deck-description"
+ className="block text-sm font-medium text-slate mb-1.5"
+ >
+ Description{" "}
+ <span className="text-muted font-normal">(optional)</span>
+ </label>
+ <textarea
+ id="deck-description"
+ value={description}
+ onChange={(e) => setDescription(e.target.value)}
+ maxLength={1000}
+ disabled={isSubmitting}
+ rows={3}
+ className="w-full px-4 py-2.5 bg-ivory border border-border rounded-lg text-slate placeholder-muted transition-all duration-200 hover:border-muted focus:border-primary focus:ring-2 focus:ring-primary/10 disabled:opacity-50 disabled:cursor-not-allowed resize-none"
+ placeholder="What will you learn?"
+ />
+ </div>
- <div
- style={{
- display: "flex",
- gap: "0.5rem",
- justifyContent: "flex-end",
- }}
- >
- <button type="button" onClick={handleClose} disabled={isSubmitting}>
- Cancel
- </button>
- <button type="submit" disabled={isSubmitting || !name.trim()}>
- {isSubmitting ? "Creating..." : "Create"}
- </button>
- </div>
- </form>
+ <div className="flex gap-3 justify-end pt-2">
+ <button
+ type="button"
+ onClick={handleClose}
+ disabled={isSubmitting}
+ className="px-4 py-2 text-slate hover:bg-ivory rounded-lg transition-colors disabled:opacity-50"
+ >
+ Cancel
+ </button>
+ <button
+ type="submit"
+ disabled={isSubmitting || !name.trim()}
+ className="px-4 py-2 bg-primary hover:bg-primary-dark text-white font-medium rounded-lg transition-all duration-200 disabled:opacity-50 disabled:cursor-not-allowed"
+ >
+ {isSubmitting ? "Creating..." : "Create Deck"}
+ </button>
+ </div>
+ </form>
+ </div>
</div>
</div>
);