/* This file is part of the Notesnook project (https://notesnook.com/) Copyright (C) 2023 Streetwriters (Private) Limited This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ import "@notesnook/editor/styles/katex.min.css"; import "@notesnook/editor/styles/katex-fonts.css"; import "@notesnook/editor/styles/fonts.css"; import "mac-scrollbar/dist/mac-scrollbar.css"; import { ThemeFactory, useThemeColors, useThemeEngineStore } from "@notesnook/theme"; import { useLayoutEffect, useMemo, useRef } from "react"; import { Flex } from "@theme-ui/components"; import TipTap, { type TipTapProps } from "./tiptap"; import { ScopedThemeProvider } from "../theme-provider"; import { setI18nGlobal, Messages } from "@notesnook/intl"; import { i18n } from "@lingui/core"; const locale = import.meta.env.DEV ? import("@notesnook/intl/locales/$pseudo-LOCALE.json") : import("@notesnook/intl/locales/$en.json"); locale.then(({ default: locale }) => { i18n.load({ en: locale.messages as unknown as Messages }); i18n.activate("en"); }); setI18nGlobal(i18n); export type EditorType = typeof Editor; export function Editor(props: Omit) { const editorContainerRef = useRef(); const containerRef = useRef(null); const { theme } = useThemeEngineStore(); const { colors, isDark } = useThemeColors("editor"); useLayoutEffect(() => { if ( !containerRef.current || !editorContainerRef.current || editorContainerRef.current.parentElement === containerRef.current ) return; containerRef.current.appendChild(editorContainerRef.current); }, []); const editorTheme = useMemo(() => { const editorTheme = ThemeFactory.construct({ colorScheme: isDark ? "dark" : "light", scope: colors }); editorTheme.space = [0, 8, 12, 20, 25, 30, 35]; editorTheme.fontSizes.body = "1rem"; editorTheme.fontSizes.code = "1rem"; editorTheme.fontSizes.subBody = "0.8rem"; editorTheme.colors.background = isDark ? "#0d0d0d" : "#ffffff"; editorTheme.colors.backdrop = "#00000022"; return editorTheme; }, [colors, isDark]); return ( { if (editorContainerRef.current) return editorContainerRef.current; const editorContainer = document.createElement("div"); editorContainer.classList.add("selectable", "editor-container"); editorContainer.style.flex = "1"; editorContainer.style.cursor = "text"; editorContainer.style.color = theme.scopes.editor?.primary?.paragraph || theme.scopes.base.primary.paragraph; editorContainerRef.current = editorContainer; if (containerRef.current) containerRef.current.appendChild(editorContainerRef.current); return editorContainer; }} /> ); } // export const EmotionEditorTheme = (props: PropsWithChildren) => { // const { colors, isDark } = useThemeColors("editor"); // const theme = useMemo(() => { // const editorTheme = ThemeFactory.construct({ // colorScheme: isDark ? "dark" : "light", // scope: colors // }); // editorTheme.space = [0, 8, 12, 20, 25, 30, 35]; // editorTheme.fontSizes.body = "1rem"; // editorTheme.fontSizes.code = "1rem"; // editorTheme.fontSizes.subBody = "0.8rem"; // editorTheme.colors.background = isDark ? "#0d0d0d" : "#ffffff"; // editorTheme.colors.backdrop = "#00000022"; // return editorTheme; // }, [colors, isDark]); // return ( // // {props.children} // // ); // };