import { useEntity, useReplicache } from "src/replicache"; import "katex/dist/katex.min.css"; import { BlockLayout, BlockProps } from "./Block"; import Katex from "katex"; import { useMemo } from "react"; import { useUIState } from "src/useUIState"; import { theme } from "tailwind.config"; import { BaseTextareaBlock } from "./BaseTextareaBlock"; import { elementId } from "src/utils/elementId"; export function MathBlock(props: BlockProps) { let content = useEntity(props.entityID, "block/math"); let focusedBlock = useUIState( (s) => s.focusedEntity?.entityID === props.entityID, ); let { rep } = useReplicache(); const { html, error } = useMemo(() => { try { const html = Katex.renderToString(content?.data.value || "", { displayMode: true, throwOnError: false, errorColor: theme.colors["accent-contrast"], }); return { html, error: undefined }; } catch (error) { if (error instanceof Katex.ParseError || error instanceof TypeError) { return { error }; } throw error; } }, [content?.data.value]); return focusedBlock ? ( { // Update the entity with the new value await rep?.mutate.assertFact({ attribute: "block/math", entity: props.entityID, data: { type: "string", value: e.target.value }, }); }} /> ) : html && content?.data.value ? (
) : (
write some Tex here...
); }