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) => ( + + ))} + + + + + ); +} + +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 }) => ( +
+
+
+
Notes Editor
+
+ +
+
+
+); + +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"