29078.js 66 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109
  1. exports.id = 29078;
  2. exports.ids = [29078];
  3. exports.modules = {
  4. /***/ 33126:
  5. /***/ ((module) => {
  6. // Exports
  7. module.exports = {
  8. "line": "Line_line__3jPyY",
  9. "container": "Line_container__CApVP",
  10. "mobileInline": "Line_mobileInline__jEjq9",
  11. "fixedWidth": "Line_fixedWidth__AHk9W"
  12. };
  13. /***/ }),
  14. /***/ 84619:
  15. /***/ ((module) => {
  16. // Exports
  17. module.exports = {
  18. "fallback_qpc_uthmani_hafs-line-width-1": "Page_fallback_qpc_uthmani_hafs-line-width-1__X9dUi",
  19. "fallback_qpc_uthmani_hafs-line-width-2": "Page_fallback_qpc_uthmani_hafs-line-width-2__prdZQ",
  20. "fallback_qpc_uthmani_hafs-line-width-3": "Page_fallback_qpc_uthmani_hafs-line-width-3__CpdkI",
  21. "fallback_qpc_uthmani_hafs-line-width-4": "Page_fallback_qpc_uthmani_hafs-line-width-4__bpdKT",
  22. "fallback_qpc_uthmani_hafs-line-width-5": "Page_fallback_qpc_uthmani_hafs-line-width-5__r0dhC",
  23. "fallback_qpc_uthmani_hafs-line-width-6": "Page_fallback_qpc_uthmani_hafs-line-width-6__hNehk",
  24. "fallback_qpc_uthmani_hafs-line-width-7": "Page_fallback_qpc_uthmani_hafs-line-width-7__W627r",
  25. "fallback_qpc_uthmani_hafs-line-width-8": "Page_fallback_qpc_uthmani_hafs-line-width-8__obMGX",
  26. "fallback_qpc_uthmani_hafs-line-width-9": "Page_fallback_qpc_uthmani_hafs-line-width-9__uE3Np",
  27. "fallback_qpc_uthmani_hafs-line-width-10": "Page_fallback_qpc_uthmani_hafs-line-width-10__g_Coa",
  28. "container": "Page_container__hkXnW",
  29. "mobileCenterText": "Page_mobileCenterText__WB1en"
  30. };
  31. /***/ }),
  32. /***/ 7994:
  33. /***/ ((module) => {
  34. // Exports
  35. module.exports = {
  36. "pageText": "PageFooter_pageText__YdcIS",
  37. "pageLink": "PageFooter_pageLink__YT3wq"
  38. };
  39. /***/ }),
  40. /***/ 15426:
  41. /***/ ((module) => {
  42. // Exports
  43. module.exports = {
  44. "buttonsContainer": "PageNavigationButtons_buttonsContainer__fomTO",
  45. "prevButton": "PageNavigationButtons_prevButton__OOwCQ",
  46. "audioPlayerOpen": "PageNavigationButtons_audioPlayerOpen__sIOdL"
  47. };
  48. /***/ }),
  49. /***/ 27374:
  50. /***/ ((module) => {
  51. // Exports
  52. module.exports = {
  53. "code_v1-line-width-1": "ReadingView_code_v1-line-width-1__u_hC8",
  54. "code_v1-line-width-2": "ReadingView_code_v1-line-width-2__Hf8MJ",
  55. "code_v1-line-width-3": "ReadingView_code_v1-line-width-3__C3GX9",
  56. "code_v1-line-width-4": "ReadingView_code_v1-line-width-4__JF_zd",
  57. "code_v1-line-width-5": "ReadingView_code_v1-line-width-5__6kO9e",
  58. "code_v1-line-width-6": "ReadingView_code_v1-line-width-6__Xmg9T",
  59. "code_v1-line-width-7": "ReadingView_code_v1-line-width-7__5DID0",
  60. "code_v1-line-width-8": "ReadingView_code_v1-line-width-8__QSPjI",
  61. "code_v1-line-width-9": "ReadingView_code_v1-line-width-9__g4KUg",
  62. "code_v1-line-width-10": "ReadingView_code_v1-line-width-10__EbYvu",
  63. "code_v2-line-width-1": "ReadingView_code_v2-line-width-1__LKGTJ",
  64. "code_v2-line-width-2": "ReadingView_code_v2-line-width-2__XxvSm",
  65. "code_v2-line-width-3": "ReadingView_code_v2-line-width-3__boomP",
  66. "code_v2-line-width-4": "ReadingView_code_v2-line-width-4__jii3F",
  67. "code_v2-line-width-5": "ReadingView_code_v2-line-width-5__yh418",
  68. "code_v2-line-width-6": "ReadingView_code_v2-line-width-6__PmlQ_",
  69. "code_v2-line-width-7": "ReadingView_code_v2-line-width-7__L3zwX",
  70. "code_v2-line-width-8": "ReadingView_code_v2-line-width-8__fodHn",
  71. "code_v2-line-width-9": "ReadingView_code_v2-line-width-9__R51Sk",
  72. "code_v2-line-width-10": "ReadingView_code_v2-line-width-10__aRnmF",
  73. "text_indopak_15_lines-line-width-1": "ReadingView_text_indopak_15_lines-line-width-1__HIvVb",
  74. "text_indopak_15_lines-line-width-2": "ReadingView_text_indopak_15_lines-line-width-2__COw_J",
  75. "text_indopak_15_lines-line-width-3": "ReadingView_text_indopak_15_lines-line-width-3__x0I0x",
  76. "text_indopak_15_lines-line-width-4": "ReadingView_text_indopak_15_lines-line-width-4__oxtcz",
  77. "text_indopak_15_lines-line-width-5": "ReadingView_text_indopak_15_lines-line-width-5__CIg5C",
  78. "text_indopak_15_lines-line-width-6": "ReadingView_text_indopak_15_lines-line-width-6__e8_Zq",
  79. "text_indopak_15_lines-line-width-7": "ReadingView_text_indopak_15_lines-line-width-7__R1c56",
  80. "text_indopak_15_lines-line-width-8": "ReadingView_text_indopak_15_lines-line-width-8__f1hhH",
  81. "text_indopak_15_lines-line-width-9": "ReadingView_text_indopak_15_lines-line-width-9__e_Fhh",
  82. "text_indopak_15_lines-line-width-10": "ReadingView_text_indopak_15_lines-line-width-10__av8qG",
  83. "text_indopak_16_lines-line-width-1": "ReadingView_text_indopak_16_lines-line-width-1__wEGW4",
  84. "text_indopak_16_lines-line-width-2": "ReadingView_text_indopak_16_lines-line-width-2__AeVXj",
  85. "text_indopak_16_lines-line-width-3": "ReadingView_text_indopak_16_lines-line-width-3__UEeqd",
  86. "text_indopak_16_lines-line-width-4": "ReadingView_text_indopak_16_lines-line-width-4__2Nw2u",
  87. "text_indopak_16_lines-line-width-5": "ReadingView_text_indopak_16_lines-line-width-5__r2tKN",
  88. "text_indopak_16_lines-line-width-6": "ReadingView_text_indopak_16_lines-line-width-6__ybw6l",
  89. "text_indopak_16_lines-line-width-7": "ReadingView_text_indopak_16_lines-line-width-7____CTX",
  90. "text_indopak_16_lines-line-width-8": "ReadingView_text_indopak_16_lines-line-width-8__ymIE0",
  91. "text_indopak_16_lines-line-width-9": "ReadingView_text_indopak_16_lines-line-width-9__MKM2y",
  92. "text_indopak_16_lines-line-width-10": "ReadingView_text_indopak_16_lines-line-width-10__XhBAV",
  93. "qpc_uthmani_hafs-line-width-1": "ReadingView_qpc_uthmani_hafs-line-width-1__1ArHr",
  94. "qpc_uthmani_hafs-line-width-2": "ReadingView_qpc_uthmani_hafs-line-width-2__I6rKn",
  95. "qpc_uthmani_hafs-line-width-3": "ReadingView_qpc_uthmani_hafs-line-width-3__jIQg8",
  96. "qpc_uthmani_hafs-line-width-4": "ReadingView_qpc_uthmani_hafs-line-width-4__RXw5a",
  97. "qpc_uthmani_hafs-line-width-5": "ReadingView_qpc_uthmani_hafs-line-width-5__eO8Fo",
  98. "qpc_uthmani_hafs-line-width-6": "ReadingView_qpc_uthmani_hafs-line-width-6__TbgkW",
  99. "qpc_uthmani_hafs-line-width-7": "ReadingView_qpc_uthmani_hafs-line-width-7__RoJmi",
  100. "qpc_uthmani_hafs-line-width-8": "ReadingView_qpc_uthmani_hafs-line-width-8__m_AJa",
  101. "qpc_uthmani_hafs-line-width-9": "ReadingView_qpc_uthmani_hafs-line-width-9___DGtD",
  102. "qpc_uthmani_hafs-line-width-10": "ReadingView_qpc_uthmani_hafs-line-width-10__uNVi7",
  103. "tajweed-line-width-1": "ReadingView_tajweed-line-width-1__XzcHo",
  104. "tajweed-line-width-2": "ReadingView_tajweed-line-width-2__qI_3N",
  105. "tajweed-line-width-3": "ReadingView_tajweed-line-width-3__iPATb",
  106. "tajweed-line-width-4": "ReadingView_tajweed-line-width-4___gTZv",
  107. "tajweed-line-width-5": "ReadingView_tajweed-line-width-5__8creJ",
  108. "tajweed-line-width-6": "ReadingView_tajweed-line-width-6__mqO8v",
  109. "tajweed-line-width-7": "ReadingView_tajweed-line-width-7__p1Oi4",
  110. "tajweed-line-width-8": "ReadingView_tajweed-line-width-8__js74h",
  111. "tajweed-line-width-9": "ReadingView_tajweed-line-width-9__gjjDU",
  112. "tajweed-line-width-10": "ReadingView_tajweed-line-width-10__xBOUh",
  113. "container": "ReadingView_container__99RFM",
  114. "virtuosoScroller": "ReadingView_virtuosoScroller__Y3HA6"
  115. };
  116. /***/ }),
  117. /***/ 82877:
  118. /***/ ((module) => {
  119. // Exports
  120. module.exports = {
  121. "skeletonContainer": "ReadingViewSkeleton_skeletonContainer__h5Sb2",
  122. "skeleton": "ReadingViewSkeleton_skeleton__hw8ZE",
  123. "fixedWidth": "ReadingViewSkeleton_fixedWidth__fIRzb"
  124. };
  125. /***/ }),
  126. /***/ 5950:
  127. /***/ ((module, __webpack_exports__, __webpack_require__) => {
  128. "use strict";
  129. __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
  130. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  131. /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
  132. /* harmony export */ });
  133. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20997);
  134. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
  135. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(16689);
  136. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
  137. /* harmony import */ var _xstate_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(59456);
  138. /* harmony import */ var _xstate_react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_xstate_react__WEBPACK_IMPORTED_MODULE_2__);
  139. /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(59003);
  140. /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_3__);
  141. /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6022);
  142. /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_4__);
  143. /* harmony import */ var _utils_memoization__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(52544);
  144. /* harmony import */ var _Line_module_scss__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(33126);
  145. /* harmony import */ var _Line_module_scss__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_Line_module_scss__WEBPACK_IMPORTED_MODULE_13__);
  146. /* harmony import */ var _components_chapters_ChapterHeader__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(59459);
  147. /* harmony import */ var _components_Onboarding_OnboardingProvider__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(51879);
  148. /* harmony import */ var _components_Verse_VerseText__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(36716);
  149. /* harmony import */ var _hooks_useScrollToElement__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(56748);
  150. /* harmony import */ var _redux_slices_AudioPlayer_state__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(53800);
  151. /* harmony import */ var _redux_slices_QuranReader_readingPreferences__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(90264);
  152. /* harmony import */ var _utils_verse__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(44519);
  153. /* harmony import */ var src_xstate_AudioPlayerMachineContext__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(64564);
  154. var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_components_chapters_ChapterHeader__WEBPACK_IMPORTED_MODULE_5__, _components_Onboarding_OnboardingProvider__WEBPACK_IMPORTED_MODULE_6__, _components_Verse_VerseText__WEBPACK_IMPORTED_MODULE_7__, src_xstate_AudioPlayerMachineContext__WEBPACK_IMPORTED_MODULE_12__]);
  155. ([_components_chapters_ChapterHeader__WEBPACK_IMPORTED_MODULE_5__, _components_Onboarding_OnboardingProvider__WEBPACK_IMPORTED_MODULE_6__, _components_Verse_VerseText__WEBPACK_IMPORTED_MODULE_7__, src_xstate_AudioPlayerMachineContext__WEBPACK_IMPORTED_MODULE_12__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
  156. const Line = ({ lineKey , words , isBigTextLayout , pageIndex , lineIndex })=>{
  157. const audioService = (0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)(src_xstate_AudioPlayerMachineContext__WEBPACK_IMPORTED_MODULE_12__/* .AudioPlayerMachineContext */ .c);
  158. const isHighlighted = (0,_xstate_react__WEBPACK_IMPORTED_MODULE_2__.useSelector)(audioService, (state)=>{
  159. const { surah , ayahNumber } = state.context;
  160. const verseKeys = words.map((word)=>word.verseKey);
  161. return verseKeys.includes(`${surah}:${ayahNumber}`);
  162. });
  163. const [scrollToSelectedItem, selectedItemRef] = (0,_hooks_useScrollToElement__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .ZP)(_hooks_useScrollToElement__WEBPACK_IMPORTED_MODULE_8__/* .SMOOTH_SCROLL_TO_CENTER */ .nv);
  164. const { isActive } = (0,_components_Onboarding_OnboardingProvider__WEBPACK_IMPORTED_MODULE_6__/* .useOnboarding */ .P)();
  165. // disable auto scrolling when the user is onboarding
  166. const enableAutoScrolling = (0,react_redux__WEBPACK_IMPORTED_MODULE_4__.useSelector)(_redux_slices_AudioPlayer_state__WEBPACK_IMPORTED_MODULE_9__/* .selectEnableAutoScrolling */ .Mj, react_redux__WEBPACK_IMPORTED_MODULE_4__.shallowEqual) && !isActive;
  167. const { showWordByWordTranslation , showWordByWordTransliteration } = (0,react_redux__WEBPACK_IMPORTED_MODULE_4__.useSelector)(_redux_slices_QuranReader_readingPreferences__WEBPACK_IMPORTED_MODULE_10__/* .selectInlineDisplayWordByWordPreferences */ .eB, react_redux__WEBPACK_IMPORTED_MODULE_4__.shallowEqual);
  168. (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{
  169. if (isHighlighted && enableAutoScrolling) {
  170. scrollToSelectedItem();
  171. }
  172. }, [
  173. isHighlighted,
  174. scrollToSelectedItem,
  175. enableAutoScrolling
  176. ]);
  177. const firstWordData = (0,_utils_verse__WEBPACK_IMPORTED_MODULE_11__/* .getWordDataByLocation */ .TO)(words[0].location);
  178. const shouldShowChapterHeader = firstWordData[1] === "1" && firstWordData[2] === "1";
  179. const isWordByWordLayout = showWordByWordTranslation || showWordByWordTransliteration;
  180. return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
  181. ref: selectedItemRef,
  182. id: lineKey,
  183. className: classnames__WEBPACK_IMPORTED_MODULE_3___default()((_Line_module_scss__WEBPACK_IMPORTED_MODULE_13___default().container), {
  184. [(_Line_module_scss__WEBPACK_IMPORTED_MODULE_13___default().highlighted)]: isHighlighted,
  185. [(_Line_module_scss__WEBPACK_IMPORTED_MODULE_13___default().mobileInline)]: isBigTextLayout
  186. }),
  187. children: [
  188. shouldShowChapterHeader && /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_components_chapters_ChapterHeader__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z, {
  189. chapterId: firstWordData[0],
  190. pageNumber: words[0].pageNumber,
  191. hizbNumber: words[0].hizbNumber
  192. }),
  193. /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
  194. className: classnames__WEBPACK_IMPORTED_MODULE_3___default()((_Line_module_scss__WEBPACK_IMPORTED_MODULE_13___default().line), {
  195. [(_Line_module_scss__WEBPACK_IMPORTED_MODULE_13___default().mobileInline)]: isBigTextLayout,
  196. [(_Line_module_scss__WEBPACK_IMPORTED_MODULE_13___default().fixedWidth)]: !isWordByWordLayout
  197. }),
  198. children: /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_components_Verse_VerseText__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z, {
  199. words: words,
  200. isReadingMode: true,
  201. isHighlighted: isHighlighted,
  202. shouldShowH1ForSEO: pageIndex === 0 && lineIndex === 0
  203. })
  204. })
  205. ]
  206. });
  207. };
  208. /**
  209. * Since we are passing words and it's an array
  210. * even if the same words are passed, their reference will change
  211. * on fetching a new page and since Memo only does shallow comparison,
  212. * we need to use custom comparing logic:
  213. *
  214. * 1. Check if the line keys are the same.
  215. * 2. Check if the number of words are the same.
  216. * 3. Check if isBigTextLayout values are the same.
  217. * 4. Check if the font changed.
  218. *
  219. * If the above conditions are met, it's safe to assume that the result
  220. * of both renders are the same.
  221. *
  222. * @param {LineProps} prevProps
  223. * @param {LineProps} nextProps
  224. * @returns {boolean}
  225. */ const areLinesEqual = (prevProps, nextProps)=>prevProps.lineKey === nextProps.lineKey && prevProps.isBigTextLayout === nextProps.isBigTextLayout && !(0,_utils_memoization__WEBPACK_IMPORTED_MODULE_14__/* .verseFontChanged */ .RG)(prevProps.quranReaderStyles, nextProps.quranReaderStyles, prevProps.words, nextProps.words);
  226. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.memo)(Line, areLinesEqual));
  227. __webpack_async_result__();
  228. } catch(e) { __webpack_async_result__(e); } });
  229. /***/ }),
  230. /***/ 82783:
  231. /***/ ((module, __webpack_exports__, __webpack_require__) => {
  232. "use strict";
  233. __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
  234. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  235. /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
  236. /* harmony export */ });
  237. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20997);
  238. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
  239. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(16689);
  240. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
  241. /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(59003);
  242. /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__);
  243. /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6022);
  244. /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_3__);
  245. /* harmony import */ var _groupLinesByVerses__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(45211);
  246. /* harmony import */ var _Line__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(5950);
  247. /* harmony import */ var _Page_module_scss__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(84619);
  248. /* harmony import */ var _Page_module_scss__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_Page_module_scss__WEBPACK_IMPORTED_MODULE_11__);
  249. /* harmony import */ var _PageFooter__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(4535);
  250. /* harmony import */ var _components_QuranReader_hooks_useIsFontLoaded__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(97226);
  251. /* harmony import */ var _redux_slices_QuranReader_readingPreferences__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(90264);
  252. /* harmony import */ var _utils_fontFaceHelper__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(64198);
  253. /* harmony import */ var types_QuranReader__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(50467);
  254. var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_Line__WEBPACK_IMPORTED_MODULE_5__, _PageFooter__WEBPACK_IMPORTED_MODULE_6__]);
  255. ([_Line__WEBPACK_IMPORTED_MODULE_5__, _PageFooter__WEBPACK_IMPORTED_MODULE_6__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
  256. const Page = ({ verses , pageNumber , quranReaderStyles , pageIndex })=>{
  257. const lines = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>verses && verses.length ? (0,_groupLinesByVerses__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(verses) : {}, [
  258. verses
  259. ]);
  260. const { quranTextFontScale , quranFont , mushafLines } = quranReaderStyles;
  261. const { showWordByWordTranslation , showWordByWordTransliteration } = (0,react_redux__WEBPACK_IMPORTED_MODULE_3__.useSelector)(_redux_slices_QuranReader_readingPreferences__WEBPACK_IMPORTED_MODULE_8__/* .selectInlineDisplayWordByWordPreferences */ .eB, react_redux__WEBPACK_IMPORTED_MODULE_3__.shallowEqual);
  262. const isWordByWordLayout = showWordByWordTranslation || showWordByWordTransliteration;
  263. const isBigTextLayout = isWordByWordLayout || quranTextFontScale > 3 || quranFont === types_QuranReader__WEBPACK_IMPORTED_MODULE_10__/* .QuranFont.Tajweed */ .fr.Tajweed;
  264. const isFontLoaded = (0,_components_QuranReader_hooks_useIsFontLoaded__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z)(pageNumber, quranFont);
  265. return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
  266. id: `page-${pageNumber}`,
  267. className: classnames__WEBPACK_IMPORTED_MODULE_2___default()((_Page_module_scss__WEBPACK_IMPORTED_MODULE_11___default().container), {
  268. [(_Page_module_scss__WEBPACK_IMPORTED_MODULE_11___default().mobileCenterText)]: isBigTextLayout,
  269. [(_Page_module_scss__WEBPACK_IMPORTED_MODULE_11___default())[(0,_utils_fontFaceHelper__WEBPACK_IMPORTED_MODULE_9__/* .getLineWidthClassName */ .oj)(types_QuranReader__WEBPACK_IMPORTED_MODULE_10__/* .FALLBACK_FONT */ .v3, quranTextFontScale, mushafLines, true)]]: !isFontLoaded
  270. }),
  271. children: [
  272. Object.keys(lines).map((key, lineIndex)=>/*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_Line__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z, {
  273. pageIndex: pageIndex,
  274. lineIndex: lineIndex,
  275. lineKey: key,
  276. words: lines[key],
  277. isBigTextLayout: isBigTextLayout,
  278. quranReaderStyles: quranReaderStyles
  279. }, key)),
  280. /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_PageFooter__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z, {
  281. page: pageNumber
  282. })
  283. ]
  284. });
  285. };
  286. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Page);
  287. __webpack_async_result__();
  288. } catch(e) { __webpack_async_result__(e); } });
  289. /***/ }),
  290. /***/ 92296:
  291. /***/ ((module, __webpack_exports__, __webpack_require__) => {
  292. "use strict";
  293. __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
  294. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  295. /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
  296. /* harmony export */ });
  297. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20997);
  298. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
  299. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(16689);
  300. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
  301. /* harmony import */ var swr_immutable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(79847);
  302. /* harmony import */ var _utils_page__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(95871);
  303. /* harmony import */ var _Page__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(82783);
  304. /* harmony import */ var _ReadingViewSkeleton__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(87065);
  305. /* harmony import */ var _components_QuranReader_api__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(96435);
  306. /* harmony import */ var _hooks_useIsUsingDefaultSettings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(35507);
  307. var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([swr_immutable__WEBPACK_IMPORTED_MODULE_2__, _Page__WEBPACK_IMPORTED_MODULE_3__, _hooks_useIsUsingDefaultSettings__WEBPACK_IMPORTED_MODULE_6__]);
  308. ([swr_immutable__WEBPACK_IMPORTED_MODULE_2__, _Page__WEBPACK_IMPORTED_MODULE_3__, _hooks_useIsUsingDefaultSettings__WEBPACK_IMPORTED_MODULE_6__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
  309. const getPageVersesRange = (currentMushafPage, apiPagesVersesRange)=>{
  310. const lookupRecord = {
  311. ...apiPagesVersesRange[currentMushafPage]
  312. };
  313. // TODO: remove this from BE
  314. // we remove firstVerseKey and lastVerseKey before we send the params to BE as BE doesn't need them
  315. delete lookupRecord.firstVerseKey;
  316. delete lookupRecord.lastVerseKey;
  317. return lookupRecord;
  318. };
  319. /**
  320. * Get the verses returned from the initialData of the first page.
  321. * This function will filter out all the words that don't
  322. * belong to the first page in-case we have some verses
  323. * that contain words that don't belong to the first page
  324. * (applies to 16-line Indopak Mushaf e.g. /ur/haji/25 or /ur/2/211-216)
  325. *
  326. * @param {number} pageNumber
  327. * @param {Verse[]} initialVerses
  328. * @returns {Verse[]}
  329. */ const getInitialVerses = (pageNumber, initialVerses)=>initialVerses.map((verse)=>({
  330. ...verse,
  331. words: verse.words.filter((word)=>word.pageNumber === pageNumber)
  332. }));
  333. /**
  334. * A component that will fetch the verses of the current mushaf page
  335. * and will render a skeleton while it's loading.
  336. *
  337. * @param {Props} param0
  338. * @returns {JSX.Element}
  339. */ const PageContainer = ({ pagesVersesRange , quranReaderStyles , reciterId , lang , wordByWordLocale , pageIndex , setMushafPageToVersesMap , initialData })=>{
  340. const pageNumber = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>(0,_utils_page__WEBPACK_IMPORTED_MODULE_7__/* .getPageNumberByPageIndex */ .L8)(pageIndex, pagesVersesRange), [
  341. pageIndex,
  342. pagesVersesRange
  343. ]);
  344. const initialVerses = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>pageIndex === 0 ? getInitialVerses(pageNumber, initialData.verses) : initialData.verses, [
  345. initialData.verses,
  346. pageIndex,
  347. pageNumber
  348. ]);
  349. const isUsingDefaultSettings = (0,_hooks_useIsUsingDefaultSettings__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z)();
  350. const shouldUseInitialData = pageIndex === 0 && isUsingDefaultSettings;
  351. const { data: verses , isValidating } = (0,swr_immutable__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_components_QuranReader_api__WEBPACK_IMPORTED_MODULE_5__/* .getReaderViewRequestKey */ .oA)({
  352. pageNumber,
  353. pageVersesRange: getPageVersesRange(pageNumber, pagesVersesRange),
  354. quranReaderStyles,
  355. reciter: reciterId,
  356. locale: lang,
  357. wordByWordLocale
  358. }), _components_QuranReader_api__WEBPACK_IMPORTED_MODULE_5__/* .verseFetcher */ .f3, {
  359. fallbackData: shouldUseInitialData ? initialVerses : null,
  360. revalidateOnMount: !shouldUseInitialData
  361. });
  362. (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{
  363. if (verses) {
  364. // @ts-ignore
  365. setMushafPageToVersesMap((prevMushafPageToVersesMap)=>({
  366. ...prevMushafPageToVersesMap,
  367. [pageNumber]: verses
  368. }));
  369. }
  370. }, [
  371. pageNumber,
  372. setMushafPageToVersesMap,
  373. verses
  374. ]);
  375. if (!verses || isValidating) {
  376. return /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_ReadingViewSkeleton__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z, {});
  377. }
  378. return /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_Page__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z, {
  379. verses: verses,
  380. pageNumber: Number(pageNumber),
  381. quranReaderStyles: quranReaderStyles,
  382. pageIndex: pageIndex
  383. }, `page-${pageNumber}`);
  384. };
  385. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PageContainer);
  386. __webpack_async_result__();
  387. } catch(e) { __webpack_async_result__(e); } });
  388. /***/ }),
  389. /***/ 4535:
  390. /***/ ((module, __webpack_exports__, __webpack_require__) => {
  391. "use strict";
  392. __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
  393. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  394. /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
  395. /* harmony export */ });
  396. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20997);
  397. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
  398. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(16689);
  399. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
  400. /* harmony import */ var next_translate_useTranslation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(60866);
  401. /* harmony import */ var next_translate_useTranslation__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_translate_useTranslation__WEBPACK_IMPORTED_MODULE_2__);
  402. /* harmony import */ var _PageFooter_module_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(7994);
  403. /* harmony import */ var _PageFooter_module_scss__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_PageFooter_module_scss__WEBPACK_IMPORTED_MODULE_6__);
  404. /* harmony import */ var _dls_Link_Link__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(61239);
  405. /* harmony import */ var _utils_locale__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(24709);
  406. /* harmony import */ var _utils_navigation__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(57933);
  407. var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_utils_navigation__WEBPACK_IMPORTED_MODULE_5__]);
  408. _utils_navigation__WEBPACK_IMPORTED_MODULE_5__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];
  409. const PageFooter = ({ page })=>{
  410. const { lang } = next_translate_useTranslation__WEBPACK_IMPORTED_MODULE_2___default()("quran-reader");
  411. const pageUrl = (0,_utils_navigation__WEBPACK_IMPORTED_MODULE_5__/* .getPageNavigationUrl */ .GK)(page);
  412. return /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
  413. className: (_PageFooter_module_scss__WEBPACK_IMPORTED_MODULE_6___default().pageText),
  414. children: /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_dls_Link_Link__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z, {
  415. href: pageUrl,
  416. shouldPassHref: true,
  417. shouldPrefetch: false,
  418. children: /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("p", {
  419. className: (_PageFooter_module_scss__WEBPACK_IMPORTED_MODULE_6___default().pageLink),
  420. children: (0,_utils_locale__WEBPACK_IMPORTED_MODULE_4__/* .toLocalizedNumber */ .rQ)(page, lang)
  421. })
  422. })
  423. });
  424. };
  425. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PageFooter);
  426. __webpack_async_result__();
  427. } catch(e) { __webpack_async_result__(e); } });
  428. /***/ }),
  429. /***/ 60178:
  430. /***/ ((module, __webpack_exports__, __webpack_require__) => {
  431. "use strict";
  432. __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
  433. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  434. /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
  435. /* harmony export */ });
  436. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20997);
  437. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
  438. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(16689);
  439. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
  440. /* harmony import */ var _xstate_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(59456);
  441. /* harmony import */ var _xstate_react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_xstate_react__WEBPACK_IMPORTED_MODULE_2__);
  442. /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(59003);
  443. /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_3__);
  444. /* harmony import */ var next_translate_useTranslation__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(60866);
  445. /* harmony import */ var next_translate_useTranslation__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(next_translate_useTranslation__WEBPACK_IMPORTED_MODULE_4__);
  446. /* harmony import */ var _PageNavigationButtons_module_scss__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(15426);
  447. /* harmony import */ var _PageNavigationButtons_module_scss__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_PageNavigationButtons_module_scss__WEBPACK_IMPORTED_MODULE_10__);
  448. /* harmony import */ var _dls_Button_Button__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(50497);
  449. /* harmony import */ var _dls_KeyboardInput__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(55557);
  450. /* harmony import */ var _dls_Tooltip__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(8884);
  451. /* harmony import */ var _icons_chevron_down_svg__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(24868);
  452. /* harmony import */ var src_xstate_AudioPlayerMachineContext__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(64564);
  453. var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_dls_Button_Button__WEBPACK_IMPORTED_MODULE_5__, _dls_Tooltip__WEBPACK_IMPORTED_MODULE_7__, src_xstate_AudioPlayerMachineContext__WEBPACK_IMPORTED_MODULE_9__]);
  454. ([_dls_Button_Button__WEBPACK_IMPORTED_MODULE_5__, _dls_Tooltip__WEBPACK_IMPORTED_MODULE_7__, src_xstate_AudioPlayerMachineContext__WEBPACK_IMPORTED_MODULE_9__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
  455. const PageNavigationButtons = ({ scrollToNextPage , scrollToPreviousPage })=>{
  456. const { t } = next_translate_useTranslation__WEBPACK_IMPORTED_MODULE_4___default()("quran-reader");
  457. const audioService = (0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)(src_xstate_AudioPlayerMachineContext__WEBPACK_IMPORTED_MODULE_9__/* .AudioPlayerMachineContext */ .c);
  458. const isAudioPlayerHidden = (0,_xstate_react__WEBPACK_IMPORTED_MODULE_2__.useSelector)(audioService, (state)=>state.matches("HIDDEN"));
  459. return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
  460. className: classnames__WEBPACK_IMPORTED_MODULE_3___default()((_PageNavigationButtons_module_scss__WEBPACK_IMPORTED_MODULE_10___default().buttonsContainer), {
  461. [(_PageNavigationButtons_module_scss__WEBPACK_IMPORTED_MODULE_10___default().audioPlayerOpen)]: !isAudioPlayerHidden
  462. }),
  463. children: [
  464. /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_dls_Button_Button__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .ZP, {
  465. size: _dls_Button_Button__WEBPACK_IMPORTED_MODULE_5__/* .ButtonSize.Small */ .qE.Small,
  466. className: (_PageNavigationButtons_module_scss__WEBPACK_IMPORTED_MODULE_10___default().prevButton),
  467. onClick: scrollToPreviousPage,
  468. shouldFlipOnRTL: false,
  469. tooltip: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {
  470. children: [
  471. t("prev-page"),
  472. " ",
  473. /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_dls_KeyboardInput__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z, {
  474. invertColors: true,
  475. keyboardKey: "⬆"
  476. })
  477. ]
  478. }),
  479. tooltipContentSide: _dls_Tooltip__WEBPACK_IMPORTED_MODULE_7__/* .ContentSide.LEFT */ .iw.LEFT,
  480. children: /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_icons_chevron_down_svg__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .Z, {})
  481. }),
  482. /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_dls_Button_Button__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .ZP, {
  483. size: _dls_Button_Button__WEBPACK_IMPORTED_MODULE_5__/* .ButtonSize.Small */ .qE.Small,
  484. onClick: scrollToNextPage,
  485. tooltip: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {
  486. children: [
  487. t("next-page"),
  488. " ",
  489. /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_dls_KeyboardInput__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z, {
  490. invertColors: true,
  491. keyboardKey: "⬇"
  492. })
  493. ]
  494. }),
  495. tooltipContentSide: _dls_Tooltip__WEBPACK_IMPORTED_MODULE_7__/* .ContentSide.LEFT */ .iw.LEFT,
  496. children: /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_icons_chevron_down_svg__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .Z, {})
  497. })
  498. ]
  499. });
  500. };
  501. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PageNavigationButtons);
  502. __webpack_async_result__();
  503. } catch(e) { __webpack_async_result__(e); } });
  504. /***/ }),
  505. /***/ 87065:
  506. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  507. "use strict";
  508. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  509. /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
  510. /* harmony export */ });
  511. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20997);
  512. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
  513. /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(59003);
  514. /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);
  515. /* harmony import */ var lodash_range__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(64042);
  516. /* harmony import */ var lodash_range__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_range__WEBPACK_IMPORTED_MODULE_2__);
  517. /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6022);
  518. /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_3__);
  519. /* harmony import */ var _ReadingViewSkeleton_module_scss__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(82877);
  520. /* harmony import */ var _ReadingViewSkeleton_module_scss__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_ReadingViewSkeleton_module_scss__WEBPACK_IMPORTED_MODULE_9__);
  521. /* harmony import */ var _components_Verse_VerseText_module_scss__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(29702);
  522. /* harmony import */ var _components_Verse_VerseText_module_scss__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_components_Verse_VerseText_module_scss__WEBPACK_IMPORTED_MODULE_10__);
  523. /* harmony import */ var _dls_Skeleton_Skeleton__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(77048);
  524. /* harmony import */ var _redux_slices_QuranReader_readingPreferences__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(90264);
  525. /* harmony import */ var _redux_slices_QuranReader_styles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(62093);
  526. /* harmony import */ var _utils_fontFaceHelper__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(64198);
  527. /* harmony import */ var _utils_page__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(94007);
  528. const ReadingViewSkeleton = ()=>{
  529. const { quranFont , quranTextFontScale , mushafLines } = (0,react_redux__WEBPACK_IMPORTED_MODULE_3__.useSelector)(_redux_slices_QuranReader_styles__WEBPACK_IMPORTED_MODULE_6__/* .selectQuranReaderStyles */ .Pt, react_redux__WEBPACK_IMPORTED_MODULE_3__.shallowEqual);
  530. const { showWordByWordTranslation , showWordByWordTransliteration } = (0,react_redux__WEBPACK_IMPORTED_MODULE_3__.useSelector)(_redux_slices_QuranReader_readingPreferences__WEBPACK_IMPORTED_MODULE_5__/* .selectInlineDisplayWordByWordPreferences */ .eB, react_redux__WEBPACK_IMPORTED_MODULE_3__.shallowEqual);
  531. const numberOfLines = (0,_utils_page__WEBPACK_IMPORTED_MODULE_8__/* .getMushafLinesNumber */ .Nl)(quranFont, mushafLines);
  532. const isWordByWordLayout = showWordByWordTranslation || showWordByWordTransliteration;
  533. return /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
  534. className: (_ReadingViewSkeleton_module_scss__WEBPACK_IMPORTED_MODULE_9___default().skeletonContainer),
  535. children: lodash_range__WEBPACK_IMPORTED_MODULE_2___default()(numberOfLines).map((i)=>/*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_dls_Skeleton_Skeleton__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z, {
  536. className: classnames__WEBPACK_IMPORTED_MODULE_1___default()((_ReadingViewSkeleton_module_scss__WEBPACK_IMPORTED_MODULE_9___default().skeleton), (_components_Verse_VerseText_module_scss__WEBPACK_IMPORTED_MODULE_10___default())[(0,_utils_fontFaceHelper__WEBPACK_IMPORTED_MODULE_7__/* .getFontClassName */ .bZ)(quranFont, quranTextFontScale, mushafLines)], {
  537. [(_ReadingViewSkeleton_module_scss__WEBPACK_IMPORTED_MODULE_9___default().fixedWidth)]: !isWordByWordLayout
  538. })
  539. }, i))
  540. });
  541. };
  542. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ReadingViewSkeleton);
  543. /***/ }),
  544. /***/ 45211:
  545. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  546. "use strict";
  547. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  548. /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
  549. /* harmony export */ });
  550. /* harmony import */ var lodash_groupBy__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(98492);
  551. /* harmony import */ var lodash_groupBy__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_groupBy__WEBPACK_IMPORTED_MODULE_0__);
  552. /* harmony import */ var _utils_verse__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(44519);
  553. /**
  554. * Groups verses into lines to match the Quran Page (Madani Mushaf) layout
  555. * The returning value is an object containing the page and line number as a key,
  556. * and array of word for the value. E.g.
  557. * {
  558. * Page1-Line2: [words],
  559. * Page1-Line3: [words]
  560. * ...
  561. * }
  562. *
  563. * @returns {Record<string, Word[]}
  564. */ const groupLinesByVerses = (verses)=>{
  565. let words = [];
  566. // Flattens the verses into an array of words
  567. verses.forEach((verse)=>{
  568. words = [
  569. ...words,
  570. ...(0,_utils_verse__WEBPACK_IMPORTED_MODULE_1__/* .getVerseWords */ .LQ)(verse, true)
  571. ];
  572. });
  573. // Groups the words based on their (page and) line number
  574. const lines = lodash_groupBy__WEBPACK_IMPORTED_MODULE_0___default()(words, (word)=>`Page${word.pageNumber}-Line${word.lineNumber}`);
  575. return lines;
  576. };
  577. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (groupLinesByVerses);
  578. /***/ }),
  579. /***/ 82651:
  580. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  581. "use strict";
  582. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  583. /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
  584. /* harmony export */ });
  585. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(16689);
  586. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
  587. /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(71853);
  588. /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_router__WEBPACK_IMPORTED_MODULE_1__);
  589. /* harmony import */ var _utils_api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4917);
  590. /* harmony import */ var _utils_apiPaths__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(46127);
  591. /* harmony import */ var _utils_verse__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(44519);
  592. /* harmony import */ var src_api__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(92684);
  593. /* harmony import */ var types_QuranReader__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(50467);
  594. /* harmony import */ var types_ScrollAlign__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(57070);
  595. /**
  596. * Get where a verse lies in a mushaf page. This is achieved by:
  597. *
  598. * 1. Checking where the index of the current verse is within the page.
  599. * 2. Calculating how far the index is from the beginning of the array of verses of that page.
  600. * 3. If it lies in the first third portion, then its position is 'start', the second
  601. * third of the page, its position is 'center', the last third of the page its position
  602. * is 'end'.
  603. *
  604. * @param {string} startingVerseKey
  605. * @param {number} mushafPageNumber
  606. * @param {Record<number, LookupRecord>} pagesVersesRange
  607. * @returns {ScrollAlign}
  608. */ const getVersePositionWithinAMushafPage = (startingVerseKey, mushafPageNumber, pagesVersesRange)=>{
  609. const pageStartVerseNumber = (0,_utils_verse__WEBPACK_IMPORTED_MODULE_4__/* .getVerseNumberFromKey */ .tR)(pagesVersesRange[mushafPageNumber].from);
  610. const pageEndVerseNumber = (0,_utils_verse__WEBPACK_IMPORTED_MODULE_4__/* .getVerseNumberFromKey */ .tR)(pagesVersesRange[mushafPageNumber].to);
  611. const verseOrderWithinPage = (0,_utils_verse__WEBPACK_IMPORTED_MODULE_4__/* .getVerseNumberFromKey */ .tR)(startingVerseKey) - pageStartVerseNumber + 1;
  612. const totalPageNumberOfVerses = pageEndVerseNumber - pageStartVerseNumber + 1;
  613. const verseKeyPosition = verseOrderWithinPage * 100 / totalPageNumberOfVerses;
  614. if (verseKeyPosition <= 33.3) {
  615. return types_ScrollAlign__WEBPACK_IMPORTED_MODULE_7__/* ["default"].Start */ .Z.Start;
  616. }
  617. if (verseKeyPosition <= 66.6) {
  618. return types_ScrollAlign__WEBPACK_IMPORTED_MODULE_7__/* ["default"].Center */ .Z.Center;
  619. }
  620. return types_ScrollAlign__WEBPACK_IMPORTED_MODULE_7__/* ["default"].End */ .Z.End;
  621. };
  622. /**
  623. * This hook listens to startingVerse query param and navigate to the
  624. * location where the page of that verse is in the virtualized list if we
  625. * already have the data of that verse; otherwise, we will call BE to fetch
  626. * the page number of the verse we want to navigate to.
  627. *
  628. * [NOTE]: This is meant to be used by ReadingView only.
  629. *
  630. * @param {QuranReaderDataType} quranReaderDataType
  631. * @param {React.MutableRefObject<VirtuosoHandle>} virtuosoRef
  632. * @param {VersesResponse} initialData
  633. * @param {QuranReaderStyles} quranReaderStyles
  634. * @param {Verse[]} verses
  635. * @param {Record<number, LookupRecord>} pagesVersesRange
  636. * @param {boolean} isUsingDefaultFont
  637. * @param {QuranFont} quranFont
  638. * @param {MushafLines} mushafLines
  639. * @param {boolean} isPagesLookupLoading
  640. */ const useScrollToVirtualizedReadingView = (quranReaderDataType, virtuosoRef, initialData, quranReaderStyles, verses, pagesVersesRange, isUsingDefaultFont, quranFont, mushafLines, isPagesLookupLoading)=>{
  641. const router = (0,next_router__WEBPACK_IMPORTED_MODULE_1__.useRouter)();
  642. const { startingVerse , chapterId } = router.query;
  643. const shouldScroll = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(true);
  644. /**
  645. * We need to scroll again when we have just changed the font since the same
  646. * verse might lie on another page/position. Same for when we change the
  647. * verse.
  648. */ (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{
  649. shouldScroll.current = true;
  650. }, [
  651. quranFont,
  652. mushafLines,
  653. startingVerse
  654. ]);
  655. (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(// eslint-disable-next-line react-func/max-lines-per-function
  656. ()=>{
  657. // if we have the data of the page lookup
  658. if (!isPagesLookupLoading && virtuosoRef.current && Object.keys(pagesVersesRange).length) {
  659. // if startingVerse is present in the url
  660. if (quranReaderDataType === types_QuranReader__WEBPACK_IMPORTED_MODULE_6__/* .QuranReaderDataType.Chapter */ .Qi.Chapter && startingVerse) {
  661. const startingVerseNumber = Number(startingVerse);
  662. // if the startingVerse is a valid integer and is above 1
  663. if (Number.isInteger(startingVerseNumber) && startingVerseNumber > 0) {
  664. const firstPageOfCurrentChapter = isUsingDefaultFont ? initialData.verses[0].pageNumber : Number(Object.keys(pagesVersesRange)[0]);
  665. // search for the verse number in the already fetched verses first
  666. const startFromVerseData = verses.find((verse)=>verse.verseNumber === startingVerseNumber);
  667. if (startFromVerseData && shouldScroll.current === true && pagesVersesRange[startFromVerseData.pageNumber]) {
  668. const scrollToPageIndex = startFromVerseData.pageNumber - firstPageOfCurrentChapter;
  669. virtuosoRef.current.scrollToIndex({
  670. index: scrollToPageIndex,
  671. align: getVersePositionWithinAMushafPage(`${chapterId}:${startingVerseNumber}`, startFromVerseData.pageNumber, pagesVersesRange)
  672. });
  673. shouldScroll.current = false;
  674. } else {
  675. // get the page number by the verse key and the mushafId (because the page will be different for Indopak Mushafs)
  676. (0,src_api__WEBPACK_IMPORTED_MODULE_5__/* .fetcher */ ._i)((0,_utils_apiPaths__WEBPACK_IMPORTED_MODULE_3__/* .makeVersesFilterUrl */ .Wq)({
  677. filters: `${chapterId}:${startingVerseNumber}`,
  678. fields: `page_number`,
  679. ...(0,_utils_api__WEBPACK_IMPORTED_MODULE_2__/* .getMushafId */ .$P)(quranReaderStyles.quranFont, quranReaderStyles.mushafLines)
  680. })).then((response)=>{
  681. if (response.verses.length && shouldScroll.current === true) {
  682. const scrollToPageIndex = response.verses[0].pageNumber - firstPageOfCurrentChapter;
  683. if (pagesVersesRange[response.verses[0].pageNumber]) {
  684. virtuosoRef.current.scrollToIndex({
  685. index: scrollToPageIndex,
  686. align: getVersePositionWithinAMushafPage(`${chapterId}:${startingVerseNumber}`, response.verses[0].pageNumber, pagesVersesRange)
  687. });
  688. shouldScroll.current = false;
  689. }
  690. }
  691. });
  692. }
  693. }
  694. }
  695. }
  696. }, [
  697. chapterId,
  698. initialData.verses,
  699. isPagesLookupLoading,
  700. isUsingDefaultFont,
  701. pagesVersesRange,
  702. quranReaderDataType,
  703. quranReaderStyles.mushafLines,
  704. quranReaderStyles.quranFont,
  705. startingVerse,
  706. verses,
  707. virtuosoRef,
  708. ]);
  709. };
  710. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useScrollToVirtualizedReadingView);
  711. /***/ }),
  712. /***/ 29078:
  713. /***/ ((module, __webpack_exports__, __webpack_require__) => {
  714. "use strict";
  715. __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
  716. __webpack_require__.r(__webpack_exports__);
  717. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  718. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  719. /* harmony export */ });
  720. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20997);
  721. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
  722. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(16689);
  723. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
  724. /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(59003);
  725. /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__);
  726. /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(96954);
  727. /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(next_dynamic__WEBPACK_IMPORTED_MODULE_3__);
  728. /* harmony import */ var next_translate_useTranslation__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(60866);
  729. /* harmony import */ var next_translate_useTranslation__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(next_translate_useTranslation__WEBPACK_IMPORTED_MODULE_4__);
  730. /* harmony import */ var react_hotkeys_hook__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(2784);
  731. /* harmony import */ var react_hotkeys_hook__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react_hotkeys_hook__WEBPACK_IMPORTED_MODULE_5__);
  732. /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(6022);
  733. /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_6__);
  734. /* harmony import */ var react_virtuoso__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(78404);
  735. /* harmony import */ var react_virtuoso__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react_virtuoso__WEBPACK_IMPORTED_MODULE_7__);
  736. /* harmony import */ var _utils_page__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(95871);
  737. /* harmony import */ var _hooks_useScrollToVirtualizedVerse__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(82651);
  738. /* harmony import */ var _PageContainer__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(92296);
  739. /* harmony import */ var _PageNavigationButtons__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(60178);
  740. /* harmony import */ var _ReadingView_module_scss__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(27374);
  741. /* harmony import */ var _ReadingView_module_scss__WEBPACK_IMPORTED_MODULE_26___default = /*#__PURE__*/__webpack_require__.n(_ReadingView_module_scss__WEBPACK_IMPORTED_MODULE_26__);
  742. /* harmony import */ var _ReadingViewSkeleton__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(87065);
  743. /* harmony import */ var _components_QuranReader_hooks_useFetchPagesLookup__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(24881);
  744. /* harmony import */ var _components_QuranReader_onCopyQuranWords__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(12383);
  745. /* harmony import */ var _components_QuranReader_QueryParamMessage__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(61269);
  746. /* harmony import */ var _dls_Spinner_Spinner__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(7190);
  747. /* harmony import */ var _hooks_useGetQueryParamOrReduxValue__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(80211);
  748. /* harmony import */ var _hooks_useGetQueryParamOrXstateValue__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(93134);
  749. /* harmony import */ var _hooks_useQcfFont__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(38102);
  750. /* harmony import */ var _redux_slices_QuranReader_readingTracker__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(16143);
  751. /* harmony import */ var _redux_slices_QuranReader_styles__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(62093);
  752. /* harmony import */ var _utils_eventLogger__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(55943);
  753. /* harmony import */ var _utils_fontFaceHelper__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(64198);
  754. /* harmony import */ var src_pages_error__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(36049);
  755. /* harmony import */ var types_QueryParam__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(11721);
  756. var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_PageContainer__WEBPACK_IMPORTED_MODULE_9__, _PageNavigationButtons__WEBPACK_IMPORTED_MODULE_10__, _components_QuranReader_hooks_useFetchPagesLookup__WEBPACK_IMPORTED_MODULE_12__, _components_QuranReader_onCopyQuranWords__WEBPACK_IMPORTED_MODULE_13__, _components_QuranReader_QueryParamMessage__WEBPACK_IMPORTED_MODULE_14__, _hooks_useGetQueryParamOrXstateValue__WEBPACK_IMPORTED_MODULE_17__, _utils_eventLogger__WEBPACK_IMPORTED_MODULE_21__, src_pages_error__WEBPACK_IMPORTED_MODULE_23__]);
  757. ([_PageContainer__WEBPACK_IMPORTED_MODULE_9__, _PageNavigationButtons__WEBPACK_IMPORTED_MODULE_10__, _components_QuranReader_hooks_useFetchPagesLookup__WEBPACK_IMPORTED_MODULE_12__, _components_QuranReader_onCopyQuranWords__WEBPACK_IMPORTED_MODULE_13__, _components_QuranReader_QueryParamMessage__WEBPACK_IMPORTED_MODULE_14__, _hooks_useGetQueryParamOrXstateValue__WEBPACK_IMPORTED_MODULE_17__, _utils_eventLogger__WEBPACK_IMPORTED_MODULE_21__, src_pages_error__WEBPACK_IMPORTED_MODULE_23__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
  758. /* eslint-disable max-lines */ /* eslint-disable react-func/max-lines-per-function */ /* eslint-disable react/no-multi-comp */
  759. const EndOfScrollingControls = next_dynamic__WEBPACK_IMPORTED_MODULE_3___default()(null, {
  760. loadableGenerated: {
  761. modules: [
  762. "../components/QuranReader/ReadingView/index.tsx -> " + "@/components/QuranReader/EndOfScrollingControls"
  763. ]
  764. },
  765. ssr: false,
  766. loading: ()=>/*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_dls_Spinner_Spinner__WEBPACK_IMPORTED_MODULE_15__/* ["default"] */ .Z, {})
  767. });
  768. const INCREASE_VIEWPORT_BY_PIXELS = 1200;
  769. const ReadingView = ({ quranReaderStyles , quranReaderDataType , initialData , resourceId })=>{
  770. const { 0: mushafPageToVersesMap , 1: setMushafPageToVersesMap } = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({
  771. [initialData.verses[0].pageNumber]: initialData.verses
  772. });
  773. const { lang } = next_translate_useTranslation__WEBPACK_IMPORTED_MODULE_4___default()("quran-reader");
  774. const isUsingDefaultFont = (0,react_redux__WEBPACK_IMPORTED_MODULE_6__.useSelector)(_redux_slices_QuranReader_styles__WEBPACK_IMPORTED_MODULE_20__/* .selectIsUsingDefaultFont */ .i9);
  775. const lastReadPageNumber = (0,react_redux__WEBPACK_IMPORTED_MODULE_6__.useSelector)(_redux_slices_QuranReader_readingTracker__WEBPACK_IMPORTED_MODULE_19__/* .selectedLastReadPage */ .E9, react_redux__WEBPACK_IMPORTED_MODULE_6__.shallowEqual);
  776. const verses = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>Object.values(mushafPageToVersesMap).flat(), [
  777. mushafPageToVersesMap
  778. ]);
  779. const { value: reciterId , isQueryParamDifferent: reciterQueryParamDifferent , } = (0,_hooks_useGetQueryParamOrXstateValue__WEBPACK_IMPORTED_MODULE_17__/* ["default"] */ .Z)(types_QueryParam__WEBPACK_IMPORTED_MODULE_24__/* ["default"].Reciter */ .Z.Reciter);
  780. const { value: wordByWordLocale , isQueryParamDifferent: wordByWordLocaleQueryParamDifferent , } = (0,_hooks_useGetQueryParamOrReduxValue__WEBPACK_IMPORTED_MODULE_16__/* ["default"] */ .Z)(types_QueryParam__WEBPACK_IMPORTED_MODULE_24__/* ["default"].WBW_LOCALE */ .Z.WBW_LOCALE);
  781. const { quranFont , mushafLines , quranTextFontScale } = quranReaderStyles;
  782. (0,_hooks_useQcfFont__WEBPACK_IMPORTED_MODULE_18__/* ["default"] */ .Z)(quranFont, verses);
  783. const { pagesCount , hasError , pagesVersesRange , isLoading } = (0,_components_QuranReader_hooks_useFetchPagesLookup__WEBPACK_IMPORTED_MODULE_12__/* ["default"] */ .Z)(resourceId, quranReaderDataType, initialData, quranReaderStyles, isUsingDefaultFont);
  784. const currentPageIndex = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>(0,_utils_page__WEBPACK_IMPORTED_MODULE_25__/* .getPageIndexByPageNumber */ .u7)(Number(lastReadPageNumber), pagesVersesRange), [
  785. lastReadPageNumber,
  786. pagesVersesRange
  787. ]);
  788. const virtuosoRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);
  789. (0,_hooks_useScrollToVirtualizedVerse__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .Z)(quranReaderDataType, virtuosoRef, initialData, quranReaderStyles, verses, pagesVersesRange, isUsingDefaultFont, quranFont, mushafLines, isLoading);
  790. const scrollToPreviousPage = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(()=>{
  791. virtuosoRef.current.scrollToIndex({
  792. index: currentPageIndex - 1,
  793. align: "start",
  794. offset: -35
  795. });
  796. }, [
  797. currentPageIndex
  798. ]);
  799. const scrollToNextPage = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(()=>{
  800. virtuosoRef.current.scrollToIndex({
  801. index: currentPageIndex + 1,
  802. align: "start",
  803. offset: 25
  804. });
  805. }, [
  806. currentPageIndex
  807. ]);
  808. const onPrevPageClicked = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(()=>{
  809. (0,_utils_eventLogger__WEBPACK_IMPORTED_MODULE_21__/* .logButtonClick */ .MY)("reading_view_prev_page_button");
  810. scrollToPreviousPage();
  811. }, [
  812. scrollToPreviousPage
  813. ]);
  814. const onNextPageClicked = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(()=>{
  815. (0,_utils_eventLogger__WEBPACK_IMPORTED_MODULE_21__/* .logButtonClick */ .MY)("reading_view_next_page_button");
  816. scrollToNextPage();
  817. }, [
  818. scrollToNextPage
  819. ]);
  820. const allowKeyboardNavigation = quranTextFontScale <= 5;
  821. const onUpClicked = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((event)=>{
  822. event.preventDefault();
  823. scrollToPreviousPage();
  824. }, [
  825. scrollToPreviousPage
  826. ]);
  827. const onDownClicked = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((event)=>{
  828. event.preventDefault();
  829. scrollToNextPage();
  830. }, [
  831. scrollToNextPage
  832. ]);
  833. (0,react_hotkeys_hook__WEBPACK_IMPORTED_MODULE_5__.useHotkeys)("Up", onUpClicked, {
  834. enabled: allowKeyboardNavigation
  835. }, [
  836. scrollToPreviousPage
  837. ]);
  838. (0,react_hotkeys_hook__WEBPACK_IMPORTED_MODULE_5__.useHotkeys)("Down", onDownClicked, {
  839. enabled: allowKeyboardNavigation
  840. }, [
  841. scrollToNextPage
  842. ]);
  843. const itemContentRenderer = (pageIndex)=>{
  844. if (pageIndex === pagesCount) {
  845. const pageVerses = mushafPageToVersesMap[lastReadPageNumber];
  846. const lastVerse = pageVerses?.[pageVerses.length - 1];
  847. if (!lastVerse) return null;
  848. return /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(EndOfScrollingControls, {
  849. quranReaderDataType: quranReaderDataType,
  850. lastVerse: lastVerse,
  851. initialData: initialData
  852. });
  853. }
  854. return /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_PageContainer__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .Z, {
  855. pagesVersesRange: pagesVersesRange,
  856. quranReaderStyles: quranReaderStyles,
  857. reciterId: reciterId,
  858. lang: lang,
  859. wordByWordLocale: wordByWordLocale,
  860. pageIndex: pageIndex,
  861. setMushafPageToVersesMap: setMushafPageToVersesMap,
  862. initialData: initialData
  863. });
  864. };
  865. if (hasError) {
  866. return /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(src_pages_error__WEBPACK_IMPORTED_MODULE_23__["default"], {});
  867. }
  868. const shouldShowQueryParamMessage = reciterQueryParamDifferent || wordByWordLocaleQueryParamDifferent;
  869. return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {
  870. children: [
  871. shouldShowQueryParamMessage && /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_components_QuranReader_QueryParamMessage__WEBPACK_IMPORTED_MODULE_14__/* ["default"] */ .Z, {
  872. translationsQueryParamDifferent: false,
  873. reciterQueryParamDifferent: reciterQueryParamDifferent,
  874. wordByWordLocaleQueryParamDifferent: wordByWordLocaleQueryParamDifferent
  875. }),
  876. /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
  877. onCopy: (event)=>(0,_components_QuranReader_onCopyQuranWords__WEBPACK_IMPORTED_MODULE_13__/* ["default"] */ .Z)(event, verses, quranFont),
  878. className: classnames__WEBPACK_IMPORTED_MODULE_2___default()((_ReadingView_module_scss__WEBPACK_IMPORTED_MODULE_26___default().container), (_ReadingView_module_scss__WEBPACK_IMPORTED_MODULE_26___default())[(0,_utils_fontFaceHelper__WEBPACK_IMPORTED_MODULE_22__/* .getLineWidthClassName */ .oj)(quranFont, quranTextFontScale, mushafLines)]),
  879. children: isLoading ? /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
  880. className: (_ReadingView_module_scss__WEBPACK_IMPORTED_MODULE_26___default().virtuosoScroller),
  881. children: /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_ReadingViewSkeleton__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .Z, {})
  882. }) : /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(react_virtuoso__WEBPACK_IMPORTED_MODULE_7__.Virtuoso, {
  883. ref: virtuosoRef,
  884. useWindowScroll: true,
  885. increaseViewportBy: INCREASE_VIEWPORT_BY_PIXELS,
  886. className: (_ReadingView_module_scss__WEBPACK_IMPORTED_MODULE_26___default().virtuosoScroller),
  887. initialItemCount: 1,
  888. totalCount: pagesCount + 1,
  889. itemContent: itemContentRenderer
  890. })
  891. }),
  892. allowKeyboardNavigation && /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_PageNavigationButtons__WEBPACK_IMPORTED_MODULE_10__/* ["default"] */ .Z, {
  893. scrollToNextPage: onNextPageClicked,
  894. scrollToPreviousPage: onPrevPageClicked
  895. })
  896. ]
  897. });
  898. };
  899. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ReadingView);
  900. __webpack_async_result__();
  901. } catch(e) { __webpack_async_result__(e); } });
  902. /***/ }),
  903. /***/ 95871:
  904. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  905. "use strict";
  906. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  907. /* harmony export */ "L8": () => (/* binding */ getPageNumberByPageIndex),
  908. /* harmony export */ "u7": () => (/* binding */ getPageIndexByPageNumber)
  909. /* harmony export */ });
  910. /* unused harmony exports getNumberOfPages, verseIndexToApiPageNumber */
  911. /**
  912. * Get the page number by adding the first page number of the current
  913. * resource e.g. chapter to the item (page) index from the virtualized list.
  914. *
  915. * @param {number} pageIndex
  916. * @param {Record<number, LookupRecord>} pagesVersesRange
  917. * @returns {number}
  918. */ const getPageNumberByPageIndex = (pageIndex, pagesVersesRange)=>Number(Object.keys(pagesVersesRange)[0]) + pageIndex;
  919. /**
  920. * Get the page index by the page number.
  921. *
  922. * @param {number} pageNumber
  923. * @param {Record<number, LookupRecord>} pagesVersesRange
  924. * @returns {number}
  925. */ const getPageIndexByPageNumber = (pageNumber, pagesVersesRange)=>Number(pageNumber) - Number(Object.keys(pagesVersesRange)[0]);
  926. /**
  927. * Get the number of pages of the current resource e.g. chapter.
  928. *
  929. * @param {number} numberOfVerses
  930. * @param {number} versesPerPage
  931. * @returns {number}
  932. */ const getNumberOfPages = (numberOfVerses, versesPerPage)=>Math.ceil(numberOfVerses / versesPerPage);
  933. /**
  934. * Convert a verse index to a page number by dividing the index
  935. * by how many items there are in a page.
  936. *
  937. * @param {number} verseNumber
  938. * @param {number} versesPerPage
  939. * @returns {number}
  940. */ const verseIndexToApiPageNumber = (verseNumber, versesPerPage)=>Math.floor(verseNumber / versesPerPage) + 1;
  941. /***/ })
  942. };
  943. ;
  944. //# sourceMappingURL=29078.js.map