import React, { useState, useEffect, useRef, useCallback, useMemo } from "react"; import { NodeViewWrapper } from "@tiptap/react"; import type { NodeViewProps } from "@tiptap/react"; import type { ComponentDef, ComponentField } from "../components/registry"; import { buildDoc, DEFAULT_EMBED_HEIGHT } from "./build-doc"; import type { EmbedStore } from "./embed-store"; import { useTheme } from "../../hooks/useTheme"; /** * Resolve embed store from the editor's storage. * The store is injected by Editor.tsx into editor.storage.htmlEmbed.embedStore. */ function useEmbedStore(editor: NodeViewProps["editor"]): EmbedStore | null { return (editor.storage.htmlEmbed as any)?.embedStore ?? null; } function FieldRow({ field, value, onChange, }: { field: ComponentField; value: unknown; onChange: (val: unknown) => void; }) { if (field.type === "boolean") { return ( ); } return (
{src}
>
) : (
<>
📊
Set a source filename in settings to link an embed
>
)}