chore: add spoiler node

This commit is contained in:
Steven 2024-02-20 23:55:54 +08:00
parent 4a6da91719
commit 13b911ebf0
4 changed files with 36 additions and 1 deletions

Binary file not shown.

View file

@ -19,6 +19,7 @@ import {
OrderedListNode,
ParagraphNode,
ReferencedContentNode,
SpoilerNode,
StrikethroughNode,
SubscriptNode,
SuperscriptNode,
@ -46,6 +47,7 @@ import Math from "./Math";
import OrderedList from "./OrderedList";
import Paragraph from "./Paragraph";
import ReferencedContent from "./ReferencedContent";
import Spoiler from "./Spoiler";
import Strikethrough from "./Strikethrough";
import Subscript from "./Subscript";
import Superscript from "./Superscript";
@ -118,6 +120,8 @@ const Renderer: React.FC<Props> = ({ index, node }: Props) => {
return <Superscript {...(node.superscriptNode as SuperscriptNode)} />;
case NodeType.REFERENCED_CONTENT:
return <ReferencedContent {...(node.referencedContentNode as ReferencedContentNode)} />;
case NodeType.SPOILER:
return <Spoiler {...(node.spoilerNode as SpoilerNode)} />;
default:
return null;
}

View file

@ -0,0 +1,24 @@
import classNames from "classnames";
import { useState } from "react";
interface Props {
content: string;
}
const Spoiler: React.FC<Props> = ({ content }: Props) => {
const [isRevealed, setIsRevealed] = useState(false);
return (
<div
className={classNames(
"inline cursor-pointer select-none transition-all",
isRevealed ? "bg-gray-100 dark:bg-zinc-700" : "bg-gray-200 dark:bg-zinc-600",
)}
onClick={() => setIsRevealed(!isRevealed)}
>
<span className={classNames(isRevealed ? "opacity-100" : "opacity-0")}>{content}</span>
</div>
);
};
export default Spoiler;

View file

@ -32,6 +32,7 @@ export enum NodeType {
SUBSCRIPT = "SUBSCRIPT",
SUPERSCRIPT = "SUPERSCRIPT",
REFERENCED_CONTENT = "REFERENCED_CONTENT",
SPOILER = "SPOILER",
UNRECOGNIZED = "UNRECOGNIZED",
}
@ -65,9 +66,11 @@ export interface Node {
subscriptNode?: SubscriptNode | undefined;
superscriptNode?: SuperscriptNode | undefined;
referencedContentNode?: ReferencedContentNode | undefined;
spoilerNode?: SpoilerNode | undefined;
}
export interface LineBreakNode {}
export interface LineBreakNode {
}
export interface ParagraphNode {
children: Node[];
@ -199,3 +202,7 @@ export interface ReferencedContentNode {
resourceName: string;
params: string;
}
export interface SpoilerNode {
content: string;
}