diff options
Diffstat (limited to 'src/zoom/FullText.tsx')
-rw-r--r-- | src/zoom/FullText.tsx | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/zoom/FullText.tsx b/src/zoom/FullText.tsx new file mode 100644 index 0000000..615fe66 --- /dev/null +++ b/src/zoom/FullText.tsx @@ -0,0 +1,62 @@ +import React from "react"; +import { motion, AnimatePresence } from "motion/react"; +import Paragraph from "./Paragraph"; +import { useZoom } from "./hooks/useZoom"; +import { containerVariants, buttonVariants } from "./animations"; +import { NLP } from "sortug-ai"; + +interface TextFocusMorphProps { + text: string; + doc: NLP.Spacy.SpacyRes; + stanza?: NLP.Stanza.StanzaRes | undefined; +} + +const FullText: React.FC<TextFocusMorphProps> = ({ text, doc, stanza }) => { + const { viewState, navigateBack, handleElementClick } = useZoom(); + const { level } = viewState; + + // Split text into paragraphs + const paragraphs = text + .split("\n\n") + .map((p) => p.trim()) + .filter(Boolean); + + return ( + <div className="text-focus-morph"> + {level !== "text" && ( + <AnimatePresence> + <motion.button + className="back-button" + onClick={navigateBack} + variants={buttonVariants} + initial="initial" + animate="animate" + exit="exit" + > + ← Back + </motion.button> + </AnimatePresence> + )} + + <motion.div + className="content-container" + variants={containerVariants} + initial="text" + animate={level} + > + {paragraphs.map((paragraph, idx) => ( + <Paragraph + doc={doc} + stanza={stanza} + key={paragraph + idx} + rawText={paragraph} + context={{ idx, parentText: text, segmented: paragraphs }} + idx={idx} + /> + ))} + </motion.div> + </div> + ); +}; + +export default FullText; |