57072.js 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885
  1. exports.id = 57072;
  2. exports.ids = [57072];
  3. exports.modules = {
  4. /***/ 49103:
  5. /***/ ((module) => {
  6. // Exports
  7. module.exports = {
  8. "plainVerseWordContainer": "PlainVerseTextWord_plainVerseWordContainer__2pyxx",
  9. "plainVerseWbwText": "PlainVerseTextWord_plainVerseWbwText__DTrKx"
  10. };
  11. /***/ }),
  12. /***/ 29702:
  13. /***/ ((module) => {
  14. // Exports
  15. module.exports = {
  16. "verseText": "VerseText_verseText__Fk0Fi",
  17. "verseTextContainer": "VerseText_verseTextContainer__hOUD0",
  18. "chapterHeaderContainer": "VerseText_chapterHeaderContainer__SaizB",
  19. "largeQuranTextLayoutContainer": "VerseText_largeQuranTextLayoutContainer__Fv3ec",
  20. "largeQuranTextLayout": "VerseText_largeQuranTextLayout__JsyGS",
  21. "verseTextCenterAlign": "VerseText_verseTextCenterAlign__Tz7Y4",
  22. "verseTextSpaceBetween": "VerseText_verseTextSpaceBetween__syJcK",
  23. "verseTextWrap": "VerseText_verseTextWrap__gOX9U",
  24. "code_v1-font-size-1": "VerseText_code_v1-font-size-1__9Rt0g",
  25. "code_v1-font-size-2": "VerseText_code_v1-font-size-2__VQjoR",
  26. "code_v1-font-size-3": "VerseText_code_v1-font-size-3__3x2lH",
  27. "code_v1-font-size-4": "VerseText_code_v1-font-size-4__LhpwQ",
  28. "code_v1-font-size-5": "VerseText_code_v1-font-size-5___K_MX",
  29. "code_v1-font-size-6": "VerseText_code_v1-font-size-6__SJ4l4",
  30. "code_v1-font-size-7": "VerseText_code_v1-font-size-7__c7wGl",
  31. "code_v1-font-size-8": "VerseText_code_v1-font-size-8__Rg__I",
  32. "code_v1-font-size-9": "VerseText_code_v1-font-size-9__QD8Sb",
  33. "code_v1-font-size-10": "VerseText_code_v1-font-size-10__r28R3",
  34. "code_v2-font-size-1": "VerseText_code_v2-font-size-1__F3Otn",
  35. "code_v2-font-size-2": "VerseText_code_v2-font-size-2__5pseo",
  36. "code_v2-font-size-3": "VerseText_code_v2-font-size-3__Lhu_B",
  37. "code_v2-font-size-4": "VerseText_code_v2-font-size-4__i8Qln",
  38. "code_v2-font-size-5": "VerseText_code_v2-font-size-5__paFu0",
  39. "code_v2-font-size-6": "VerseText_code_v2-font-size-6__0ofuY",
  40. "code_v2-font-size-7": "VerseText_code_v2-font-size-7__qY63H",
  41. "code_v2-font-size-8": "VerseText_code_v2-font-size-8__Jas77",
  42. "code_v2-font-size-9": "VerseText_code_v2-font-size-9__zKbDl",
  43. "code_v2-font-size-10": "VerseText_code_v2-font-size-10__RdYo_",
  44. "text_indopak_15_lines-font-size-1": "VerseText_text_indopak_15_lines-font-size-1__MpqYL",
  45. "text_indopak_15_lines-font-size-2": "VerseText_text_indopak_15_lines-font-size-2___O1LY",
  46. "text_indopak_15_lines-font-size-3": "VerseText_text_indopak_15_lines-font-size-3__va0v9",
  47. "text_indopak_15_lines-font-size-4": "VerseText_text_indopak_15_lines-font-size-4__lnUQq",
  48. "text_indopak_15_lines-font-size-5": "VerseText_text_indopak_15_lines-font-size-5__XOzo1",
  49. "text_indopak_15_lines-font-size-6": "VerseText_text_indopak_15_lines-font-size-6__gB6zb",
  50. "text_indopak_15_lines-font-size-7": "VerseText_text_indopak_15_lines-font-size-7__FekJW",
  51. "text_indopak_15_lines-font-size-8": "VerseText_text_indopak_15_lines-font-size-8__loZsT",
  52. "text_indopak_15_lines-font-size-9": "VerseText_text_indopak_15_lines-font-size-9__VmlCu",
  53. "text_indopak_15_lines-font-size-10": "VerseText_text_indopak_15_lines-font-size-10__O1PJG",
  54. "text_indopak_16_lines-font-size-1": "VerseText_text_indopak_16_lines-font-size-1__4ucyv",
  55. "text_indopak_16_lines-font-size-2": "VerseText_text_indopak_16_lines-font-size-2__3yXno",
  56. "text_indopak_16_lines-font-size-3": "VerseText_text_indopak_16_lines-font-size-3__G_OaF",
  57. "text_indopak_16_lines-font-size-4": "VerseText_text_indopak_16_lines-font-size-4__f3_iJ",
  58. "text_indopak_16_lines-font-size-5": "VerseText_text_indopak_16_lines-font-size-5__oUIOq",
  59. "text_indopak_16_lines-font-size-6": "VerseText_text_indopak_16_lines-font-size-6__FA5AG",
  60. "text_indopak_16_lines-font-size-7": "VerseText_text_indopak_16_lines-font-size-7__JFk0u",
  61. "text_indopak_16_lines-font-size-8": "VerseText_text_indopak_16_lines-font-size-8__Fni_s",
  62. "text_indopak_16_lines-font-size-9": "VerseText_text_indopak_16_lines-font-size-9__zXsnb",
  63. "text_indopak_16_lines-font-size-10": "VerseText_text_indopak_16_lines-font-size-10__I7RIN",
  64. "qpc_uthmani_hafs-font-size-1": "VerseText_qpc_uthmani_hafs-font-size-1__dcYI8",
  65. "qpc_uthmani_hafs-font-size-2": "VerseText_qpc_uthmani_hafs-font-size-2__BIcpt",
  66. "qpc_uthmani_hafs-font-size-3": "VerseText_qpc_uthmani_hafs-font-size-3___0I2d",
  67. "qpc_uthmani_hafs-font-size-4": "VerseText_qpc_uthmani_hafs-font-size-4__uAhrM",
  68. "qpc_uthmani_hafs-font-size-5": "VerseText_qpc_uthmani_hafs-font-size-5__qDztZ",
  69. "qpc_uthmani_hafs-font-size-6": "VerseText_qpc_uthmani_hafs-font-size-6__njx2U",
  70. "qpc_uthmani_hafs-font-size-7": "VerseText_qpc_uthmani_hafs-font-size-7__wJ6wZ",
  71. "qpc_uthmani_hafs-font-size-8": "VerseText_qpc_uthmani_hafs-font-size-8__E18cl",
  72. "qpc_uthmani_hafs-font-size-9": "VerseText_qpc_uthmani_hafs-font-size-9__9xc_5",
  73. "qpc_uthmani_hafs-font-size-10": "VerseText_qpc_uthmani_hafs-font-size-10__9KVZ2",
  74. "fallback_qpc_uthmani_hafs-font-size-1": "VerseText_fallback_qpc_uthmani_hafs-font-size-1__tEYKA",
  75. "fallback_qpc_uthmani_hafs-font-size-2": "VerseText_fallback_qpc_uthmani_hafs-font-size-2__WOpbV",
  76. "fallback_qpc_uthmani_hafs-font-size-3": "VerseText_fallback_qpc_uthmani_hafs-font-size-3__qTu4q",
  77. "fallback_qpc_uthmani_hafs-font-size-4": "VerseText_fallback_qpc_uthmani_hafs-font-size-4__vxCgd",
  78. "fallback_qpc_uthmani_hafs-font-size-5": "VerseText_fallback_qpc_uthmani_hafs-font-size-5__pBmKt",
  79. "fallback_qpc_uthmani_hafs-font-size-6": "VerseText_fallback_qpc_uthmani_hafs-font-size-6__Om3YR",
  80. "fallback_qpc_uthmani_hafs-font-size-7": "VerseText_fallback_qpc_uthmani_hafs-font-size-7__LqHcg",
  81. "fallback_qpc_uthmani_hafs-font-size-8": "VerseText_fallback_qpc_uthmani_hafs-font-size-8__H_0LM",
  82. "fallback_qpc_uthmani_hafs-font-size-9": "VerseText_fallback_qpc_uthmani_hafs-font-size-9__Uz0iX",
  83. "fallback_qpc_uthmani_hafs-font-size-10": "VerseText_fallback_qpc_uthmani_hafs-font-size-10__Eq184",
  84. "tajweed-font-size-1": "VerseText_tajweed-font-size-1__wW3aY",
  85. "tajweed-font-size-2": "VerseText_tajweed-font-size-2__HbkYL",
  86. "tajweed-font-size-3": "VerseText_tajweed-font-size-3__y6f3z",
  87. "tajweed-font-size-4": "VerseText_tajweed-font-size-4__Qocn9",
  88. "tajweed-font-size-5": "VerseText_tajweed-font-size-5__NbAoD",
  89. "tajweed-font-size-6": "VerseText_tajweed-font-size-6__EWfpu",
  90. "tajweed-font-size-7": "VerseText_tajweed-font-size-7__zvBX_",
  91. "tajweed-font-size-8": "VerseText_tajweed-font-size-8__FAAIf",
  92. "tajweed-font-size-9": "VerseText_tajweed-font-size-9__7nw_V",
  93. "tajweed-font-size-10": "VerseText_tajweed-font-size-10__cZt_J",
  94. "highlighted": "VerseText_highlighted__MSh4M",
  95. "tafsirOrTranslationMode": "VerseText_tafsirOrTranslationMode____xIz"
  96. };
  97. /***/ }),
  98. /***/ 76700:
  99. /***/ ((module) => {
  100. // Exports
  101. module.exports = {
  102. "word": "InlineWordByWord_word__RguXH",
  103. "xs": "InlineWordByWord_xs__m6Asd",
  104. "sm": "InlineWordByWord_sm__j5xJp",
  105. "md": "InlineWordByWord_md__VTFxL",
  106. "lg": "InlineWordByWord_lg__0T__M",
  107. "xl": "InlineWordByWord_xl__NAWHF",
  108. "xxl": "InlineWordByWord_xxl__MZerA"
  109. };
  110. /***/ }),
  111. /***/ 26864:
  112. /***/ ((module) => {
  113. // Exports
  114. module.exports = {
  115. "fallback_qpc_uthmani_hafs-font-size-1": "GlyphWord_fallback_qpc_uthmani_hafs-font-size-1__2KKwl",
  116. "fallback_qpc_uthmani_hafs-font-size-2": "GlyphWord_fallback_qpc_uthmani_hafs-font-size-2__MD0bo",
  117. "fallback_qpc_uthmani_hafs-font-size-3": "GlyphWord_fallback_qpc_uthmani_hafs-font-size-3__7jYJ0",
  118. "fallback_qpc_uthmani_hafs-font-size-4": "GlyphWord_fallback_qpc_uthmani_hafs-font-size-4__sH673",
  119. "fallback_qpc_uthmani_hafs-font-size-5": "GlyphWord_fallback_qpc_uthmani_hafs-font-size-5__hbPXS",
  120. "fallback_qpc_uthmani_hafs-font-size-6": "GlyphWord_fallback_qpc_uthmani_hafs-font-size-6__GkHoA",
  121. "fallback_qpc_uthmani_hafs-font-size-7": "GlyphWord_fallback_qpc_uthmani_hafs-font-size-7__jXA0B",
  122. "fallback_qpc_uthmani_hafs-font-size-8": "GlyphWord_fallback_qpc_uthmani_hafs-font-size-8__EuX_N",
  123. "fallback_qpc_uthmani_hafs-font-size-9": "GlyphWord_fallback_qpc_uthmani_hafs-font-size-9__lTWFh",
  124. "fallback_qpc_uthmani_hafs-font-size-10": "GlyphWord_fallback_qpc_uthmani_hafs-font-size-10__q6iVZ",
  125. "styledWord": "GlyphWord_styledWord__OfEEG",
  126. "wordSpacing": "GlyphWord_wordSpacing__VDcM6",
  127. "fallbackText": "GlyphWord_fallbackText__R32Ms"
  128. };
  129. /***/ }),
  130. /***/ 12464:
  131. /***/ ((module) => {
  132. // Exports
  133. module.exports = {
  134. "imageContainer": "TajweedWordImage_imageContainer__BW9U2",
  135. "xs": "TajweedWordImage_xs__z56PS",
  136. "sm": "TajweedWordImage_sm__m8zZy",
  137. "md": "TajweedWordImage_md__Fo9Wj",
  138. "lg": "TajweedWordImage_lg__Ke7uV",
  139. "xl": "TajweedWordImage_xl__toP3N",
  140. "xl2": "TajweedWordImage_xl2__U2skV",
  141. "xl3": "TajweedWordImage_xl3__Pivm8",
  142. "xl4": "TajweedWordImage_xl4__dclGF",
  143. "xl5": "TajweedWordImage_xl5__xH4Is",
  144. "xl6": "TajweedWordImage_xl6__VCEAA"
  145. };
  146. /***/ }),
  147. /***/ 23975:
  148. /***/ ((module) => {
  149. // Exports
  150. module.exports = {
  151. "word": "TextWord_word__mvLd7",
  152. "UthmanicHafs": "TextWord_UthmanicHafs__9DRAC",
  153. "IndoPak": "TextWord_IndoPak__Vois6"
  154. };
  155. /***/ }),
  156. /***/ 57072:
  157. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  158. "use strict";
  159. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  160. /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
  161. /* harmony export */ });
  162. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20997);
  163. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
  164. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(16689);
  165. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
  166. /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6022);
  167. /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_2__);
  168. /* harmony import */ var _components_Verse_PlainVerseText__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(21044);
  169. /* harmony import */ var _hooks_useQcfFont__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(38102);
  170. /* harmony import */ var _redux_slices_QuranReader_styles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(62093);
  171. /* harmony import */ var _utils_verse__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(44519);
  172. const VerseTextPreview = ({ verses , fontScale })=>{
  173. const { quranFont } = (0,react_redux__WEBPACK_IMPORTED_MODULE_2__.useSelector)(_redux_slices_QuranReader_styles__WEBPACK_IMPORTED_MODULE_5__/* .selectQuranReaderStyles */ .Pt, react_redux__WEBPACK_IMPORTED_MODULE_2__.shallowEqual);
  174. const tafsirVerses = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>Object.values(verses).map((verse)=>({
  175. ...verse,
  176. pageNumber: verse.words[0].pageNumber
  177. })), [
  178. verses
  179. ]);
  180. (0,_hooks_useQcfFont__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(quranFont, tafsirVerses);
  181. const words = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>verses.map((verse)=>(0,_utils_verse__WEBPACK_IMPORTED_MODULE_6__/* .getVerseWords */ .LQ)(verse)).flat(), [
  182. verses
  183. ]);
  184. return /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_components_Verse_PlainVerseText__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z, {
  185. fontScale: fontScale,
  186. words: words
  187. });
  188. };
  189. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (VerseTextPreview);
  190. /***/ }),
  191. /***/ 97226:
  192. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  193. "use strict";
  194. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  195. /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
  196. /* harmony export */ });
  197. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(16689);
  198. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
  199. /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6022);
  200. /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_1__);
  201. /* harmony import */ var _redux_slices_QuranReader_font_faces__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(25742);
  202. /* harmony import */ var _utils_fontFaceHelper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(64198);
  203. /**
  204. * A hook that detects whether a font of a specific page
  205. * has been loaded or not.
  206. *
  207. * @param {number} pageNumber
  208. * @param {QuranFont} quranFont
  209. * @returns {boolean}
  210. */ const useIsFontLoaded = (pageNumber, quranFont)=>{
  211. const loadedFonts = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(_redux_slices_QuranReader_font_faces__WEBPACK_IMPORTED_MODULE_2__/* .selectLoadedFontFaces */ .$Z);
  212. const isFontLoaded = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>{
  213. if (!(0,_utils_fontFaceHelper__WEBPACK_IMPORTED_MODULE_3__/* .isQCFFont */ .Fy)(quranFont)) {
  214. return true;
  215. }
  216. return loadedFonts.includes(`p${pageNumber}-${quranFont.replace("code_", "")}`);
  217. }, [
  218. loadedFonts,
  219. pageNumber,
  220. quranFont
  221. ]);
  222. return isFontLoaded;
  223. };
  224. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useIsFontLoaded);
  225. /***/ }),
  226. /***/ 21044:
  227. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  228. "use strict";
  229. // EXPORTS
  230. __webpack_require__.d(__webpack_exports__, {
  231. "Z": () => (/* binding */ Verse_PlainVerseText)
  232. });
  233. // EXTERNAL MODULE: external "react/jsx-runtime"
  234. var jsx_runtime_ = __webpack_require__(20997);
  235. // EXTERNAL MODULE: external "react"
  236. var external_react_ = __webpack_require__(16689);
  237. // EXTERNAL MODULE: external "classnames"
  238. var external_classnames_ = __webpack_require__(59003);
  239. var external_classnames_default = /*#__PURE__*/__webpack_require__.n(external_classnames_);
  240. // EXTERNAL MODULE: external "react-redux"
  241. var external_react_redux_ = __webpack_require__(6022);
  242. // EXTERNAL MODULE: ./src/components/Verse/VerseText.module.scss
  243. var VerseText_module = __webpack_require__(29702);
  244. var VerseText_module_default = /*#__PURE__*/__webpack_require__.n(VerseText_module);
  245. // EXTERNAL MODULE: ./src/components/Verse/PlainVerseText/PlainVerseTextWord/PlainVerseTextWord.module.scss
  246. var PlainVerseTextWord_module = __webpack_require__(49103);
  247. var PlainVerseTextWord_module_default = /*#__PURE__*/__webpack_require__.n(PlainVerseTextWord_module);
  248. // EXTERNAL MODULE: ./src/components/dls/InlineWordByWord/index.tsx
  249. var InlineWordByWord = __webpack_require__(77296);
  250. ;// CONCATENATED MODULE: ./src/components/Verse/PlainVerseText/PlainVerseTextWord/index.tsx
  251. const PlainVerseTextWord = ({ word , children , shouldShowWordByWordTransliteration , shouldShowWordByWordTranslation , })=>{
  252. return /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
  253. className: (PlainVerseTextWord_module_default()).plainVerseWordContainer,
  254. children: [
  255. children,
  256. shouldShowWordByWordTranslation && /*#__PURE__*/ jsx_runtime_.jsx(InlineWordByWord/* default */.Z, {
  257. className: (PlainVerseTextWord_module_default()).plainVerseWbwText,
  258. text: word?.translation?.text
  259. }),
  260. shouldShowWordByWordTransliteration && /*#__PURE__*/ jsx_runtime_.jsx(InlineWordByWord/* default */.Z, {
  261. className: (PlainVerseTextWord_module_default()).plainVerseWbwText,
  262. text: word?.transliteration?.text
  263. })
  264. ]
  265. }, word.location);
  266. };
  267. /* harmony default export */ const PlainVerseText_PlainVerseTextWord = (PlainVerseTextWord);
  268. // EXTERNAL MODULE: ./src/components/QuranReader/hooks/useIsFontLoaded.ts
  269. var useIsFontLoaded = __webpack_require__(97226);
  270. // EXTERNAL MODULE: ./src/components/dls/QuranWord/GlyphWord.tsx + 1 modules
  271. var GlyphWord = __webpack_require__(72214);
  272. // EXTERNAL MODULE: ./src/components/dls/QuranWord/TajweedWordImage.tsx
  273. var TajweedWordImage = __webpack_require__(28542);
  274. // EXTERNAL MODULE: ./src/components/dls/QuranWord/TextWord.tsx
  275. var TextWord = __webpack_require__(72816);
  276. // EXTERNAL MODULE: ./src/redux/slices/QuranReader/styles.ts
  277. var styles = __webpack_require__(62093);
  278. // EXTERNAL MODULE: ./src/utils/fontFaceHelper.ts
  279. var fontFaceHelper = __webpack_require__(64198);
  280. // EXTERNAL MODULE: ./types/QuranReader.ts
  281. var QuranReader = __webpack_require__(50467);
  282. ;// CONCATENATED MODULE: ./src/components/Verse/PlainVerseText/index.tsx
  283. /**
  284. * A component to only show the verse text without extra functionalities such as ayah
  285. * highlighting when audio is playing or showing a tooltip when
  286. * hovering over a verse or showing the word by word translation/transliteration.
  287. *
  288. * @param {Props} param0
  289. * @returns {JSX.Element}
  290. */ const PlainVerseText = ({ words , shouldShowWordByWordTranslation =false , shouldShowWordByWordTransliteration =false , fontScale })=>{
  291. const { quranFont , quranTextFontScale , mushafLines } = (0,external_react_redux_.useSelector)(styles/* selectQuranReaderStyles */.Pt, external_react_redux_.shallowEqual);
  292. const isQcfFont = (0,fontFaceHelper/* isQCFFont */.Fy)(quranFont);
  293. const isFontLoaded = (0,useIsFontLoaded/* default */.Z)(words[0].pageNumber, quranFont);
  294. return /*#__PURE__*/ jsx_runtime_.jsx("div", {
  295. className: external_classnames_default()((VerseText_module_default()).verseTextContainer, (VerseText_module_default()).tafsirOrTranslationMode, {
  296. [(VerseText_module_default())[(0,fontFaceHelper/* getFontClassName */.bZ)(quranFont, fontScale || quranTextFontScale, mushafLines)]]: quranFont !== QuranReader/* QuranFont.Tajweed */.fr.Tajweed
  297. }),
  298. children: /*#__PURE__*/ jsx_runtime_.jsx("div", {
  299. className: external_classnames_default()((VerseText_module_default()).verseText, (VerseText_module_default()).verseTextWrap),
  300. translate: "no",
  301. children: words?.map((word)=>{
  302. if (isQcfFont) {
  303. return /*#__PURE__*/ jsx_runtime_.jsx(PlainVerseText_PlainVerseTextWord, {
  304. word: word,
  305. shouldShowWordByWordTranslation: shouldShowWordByWordTranslation,
  306. shouldShowWordByWordTransliteration: shouldShowWordByWordTransliteration,
  307. children: /*#__PURE__*/ jsx_runtime_.jsx(GlyphWord/* default */.Z, {
  308. font: quranFont,
  309. qpcUthmaniHafs: word.qpcUthmaniHafs,
  310. pageNumber: word.pageNumber,
  311. textCodeV1: word.codeV1,
  312. textCodeV2: word.codeV2,
  313. isFontLoaded: isFontLoaded
  314. })
  315. }, word.location);
  316. }
  317. if (quranFont === QuranReader/* QuranFont.Tajweed */.fr.Tajweed) {
  318. return /*#__PURE__*/ jsx_runtime_.jsx(PlainVerseText_PlainVerseTextWord, {
  319. word: word,
  320. shouldShowWordByWordTranslation: shouldShowWordByWordTranslation,
  321. shouldShowWordByWordTransliteration: shouldShowWordByWordTransliteration,
  322. children: /*#__PURE__*/ jsx_runtime_.jsx(TajweedWordImage/* default */.Z, {
  323. path: word.text,
  324. alt: word.textUthmani
  325. }, word.location)
  326. }, word.location);
  327. }
  328. return /*#__PURE__*/ jsx_runtime_.jsx(PlainVerseText_PlainVerseTextWord, {
  329. word: word,
  330. shouldShowWordByWordTranslation: shouldShowWordByWordTranslation,
  331. shouldShowWordByWordTransliteration: shouldShowWordByWordTransliteration,
  332. children: /*#__PURE__*/ jsx_runtime_.jsx(TextWord/* default */.Z, {
  333. font: quranFont,
  334. text: word.text,
  335. charType: word.charTypeName
  336. })
  337. }, word.location);
  338. })
  339. })
  340. });
  341. };
  342. /* harmony default export */ const Verse_PlainVerseText = (PlainVerseText);
  343. /***/ }),
  344. /***/ 77296:
  345. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  346. "use strict";
  347. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  348. /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
  349. /* harmony export */ });
  350. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20997);
  351. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
  352. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(16689);
  353. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
  354. /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(59003);
  355. /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__);
  356. /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6022);
  357. /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_3__);
  358. /* harmony import */ var _InlineWordByWord_module_scss__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(76700);
  359. /* harmony import */ var _InlineWordByWord_module_scss__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_InlineWordByWord_module_scss__WEBPACK_IMPORTED_MODULE_5__);
  360. /* harmony import */ var _redux_slices_QuranReader_styles__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(62093);
  361. const FONT_SIZE_CLASS_MAP = {
  362. 1: (_InlineWordByWord_module_scss__WEBPACK_IMPORTED_MODULE_5___default().xs),
  363. 2: (_InlineWordByWord_module_scss__WEBPACK_IMPORTED_MODULE_5___default().sm),
  364. 3: (_InlineWordByWord_module_scss__WEBPACK_IMPORTED_MODULE_5___default().md),
  365. 4: (_InlineWordByWord_module_scss__WEBPACK_IMPORTED_MODULE_5___default().lg),
  366. 5: (_InlineWordByWord_module_scss__WEBPACK_IMPORTED_MODULE_5___default().xl),
  367. 6: (_InlineWordByWord_module_scss__WEBPACK_IMPORTED_MODULE_5___default().xxl)
  368. };
  369. const InlineWordByWord = ({ text , className })=>{
  370. const wordByWordFontScale = (0,react_redux__WEBPACK_IMPORTED_MODULE_3__.useSelector)(_redux_slices_QuranReader_styles__WEBPACK_IMPORTED_MODULE_4__/* .selectWordByWordFontScale */ .KV, react_redux__WEBPACK_IMPORTED_MODULE_3__.shallowEqual);
  371. return /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("p", {
  372. className: classnames__WEBPACK_IMPORTED_MODULE_2___default()((_InlineWordByWord_module_scss__WEBPACK_IMPORTED_MODULE_5___default().word), className, FONT_SIZE_CLASS_MAP[wordByWordFontScale]),
  373. children: text
  374. });
  375. };
  376. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (InlineWordByWord);
  377. /***/ }),
  378. /***/ 72214:
  379. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  380. "use strict";
  381. // EXPORTS
  382. __webpack_require__.d(__webpack_exports__, {
  383. "Z": () => (/* binding */ QuranWord_GlyphWord)
  384. });
  385. // EXTERNAL MODULE: external "react/jsx-runtime"
  386. var jsx_runtime_ = __webpack_require__(20997);
  387. // EXTERNAL MODULE: external "classnames"
  388. var external_classnames_ = __webpack_require__(59003);
  389. var external_classnames_default = /*#__PURE__*/__webpack_require__.n(external_classnames_);
  390. // EXTERNAL MODULE: external "react-redux"
  391. var external_react_redux_ = __webpack_require__(6022);
  392. // EXTERNAL MODULE: ./src/components/dls/QuranWord/GlyphWord.module.scss
  393. var GlyphWord_module = __webpack_require__(26864);
  394. var GlyphWord_module_default = /*#__PURE__*/__webpack_require__.n(GlyphWord_module);
  395. // EXTERNAL MODULE: ./src/redux/slices/QuranReader/styles.ts
  396. var styles = __webpack_require__(62093);
  397. // EXTERNAL MODULE: ./src/utils/isClient.ts
  398. var utils_isClient = __webpack_require__(7522);
  399. ;// CONCATENATED MODULE: ./src/utils/device-detector.ts
  400. const isMacOs = ()=>{
  401. if (!isClient) {
  402. return false;
  403. }
  404. return window.navigator.userAgent.search("Mac") !== -1;
  405. };
  406. const isAppleDevice = ()=>{
  407. if (!isClient) {
  408. return false;
  409. }
  410. const isOSX = /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform);
  411. return isOSX || isMacOs();
  412. };
  413. const isAppleWebKit = ()=>{
  414. const { userAgent } = navigator;
  415. return /AppleWebKit/.test(userAgent) && /Mobile/.test(userAgent);
  416. };
  417. const isFirefox = ()=>{
  418. if (!utils_isClient/* default */.Z) {
  419. return false;
  420. }
  421. const { userAgent } = navigator;
  422. return userAgent.toLowerCase().includes("firefox");
  423. };
  424. // EXTERNAL MODULE: ./src/utils/fontFaceHelper.ts
  425. var fontFaceHelper = __webpack_require__(64198);
  426. // EXTERNAL MODULE: ./types/QuranReader.ts
  427. var QuranReader = __webpack_require__(50467);
  428. ;// CONCATENATED MODULE: ./src/components/dls/QuranWord/GlyphWord.tsx
  429. /* eslint-disable react/no-danger */
  430. /**
  431. * Get the text of the verse's word. This is used to show textUthmani as a fallback
  432. * until V1/V2 font faces of the current word's page (e.g. p1-v1 or p50-v2) has finished downloading.
  433. *
  434. * @param {string} qpcUthmaniHafs
  435. * @param {string} textCodeV1
  436. * @param {string} textCodeV2
  437. * @param {QuranFont} font
  438. * @param {boolean} isFontLoaded
  439. * @returns {string}
  440. */ const getWordText = (qpcUthmaniHafs, textCodeV1, textCodeV2, font, isFontLoaded)=>{
  441. if (!isFontLoaded) {
  442. return qpcUthmaniHafs;
  443. }
  444. return font === QuranReader/* QuranFont.MadaniV1 */.fr.MadaniV1 ? textCodeV1 : textCodeV2;
  445. };
  446. const GlyphWord = ({ qpcUthmaniHafs , textCodeV1 , textCodeV2 , pageNumber , font , isFontLoaded })=>{
  447. const { quranTextFontScale , mushafLines } = (0,external_react_redux_.useSelector)(styles/* selectQuranReaderStyles */.Pt, external_react_redux_.shallowEqual);
  448. // The extra space before the glyph should only be added where the issue occurs,
  449. // which is in firefox with the Madani V1 Mushaf and the font scale is less than 6
  450. const addExtraSpace = isFirefox() && font === QuranReader/* QuranFont.MadaniV1 */.fr.MadaniV1 && quranTextFontScale < 6;
  451. return /*#__PURE__*/ jsx_runtime_.jsx("span", {
  452. dangerouslySetInnerHTML: {
  453. __html: `${addExtraSpace ? ` ` : ``}${getWordText(qpcUthmaniHafs, textCodeV1, textCodeV2, font, isFontLoaded)}`
  454. },
  455. "data-font-scale": quranTextFontScale,
  456. "data-font": font,
  457. className: external_classnames_default()((GlyphWord_module_default()).styledWord, {
  458. [(GlyphWord_module_default()).wordSpacing]: addExtraSpace,
  459. [(GlyphWord_module_default()).fallbackText]: !isFontLoaded,
  460. [(GlyphWord_module_default())[(0,fontFaceHelper/* getFontClassName */.bZ)(QuranReader/* FALLBACK_FONT */.v3, quranTextFontScale, mushafLines, true)]]: !isFontLoaded
  461. }),
  462. ...isFontLoaded && {
  463. style: {
  464. fontFamily: `p${pageNumber}-${font.replace("code_", "")}`
  465. }
  466. }
  467. });
  468. };
  469. /* harmony default export */ const QuranWord_GlyphWord = (GlyphWord);
  470. /***/ }),
  471. /***/ 28542:
  472. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  473. "use strict";
  474. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  475. /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
  476. /* harmony export */ });
  477. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20997);
  478. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
  479. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(16689);
  480. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
  481. /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(59003);
  482. /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__);
  483. /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6022);
  484. /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_3__);
  485. /* harmony import */ var _TajweedWordImage_module_scss__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(12464);
  486. /* harmony import */ var _TajweedWordImage_module_scss__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_TajweedWordImage_module_scss__WEBPACK_IMPORTED_MODULE_5__);
  487. /* harmony import */ var _redux_slices_QuranReader_styles__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(62093);
  488. /* harmony import */ var _utils_cdn__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(17339);
  489. /* eslint-disable @next/next/no-img-element */
  490. const FONT_SIZE_CLASS_MAP = {
  491. 1: (_TajweedWordImage_module_scss__WEBPACK_IMPORTED_MODULE_5___default().xs),
  492. 2: (_TajweedWordImage_module_scss__WEBPACK_IMPORTED_MODULE_5___default().sm),
  493. 3: (_TajweedWordImage_module_scss__WEBPACK_IMPORTED_MODULE_5___default().md),
  494. 4: (_TajweedWordImage_module_scss__WEBPACK_IMPORTED_MODULE_5___default().lg),
  495. 5: (_TajweedWordImage_module_scss__WEBPACK_IMPORTED_MODULE_5___default().xl),
  496. 6: (_TajweedWordImage_module_scss__WEBPACK_IMPORTED_MODULE_5___default().xl2),
  497. 7: (_TajweedWordImage_module_scss__WEBPACK_IMPORTED_MODULE_5___default().xl3),
  498. 8: (_TajweedWordImage_module_scss__WEBPACK_IMPORTED_MODULE_5___default().xl4),
  499. 9: (_TajweedWordImage_module_scss__WEBPACK_IMPORTED_MODULE_5___default().xl5),
  500. 10: (_TajweedWordImage_module_scss__WEBPACK_IMPORTED_MODULE_5___default().xl6)
  501. };
  502. const TajweedWord = ({ path , alt })=>{
  503. const { quranTextFontScale } = (0,react_redux__WEBPACK_IMPORTED_MODULE_3__.useSelector)(_redux_slices_QuranReader_styles__WEBPACK_IMPORTED_MODULE_4__/* .selectQuranReaderStyles */ .Pt);
  504. return /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("span", {
  505. className: classnames__WEBPACK_IMPORTED_MODULE_2___default()((_TajweedWordImage_module_scss__WEBPACK_IMPORTED_MODULE_5___default().imageContainer), FONT_SIZE_CLASS_MAP[quranTextFontScale]),
  506. children: /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("img", {
  507. src: `${(0,_utils_cdn__WEBPACK_IMPORTED_MODULE_6__/* .makeCDNUrl */ .Kr)(`images/${path}`)}`,
  508. alt: alt
  509. })
  510. });
  511. };
  512. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TajweedWord);
  513. /***/ }),
  514. /***/ 72816:
  515. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  516. "use strict";
  517. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  518. /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
  519. /* harmony export */ });
  520. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20997);
  521. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
  522. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(16689);
  523. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
  524. /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(59003);
  525. /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__);
  526. /* harmony import */ var humps__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(59606);
  527. /* harmony import */ var humps__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(humps__WEBPACK_IMPORTED_MODULE_3__);
  528. /* harmony import */ var _TextWord_module_scss__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(23975);
  529. /* harmony import */ var _TextWord_module_scss__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_TextWord_module_scss__WEBPACK_IMPORTED_MODULE_5__);
  530. /* harmony import */ var types_Word__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(42217);
  531. const DEFAULT_FONT_FAMILY = "UthmanicHafs";
  532. const INDO_PAK = "IndoPak";
  533. const UTHMANI_HAFS_FONTS = (0,humps__WEBPACK_IMPORTED_MODULE_3__.decamelizeKeys)({
  534. qpcUthmaniHafs: DEFAULT_FONT_FAMILY,
  535. textIndopak: INDO_PAK
  536. });
  537. const TextWord = ({ text , font , charType })=>/*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("span", {
  538. className: classnames__WEBPACK_IMPORTED_MODULE_2___default()((_TextWord_module_scss__WEBPACK_IMPORTED_MODULE_5___default().word), {
  539. [(_TextWord_module_scss__WEBPACK_IMPORTED_MODULE_5___default())[DEFAULT_FONT_FAMILY]]: charType === types_Word__WEBPACK_IMPORTED_MODULE_4__/* .CharType.End */ .H.End || !UTHMANI_HAFS_FONTS[font] || UTHMANI_HAFS_FONTS[font] === DEFAULT_FONT_FAMILY,
  540. [(_TextWord_module_scss__WEBPACK_IMPORTED_MODULE_5___default())[INDO_PAK]]: UTHMANI_HAFS_FONTS[font] === INDO_PAK
  541. }),
  542. children: text
  543. });
  544. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TextWord);
  545. /***/ }),
  546. /***/ 38102:
  547. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  548. "use strict";
  549. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  550. /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
  551. /* harmony export */ });
  552. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(16689);
  553. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
  554. /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6022);
  555. /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_1__);
  556. /* harmony import */ var _redux_slices_QuranReader_font_faces__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(25742);
  557. /* harmony import */ var _utils_array__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(5639);
  558. /* harmony import */ var _utils_fontFaceHelper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(64198);
  559. /* harmony import */ var types_QuranReader__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(50467);
  560. /**
  561. * This hook manually request the browser to download the font for each page
  562. * of QCF's V1 and V2 Mushafs. After each resource has been downloaded, we
  563. * store it in redux so that VerseText can use it to determine whether the fallback
  564. * text and font should be font or not.
  565. *
  566. * Notes, loaded font is reset every time the user switch the font
  567. * see src/components/Navbar/SettingsDrawer/QuranFontSection.tsx
  568. *
  569. * @param {QuranFont} quranFont
  570. * @param {Verse[]} verses
  571. */ const useQcfFont = (quranFont, verses)=>{
  572. const currentlyFetchingFonts = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)([]);
  573. const dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useDispatch)();
  574. const isFontQCF = (0,_utils_fontFaceHelper__WEBPACK_IMPORTED_MODULE_3__/* .isQCFFont */ .Fy)(quranFont);
  575. const loadedFonts = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(_redux_slices_QuranReader_font_faces__WEBPACK_IMPORTED_MODULE_2__/* .selectLoadedFontFaces */ .$Z);
  576. const onFontLoaded = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((fontFace)=>{
  577. dispatch((0,_redux_slices_QuranReader_font_faces__WEBPACK_IMPORTED_MODULE_2__/* .addLoadedFontFace */ .wC)(fontFace));
  578. }, [
  579. dispatch
  580. ]);
  581. // listen to changes in verses (this is due to infinite scrolling fetching more verses).
  582. (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{
  583. if (isFontQCF && verses.length > 0) {
  584. // loop through unique page numbers of the current verses
  585. (0,_utils_fontFaceHelper__WEBPACK_IMPORTED_MODULE_3__/* .getPagesByVerses */ .AX)(verses).forEach((pageNumber)=>{
  586. const isV1 = quranFont === types_QuranReader__WEBPACK_IMPORTED_MODULE_4__/* .QuranFont.MadaniV1 */ .fr.MadaniV1;
  587. const fontFaceName = (0,_utils_fontFaceHelper__WEBPACK_IMPORTED_MODULE_3__/* .getFontFaceNameForPage */ .r$)(isV1, pageNumber);
  588. const fontFace = new FontFace(fontFaceName, (0,_utils_fontFaceHelper__WEBPACK_IMPORTED_MODULE_3__/* .getV1OrV2FontFaceSource */ .nA)(isV1, pageNumber));
  589. // we only want to load fonts that were not loaded and also are not currently being loaded
  590. if (!currentlyFetchingFonts.current.includes(fontFaceName) && !loadedFonts.includes(fontFaceName)) {
  591. currentlyFetchingFonts.current = [
  592. ...currentlyFetchingFonts.current,
  593. fontFaceName
  594. ];
  595. fontFace.display = "block";
  596. document.fonts.add(fontFace);
  597. // load the font-face programmatically
  598. fontFace.load().then(()=>{
  599. // store the font face in Redux slice
  600. onFontLoaded(fontFaceName);
  601. }).finally(()=>{
  602. // whether we failed or succeeded to fetch the fontFace, we remove it from currently fetching array
  603. currentlyFetchingFonts.current = (0,_utils_array__WEBPACK_IMPORTED_MODULE_5__/* .removeItemFromArray */ .sj)(fontFaceName, currentlyFetchingFonts.current);
  604. });
  605. }
  606. });
  607. }
  608. }, [
  609. quranFont,
  610. verses,
  611. loadedFonts,
  612. isFontQCF,
  613. currentlyFetchingFonts,
  614. onFontLoaded
  615. ]);
  616. };
  617. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useQcfFont);
  618. /***/ }),
  619. /***/ 17339:
  620. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  621. "use strict";
  622. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  623. /* harmony export */ "Kr": () => (/* binding */ makeCDNUrl)
  624. /* harmony export */ });
  625. /* unused harmony exports CDN_HOST, CDN_ASSETS_VERSION */
  626. const CDN_HOST = "https://static.qurancdn.com";
  627. const CDN_ASSETS_VERSION = "1";
  628. /**
  629. * Generate versioned URL of static asset
  630. *
  631. * @param {string} path the path of static asset
  632. * @returns {string}
  633. */ const makeCDNUrl = (path)=>{
  634. return `${CDN_HOST}/${path}?v=${CDN_ASSETS_VERSION}`;
  635. };
  636. /***/ }),
  637. /***/ 64198:
  638. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  639. "use strict";
  640. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  641. /* harmony export */ "AX": () => (/* binding */ getPagesByVerses),
  642. /* harmony export */ "Fy": () => (/* binding */ isQCFFont),
  643. /* harmony export */ "bZ": () => (/* binding */ getFontClassName),
  644. /* harmony export */ "nA": () => (/* binding */ getV1OrV2FontFaceSource),
  645. /* harmony export */ "oj": () => (/* binding */ getLineWidthClassName),
  646. /* harmony export */ "r$": () => (/* binding */ getFontFaceNameForPage)
  647. /* harmony export */ });
  648. /* harmony import */ var lodash_range__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64042);
  649. /* harmony import */ var lodash_range__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_range__WEBPACK_IMPORTED_MODULE_0__);
  650. /* harmony import */ var types_QuranReader__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50467);
  651. const QCFFontCodes = [
  652. types_QuranReader__WEBPACK_IMPORTED_MODULE_1__/* .QuranFont.MadaniV1 */ .fr.MadaniV1,
  653. types_QuranReader__WEBPACK_IMPORTED_MODULE_1__/* .QuranFont.MadaniV2 */ .fr.MadaniV2
  654. ];
  655. const isQCFFont = (font)=>QCFFontCodes.includes(font);
  656. /**
  657. * Get the page numbers of a group of verses by getting
  658. * the page number of the first verse, the page number of the last verse
  659. * and generating the range between both of them.
  660. *
  661. * @param {Verse[]} verses
  662. * @returns {number[]}
  663. */ const getPagesByVerses = (verses)=>{
  664. const firstPage = verses[0].pageNumber;
  665. const lastPage = verses[verses.length - 1].pageNumber;
  666. return lodash_range__WEBPACK_IMPORTED_MODULE_0___default()(firstPage, lastPage + 1);
  667. };
  668. /**
  669. * A function that will return the value of the src of QCF's font V1 and V2.
  670. * This will be used when we create a new instance of FontFace inside useQcfFont
  671. * hook.
  672. *
  673. * @param {boolean} isV1
  674. * @param {number} pageNumber
  675. * @returns {string}
  676. */ const getV1OrV2FontFaceSource = (isV1, pageNumber)=>{
  677. const pageName = String(pageNumber).padStart(3, "0");
  678. if (isV1) {
  679. const woff2 = `/fonts/quran/hafs/v1/woff2/p${pageNumber}.woff2`;
  680. const woff = `/fonts/quran/hafs/v1/woff/p${pageNumber}.woff`;
  681. const ttf = `/fonts/quran/hafs/v1/ttf/p${pageNumber}.ttf`;
  682. return `local(QCF_P${pageName}), url('${woff2}') format('woff2'), url('${woff}') format('woff'), url('${ttf}') format('truetype')`;
  683. }
  684. const woff21 = `/fonts/quran/hafs/v2/woff2/p${pageNumber}.woff2`;
  685. const woff1 = `/fonts/quran/hafs/v2/woff/p${pageNumber}.woff`;
  686. const ttf1 = `/fonts/quran/hafs/v2/ttf/p${pageNumber}.ttf`;
  687. return `local(QCF2${pageName}), url('${woff21}') format('woff2'), url('${woff1}') format('woff'), url('${ttf1}') format('truetype')`;
  688. };
  689. /**
  690. * A function that will return the value of the font-face of QCF's font V1 and V2.
  691. * This will be used when we create a new instance of FontFace inside useQcfFont
  692. * hook.
  693. *
  694. * @param {boolean} isV1
  695. * @param {number} pageNumber
  696. * @returns {string}
  697. */ const getFontFaceNameForPage = (isV1, pageNumber)=>isV1 ? `p${pageNumber}-v1` : `p${pageNumber}-v2`;
  698. /**
  699. * Dynamically generate the className of the combination between the font
  700. * name + size + mushafLines(when its Indopak) that will match the output of
  701. * generate-font-scales function inside {@see _utility.scss}.
  702. *
  703. * @param {QuranFont} quranFont
  704. * @param {number} fontScale
  705. * @param {MushafLines} mushafLines
  706. * @param {boolean} isFallbackFont
  707. * @returns {string}
  708. */ const getFontClassName = (quranFont, fontScale, mushafLines, isFallbackFont = false)=>{
  709. if (quranFont === types_QuranReader__WEBPACK_IMPORTED_MODULE_1__/* .QuranFont.IndoPak */ .fr.IndoPak) {
  710. return `${quranFont}_${mushafLines}-font-size-${fontScale}`;
  711. }
  712. return isFallbackFont ? `fallback_${quranFont}-font-size-${fontScale}` : `${quranFont}-font-size-${fontScale}`;
  713. };
  714. /**
  715. * Dynamically generate the className of the combination between the font
  716. * name + size that will match the output of
  717. * generate-font-scales function inside {@see _utility.scss}.
  718. *
  719. * @param {QuranFont} quranFont
  720. * @param {number} fontScale
  721. * @param {MushafLines} mushafLines
  722. * @param {boolean} isFallbackFont
  723. * @returns {string}
  724. */ const getLineWidthClassName = (quranFont, fontScale, mushafLines, isFallbackFont = false)=>{
  725. if (quranFont === types_QuranReader__WEBPACK_IMPORTED_MODULE_1__/* .QuranFont.IndoPak */ .fr.IndoPak) {
  726. return `${quranFont}_${mushafLines}-line-width-${fontScale}`;
  727. }
  728. return isFallbackFont ? `fallback_${quranFont}-line-width-${fontScale}` : `${quranFont}-line-width-${fontScale}`;
  729. };
  730. /***/ }),
  731. /***/ 42217:
  732. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  733. "use strict";
  734. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  735. /* harmony export */ "H": () => (/* binding */ CharType)
  736. /* harmony export */ });
  737. var CharType;
  738. (function(CharType) {
  739. CharType["Word"] = "word";
  740. CharType["End"] = "end";
  741. CharType["Pause"] = "pause";
  742. CharType["Sajdah"] = "sajdah";
  743. CharType["RubElHizb"] = "rub-el-hizb";
  744. })(CharType || (CharType = {}));
  745. /***/ })
  746. };
  747. ;
  748. //# sourceMappingURL=57072.js.map