From a3f24ea79b14394b24c4b60a010651eb29eeb872 Mon Sep 17 00:00:00 2001
From: polwex <polwex@sortug.com>
Date: Thu, 29 May 2025 12:10:22 +0700
Subject: glorious new db

---
 src/components/Flashcard/SyllableSpan.tsx | 45 +++++++++++++++++++++++++++++++
 1 file changed, 45 insertions(+)
 create mode 100644 src/components/Flashcard/SyllableSpan.tsx

(limited to 'src/components/Flashcard/SyllableSpan.tsx')

diff --git a/src/components/Flashcard/SyllableSpan.tsx b/src/components/Flashcard/SyllableSpan.tsx
new file mode 100644
index 0000000..445895e
--- /dev/null
+++ b/src/components/Flashcard/SyllableSpan.tsx
@@ -0,0 +1,45 @@
+"use client";
+
+import { syllableAction, thaiAnalysis } from "@/actions/lang";
+import { CardResponse } from "@/lib/types/cards";
+import { ReactNode, useState, useTransition } from "react";
+import { Spinner } from "../ui/spinner";
+import Modal from "@/components/Modal";
+import { getRandomHexColor } from "@/lib/utils";
+
+const SyllableSpan: React.FC<{ spelling: string; lang: string }> = ({
+  spelling,
+  lang,
+}) => {
+  const [modalContent, setModalContent] = useState<ReactNode | null>(null);
+
+  const closeModal = () => setModalContent(null);
+
+  const [isPending, startTransition] = useTransition();
+  const handleClick = (e: React.MouseEvent) => {
+    e.stopPropagation();
+    startTransition(async () => {
+      const modal = await syllableAction(spelling, lang);
+      setModalContent(modal);
+    });
+  };
+
+  return (
+    <>
+      <span
+        onClick={handleClick}
+        className="m-1 hover:text-6xl"
+        style={{ color: getRandomHexColor() }}
+      >
+        {spelling}
+      </span>
+      {modalContent && (
+        <Modal onClose={closeModal} isOpen={!!modalContent}>
+          {modalContent}
+        </Modal>
+      )}
+    </>
+  );
+};
+
+export default SyllableSpan;
-- 
cgit v1.2.3

