1 |
- {"version":3,"file":"29078.js","mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACdA;AACA;AACA;AACA;AACA;;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AChEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACLA;AAAsE;AAEL;AAC7B;AACoB;AAEA;AAEhB;AAEwB;AACW;AACtB;AAC2B;AACH;AAC4B;AAEnD;AAC2B;AAajF,MAAMmB,IAAI,GAAG,CAAC,EAAEC,OAAO,GAAEC,KAAK,GAAEC,eAAe,GAAEC,SAAS,GAAEC,SAAS,GAAa,GAAK;IACrF,MAAMC,YAAY,GAAGtB,iDAAU,CAACe,qGAAyB,CAAC;IAC1D,MAAMQ,aAAa,GAAGrB,0DAAiB,CAACoB,YAAY,EAAE,CAACE,KAAK,GAAK;QAC/D,MAAM,EAAEC,KAAK,GAAEC,UAAU,GAAE,GAAGF,KAAK,CAACG,OAAO;QAC3C,MAAMC,SAAS,GAAGV,KAAK,CAACW,GAAG,CAAC,CAACC,IAAI,GAAKA,IAAI,CAACC,QAAQ,CAAC;QACpD,OAAOH,SAAS,CAACI,QAAQ,CAAC,CAAC,EAAEP,KAAK,CAAC,CAAC,EAAEC,UAAU,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC,CAAC;IAEF,MAAM,CAACO,oBAAoB,EAAEC,eAAe,CAAC,GAC3CxB,+EAAS,CAACC,wFAAu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","sources":["webpack://quran.com/./src/components/QuranReader/ReadingView/Line.module.scss","webpack://quran.com/./src/components/QuranReader/ReadingView/Page.module.scss","webpack://quran.com/./src/components/QuranReader/ReadingView/PageFooter.module.scss","webpack://quran.com/./src/components/QuranReader/ReadingView/PageNavigationButtons/PageNavigationButtons.module.scss","webpack://quran.com/./src/components/QuranReader/ReadingView/ReadingView.module.scss","webpack://quran.com/./src/components/QuranReader/ReadingView/ReadingViewSkeleton.module.scss","webpack://quran.com/./src/components/QuranReader/ReadingView/Line.tsx","webpack://quran.com/./src/components/QuranReader/ReadingView/Page.tsx","webpack://quran.com/./src/components/QuranReader/ReadingView/PageContainer.tsx","webpack://quran.com/./src/components/QuranReader/ReadingView/PageFooter.tsx","webpack://quran.com/./src/components/QuranReader/ReadingView/PageNavigationButtons/index.tsx","webpack://quran.com/./src/components/QuranReader/ReadingView/ReadingViewSkeleton.tsx","webpack://quran.com/./src/components/QuranReader/ReadingView/groupLinesByVerses.ts","webpack://quran.com/./src/components/QuranReader/ReadingView/hooks/useScrollToVirtualizedVerse.ts","webpack://quran.com/./src/components/QuranReader/ReadingView/index.tsx","webpack://quran.com/./src/components/QuranReader/utils/page.ts"],"sourcesContent":["// Exports\nmodule.exports = {\n\t\"line\": \"Line_line__3jPyY\",\n\t\"container\": \"Line_container__CApVP\",\n\t\"mobileInline\": \"Line_mobileInline__jEjq9\",\n\t\"fixedWidth\": \"Line_fixedWidth__AHk9W\"\n};\n","// Exports\nmodule.exports = {\n\t\"fallback_qpc_uthmani_hafs-line-width-1\": \"Page_fallback_qpc_uthmani_hafs-line-width-1__X9dUi\",\n\t\"fallback_qpc_uthmani_hafs-line-width-2\": \"Page_fallback_qpc_uthmani_hafs-line-width-2__prdZQ\",\n\t\"fallback_qpc_uthmani_hafs-line-width-3\": \"Page_fallback_qpc_uthmani_hafs-line-width-3__CpdkI\",\n\t\"fallback_qpc_uthmani_hafs-line-width-4\": \"Page_fallback_qpc_uthmani_hafs-line-width-4__bpdKT\",\n\t\"fallback_qpc_uthmani_hafs-line-width-5\": \"Page_fallback_qpc_uthmani_hafs-line-width-5__r0dhC\",\n\t\"fallback_qpc_uthmani_hafs-line-width-6\": \"Page_fallback_qpc_uthmani_hafs-line-width-6__hNehk\",\n\t\"fallback_qpc_uthmani_hafs-line-width-7\": \"Page_fallback_qpc_uthmani_hafs-line-width-7__W627r\",\n\t\"fallback_qpc_uthmani_hafs-line-width-8\": \"Page_fallback_qpc_uthmani_hafs-line-width-8__obMGX\",\n\t\"fallback_qpc_uthmani_hafs-line-width-9\": \"Page_fallback_qpc_uthmani_hafs-line-width-9__uE3Np\",\n\t\"fallback_qpc_uthmani_hafs-line-width-10\": \"Page_fallback_qpc_uthmani_hafs-line-width-10__g_Coa\",\n\t\"container\": \"Page_container__hkXnW\",\n\t\"mobileCenterText\": \"Page_mobileCenterText__WB1en\"\n};\n","// Exports\nmodule.exports = {\n\t\"pageText\": \"PageFooter_pageText__YdcIS\",\n\t\"pageLink\": \"PageFooter_pageLink__YT3wq\"\n};\n","// Exports\nmodule.exports = {\n\t\"buttonsContainer\": \"PageNavigationButtons_buttonsContainer__fomTO\",\n\t\"prevButton\": \"PageNavigationButtons_prevButton__OOwCQ\",\n\t\"audioPlayerOpen\": \"PageNavigationButtons_audioPlayerOpen__sIOdL\"\n};\n","// Exports\nmodule.exports = {\n\t\"code_v1-line-width-1\": \"ReadingView_code_v1-line-width-1__u_hC8\",\n\t\"code_v1-line-width-2\": \"ReadingView_code_v1-line-width-2__Hf8MJ\",\n\t\"code_v1-line-width-3\": \"ReadingView_code_v1-line-width-3__C3GX9\",\n\t\"code_v1-line-width-4\": \"ReadingView_code_v1-line-width-4__JF_zd\",\n\t\"code_v1-line-width-5\": \"ReadingView_code_v1-line-width-5__6kO9e\",\n\t\"code_v1-line-width-6\": \"ReadingView_code_v1-line-width-6__Xmg9T\",\n\t\"code_v1-line-width-7\": \"ReadingView_code_v1-line-width-7__5DID0\",\n\t\"code_v1-line-width-8\": \"ReadingView_code_v1-line-width-8__QSPjI\",\n\t\"code_v1-line-width-9\": \"ReadingView_code_v1-line-width-9__g4KUg\",\n\t\"code_v1-line-width-10\": \"ReadingView_code_v1-line-width-10__EbYvu\",\n\t\"code_v2-line-width-1\": \"ReadingView_code_v2-line-width-1__LKGTJ\",\n\t\"code_v2-line-width-2\": \"ReadingView_code_v2-line-width-2__XxvSm\",\n\t\"code_v2-line-width-3\": \"ReadingView_code_v2-line-width-3__boomP\",\n\t\"code_v2-line-width-4\": \"ReadingView_code_v2-line-width-4__jii3F\",\n\t\"code_v2-line-width-5\": \"ReadingView_code_v2-line-width-5__yh418\",\n\t\"code_v2-line-width-6\": \"ReadingView_code_v2-line-width-6__PmlQ_\",\n\t\"code_v2-line-width-7\": \"ReadingView_code_v2-line-width-7__L3zwX\",\n\t\"code_v2-line-width-8\": \"ReadingView_code_v2-line-width-8__fodHn\",\n\t\"code_v2-line-width-9\": \"ReadingView_code_v2-line-width-9__R51Sk\",\n\t\"code_v2-line-width-10\": \"ReadingView_code_v2-line-width-10__aRnmF\",\n\t\"text_indopak_15_lines-line-width-1\": \"ReadingView_text_indopak_15_lines-line-width-1__HIvVb\",\n\t\"text_indopak_15_lines-line-width-2\": \"ReadingView_text_indopak_15_lines-line-width-2__COw_J\",\n\t\"text_indopak_15_lines-line-width-3\": \"ReadingView_text_indopak_15_lines-line-width-3__x0I0x\",\n\t\"text_indopak_15_lines-line-width-4\": \"ReadingView_text_indopak_15_lines-line-width-4__oxtcz\",\n\t\"text_indopak_15_lines-line-width-5\": \"ReadingView_text_indopak_15_lines-line-width-5__CIg5C\",\n\t\"text_indopak_15_lines-line-width-6\": \"ReadingView_text_indopak_15_lines-line-width-6__e8_Zq\",\n\t\"text_indopak_15_lines-line-width-7\": \"ReadingView_text_indopak_15_lines-line-width-7__R1c56\",\n\t\"text_indopak_15_lines-line-width-8\": \"ReadingView_text_indopak_15_lines-line-width-8__f1hhH\",\n\t\"text_indopak_15_lines-line-width-9\": \"ReadingView_text_indopak_15_lines-line-width-9__e_Fhh\",\n\t\"text_indopak_15_lines-line-width-10\": \"ReadingView_text_indopak_15_lines-line-width-10__av8qG\",\n\t\"text_indopak_16_lines-line-width-1\": \"ReadingView_text_indopak_16_lines-line-width-1__wEGW4\",\n\t\"text_indopak_16_lines-line-width-2\": \"ReadingView_text_indopak_16_lines-line-width-2__AeVXj\",\n\t\"text_indopak_16_lines-line-width-3\": \"ReadingView_text_indopak_16_lines-line-width-3__UEeqd\",\n\t\"text_indopak_16_lines-line-width-4\": \"ReadingView_text_indopak_16_lines-line-width-4__2Nw2u\",\n\t\"text_indopak_16_lines-line-width-5\": \"ReadingView_text_indopak_16_lines-line-width-5__r2tKN\",\n\t\"text_indopak_16_lines-line-width-6\": \"ReadingView_text_indopak_16_lines-line-width-6__ybw6l\",\n\t\"text_indopak_16_lines-line-width-7\": \"ReadingView_text_indopak_16_lines-line-width-7____CTX\",\n\t\"text_indopak_16_lines-line-width-8\": \"ReadingView_text_indopak_16_lines-line-width-8__ymIE0\",\n\t\"text_indopak_16_lines-line-width-9\": \"ReadingView_text_indopak_16_lines-line-width-9__MKM2y\",\n\t\"text_indopak_16_lines-line-width-10\": \"ReadingView_text_indopak_16_lines-line-width-10__XhBAV\",\n\t\"qpc_uthmani_hafs-line-width-1\": \"ReadingView_qpc_uthmani_hafs-line-width-1__1ArHr\",\n\t\"qpc_uthmani_hafs-line-width-2\": \"ReadingView_qpc_uthmani_hafs-line-width-2__I6rKn\",\n\t\"qpc_uthmani_hafs-line-width-3\": \"ReadingView_qpc_uthmani_hafs-line-width-3__jIQg8\",\n\t\"qpc_uthmani_hafs-line-width-4\": \"ReadingView_qpc_uthmani_hafs-line-width-4__RXw5a\",\n\t\"qpc_uthmani_hafs-line-width-5\": \"ReadingView_qpc_uthmani_hafs-line-width-5__eO8Fo\",\n\t\"qpc_uthmani_hafs-line-width-6\": \"ReadingView_qpc_uthmani_hafs-line-width-6__TbgkW\",\n\t\"qpc_uthmani_hafs-line-width-7\": \"ReadingView_qpc_uthmani_hafs-line-width-7__RoJmi\",\n\t\"qpc_uthmani_hafs-line-width-8\": \"ReadingView_qpc_uthmani_hafs-line-width-8__m_AJa\",\n\t\"qpc_uthmani_hafs-line-width-9\": \"ReadingView_qpc_uthmani_hafs-line-width-9___DGtD\",\n\t\"qpc_uthmani_hafs-line-width-10\": \"ReadingView_qpc_uthmani_hafs-line-width-10__uNVi7\",\n\t\"tajweed-line-width-1\": \"ReadingView_tajweed-line-width-1__XzcHo\",\n\t\"tajweed-line-width-2\": \"ReadingView_tajweed-line-width-2__qI_3N\",\n\t\"tajweed-line-width-3\": \"ReadingView_tajweed-line-width-3__iPATb\",\n\t\"tajweed-line-width-4\": \"ReadingView_tajweed-line-width-4___gTZv\",\n\t\"tajweed-line-width-5\": \"ReadingView_tajweed-line-width-5__8creJ\",\n\t\"tajweed-line-width-6\": \"ReadingView_tajweed-line-width-6__mqO8v\",\n\t\"tajweed-line-width-7\": \"ReadingView_tajweed-line-width-7__p1Oi4\",\n\t\"tajweed-line-width-8\": \"ReadingView_tajweed-line-width-8__js74h\",\n\t\"tajweed-line-width-9\": \"ReadingView_tajweed-line-width-9__gjjDU\",\n\t\"tajweed-line-width-10\": \"ReadingView_tajweed-line-width-10__xBOUh\",\n\t\"container\": \"ReadingView_container__99RFM\",\n\t\"virtuosoScroller\": \"ReadingView_virtuosoScroller__Y3HA6\"\n};\n","// Exports\nmodule.exports = {\n\t\"skeletonContainer\": \"ReadingViewSkeleton_skeletonContainer__h5Sb2\",\n\t\"skeleton\": \"ReadingViewSkeleton_skeleton__hw8ZE\",\n\t\"fixedWidth\": \"ReadingViewSkeleton_fixedWidth__fIRzb\"\n};\n","import React, { useEffect, memo, useContext, RefObject } from 'react';\n\nimport { useSelector as useXstateSelector } from '@xstate/react';\nimport classNames from 'classnames';\nimport { shallowEqual, useSelector } from 'react-redux';\n\nimport { verseFontChanged } from '../utils/memoization';\n\nimport styles from './Line.module.scss';\n\nimport ChapterHeader from '@/components/chapters/ChapterHeader';\nimport { useOnboarding } from '@/components/Onboarding/OnboardingProvider';\nimport VerseText from '@/components/Verse/VerseText';\nimport useScroll, { SMOOTH_SCROLL_TO_CENTER } from '@/hooks/useScrollToElement';\nimport { selectEnableAutoScrolling } from '@/redux/slices/AudioPlayer/state';\nimport { selectInlineDisplayWordByWordPreferences } from '@/redux/slices/QuranReader/readingPreferences';\nimport QuranReaderStyles from '@/redux/types/QuranReaderStyles';\nimport { getWordDataByLocation } from '@/utils/verse';\nimport { AudioPlayerMachineContext } from 'src/xstate/AudioPlayerMachineContext';\nimport Word from 'types/Word';\n\nexport type LineProps = {\n words: Word[];\n lineKey: string;\n isBigTextLayout: boolean;\n // eslint-disable-next-line react/no-unused-prop-types\n quranReaderStyles: QuranReaderStyles;\n pageIndex: number;\n lineIndex: number;\n};\n\nconst Line = ({ lineKey, words, isBigTextLayout, pageIndex, lineIndex }: LineProps) => {\n const audioService = useContext(AudioPlayerMachineContext);\n const isHighlighted = useXstateSelector(audioService, (state) => {\n const { surah, ayahNumber } = state.context;\n const verseKeys = words.map((word) => word.verseKey);\n return verseKeys.includes(`${surah}:${ayahNumber}`);\n });\n\n const [scrollToSelectedItem, selectedItemRef]: [() => void, RefObject<HTMLDivElement>] =\n useScroll(SMOOTH_SCROLL_TO_CENTER);\n\n const { isActive } = useOnboarding();\n // disable auto scrolling when the user is onboarding\n const enableAutoScrolling = useSelector(selectEnableAutoScrolling, shallowEqual) && !isActive;\n const { showWordByWordTranslation, showWordByWordTransliteration } = useSelector(\n selectInlineDisplayWordByWordPreferences,\n shallowEqual,\n );\n\n useEffect(() => {\n if (isHighlighted && enableAutoScrolling) {\n scrollToSelectedItem();\n }\n }, [isHighlighted, scrollToSelectedItem, enableAutoScrolling]);\n\n const firstWordData = getWordDataByLocation(words[0].location);\n const shouldShowChapterHeader = firstWordData[1] === '1' && firstWordData[2] === '1';\n const isWordByWordLayout = showWordByWordTranslation || showWordByWordTransliteration;\n\n return (\n <div\n ref={selectedItemRef}\n id={lineKey}\n className={classNames(styles.container, {\n [styles.highlighted]: isHighlighted,\n [styles.mobileInline]: isBigTextLayout,\n })}\n >\n {shouldShowChapterHeader && (\n <ChapterHeader\n chapterId={firstWordData[0]}\n pageNumber={words[0].pageNumber}\n hizbNumber={words[0].hizbNumber}\n />\n )}\n <div\n className={classNames(styles.line, {\n [styles.mobileInline]: isBigTextLayout,\n [styles.fixedWidth]: !isWordByWordLayout,\n })}\n >\n <VerseText\n words={words}\n isReadingMode\n isHighlighted={isHighlighted}\n shouldShowH1ForSEO={pageIndex === 0 && lineIndex === 0}\n />\n </div>\n </div>\n );\n};\n\n/**\n * Since we are passing words and it's an array\n * even if the same words are passed, their reference will change\n * on fetching a new page and since Memo only does shallow comparison,\n * we need to use custom comparing logic:\n *\n * 1. Check if the line keys are the same.\n * 2. Check if the number of words are the same.\n * 3. Check if isBigTextLayout values are the same.\n * 4. Check if the font changed.\n *\n * If the above conditions are met, it's safe to assume that the result\n * of both renders are the same.\n *\n * @param {LineProps} prevProps\n * @param {LineProps} nextProps\n * @returns {boolean}\n */\nconst areLinesEqual = (prevProps: LineProps, nextProps: LineProps): boolean =>\n prevProps.lineKey === nextProps.lineKey &&\n prevProps.isBigTextLayout === nextProps.isBigTextLayout &&\n !verseFontChanged(\n prevProps.quranReaderStyles,\n nextProps.quranReaderStyles,\n prevProps.words,\n nextProps.words,\n );\n\nexport default memo(Line, areLinesEqual);\n","import React, { useMemo } from 'react';\n\nimport classNames from 'classnames';\nimport { shallowEqual, useSelector } from 'react-redux';\n\nimport groupLinesByVerses from './groupLinesByVerses';\nimport Line from './Line';\nimport styles from './Page.module.scss';\nimport PageFooter from './PageFooter';\n\nimport useIsFontLoaded from '@/components/QuranReader/hooks/useIsFontLoaded';\nimport { selectInlineDisplayWordByWordPreferences } from '@/redux/slices/QuranReader/readingPreferences';\nimport QuranReaderStyles from '@/redux/types/QuranReaderStyles';\nimport { getLineWidthClassName } from '@/utils/fontFaceHelper';\nimport { FALLBACK_FONT, QuranFont } from 'types/QuranReader';\nimport Verse from 'types/Verse';\n\ntype PageProps = {\n verses: Verse[];\n pageNumber: number;\n quranReaderStyles: QuranReaderStyles;\n pageIndex: number;\n};\n\nconst Page = ({ verses, pageNumber, quranReaderStyles, pageIndex }: PageProps) => {\n const lines = useMemo(\n () => (verses && verses.length ? groupLinesByVerses(verses) : {}),\n [verses],\n );\n const { quranTextFontScale, quranFont, mushafLines } = quranReaderStyles;\n const { showWordByWordTranslation, showWordByWordTransliteration } = useSelector(\n selectInlineDisplayWordByWordPreferences,\n shallowEqual,\n );\n const isWordByWordLayout = showWordByWordTranslation || showWordByWordTransliteration;\n const isBigTextLayout =\n isWordByWordLayout || quranTextFontScale > 3 || quranFont === QuranFont.Tajweed;\n const isFontLoaded = useIsFontLoaded(pageNumber, quranFont);\n\n return (\n <div\n id={`page-${pageNumber}`}\n className={classNames(styles.container, {\n [styles.mobileCenterText]: isBigTextLayout,\n [styles[getLineWidthClassName(FALLBACK_FONT, quranTextFontScale, mushafLines, true)]]:\n !isFontLoaded,\n })}\n >\n {Object.keys(lines).map((key, lineIndex) => (\n <Line\n pageIndex={pageIndex}\n lineIndex={lineIndex}\n lineKey={key}\n words={lines[key]}\n key={key}\n isBigTextLayout={isBigTextLayout}\n quranReaderStyles={quranReaderStyles}\n />\n ))}\n <PageFooter page={pageNumber} />\n </div>\n );\n};\n\nexport default Page;\n","import React, { useEffect, useMemo } from 'react';\n\nimport useSWRImmutable from 'swr/immutable';\n\nimport { getPageNumberByPageIndex } from '../utils/page';\n\nimport Page from './Page';\nimport ReadingViewSkeleton from './ReadingViewSkeleton';\n\nimport { getReaderViewRequestKey, verseFetcher } from '@/components/QuranReader/api';\nimport useIsUsingDefaultSettings from '@/hooks/useIsUsingDefaultSettings';\nimport QuranReaderStyles from '@/redux/types/QuranReaderStyles';\nimport { VersesResponse } from 'types/ApiResponses';\nimport LookupRecord from 'types/LookupRecord';\nimport Verse from 'types/Verse';\n\ntype Props = {\n pagesVersesRange: Record<number, LookupRecord>;\n quranReaderStyles: QuranReaderStyles;\n reciterId: number;\n lang: string;\n wordByWordLocale: string;\n pageIndex: number;\n setMushafPageToVersesMap: (data: Record<number, Verse[]>) => void;\n initialData: VersesResponse;\n};\n\nconst getPageVersesRange = (\n currentMushafPage: number,\n apiPagesVersesRange: Record<number, LookupRecord>,\n): LookupRecord => {\n const lookupRecord = { ...apiPagesVersesRange[currentMushafPage] };\n // TODO: remove this from BE\n // we remove firstVerseKey and lastVerseKey before we send the params to BE as BE doesn't need them\n delete lookupRecord.firstVerseKey;\n delete lookupRecord.lastVerseKey;\n return lookupRecord;\n};\n\n/**\n * Get the verses returned from the initialData of the first page.\n * This function will filter out all the words that don't\n * belong to the first page in-case we have some verses\n * that contain words that don't belong to the first page\n * (applies to 16-line Indopak Mushaf e.g. /ur/haji/25 or /ur/2/211-216)\n *\n * @param {number} pageNumber\n * @param {Verse[]} initialVerses\n * @returns {Verse[]}\n */\nconst getInitialVerses = (pageNumber: number, initialVerses: Verse[]): Verse[] =>\n initialVerses.map((verse) => ({\n ...verse,\n words: verse.words.filter((word) => word.pageNumber === pageNumber),\n }));\n\n/**\n * A component that will fetch the verses of the current mushaf page\n * and will render a skeleton while it's loading.\n *\n * @param {Props} param0\n * @returns {JSX.Element}\n */\nconst PageContainer: React.FC<Props> = ({\n pagesVersesRange,\n quranReaderStyles,\n reciterId,\n lang,\n wordByWordLocale,\n pageIndex,\n setMushafPageToVersesMap,\n initialData,\n}: Props): JSX.Element => {\n const pageNumber = useMemo(\n () => getPageNumberByPageIndex(pageIndex, pagesVersesRange),\n [pageIndex, pagesVersesRange],\n );\n const initialVerses = useMemo(\n () => (pageIndex === 0 ? getInitialVerses(pageNumber, initialData.verses) : initialData.verses),\n [initialData.verses, pageIndex, pageNumber],\n );\n\n const isUsingDefaultSettings = useIsUsingDefaultSettings();\n const shouldUseInitialData = pageIndex === 0 && isUsingDefaultSettings;\n const { data: verses, isValidating } = useSWRImmutable(\n getReaderViewRequestKey({\n pageNumber,\n pageVersesRange: getPageVersesRange(pageNumber, pagesVersesRange),\n quranReaderStyles,\n reciter: reciterId,\n locale: lang,\n wordByWordLocale,\n }),\n verseFetcher,\n {\n fallbackData: shouldUseInitialData ? initialVerses : null,\n revalidateOnMount: !shouldUseInitialData,\n },\n );\n\n useEffect(() => {\n if (verses) {\n // @ts-ignore\n setMushafPageToVersesMap((prevMushafPageToVersesMap: Record<number, Verse[]>) => ({\n ...prevMushafPageToVersesMap,\n [pageNumber]: verses,\n }));\n }\n }, [pageNumber, setMushafPageToVersesMap, verses]);\n\n if (!verses || isValidating) {\n return <ReadingViewSkeleton />;\n }\n\n return (\n <Page\n verses={verses}\n key={`page-${pageNumber}`}\n pageNumber={Number(pageNumber)}\n quranReaderStyles={quranReaderStyles}\n pageIndex={pageIndex}\n />\n );\n};\n\nexport default PageContainer;\n","import React from 'react';\n\nimport useTranslation from 'next-translate/useTranslation';\n\nimport styles from './PageFooter.module.scss';\n\nimport Link from '@/dls/Link/Link';\nimport { toLocalizedNumber } from '@/utils/locale';\nimport { getPageNavigationUrl } from '@/utils/navigation';\n\ninterface Props {\n page: number;\n}\n\nconst PageFooter: React.FC<Props> = ({ page }) => {\n const { lang } = useTranslation('quran-reader');\n const pageUrl = getPageNavigationUrl(page);\n\n return (\n <div className={styles.pageText}>\n <Link href={pageUrl} shouldPassHref shouldPrefetch={false}>\n <p className={styles.pageLink}>{toLocalizedNumber(page, lang)}</p>\n </Link>\n </div>\n );\n};\n\nexport default PageFooter;\n","import React, { useContext } from 'react';\n\nimport { useSelector } from '@xstate/react';\nimport classNames from 'classnames';\nimport useTranslation from 'next-translate/useTranslation';\n\nimport styles from './PageNavigationButtons.module.scss';\n\nimport Button, { ButtonSize } from '@/dls/Button/Button';\nimport KeyboardInput from '@/dls/KeyboardInput';\nimport { ContentSide } from '@/dls/Tooltip';\nimport ChevronDownIcon from '@/icons/chevron-down.svg';\nimport { AudioPlayerMachineContext } from 'src/xstate/AudioPlayerMachineContext';\n\ninterface Props {\n scrollToNextPage: () => void;\n scrollToPreviousPage: () => void;\n}\n\nconst PageNavigationButtons: React.FC<Props> = ({ scrollToNextPage, scrollToPreviousPage }) => {\n const { t } = useTranslation('quran-reader');\n const audioService = useContext(AudioPlayerMachineContext);\n const isAudioPlayerHidden = useSelector(audioService, (state) => state.matches('HIDDEN'));\n return (\n <div\n className={classNames(styles.buttonsContainer, {\n [styles.audioPlayerOpen]: !isAudioPlayerHidden,\n })}\n >\n <Button\n size={ButtonSize.Small}\n className={styles.prevButton}\n onClick={scrollToPreviousPage}\n shouldFlipOnRTL={false}\n tooltip={\n <>\n {t('prev-page')} <KeyboardInput invertColors keyboardKey=\"⬆\" />\n </>\n }\n tooltipContentSide={ContentSide.LEFT}\n >\n <ChevronDownIcon />\n </Button>\n <Button\n size={ButtonSize.Small}\n onClick={scrollToNextPage}\n tooltip={\n <>\n {t('next-page')} <KeyboardInput invertColors keyboardKey=\"⬇\" />\n </>\n }\n tooltipContentSide={ContentSide.LEFT}\n >\n <ChevronDownIcon />\n </Button>\n </div>\n );\n};\n\nexport default PageNavigationButtons;\n","import classNames from 'classnames';\nimport range from 'lodash/range';\nimport { shallowEqual, useSelector } from 'react-redux';\n\nimport styles from './ReadingViewSkeleton.module.scss';\n\nimport verseTextStyles from '@/components/Verse/VerseText.module.scss';\nimport Skeleton from '@/dls/Skeleton/Skeleton';\nimport { selectInlineDisplayWordByWordPreferences } from '@/redux/slices/QuranReader/readingPreferences';\nimport { selectQuranReaderStyles } from '@/redux/slices/QuranReader/styles';\nimport { getFontClassName } from '@/utils/fontFaceHelper';\nimport { getMushafLinesNumber } from '@/utils/page';\n\nconst ReadingViewSkeleton = () => {\n const { quranFont, quranTextFontScale, mushafLines } = useSelector(\n selectQuranReaderStyles,\n shallowEqual,\n );\n const { showWordByWordTranslation, showWordByWordTransliteration } = useSelector(\n selectInlineDisplayWordByWordPreferences,\n shallowEqual,\n );\n const numberOfLines = getMushafLinesNumber(quranFont, mushafLines);\n const isWordByWordLayout = showWordByWordTranslation || showWordByWordTransliteration;\n\n return (\n <div className={styles.skeletonContainer}>\n {range(numberOfLines).map((i) => (\n <Skeleton\n key={i}\n className={classNames(\n styles.skeleton,\n verseTextStyles[getFontClassName(quranFont, quranTextFontScale, mushafLines)],\n {\n [styles.fixedWidth]: !isWordByWordLayout,\n },\n )}\n />\n ))}\n </div>\n );\n};\n\nexport default ReadingViewSkeleton;\n","import groupBy from 'lodash/groupBy';\n\nimport { getVerseWords } from '@/utils/verse';\nimport Verse from 'types/Verse';\nimport Word from 'types/Word';\n\n/**\n * Groups verses into lines to match the Quran Page (Madani Mushaf) layout\n * The returning value is an object containing the page and line number as a key,\n * and array of word for the value. E.g.\n * {\n * Page1-Line2: [words],\n * Page1-Line3: [words]\n * ...\n * }\n *\n * @returns {Record<string, Word[]}\n */\nconst groupLinesByVerses = (verses: Verse[]): Record<string, Word[]> => {\n let words = [];\n\n // Flattens the verses into an array of words\n verses.forEach((verse) => {\n words = [...words, ...getVerseWords(verse, true)];\n });\n\n // Groups the words based on their (page and) line number\n const lines = groupBy(words, (word) => `Page${word.pageNumber}-Line${word.lineNumber}`);\n\n return lines;\n};\n\nexport default groupLinesByVerses;\n","import { useEffect, useRef } from 'react';\n\nimport { useRouter } from 'next/router';\nimport { VirtuosoHandle } from 'react-virtuoso';\n\nimport QuranReaderStyles from '@/redux/types/QuranReaderStyles';\nimport { getMushafId } from '@/utils/api';\nimport { makeVersesFilterUrl } from '@/utils/apiPaths';\nimport { getVerseNumberFromKey } from '@/utils/verse';\nimport { fetcher } from 'src/api';\nimport { VersesResponse } from 'types/ApiResponses';\nimport LookupRecord from 'types/LookupRecord';\nimport { MushafLines, QuranFont, QuranReaderDataType } from 'types/QuranReader';\nimport ScrollAlign from 'types/ScrollAlign';\nimport Verse from 'types/Verse';\n\n/**\n * Get where a verse lies in a mushaf page. This is achieved by:\n *\n * 1. Checking where the index of the current verse is within the page.\n * 2. Calculating how far the index is from the beginning of the array of verses of that page.\n * 3. If it lies in the first third portion, then its position is 'start', the second\n * third of the page, its position is 'center', the last third of the page its position\n * is 'end'.\n *\n * @param {string} startingVerseKey\n * @param {number} mushafPageNumber\n * @param {Record<number, LookupRecord>} pagesVersesRange\n * @returns {ScrollAlign}\n */\nconst getVersePositionWithinAMushafPage = (\n startingVerseKey: string,\n mushafPageNumber: number,\n pagesVersesRange: Record<number, LookupRecord>,\n): ScrollAlign => {\n const pageStartVerseNumber = getVerseNumberFromKey(pagesVersesRange[mushafPageNumber].from);\n const pageEndVerseNumber = getVerseNumberFromKey(pagesVersesRange[mushafPageNumber].to);\n const verseOrderWithinPage = getVerseNumberFromKey(startingVerseKey) - pageStartVerseNumber + 1;\n const totalPageNumberOfVerses = pageEndVerseNumber - pageStartVerseNumber + 1;\n const verseKeyPosition = (verseOrderWithinPage * 100) / totalPageNumberOfVerses;\n if (verseKeyPosition <= 33.3) {\n return ScrollAlign.Start;\n }\n if (verseKeyPosition <= 66.6) {\n return ScrollAlign.Center;\n }\n return ScrollAlign.End;\n};\n\n/**\n * This hook listens to startingVerse query param and navigate to the\n * location where the page of that verse is in the virtualized list if we\n * already have the data of that verse; otherwise, we will call BE to fetch\n * the page number of the verse we want to navigate to.\n *\n * [NOTE]: This is meant to be used by ReadingView only.\n *\n * @param {QuranReaderDataType} quranReaderDataType\n * @param {React.MutableRefObject<VirtuosoHandle>} virtuosoRef\n * @param {VersesResponse} initialData\n * @param {QuranReaderStyles} quranReaderStyles\n * @param {Verse[]} verses\n * @param {Record<number, LookupRecord>} pagesVersesRange\n * @param {boolean} isUsingDefaultFont\n * @param {QuranFont} quranFont\n * @param {MushafLines} mushafLines\n * @param {boolean} isPagesLookupLoading\n */\nconst useScrollToVirtualizedReadingView = (\n quranReaderDataType: QuranReaderDataType,\n virtuosoRef: React.MutableRefObject<VirtuosoHandle>,\n initialData: VersesResponse,\n quranReaderStyles: QuranReaderStyles,\n verses: Verse[],\n pagesVersesRange: Record<number, LookupRecord>,\n isUsingDefaultFont: boolean,\n quranFont: QuranFont,\n mushafLines: MushafLines,\n isPagesLookupLoading: boolean,\n) => {\n const router = useRouter();\n const { startingVerse, chapterId } = router.query;\n const shouldScroll = useRef(true);\n\n /**\n * We need to scroll again when we have just changed the font since the same\n * verse might lie on another page/position. Same for when we change the\n * verse.\n */\n useEffect(() => {\n shouldScroll.current = true;\n }, [quranFont, mushafLines, startingVerse]);\n\n useEffect(\n // eslint-disable-next-line react-func/max-lines-per-function\n () => {\n // if we have the data of the page lookup\n if (!isPagesLookupLoading && virtuosoRef.current && Object.keys(pagesVersesRange).length) {\n // if startingVerse is present in the url\n if (quranReaderDataType === QuranReaderDataType.Chapter && startingVerse) {\n const startingVerseNumber = Number(startingVerse);\n // if the startingVerse is a valid integer and is above 1\n if (Number.isInteger(startingVerseNumber) && startingVerseNumber > 0) {\n const firstPageOfCurrentChapter = isUsingDefaultFont\n ? initialData.verses[0].pageNumber\n : Number(Object.keys(pagesVersesRange)[0]);\n // search for the verse number in the already fetched verses first\n const startFromVerseData = verses.find(\n (verse) => verse.verseNumber === startingVerseNumber,\n );\n if (\n startFromVerseData &&\n shouldScroll.current === true &&\n pagesVersesRange[startFromVerseData.pageNumber]\n ) {\n const scrollToPageIndex = startFromVerseData.pageNumber - firstPageOfCurrentChapter;\n virtuosoRef.current.scrollToIndex({\n index: scrollToPageIndex,\n align: getVersePositionWithinAMushafPage(\n `${chapterId}:${startingVerseNumber}`,\n startFromVerseData.pageNumber,\n pagesVersesRange,\n ),\n });\n shouldScroll.current = false;\n } else {\n // get the page number by the verse key and the mushafId (because the page will be different for Indopak Mushafs)\n fetcher(\n makeVersesFilterUrl({\n filters: `${chapterId}:${startingVerseNumber}`,\n fields: `page_number`,\n ...getMushafId(quranReaderStyles.quranFont, quranReaderStyles.mushafLines),\n }),\n ).then((response: VersesResponse) => {\n if (response.verses.length && shouldScroll.current === true) {\n const scrollToPageIndex =\n response.verses[0].pageNumber - firstPageOfCurrentChapter;\n if (pagesVersesRange[response.verses[0].pageNumber]) {\n virtuosoRef.current.scrollToIndex({\n index: scrollToPageIndex,\n align: getVersePositionWithinAMushafPage(\n `${chapterId}:${startingVerseNumber}`,\n response.verses[0].pageNumber,\n pagesVersesRange,\n ),\n });\n shouldScroll.current = false;\n }\n }\n });\n }\n }\n }\n }\n },\n [\n chapterId,\n initialData.verses,\n isPagesLookupLoading,\n isUsingDefaultFont,\n pagesVersesRange,\n quranReaderDataType,\n quranReaderStyles.mushafLines,\n quranReaderStyles.quranFont,\n startingVerse,\n verses,\n virtuosoRef,\n ],\n );\n};\n\nexport default useScrollToVirtualizedReadingView;\n","/* eslint-disable max-lines */\n/* eslint-disable react-func/max-lines-per-function */\n/* eslint-disable react/no-multi-comp */\nimport React, { useCallback, useMemo, useRef, useState } from 'react';\n\nimport classNames from 'classnames';\nimport dynamic from 'next/dynamic';\nimport useTranslation from 'next-translate/useTranslation';\nimport { useHotkeys } from 'react-hotkeys-hook';\nimport { shallowEqual, useSelector } from 'react-redux';\nimport { Virtuoso, VirtuosoHandle } from 'react-virtuoso';\n\nimport { getPageIndexByPageNumber } from '../utils/page';\n\nimport useScrollToVirtualizedVerse from './hooks/useScrollToVirtualizedVerse';\nimport PageContainer from './PageContainer';\nimport PageNavigationButtons from './PageNavigationButtons';\nimport styles from './ReadingView.module.scss';\nimport ReadingViewSkeleton from './ReadingViewSkeleton';\n\nimport useFetchPagesLookup from '@/components/QuranReader/hooks/useFetchPagesLookup';\nimport onCopyQuranWords from '@/components/QuranReader/onCopyQuranWords';\nimport QueryParamMessage from '@/components/QuranReader/QueryParamMessage';\nimport Spinner from '@/dls/Spinner/Spinner';\nimport useGetQueryParamOrReduxValue from '@/hooks/useGetQueryParamOrReduxValue';\nimport useGetQueryParamOrXstateValue from '@/hooks/useGetQueryParamOrXstateValue';\nimport useQcfFont from '@/hooks/useQcfFont';\nimport { selectedLastReadPage } from '@/redux/slices/QuranReader/readingTracker';\nimport { selectIsUsingDefaultFont } from '@/redux/slices/QuranReader/styles';\nimport QuranReaderStyles from '@/redux/types/QuranReaderStyles';\nimport { logButtonClick } from '@/utils/eventLogger';\nimport { getLineWidthClassName } from '@/utils/fontFaceHelper';\nimport Error from 'src/pages/_error';\nimport { VersesResponse } from 'types/ApiResponses';\nimport QueryParam from 'types/QueryParam';\nimport { QuranReaderDataType } from 'types/QuranReader';\nimport Verse from 'types/Verse';\n\nconst EndOfScrollingControls = dynamic(\n () => import('@/components/QuranReader/EndOfScrollingControls'),\n {\n ssr: false,\n loading: () => <Spinner />,\n },\n);\n\ntype ReadingViewProps = {\n quranReaderStyles: QuranReaderStyles;\n quranReaderDataType: QuranReaderDataType;\n initialData: VersesResponse;\n resourceId: number | string; // can be the chapter, verse, tafsir, hizb, juz, rub or page's ID.\n};\n\nconst INCREASE_VIEWPORT_BY_PIXELS = 1200;\n\nconst ReadingView = ({\n quranReaderStyles,\n quranReaderDataType,\n initialData,\n resourceId,\n}: ReadingViewProps) => {\n const [mushafPageToVersesMap, setMushafPageToVersesMap] = useState<Record<number, Verse[]>>({\n [initialData.verses[0].pageNumber]: initialData.verses,\n });\n const { lang } = useTranslation('quran-reader');\n const isUsingDefaultFont = useSelector(selectIsUsingDefaultFont);\n const lastReadPageNumber = useSelector(selectedLastReadPage, shallowEqual);\n const verses = useMemo(\n () => Object.values(mushafPageToVersesMap).flat(),\n [mushafPageToVersesMap],\n );\n const {\n value: reciterId,\n isQueryParamDifferent: reciterQueryParamDifferent,\n }: { value: number; isQueryParamDifferent: boolean } = useGetQueryParamOrXstateValue(\n QueryParam.Reciter,\n );\n const {\n value: wordByWordLocale,\n isQueryParamDifferent: wordByWordLocaleQueryParamDifferent,\n }: { value: string; isQueryParamDifferent: boolean } = useGetQueryParamOrReduxValue(\n QueryParam.WBW_LOCALE,\n );\n const { quranFont, mushafLines, quranTextFontScale } = quranReaderStyles;\n useQcfFont(quranFont, verses);\n const { pagesCount, hasError, pagesVersesRange, isLoading } = useFetchPagesLookup(\n resourceId,\n quranReaderDataType,\n initialData,\n quranReaderStyles,\n isUsingDefaultFont,\n );\n const currentPageIndex = useMemo(\n () => getPageIndexByPageNumber(Number(lastReadPageNumber), pagesVersesRange),\n [lastReadPageNumber, pagesVersesRange],\n );\n const virtuosoRef = useRef<VirtuosoHandle>(null);\n useScrollToVirtualizedVerse(\n quranReaderDataType,\n virtuosoRef,\n initialData,\n quranReaderStyles,\n verses,\n pagesVersesRange,\n isUsingDefaultFont,\n quranFont,\n mushafLines,\n isLoading,\n );\n\n const scrollToPreviousPage = useCallback(() => {\n virtuosoRef.current.scrollToIndex({\n index: currentPageIndex - 1,\n align: 'start',\n offset: -35,\n });\n }, [currentPageIndex]);\n\n const scrollToNextPage = useCallback(() => {\n virtuosoRef.current.scrollToIndex({\n index: currentPageIndex + 1,\n align: 'start',\n offset: 25,\n });\n }, [currentPageIndex]);\n\n const onPrevPageClicked = useCallback(() => {\n logButtonClick('reading_view_prev_page_button');\n scrollToPreviousPage();\n }, [scrollToPreviousPage]);\n\n const onNextPageClicked = useCallback(() => {\n logButtonClick('reading_view_next_page_button');\n scrollToNextPage();\n }, [scrollToNextPage]);\n\n const allowKeyboardNavigation = quranTextFontScale <= 5;\n const onUpClicked = useCallback(\n (event: KeyboardEvent) => {\n event.preventDefault();\n scrollToPreviousPage();\n },\n [scrollToPreviousPage],\n );\n\n const onDownClicked = useCallback(\n (event: KeyboardEvent) => {\n event.preventDefault();\n scrollToNextPage();\n },\n [scrollToNextPage],\n );\n\n useHotkeys('Up', onUpClicked, { enabled: allowKeyboardNavigation }, [scrollToPreviousPage]);\n useHotkeys('Down', onDownClicked, { enabled: allowKeyboardNavigation }, [scrollToNextPage]);\n\n const itemContentRenderer = (pageIndex: number) => {\n if (pageIndex === pagesCount) {\n const pageVerses = mushafPageToVersesMap[lastReadPageNumber];\n const lastVerse = pageVerses?.[pageVerses.length - 1];\n if (!lastVerse) return null;\n\n return (\n <EndOfScrollingControls\n quranReaderDataType={quranReaderDataType}\n lastVerse={lastVerse}\n initialData={initialData}\n />\n );\n }\n\n return (\n <PageContainer\n pagesVersesRange={pagesVersesRange}\n quranReaderStyles={quranReaderStyles}\n reciterId={reciterId}\n lang={lang}\n wordByWordLocale={wordByWordLocale}\n pageIndex={pageIndex}\n setMushafPageToVersesMap={setMushafPageToVersesMap}\n initialData={initialData}\n />\n );\n };\n\n if (hasError) {\n return <Error />;\n }\n\n const shouldShowQueryParamMessage =\n reciterQueryParamDifferent || wordByWordLocaleQueryParamDifferent;\n\n return (\n <>\n {shouldShowQueryParamMessage && (\n <QueryParamMessage\n translationsQueryParamDifferent={false}\n reciterQueryParamDifferent={reciterQueryParamDifferent}\n wordByWordLocaleQueryParamDifferent={wordByWordLocaleQueryParamDifferent}\n />\n )}\n <div\n onCopy={(event) => onCopyQuranWords(event, verses, quranFont)}\n className={classNames(\n styles.container,\n styles[getLineWidthClassName(quranFont, quranTextFontScale, mushafLines)],\n )}\n >\n {isLoading ? (\n <div className={styles.virtuosoScroller}>\n <ReadingViewSkeleton />\n </div>\n ) : (\n <Virtuoso\n ref={virtuosoRef}\n useWindowScroll\n increaseViewportBy={INCREASE_VIEWPORT_BY_PIXELS}\n className={styles.virtuosoScroller}\n initialItemCount={1} // needed for SSR.\n totalCount={pagesCount + 1}\n itemContent={itemContentRenderer}\n />\n )}\n </div>\n {allowKeyboardNavigation && (\n <PageNavigationButtons\n scrollToNextPage={onNextPageClicked}\n scrollToPreviousPage={onPrevPageClicked}\n />\n )}\n </>\n );\n};\n\nexport default ReadingView;\n","import LookupRecord from 'types/LookupRecord';\n\n/**\n * Get the page number by adding the first page number of the current\n * resource e.g. chapter to the item (page) index from the virtualized list.\n *\n * @param {number} pageIndex\n * @param {Record<number, LookupRecord>} pagesVersesRange\n * @returns {number}\n */\nexport const getPageNumberByPageIndex = (\n pageIndex: number,\n pagesVersesRange: Record<number, LookupRecord>,\n): number => Number(Object.keys(pagesVersesRange)[0]) + pageIndex;\n\n/**\n * Get the page index by the page number.\n *\n * @param {number} pageNumber\n * @param {Record<number, LookupRecord>} pagesVersesRange\n * @returns {number}\n */\nexport const getPageIndexByPageNumber = (\n pageNumber: number,\n pagesVersesRange: Record<number, LookupRecord>,\n): number => Number(pageNumber) - Number(Object.keys(pagesVersesRange)[0]);\n\n/**\n * Get the number of pages of the current resource e.g. chapter.\n *\n * @param {number} numberOfVerses\n * @param {number} versesPerPage\n * @returns {number}\n */\nexport const getNumberOfPages = (numberOfVerses: number, versesPerPage: number): number =>\n Math.ceil(numberOfVerses / versesPerPage);\n\n/**\n * Convert a verse index to a page number by dividing the index\n * by how many items there are in a page.\n *\n * @param {number} verseNumber\n * @param {number} versesPerPage\n * @returns {number}\n */\nexport const verseIndexToApiPageNumber = (verseNumber: number, versesPerPage: number): number =>\n Math.floor(verseNumber / versesPerPage) + 1;\n"],"names":["React","useEffect","memo","useContext","useSelector","useXstateSelector","classNames","shallowEqual","verseFontChanged","styles","ChapterHeader","useOnboarding","VerseText","useScroll","SMOOTH_SCROLL_TO_CENTER","selectEnableAutoScrolling","selectInlineDisplayWordByWordPreferences","getWordDataByLocation","AudioPlayerMachineContext","Line","lineKey","words","isBigTextLayout","pageIndex","lineIndex","audioService","isHighlighted","state","surah","ayahNumber","context","verseKeys","map","word","verseKey","includes","scrollToSelectedItem","selectedItemRef","isActive","enableAutoScrolling","showWordByWordTranslation","showWordByWordTransliteration","firstWordData","location","shouldShowChapterHeader","isWordByWordLayout","div","ref","id","className","container","highlighted","mobileInline","chapterId","pageNumber","hizbNumber","line","fixedWidth","isReadingMode","shouldShowH1ForSEO","areLinesEqual","prevProps","nextProps","quranReaderStyles","useMemo","groupLinesByVerses","PageFooter","useIsFontLoaded","getLineWidthClassName","FALLBACK_FONT","QuranFont","Page","verses","lines","length","quranTextFontScale","quranFont","mushafLines","Tajweed","isFontLoaded","mobileCenterText","Object","keys","key","page","useSWRImmutable","getPageNumberByPageIndex","ReadingViewSkeleton","getReaderViewRequestKey","verseFetcher","useIsUsingDefaultSettings","getPageVersesRange","currentMushafPage","apiPagesVersesRange","lookupRecord","firstVerseKey","lastVerseKey","getInitialVerses","initialVerses","verse","filter","PageContainer","pagesVersesRange","reciterId","lang","wordByWordLocale","setMushafPageToVersesMap","initialData","isUsingDefaultSettings","shouldUseInitialData","data","isValidating","pageVersesRange","reciter","locale","fallbackData","revalidateOnMount","prevMushafPageToVersesMap","Number","useTranslation","Link","toLocalizedNumber","getPageNavigationUrl","pageUrl","pageText","href","shouldPassHref","shouldPrefetch","p","pageLink","Button","ButtonSize","KeyboardInput","ContentSide","ChevronDownIcon","PageNavigationButtons","scrollToNextPage","scrollToPreviousPage","t","isAudioPlayerHidden","matches","buttonsContainer","audioPlayerOpen","size","Small","prevButton","onClick","shouldFlipOnRTL","tooltip","invertColors","keyboardKey","tooltipContentSide","LEFT","range","verseTextStyles","Skeleton","selectQuranReaderStyles","getFontClassName","getMushafLinesNumber","numberOfLines","skeletonContainer","i","skeleton","groupBy","getVerseWords","forEach","lineNumber","useRef","useRouter","getMushafId","makeVersesFilterUrl","getVerseNumberFromKey","fetcher","QuranReaderDataType","ScrollAlign","getVersePositionWithinAMushafPage","startingVerseKey","mushafPageNumber","pageStartVerseNumber","from","pageEndVerseNumber","to","verseOrderWithinPage","totalPageNumberOfVerses","verseKeyPosition","Start","Center","End","useScrollToVirtualizedReadingView","quranReaderDataType","virtuosoRef","isUsingDefaultFont","isPagesLookupLoading","router","startingVerse","query","shouldScroll","current","Chapter","startingVerseNumber","isInteger","firstPageOfCurrentChapter","startFromVerseData","find","verseNumber","scrollToPageIndex","scrollToIndex","index","align","filters","fields","then","response","useCallback","useState","dynamic","useHotkeys","Virtuoso","getPageIndexByPageNumber","useScrollToVirtualizedVerse","useFetchPagesLookup","onCopyQuranWords","QueryParamMessage","Spinner","useGetQueryParamOrReduxValue","useGetQueryParamOrXstateValue","useQcfFont","selectedLastReadPage","selectIsUsingDefaultFont","logButtonClick","Error","QueryParam","EndOfScrollingControls","ssr","loading","INCREASE_VIEWPORT_BY_PIXELS","ReadingView","resourceId","mushafPageToVersesMap","lastReadPageNumber","values","flat","value","isQueryParamDifferent","reciterQueryParamDifferent","Reciter","wordByWordLocaleQueryParamDifferent","WBW_LOCALE","pagesCount","hasError","isLoading","currentPageIndex","offset","onPrevPageClicked","onNextPageClicked","allowKeyboardNavigation","onUpClicked","event","preventDefault","onDownClicked","enabled","itemContentRenderer","pageVerses","lastVerse","shouldShowQueryParamMessage","translationsQueryParamDifferent","onCopy","virtuosoScroller","useWindowScroll","increaseViewportBy","initialItemCount","totalCount","itemContent","getNumberOfPages","numberOfVerses","versesPerPage","Math","ceil","verseIndexToApiPageNumber","floor"],"sourceRoot":""}
|