diff --git a/.gitignore b/.gitignore
index 8cbe4b69a..9aff7046f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,6 +22,8 @@ Autogrpha-DB/
/app/**/*.map
/.next
.next
+.yalc
+yalc.lock
# testing
/coverage
diff --git a/package.json b/package.json
index 1d82dccd6..d7956ef9d 100644
--- a/package.json
+++ b/package.json
@@ -88,6 +88,7 @@
"@babel/eslint-parser": "^7.5.4",
"@babel/preset-env": "^7.25.4",
"@babel/preset-react": "^7.17.12",
+ "@capacitor/cli": "5.4.2",
"@mui/icons-material": "^5.8.4",
"@netlify/plugin-nextjs": "^4.8.0",
"@playwright/test": "^1.36.2",
@@ -127,6 +128,8 @@
"@mui/icons-material": "^5.x"
},
"dependencies": {
+ "@babel/plugin-proposal-private-property-in-object": "^7.21.11",
+ "@biblionexus-foundation/scribe-editor": "0.1.1-scribe-v1",
"@capacitor/app": "5.0.6",
"@capacitor/core": "5.4.2",
"@capacitor/haptics": "5.0.6",
@@ -220,6 +223,7 @@
"react-router": "^5.2.0",
"react-router-dom": "^5.2.0",
"react-scripts": "5.0.1",
+ "sj-usfm-grammar": "^3.0.2",
"styled-components": "^5.3.6",
"tc-ui-toolkit": "5.3.3",
"tls": "^0.0.1",
@@ -227,9 +231,9 @@
"typescript": "^4.9.5",
"use-deep-compare": "^1.1.0",
"usfm-editor": "0.8.7",
- "usfm-grammar": "^2.3.0",
+ "usfm-grammar": "^2.3.1",
"uuid": "^9.0.1",
- "wavesurfer.js": "^6.6.2",
+ "wavesurfer.js": "^6.6.4",
"webpack-node-externals": "^3.0.0",
"winston": "^3.7.2",
"word-aligner": "1.0.0",
@@ -249,4 +253,4 @@
"word-aligner": "$word-aligner",
"@mui/lab": "$@mui/lab"
}
-}
\ No newline at end of file
+}
diff --git a/renderer/src/components/EditorPage/LexicalEditor/cacheUtils.js b/renderer/src/components/EditorPage/LexicalEditor/cacheUtils.js
new file mode 100644
index 000000000..4858f183b
--- /dev/null
+++ b/renderer/src/components/EditorPage/LexicalEditor/cacheUtils.js
@@ -0,0 +1,128 @@
+import * as path from 'path';
+import * as crypto from 'crypto';
+import { convertUsfmToUsj } from './conversionUtils';
+
+let fs;
+
+function initFS() {
+ if (typeof window !== 'undefined' && window.require) {
+ fs = window.require('fs');
+ }
+}
+initFS();
+
+export function getMd5Hash(content) {
+ return crypto.createHash('md5').update(content).digest('hex');
+}
+
+export function getCacheFilePath(hash, projectCachePath) {
+ console.log({ hash, projectCachePath });
+ return path.join(projectCachePath, `${hash}.json`);
+}
+
+export function isCacheValid(hash, projectCachePath) {
+ if (!fs) { return false; }
+ const cacheFilePath = getCacheFilePath(hash, projectCachePath);
+ return fs.existsSync(cacheFilePath);
+}
+
+export function readCache(hash, projectCachePath) {
+ if (!fs) { throw new Error('File system not available'); }
+ const cacheFilePath = path.join(projectCachePath, `${hash}.json`);
+ console.log(JSON.parse(fs.readFileSync(cacheFilePath, 'utf8')));
+ return JSON.parse(fs.readFileSync(cacheFilePath, 'utf8'));
+}
+
+export function writeCache(hash, data, projectCachePath) {
+ console.log({});
+ if (!fs) {
+ console.error('File system not available');
+ return;
+ }
+ const cacheFilePath = getCacheFilePath(hash, projectCachePath);
+ fs.writeFileSync(cacheFilePath, JSON.stringify(data), 'utf8');
+}
+
+export function deleteOldCacheFile(hash, projectCachePath) {
+ const cacheFilePath = getCacheFilePath(hash, projectCachePath);
+ if (fs.existsSync(cacheFilePath)) {
+ fs.unlinkSync(cacheFilePath);
+ }
+}
+
+export function getCacheMapFromFile(fileCacheMapPath) {
+ if (fileCacheMapPath) {
+ try {
+ if (fs.existsSync(fileCacheMapPath)) {
+ const fileContent = fs.readFileSync(fileCacheMapPath, 'utf-8');
+ return JSON.parse(fileContent);
+ }
+ } catch (error) {
+ console.error('Error reading cache file:', error);
+ }
+ }
+
+ return {};
+}
+
+export function updateCacheMapToFile(fileCacheMapPath, filePath, hash) {
+ if (fileCacheMapPath) {
+ const cacheMap = getCacheMapFromFile(fileCacheMapPath);
+ cacheMap[filePath] = hash;
+ try {
+ fs.mkdirSync(path.dirname(fileCacheMapPath), { recursive: true });
+ fs.writeFileSync(fileCacheMapPath, JSON.stringify(cacheMap));
+ } catch (error) {
+ console.error('Error writing cache file:', error);
+ }
+ }
+}
+
+export async function handleCache(filePath, usfmContent, projectCachePath, fileCacheMapPath) {
+ console.log({ usfmContent });
+ const newHash = getMd5Hash(usfmContent);
+ const fileCacheMap = getCacheMapFromFile(fileCacheMapPath);
+ const oldHash = fileCacheMap[filePath];
+
+ async function processAndCacheUSJ() {
+ const { usj, error } = await convertUsfmToUsj(usfmContent);
+ if (error) {
+ console.error('Error parsing USFM', error);
+ return { error };
+ }
+ console.log({ newHash, usj });
+ writeCache(newHash, usj, projectCachePath);
+ updateCacheMapToFile(fileCacheMapPath, filePath, newHash);
+ return { usj };
+ }
+
+ if (!oldHash) {
+ console.log('No existing hash found. Creating new cache entry.');
+ return processAndCacheUSJ();
+ }
+
+ if (isCacheValid(oldHash, projectCachePath) && oldHash === newHash) {
+ console.log('Cache hit');
+ return { usj: await readCache(oldHash, projectCachePath) };
+ }
+
+ console.log('Cache miss or content changed');
+ deleteOldCacheFile(oldHash, projectCachePath);
+ return processAndCacheUSJ();
+}
+
+export async function updateCache(filePath, usj, usfm, fileCacheMapPath, projectCachePath) {
+ const newHash = getMd5Hash(usfm);
+ const fileCacheMap = getCacheMapFromFile(fileCacheMapPath);
+ const oldHash = fileCacheMap[filePath];
+
+ if (oldHash && isCacheValid(oldHash, projectCachePath) && oldHash === newHash) {
+ writeCache(oldHash, usj, projectCachePath);
+ } else {
+ if (oldHash) {
+ deleteOldCacheFile(oldHash, projectCachePath);
+ }
+ writeCache(newHash, usj, projectCachePath);
+ updateCacheMapToFile(fileCacheMapPath, filePath, newHash);
+ }
+}
diff --git a/renderer/src/components/EditorPage/LexicalEditor/conversionUtils.js b/renderer/src/components/EditorPage/LexicalEditor/conversionUtils.js
new file mode 100644
index 000000000..ed292b060
--- /dev/null
+++ b/renderer/src/components/EditorPage/LexicalEditor/conversionUtils.js
@@ -0,0 +1,43 @@
+import USFMParser from 'sj-usfm-grammar';
+
+let usfmParserInstance;
+let usfmParserInitialized;
+
+export async function initializeParser() {
+ if (!usfmParserInstance) {
+ if (!usfmParserInitialized) {
+ usfmParserInitialized = await USFMParser.init();
+ }
+ await usfmParserInitialized;
+ usfmParserInstance = new USFMParser();
+ }
+ return usfmParserInstance;
+}
+
+export async function convertUsfmToUsj(usfm) {
+ if (!usfmParserInstance) {
+ usfmParserInstance = await initializeParser();
+ }
+ try {
+ const usj = usfmParserInstance.usfmToUsj(usfm);
+ return { usj };
+ } catch (e) {
+ return { usj: { content: [] }, error: e };
+ }
+}
+
+export async function convertUsjToUsfm(usj) {
+ if (!usfmParserInstance) {
+ usfmParserInstance = await initializeParser();
+ }
+ const usfm = usfmParserInstance.usjToUsfm(usj);
+ return usfm;
+}
+
+initializeParser()
+ .then(() => {
+ console.log('USFM Parser initialized successfully');
+ })
+ .catch((err) => {
+ console.error('Error initializing USFM Parser:', err);
+ });
diff --git a/renderer/src/components/EditorPage/LexicalEditor/updateAndSave.js b/renderer/src/components/EditorPage/LexicalEditor/updateAndSave.js
new file mode 100644
index 000000000..3c00c512b
--- /dev/null
+++ b/renderer/src/components/EditorPage/LexicalEditor/updateAndSave.js
@@ -0,0 +1,14 @@
+import { getCachePaths } from '../TextEditor/hooks/useReadUsfmFile';
+import { convertUsjToUsfm } from './conversionUtils';
+import { updateCache } from './cacheUtils';
+import { saveToFile } from '../TextEditor/hooks/saveToFile';
+
+export async function updateCacheNSaveFile(usj, bookId) {
+ const usfm = await convertUsjToUsfm(usj);
+ const { filePath, projectCachePath, fileCacheMapPath } = await getCachePaths(bookId);
+ updateCache(filePath, usj, usfm, fileCacheMapPath, projectCachePath);
+ if (usfm) {
+ await saveToFile(usfm, bookId);
+ console.log('file saved');
+ }
+}
diff --git a/renderer/src/components/EditorPage/LexicalEditor/useUsfmGrammar.js b/renderer/src/components/EditorPage/LexicalEditor/useUsfmGrammar.js
new file mode 100644
index 000000000..687211aa4
--- /dev/null
+++ b/renderer/src/components/EditorPage/LexicalEditor/useUsfmGrammar.js
@@ -0,0 +1,72 @@
+import {
+ useState, useEffect, useRef, useCallback,
+} from 'react';
+import { USFMParser } from 'usfm-grammar';
+
+// Hook to initialize the parser
+export const useUSFMParser = () => {
+ const [usfmParser, setUsfmParser] = useState();
+
+ useEffect(() => {
+ const initParser = async () => {
+ await USFMParser.init();
+ const usfmParser = new USFMParser();
+ console.log({ usfmParser });
+ setUsfmParser(usfmParser);
+ };
+ initParser();
+ }, []);
+
+ return { USFMParser: usfmParser };
+};
+
+// Hook for USFM to USJ conversion
+export const useUsfmToUsj = () => {
+ const parserRef = useUSFMParser();
+ console.log({ parserRef });
+ const [usj, setUsj] = useState(null);
+ const [error, setError] = useState(null);
+
+ const convert = useCallback((usfm) => {
+ console.log('inside the hook ======>', { usfm });
+ if (parserRef.current) {
+ try {
+ const result = parserRef.current.usfmToUsj(usfm);
+ console.log({ result });
+ setUsj(result);
+ setError(null);
+ } catch (err) {
+ setError(err.message);
+ setUsj(null);
+ }
+ } else {
+ setError('Parser not initialized');
+ }
+ }, [parserRef]);
+
+ return { usj, error, convert };
+};
+
+// Hook for USJ to USFM conversion
+export const useUsjToUsfm = () => {
+ const parserRef = useUSFMParser();
+ const [usfm, setUsfm] = useState(null);
+ const [error, setError] = useState(null);
+
+ const convert = useCallback((usj) => {
+ if (parserRef.current) {
+ try {
+ const result = parserRef.current.usjToUsfm(usj);
+ setUsfm(result);
+ setError(null);
+ } catch (err) {
+ setError(err.message);
+ setUsfm(null);
+ }
+ } else {
+ setError('Parser not initialized');
+ }
+ }, [parserRef]);
+
+ return { usfm, error, convert };
+};
diff --git a/renderer/src/components/EditorPage/LexicalEditor/useUsjHook.js b/renderer/src/components/EditorPage/LexicalEditor/useUsjHook.js
new file mode 100644
index 000000000..97c34083a
--- /dev/null
+++ b/renderer/src/components/EditorPage/LexicalEditor/useUsjHook.js
@@ -0,0 +1,73 @@
+// import { useState, useEffect, useRef } from 'react';
+// import { USFMParser } from 'usfm-grammar';
+
+// export const useUSFMParser = () => {
+// const [isReady, setIsReady] = useState(false);
+// const parserRef = useRef(null);
+
+// useEffect(() => {
+// const initializeParser = async () => {
+// if (!parserRef.current) {
+// await USFMParser.init();
+// parserRef.current = new USFMParser();
+// setIsReady(true);
+// }
+// };
+
+// initializeParser();
+// }, []);
+
+// const usfmToUsj = (usfmString) => {
+// if (!isReady) {
+// throw new Error('USFM Parser is not initialized yet');
+// }
+// return parserRef.current.usfmToUsj(usfmString);
+// };
+
+// const usjToUsfm = (usjObject) => {
+// if (!isReady) {
+// throw new Error('USFM Parser is not initialized yet');
+// }
+// return parserRef.current.usjToUsfm(usjObject);
+// };
+
+// return { isReady, usfmToUsj, usjToUsfm };
+// };
+
+// // export default useUSFMParser;
+
+import { useState, useEffect, useCallback } from 'react';
+import { USFMParser } from 'usfm-grammar';
+
+export const useUSFMParser = () => {
+ const [parser, setParser] = useState(null);
+
+ useEffect(() => {
+ const initializeParser = async () => {
+ if (!parser) {
+ await USFMParser.init();
+ setParser(new USFMParser());
+ }
+ };
+
+ initializeParser();
+ }, [parser]);
+
+ const usfmToUsj = useCallback((usfmString) => {
+ if (!parser) {
+ throw new Error('USFM Parser is not initialized yet');
+ }
+ return parser.usfmToUsj(usfmString);
+ }, [parser]);
+
+ const usjToUsfm = useCallback((usjObject) => {
+ if (!parser) {
+ throw new Error('USFM Parser is not initialized yet');
+ }
+ return parser.usjToUsfm(usjObject);
+ }, [parser]);
+
+ return { isReady: !!parser, usfmToUsj, usjToUsfm };
+};
+
+export default useUSFMParser;
diff --git a/renderer/src/components/EditorPage/Navigation/reference/SelectBook.js b/renderer/src/components/EditorPage/Navigation/reference/SelectBook.js
index 2256f55f7..cb28054e0 100644
--- a/renderer/src/components/EditorPage/Navigation/reference/SelectBook.js
+++ b/renderer/src/components/EditorPage/Navigation/reference/SelectBook.js
@@ -14,6 +14,7 @@ export default function SelectBook({
selectedBooks,
setSelectedBooks,
scope,
+ setBook,
existingScope = [],
disableScope = {},
call = '',
@@ -37,6 +38,7 @@ export default function SelectBook({
function bookSelect(e, bookId) {
e.preventDefault();
onChangeBook(bookId, selectedBooks[0]);
+ setBook(bookId);
if (multiSelectBook === false) { selectBook(); }
}
diff --git a/renderer/src/components/EditorPage/Navigation/reference/SelectVerse.js b/renderer/src/components/EditorPage/Navigation/reference/SelectVerse.js
index ba564b1ce..5783b9691 100644
--- a/renderer/src/components/EditorPage/Navigation/reference/SelectVerse.js
+++ b/renderer/src/components/EditorPage/Navigation/reference/SelectVerse.js
@@ -35,12 +35,17 @@ export default function SelectVerse({
const onChapterSelect = (e, chapterNum) => {
e.preventDefault();
onChangeChapter(chapterNum, chapter);
+ onChangeVerse(1, 1);
setOpenChapter(false);
- setOpenVerse(true);
- window.location.href = `#ch-${chapterNum}`;
+ // setOpenVerse(true);
+ closeBooks();
+ closeVerses();
+
+ // window.location.href = `#ch-${chapterNum}`;
if (chapterNum && setChapterNumber) {
setChapterNumber(chapterNum);
- document.getElementById('editor').querySelector(`#ch-${chapterNum}`)?.scrollIntoView();
+ setVerseNumber(1);
+ // document.getElementById('editor').querySelector(`#ch-${chapterNum}`)?.scrollIntoView();
}
};
@@ -50,7 +55,7 @@ export default function SelectVerse({
closeBooks();
if (multiSelectVerse === false) { closeVerses(); }
if (verseNum && setVerseNumber) {
- document.getElementById('editor').querySelector(`#ch${chapter}v${verseNum}`)?.scrollIntoView();
+ // document.getElementById('editor').querySelector(`#ch${chapter}v${verseNum}`)?.scrollIntoView();
setVerseNumber(verseNum);
}
};
@@ -88,13 +93,13 @@ export default function SelectVerse({
:
{chapter}
-
+ {/*
{t('label-verse')}
:
{multiSelectVerse
? controlVerseSelect.join()
: verse}
-
+
*/}
{children}
diff --git a/renderer/src/components/EditorPage/TextEditor/BibleNavigationX.jsx b/renderer/src/components/EditorPage/TextEditor/BibleNavigationX.jsx
deleted file mode 100644
index 4be5cb2b0..000000000
--- a/renderer/src/components/EditorPage/TextEditor/BibleNavigationX.jsx
+++ /dev/null
@@ -1,251 +0,0 @@
-import PropTypes from 'prop-types';
-import { Dialog, Transition } from '@headlessui/react';
-import React, {
- Fragment, useContext, useEffect, useRef, useState,
-} from 'react';
-import { XMarkIcon, ChevronDownIcon } from '@heroicons/react/24/solid';
-import * as localforage from 'localforage';
-import SelectBook from '@/components/EditorPage/Navigation/reference/SelectBook';
-import SelectVerse from '@/components/EditorPage/Navigation/reference/SelectVerse';
-
-import { ReferenceContext } from '@/components/context/ReferenceContext';
-
-export default function BibleNavigationX(props) {
- const {
- showVerse, chapterNumber, setChapterNumber, verseNumber, setVerseNumber,
- } = props;
- const supportedBooks = null; // if empty array or null then all books available
-
- const {
- state: {
- bookId,
- bookList,
- bookName,
- chapter,
- verse,
- chapterList,
- verseList,
- languageId,
- // closeNavigation,
- }, actions: {
- onChangeBook,
- onChangeChapter,
- onChangeVerse,
- applyBooksFilter,
- setCloseNavigation,
- },
- } = useContext(ReferenceContext);
-
- useEffect(() => {
- applyBooksFilter(supportedBooks);
- }, [applyBooksFilter, supportedBooks]);
-
- const [openBook, setOpenBook] = useState(false);
- const [openVerse, setOpenVerse] = useState(false);
- const cancelButtonRef = useRef(null);
-
- const [multiSelectVerse] = useState(false);
- const [multiSelectBook] = useState(false);
- const [selectedVerses, setSelectedVerses] = useState([]);
- const [selectedBooks, setSelectedBooks] = useState([]);
- const [verselectActive, setVerseSelectActive] = useState(false);
-
- function closeBooks() {
- setOpenBook(false);
- }
-
- function openBooks() {
- setSelectedBooks([(bookId.toUpperCase())]);
- setOpenBook(true);
- }
-
- function closeVerses() {
- setOpenVerse(false);
- if (multiSelectVerse) { setVerseSelectActive(true); }
- }
-
- function selectBook() {
- setOpenBook(false);
- setOpenVerse(true);
- if (multiSelectVerse) { setSelectedVerses([]); }
- }
-
- useEffect(() => {
- const getSupportedBooks = async () => {
- const refs = await localforage.getItem('refBibleBurrito');
- refs?.forEach((ref) => {
- if (languageId !== null) {
- if (ref.value.languages[0].tag === languageId) {
- const supportedBooks = [];
- Object.entries((ref.value.type.flavorType.currentScope)).forEach(
- ([key]) => {
- supportedBooks.push(key.toLowerCase());
- },
- );
- applyBooksFilter(supportedBooks);
- }
- }
- });
- };
- getSupportedBooks();
- }, [languageId, applyBooksFilter]);
-
- useEffect(() => {
- async function setReference() {
- await localforage.setItem('navigationHistory', [bookId, chapter, verse]);
- }
- setReference();
- }, [bookId, chapter, verse]);
-
- useEffect(() => {
- if (openBook === false && openVerse === false) {
- setCloseNavigation(true);
- }
- if (openBook || openVerse) {
- setCloseNavigation(false);
- }
- }, [openVerse, openBook, setCloseNavigation]);
-
- return (
- <>
-
-
- {bookName}
-
-
-
- {chapterNumber}
-
-
-
- {verseNumber}
- {showVerse
- && (
-
- {multiSelectVerse
- ? selectedVerses.join()
- : verse}
-
- )}
-
-
-
-
-
-
-
-
-
- >
- );
-}
-
-BibleNavigationX.propTypes = {
- showVerse: PropTypes.bool,
-};
diff --git a/renderer/src/components/EditorPage/TextEditor/BibleNavigationX/SelectBook.js b/renderer/src/components/EditorPage/TextEditor/BibleNavigationX/SelectBook.js
new file mode 100644
index 000000000..680a2734b
--- /dev/null
+++ b/renderer/src/components/EditorPage/TextEditor/BibleNavigationX/SelectBook.js
@@ -0,0 +1,180 @@
+/* eslint-disable no-nested-ternary */
+import React, { useState } from 'react';
+import PropTypes from 'prop-types';
+import { Disclosure, Transition } from '@headlessui/react';
+import { useTranslation } from 'react-i18next';
+import styles from './SelectReference.module.css';
+
+export default function SelectBook({
+ children,
+ bookList,
+ selectBook,
+ onChangeBook,
+ multiSelectBook,
+ selectedBooks,
+ setSelectedBooks,
+ scope,
+ setBook,
+ existingScope = [],
+ disableScope = {},
+ call = '',
+}) {
+ const [openNT, setOpenNT] = useState(true);
+ const [openOT, setOpenOT] = useState(true);
+
+ function toggleNT() {
+ setOpenNT(true);
+ setOpenOT(false);
+ }
+
+ function toggleOT() {
+ setOpenOT(true);
+ setOpenNT(false);
+ }
+
+ function toggle() {
+ setOpenNT(true);
+ setOpenOT(true);
+ }
+
+ function bookSelect(e, bookId) {
+ e.preventDefault();
+ onChangeBook(bookId, selectedBooks[0]);
+ setBook(bookId);
+ if (multiSelectBook === false) { selectBook(); }
+ }
+
+ function selectMultipleBooks(e, bookID) {
+ if (selectedBooks.includes(bookID.toUpperCase()) === false) {
+ const _selectedBooks = [...selectedBooks];
+ _selectedBooks.push(bookID.toUpperCase());
+ setSelectedBooks(_selectedBooks);
+ } else {
+ const _selectedBooks = [...selectedBooks];
+ const selectedIndex = _selectedBooks.indexOf(bookID.toUpperCase());
+ if (!(scope === 'Other' && existingScope?.length > 0 && existingScope.includes(bookID.toUpperCase()))) {
+ _selectedBooks.splice(selectedIndex, 1);
+ }
+ setSelectedBooks(_selectedBooks);
+ }
+ }
+ React.useEffect(() => {
+ if (scope === 'Old Testament (OT)') {
+ toggleOT();
+ } else if (scope === 'New Testament (NT)') {
+ toggleNT();
+ } else {
+ toggle();
+ }
+ }, [scope]);
+ const { t } = useTranslation();
+ return (
+ <>
+
+
+
{t('btn-all')}
+
{t('btn-ot')}
+
{t('btn-nt')}
+
+
+ {children}
+
+
+
+
+ {openOT && (
+ <>
+
+ {t('label-old-testament')}
+
+
+
+
+ {bookList.map((book, index) => (
+ index <= 38 && (
+
(call === 'audio-project' ? (Object.prototype.hasOwnProperty.call(disableScope, (book.key).toUpperCase())
+ ? (multiSelectBook
+ ? selectMultipleBooks(e, book.key, book.name)
+ : bookSelect(e, book.key, book.name)) : '') : (multiSelectBook
+ ? selectMultipleBooks(e, book.key, book.name)
+ : bookSelect(e, book.key, book.name)))}
+ className={`${call === 'audio-project' && !Object.prototype.hasOwnProperty.call(disableScope, (book.key).toUpperCase()) ? styles.disabled : (selectedBooks.includes((book.key).toUpperCase()) ? (styles.bookSelect, styles.active) : styles.bookSelect)}`}
+ >
+ {book.name}
+
+ )
+ ))}
+
+
+
+ >
+ )}
+
+
+
+ {openNT && (
+ <>
+
+ {t('label-new-testament')}
+
+
+
+
+ {bookList.map((book, index) => (index > 38 && (
+
(call === 'audio-project' ? (Object.prototype.hasOwnProperty.call(disableScope, (book.key).toUpperCase())
+ ? (multiSelectBook
+ ? selectMultipleBooks(e, book.key, book.name)
+ : bookSelect(e, book.key, book.name)) : '') : (multiSelectBook
+ ? selectMultipleBooks(e, book.key, book.name)
+ : bookSelect(e, book.key, book.name)))}
+ className={`${call === 'audio-project' && !Object.prototype.hasOwnProperty.call(disableScope, (book.key).toUpperCase()) ? styles.disabled : (selectedBooks.includes((book.key).toUpperCase()) ? (styles.bookSelect, styles.active) : styles.bookSelect)}`}
+ >
+ {book.name}
+
+ )
+ ))}
+
+
+
+ >
+ )}
+
+
+ >
+ );
+}
+
+SelectBook.propTypes = {
+ children: PropTypes.any,
+ selectBook: PropTypes.func,
+ onChangeBook: PropTypes.func,
+ bookList: PropTypes.array,
+ selectedBooks: PropTypes.array,
+ multiSelectBook: PropTypes.bool,
+ setSelectedBooks: PropTypes.func,
+ scope: PropTypes.string,
+};
diff --git a/renderer/src/components/EditorPage/TextEditor/BibleNavigationX/SelectChapter.js b/renderer/src/components/EditorPage/TextEditor/BibleNavigationX/SelectChapter.js
new file mode 100644
index 000000000..b0442bd64
--- /dev/null
+++ b/renderer/src/components/EditorPage/TextEditor/BibleNavigationX/SelectChapter.js
@@ -0,0 +1,87 @@
+import PropTypes from 'prop-types';
+import { Disclosure, Transition } from '@headlessui/react';
+import { useTranslation } from 'react-i18next';
+import styles from './SelectReference.module.css';
+
+export default function SelectChapter({
+ children,
+ bookName,
+ chapter,
+ chapterList,
+ onChangeChapter,
+ closeBooks,
+ closeChapters,
+ setChapterNumber,
+ loading,
+}) {
+ const { t } = useTranslation();
+
+ const onChapterSelect = (e, chapterNum) => {
+ e.preventDefault();
+ onChangeChapter(chapterNum, chapter);
+ closeBooks();
+ closeChapters();
+
+ if (chapterNum && setChapterNumber) {
+ setChapterNumber(chapterNum);
+ }
+ };
+
+ return (
+ <>
+
+
+
+ {bookName}
+
+
+ {t('label-chapter')}
+ :
+ {chapter}
+
+
+
+ {children}
+
+
+
+
+
+
+ {!loading && chapterList.map((chapter) => (
+ onChapterSelect(e, chapter.key)}
+ className={styles.select}
+ >
+ {chapter.name}
+
+ ))}
+
+
+
+ >
+ );
+}
+
+SelectChapter.propTypes = {
+ children: PropTypes.any,
+ bookName: PropTypes.string,
+ chapter: PropTypes.string,
+ chapterList: PropTypes.array,
+ onChangeChapter: PropTypes.func,
+ closeBooks: PropTypes.func,
+ closeChapters: PropTypes.func,
+ setChapterNumber: PropTypes.func,
+ loading: PropTypes.bool,
+};
diff --git a/renderer/src/components/EditorPage/TextEditor/BibleNavigationX/SelectReference.module.css b/renderer/src/components/EditorPage/TextEditor/BibleNavigationX/SelectReference.module.css
new file mode 100644
index 000000000..e1c09f06f
--- /dev/null
+++ b/renderer/src/components/EditorPage/TextEditor/BibleNavigationX/SelectReference.module.css
@@ -0,0 +1,14 @@
+.select {
+ @apply py-1 px-2 hover:bg-primary hover:text-white cursor-pointer rounded hover:w-auto;
+}
+.bookSelect {
+ @apply py-1 mt-1 px-2 hover:bg-primary hover:text-white cursor-pointer rounded lg:w-5/12 sm:w-10/12;
+}
+
+.active {
+ @apply py-1 px-2 bg-primary text-white cursor-pointer rounded sm:w-10/12 lg:w-5/12;
+}
+
+.disabled {
+ @apply py-1 px-2 text-slate-400 rounded;
+}
\ No newline at end of file
diff --git a/renderer/src/components/EditorPage/TextEditor/BibleNavigationX/index.js b/renderer/src/components/EditorPage/TextEditor/BibleNavigationX/index.js
new file mode 100644
index 000000000..5560f53b9
--- /dev/null
+++ b/renderer/src/components/EditorPage/TextEditor/BibleNavigationX/index.js
@@ -0,0 +1,224 @@
+import PropTypes from 'prop-types';
+import { Dialog, Transition } from '@headlessui/react';
+import React, {
+ Fragment, useContext, useEffect, useRef, useState,
+} from 'react';
+import { XMarkIcon, ChevronDownIcon } from '@heroicons/react/24/solid';
+import * as localforage from 'localforage';
+import { ReferenceContext } from '@/components/context/ReferenceContext';
+import SelectBook from './SelectBook';
+import SelectChapter from './SelectChapter';
+
+export default function BibleNavigationX(props) {
+ const {
+ chapterNumber, setChapterNumber, setBook, loading,
+ } = props;
+ const supportedBooks = null;
+
+ const {
+ state: {
+ bookId,
+ bookList,
+ bookName,
+ chapter,
+ chapterList,
+ languageId,
+ }, actions: {
+ onChangeBook,
+ onChangeChapter,
+ applyBooksFilter,
+ setCloseNavigation,
+ },
+ } = useContext(ReferenceContext);
+
+ useEffect(() => {
+ applyBooksFilter(supportedBooks);
+ }, [applyBooksFilter, supportedBooks]);
+
+ const [openBook, setOpenBook] = useState(false);
+ const [openChapter, setOpenChapter] = useState(false);
+ const cancelButtonRef = useRef(null);
+
+ const [multiSelectBook] = useState(false);
+ const [selectedBooks, setSelectedBooks] = useState([]);
+
+ function closeBooks() {
+ setOpenBook(false);
+ }
+
+ function openBooks() {
+ setSelectedBooks([(bookId.toUpperCase())]);
+ setOpenBook(true);
+ }
+
+ function closeChapters() {
+ setOpenChapter(false);
+ }
+
+ function selectBook() {
+ setOpenBook(false);
+ setOpenChapter(true);
+ }
+
+ useEffect(() => {
+ const getSupportedBooks = async () => {
+ const refs = await localforage.getItem('refBibleBurrito');
+ refs?.forEach((ref) => {
+ if (languageId !== null) {
+ if (ref.value.languages[0].tag === languageId) {
+ const supportedBooks = [];
+ Object.entries((ref.value.type.flavorType.currentScope)).forEach(
+ ([key]) => {
+ supportedBooks.push(key.toLowerCase());
+ },
+ );
+ applyBooksFilter(supportedBooks);
+ }
+ }
+ });
+ };
+ getSupportedBooks();
+ }, [languageId, applyBooksFilter]);
+
+ useEffect(() => {
+ async function setReference() {
+ await localforage.setItem('navigationHistory', [bookId, chapter]);
+ }
+ setReference();
+ }, [bookId, chapter]);
+
+ useEffect(() => {
+ if (openBook === false && openChapter === false) {
+ setCloseNavigation(true);
+ }
+ if (openBook || openChapter) {
+ setCloseNavigation(false);
+ }
+ }, [openChapter, openBook, setCloseNavigation]);
+
+ return (
+ <>
+
+
+ {bookName}
+
+
+
+ {chapterNumber}
+
+
+
+
+
+ <>
+
+
+
+
+
+
+
+ >
+ {/* )} */}
+ >
+ );
+}
+
+BibleNavigationX.propTypes = {
+ chapterNumber: PropTypes.number,
+ setChapterNumber: PropTypes.func,
+ setBook: PropTypes.func,
+ loading: PropTypes.bool,
+};
diff --git a/renderer/src/components/EditorPage/TextEditor/EditorMenuBar.jsx b/renderer/src/components/EditorPage/TextEditor/EditorMenuBar.jsx
index 9e48eda78..46385fa8c 100644
--- a/renderer/src/components/EditorPage/TextEditor/EditorMenuBar.jsx
+++ b/renderer/src/components/EditorPage/TextEditor/EditorMenuBar.jsx
@@ -6,8 +6,6 @@ import { LockClosedIcon, BookmarkIcon, LockOpenIcon } from '@heroicons/react/24/
// import BibleNavigationX from '@/components/EditorPage/TextEditor/BibleNavigationX';
import { useTranslation } from 'react-i18next';
import BibleNavigationX from './BibleNavigationX';
-import Buttons from './Buttons';
-import InsertMenu from './InsertMenu';
export default function EditorMenuBar(props) {
const {
@@ -17,9 +15,11 @@ export default function EditorMenuBar(props) {
verseNumber,
setVerseNumber,
handleSelectedFont,
- setTriggerVerseInsert,
handleEditorFontSize,
editorFontSize,
+ book,
+ setBook,
+ loading,
} = props;
const { t } = useTranslation();
@@ -39,13 +39,16 @@ export default function EditorMenuBar(props) {
};
return (
-
-
diff --git a/renderer/src/components/EditorPage/TextEditor/Lexical.jsx b/renderer/src/components/EditorPage/TextEditor/Lexical.jsx
new file mode 100644
index 000000000..329ce5ef6
--- /dev/null
+++ b/renderer/src/components/EditorPage/TextEditor/Lexical.jsx
@@ -0,0 +1,94 @@
+import React, {
+ useEffect, useState, useRef, useMemo,
+} from 'react';
+import {
+ Editor, getViewOptions, DEFAULT_VIEW_MODE, immutableNoteCallerNodeName, NoteEditor,
+} from '@biblionexus-foundation/scribe-editor';
+
+import NotesEditorHeader from './NotesEditorHeader';
+
+export default function LexicalEditor({
+ usjInput, onUsjChange, setNavRef, selectedFont, fontSize, textDirection, scrRef, setScrRef,
+}) {
+ const [usj, setUsj] = useState();
+ const editorRef = useRef(null);
+ const [isNoteEditorOpen, setIsNoteEditorOpen] = useState(false);
+ const [selectedNoteId, setSelectedNoteId] = useState('');
+
+ const [viewMode] = useState(DEFAULT_VIEW_MODE);
+ const viewOptions = useMemo(() => getViewOptions(viewMode), [viewMode]);
+
+ const nodeOptions = {
+ [immutableNoteCallerNodeName]: {
+ onClick: (e) => {
+ setIsNoteEditorOpen(true);
+ setSelectedNoteId(e.currentTarget.getAttribute('data-caller-id'));
+ },
+ },
+ };
+
+ const onChange = async (updatedUsj) => {
+ editorRef.current?.setUsj(updatedUsj);
+ onUsjChange(updatedUsj);
+ };
+ useEffect(() => {
+ console.log('usjInput', usjInput);
+ if (usjInput) {
+ setUsj(usjInput);
+ }
+ }, [usjInput]);
+ useEffect(() => {
+ const timeoutId = setTimeout(() => {
+ if (usj && editorRef.current) {
+ editorRef.current.setUsj(usj);
+ }
+ }, 1000);
+ return () => clearTimeout(timeoutId);
+ }, [usj]);
+
+ useEffect(() => {
+ console.log(scrRef);
+ setNavRef(scrRef);
+ }, [scrRef, setNavRef]);
+
+ return (
+ 1.3) ? 1.5 : '',
+ // }}
+ >
+
+
+
+
+ {isNoteEditorOpen && (
+
+ setIsNoteEditorOpen(false)}
+ />
+
+
+ )}
+
+ );
+}
diff --git a/renderer/src/components/EditorPage/TextEditor/NotesEditorHeader.jsx b/renderer/src/components/EditorPage/TextEditor/NotesEditorHeader.jsx
new file mode 100644
index 000000000..63d921138
--- /dev/null
+++ b/renderer/src/components/EditorPage/TextEditor/NotesEditorHeader.jsx
@@ -0,0 +1,27 @@
+import React from 'react';
+
+const NotesEditorHeader = ({ onClose }) => (
+
+);
+
+export default NotesEditorHeader;
diff --git a/renderer/src/components/EditorPage/TextEditor/conversionUtils.js b/renderer/src/components/EditorPage/TextEditor/conversionUtils.js
new file mode 100644
index 000000000..b86c732d5
--- /dev/null
+++ b/renderer/src/components/EditorPage/TextEditor/conversionUtils.js
@@ -0,0 +1,35 @@
+import USFMParser from 'sj-usfm-grammar';
+
+let usfmParserInstance;
+let usfmParserInitialized;
+
+export async function initializeParser() {
+ if (!usfmParserInstance) {
+ if (!usfmParserInitialized) {
+ usfmParserInitialized = await USFMParser.init();
+ }
+ await usfmParserInitialized;
+ usfmParserInstance = new USFMParser();
+ }
+ return usfmParserInstance;
+}
+
+export async function convertUsfmToUsj(usfm) {
+ if (!usfmParserInstance) {
+ usfmParserInstance = await initializeParser();
+ }
+ try {
+ const usj = usfmParserInstance.usfmToUsj(usfm);
+ return { usj };
+ } catch (e) {
+ return { usj: { content: [] }, error: e };
+ }
+}
+
+initializeParser()
+ .then(() => {
+ console.log('USFM Parser initialized successfully');
+ })
+ .catch((err) => {
+ console.error('Error initializing USFM Parser:', err);
+ });
diff --git a/renderer/src/components/EditorPage/TextEditor/hooks/saveToFile.js b/renderer/src/components/EditorPage/TextEditor/hooks/saveToFile.js
index b5ef6c340..a4923347d 100644
--- a/renderer/src/components/EditorPage/TextEditor/hooks/saveToFile.js
+++ b/renderer/src/components/EditorPage/TextEditor/hooks/saveToFile.js
@@ -1,10 +1,8 @@
import localforage from 'localforage';
-// import { readRefMeta } from '../../../core/reference/readRefMeta';
import { isElectron } from '@/core/handleElectron';
import writeToFile from '@/core/editor/writeToFile';
import { readRefBurrito } from '@/core/reference/readRefBurrito';
import packageInfo from '../../../../../../package.json';
-import { newPath } from '../../../../../../supabase';
// function to save to file.
export const saveToFile = async (usfmText, bookCode) => {
@@ -14,12 +12,12 @@ export const saveToFile = async (usfmText, bookCode) => {
const projectName = await localforage.getItem('currentProject');
const path = require('path');
const newpath = localStorage.getItem('userPath');
- const metaPath = isElectron() ? path.join(newpath, packageInfo.name, 'users', userName, 'projects', projectName, 'metadata.json') : `${newPath}/${userName}/projects/${projectName}/metadata.json`;
+ const metaPath = path.join(newpath, packageInfo.name, 'users', userName, 'projects', projectName, 'metadata.json');
const metaData = JSON.parse(await readRefBurrito({ metaPath }));
Object.entries(metaData.ingredients).forEach(async ([key, _ingredients]) => {
if (_ingredients.scope) {
const _bookID = Object.entries(_ingredients.scope)[0][0];
- if (_bookID === bookCode) {
+ if (_bookID.toUpperCase() === bookCode.toUpperCase()) {
await writeToFile({
username: userName,
projectname: projectName,
diff --git a/renderer/src/components/EditorPage/TextEditor/hooks/useReadUsfmFile.js b/renderer/src/components/EditorPage/TextEditor/hooks/useReadUsfmFile.js
index 193486311..f6d5e7438 100644
--- a/renderer/src/components/EditorPage/TextEditor/hooks/useReadUsfmFile.js
+++ b/renderer/src/components/EditorPage/TextEditor/hooks/useReadUsfmFile.js
@@ -1,20 +1,21 @@
-import { useEffect, useState, useContext } from 'react';
+import { useEffect, useState } from 'react';
import localforage from 'localforage';
-import { ReferenceContext } from '@/components/context/ReferenceContext';
import { readRefBurrito } from '../../../../core/reference/readRefBurrito';
import { readFile } from '../../../../core/editor/readFile';
import packageInfo from '../../../../../../package.json';
-// hook to fetch usfmfile from system drive
-export const useReadUsfmFile = () => {
+import { handleCache } from '../../LexicalEditor/cacheUtils';
+
+export const useReadUsfmFile = (bookId) => {
const [usfmData, setUsfmData] = useState([]);
const [bookAvailable, setbookAvailable] = useState(false);
- const {
- state: {
- bookId,
- },
- } = useContext(ReferenceContext);
+ const [usfmString, setUsfmString] = useState('');
+ const [cachedData, setCachedData] = useState({});
+ const [loading, setLoading] = useState(true);
+
useEffect(() => {
async function readLocalFile() {
+ console.log('reading book after switching bookId', bookId);
+ setLoading(true);
try {
const userProfile = await localforage.getItem('userProfile');
const userName = userProfile?.username;
@@ -32,26 +33,48 @@ export const useReadUsfmFile = () => {
}
});
const [currentBook] = _books.filter((bookObj) => bookObj.bookId === bookId?.toUpperCase());
+ const projectCachePath = path.join(newpath, packageInfo.name, 'users', userName, 'project_cache', projectName);
+ const fileCacheMapPath = path.join(projectCachePath, 'fileCacheMap.json');
+ const filePath = path.join(newpath, packageInfo.name, 'users', userName, 'projects', projectName, 'ingredients', `${bookId?.toUpperCase()}.usfm`);
+ console.log('+++++++++++++>', { filePath });
if (currentBook) {
const fileData = await readFile({ projectname: projectName, filename: currentBook.fileName, username: userName });
+ const cachedData = await handleCache(filePath, fileData, projectCachePath, fileCacheMapPath);
const books = [{
selectors: { org: 'unfoldingWord', lang: 'en', abbr: 'ult' },
- bookCode: currentBook.bookId.toLowerCase(),
+ bookCode: currentBook.bookId?.toLowerCase(),
data: fileData,
}];
setUsfmData(books);
setbookAvailable(true);
+ setUsfmString(fileData);
+ setCachedData(cachedData);
} else {
setUsfmData([]);
setbookAvailable(false);
}
- // setUsfmData(fileData);
+ setLoading(false);
} catch (err) {
+ setLoading(false);
// eslint-disable-next-line no-console
return console.log(err);
}
}
readLocalFile();
}, [bookId]);
- return { usfmData, bookAvailable };
+ return {
+ usfmData, bookAvailable, usfmString, bookId, cachedData, loading, // {{ edit_5 }}
+ };
};
+
+export async function getCachePaths(bookId) {
+ const path = require('path');
+ const userProfile = await localforage.getItem('userProfile');
+ const projectName = await localforage.getItem('currentProject');
+ const newPath = await localforage.getItem('userPath');
+ const userName = userProfile?.username;
+ const projectCachePath = path.join(newPath, packageInfo.name, 'users', userName, 'project_cache', projectName);
+ const fileCacheMapPath = path.join(projectCachePath, 'fileCacheMap.json');
+ const filePath = path.join(newPath, packageInfo.name, 'users', userName, 'projects', projectName, 'ingredients', `${bookId?.toUpperCase()}.usfm`);
+ return { filePath, projectCachePath, fileCacheMapPath };
+}
diff --git a/renderer/src/components/EditorPage/TextEditor/index.jsx b/renderer/src/components/EditorPage/TextEditor/index.jsx
index 76734ba1e..62fd4779b 100644
--- a/renderer/src/components/EditorPage/TextEditor/index.jsx
+++ b/renderer/src/components/EditorPage/TextEditor/index.jsx
@@ -1,127 +1,118 @@
import React, {
- useEffect, useState, useContext, Fragment,
+ useEffect, useState, useContext, useMemo,
} from 'react';
-import { useProskomma, useImport, useCatalog } from 'proskomma-react-hooks';
-import { useDeepCompareEffect } from 'use-deep-compare';
-import { ScribexContext } from '@/components/context/ScribexContext';
import { ReferenceContext } from '@/components/context/ReferenceContext';
-import { ProjectContext } from '@/components/context/ProjectContext';
-import EditorSideBar from '@/modules/editorsidebar/EditorSideBar';
+import { debounce } from 'lodash';
+
+import { LoadingSpinner } from '@/components/LoadingSpinner';
import { useReadUsfmFile } from './hooks/useReadUsfmFile';
-import htmlMap from './hooks/htmlmap';
-import usePerf from './hooks/usePerf';
import EditorMenuBar from './EditorMenuBar';
-import Editor from './Editor';
+import LexicalEditor from './Lexical';
+import { updateCacheNSaveFile } from '../LexicalEditor/updateAndSave';
+
+const defaultScrRef = {
+ bookCode: 'PSA',
+ chapterNum: 1,
+ verseNum: 1,
+};
export default function TextEditor() {
- const { state, actions } = useContext(ScribexContext);
- const { verbose } = state;
- const [selectedBook, setSelectedBook] = useState();
- const [bookChange, setBookChange] = useState(false);
const [chapterNumber, setChapterNumber] = useState(1);
const [verseNumber, setVerseNumber] = useState(1);
- const [triggerVerseInsert, setTriggerVerseInsert] = useState(false);
- // const [newVerChapNumber, setInsertNumber] = useState('');
- // const [insertVerseRChapter, setInsertVerseRChapter] = useState('');
-
- const { usfmData, bookAvailable } = useReadUsfmFile();
+ const [usjInput, setUsjInput] = useState();
+ const [scrRef, setScrRef] = useState(defaultScrRef);
+ const [navRef, setNavRef] = useState();
const {
- state: { bookId, selectedFont, editorFontSize },
+ state: {
+ bookId: defaultBookId, selectedFont, editorFontSize, projectScriptureDir,
+ },
actions: {
handleSelectedFont, onChangeChapter, onChangeVerse, handleEditorFontSize,
},
} = useContext(ReferenceContext);
+ const [book, setBook] = useState(defaultBookId);
const {
- states: { openSideBar },
- actions: { setOpenSideBar },
- } = useContext(ProjectContext);
-
- let selectedDocument;
-
- const { proskomma, stateId, newStateId } = useProskomma({ verbose });
- const { done } = useImport({
- proskomma,
- stateId,
- newStateId,
- documents: usfmData,
- });
-
- function closeSideBar(status) {
- setOpenSideBar(status);
- }
+ bookId, cachedData, loading,
+ } = useReadUsfmFile(book);
useEffect(() => {
- setSelectedBook(bookId.toUpperCase());
- setBookChange(true);
- }, [bookId]);
+ if (cachedData.error) {
+ console.error('Error parsing USFM', cachedData.error);
+ return;
+ }
+ const { usj } = cachedData;
+ if (!usj && usj?.entries(usj).length === 0) { return; }
+ console.log(usj);
+ setUsjInput(usj);
+ }, [bookId, cachedData]);
useEffect(() => {
+ console.log('bookchange', { book, chapterNumber, verseNumber });
+ setScrRef({
+ bookCode: book,
+ chapterNum: chapterNumber,
+ verseNum: verseNumber,
+ });
onChangeChapter(chapterNumber, 1);
onChangeVerse(verseNumber, 1);
// eslint-disable-next-line react-hooks/exhaustive-deps
- }, [chapterNumber, verseNumber]);
-
- const { catalog } = useCatalog({ proskomma, stateId, verbose });
- const { id: docSetId, documents } = (done && catalog.docSets[0]) || {};
- if (done) {
- selectedDocument = documents?.find(
- (doc) => doc.bookCode === selectedBook,
- );
- }
+ }, [chapterNumber, verseNumber, book]);
- const { bookCode, h: bookName } = selectedDocument || {};
- const ready = (docSetId && bookCode) || false;
- const isLoading = !done || !ready;
- const { state: perfState, actions: perfActions } = usePerf({
- proskomma,
- ready,
- docSetId,
- bookCode,
- verbose,
- htmlMap,
- });
- const { htmlPerf } = perfState;
-
- useDeepCompareEffect(() => {
- if (htmlPerf && htmlPerf.mainSequenceId !== state.sequenceIds[0]) {
- actions.setSequenceIds([htmlPerf?.mainSequenceId]);
+ useEffect(() => {
+ if (navRef) {
+ const { chapterNum, verseNum } = navRef;
+ console.log(navRef);
+ setChapterNumber(chapterNum);
+ setVerseNumber(verseNum);
}
- }, [htmlPerf, state.sequenceIds, perfState]);
+ }, [navRef]);
+
+ const handleUsjChange = useMemo(
+ () => debounce(async (updatedUsj) => {
+ updateCacheNSaveFile(updatedUsj, book);
+ console.log('usj updated', updatedUsj);
+ }, 1000),
+ [bookId],
+ );
+ useEffect(() => {
+ console.log({ selectedFont, editorFontSize });
+ }, [selectedFont, editorFontSize]);
const _props = {
- ...state,
- ...perfState,
- ...actions,
- ...perfActions,
- editorFontSize,
selectedFont,
chapterNumber,
- verseNumber,
- isLoading,
- bookName,
- bookChange,
- bookAvailable,
- handleEditorFontSize,
- setBookChange,
setChapterNumber,
+ verseNumber,
setVerseNumber,
+ book,
+ setBook,
handleSelectedFont,
- triggerVerseInsert,
- setTriggerVerseInsert,
+ scrRef,
+ setScrRef,
+ bookId,
+ loading,
+ editorFontSize,
+ handleEditorFontSize,
+ };
+
+ const props = {
+ selectedFont,
+ fontSize: editorFontSize,
+ textDirection: projectScriptureDir?.toLowerCase(),
+ usjInput,
+ onUsjChange: handleUsjChange,
+ setNavRef,
+ scrRef,
+ setScrRef,
+ bookId,
+
};
return (
- <>
-
-
-
-
-
- >
+
+
+ {(!usjInput || loading) ? : }
+
);
}
diff --git a/renderer/src/layouts/editor/SectionContainer.js b/renderer/src/layouts/editor/SectionContainer.js
index 4e4415eb2..26436dfc0 100644
--- a/renderer/src/layouts/editor/SectionContainer.js
+++ b/renderer/src/layouts/editor/SectionContainer.js
@@ -28,6 +28,22 @@ const SectionContainer = () => {
const data = fs.readFileSync(metaPath, 'utf-8');
const metadata = JSON.parse(data);
setEditor(metadata.type.flavorType.flavor.name);
+
+ if (metadata.type.flavorType.flavor.name === 'textTranslation') {
+ // Check for project_cache folder and create if it doesn't exist
+ const projectCachePath = path.join(newpath, packageInfo.name, 'users', username, 'project_cache', projectName);
+ if (!fs.existsSync(projectCachePath)) {
+ fs.mkdirSync(projectCachePath, { recursive: true });
+ console.log('Created project_cache folder:', projectCachePath);
+ }
+
+ // Check for fileCacheMap.json and create if it doesn't exist
+ const fileCacheMapPath = path.join(projectCachePath, 'fileCacheMap.json');
+ if (!fs.existsSync(fileCacheMapPath)) {
+ fs.writeFileSync(fileCacheMapPath, JSON.stringify({}), 'utf-8');
+ console.log('Created fileCacheMap.json:', fileCacheMapPath);
+ }
+ }
});
});
}, [editor]);
diff --git a/renderer/src/modules/editorsidebar/EditorSideBar.js b/renderer/src/modules/editorsidebar/EditorSideBar.js
index 34742ca90..24b166ffb 100644
--- a/renderer/src/modules/editorsidebar/EditorSideBar.js
+++ b/renderer/src/modules/editorsidebar/EditorSideBar.js
@@ -18,14 +18,15 @@ import {
BookmarkIcon,
} from '@heroicons/react/24/outline';
+import { NoteEditor } from '@biblionexus-foundation/scribe-editor';
import PinIcon from '@/icons/basil/Outline/Status/Pin.svg';
import CrossReferenceIcon from '@/icons/crossreference.svg';
import FootNotesIcon from '@/icons/footnotes.svg';
import Search from './Search';
-import CrossReferences from './CrossReferences';
+// import CrossReferences from './CrossReferences';
// import FootNotes from './FootNotes';
-import GraftEditor from './GraftEditor';
+// import GraftEditor from './GraftEditor';
import Comments from './Comments';
import Bookmarks from '../../components/EditorPage/BookMarks/Bookmarks';
@@ -54,7 +55,7 @@ export default function EditorSideBar(props) {
const {
isOpen,
closeSideBar,
- graftProps,
+ notesProps,
} = props;
const {
@@ -192,10 +193,18 @@ export default function EditorSideBar(props) {
{state.tabIndex === 0
&& }
- {state.tabIndex === 1
- && }
- {state.tabIndex === 2
- && }
+ {/* {state.tabIndex === 1
+ && } */}
+ {state.tabIndex === 2 && (
+
+ )}
+ {/* && } */}
{state.tabIndex === 3
&& }
{state.tabIndex === 4
diff --git a/styles/globals.css b/styles/globals.css
index c9e6f18fc..357fd53b4 100644
--- a/styles/globals.css
+++ b/styles/globals.css
@@ -109,7 +109,7 @@ p.paragraph:has(.chapter) {
}
.ref-editor ::selection {
- @apply bg-primary-50;
+ @apply bg-primary-50;
}
/* .perf .verse:after {
@@ -271,7 +271,7 @@ p.paragraph:has(.chapter) {
margin: 0.1em;
} */
.button {
- @apply flex h-8 cursor-pointer items-center justify-center rounded-lg p-2 text-xs font-bold outline-none xl:px-4;
+ @apply flex h-8 cursor-pointer items-center justify-center rounded-lg p-2 text-xs font-bold outline-none xl:px-4;
}
.pdfViewer {
@@ -575,28 +575,7 @@ MODAL SECTION SELECTION BLOCK END
#sundesmosToolbar {
background-color: #E5E7EB;
border-color: white;
-}
-
-.chunk-row:hover {
- background-color: rgba(135, 206, 250, 0.3);
-}
-
-div.draggable {
- border-color: #121212;
- border-width: 1px;
-}
-
-@media (prefers-color-scheme: dark) {
- .source-text {
- color: #ffffff;
- }
-}
-@media (prefers-color-scheme: light) {
- .source-text {
- color: #121212;
- }
-}
.prevent-select {
-webkit-user-select: none;
@@ -849,4 +828,2420 @@ Select scribe theme Start
align-self: "flex-end";
margin-top: 16;
margin-right: 16;
-}
\ No newline at end of file
+}
+
+
+}
+.editor-input {
+ text-align: start;
+}
+
+.editor-input > p {
+ direction: inherit;
+ margin-top: 0;
+ margin-bottom: 0;
+ line-height: 1.5;
+}
+
+/* USJ Nodes */
+
+.leadingFloat {
+ float: start;
+}
+.clearFloat {
+ clear: both;
+}
+.align_start {
+ text-align: start;
+}
+.align_center {
+ text-align: center;
+}
+.align_end {
+ text-align: end;
+}
+@font-face {
+ font-family: 'Charis SIL';
+ src: local('Charis SIL'), local('Charis SIL Bold'),
+ local('Charis SIL Bold Italic'), local('Charis SIL Italic'),
+ url('file:///C:/Windows/Fonts/CharisSIL-B.ttf');
+ font-weight: normal;
+}
+@font-face {
+ font-family: 'Charis SIL';
+ src: local('Charis SIL Bold');
+ font-weight: bold;
+}
+@font-face {
+ font-family: 'Charis SIL';
+ src: local('Charis SIL Italic');
+ font-style: italic;
+}
+@font-face {
+ font-family: 'Charis SIL';
+ src: local('Charis SIL Bold Italic');
+ font-weight: bold;
+ font-style: italic;
+}
+.formatted-font .usfm {
+ font-family: 'Charis SIL';
+ font-size: 12pt;
+}
+
+/* BookNode */
+
+.usfm_id {
+ display: none;
+}
+.formatted-font .usfm_id {
+ font-size: 100%;
+}
+
+/* ChapterNode, ImmutableChapterNode */
+
+.formatted-font .usfm_c {
+ @apply text-primary block break-before-column font-medium uppercase tracking-wider before:content-['Chapter_:_'];
+}
+.text-spacing[dir='ltr'] .usfm_c {
+ @apply pl-4 text-left;
+}
+.text-spacing[dir='rtl'] .usfm_c {
+ @apply pr-4 text-right;
+}
+.formatted-font .usfm_ca {
+ color: #007306;
+ font-size: 133%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_cp {
+ font-weight: bold;
+ color: #003380;
+ font-size: 150%;
+}
+.text-spacing .usfm_cp {
+ margin-bottom: 4pt;
+ margin-top: 8pt;
+}
+
+/* VerseNode, ImmutableVerseNode */
+
+.formatted-font .usfm_v {
+ @apply align-top text-xs uppercase tracking-wider text-primary;
+}
+.text-spacing[dir='ltr'] .usfm_v {
+ @apply text-left;
+}
+.text-spacing[dir='rtl'] .usfm_v {
+ @apply text-right;
+}
+
+.formatted-font .usfm_va {
+ color: #007306;
+ font-size: 100%;
+ vertical-align: text-top;
+ font-size: 66%;
+}
+
+.formatted-font .usfm_vp {
+ color: #003380;
+ font-size: 100%;
+ vertical-align: text-top;
+ font-size: 66%;
+}
+
+/* ParaNode */
+
+.formatted-font .usfm_usfm {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_ide {
+ font-size: 100%;
+ display: none;
+}
+
+.formatted-font .usfm_h {
+ font-size: 100%;
+ display: none;
+}
+
+.formatted-font .usfm_h1 {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_h2 {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_h3 {
+ font-size: 100%;
+}
+
+.usfm_toc1 {
+ @apply hidden;
+}
+.formatted-font .usfm_toc1 {
+ @apply font-bold italic text-green-900;
+}
+.text-spacing[dir='ltr'] .usfm_toc1 {
+ @apply ml-2 text-left;
+}
+.text-spacing[dir='rtl'] .usfm_toc1 {
+ @apply mr-2 text-right;
+}
+
+.usfm_toc2 {
+ @apply hidden;
+}
+.formatted-font .usfm_toc2 {
+ @apply italic text-green-900;
+}
+.text-spacing[dir='ltr'] .usfm_toc2 {
+ @apply ml-2 text-left;
+}
+.text-spacing[dir='rtl'] .usfm_toc2 {
+ @apply mr-2 text-right;
+}
+
+.usfm_toc3 {
+ @apply hidden;
+}
+.formatted-font .usfm_toc3 {
+ @apply font-bold italic text-red-500;
+}
+.text-spacing[dir='ltr'] .usfm_toc3 {
+ @apply ml-2 text-left;
+}
+.text-spacing[dir='rtl'] .usfm_toc3 {
+ @apply mr-2 text-right;
+}
+
+.formatted-font .usfm_toca1 {
+ color: #8c8c8c;
+ font-size: 83%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_toca2 {
+ color: #8c8c8c;
+ font-size: 83%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_toca3 {
+ color: #8c8c8c;
+ font-size: 83%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_rem {
+ color: #003380;
+ font-size: 100%;
+}
+
+.formatted-font .usfm_sts {
+ color: #003380;
+ font-size: 100%;
+}
+
+.formatted-font .usfm_restore {
+ color: #003380;
+ font-size: 100%;
+}
+
+.formatted-font .usfm_imt {
+ font-weight: bold;
+ font-size: 116%;
+}
+.text-spacing .usfm_imt {
+ text-align: center;
+ margin-bottom: 4pt;
+ margin-top: 8pt;
+}
+
+.formatted-font .usfm_imt1 {
+ font-weight: bold;
+ font-size: 116%;
+}
+.text-spacing .usfm_imt1 {
+ text-align: center;
+ margin-bottom: 4pt;
+ margin-top: 8pt;
+}
+
+.formatted-font .usfm_imt2 {
+ font-size: 108%;
+ font-style: italic;
+}
+.text-spacing .usfm_imt2 {
+ text-align: center;
+ margin-bottom: 3pt;
+ margin-top: 6pt;
+}
+
+.formatted-font .usfm_imt3 {
+ font-weight: bold;
+ font-size: 100%;
+}
+.text-spacing .usfm_imt3 {
+ text-align: center;
+ margin-bottom: 2pt;
+ margin-top: 2pt;
+}
+
+.formatted-font .usfm_imt4 {
+ font-size: 100%;
+ font-style: italic;
+}
+.text-spacing .usfm_imt4 {
+ text-align: center;
+ margin-bottom: 2pt;
+ margin-top: 2pt;
+}
+
+.formatted-font .usfm_imte {
+ font-weight: bold;
+ font-size: 166%;
+}
+.text-spacing .usfm_imte {
+ text-align: center;
+ margin-bottom: 4pt;
+ margin-top: 8pt;
+}
+
+.formatted-font .usfm_imte1 {
+ font-weight: bold;
+ font-size: 166%;
+}
+.text-spacing .usfm_imte1 {
+ text-align: center;
+ margin-bottom: 4pt;
+ margin-top: 8pt;
+}
+
+.formatted-font .usfm_imte2 {
+ font-size: 133%;
+ font-style: italic;
+}
+.text-spacing .usfm_imte2 {
+ text-align: center;
+ margin-bottom: 2pt;
+}
+
+.formatted-font .usfm_is {
+ font-weight: bold;
+ font-size: 116%;
+}
+.text-spacing .usfm_is {
+ text-align: center;
+ margin-bottom: 4pt;
+ margin-top: 8pt;
+}
+
+.formatted-font .usfm_is1 {
+ font-weight: bold;
+ font-size: 116%;
+}
+.text-spacing .usfm_is1 {
+ text-align: center;
+ margin-bottom: 4pt;
+ margin-top: 8pt;
+}
+
+.formatted-font .usfm_is2 {
+ font-weight: bold;
+ font-size: 100%;
+}
+.text-spacing .usfm_is2 {
+ text-align: center;
+ margin-bottom: 4pt;
+ margin-top: 8pt;
+}
+
+.formatted-font .usfm_iot {
+ font-weight: bold;
+ font-size: 100%;
+}
+.text-spacing .usfm_iot {
+ text-align: center;
+ margin-bottom: 4pt;
+ margin-top: 8pt;
+}
+
+.formatted-font .usfm_io {
+ font-size: 100%;
+}
+.text-spacing[dir='ltr'] .usfm_io {
+ margin-left: 10vw;
+}
+.text-spacing[dir='rtl'] .usfm_io {
+ margin-right: 10vw;
+}
+
+.formatted-font .usfm_io1 {
+ font-size: 100%;
+}
+.text-spacing[dir='ltr'] .usfm_io1 {
+ margin-left: 10vw;
+}
+.text-spacing[dir='rtl'] .usfm_io1 {
+ margin-right: 10vw;
+}
+
+.formatted-font .usfm_io2 {
+ font-size: 100%;
+}
+.text-spacing[dir='ltr'] .usfm_io2 {
+ margin-left: 15vw;
+}
+.text-spacing[dir='rtl'] .usfm_io2 {
+ margin-right: 15vw;
+}
+
+.formatted-font .usfm_io3 {
+ font-size: 100%;
+}
+.text-spacing[dir='ltr'] .usfm_io3 {
+ margin-left: 20vw;
+}
+.text-spacing[dir='rtl'] .usfm_io3 {
+ margin-right: 20vw;
+}
+
+.formatted-font .usfm_io4 {
+ font-size: 100%;
+}
+.text-spacing[dir='ltr'] .usfm_io4 {
+ margin-left: 25vw;
+}
+.text-spacing[dir='rtl'] .usfm_io4 {
+ margin-right: 25vw;
+}
+
+.formatted-font .usfm_ior {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_ip {
+ font-size: 100%;
+}
+.text-spacing .usfm_ip {
+ text-indent: 2.5vw;
+}
+
+.formatted-font .usfm_im {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_ipi {
+ font-size: 100%;
+}
+.text-spacing .usfm_ipi {
+ text-indent: 2.5vw;
+ margin-left: 5vw;
+ margin-right: 5vw;
+}
+
+.formatted-font .usfm_imi {
+ font-size: 100%;
+}
+.text-spacing .usfm_imi {
+ margin-left: 5vw;
+ margin-right: 5vw;
+}
+
+.formatted-font .usfm_ili {
+ font-size: 100%;
+}
+.text-spacing .usfm_ili {
+ text-indent: -7.5vw;
+}
+.text-spacing[dir='ltr'] .usfm_ili {
+ margin-left: 10vw;
+}
+.text-spacing[dir='rtl'] .usfm_ili {
+ margin-right: 10vw;
+}
+
+.formatted-font .usfm_ili1 {
+ font-size: 100%;
+}
+.text-spacing .usfm_ili1 {
+ text-indent: -7.5vw;
+}
+.text-spacing[dir='ltr'] .usfm_ili1 {
+ margin-left: 10vw;
+}
+.text-spacing[dir='rtl'] .usfm_ili1 {
+ margin-right: 10vw;
+}
+
+.formatted-font .usfm_ili2 {
+ font-size: 100%;
+}
+.text-spacing .usfm_ili2 {
+ text-indent: -7.5vw;
+}
+.text-spacing[dir='ltr'] .usfm_ili2 {
+ margin-left: 15vw;
+}
+.text-spacing[dir='rtl'] .usfm_ili2 {
+ margin-right: 15vw;
+}
+
+.formatted-font .usfm_ipq {
+ font-size: 100%;
+ font-style: italic;
+}
+.text-spacing .usfm_ipq {
+ text-indent: 2.5vw;
+ margin-left: 5vw;
+ margin-right: 5vw;
+}
+
+.formatted-font .usfm_imq {
+ font-size: 100%;
+ font-style: italic;
+}
+.text-spacing .usfm_imq {
+ margin-left: 5vw;
+ margin-right: 5vw;
+}
+
+.usfm_ipr {
+ text-align: end;
+}
+.formatted-font .usfm_ipr {
+ font-size: 100%;
+ font-style: italic;
+}
+.text-spacing .usfm_ipr {
+ margin-left: 5vw;
+ margin-right: 5vw;
+}
+
+.formatted-font .usfm_ib {
+ font-size: 83%;
+}
+
+.formatted-font .usfm_iq {
+ font-size: 100%;
+ font-style: italic;
+}
+.text-spacing .usfm_iq {
+ text-indent: -15vw;
+}
+.text-spacing[dir='ltr'] .usfm_iq {
+ margin-left: 20vw;
+}
+.text-spacing[dir='rtl'] .usfm_iq {
+ margin-right: 20vw;
+}
+
+.formatted-font .usfm_iq1 {
+ font-size: 100%;
+ font-style: italic;
+}
+.text-spacing .usfm_iq1 {
+ text-indent: -15vw;
+}
+.text-spacing[dir='ltr'] .usfm_iq1 {
+ margin-left: 20vw;
+}
+.text-spacing[dir='rtl'] .usfm_iq1 {
+ margin-right: 20vw;
+}
+
+.formatted-font .usfm_iq2 {
+ font-size: 100%;
+ font-style: italic;
+}
+.text-spacing .usfm_iq2 {
+ text-indent: -10vw;
+}
+.text-spacing[dir='ltr'] .usfm_iq2 {
+ margin-left: 20vw;
+}
+.text-spacing[dir='rtl'] .usfm_iq2 {
+ margin-right: 20vw;
+}
+
+.formatted-font .usfm_iq3 {
+ font-size: 100%;
+ font-style: italic;
+}
+.text-spacing .usfm_iq3 {
+ text-indent: -5vw;
+}
+.text-spacing[dir='ltr'] .usfm_iq3 {
+ margin-left: 20vw;
+}
+.text-spacing[dir='rtl'] .usfm_iq3 {
+ margin-right: 20vw;
+}
+
+.formatted-font .usfm_iex {
+ font-size: 100%;
+}
+.text-spacing .usfm_iex {
+ text-indent: 2.5vw;
+ margin-bottom: 4pt;
+ margin-top: 4pt;
+}
+
+.formatted-font .usfm_iqt {
+ font-size: 100%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_ie {
+ font-size: 83%;
+}
+
+.formatted-font .usfm_cl {
+ font-weight: bold;
+ font-size: 150%;
+}
+.text-spacing .usfm_cl {
+ text-align: center;
+ margin-bottom: 4pt;
+ margin-top: 8pt;
+}
+
+.formatted-font .usfm_cd {
+ font-size: 91%;
+}
+.text-spacing .usfm_cd {
+ margin-bottom: 4pt;
+ margin-top: 8pt;
+}
+
+.formatted-font .usfm_p {
+ font-size: 100%;
+}
+.text-spacing .usfm_p {
+ text-indent: 2.5vw;
+}
+
+.formatted-font .usfm_m {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_po {
+ font-size: 100%;
+}
+.text-spacing .usfm_po {
+ text-indent: 2.5vw;
+ margin-bottom: 4pt;
+ margin-top: 4pt;
+}
+
+.usfm_pr {
+ text-align: end;
+}
+.formatted-font .usfm_pr {
+ font-size: 100%;
+}
+
+.usfm_cls {
+ text-align: end;
+}
+.formatted-font .usfm_cls {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_pmo {
+ font-size: 100%;
+}
+.text-spacing .usfm_pmo {
+ margin-left: 5vw;
+ margin-right: 5vw;
+}
+
+.formatted-font .usfm_pm {
+ font-size: 100%;
+}
+.text-spacing .usfm_pm {
+ text-indent: 2.5vw;
+ margin-left: 5vw;
+ margin-right: 5vw;
+}
+
+.formatted-font .usfm_pmc {
+ font-size: 100%;
+}
+.text-spacing .usfm_pmc {
+ margin-left: 5vw;
+ margin-right: 5vw;
+}
+
+.usfm_pmr {
+ text-align: end;
+}
+.formatted-font .usfm_pmr {
+ font-size: 100%;
+}
+.text-spacing .usfm_pmr {
+ margin-left: 5vw;
+ margin-right: 5vw;
+}
+
+.formatted-font .usfm_pi {
+ font-size: 100%;
+}
+.text-spacing .usfm_pi {
+ text-indent: 2.5vw;
+ margin-left: 5vw;
+ margin-right: 5vw;
+}
+
+.formatted-font .usfm_pi1 {
+ font-size: 100%;
+}
+.text-spacing .usfm_pi1 {
+ text-indent: 2.5vw;
+ margin-left: 5vw;
+ margin-right: 5vw;
+}
+
+.formatted-font .usfm_pi2 {
+ font-size: 100%;
+}
+.text-spacing .usfm_pi2 {
+ text-indent: 2.5vw;
+}
+.text-spacing[dir='ltr'] .usfm_pi2 {
+ margin-left: 10vw;
+ margin-right: 5vw;
+}
+.text-spacing[dir='rtl'] .usfm_pi2 {
+ margin-left: 5vw;
+ margin-right: 10vw;
+}
+
+.formatted-font .usfm_pi3 {
+ font-size: 100%;
+}
+.text-spacing .usfm_pi3 {
+ text-indent: 2.5vw;
+}
+.text-spacing[dir='ltr'] .usfm_pi3 {
+ margin-left: 15vw;
+ margin-right: 5vw;
+}
+.text-spacing[dir='rtl'] .usfm_pi3 {
+ margin-left: 5vw;
+ margin-right: 15vw;
+}
+
+.formatted-font .usfm_pc {
+ font-size: 100%;
+}
+.text-spacing .usfm_pc {
+ text-align: center;
+}
+
+.formatted-font .usfm_mi {
+ font-size: 100%;
+}
+.text-spacing .usfm_mi {
+ margin-left: 5vw;
+ margin-right: 5vw;
+}
+
+.formatted-font .usfm_nb {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_q {
+ font-size: 100%;
+}
+.text-spacing .usfm_q {
+ text-indent: -10vw;
+}
+.text-spacing[dir='ltr'] .usfm_q {
+ margin-left: 15vw;
+}
+.text-spacing[dir='rtl'] .usfm_q {
+ margin-right: 15vw;
+}
+
+.formatted-font .usfm_q1 {
+ font-size: 100%;
+}
+.text-spacing .usfm_q1 {
+ text-indent: -10vw;
+}
+.text-spacing[dir='ltr'] .usfm_q1 {
+ margin-left: 15vw;
+}
+.text-spacing[dir='rtl'] .usfm_q1 {
+ margin-right: 15vw;
+}
+
+.formatted-font .usfm_q2 {
+ font-size: 100%;
+}
+.text-spacing .usfm_q2 {
+ text-indent: -7.5vw;
+}
+.text-spacing[dir='ltr'] .usfm_q2 {
+ margin-left: 15vw;
+}
+.text-spacing[dir='rtl'] .usfm_q2 {
+ margin-right: 15vw;
+}
+
+.formatted-font .usfm_q3 {
+ font-size: 100%;
+}
+.text-spacing .usfm_q3 {
+ text-indent: -5vw;
+}
+.text-spacing[dir='ltr'] .usfm_q3 {
+ margin-left: 15vw;
+}
+.text-spacing[dir='rtl'] .usfm_q3 {
+ margin-right: 15vw;
+}
+
+.formatted-font .usfm_q4 {
+ font-size: 100%;
+}
+.text-spacing .usfm_q4 {
+ text-indent: -2.5vw;
+}
+.text-spacing[dir='ltr'] .usfm_q4 {
+ margin-left: 15vw;
+}
+.text-spacing[dir='rtl'] .usfm_q4 {
+ margin-right: 15vw;
+}
+
+.formatted-font .usfm_qc {
+ font-size: 100%;
+}
+.text-spacing .usfm_qc {
+ text-align: center;
+}
+
+.usfm_qr {
+ text-align: end;
+}
+.formatted-font .usfm_qr {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_qa {
+ font-size: 100%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_qm {
+ font-size: 100%;
+}
+.text-spacing .usfm_qm {
+ text-indent: -15vw;
+}
+.text-spacing[dir='ltr'] .usfm_qm {
+ margin-left: 20vw;
+}
+.text-spacing[dir='rtl'] .usfm_qm {
+ margin-right: 20vw;
+}
+
+.formatted-font .usfm_qm1 {
+ font-size: 100%;
+}
+.text-spacing .usfm_qm1 {
+ text-indent: -15vw;
+}
+.text-spacing[dir='ltr'] .usfm_qm1 {
+ margin-left: 20vw;
+}
+.text-spacing[dir='rtl'] .usfm_qm1 {
+ margin-right: 20vw;
+}
+
+.formatted-font .usfm_qm2 {
+ font-size: 100%;
+}
+.text-spacing .usfm_qm2 {
+ text-indent: -10vw;
+}
+.text-spacing[dir='ltr'] .usfm_qm2 {
+ margin-left: 20vw;
+}
+.text-spacing[dir='rtl'] .usfm_qm2 {
+ margin-right: 20vw;
+}
+
+.formatted-font .usfm_qm3 {
+ font-size: 100%;
+}
+.text-spacing .usfm_qm3 {
+ text-indent: -5vw;
+}
+.text-spacing[dir='ltr'] .usfm_qm3 {
+ margin-left: 20vw;
+}
+.text-spacing[dir='rtl'] .usfm_qm3 {
+ margin-right: 20vw;
+}
+
+.formatted-font .usfm_qd {
+ font-size: 100%;
+ font-style: italic;
+}
+.text-spacing[dir='ltr'] .usfm_qd {
+ margin-left: 5vw;
+}
+.text-spacing[dir='rtl'] .usfm_qd {
+ margin-right: 5vw;
+}
+
+.formatted-font .usfm_b {
+ font-size: 83%;
+}
+
+.formatted-font .usfm_mt {
+ font-weight: bold;
+ font-size: 166%;
+}
+.text-spacing .usfm_mt {
+ text-align: center;
+ margin-bottom: 4pt;
+ margin-top: 8pt;
+}
+
+.formatted-font .usfm_mt1 {
+ @apply text-2xl font-bold;
+}
+.text-spacing .usfm_mt1 {
+ @apply my-2 text-center;
+}
+
+.formatted-font .usfm_mt2 {
+ font-size: 133%;
+ font-style: italic;
+}
+.text-spacing .usfm_mt2 {
+ text-align: center;
+ margin-bottom: 2pt;
+}
+
+.formatted-font .usfm_mt3 {
+ font-weight: bold;
+ font-size: 133%;
+}
+.text-spacing .usfm_mt3 {
+ text-align: center;
+ margin-bottom: 2pt;
+ margin-top: 2pt;
+}
+
+.formatted-font .usfm_mt4 {
+ font-size: 100%;
+}
+.text-spacing .usfm_mt4 {
+ text-align: center;
+ margin-bottom: 2pt;
+ margin-top: 2pt;
+}
+
+.formatted-font .usfm_mte {
+ font-weight: bold;
+ font-size: 166%;
+}
+.text-spacing .usfm_mte {
+ text-align: center;
+ margin-bottom: 4pt;
+ margin-top: 8pt;
+}
+
+.formatted-font .usfm_mte1 {
+ font-weight: bold;
+ font-size: 166%;
+}
+.text-spacing .usfm_mte1 {
+ text-align: center;
+ margin-bottom: 4pt;
+ margin-top: 8pt;
+}
+
+.formatted-font .usfm_mte2 {
+ font-size: 133%;
+ font-style: italic;
+}
+.text-spacing .usfm_mte2 {
+ text-align: center;
+ margin-bottom: 2pt;
+}
+
+.formatted-font .usfm_ms {
+ font-weight: bold;
+ font-size: 116%;
+}
+.text-spacing .usfm_ms {
+ text-align: center;
+ margin-bottom: 4pt;
+ margin-top: 16pt;
+}
+
+.formatted-font .usfm_ms1 {
+ @apply text-lg;
+}
+.text-spacing .usfm_ms1 {
+ @apply m-2 text-center;
+}
+
+.formatted-font .usfm_ms2 {
+ font-weight: bold;
+ font-size: 116%;
+}
+.text-spacing .usfm_ms2 {
+ text-align: center;
+ margin-bottom: 4pt;
+ margin-top: 16pt;
+}
+
+.formatted-font .usfm_ms3 {
+ font-size: 116%;
+ font-style: italic;
+}
+.text-spacing .usfm_ms3 {
+ text-align: center;
+ margin-bottom: 4pt;
+ margin-top: 16pt;
+}
+
+.formatted-font .usfm_mr {
+ font-size: 100%;
+ font-style: italic;
+}
+.text-spacing .usfm_mr {
+ text-align: center;
+ margin-bottom: 4pt;
+}
+
+.formatted-font .usfm_s {
+ font-weight: bold;
+ font-size: 100%;
+}
+.text-spacing .usfm_s {
+ text-align: center;
+ margin-bottom: 4pt;
+ margin-top: 8pt;
+}
+
+.formatted-font .usfm_s1 {
+ font-weight: bold;
+ font-size: 100%;
+}
+.text-spacing .usfm_s1 {
+ text-align: center;
+ margin-bottom: 4pt;
+ margin-top: 8pt;
+}
+
+.formatted-font .usfm_s2 {
+ font-size: 100%;
+ font-style: italic;
+}
+.text-spacing .usfm_s2 {
+ text-align: center;
+ margin-bottom: 4pt;
+ margin-top: 8pt;
+}
+
+.formatted-font .usfm_s3 {
+ font-size: 100%;
+ font-style: italic;
+}
+.text-spacing .usfm_s3 {
+ margin-bottom: 3pt;
+ margin-top: 6pt;
+}
+
+.formatted-font .usfm_s4 {
+ font-size: 100%;
+ font-style: italic;
+}
+.text-spacing .usfm_s4 {
+ margin-bottom: 3pt;
+ margin-top: 6pt;
+}
+
+.formatted-font .usfm_sr {
+ font-weight: bold;
+ font-size: 100%;
+}
+.text-spacing .usfm_sr {
+ text-align: center;
+ margin-bottom: 4pt;
+}
+
+.formatted-font .usfm_r {
+ font-size: 100%;
+ font-style: italic;
+}
+.text-spacing .usfm_r {
+ text-align: center;
+ margin-bottom: 4pt;
+}
+
+.formatted-font .usfm_sp {
+ font-size: 100%;
+ font-style: italic;
+}
+.text-spacing .usfm_sp {
+ margin-bottom: 4pt;
+ margin-top: 8pt;
+}
+
+.formatted-font .usfm_d {
+ font-size: 100%;
+ font-style: italic;
+}
+.text-spacing .usfm_d {
+ text-align: center;
+ margin-bottom: 4pt;
+ margin-top: 4pt;
+}
+
+.text-spacing .usfm_sd {
+ margin-bottom: 24pt;
+ margin-top: 24pt;
+}
+
+.text-spacing .usfm_sd1 {
+ margin-bottom: 24pt;
+ margin-top: 24pt;
+}
+
+.text-spacing .usfm_sd2 {
+ margin-bottom: 18pt;
+ margin-top: 18pt;
+}
+
+.text-spacing .usfm_sd3 {
+ margin-bottom: 12pt;
+ margin-top: 12pt;
+}
+
+.text-spacing .usfm_sd4 {
+ margin-bottom: 8pt;
+ margin-top: 8pt;
+}
+
+.formatted-font .usfm_lh {
+ font-size: 100%;
+}
+.text-spacing .usfm_lh {
+ text-indent: 2.5vw;
+}
+
+.formatted-font .usfm_li {
+ font-size: 100%;
+}
+.text-spacing .usfm_li {
+ text-indent: -7.5vw;
+}
+.text-spacing[dir='ltr'] .usfm_li {
+ margin-left: 10vw;
+}
+.text-spacing[dir='rtl'] .usfm_li {
+ margin-right: 10vw;
+}
+
+.formatted-font .usfm_li1 {
+ font-size: 100%;
+}
+.text-spacing .usfm_li1 {
+ text-indent: -7.5vw;
+}
+.text-spacing[dir='ltr'] .usfm_li1 {
+ margin-left: 10vw;
+}
+.text-spacing[dir='rtl'] .usfm_li1 {
+ margin-right: 10vw;
+}
+
+.formatted-font .usfm_li2 {
+ font-size: 100%;
+}
+.text-spacing .usfm_li2 {
+ text-indent: -7.5vw;
+}
+.text-spacing[dir='ltr'] .usfm_li2 {
+ margin-left: 15vw;
+}
+.text-spacing[dir='rtl'] .usfm_li2 {
+ margin-right: 15vw;
+}
+
+.formatted-font .usfm_li3 {
+ font-size: 100%;
+}
+.text-spacing .usfm_li3 {
+ text-indent: -7.5vw;
+}
+.text-spacing[dir='ltr'] .usfm_li3 {
+ margin-left: 20vw;
+}
+.text-spacing[dir='rtl'] .usfm_li3 {
+ margin-right: 20vw;
+}
+
+.formatted-font .usfm_li4 {
+ font-size: 100%;
+}
+.text-spacing .usfm_li4 {
+ text-indent: -7.5vw;
+}
+.text-spacing[dir='ltr'] .usfm_li4 {
+ margin-left: 25vw;
+}
+.text-spacing[dir='rtl'] .usfm_li4 {
+ margin-right: 25vw;
+}
+
+.formatted-font .usfm_lf {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_lim {
+ font-size: 100%;
+}
+.text-spacing .usfm_lim {
+ text-indent: -7.5vw;
+}
+.text-spacing[dir='ltr'] .usfm_lim {
+ margin-left: 15vw;
+ margin-right: 5vw;
+}
+.text-spacing[dir='rtl'] .usfm_lim {
+ margin-left: 5vw;
+ margin-right: 15vw;
+}
+
+.formatted-font .usfm_lim1 {
+ font-size: 100%;
+}
+.text-spacing .usfm_lim1 {
+ text-indent: -7.5vw;
+}
+.text-spacing[dir='ltr'] .usfm_lim1 {
+ margin-left: 15vw;
+ margin-right: 5vw;
+}
+.text-spacing[dir='rtl'] .usfm_lim1 {
+ margin-left: 5vw;
+ margin-right: 15vw;
+}
+
+.formatted-font .usfm_lim2 {
+ font-size: 100%;
+}
+.text-spacing .usfm_lim2 {
+ text-indent: -7.5vw;
+}
+.text-spacing[dir='ltr'] .usfm_lim2 {
+ margin-left: 20vw;
+}
+.text-spacing[dir='rtl'] .usfm_lim2 {
+ margin-right: 20vw;
+}
+
+.formatted-font .usfm_lim3 {
+ font-size: 100%;
+}
+.text-spacing .usfm_lim3 {
+ text-indent: -7.5vw;
+}
+.text-spacing[dir='ltr'] .usfm_lim3 {
+ margin-left: 25vw;
+}
+.text-spacing[dir='rtl'] .usfm_lim3 {
+ margin-right: 25vw;
+}
+
+.formatted-font .usfm_lim4 {
+ font-size: 100%;
+}
+.text-spacing .usfm_lim4 {
+ text-indent: -7.5vw;
+}
+.text-spacing[dir='ltr'] .usfm_lim4 {
+ margin-left: 30vw;
+}
+.text-spacing[dir='rtl'] .usfm_lim4 {
+ margin-right: 30vw;
+}
+
+.usfm_lit {
+ text-align: end;
+}
+.formatted-font .usfm_lit {
+ font-weight: bold;
+ font-size: 100%;
+}
+
+.formatted-font .usfm_ph {
+ font-size: 100%;
+}
+.text-spacing .usfm_ph {
+ text-indent: -5vw;
+}
+.text-spacing[dir='ltr'] .usfm_ph {
+ margin-left: 10vw;
+}
+.text-spacing[dir='rtl'] .usfm_ph {
+ margin-right: 10vw;
+}
+
+.formatted-font .usfm_ph1 {
+ font-size: 100%;
+}
+.text-spacing .usfm_ph1 {
+ text-indent: -5vw;
+}
+.text-spacing[dir='ltr'] .usfm_ph1 {
+ margin-left: 10vw;
+}
+.text-spacing[dir='rtl'] .usfm_ph1 {
+ margin-right: 10vw;
+}
+
+.formatted-font .usfm_ph2 {
+ font-size: 100%;
+}
+.text-spacing .usfm_ph2 {
+ text-indent: -5vw;
+}
+.text-spacing[dir='ltr'] .usfm_ph2 {
+ margin-left: 15vw;
+}
+.text-spacing[dir='rtl'] .usfm_ph2 {
+ margin-right: 15vw;
+}
+
+.formatted-font .usfm_ph3 {
+ font-size: 100%;
+}
+.text-spacing .usfm_ph3 {
+ text-indent: -5vw;
+}
+.text-spacing[dir='ltr'] .usfm_ph3 {
+ margin-left: 20vw;
+}
+.text-spacing[dir='rtl'] .usfm_ph3 {
+ margin-right: 20vw;
+}
+
+/* CharNode */
+
+.formatted-font .usfm_qs {
+ font-size: 100%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_qac {
+ font-size: 100%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_litl {
+ font-size: 100%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_lik {
+ font-size: 100%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_liv {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_liv1 {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_liv2 {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_liv3 {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_liv4 {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_liv5 {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_rq {
+ font-size: 83%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_qt {
+ font-weight: bold;
+ font-size: 100%;
+}
+
+.formatted-font .usfm_nd {
+ font-size: 100%;
+ text-decoration: underline;
+}
+
+.formatted-font .usfm_tl {
+ font-size: 100%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_dc {
+ font-style: italic;
+}
+
+.formatted-font .usfm_bk {
+ font-size: 100%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_sig {
+ font-size: 100%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_pn {
+ font-weight: bold;
+ font-size: 100%;
+ text-decoration: underline;
+}
+
+.formatted-font .usfm_png {
+ font-size: 100%;
+ text-decoration: underline;
+}
+
+.formatted-font .usfm_addpn {
+ font-weight: bold;
+ font-size: 100%;
+ font-style: italic;
+ text-decoration: underline;
+}
+
+.formatted-font .usfm_wj {
+ color: #d43128;
+ font-size: 100%;
+}
+
+.formatted-font .usfm_k {
+ font-weight: bold;
+ font-size: 100%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_sls {
+ font-size: 100%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_ord {
+ vertical-align: text-top;
+ font-size: 66%;
+}
+
+.formatted-font .usfm_add {
+ font-weight: bold;
+ font-style: italic;
+}
+
+.formatted-font .usfm_no {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_it {
+ font-size: 100%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_bd {
+ font-weight: bold;
+ font-size: 100%;
+}
+
+.formatted-font .usfm_bdit {
+ font-weight: bold;
+ font-size: 100%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_em {
+ font-size: 100%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_sc {
+ font-size: 100%;
+ font-variant: small-caps;
+}
+
+.formatted-font .usfm_sup {
+ vertical-align: text-top;
+ font-size: 66%;
+}
+
+.formatted-font .usfm_pb {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_fig {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_jmp {
+ color: #003380;
+ text-decoration: underline;
+}
+
+.formatted-font .usfm_pro {
+ font-size: 83%;
+}
+
+.formatted-font .usfm_rb {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_w {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_wh {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_wg {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_wa {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_ndx {
+ font-size: 100%;
+}
+
+/* Footnote NoteNode */
+
+.formatted-font .usfm_f {
+ font-size: 80%;
+ position: relative;
+ top: -0.5em;
+}
+
+.formatted-font .usfm_fe {
+ font-size: 100%;
+}
+
+/* Footnote CharNode */
+
+.formatted-font .usfm_fr {
+ font-weight: bold;
+ font-size: 100%;
+}
+
+.formatted-font .usfm_ft {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_fk {
+ font-weight: bold;
+ font-size: 100%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_fq {
+ font-size: 100%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_fqa {
+ font-size: 100%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_fl {
+ font-weight: bold;
+ font-size: 100%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_fw {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_fp {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_fv {
+ vertical-align: text-top;
+ font-size: 66%;
+}
+
+.formatted-font .usfm_fdc {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_fm {
+ vertical-align: text-top;
+ font-size: 66%;
+}
+
+/* Cross-reference NoteNode */
+
+.formatted-font .usfm_x {
+ font-size: 100%;
+}
+
+/* Cross-reference CharNode */
+
+.formatted-font .usfm_xo {
+ font-weight: bold;
+ font-size: 100%;
+}
+
+.formatted-font .usfm_xop {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_xt {
+ font-size: 100%;
+ unicode-bidi: embed;
+}
+
+.formatted-font .usfm_xta {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_xk {
+ font-size: 100%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_xq {
+ font-size: 100%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_xot {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_xnt {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_xdc {
+ font-size: 100%;
+}
+
+/* periph */
+
+.formatted-font .usfm_periph {
+ font-weight: bold;
+ color: #e87217;
+ font-size: 116%;
+}
+.text-spacing .usfm_periph {
+ margin-bottom: 4pt;
+ margin-top: 16pt;
+}
+
+.formatted-font .usfm_p1 {
+ font-size: 100%;
+}
+.text-spacing .usfm_p1 {
+ text-indent: 2.5vw;
+}
+
+.formatted-font .usfm_p2 {
+ font-size: 100%;
+}
+.text-spacing .usfm_p2 {
+ text-indent: 2.5vw;
+}
+.text-spacing[dir='ltr'] .usfm_p2 {
+ margin-left: 2.5vw;
+}
+.text-spacing[dir='rtl'] .usfm_p2 {
+ margin-right: 2.5vw;
+}
+
+.formatted-font .usfm_k1 {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_k2 {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_xtSee {
+ color: #003380;
+ font-size: 100%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_xtSeeAlso {
+ color: #003380;
+ font-size: 100%;
+ font-style: italic;
+}
+
+/* MilestoneNode */
+
+.formatted-font .usfm_qt-s {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_qt-e {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_qt1-s {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_qt1-e {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_qt2-s {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_qt2-e {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_qt3-s {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_qt3-e {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_qt4-s {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_qt4-e {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_qt5-s {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_qt5-e {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_ts-s {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_ts-e {
+ font-size: 100%;
+}
+
+/* table */
+
+.formatted-font .usfm_tr {
+ font-size: 100%;
+}
+.text-spacing .usfm_tr {
+ text-indent: -5vw;
+}
+.text-spacing[dir='ltr'] .usfm_tr {
+ margin-left: 10vw;
+}
+.text-spacing[dir='rtl'] .usfm_tr {
+ margin-right: 10vw;
+}
+
+.formatted-font .usfm_th1 {
+ font-size: 100%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_th2 {
+ font-size: 100%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_th3 {
+ font-size: 100%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_th4 {
+ font-size: 100%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_th5 {
+ font-size: 100%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_tc1 {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_tc2 {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_tc3 {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_tc4 {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_tc5 {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_thc1 {
+ font-size: 100%;
+ font-style: italic;
+}
+.text-spacing .usfm_thc1 {
+ text-align: center;
+}
+
+.formatted-font .usfm_thc2 {
+ font-size: 100%;
+ font-style: italic;
+}
+.text-spacing .usfm_thc2 {
+ text-align: center;
+}
+
+.formatted-font .usfm_thc3 {
+ font-size: 100%;
+ font-style: italic;
+}
+.text-spacing .usfm_thc3 {
+ text-align: center;
+}
+
+.formatted-font .usfm_thc4 {
+ font-size: 100%;
+ font-style: italic;
+}
+.text-spacing .usfm_thc4 {
+ text-align: center;
+}
+
+.formatted-font .usfm_thc5 {
+ font-size: 100%;
+ font-style: italic;
+}
+.text-spacing .usfm_thc5 {
+ text-align: center;
+}
+
+.formatted-font .usfm_tcc1 {
+ font-size: 100%;
+}
+.text-spacing .usfm_tcc1 {
+ text-align: center;
+}
+
+.formatted-font .usfm_tcc2 {
+ font-size: 100%;
+}
+.text-spacing .usfm_tcc2 {
+ text-align: center;
+}
+
+.formatted-font .usfm_tcc3 {
+ font-size: 100%;
+}
+.text-spacing .usfm_tcc3 {
+ text-align: center;
+}
+
+.formatted-font .usfm_tcc4 {
+ font-size: 100%;
+}
+.text-spacing .usfm_tcc4 {
+ text-align: center;
+}
+
+.formatted-font .usfm_tcc5 {
+ font-size: 100%;
+}
+.text-spacing .usfm_tcc5 {
+ text-align: center;
+}
+
+.formatted-font .usfm_thr1 {
+ font-size: 100%;
+ font-style: italic;
+}
+.text-spacing .usfm_thr1 {
+ text-align: end;
+}
+
+.formatted-font .usfm_thr2 {
+ font-size: 100%;
+ font-style: italic;
+}
+.text-spacing .usfm_thr2 {
+ text-align: end;
+}
+
+.formatted-font .usfm_thr3 {
+ font-size: 100%;
+ font-style: italic;
+}
+.text-spacing .usfm_thr3 {
+ text-align: end;
+}
+
+.formatted-font .usfm_thr4 {
+ font-size: 100%;
+ font-style: italic;
+}
+.text-spacing .usfm_thr4 {
+ text-align: end;
+}
+
+.formatted-font .usfm_thr5 {
+ font-size: 100%;
+ font-style: italic;
+}
+.text-spacing .usfm_thr5 {
+ text-align: end;
+}
+
+.formatted-font .usfm_tcr1 {
+ font-size: 100%;
+}
+.text-spacing .usfm_tcr1 {
+ text-align: end;
+}
+
+.formatted-font .usfm_tcr2 {
+ font-size: 100%;
+}
+.text-spacing .usfm_tcr2 {
+ text-align: end;
+}
+
+.formatted-font .usfm_tcr3 {
+ font-size: 100%;
+}
+.text-spacing .usfm_tcr3 {
+ text-align: end;
+}
+
+.formatted-font .usfm_tcr4 {
+ font-size: 100%;
+}
+.text-spacing .usfm_tcr4 {
+ text-align: end;
+}
+
+.formatted-font .usfm_tcr5 {
+ font-size: 100%;
+}
+.text-spacing .usfm_tcr5 {
+ text-align: end;
+}
+
+/* table/unknown */
+
+.formatted-font .usfm_tr1 {
+ font-size: 100%;
+}
+.text-spacing .usfm_tr1 {
+ text-indent: -5vw;
+}
+.text-spacing[dir='ltr'] .usfm_tr1 {
+ margin-left: 10vw;
+}
+.text-spacing[dir='rtl'] .usfm_tr1 {
+ margin-right: 10vw;
+}
+
+.formatted-font .usfm_tr2 {
+ font-size: 100%;
+}
+.text-spacing .usfm_tr2 {
+ text-indent: -5vw;
+}
+.text-spacing[dir='ltr'] .usfm_tr2 {
+ margin-left: 15vw;
+}
+.text-spacing[dir='rtl'] .usfm_tr2 {
+ margin-right: 15vw;
+}
+
+.formatted-font .usfm_ps {
+ font-size: 100%;
+}
+.text-spacing .usfm_ps {
+ text-indent: 2.5vw;
+}
+
+.formatted-font .usfm_psi {
+ font-size: 100%;
+}
+.text-spacing .usfm_psi {
+ text-indent: 2.5vw;
+ margin-left: 5vw;
+ margin-right: 5vw;
+}
+
+.formatted-font .usfm_fs {
+ font-size: 100%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_wr {
+ font-size: 100%;
+ font-style: italic;
+}
+
+.formatted-font .usfm_pub {
+ font-size: 83%;
+}
+
+.formatted-font .usfm_toc {
+ font-size: 83%;
+}
+
+.formatted-font .usfm_pref {
+ font-size: 83%;
+}
+
+.formatted-font .usfm_intro {
+ font-size: 83%;
+}
+
+.formatted-font .usfm_conc {
+ font-size: 83%;
+}
+
+.formatted-font .usfm_glo {
+ font-size: 83%;
+}
+
+.formatted-font .usfm_idx {
+ font-size: 83%;
+}
+
+.formatted-font .usfm_maps {
+ font-size: 83%;
+}
+
+.formatted-font .usfm_cov {
+ font-size: 83%;
+}
+
+.formatted-font .usfm_spine {
+ font-size: 83%;
+}
+
+.formatted-font .usfm_pubinfo {
+ color: #003380;
+ font-size: 100%;
+}
+
+.formatted-font .usfm_zpa-xb {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_zpa-xc {
+ font-weight: bold;
+ font-size: 100%;
+}
+
+.formatted-font .usfm_zpa-xv {
+ font-size: 100%;
+}
+
+.formatted-font .usfm_zpa-d {
+ font-size: 100%;
+}
+
+body {
+ background-color: rgba(252, 252, 252, 1);
+ color: rgba(25, 25, 25, 1);
+}
+
+.marker {
+ unicode-bidi: isolate;
+}
+.formatted-font .marker {
+ color: rgba(140, 140, 140, 1);
+ font-size: 0.7em;
+}
+
+/* Used for unformatted displays */
+.markerplain {
+ unicode-bidi: isolate;
+}
+
+.notetext {
+ unicode-bidi: embed;
+}
+
+.attribute {
+ color: rgba(170, 170, 170, 1);
+}
+
+.attribute:hover {
+ color: rgba(25, 25, 25, 1);
+}
+
+.invalid {
+ color: rgba(204, 30, 20, 1);
+ font-weight: bold;
+}
+
+/* NoteNode, ImmutableNoteCallerNode */
+
+.immutable-note-caller > button,
+/* Styles for Preview (and Ruby) views */
+.caller_preview,
+.previewcallee {
+ color: rgba(18, 82, 179, 1);
+ font-weight: bold;
+ line-height: 1;
+ vertical-align: super;
+ font-size: 0.66em;
+}
+
+.immutable-note-caller > button {
+ cursor: pointer;
+ text-decoration: none;
+ border: 0;
+ padding: 0;
+ background-color: inherit;
+}
+
+.immutable-note-caller[data-caller='-'] {
+ display: none;
+}
+
+.formatted-font .immutable-note-caller {
+ @apply text-xs text-blue-500;
+}
+
+.caller_big {
+ unicode-bidi: normal;
+ color: rgba(18, 82, 179, 1);
+ font-weight: bold;
+ text-indent: 0pt;
+ vertical-align: text-top;
+ font-size: 0.66em;
+}
+
+.caller_small {
+ unicode-bidi: normal;
+ color: rgba(18, 82, 179, 1);
+ font-family: Times New Roman;
+ vertical-align: text-top;
+ text-indent: 0pt;
+ font-size: 0.66em;
+}
+
+.caller_highlight {
+ background-color: #ffffb5;
+ border-top: solid 1px #0000ff;
+ border-bottom: solid 1px #0000ff;
+}
+
+.opennote {
+ color: #7777ff;
+}
+
+rt {
+ cursor: pointer;
+}
+
+/* Style statues */
+.status_unknown {
+ color: rgba(204, 30, 20, 1);
+ font-weight: bold;
+}
+
+.status_invalid {
+ border-bottom: 1px solid rgba(204, 30, 20, 1);
+ color: rgba(204, 30, 20, 1);
+}
+
+.caption {
+ text-align: center;
+ font-style: italic;
+ font-weight: bold;
+}
+
+.figure {
+ text-align: center;
+}
+
+.sidebar {
+ border: solid 1px rgba(18, 82, 179, 1);
+ margin-left: 10px;
+}
+
+/* VerseNode, ImmutableVerseNode */
+
+/*
+.formatted-font .verse {
+ @apply text-cyan-500;
+ background-color: rgba(222, 222, 222, 1);
+ vertical-align: super;
+ font-size: 0.66em;
+}
+.text-spacing .verse {
+ margin: 0px 2px 0px 2px;
+ padding: 0px 1px 0px 1px;
+ text-indent: 0in;
+ white-space: nowrap;
+}
+*/
+
+.annot_comment_todo {
+ border-bottom: 1px dashed #888888;
+}
+.annot_comment_todo {
+ border-bottom: 1px dashed #888888;
+}
+span.unread img {
+ background-color: #ffff99;
+ position: relative;
+ bottom: -1px; /* negative of border-width to align baseline */
+ border-width: 1px;
+ border-style: solid;
+ border-color: #808080;
+}
+span.read img {
+ background-color: transparent;
+ position: relative;
+ bottom: 0px;
+ border-width: 0px;
+ border-style: none;
+}
+
+.annot_comment_todo {
+ border-bottom: 1px dashed #888888;
+}
+
+.annot_comment_done {
+ border-bottom: 1px dashed #888888;
+}
+
+.annot_greencursor {
+ background-color: rgba(152, 235, 157, 1);
+}
+.annot_goldcursor {
+ background-color: rgba(255, 255, 163, 1);
+}
+.annot_bluecursor {
+ background-color: rgba(204, 224, 255, 1);
+}
+.annot_greycursor {
+ background-color: rgba(222, 222, 222, 1);
+}
+.annot_violetcursor {
+ background-color: rgba(233, 212, 255, 1);
+}
+
+.annot_spellingerror {
+ background-repeat: repeat-x;
+ background-position: left bottom;
+ padding-bottom: 0px;
+ vertical-align: text-top;
+}
+
+.annot_spellingunknown {
+ background-repeat: repeat-x;
+ background-position: left bottom;
+ padding-bottom: 0px;
+ vertical-align: text-top;
+}
+
+.found_term {
+ background-color: rgba(222, 222, 222, 1);
+ text-indent: 0;
+ margin-left: 0;
+ display: inline-block;
+ border-bottom-style: solid;
+ border-bottom-width: medium medium thick medium;
+ border-bottom-color: rgba(252, 252, 252, 1);
+ text-decoration: inherit;
+}
+.guessed_term {
+ background-color: rgba(255, 191, 143, 1);
+ text-indent: 0;
+ margin-left: 0;
+ display: inline-block;
+ border-bottom-style: solid;
+ border-bottom-width: medium medium thick medium;
+ border-bottom-color: rgba(252, 252, 252, 1);
+ text-decoration: inherit;
+}
+.found_term.unselected_term {
+ background-color: rgba(222, 222, 222, 0.6);
+ text-indent: 0;
+ margin-left: 0;
+ display: inline-block;
+ border-bottom-style: solid;
+ border-bottom-width: medium medium thick medium;
+ border-bottom-color: rgba(252, 252, 252, 1);
+ text-decoration: inherit;
+}
+.guessed_term.unselected_term {
+ background-color: rgba(255, 191, 143, 0.3);
+ text-indent: 0;
+ margin-left: 0;
+ display: inline-block;
+ border-bottom-style: solid;
+ border-bottom-width: medium medium thick medium;
+ border-bottom-color: rgba(252, 252, 252, 1);
+ text-decoration: inherit;
+}
+.selected_term {
+ border-style: none none solid none;
+ text-indent: 0;
+ margin-left: 0;
+ display: inline-block;
+ border-bottom-style: solid;
+ border-bottom-width: medium medium thick medium;
+ border-bottom-color: rgba(252, 252, 252, 1);
+ text-decoration: inherit;
+}
+.annot_reference_link {
+ border-bottom: 1px solid #93c4ff;
+}
+.annot_invalid_reference {
+ border-bottom: 1px solid #ff8080;
+}
+.annot_checkError {
+ border-top: 1px solid #ff0000;
+ border-bottom: 1px solid #ff0000;
+ background-color: rgba(255, 204, 204, 0.5);
+}
+
+/* ContextMenuPlugin */
+
+.auto-embed-menu {
+ width: 150px;
+}
+
+.typeahead-popover {
+ background: #fff;
+ box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.3);
+ border-radius: 8px;
+}
+
+.typeahead-popover ul {
+ padding: 0;
+ list-style: none;
+ margin: 0;
+ border-radius: 8px;
+ max-height: 200px;
+ overflow-y: scroll;
+ -ms-overflow-style: none;
+ scrollbar-width: none;
+}
+
+.typeahead-popover ul::-webkit-scrollbar {
+ display: none;
+}
+
+.typeahead-popover ul li {
+ margin: 0;
+ min-width: 180px;
+ font-size: 14px;
+ outline: none;
+ cursor: pointer;
+ border-radius: 8px;
+}
+
+.typeahead-popover ul li.selected {
+ background: #eee;
+}
+
+.typeahead-popover li {
+ margin: 0 8px 0 8px;
+ padding: 8px;
+ color: #050505;
+ cursor: pointer;
+ line-height: 16px;
+ font-size: 15px;
+ display: flex;
+ align-content: center;
+ flex-direction: row;
+ flex-shrink: 0;
+ background-color: #fff;
+ border-radius: 8px;
+ border: 0;
+}
+
+.typeahead-popover li.active {
+ display: flex;
+ width: 20px;
+ height: 20px;
+ background-size: contain;
+}
+
+.typeahead-popover li:first-child {
+ border-radius: 8px 8px 0px 0px;
+}
+
+.typeahead-popover li:last-child {
+ border-radius: 0px 0px 8px 8px;
+}
+
+.typeahead-popover li:hover {
+ background-color: #eee;
+}
+
+.typeahead-popover li .text {
+ display: flex;
+ line-height: 20px;
+ flex-grow: 1;
+ min-width: 150px;
+}
+
+.typeahead-popover li .icon {
+ display: flex;
+ width: 20px;
+ height: 20px;
+ user-select: none;
+ margin-right: 8px;
+ line-height: 16px;
+ background-size: contain;
+ background-repeat: no-repeat;
+ background-position: center;
+}
diff --git a/yarn.lock b/yarn.lock
index 84fb8d3dc..92ded781c 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1187,6 +1187,27 @@
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
+"@biblionexus-foundation/scribe-editor@0.1.1-scribe-v1":
+ version "0.1.1-scribe-v1"
+ resolved "https://registry.yarnpkg.com/@biblionexus-foundation/scribe-editor/-/scribe-editor-0.1.1-scribe-v1.tgz#06ea19cae327fae1014af16415f2cab187bbd6e4"
+ integrity sha512-2KN24s733dJN0PFdDTlebFAl5UcAk+iRlgzcY5u1bI2Mg93XOK/hqctg8Bc92HLmXaOOmiajYxNu6Z3ydjxQIw==
+ dependencies:
+ "@biblionexus-foundation/scripture-utilities" "^0.0.4"
+ "@lexical/mark" "^0.17.1"
+ "@lexical/react" "^0.17.1"
+ "@lexical/selection" "^0.17.1"
+ "@lexical/utils" "^0.17.1"
+ autoprefixer "^10.4.20"
+ fast-equals "^5.0.1"
+ lexical "^0.17.1"
+
+"@biblionexus-foundation/scripture-utilities@^0.0.4":
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/@biblionexus-foundation/scripture-utilities/-/scripture-utilities-0.0.4.tgz#aac4cd5c7ffd98b60990b661b475f2c0f8a5a832"
+ integrity sha512-EslK90TulsLaePMRhcJV/lClFC7NTdbQXbNCXbMN4rR07ES9ZSqKRKaMelNOtWh0eZgXa+glBf7mPC2vdwM6uQ==
+ dependencies:
+ "@xmldom/xmldom" "^0.8.10"
+
"@capacitor/app@5.0.6":
version "5.0.6"
resolved "https://registry.yarnpkg.com/@capacitor/app/-/app-5.0.6.tgz#2ee02551115fd2e92dc7e81bc30a6c6fa78efa66"
@@ -2643,6 +2664,207 @@
resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1"
integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==
+"@lexical/clipboard@0.17.1":
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/@lexical/clipboard/-/clipboard-0.17.1.tgz#816b2559e60c5cfb5df5c6a4d1d1dcd850662d14"
+ integrity sha512-OVqnEfWX8XN5xxuMPo6BfgGKHREbz++D5V5ISOiml0Z8fV/TQkdgwqbBJcUdJHGRHWSUwdK7CWGs/VALvVvZyw==
+ dependencies:
+ "@lexical/html" "0.17.1"
+ "@lexical/list" "0.17.1"
+ "@lexical/selection" "0.17.1"
+ "@lexical/utils" "0.17.1"
+ lexical "0.17.1"
+
+"@lexical/code@0.17.1":
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/@lexical/code/-/code-0.17.1.tgz#1db1cd221fb6ec74342e8a6526ec8ac370f4c06b"
+ integrity sha512-ZspfTm6g6dN3nAb4G5bPp3SqxzdkB/bjGfa0uRKMU6/eBKtrMUgZsGxt0a8JRZ1eq2TZrQhx+l1ceRoLXii/bQ==
+ dependencies:
+ "@lexical/utils" "0.17.1"
+ lexical "0.17.1"
+ prismjs "^1.27.0"
+
+"@lexical/devtools-core@0.17.1":
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/@lexical/devtools-core/-/devtools-core-0.17.1.tgz#08e0e0fe7312486a41b49d75c075d6edf60fc11e"
+ integrity sha512-SzL1EX9Rt5GptIo87t6nDxAc9TtYtl6DyAPNz/sCltspdd69KQgs23sTRa26/tkNFCS1jziRN7vpN3mlnmm5wA==
+ dependencies:
+ "@lexical/html" "0.17.1"
+ "@lexical/link" "0.17.1"
+ "@lexical/mark" "0.17.1"
+ "@lexical/table" "0.17.1"
+ "@lexical/utils" "0.17.1"
+ lexical "0.17.1"
+
+"@lexical/dragon@0.17.1":
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/@lexical/dragon/-/dragon-0.17.1.tgz#e196a8a226889f0d0a7ef271163e9cecd53b8a85"
+ integrity sha512-lhBRKP7RlhiVCLtF0qiNqmMhEO6cQB43sMe7d4bvuY1G2++oKY/XAJPg6QJZdXRrCGRQ6vZ26QRNhRPmCxL5Ng==
+ dependencies:
+ lexical "0.17.1"
+
+"@lexical/hashtag@0.17.1":
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/@lexical/hashtag/-/hashtag-0.17.1.tgz#137896cff6d7d2e3638cfc8cadf1d3e035809c14"
+ integrity sha512-XtP0BI8vEewAe7tzq9MC49UPUvuChuNJI/jqFp+ezZlt/RUq0BClQCOPuSlrTJhluvE2rWnUnOnVMk8ILRvggQ==
+ dependencies:
+ "@lexical/utils" "0.17.1"
+ lexical "0.17.1"
+
+"@lexical/history@0.17.1":
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/@lexical/history/-/history-0.17.1.tgz#864f8bd5450bc6a2b513e02c42f022299400e63b"
+ integrity sha512-OU/ohajz4FXchUhghsWC7xeBPypFe50FCm5OePwo767G7P233IztgRKIng2pTT4zhCPW7S6Mfl53JoFHKehpWA==
+ dependencies:
+ "@lexical/utils" "0.17.1"
+ lexical "0.17.1"
+
+"@lexical/html@0.17.1":
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/@lexical/html/-/html-0.17.1.tgz#746ecfeea6a1aef3b0a5ce821cf059262f182dd5"
+ integrity sha512-yGG+K2DXl7Wn2DpNuZ0Y3uCHJgfHkJN3/MmnFb4jLnH1FoJJiuy7WJb/BRRh9H+6xBJ9v70iv+kttDJ0u1xp5w==
+ dependencies:
+ "@lexical/selection" "0.17.1"
+ "@lexical/utils" "0.17.1"
+ lexical "0.17.1"
+
+"@lexical/link@0.17.1":
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/@lexical/link/-/link-0.17.1.tgz#ef93c41710e33028512986334c98df7f0ad285c4"
+ integrity sha512-qFJEKBesZAtR8kfJfIVXRFXVw6dwcpmGCW7duJbtBRjdLjralOxrlVKyFhW9PEXGhi4Mdq2Ux16YnnDncpORdQ==
+ dependencies:
+ "@lexical/utils" "0.17.1"
+ lexical "0.17.1"
+
+"@lexical/list@0.17.1":
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/@lexical/list/-/list-0.17.1.tgz#8b29d42fe310b25de0a160577adf5fc0b7c2a874"
+ integrity sha512-k9ZnmQuBvW+xVUtWJZwoGtiVG2cy+hxzkLGU4jTq1sqxRIoSeGcjvhFAK8JSEj4i21SgkB1FmkWXoYK5kbwtRA==
+ dependencies:
+ "@lexical/utils" "0.17.1"
+ lexical "0.17.1"
+
+"@lexical/mark@0.17.1", "@lexical/mark@^0.17.1":
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/@lexical/mark/-/mark-0.17.1.tgz#58e74f494e3dc4a43b5b5efd1b28436f2941f937"
+ integrity sha512-V82SSRjvygmV+ZMwVpy5gwgr2ZDrJpl3TvEDO+G5I4SDSjbgvua8hO4dKryqiDVlooxQq9dsou0GrZ9Qtm6rYg==
+ dependencies:
+ "@lexical/utils" "0.17.1"
+ lexical "0.17.1"
+
+"@lexical/markdown@0.17.1":
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/@lexical/markdown/-/markdown-0.17.1.tgz#e5435f4aa711f0859433eba2b96ee2afb04b636a"
+ integrity sha512-uexR9snyT54jfQTrbr/GZAtzX+8Oyykr4p1HS0vCVL1KU5MDuP2PoyFfOv3rcfB2TASc+aYiINhU2gSXzwCHNg==
+ dependencies:
+ "@lexical/code" "0.17.1"
+ "@lexical/link" "0.17.1"
+ "@lexical/list" "0.17.1"
+ "@lexical/rich-text" "0.17.1"
+ "@lexical/text" "0.17.1"
+ "@lexical/utils" "0.17.1"
+ lexical "0.17.1"
+
+"@lexical/offset@0.17.1":
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/@lexical/offset/-/offset-0.17.1.tgz#3c008d9a0eb17ff0a056e6db4eab61f1ae909522"
+ integrity sha512-fX0ZSIFWwUKAjxf6l21vyXFozJGExKWyWxA+EMuOloNAGotHnAInxep0Mt8t/xcvHs7luuyQUxEPw7YrTJP7aw==
+ dependencies:
+ lexical "0.17.1"
+
+"@lexical/overflow@0.17.1":
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/@lexical/overflow/-/overflow-0.17.1.tgz#f158c5498cac353764d7f0c8c53b42ee14582f5b"
+ integrity sha512-oElVDq486R3rO2+Zz0EllXJGpW3tN0tfcH+joZ5h36+URKuNeKddqkJuDRvgSLOr9l8Jhtv3+/YKduPJVKMz6w==
+ dependencies:
+ lexical "0.17.1"
+
+"@lexical/plain-text@0.17.1":
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/@lexical/plain-text/-/plain-text-0.17.1.tgz#da03dfee8862622c150e64db823065a4eff751cd"
+ integrity sha512-CSvi4j1a4ame0OAvOKUCCmn2XrNsWcST4lExGTa9Ei/VIh8IZ+a97h4Uby8T3lqOp10x+oiizYWzY30pb9QaBg==
+ dependencies:
+ "@lexical/clipboard" "0.17.1"
+ "@lexical/selection" "0.17.1"
+ "@lexical/utils" "0.17.1"
+ lexical "0.17.1"
+
+"@lexical/react@^0.17.1":
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/@lexical/react/-/react-0.17.1.tgz#ec9595e6d554d3d8787885db4558848233c2ce33"
+ integrity sha512-DI4k25tO0E1WyozrjaLgKMOmLjOB7+39MT4eZN9brPlU7g+w0wzdGbTZUPgPmFGIKPK+MSLybCwAJCK97j8HzQ==
+ dependencies:
+ "@lexical/clipboard" "0.17.1"
+ "@lexical/code" "0.17.1"
+ "@lexical/devtools-core" "0.17.1"
+ "@lexical/dragon" "0.17.1"
+ "@lexical/hashtag" "0.17.1"
+ "@lexical/history" "0.17.1"
+ "@lexical/link" "0.17.1"
+ "@lexical/list" "0.17.1"
+ "@lexical/mark" "0.17.1"
+ "@lexical/markdown" "0.17.1"
+ "@lexical/overflow" "0.17.1"
+ "@lexical/plain-text" "0.17.1"
+ "@lexical/rich-text" "0.17.1"
+ "@lexical/selection" "0.17.1"
+ "@lexical/table" "0.17.1"
+ "@lexical/text" "0.17.1"
+ "@lexical/utils" "0.17.1"
+ "@lexical/yjs" "0.17.1"
+ lexical "0.17.1"
+ react-error-boundary "^3.1.4"
+
+"@lexical/rich-text@0.17.1":
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/@lexical/rich-text/-/rich-text-0.17.1.tgz#c74b8d5d2ca767e021c313e4f3258e1ecf5cd1a6"
+ integrity sha512-T3kvj4P1OpedX9jvxN3WN8NP1Khol6mCW2ScFIRNRz2dsXgyN00thH1Q1J/uyu7aKyGS7rzcY0rb1Pz1qFufqQ==
+ dependencies:
+ "@lexical/clipboard" "0.17.1"
+ "@lexical/selection" "0.17.1"
+ "@lexical/utils" "0.17.1"
+ lexical "0.17.1"
+
+"@lexical/selection@0.17.1", "@lexical/selection@^0.17.1":
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/@lexical/selection/-/selection-0.17.1.tgz#9a537e69fec4e5682b43b226239c78fd7af19811"
+ integrity sha512-qBKVn+lMV2YIoyRELNr1/QssXx/4c0id9NCB/BOuYlG8du5IjviVJquEF56NEv2t0GedDv4BpUwkhXT2QbNAxA==
+ dependencies:
+ lexical "0.17.1"
+
+"@lexical/table@0.17.1":
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/@lexical/table/-/table-0.17.1.tgz#62473f95a96c44ab20e4a1c1dec4b53a5093897c"
+ integrity sha512-2fUYPmxhyuMQX3MRvSsNaxbgvwGNJpHaKx1Ldc+PT2MvDZ6ALZkfsxbi0do54Q3i7dOon8/avRp4TuVaCnqvoA==
+ dependencies:
+ "@lexical/utils" "0.17.1"
+ lexical "0.17.1"
+
+"@lexical/text@0.17.1":
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/@lexical/text/-/text-0.17.1.tgz#b54ce8c7e6d891e063321d340172053bb43bbd87"
+ integrity sha512-zD2pAGXaMfPpT8PeNrx3+n0+jGnQORHyn0NEBO+hnyacKfUq5z5sI6Gebsq5NwH789bRadmJM5LvX5w8fsuv6w==
+ dependencies:
+ lexical "0.17.1"
+
+"@lexical/utils@0.17.1", "@lexical/utils@^0.17.1":
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/@lexical/utils/-/utils-0.17.1.tgz#58465121a977a04b7995efde6fde8ca97cbfff8d"
+ integrity sha512-jCQER5EsvhLNxKH3qgcpdWj/necUb82Xjp8qWQ3c0tyL07hIRm2tDRA/s9mQmvcP855HEZSmGVmR5SKtkcEAVg==
+ dependencies:
+ "@lexical/list" "0.17.1"
+ "@lexical/selection" "0.17.1"
+ "@lexical/table" "0.17.1"
+ lexical "0.17.1"
+
+"@lexical/yjs@0.17.1":
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/@lexical/yjs/-/yjs-0.17.1.tgz#6d13506f168f465fd6e68cc64aa822b6c49adedb"
+ integrity sha512-9mn5PDtaH5uLMH6hQ59EAx5FkRzmJJFcVs3E6zSIbtgkG3UASR3CFEfgsLKTjl/GC5NnTGuMck+jXaupDVBhOg==
+ dependencies:
+ "@lexical/offset" "0.17.1"
+ lexical "0.17.1"
+
"@malept/cross-spawn-promise@^1.1.0":
version "1.1.1"
resolved "https://registry.yarnpkg.com/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz#504af200af6b98e198bce768bc1730c6936ae01d"
@@ -3236,11 +3458,6 @@
"@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0"
-"@nolyfill/is-core-module@1.0.39":
- version "1.0.39"
- resolved "https://registry.yarnpkg.com/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz#3dc35ba0f1e66b403c00b39344f870298ebb1c8e"
- integrity sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==
-
"@npmcli/arborist@^5.6.3":
version "5.6.3"
resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-5.6.3.tgz#40810080272e097b4a7a4f56108f4a31638a9874"
@@ -3413,13 +3630,6 @@
read-package-json-fast "^2.0.3"
which "^2.0.2"
-"@ory/kratos-client@^0.10.1":
- version "0.10.1"
- resolved "https://registry.yarnpkg.com/@ory/kratos-client/-/kratos-client-0.10.1.tgz#4957233e4ef6e1845e28765d32244ef89e69b93b"
- integrity sha512-WfoEW1HKeKUkG+57oShb6D3xENM3DpRbUxvVxbPZkJUKzFlXpBzbX71k2oQ6ajv6cy0ULVEKFLNcHpAoGjraNA==
- dependencies:
- axios "^0.21.4"
-
"@parcel/watcher-android-arm64@2.4.1":
version "2.4.1"
resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.4.1.tgz#c2c19a3c442313ff007d2d7a9c2c1dd3e1c9ca84"
@@ -5160,7 +5370,7 @@
lodash.isequal "^4.5.0"
use-deep-compare "^1.1.0"
-"@xmldom/xmldom@^0.8.8":
+"@xmldom/xmldom@^0.8.10", "@xmldom/xmldom@^0.8.8":
version "0.8.10"
resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99"
integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==
@@ -5291,13 +5501,6 @@ agent-base@6, agent-base@^6.0.2:
dependencies:
debug "4"
-agent-base@^7.0.2, agent-base@^7.1.0, agent-base@^7.1.1:
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317"
- integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==
- dependencies:
- debug "^4.3.4"
-
agentkeepalive@^4.2.1:
version "4.5.0"
resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923"
@@ -5925,6 +6128,18 @@ autoprefixer@^10.4.13:
picocolors "^1.0.1"
postcss-value-parser "^4.2.0"
+autoprefixer@^10.4.20:
+ version "10.4.20"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.20.tgz#5caec14d43976ef42e32dcb4bd62878e96be5b3b"
+ integrity sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==
+ dependencies:
+ browserslist "^4.23.3"
+ caniuse-lite "^1.0.30001646"
+ fraction.js "^4.3.7"
+ normalize-range "^0.1.2"
+ picocolors "^1.0.1"
+ postcss-value-parser "^4.2.0"
+
available-typed-arrays@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846"
@@ -6681,6 +6896,16 @@ browserslist@^4.0.0, browserslist@^4.18.1, browserslist@^4.21.10, browserslist@^
node-releases "^2.0.18"
update-browserslist-db "^1.1.0"
+browserslist@^4.23.3:
+ version "4.23.3"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800"
+ integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==
+ dependencies:
+ caniuse-lite "^1.0.30001646"
+ electron-to-chromium "^1.5.4"
+ node-releases "^2.0.18"
+ update-browserslist-db "^1.1.0"
+
bser@2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
@@ -6980,7 +7205,12 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001646:
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001659.tgz#f370c311ffbc19c4965d8ec0064a3625c8aaa7af"
integrity sha512-Qxxyfv3RdHAfJcXelgf0hU4DFUVXBGTjqrBUZLUh8AtlGnsDo+CnncYtTd95+ZKfnANUOzxyIQCuU/UeBZBYoA==
-canvas@^2.11.2, canvas@^2.9.1:
+caniuse-lite@^1.0.30001646:
+ version "1.0.30001663"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001663.tgz#1529a723505e429fdfd49532e9fc42273ba7fed7"
+ integrity sha512-o9C3X27GLKbLeTYZ6HBOLU1tsAcBZsLis28wrVzddShCS16RujjHp9GDHKZqrB3meE0YjhawvMFsGb/igqiPzA==
+
+canvas@^2.9.1:
version "2.11.2"
resolved "https://registry.yarnpkg.com/canvas/-/canvas-2.11.2.tgz#553d87b1e0228c7ac0fc72887c3adbac4abbd860"
integrity sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==
@@ -7365,21 +7595,11 @@ clone-response@^1.0.2:
dependencies:
mimic-response "^1.0.0"
-clone-stats@^0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1"
- integrity sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==
-
-clone@^1.0.0, clone@^1.0.2:
+clone@^1.0.2:
version "1.0.4"
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==
-clone@^2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
- integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==
-
clsx@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188"
@@ -7582,11 +7802,21 @@ commander@^8.3.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66"
integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==
+commander@^9.3.0:
+ version "9.5.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30"
+ integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==
+
common-ancestor-path@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7"
integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==
+common-path-prefix@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0"
+ integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==
+
common-tags@^1.8.0:
version "1.8.2"
resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6"
@@ -8363,14 +8593,7 @@ debug@2.6.9, debug@2.X, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8:
dependencies:
ms "2.0.0"
-debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@^4.3.5:
- version "4.3.7"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52"
- integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==
- dependencies:
- ms "^2.1.3"
-
-debug@4.3.4:
+debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
version "4.3.4"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
@@ -8391,12 +8614,19 @@ debug@^3.2.7:
dependencies:
ms "^2.1.1"
+debug@^4.3.3:
+ version "4.3.7"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52"
+ integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==
+ dependencies:
+ ms "^2.1.3"
+
debuglog@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492"
integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==
-decamelize@^1.1.1, decamelize@^1.2.0:
+decamelize@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==
@@ -8688,11 +8918,6 @@ devlop@^1.0.0, devlop@^1.1.0:
dependencies:
dequal "^2.0.0"
-devtools-protocol@0.0.1232444:
- version "0.0.1232444"
- resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1232444.tgz#406345a90a871ba852c530d73482275234936eed"
- integrity sha512-pM27vqEfxSxRkTMnF+XCmxSEb6duO5R+t8A9DEEJgy4Wz2RVanje2mmj99B6A3zv2r/qGfYlOvYznUhuokizmg==
-
dezalgo@^1.0.0:
version "1.0.4"
resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.4.tgz#751235260469084c132157dfa857f386d4c33d81"
@@ -8701,11 +8926,6 @@ dezalgo@^1.0.0:
asap "^2.0.0"
wrappy "1"
-dfa@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/dfa/-/dfa-1.2.0.tgz#96ac3204e2d29c49ea5b57af8d92c2ae12790657"
- integrity sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==
-
didyoumean@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037"
@@ -9159,6 +9379,11 @@ electron-to-chromium@^1.5.4:
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.18.tgz#5fe62b9d21efbcfa26571066502d94f3ed97e495"
integrity sha512-1OfuVACu+zKlmjsNdcJuVQuVE61sZOLbNM4JAQ1Rvh6EOj0/EUKhMJjRH73InPlXSh8HIJk1cVZ8pyOV/FMdUQ==
+electron-to-chromium@^1.5.4:
+ version "1.5.27"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.27.tgz#5203ce5d6054857d84ba84d3681cbe59132ade78"
+ integrity sha512-o37j1vZqCoEgBuWWXLHQgTN/KDKe7zwpiY5CPeq2RvUqOyJw9xnrULzZAEVQ5p4h+zjMk7hgtOoPdnLxr7m/jw==
+
electron-updater@^5.0.1:
version "5.3.0"
resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-5.3.0.tgz#3ba0d20407911a2edc5a68bee45c5aa2023e9ff8"
@@ -9266,14 +9491,6 @@ encodeurl@^1.0.2, encodeurl@~1.0.2:
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
-encoding-sniffer@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/encoding-sniffer/-/encoding-sniffer-0.2.0.tgz#799569d66d443babe82af18c9f403498365ef1d5"
- integrity sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==
- dependencies:
- iconv-lite "^0.6.3"
- whatwg-encoding "^3.1.1"
-
encoding@^0.1.11, encoding@^0.1.13:
version "0.1.13"
resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
@@ -9339,7 +9556,7 @@ err-code@^2.0.2:
resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9"
integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==
-error-ex@^1.2.0, error-ex@^1.3.1:
+error-ex@^1.3.1:
version "1.3.2"
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
@@ -9504,6 +9721,11 @@ escalade@^3.1.1, escalade@^3.1.2:
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5"
integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
+escalade@^3.1.2:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5"
+ integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
+
escape-html@^1.0.3, escape-html@~1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
@@ -10239,7 +10461,12 @@ fast-equals@^3.0.1:
resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-3.0.3.tgz#8e6cb4e51ca1018d87dd41982ef92758b3e4197f"
integrity sha512-NCe8qxnZFARSHGztGMZOO/PC1qa5MIFB5Hp66WdzbCRAz8U8US3bx1UTgLS49efBQPcUtO9gf5oVEY8o7y/7Kg==
-fast-fifo@^1.2.0, fast-fifo@^1.3.2:
+fast-equals@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-5.0.1.tgz#a4eefe3c5d1c0d021aeed0bc10ba5e0c12ee405d"
+ integrity sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==
+
+fast-fifo@^1.1.0, fast-fifo@^1.2.0:
version "1.3.2"
resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c"
integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==
@@ -11119,6 +11346,16 @@ glob@^8.0.1:
minimatch "^5.0.1"
once "^1.3.0"
+glob@^9.2.0:
+ version "9.3.5"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.5.tgz#ca2ed8ca452781a3009685607fdf025a899dfe21"
+ integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==
+ dependencies:
+ fs.realpath "^1.0.0"
+ minimatch "^8.0.2"
+ minipass "^4.2.4"
+ path-scurry "^1.6.1"
+
global-agent@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-3.0.0.tgz#ae7cd31bd3583b93c5a16437a1afe27cc33a1ab6"
@@ -11244,7 +11481,7 @@ got@^9.6.0:
to-readable-stream "^1.0.0"
url-parse-lax "^3.0.0"
-graceful-fs@4.X, graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.11, graceful-fs@^4.2.2, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9:
+graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.11, graceful-fs@^4.2.2, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9:
version "4.2.11"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
@@ -11822,11 +12059,6 @@ humanize-ms@^1.2.1:
dependencies:
ms "^2.0.0"
-hyphen@^1.6.4:
- version "1.10.4"
- resolved "https://registry.yarnpkg.com/hyphen/-/hyphen-1.10.4.tgz#ae16551b8a56ae7c34ffd4b98777221795e6c912"
- integrity sha512-SejXzIpv9gOVdDWXd4suM1fdF1k2dxZGvuTdkOVLoazYfK7O4DykIQbdrvuyG+EaTNlXAGhMndtKrhykgbt0gg==
-
hyphenate-style-name@^1.0.3:
version "1.1.0"
resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.1.0.tgz#1797bf50369588b47b72ca6d5e65374607cf4436"
@@ -12248,7 +12480,14 @@ is-cidr@^4.0.2:
dependencies:
cidr-regex "^3.1.1"
-is-core-module@^2.13.0, is-core-module@^2.15.1, is-core-module@^2.8.1:
+is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.13.1:
+ version "2.13.1"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384"
+ integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==
+ dependencies:
+ hasown "^2.0.2"
+
+is-core-module@^2.8.1:
version "2.15.1"
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37"
integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==
@@ -14302,24 +14541,6 @@ just-diff@^5.0.1:
resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-5.2.0.tgz#60dca55891cf24cd4a094e33504660692348a241"
integrity sha512-6ufhP9SHjb7jibNFrNxyFZ6od3g+An6Ai9mhGRvcYe8UJlH0prseN64M+6ZBBUoKYHZsitDP42gAJ8+eVWr3lw==
-jxl-pdf@0.6.3:
- version "0.6.3"
- resolved "https://registry.yarnpkg.com/jxl-pdf/-/jxl-pdf-0.6.3.tgz#db3ee4026b9c2041e20982b50abb2df4f16b4c85"
- integrity sha512-D170/yDidlbP/d/IAnZi2XsDHQb74c1QgtWQGZ9mbtINvjBnQyVEnxOr5olhRjZ6UYnBMOrY1SDpFWW7gTQOOg==
- dependencies:
- commander "^11.1.0"
- fontkit "^2.0.2"
- fs-extra "^11.2.0"
- isomorphic-dompurify "^2.4.0"
- marked "^12.0.0"
- os "^0.1.2"
- path "^0.12.7"
- pdf-lib "^1.17.1"
- proskomma-core "^0.10.9"
- proskomma-json-tools "^0.8.20"
- puppeteer "^21.6.1"
- text-diff "^1.0.1"
-
keycode@^2.2.0:
version "2.2.1"
resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.2.1.tgz#09c23b2be0611d26117ea2501c2c391a01f39eff"
@@ -14443,6 +14664,11 @@ levn@~0.3.0:
prelude-ls "~1.1.2"
type-check "~0.3.2"
+lexical@0.17.1, lexical@^0.17.1:
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/lexical/-/lexical-0.17.1.tgz#02f4057b82cb302ceb9ca9b031dcf9406be5780a"
+ integrity sha512-72/MhR7jqmyqD10bmJw8gztlCm4KDDT+TPtU4elqXrEvHoO5XENi34YAEUD9gIkPfqSwyLa9mwAX1nKzIr5xEA==
+
libnpmaccess@^6.0.4:
version "6.0.4"
resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-6.0.4.tgz#2dd158bd8a071817e2207d3b201d37cf1ad6ae6b"
@@ -14950,7 +15176,7 @@ lru-cache@^6.0.0:
dependencies:
yallist "^4.0.0"
-lru-cache@^7.14.1, lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1:
+lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1:
version "7.18.3"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89"
integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==
@@ -14993,11 +15219,6 @@ make-dir@^4.0.0:
dependencies:
semver "^7.5.3"
-make-event-props@^1.6.0:
- version "1.6.2"
- resolved "https://registry.yarnpkg.com/make-event-props/-/make-event-props-1.6.2.tgz#c8e0e48eb28b9b808730de38359f6341de7ec5a2"
- integrity sha512-iDwf7mA03WPiR8QxvcVHmVWEPfMY1RZXerDVNCRYW7dUr2ppH3J58Rwb39/WG39yTZdRSxr3x+2v22tvI0VEvA==
-
make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6, make-fetch-happen@^10.2.0:
version "10.2.1"
resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164"
@@ -15833,7 +16054,7 @@ mkdirp-infer-owner@^2.0.0:
infer-owner "^1.0.4"
mkdirp "^1.0.3"
-"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1:
+"mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.1:
version "0.5.6"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
@@ -15988,11 +16209,6 @@ natural-compare@^1.4.0:
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
-necessary@^14.0.1:
- version "14.0.8"
- resolved "https://registry.yarnpkg.com/necessary/-/necessary-14.0.8.tgz#4152a16049142da22a634d18737eeff7a8c9e6a6"
- integrity sha512-1w7nJ8f/liQqfSNZEOVZCvF7lXOJLdd/l8+KZVcq25SPXRJvPw89fdplZExfYJlCQ32LXY68Ko10JNEwxwPKJA==
-
negotiator@0.6.3, negotiator@^0.6.3:
version "0.6.3"
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
@@ -16219,6 +16435,11 @@ node-releases@^2.0.18:
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f"
integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==
+node-releases@^2.0.18:
+ version "2.0.18"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f"
+ integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==
+
node-stream-zip@^1.15.0:
version "1.15.0"
resolved "https://registry.yarnpkg.com/node-stream-zip/-/node-stream-zip-1.15.0.tgz#158adb88ed8004c6c49a396b50a6a5de3bca33ea"
@@ -16258,7 +16479,7 @@ normalize-package-data@^4.0.0:
semver "^7.3.5"
validate-npm-package-license "^3.0.4"
-normalize-path@^2.0.1, normalize-path@^2.1.1:
+normalize-path@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==
@@ -17006,11 +17227,6 @@ package-hash@^4.0.0:
lodash.flattendeep "^4.4.0"
release-zalgo "^1.0.0"
-package-json-from-dist@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz#e501cd3094b278495eb4258d4c9f6d5ac3019f00"
- integrity sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==
-
pacote@^13.0.3, pacote@^13.6.1, pacote@^13.6.2:
version "13.6.2"
resolved "https://registry.yarnpkg.com/pacote/-/pacote-13.6.2.tgz#0d444ba3618ab3e5cd330b451c22967bbd0ca48a"
@@ -17038,12 +17254,7 @@ pacote@^13.0.3, pacote@^13.6.1, pacote@^13.6.2:
ssri "^9.0.0"
tar "^6.1.11"
-pako@^0.2.5:
- version "0.2.9"
- resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
- integrity sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==
-
-pako@^1.0.10, pako@^1.0.11, pako@^1.0.5, pako@^1.0.6, pako@~1.0.2, pako@~1.0.5:
+pako@^1.0.10, pako@^1.0.5, pako@~1.0.2, pako@~1.0.5:
version "1.0.11"
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
@@ -17430,6 +17641,11 @@ picocolors@^1.0.0, picocolors@^1.0.1:
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.0.tgz#5358b76a78cde483ba5cef6a9dc9671440b27d59"
integrity sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==
+picocolors@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.0.tgz#5358b76a78cde483ba5cef6a9dc9671440b27d59"
+ integrity sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==
+
picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
@@ -18225,16 +18441,16 @@ pretty-format@^29.0.0, pretty-format@^29.7.0:
ansi-styles "^5.0.0"
react-is "^18.0.0"
+prismjs@^1.27.0:
+ version "1.29.0"
+ resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12"
+ integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==
+
proc-log@^2.0.0, proc-log@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-2.0.1.tgz#8f3f69a1f608de27878f91f5c688b225391cb685"
integrity sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==
-process-nextick-args@~1.0.6:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
- integrity sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw==
-
process-nextick-args@~2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
@@ -18859,6 +19075,13 @@ react-draggable@^4.4.3:
clsx "^1.1.1"
prop-types "^15.8.1"
+react-error-boundary@^3.1.4:
+ version "3.1.4"
+ resolved "https://registry.yarnpkg.com/react-error-boundary/-/react-error-boundary-3.1.4.tgz#255db92b23197108757a888b01e5b729919abde0"
+ integrity sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==
+ dependencies:
+ "@babel/runtime" "^7.12.5"
+
react-error-overlay@^6.0.11:
version "6.0.11"
resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb"
@@ -18881,10 +19104,10 @@ react-i18next@^11.17.1:
"@babel/runtime" "^7.14.5"
html-parse-stringify "^3.0.1"
-react-icons@^5.3.0:
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-5.3.0.tgz#ccad07a30aebd40a89f8cfa7d82e466019203f1c"
- integrity sha512-DnUk8aFbTyQPSkCfF8dbX6kQjXA9DktMeJqfjrg6cK9vwQVMxmcA3BfP4QoiztVmEHtwlTgLFsPuH2NskKT6eg==
+react-icons@^4.11.0:
+ version "4.12.0"
+ resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.12.0.tgz#54806159a966961bfd5cdb26e492f4dafd6a8d78"
+ integrity sha512-IBaDuHiShdZqmfc/TwHu6+d6k2ltNCf3AszxNmjJc1KUfXdEeRJOKyNvLmAHaarhzGmTSVygNdyu8/opXv2gaw==
react-is@^16.13.1, react-is@^16.3.2, react-is@^16.6.0, react-is@^16.6.3, react-is@^16.7.0, react-is@^16.8.1:
version "16.13.1"
@@ -19211,14 +19434,6 @@ read-package-json@^5.0.0, read-package-json@^5.0.2:
normalize-package-data "^4.0.0"
npm-normalize-package-bin "^2.0.0"
-read-pkg-up@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
- integrity sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==
- dependencies:
- find-up "^1.0.0"
- read-pkg "^1.0.0"
-
read-pkg-up@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978"
@@ -19271,7 +19486,7 @@ read@1, read@^1.0.7, read@~1.0.7:
dependencies:
mute-stream "~0.0.4"
-readable-stream@3, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0, readable-stream@^3.6.2:
+readable-stream@3, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0:
version "3.6.2"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
@@ -20123,11 +20338,18 @@ semver@^6.0.0, semver@^6.2.0, semver@^6.3.0, semver@^6.3.1:
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
-semver@^7.0.0, semver@^7.1.1, semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4, semver@^7.6.3:
+semver@^7.0.0, semver@^7.1.1:
version "7.6.3"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143"
integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==
+semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4:
+ version "7.6.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d"
+ integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==
+ dependencies:
+ lru-cache "^6.0.0"
+
semver@~7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
@@ -20392,6 +20614,13 @@ sisteransi@^1.0.5:
resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
+sj-usfm-grammar@^3.0.0, sj-usfm-grammar@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/sj-usfm-grammar/-/sj-usfm-grammar-3.0.2.tgz#855ee3a439b582bfae93a71c3aa93cd9beb6bfdc"
+ integrity sha512-LBOx33vtU0gnUi/pAVxAqVMoGxD57c5itW650BaYGGD3Di2wweNHcQBD+XlQyGFXSoXoi3bn3gxfnNQG0oNGtg==
+ dependencies:
+ sj-usfm-grammar "^3.0.0"
+
slash@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
@@ -20451,6 +20680,15 @@ slice-ansi@^3.0.0:
astral-regex "^2.0.0"
is-fullwidth-code-point "^3.0.0"
+slice-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
+ integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==
+ dependencies:
+ ansi-styles "^4.0.0"
+ astral-regex "^2.0.0"
+ is-fullwidth-code-point "^3.0.0"
+
smart-buffer@^4.0.2, smart-buffer@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"
@@ -20504,16 +20742,7 @@ socks-proxy-agent@^7.0.0:
debug "^4.3.3"
socks "^2.6.2"
-socks-proxy-agent@^8.0.2, socks-proxy-agent@^8.0.4:
- version "8.0.4"
- resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz#9071dca17af95f483300316f4b063578fa0db08c"
- integrity sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==
- dependencies:
- agent-base "^7.1.1"
- debug "^4.3.4"
- socks "^2.8.3"
-
-socks@^2.6.2, socks@^2.8.3:
+socks@^2.6.2:
version "2.8.3"
resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5"
integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==
@@ -20682,6 +20911,11 @@ split-string@^3.0.1, split-string@^3.0.2:
dependencies:
extend-shallow "^3.0.0"
+split2@^4.1.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4"
+ integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==
+
sprintf-js@^1.1.2, sprintf-js@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a"
@@ -20890,7 +21124,16 @@ string-punctuation-tokenizer@2.1.2:
dependencies:
xregexp "^4.1.1"
-"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
+"string-width-cjs@npm:string-width@^4.2.0":
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+ integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.1"
+
+"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
@@ -21024,7 +21267,7 @@ stringify-object@^3.3.0:
is-obj "^1.0.1"
is-regexp "^1.0.0"
-"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
@@ -21045,6 +21288,13 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
dependencies:
ansi-regex "^4.1.0"
+strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+ dependencies:
+ ansi-regex "^5.0.1"
+
strip-ansi@^7.0.1:
version "7.1.0"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
@@ -21810,6 +22060,11 @@ translation-helps-rcl@3.5.12:
resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9"
integrity sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==
+tree-kill@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc"
+ integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==
+
treeverse@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-2.0.0.tgz#036dcef04bc3fd79a9b79a68d4da03e882d8a9ca"
@@ -22225,14 +22480,6 @@ unique-slug@^3.0.0:
dependencies:
imurmurhash "^0.1.4"
-unique-stream@^2.0.2:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac"
- integrity sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==
- dependencies:
- json-stable-stringify-without-jsonify "^1.0.1"
- through2-filter "^3.0.0"
-
unique-string@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d"
@@ -22402,6 +22649,14 @@ update-browserslist-db@^1.1.0:
escalade "^3.1.2"
picocolors "^1.0.1"
+update-browserslist-db@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e"
+ integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==
+ dependencies:
+ escalade "^3.1.2"
+ picocolors "^1.0.1"
+
uqr@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/uqr/-/uqr-0.1.2.tgz#5c6cd5dcff9581f9bb35b982cb89e2c483a41d7d"
@@ -22528,7 +22783,7 @@ usfm-editor@0.8.7:
slate-react "0.69.0"
usfm-js "2.0.1"
-usfm-grammar@^2.3.0:
+usfm-grammar@^2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/usfm-grammar/-/usfm-grammar-2.3.1.tgz#58c635106f258e094bfce7d64ed5069a3469ab18"
integrity sha512-kUQObcSJqxmtU2pOG5unLZ2hlwJQu9bFodTsQyDPDeSiEpZapzeHPl6zB+RyXkU1DplbQHzhJaMpV5342aRevg==
@@ -22693,11 +22948,6 @@ v8-to-istanbul@^8.1.0:
convert-source-map "^1.6.0"
source-map "^0.7.3"
-vali-date@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/vali-date/-/vali-date-1.0.0.tgz#1b904a59609fb328ef078138420934f6b86709a6"
- integrity sha512-sgECfZthyaCKW10N0fm27cg8HYTFK5qMWgypqkXMQ4Wbl/zZKx7xZICgcoxIIE+WFAP/MBL2EFwC/YvLxw3Zeg==
-
validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
@@ -22849,13 +23099,6 @@ w3c-xmlserializer@^2.0.0:
dependencies:
xml-name-validator "^3.0.0"
-w3c-xmlserializer@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz#f925ba26855158594d907313cedd1476c5967f6c"
- integrity sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==
- dependencies:
- xml-name-validator "^5.0.0"
-
walk-up-path@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e"
@@ -23468,7 +23711,7 @@ worker-factory@^7.0.24, worker-factory@^7.0.29:
fast-unique-numbers "^9.0.9"
tslib "^2.7.0"
-"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
+"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
@@ -23503,6 +23746,15 @@ wrap-ansi@^6.2.0:
string-width "^4.1.0"
strip-ansi "^6.0.0"
+wrap-ansi@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
wrap-ansi@^8.1.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
@@ -23793,6 +24045,19 @@ yargs@^16.2.0:
y18n "^5.0.5"
yargs-parser "^20.2.2"
+yargs@^17.5.1, yargs@^17.7.2:
+ version "17.7.2"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
+ integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
+ dependencies:
+ cliui "^8.0.1"
+ escalade "^3.1.1"
+ get-caller-file "^2.0.5"
+ require-directory "^2.1.1"
+ string-width "^4.2.3"
+ y18n "^5.0.5"
+ yargs-parser "^21.1.1"
+
yarn@^1.22.19:
version "1.22.22"
resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.22.tgz#ac34549e6aa8e7ead463a7407e1c7390f61a6610"